summaryrefslogtreecommitdiffstats
path: root/Swift
diff options
context:
space:
mode:
Diffstat (limited to 'Swift')
-rw-r--r--Swift/Controllers/EventController.cpp1
-rw-r--r--Swift/Controllers/EventController.h1
-rw-r--r--Swift/Controllers/MainController.cpp6
-rw-r--r--Swift/Controllers/MainController.h5
-rw-r--r--Swift/Controllers/Makefile.inc1
-rw-r--r--Swift/Controllers/SoundEventController.cpp21
-rw-r--r--Swift/Controllers/SoundEventController.h18
-rw-r--r--Swift/Controllers/SoundPlayer.h10
-rw-r--r--Swift/QtUI/Makefile.inc2
-rw-r--r--Swift/QtUI/QtSoundPlayer.cpp29
-rw-r--r--Swift/QtUI/QtSoundPlayer.h21
-rw-r--r--Swift/QtUI/QtSwift.cpp5
-rw-r--r--Swift/QtUI/QtSwift.h2
-rw-r--r--Swift/QtUI/Swift.pro10
-rw-r--r--Swift/QtUI/Swift.qrc13
-rw-r--r--Swift/resources/MacOSX/Swift.icnsbin0 -> 93469 bytes
-rw-r--r--Swift/resources/Windows/Swift.icobin0 -> 33766 bytes
-rw-r--r--Swift/resources/Windows/Swift.rc1
-rw-r--r--Swift/resources/icons/avatar.pngbin0 -> 1003 bytes
-rw-r--r--Swift/resources/icons/certificate.pngbin0 -> 4494 bytes
-rwxr-xr-xSwift/resources/icons/error.pngbin0 -> 610 bytes
-rw-r--r--Swift/resources/icons/new-chat.pngbin0 -> 2207 bytes
-rw-r--r--Swift/resources/icons/tray-standard.pngbin0 -> 1003 bytes
-rw-r--r--Swift/resources/logo/coming-soon.svg130
-rw-r--r--Swift/resources/logo/logo-icon-128.pngbin0 -> 4351 bytes
-rw-r--r--Swift/resources/logo/logo-icon-512.pngbin0 -> 19879 bytes
-rw-r--r--Swift/resources/logo/logo-icon-64.pngbin0 -> 2276 bytes
-rw-r--r--Swift/resources/logo/logo-icon.svg109
-rw-r--r--Swift/resources/logo/logo-original.svg69
-rw-r--r--Swift/resources/logo/logo-shaded-text.256.pngbin0 -> 18541 bytes
-rw-r--r--Swift/resources/logo/logo-shaded-text.svg119
-rw-r--r--Swift/resources/logo/logo.svg69
-rw-r--r--Swift/resources/sounds/message-received.wavbin0 -> 8954 bytes
-rwxr-xr-xSwift/resources/themes/Default/Demo.html91
-rwxr-xr-xSwift/resources/themes/Default/Header.html5
-rwxr-xr-xSwift/resources/themes/Default/Incoming/Content.html30
-rwxr-xr-xSwift/resources/themes/Default/Incoming/Context.html30
-rwxr-xr-xSwift/resources/themes/Default/Incoming/NextContent.html10
-rwxr-xr-xSwift/resources/themes/Default/Incoming/NextContext.html7
-rw-r--r--Swift/resources/themes/Default/Incoming/buddy_icon.pngbin0 -> 14235 bytes
-rw-r--r--Swift/resources/themes/Default/LICENSE.txt15
-rwxr-xr-xSwift/resources/themes/Default/Outgoing/Content.html30
-rwxr-xr-xSwift/resources/themes/Default/Outgoing/Context.html31
-rwxr-xr-xSwift/resources/themes/Default/Outgoing/NextContent.html9
-rwxr-xr-xSwift/resources/themes/Default/Outgoing/NextContext.html6
-rw-r--r--Swift/resources/themes/Default/Outgoing/buddy_icon.pngbin0 -> 14235 bytes
-rwxr-xr-xSwift/resources/themes/Default/Status.html27
-rwxr-xr-xSwift/resources/themes/Default/Template.html366
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Green Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Green No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Green No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Green.css90
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Red Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Red No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Red No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Red.css89
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Steel Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Steel No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Steel No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Steel.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Yellow Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Yellow No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Yellow No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Blue on Yellow.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Blue Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Blue No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Blue No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Blue.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Red Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Red No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Red No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Red.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Steel Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Steel No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Steel No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Steel.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Yellow Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Yellow No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Yellow No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Green on Yellow.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Blue Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Blue No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Blue No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Blue.css90
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Green Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Green No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Green No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Green.css95
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Steel Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Steel No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Steel No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Steel.css93
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Yellow Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Yellow No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Yellow No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Red on Yellow.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Blue Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Blue No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Blue No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Blue.css92
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Green Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Green No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Green No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Green.css97
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Red Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Red No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Red No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Red.css89
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Yellow Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Yellow No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Yellow No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Steel on Yellow.css92
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Blue Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Blue No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Blue No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Blue.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Green Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Green No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Green No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Green.css96
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Red Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Red No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Red No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Red.css91
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Steel Alternating.css7
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Steel No Names Alt.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Steel No Names.css2
-rw-r--r--Swift/resources/themes/Default/Variants/Yellow on Steel.css91
-rw-r--r--Swift/resources/themes/Default/alternating.css16
-rwxr-xr-xSwift/resources/themes/Default/images/DummyContact.pngbin0 -> 754 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/alert.pngbin0 -> 5305 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/blueBackground.gifbin0 -> 198 bytes
-rw-r--r--Swift/resources/themes/Default/images/blueBackground.pngbin0 -> 165 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/blueCurves.gifbin0 -> 3320 bytes
-rw-r--r--Swift/resources/themes/Default/images/blueCurves.pngbin0 -> 1218 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/blueIndicator.gifbin0 -> 536 bytes
-rw-r--r--Swift/resources/themes/Default/images/blueIndicator.pngbin0 -> 370 bytes
-rw-r--r--Swift/resources/themes/Default/images/blueIndicator2.pngbin0 -> 380 bytes
-rw-r--r--Swift/resources/themes/Default/images/blueIndicatorAlt.gifbin0 -> 526 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/greenBackground.gifbin0 -> 117 bytes
-rw-r--r--Swift/resources/themes/Default/images/greenBackground.pngbin0 -> 166 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/greenCurves.gifbin0 -> 3259 bytes
-rw-r--r--Swift/resources/themes/Default/images/greenCurves.pngbin0 -> 1234 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/greenIndicator.gifbin0 -> 530 bytes
-rw-r--r--Swift/resources/themes/Default/images/greenIndicator.pngbin0 -> 334 bytes
-rw-r--r--Swift/resources/themes/Default/images/greenIndicator2.pngbin0 -> 345 bytes
-rw-r--r--Swift/resources/themes/Default/images/greenIndicatorAlt.gifbin0 -> 529 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/redBackground.gifbin0 -> 117 bytes
-rw-r--r--Swift/resources/themes/Default/images/redBackground.pngbin0 -> 160 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/redCurves.gifbin0 -> 2527 bytes
-rw-r--r--Swift/resources/themes/Default/images/redCurves.pngbin0 -> 1194 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/redIndicator.gifbin0 -> 527 bytes
-rw-r--r--Swift/resources/themes/Default/images/redIndicator.pngbin0 -> 410 bytes
-rw-r--r--Swift/resources/themes/Default/images/redIndicator2.pngbin0 -> 402 bytes
-rw-r--r--Swift/resources/themes/Default/images/redIndicatorAlt.gifbin0 -> 527 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/silverBackground.gifbin0 -> 117 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/silverCurves.gifbin0 -> 2778 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/steelBackground.gifbin0 -> 122 bytes
-rw-r--r--Swift/resources/themes/Default/images/steelBackground.pngbin0 -> 156 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/steelCurves.gifbin0 -> 2169 bytes
-rw-r--r--Swift/resources/themes/Default/images/steelCurves.pngbin0 -> 1179 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/steelHeading.jpgbin0 -> 321 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/steelIndicator.gifbin0 -> 328 bytes
-rw-r--r--Swift/resources/themes/Default/images/steelIndicator.pngbin0 -> 375 bytes
-rw-r--r--Swift/resources/themes/Default/images/steelIndicator2.pngbin0 -> 392 bytes
-rw-r--r--Swift/resources/themes/Default/images/steelIndicatorAlt.gifbin0 -> 326 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/typing-left.pngbin0 -> 1702 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/typing-right.pngbin0 -> 1710 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/yellowBackground.gifbin0 -> 117 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowBackground.pngbin0 -> 162 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/yellowCurves.gifbin0 -> 3202 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowCurves.pngbin0 -> 1200 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/yellowHeading.jpgbin0 -> 1447 bytes
-rwxr-xr-xSwift/resources/themes/Default/images/yellowIndicator.gifbin0 -> 532 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowIndicator.pngbin0 -> 380 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowIndicator2.pngbin0 -> 400 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowIndicatorAlt.gifbin0 -> 931 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowTL.pngbin0 -> 326 bytes
-rw-r--r--Swift/resources/themes/Default/images/yellowTR.pngbin0 -> 364 bytes
-rwxr-xr-xSwift/resources/themes/Default/incoming_icon.pngbin0 -> 23643 bytes
-rwxr-xr-xSwift/resources/themes/Default/main.css292
-rw-r--r--Swift/resources/themes/Default/noname.css3
-rwxr-xr-xSwift/resources/themes/Default/outgoing_icon.pngbin0 -> 23643 bytes
183 files changed, 3649 insertions, 14 deletions
diff --git a/Swift/Controllers/EventController.cpp b/Swift/Controllers/EventController.cpp
index 9b143dd..5141cc1 100644
--- a/Swift/Controllers/EventController.cpp
+++ b/Swift/Controllers/EventController.cpp
@@ -10,6 +10,7 @@ void EventController::handleIncomingEvent(boost::shared_ptr<MessageEvent> event)
events_.push_back(event);
event->onRead.connect(boost::bind(&EventController::handleEventRead, this, event));
onEventQueueLengthChange(events_.size());
+ onEventQueueEventAdded(event);
}
}
diff --git a/Swift/Controllers/EventController.h b/Swift/Controllers/EventController.h
index ab161af..c5c924b 100644
--- a/Swift/Controllers/EventController.h
+++ b/Swift/Controllers/EventController.h
@@ -13,6 +13,7 @@ namespace Swift {
public:
void handleIncomingEvent(boost::shared_ptr<MessageEvent> event);
boost::signal<void (int)> onEventQueueLengthChange;
+ boost::signal<void (boost::shared_ptr<MessageEvent>)> onEventQueueEventAdded;
private:
void handleEventRead(boost::shared_ptr<MessageEvent> event);
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp
index 63b55af..1af689c 100644
--- a/Swift/Controllers/MainController.cpp
+++ b/Swift/Controllers/MainController.cpp
@@ -17,6 +17,8 @@
#include "Swift/Controllers/MUCController.h"
#include "Swift/Controllers/NickResolver.h"
#include "Swift/Controllers/RosterController.h"
+#include "Swift/Controllers/SoundEventController.h"
+#include "Swift/Controllers/SoundPlayer.h"
#include "Swift/Controllers/SystemTray.h"
#include "Swift/Controllers/SystemTrayController.h"
#include "Swift/Controllers/XMPPRosterController.h"
@@ -57,7 +59,7 @@ static const String CLIENT_NODE = "http://swift.im";
typedef std::pair<JID, ChatController*> JIDChatControllerPair;
typedef std::pair<JID, MUCController*> JIDMUCControllerPair;
-MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray)
+MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer)
: client_(NULL), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), loginWindowFactory_(loginWindowFactory), treeWidgetFactory_(treeWidgetFactory), settings_(settings),
xmppRosterController_(NULL), rosterController_(NULL), loginWindow_(NULL), clientVersionResponder_(NULL), nickResolver_(NULL), discoResponder_(NULL),
serverDiscoInfo_(new DiscoInfo()), presenceOracle_(NULL), avatarManager_(NULL) {
@@ -68,6 +70,7 @@ MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowF
eventController_ = new EventController();
eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1));
systemTrayController_ = new SystemTrayController(eventController_, systemTray);
+ soundEventController_ = new SoundEventController(eventController_, soundPlayer);
loginWindow_ = loginWindowFactory_->createLoginWindow(settings->getStringSetting("jid"), settings->getStringSetting("pass"), settings->getStringSetting("certificate"));
loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4));
}
@@ -88,6 +91,7 @@ MainController::~MainController() {
delete nickResolver_;
delete client_;
delete systemTrayController_;
+ delete soundEventController_;
delete avatarStorage_;
}
diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h
index 2b7c8b0..1fd7c4c 100644
--- a/Swift/Controllers/MainController.h
+++ b/Swift/Controllers/MainController.h
@@ -40,10 +40,12 @@ namespace Swift {
class PresenceOracle;
class SystemTray;
class SystemTrayController;
+ class SoundEventController;
+ class SoundPlayer;
class MainController : public MUCRegistry {
public:
- MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray);
+ MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer);
~MainController();
@@ -90,6 +92,7 @@ namespace Swift {
JID jid_;
PresenceOracle* presenceOracle_;
SystemTrayController* systemTrayController_;
+ SoundEventController* soundEventController_;
AvatarManager* avatarManager_;
boost::shared_ptr<Presence> lastSentPresence_;
String vCardPhotoHash_;
diff --git a/Swift/Controllers/Makefile.inc b/Swift/Controllers/Makefile.inc
index 5e30a63..4c69e34 100644
--- a/Swift/Controllers/Makefile.inc
+++ b/Swift/Controllers/Makefile.inc
@@ -7,6 +7,7 @@ SWIFT_CONTROLLERS_SOURCES += \
Swift/Controllers/XMPPRosterController.cpp \
Swift/Controllers/MUCController.cpp \
Swift/Controllers/EventController.cpp \
+ Swift/Controllers/SoundEventController.cpp \
Swift/Controllers/SystemTrayController.cpp
include Swift/Controllers/UnitTest/Makefile.inc
diff --git a/Swift/Controllers/SoundEventController.cpp b/Swift/Controllers/SoundEventController.cpp
new file mode 100644
index 0000000..46d6ddb
--- /dev/null
+++ b/Swift/Controllers/SoundEventController.cpp
@@ -0,0 +1,21 @@
+#include "Swift/Controllers/SoundEventController.h"
+
+#include <boost/bind.hpp>
+
+#include "Swift/Controllers/EventController.h"
+#include "Swift/Controllers/SoundPlayer.h"
+
+namespace Swift {
+
+SoundEventController::SoundEventController(EventController* eventController, SoundPlayer* soundPlayer) {
+ eventController_ = eventController;
+ soundPlayer_ = soundPlayer;
+ eventController_->onEventQueueEventAdded.connect(boost::bind(&SoundEventController::handleEventQueueEventAdded, this, _1));
+}
+
+void SoundEventController::handleEventQueueEventAdded(boost::shared_ptr<MessageEvent> event) {
+ soundPlayer_->playSound(SoundPlayer::MessageReceived);
+}
+
+
+}
diff --git a/Swift/Controllers/SoundEventController.h b/Swift/Controllers/SoundEventController.h
new file mode 100644
index 0000000..8da057d
--- /dev/null
+++ b/Swift/Controllers/SoundEventController.h
@@ -0,0 +1,18 @@
+#pragma once
+
+#include <boost/shared_ptr.hpp>
+
+#include "Swiften/Events/MessageEvent.h"
+
+namespace Swift {
+ class EventController;
+ class SoundPlayer;
+ class SoundEventController {
+ public:
+ SoundEventController(EventController* eventController, SoundPlayer* soundPlayer);
+ private:
+ void handleEventQueueEventAdded(boost::shared_ptr<MessageEvent> event);
+ EventController* eventController_;
+ SoundPlayer* soundPlayer_;
+ };
+}
diff --git a/Swift/Controllers/SoundPlayer.h b/Swift/Controllers/SoundPlayer.h
new file mode 100644
index 0000000..b411f24
--- /dev/null
+++ b/Swift/Controllers/SoundPlayer.h
@@ -0,0 +1,10 @@
+#pragma once
+
+namespace Swift {
+ class SoundPlayer {
+ public:
+ virtual ~SoundPlayer() {};
+ enum SoundEffect{MessageReceived};
+ virtual void playSound(SoundEffect sound) = 0;
+ };
+}
diff --git a/Swift/QtUI/Makefile.inc b/Swift/QtUI/Makefile.inc
index 8b0ab30..3ec32d7 100644
--- a/Swift/QtUI/Makefile.inc
+++ b/Swift/QtUI/Makefile.inc
@@ -25,4 +25,4 @@ Swift/QtUI/Swiften.pri:
cd Swift/QtUI && ./qmakeish.py ../../Makefile > Swiften.pri
Swift/QtUI/DefaultTheme.qrc:
- cd Swift/QtUI && ../../tools/ThemeQRC.py ../../resources/themes/Default > DefaultTheme.qrc
+ cd Swift/QtUI && ../../tools/ThemeQRC.py ../resources/themes/Default > DefaultTheme.qrc
diff --git a/Swift/QtUI/QtSoundPlayer.cpp b/Swift/QtUI/QtSoundPlayer.cpp
new file mode 100644
index 0000000..937d077
--- /dev/null
+++ b/Swift/QtUI/QtSoundPlayer.cpp
@@ -0,0 +1,29 @@
+#include "QtSoundPlayer.h"
+
+#include <phonon/MediaObject>
+#include <phonon/AudioOutput>
+
+namespace Swift{
+
+QtSoundPlayer::QtSoundPlayer() {
+ audioOutput_ = new Phonon::AudioOutput(Phonon::NotificationCategory);
+
+ messageReceived_ = new Phonon::MediaObject();
+ messageReceived_->setCurrentSource(Phonon::MediaSource(":/sounds/messageReceived.wav"));
+ Phonon::Path path = Phonon::createPath(messageReceived_, audioOutput_);
+}
+
+QtSoundPlayer::~QtSoundPlayer() {
+ delete messageReceived_;
+ delete audioOutput_;
+}
+
+void QtSoundPlayer::playSound(SoundEffect sound) {
+ switch (sound) {
+ case MessageReceived:
+ messageReceived_->play();
+ break;
+ }
+}
+
+} \ No newline at end of file
diff --git a/Swift/QtUI/QtSoundPlayer.h b/Swift/QtUI/QtSoundPlayer.h
new file mode 100644
index 0000000..e0ccf18
--- /dev/null
+++ b/Swift/QtUI/QtSoundPlayer.h
@@ -0,0 +1,21 @@
+#pragma once
+
+#include "Swift/Controllers/SoundPlayer.h"
+
+
+namespace Phonon {
+ class AudioOutput;
+ class MediaObject;
+}
+
+namespace Swift {
+ class QtSoundPlayer : public SoundPlayer{
+ public:
+ QtSoundPlayer();
+ ~QtSoundPlayer();
+ void playSound(SoundEffect sound);
+ private:
+ Phonon::AudioOutput* audioOutput_;
+ Phonon::MediaObject* messageReceived_;
+ };
+}
diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp
index caa3624..e1fac9c 100644
--- a/Swift/QtUI/QtSwift.cpp
+++ b/Swift/QtUI/QtSwift.cpp
@@ -5,6 +5,7 @@
#include "QtMainWindowFactory.h"
#include "QtTreeWidgetFactory.h"
#include "QtSystemTray.h"
+#include "QtSoundPlayer.h"
#include <boost/bind.hpp>
#include <QSplitter>
@@ -30,6 +31,7 @@ QtSwift::QtSwift(bool netbookMode) {
rosterWindowFactory_ = new QtMainWindowFactory(treeWidgetFactory_);
chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_);
systemTray_ = new QtSystemTray();
+ soundPlayer_ = new QtSoundPlayer();
QCoreApplication::setApplicationName("Swift");
QCoreApplication::setOrganizationName("Swift");
QCoreApplication::setOrganizationDomain("swift.im");
@@ -38,7 +40,7 @@ QtSwift::QtSwift(bool netbookMode) {
if (splitter_) {
splitter_->show();
}
- mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_);
+ mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_);
}
QtSwift::~QtSwift() {
@@ -51,6 +53,7 @@ QtSwift::~QtSwift() {
delete application_;
delete systemTray_;
delete splitter_;
+ delete soundPlayer_;
}
}
diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h
index a9b8efb..223316e 100644
--- a/Swift/QtUI/QtSwift.h
+++ b/Swift/QtUI/QtSwift.h
@@ -18,6 +18,7 @@ namespace Swift {
class QtLoginWindowFactory;
class QtTreeWidgetFactory;
class QtSystemTray;
+ class QtSoundPlayer;
class QtSwift : public QObject {
Q_OBJECT
@@ -34,6 +35,7 @@ namespace Swift {
QtSettingsProvider *settings_;
QtSystemTray* systemTray_;
QSplitter* splitter_;
+ QtSoundPlayer* soundPlayer_;
Application* application_;
};
}
diff --git a/Swift/QtUI/Swift.pro b/Swift/QtUI/Swift.pro
index e9579d6..5b9ea72 100644
--- a/Swift/QtUI/Swift.pro
+++ b/Swift/QtUI/Swift.pro
@@ -1,5 +1,5 @@
TEMPLATE = app
-QT += webkit
+QT += webkit phonon
CONFIG += debug
unix:!mac {
TARGET = swift
@@ -34,10 +34,10 @@ win32 {
# Resources
win32 {
- RC_FILE = ../../resources/Windows/Swift.rc
+ RC_FILE = ../resources/Windows/Swift.rc
}
mac {
- ICON = ../../resources/MacOSX/Swift.icns
+ ICON = ../resources/MacOSX/Swift.icns
}
DEFINES += BOOST_SIGNALS_NAMESPACE=bsignals BOOST_ALL_NO_LIB
@@ -59,6 +59,7 @@ HEADERS += \
QtTreeWidgetItem.h \
QtChatView.h \
QtChatTabs.h \
+ QtSoundPlayer.h \
QtSystemTray.h \
QtTabbable.h \
ChatSnippet.h \
@@ -80,6 +81,7 @@ SOURCES += \
QtTreeWidget.cpp \
QtChatView.cpp \
QtChatTabs.cpp \
+ QtSoundPlayer.cpp \
QtSystemTray.cpp \
ChatSnippet.cpp \
MessageSnippet.cpp \
@@ -91,6 +93,6 @@ RESOURCES += Swift.qrc DefaultTheme.qrc
win32 {
DefaultThemeQRC.target = DefaultTheme.qrc
- DefaultThemeQRC.commands = ..\..\tools\ThemeQRC.py ../../resources/themes/Default > DefaultTheme.qrc
+ DefaultThemeQRC.commands = ..\..\tools\ThemeQRC.py ../resources/themes/Default > DefaultTheme.qrc
QMAKE_EXTRA_TARGETS = DefaultThemeQRC
}
diff --git a/Swift/QtUI/Swift.qrc b/Swift/QtUI/Swift.qrc
index 4e3b9df..11794af 100644
--- a/Swift/QtUI/Swift.qrc
+++ b/Swift/QtUI/Swift.qrc
@@ -1,11 +1,12 @@
<!DOCTYPE RCC>
<RCC version="1.0">
<qresource>
- <file alias="logo-shaded-text.256.png">../../resources/logo/logo-shaded-text.256.png</file>
- <file alias="icons/certificate.png">../../resources/icons/certificate.png</file>
- <file alias="icons/error.png">../../resources/icons/error.png</file>
- <file alias="icons/avatar.png">../../resources/icons/avatar.png</file>
- <file alias="icons/tray-standard.png">../../resources/icons/tray-standard.png</file>
- <file alias="icons/new-chat.png">../../resources/icons/new-chat.png</file>
+ <file alias="logo-shaded-text.256.png">../resources/logo/logo-shaded-text.256.png</file>
+ <file alias="icons/certificate.png">../resources/icons/certificate.png</file>
+ <file alias="icons/error.png">../resources/icons/error.png</file>
+ <file alias="icons/avatar.png">../resources/icons/avatar.png</file>
+ <file alias="icons/tray-standard.png">../resources/icons/tray-standard.png</file>
+ <file alias="icons/new-chat.png">../resources/icons/new-chat.png</file>
+ <file alias="sounds/message-received.wav">../resources/sounds/message-received.wav</file>
</qresource>
</RCC>
diff --git a/Swift/resources/MacOSX/Swift.icns b/Swift/resources/MacOSX/Swift.icns
new file mode 100644
index 0000000..09227d0
--- /dev/null
+++ b/Swift/resources/MacOSX/Swift.icns
Binary files differ
diff --git a/Swift/resources/Windows/Swift.ico b/Swift/resources/Windows/Swift.ico
new file mode 100644
index 0000000..7b41da9
--- /dev/null
+++ b/Swift/resources/Windows/Swift.ico
Binary files differ
diff --git a/Swift/resources/Windows/Swift.rc b/Swift/resources/Windows/Swift.rc
new file mode 100644
index 0000000..9e96951
--- /dev/null
+++ b/Swift/resources/Windows/Swift.rc
@@ -0,0 +1 @@
+IDI_ICON1 ICON DISCARDABLE "Swift.ico"
diff --git a/Swift/resources/icons/avatar.png b/Swift/resources/icons/avatar.png
new file mode 100644
index 0000000..00374a6
--- /dev/null
+++ b/Swift/resources/icons/avatar.png
Binary files differ
diff --git a/Swift/resources/icons/certificate.png b/Swift/resources/icons/certificate.png
new file mode 100644
index 0000000..6111b8e
--- /dev/null
+++ b/Swift/resources/icons/certificate.png
Binary files differ
diff --git a/Swift/resources/icons/error.png b/Swift/resources/icons/error.png
new file mode 100755
index 0000000..3d9eca3
--- /dev/null
+++ b/Swift/resources/icons/error.png
Binary files differ
diff --git a/Swift/resources/icons/new-chat.png b/Swift/resources/icons/new-chat.png
new file mode 100644
index 0000000..ca79895
--- /dev/null
+++ b/Swift/resources/icons/new-chat.png
Binary files differ
diff --git a/Swift/resources/icons/tray-standard.png b/Swift/resources/icons/tray-standard.png
new file mode 100644
index 0000000..00374a6
--- /dev/null
+++ b/Swift/resources/icons/tray-standard.png
Binary files differ
diff --git a/Swift/resources/logo/coming-soon.svg b/Swift/resources/logo/coming-soon.svg
new file mode 100644
index 0000000..ce242d3
--- /dev/null
+++ b/Swift/resources/logo/coming-soon.svg
@@ -0,0 +1,130 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09003"
+ height="744"
+ id="svg2459"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logo-website.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-xdpi="60.476555"
+ inkscape:export-ydpi="60.476555"
+ version="1.0">
+ <defs
+ id="defs2461">
+ <linearGradient
+ id="linearGradient4699">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4701" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4703" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4687">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4689" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4691" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2390" />
+ <filter
+ inkscape:collect="always"
+ id="filter3237">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="15.00154"
+ id="feGaussianBlur3239" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0074671"
+ inkscape:cx="375"
+ inkscape:cy="367.42652"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1169"
+ inkscape:window-height="990"
+ inkscape:window-x="275"
+ inkscape:window-y="59" />
+ <metadata
+ id="metadata2464">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="opacity:0.35820899;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82541478px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3237)"
+ d="M 115.78906,165.28485 C 350.10074,221.97501 309.63531,304.49349 212.19531,373.84735 C 164.88631,390.51853 105.57186,410.97398 28.664058,434.5661 C 65.101978,429.72741 98.209468,426.47848 128.03906,424.8161 C 98.134688,440.73611 68.227048,455.00104 42.414058,466.8786 C 101.67266,450.07359 152.5607,435.94556 196.60156,424.0036 C 357.97622,430.8864 369.87302,508.77947 220.75781,659.0036 C 445.02711,532.63072 503.94812,439.58103 370.66406,379.59735 C 439.14989,363.96856 465.05721,361.86643 479.53906,363.2536 C 444.72231,339.57148 420.60352,327.54967 393.66406,325.3161 C 452.90693,238.96094 326.66051,184.93904 115.78906,165.28485 z M 396.16406,338.9411 C 400.59386,338.94111 404.19531,342.54255 404.19531,346.97235 C 404.1953,351.40217 400.59387,354.97235 396.16406,354.97235 C 391.73423,354.97236 388.13281,351.40217 388.13281,346.97235 C 388.1328,342.54255 391.73424,338.9411 396.16406,338.9411 z"
+ id="path2441"
+ transform="matrix(1.2286617,0,0,1.2286617,7.4362342,-159.13251)" />
+ <path
+ style="opacity:0.35820899;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.01415551px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 193.43987,29.75602 C 481.36147,99.41675 431.64004,200.8289 311.89053,286.04717 C 253.7708,306.52764 180.8629,331.63204 86.392721,360.61157 C 131.17019,354.66545 171.87405,350.6743 208.52937,348.63212 C 171.78701,368.19243 135.04064,385.7192 103.3252,400.3127 C 176.12967,379.66626 238.62196,362.34432 292.73109,347.67223 C 491.00482,356.1292 505.62272,451.79506 322.41095,636.36933 C 597.96203,481.09976 670.39442,366.77322 506.63341,293.07357 C 590.77932,273.87108 622.61065,271.32667 640.40395,273.03103 C 597.62594,243.93372 567.99211,229.12458 534.89262,226.38028 C 607.67851,120.28026 452.52778,53.90421 193.43987,29.75602 z M 537.96428,243.1208 C 543.40703,243.12081 547.79357,247.54576 547.79357,252.98849 C 547.79358,258.43124 543.40702,262.85618 537.96428,262.85618 C 532.52154,262.85618 528.09659,258.43124 528.09659,252.98849 C 528.09659,247.54576 532.52153,243.1208 537.96428,243.1208 z"
+ id="path2469" />
+ <text
+ xml:space="preserve"
+ style="font-size:150.20011902px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bodoni SvtyTwo OS ITC TT;-inkscape-font-specification:Bodoni SvtyTwo OS ITC TT"
+ x="38.823608"
+ y="525.9693"
+ id="text4727"
+ sodipodi:linespacing="125%"
+ transform="scale(0.9359712,1.0684089)"><tspan
+ sodipodi:role="line"
+ id="tspan4729"
+ x="38.823608"
+ y="525.9693">Swift</tspan></text>
+ <text
+ xml:space="preserve"
+ style="font-size:58.8051033px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Savoye LET;-inkscape-font-specification:Savoye LET"
+ x="288.1492"
+ y="689.04797"
+ id="text4731"
+ sodipodi:linespacing="125%"
+ transform="scale(0.9692673,1.0317072)"><tspan
+ sodipodi:role="line"
+ id="tspan4733"
+ x="288.1492"
+ y="689.04797">Coming soon ...</tspan></text>
+ </g>
+</svg>
diff --git a/Swift/resources/logo/logo-icon-128.png b/Swift/resources/logo/logo-icon-128.png
new file mode 100644
index 0000000..c6ac4d2
--- /dev/null
+++ b/Swift/resources/logo/logo-icon-128.png
Binary files differ
diff --git a/Swift/resources/logo/logo-icon-512.png b/Swift/resources/logo/logo-icon-512.png
new file mode 100644
index 0000000..b0ccb25
--- /dev/null
+++ b/Swift/resources/logo/logo-icon-512.png
Binary files differ
diff --git a/Swift/resources/logo/logo-icon-64.png b/Swift/resources/logo/logo-icon-64.png
new file mode 100644
index 0000000..4180575
--- /dev/null
+++ b/Swift/resources/logo/logo-icon-64.png
Binary files differ
diff --git a/Swift/resources/logo/logo-icon.svg b/Swift/resources/logo/logo-icon.svg
new file mode 100644
index 0000000..63f1035
--- /dev/null
+++ b/Swift/resources/logo/logo-icon.svg
@@ -0,0 +1,109 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:xlink="http://www.w3.org/1999/xlink"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg2459"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logo-icon.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0"
+ inkscape:export-filename="/Users/remko/src/swift/resources/logo/logo-icon-512.png"
+ inkscape:export-xdpi="369.01999"
+ inkscape:export-ydpi="369.01999">
+ <defs
+ id="defs2461">
+ <linearGradient
+ id="linearGradient3170">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3172" />
+ <stop
+ style="stop-color:#848484;stop-opacity:1;"
+ offset="1"
+ id="stop3174" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient3150">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop3152" />
+ <stop
+ style="stop-color:#ffffff;stop-opacity:1;"
+ offset="1"
+ id="stop3154" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2390" />
+ <linearGradient
+ inkscape:collect="always"
+ xlink:href="#linearGradient3150"
+ id="linearGradient3168"
+ gradientUnits="userSpaceOnUse"
+ x1="80.78746"
+ y1="51.163727"
+ x2="97.685806"
+ y2="0.52999997"
+ gradientTransform="matrix(1.0000709,0,0,0.988411,-4.4862727e-3,1.0545e-2)" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.2312299"
+ inkscape:cx="55.977867"
+ inkscape:cy="65.428676"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="996"
+ inkscape:window-height="701"
+ inkscape:window-x="73"
+ inkscape:window-y="51" />
+ <metadata
+ id="metadata2464">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="fill:url(#linearGradient3168);fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:2.79899999999999993;stroke-linecap:butt;stroke-linejoin:round;stroke-miterlimit:4;stroke-dasharray:none;stroke-opacity:1"
+ d="M 25.809845,1.9255913 C 89.282175,15.936293 78.282839,36.339732 51.874193,53.477403 C 39.049119,57.601261 23.08961,62.615644 2.2144211,68.458008 C 12.068359,67.264169 20.990968,66.490786 29.060075,66.079644 C 20.984912,69.999544 12.903789,73.531751 5.9334349,76.457959 C 22.014689,72.297236 35.743297,68.817657 47.686396,65.863429 C 91.366232,67.568008 94.589177,86.795219 54.218109,123.90169 C 114.92739,92.691188 130.86609,69.71696 94.814739,54.898244 C 113.31299,51.048937 120.36861,50.509627 124.28558,50.851937 C 114.86308,45.004577 108.35505,42.016047 101.06518,41.462032 C 117.06691,20.141628 82.888511,6.77929 25.809845,1.9255913 z"
+ id="path3163" />
+ <path
+ style="fill:#ffffff;fill-opacity:1;fill-rule:nonzero;stroke:none;stroke-width:0.21299999999999999;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;stroke-miterlimit:4;stroke-dasharray:none"
+ d="M 103.89336,46.817644 C 103.89336,47.911981 102.91988,48.800138 101.72042,48.800138 C 100.52094,48.800138 99.547463,47.911981 99.547463,46.817644 C 99.547463,45.72331 100.52094,44.835153 101.72042,44.835153 C 102.91988,44.835153 103.89336,45.72331 103.89336,46.817644 z"
+ id="path2469" />
+ </g>
+</svg>
diff --git a/Swift/resources/logo/logo-original.svg b/Swift/resources/logo/logo-original.svg
new file mode 100644
index 0000000..75472a8
--- /dev/null
+++ b/Swift/resources/logo/logo-original.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg2459"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logo.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2461">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2390" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.890625"
+ inkscape:cx="64"
+ inkscape:cy="64"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="996"
+ inkscape:window-height="701"
+ inkscape:window-x="271"
+ inkscape:window-y="38" />
+ <metadata
+ id="metadata2464">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="path2469"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.19687635px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 84.728619,54.526087 C 118.95023,27.584549 87.744645,11.000958 29.154115,5.5400513 C 114.51877,26.193466 46.988507,61.217161 11.654503,77.475701 C 92.495288,54.550254 109.24535,52.120302 115.92038,52.759684 C 89.283871,34.641709 88.895812,45.062828 8.3733274,69.763784 C 82.420428,59.930868 99.595428,77.556102 54.191981,123.2972 C 110.41321,91.617253 123.07545,68.717629 84.728619,54.526087 z M 97.94501,48.871211 C 97.94501,49.927803 97.087487,50.785325 96.030896,50.785325 C 94.974305,50.785325 94.116783,49.927803 94.116783,48.871211 C 94.116783,47.814622 94.974305,46.9571 96.030896,46.9571 C 97.087487,46.9571 97.94501,47.814622 97.94501,48.871211 z" />
+ </g>
+</svg>
diff --git a/Swift/resources/logo/logo-shaded-text.256.png b/Swift/resources/logo/logo-shaded-text.256.png
new file mode 100644
index 0000000..5605ad0
--- /dev/null
+++ b/Swift/resources/logo/logo-shaded-text.256.png
Binary files differ
diff --git a/Swift/resources/logo/logo-shaded-text.svg b/Swift/resources/logo/logo-shaded-text.svg
new file mode 100644
index 0000000..68192e9
--- /dev/null
+++ b/Swift/resources/logo/logo-shaded-text.svg
@@ -0,0 +1,119 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="744.09003"
+ height="744"
+ id="svg2459"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logo-text.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ inkscape:export-xdpi="18.796354"
+ inkscape:export-ydpi="18.796354"
+ version="1.0"
+ inkscape:export-filename="/Users/remko/src/swift/resources/logo/blog.png">
+ <defs
+ id="defs2461">
+ <linearGradient
+ id="linearGradient4699">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4701" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4703" />
+ </linearGradient>
+ <linearGradient
+ id="linearGradient4687">
+ <stop
+ style="stop-color:#000000;stop-opacity:1;"
+ offset="0"
+ id="stop4689" />
+ <stop
+ style="stop-color:#000000;stop-opacity:0;"
+ offset="1"
+ id="stop4691" />
+ </linearGradient>
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2390" />
+ <filter
+ inkscape:collect="always"
+ id="filter3237">
+ <feGaussianBlur
+ inkscape:collect="always"
+ stdDeviation="15.00154"
+ id="feGaussianBlur3239" />
+ </filter>
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="1.0074671"
+ inkscape:cx="375"
+ inkscape:cy="367.42652"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="1169"
+ inkscape:window-height="990"
+ inkscape:window-x="695"
+ inkscape:window-y="75" />
+ <metadata
+ id="metadata2464">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ style="opacity:0.35820899;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.82541478px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;filter:url(#filter3237)"
+ d="M 115.78906,165.28485 C 350.10074,221.97501 309.63531,304.49349 212.19531,373.84735 C 164.88631,390.51853 105.57186,410.97398 28.664058,434.5661 C 65.101978,429.72741 98.209468,426.47848 128.03906,424.8161 C 98.134688,440.73611 68.227048,455.00104 42.414058,466.8786 C 101.67266,450.07359 152.5607,435.94556 196.60156,424.0036 C 357.97622,430.8864 369.87302,508.77947 220.75781,659.0036 C 445.02711,532.63072 503.94812,439.58103 370.66406,379.59735 C 439.14989,363.96856 465.05721,361.86643 479.53906,363.2536 C 444.72231,339.57148 420.60352,327.54967 393.66406,325.3161 C 452.90693,238.96094 326.66051,184.93904 115.78906,165.28485 z M 396.16406,338.9411 C 400.59386,338.94111 404.19531,342.54255 404.19531,346.97235 C 404.1953,351.40217 400.59387,354.97235 396.16406,354.97235 C 391.73423,354.97236 388.13281,351.40217 388.13281,346.97235 C 388.1328,342.54255 391.73424,338.9411 396.16406,338.9411 z"
+ id="path2441"
+ transform="matrix(1.2286617,0,0,1.2286617,7.4362342,-159.13251)" />
+ <path
+ style="opacity:0.35820899;fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:1.00333011px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 193.43655,38.683901 C 481.36377,106.86408 431.64137,206.12084 311.88952,289.5279 C 253.76866,309.57308 180.85932,334.14392 86.387308,362.50752 C 131.16565,356.68778 171.8703,352.78146 208.52634,350.78268 C 171.78326,369.92726 135.03618,387.08152 103.32012,401.36485 C 176.12602,381.15723 238.61951,364.20345 292.72972,349.8432 C 491.00731,358.12042 505.62549,451.75302 322.41016,632.40439 C 597.96661,480.43489 670.40043,368.53822 506.63621,296.40496 C 590.78377,277.6106 622.61572,275.12026 640.40936,276.7884 C 597.63051,248.30952 567.9961,233.81513 534.89597,231.12916 C 607.68329,127.28416 452.52952,62.318851 193.43655,38.683901 z M 537.9677,247.51387 C 543.41055,247.51388 547.79717,251.84478 547.79717,257.17184 C 547.79718,262.49891 543.41054,266.8298 537.9677,266.8298 C 532.52484,266.8298 528.09981,262.49891 528.09981,257.17184 C 528.09981,251.84478 532.52483,247.51387 537.9677,247.51387 z"
+ id="path2469" />
+ <text
+ xml:space="preserve"
+ style="font-size:160.47987366px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;text-align:start;line-height:125%;writing-mode:lr-tb;text-anchor:start;fill:#000000;fill-opacity:1;stroke:none;stroke-width:1px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1;font-family:Bodoni SvtyTwo OS ITC TT;-inkscape-font-specification:Bodoni SvtyTwo OS ITC TT"
+ x="22.41254"
+ y="527.68341"
+ id="text4727"
+ sodipodi:linespacing="125%"
+ transform="scale(0.9359712,1.0684089)"><tspan
+ sodipodi:role="line"
+ id="tspan4729"
+ x="22.41254"
+ y="527.68341">Swift</tspan></text>
+ </g>
+</svg>
diff --git a/Swift/resources/logo/logo.svg b/Swift/resources/logo/logo.svg
new file mode 100644
index 0000000..c0576e6
--- /dev/null
+++ b/Swift/resources/logo/logo.svg
@@ -0,0 +1,69 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<!-- Created with Inkscape (http://www.inkscape.org/) -->
+<svg
+ xmlns:dc="http://purl.org/dc/elements/1.1/"
+ xmlns:cc="http://creativecommons.org/ns#"
+ xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
+ xmlns:svg="http://www.w3.org/2000/svg"
+ xmlns="http://www.w3.org/2000/svg"
+ xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
+ xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
+ width="128"
+ height="128"
+ id="svg2459"
+ sodipodi:version="0.32"
+ inkscape:version="0.46"
+ sodipodi:docname="logo.svg"
+ inkscape:output_extension="org.inkscape.output.svg.inkscape"
+ version="1.0">
+ <defs
+ id="defs2461">
+ <inkscape:perspective
+ sodipodi:type="inkscape:persp3d"
+ inkscape:vp_x="0 : 526.18109 : 1"
+ inkscape:vp_y="0 : 1000 : 0"
+ inkscape:vp_z="744.09448 : 526.18109 : 1"
+ inkscape:persp3d-origin="372.04724 : 350.78739 : 1"
+ id="perspective2390" />
+ </defs>
+ <sodipodi:namedview
+ id="base"
+ pagecolor="#ffffff"
+ bordercolor="#666666"
+ borderopacity="1.0"
+ gridtolerance="10000"
+ guidetolerance="10"
+ objecttolerance="10"
+ inkscape:pageopacity="0.0"
+ inkscape:pageshadow="2"
+ inkscape:zoom="3.890625"
+ inkscape:cx="64"
+ inkscape:cy="64"
+ inkscape:document-units="px"
+ inkscape:current-layer="layer1"
+ showgrid="false"
+ inkscape:window-width="996"
+ inkscape:window-height="701"
+ inkscape:window-x="268"
+ inkscape:window-y="253" />
+ <metadata
+ id="metadata2464">
+ <rdf:RDF>
+ <cc:Work
+ rdf:about="">
+ <dc:format>image/svg+xml</dc:format>
+ <dc:type
+ rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
+ </cc:Work>
+ </rdf:RDF>
+ </metadata>
+ <g
+ inkscape:label="Layer 1"
+ inkscape:groupmode="layer"
+ id="layer1">
+ <path
+ id="path2469"
+ style="fill:#000000;fill-opacity:1;fill-rule:nonzero;stroke:#000000;stroke-width:0.21472006px;stroke-linecap:butt;stroke-linejoin:miter;stroke-opacity:1"
+ d="M 88.887955,53.281469 C 127.73448,25.050298 92.311583,7.6728879 25.802796,1.9505796 C 122.70412,23.592628 46.04743,60.292828 5.9381863,77.32963 C 97.704255,53.306791 116.71802,50.760524 124.29515,51.430512 C 94.058829,32.44527 93.618326,43.365224 2.2135746,69.248559 C 86.267822,58.944965 105.76395,77.413879 54.224423,125.3445 C 118.04371,92.148107 132.41719,68.152329 88.887955,53.281469 z M 103.89048,47.355906 C 103.89048,48.463074 102.91707,49.361644 101.71769,49.361644 C 100.5183,49.361644 99.544889,48.463074 99.544889,47.355906 C 99.544889,46.248741 100.5183,45.35017 101.71769,45.35017 C 102.91707,45.35017 103.89048,46.248741 103.89048,47.355906 z" />
+ </g>
+</svg>
diff --git a/Swift/resources/sounds/message-received.wav b/Swift/resources/sounds/message-received.wav
new file mode 100644
index 0000000..7877ba1
--- /dev/null
+++ b/Swift/resources/sounds/message-received.wav
Binary files differ
diff --git a/Swift/resources/themes/Default/Demo.html b/Swift/resources/themes/Default/Demo.html
new file mode 100755
index 0000000..6078ad1
--- /dev/null
+++ b/Swift/resources/themes/Default/Demo.html
@@ -0,0 +1,91 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <base href="%@">
+
+ <style id="mainStyle" type="text/css" media="screen,print"> @import url( "Variants/Yellow on Green Alternating.css" ); </style>
+
+</head>
+<body style="background-color:#e3e3e3">
+<div id="Chat">
+ <div class="chatItem incomingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="images/DummyContact.png" alt="%sender%" title="%sender%" class="avatar">
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit.
+ <div class="timeStamp">Torrey @ 4:55 am</div>
+ <div class="followUp"></div>
+ <div>
+ testing 1
+ <div class="timeStamp">%sender% @ %time%</div>
+ </div>
+ <div class="followUp"></div>
+ <div class="followUpMessage">
+ testing 123
+ <div class="timeStamp">%sender% @ %time%</div>
+ </div>
+ <div class="followUp"></div>
+ <div>
+ testing 123testing 123testing 123testing 123
+ testing 123testing 123
+ <div class="timeStamp">%sender% @ %time%</div>
+ </div>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+ <div class="chatItem outgoingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="images/DummyContact.png" alt="%sender%" title="%sender%" class="avatar">
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ Lorem ipsum dolor sit amet, consectetuer adipiscing elit. Maecenas aliquam sapien. Aliquam sed erat eu leo bibendum egestas. Praesent mauris. Quisque eget eros et neque scelerisque convallis. Phasellus orci. Pellentesque interdum tellus a erat. venenatis tristique.
+ <div class="timeStamp">Torrey @ 4:55 am</div>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+ </div>
+
+</div>
+</body>
+</html> \ No newline at end of file
diff --git a/Swift/resources/themes/Default/Header.html b/Swift/resources/themes/Default/Header.html
new file mode 100755
index 0000000..b97bbb3
--- /dev/null
+++ b/Swift/resources/themes/Default/Header.html
@@ -0,0 +1,5 @@
+<div id="heading">
+ <div class="conversationIncomingIcon"><img src="%incomingIconPath%" /></div>
+ <div class="conversationWith">%chatName%</div>
+ <div class="conversationTime">Conversation began %timeOpened%</div>
+</div> \ No newline at end of file
diff --git a/Swift/resources/themes/Default/Incoming/Content.html b/Swift/resources/themes/Default/Incoming/Content.html
new file mode 100755
index 0000000..2946716
--- /dev/null
+++ b/Swift/resources/themes/Default/Incoming/Content.html
@@ -0,0 +1,30 @@
+<div class="chatItem incomingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="%userIconPath%" class="avatar" title="%sender%" />
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ %message%
+ <div class="timeStamp"><span class="name">%sender% @</span> %time%</div>
+ <span id="insert"></span>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/Swift/resources/themes/Default/Incoming/Context.html b/Swift/resources/themes/Default/Incoming/Context.html
new file mode 100755
index 0000000..b1aca27
--- /dev/null
+++ b/Swift/resources/themes/Default/Incoming/Context.html
@@ -0,0 +1,30 @@
+<div class="chatItem incomingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="%userIconPath%" class="avatar"/>
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ %message%
+ <div class="timeStamp"><span class="name">%sender% @</span> %time%</div>
+ <span id="insert"></span>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/Swift/resources/themes/Default/Incoming/NextContent.html b/Swift/resources/themes/Default/Incoming/NextContent.html
new file mode 100755
index 0000000..4aec8ab
--- /dev/null
+++ b/Swift/resources/themes/Default/Incoming/NextContent.html
@@ -0,0 +1,10 @@
+<div>
+ <div class="followUp"></div>
+ <div>
+
+ %message%
+ <div class="timeStamp">%time%</div>
+ </div>
+ <span id="insert"></span>
+</div>
+
diff --git a/Swift/resources/themes/Default/Incoming/NextContext.html b/Swift/resources/themes/Default/Incoming/NextContext.html
new file mode 100755
index 0000000..18b8dc4
--- /dev/null
+++ b/Swift/resources/themes/Default/Incoming/NextContext.html
@@ -0,0 +1,7 @@
+ <div class="followUp"></div>
+ <div>
+
+ %message%
+ <div class="timeStamp">%time%</div>
+ </div><span id="insert"></span>
+
diff --git a/Swift/resources/themes/Default/Incoming/buddy_icon.png b/Swift/resources/themes/Default/Incoming/buddy_icon.png
new file mode 100644
index 0000000..1d9f5f3
--- /dev/null
+++ b/Swift/resources/themes/Default/Incoming/buddy_icon.png
Binary files differ
diff --git a/Swift/resources/themes/Default/LICENSE.txt b/Swift/resources/themes/Default/LICENSE.txt
new file mode 100644
index 0000000..2eee1ee
--- /dev/null
+++ b/Swift/resources/themes/Default/LICENSE.txt
@@ -0,0 +1,15 @@
+The images, css and html is dual licensed under the BSD and AFL license.
+The source files for the bubbles can be found at http://www.itorrey.com/adiumx/
+
+The fading javascript is not covered in this license. The code is fadomatic and is covered under its own license as set by its author.
+
+BSD LICENSE
+Copyright (c) 2007, Torrey Rice/Renkoo6¾3 All rights reserved. Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met: * Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. * Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. * Neither the name of the Torrey Rice and Renkoo nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
+
+Renkoo is a service mark of Renkoo, Inc.
+
+http://www.opensource.org/licenses/bsd-license.php
+
+
+
+# Larry Rosen has ceased to use or recommend any version # of the Academic Free License below version 2.1 The Academic Free License v. 2.1 This Academic Free License (the "License") applies to any original work of authorship (the "Original Work") whose owner (the "Licensor") has placed the following notice immediately following the copyright notice for the Original Work: Licensed under the Academic Free License version 2.1 1) Grant of Copyright License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license to do the following: a) to reproduce the Original Work in copies; b) to prepare derivative works ("Derivative Works") based upon the Original Work; c) to distribute copies of the Original Work and Derivative Works to the public; d) to perform the Original Work publicly; and e) to display the Original Work publicly. 2) Grant of Patent License. Licensor hereby grants You a world-wide, royalty-free, non-exclusive, perpetual, sublicenseable license, under patent claims owned or controlled by the Licensor that are embodied in the Original Work as furnished by the Licensor, to make, use, sell and offer for sale the Original Work and Derivative Works. 3) Grant of Source Code License. The term "Source Code" means the preferred form of the Original Work for making modifications to it and all available documentation describing how to modify the Original Work. Licensor hereby agrees to provide a machine-readable copy of the Source Code of the Original Work along with each copy of the Original Work that Licensor distributes. Licensor reserves the right to satisfy this obligation by placing a machine-readable copy of the Source Code in an information repository reasonably calculated to permit inexpensive and convenient access by You for as long as Licensor continues to distribute the Original Work, and by publishing the address of that information repository in a notice immediately following the copyright notice that applies to the Original Work. 4) Exclusions From License Grant. Neither the names of Licensor, nor the names of any contributors to the Original Work, nor any of their trademarks or service marks, may be used to endorse or promote products derived from this Original Work without express prior written permission of the Licensor. Nothing in this License shall be deemed to grant any rights to trademarks, copyrights, patents, trade secrets or any other intellectual property of Licensor except as expressly stated herein. No patent license is granted to make, use, sell or offer to sell embodiments of any patent claims other than the licensed claims defined in Section 2. No right is granted to the trademarks of Licensor even if such marks are included in the Original Work. Nothing in this License shall be interpreted to prohibit Licensor from licensing under different terms from this License any Original Work that Licensor otherwise would have a right to license. 5) This section intentionally omitted. 6) Attribution Rights. You must retain, in the Source Code of any Derivative Works that You create, all copyright, patent or trademark notices from the Source Code of the Original Work, as well as any notices of licensing and any descriptive text identified therein as an "Attribution Notice." You must cause the Source Code for any Derivative Works that You create to carry a prominent Attribution Notice reasonably calculated to inform recipients that You have modified the Original Work. 7) Warranty of Provenance and Disclaimer of Warranty. Licensor warrants that the copyright in and to the Original Work and the patent rights granted herein by Licensor are owned by the Licensor or are sublicensed to You under the terms of this License with the permission of the contributor(s) of those copyrights and patent rights. Except as expressly stated in the immediately proceeding sentence, the Original Work is provided under this License on an "AS IS" BASIS and WITHOUT WARRANTY, either express or implied, including, without limitation, the warranties of NON-INFRINGEMENT, MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY OF THE ORIGINAL WORK IS WITH YOU. This DISCLAIMER OF WARRANTY constitutes an essential part of this License. No license to Original Work is granted hereunder except under this disclaimer. 8) Limitation of Liability. Under no circumstances and under no legal theory, whether in tort (including negligence), contract, or otherwise, shall the Licensor be liable to any person for any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or the use of the Original Work including, without limitation, damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses. This limitation of liability shall not apply to liability for death or personal injury resulting from Licensor's negligence to the extent applicable law prohibits such limitation. Some jurisdictions do not allow the exclusion or limitation of incidental or consequential damages, so this exclusion and limitation may not apply to You. 9) Acceptance and Termination. If You distribute copies of the Original Work or a Derivative Work, You must make a reasonable effort under the circumstances to obtain the express assent of recipients to the terms of this License. Nothing else but this License (or another written agreement between Licensor and You) grants You permission to create Derivative Works based upon the Original Work or to exercise any of the rights granted in Section 1 herein, and any attempt to do so except under the terms of this License (or another written agreement between Licensor and You) is expressly prohibited by U.S. copyright law, the equivalent laws of other countries, and by international treaty. Therefore, by exercising any of the rights granted to You in Section 1 herein, You indicate Your acceptance of this License and all of its terms and conditions. 10) Termination for Patent Action. This License shall terminate automatically and You may no longer exercise any of the rights granted to You by this License as of the date You commence an action, including a cross-claim or counterclaim, against Licensor or any licensee alleging that the Original Work infringes a patent. This termination provision shall not apply for an action alleging patent infringement by combinations of the Original Work with other software or hardware. 11) Jurisdiction, Venue and Governing Law. Any action or suit relating to this License may be brought only in the courts of a jurisdiction wherein the Licensor resides or in which Licensor conducts its primary business, and under the laws of that jurisdiction excluding its conflict-of-law provisions. The application of the United Nations Convention on Contracts for the International Sale of Goods is expressly excluded. Any use of the Original Work outside the scope of this License or after its termination shall be subject to the requirements and penalties of the U.S. Copyright Act, 17 U.S.C. 0‡30¨¢0¡ã0ˆ3 101 et seq., the equivalent laws of other countries, and international treaty. This section shall survive the termination of this License. 12) Attorneys Fees. In any action to enforce the terms of this License or seeking damages relating thereto, the prevailing party shall be entitled to recover its costs and expenses, including, without limitation, reasonable attorneys' fees and costs incurred in connection with such action, including any appeal of such action. This section shall survive the termination of this License. 13) Miscellaneous. This License represents the complete agreement concerning the subject matter hereof. If any provision of this License is held to be unenforceable, such provision shall be reformed only to the extent necessary to make it enforceable. 14) Definition of "You" in This License. "You" throughout this License, whether in upper or lower case, means an individual or a legal entity exercising rights under, and complying with all of the terms of, this License. For legal entities, "You" includes any entity that controls, is controlled by, or is under common control with you. For purposes of this definition, "control" means (i) the power, direct or indirect, to cause the direction or management of such entity, whether by contract or otherwise, or (ii) ownership of fifty percent (50%) or more of the outstanding shares, or (iii) beneficial ownership of such entity. 15) Right to Use. You may use the Original Work in all ways not otherwise restricted or conditioned by this License or by law, and Licensor promises not to interfere with or be responsible for such uses by You. This license is Copyright (C) 2003-2004 Lawrence E. Rosen. All rights reserved. Permission is hereby granted to copy and distribute this license without modification. This license may not be modified without the express written permission of its copyright owner. \ No newline at end of file
diff --git a/Swift/resources/themes/Default/Outgoing/Content.html b/Swift/resources/themes/Default/Outgoing/Content.html
new file mode 100755
index 0000000..beb57f0
--- /dev/null
+++ b/Swift/resources/themes/Default/Outgoing/Content.html
@@ -0,0 +1,30 @@
+<div class="chatItem outgoingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="%userIconPath%" class="avatar" title="%sender%" />
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ %message%
+ <div class="timeStamp"><span class="name">%sender% @</span> %time%</div>
+ <span id="insert"></span>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/Swift/resources/themes/Default/Outgoing/Context.html b/Swift/resources/themes/Default/Outgoing/Context.html
new file mode 100755
index 0000000..7822cac
--- /dev/null
+++ b/Swift/resources/themes/Default/Outgoing/Context.html
@@ -0,0 +1,31 @@
+<div class="chatItem outgoingItem">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <img src="%userIconPath%" class="avatar"/>
+ <div class="myBubble">
+ <div class="indicator"></div>
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+
+ %message%
+ <div class="timeStamp"><span class="name">%sender% @</span> %time%</div>
+ <span id="insert"></span>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/Swift/resources/themes/Default/Outgoing/NextContent.html b/Swift/resources/themes/Default/Outgoing/NextContent.html
new file mode 100755
index 0000000..4367197
--- /dev/null
+++ b/Swift/resources/themes/Default/Outgoing/NextContent.html
@@ -0,0 +1,9 @@
+<div>
+ <div class="followUp"></div>
+ <div>
+ %message%
+ <div class="timeStamp">%time%</div>
+ </div>
+ <span id="insert"></span>
+</div>
+
diff --git a/Swift/resources/themes/Default/Outgoing/NextContext.html b/Swift/resources/themes/Default/Outgoing/NextContext.html
new file mode 100755
index 0000000..1f84771
--- /dev/null
+++ b/Swift/resources/themes/Default/Outgoing/NextContext.html
@@ -0,0 +1,6 @@
+<div class="followUp"></div>
+<div>
+ %message%
+ <div class="timeStamp">%time%</div>
+</div><span id="insert"></span>
+
diff --git a/Swift/resources/themes/Default/Outgoing/buddy_icon.png b/Swift/resources/themes/Default/Outgoing/buddy_icon.png
new file mode 100644
index 0000000..1d9f5f3
--- /dev/null
+++ b/Swift/resources/themes/Default/Outgoing/buddy_icon.png
Binary files differ
diff --git a/Swift/resources/themes/Default/Status.html b/Swift/resources/themes/Default/Status.html
new file mode 100755
index 0000000..b8168e8
--- /dev/null
+++ b/Swift/resources/themes/Default/Status.html
@@ -0,0 +1,27 @@
+<div class="chatItem statusMessage">
+ <table width="100%">
+ <tr>
+ <td valign="top">
+ <div class="myBubble">
+ <table class="tableBubble" cellspacing="0" cellpadding="0">
+ <tr>
+ <td class="tl"></td>
+ <td class="tr"></td>
+ </tr>
+ <tr>
+ <td class="message">
+ %message%
+ <div class="timeStamp">%time%</div>
+ </td>
+ <td class="messageRight"></td>
+ </tr>
+ <tr>
+ <td class="bl"></td>
+ <td class="br"></td>
+ </tr>
+ </table>
+ </div>
+ </td>
+ </tr>
+ </table>
+</div>
diff --git a/Swift/resources/themes/Default/Template.html b/Swift/resources/themes/Default/Template.html
new file mode 100755
index 0000000..15f208c
--- /dev/null
+++ b/Swift/resources/themes/Default/Template.html
@@ -0,0 +1,366 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+ <meta http-equiv="content-type" content="text/html; charset=utf-8" />
+ <base href="%@">
+
+ <script type="text/javascript">
+ //<![CDATA[
+
+ isDebug = false;
+
+ // Fade interval in milliseconds
+ // Make this larger if you experience performance issues
+ Fadomatic.INTERVAL_MILLIS = 50;
+
+ // Creates a fader
+ // element - The element to fade
+ // speed - The speed to fade at, from 0.0 to 100.0
+ // initialOpacity (optional, default 100) - element's starting opacity, 0 to 100
+ // minOpacity (optional, default 0) - element's minimum opacity, 0 to 100
+ // maxOpacity (optional, default 0) - element's minimum opacity, 0 to 100
+ function Fadomatic (element, rate, initialOpacity, minOpacity, maxOpacity) {
+ this._element = element;
+ this._intervalId = null;
+ this._rate = rate;
+ this._isFadeOut = true;
+
+ // Set initial opacity and bounds
+ // NB use 99 instead of 100 to avoid flicker at start of fade
+ this._minOpacity = 0;
+ this._maxOpacity = 99;
+ this._opacity = 99;
+
+ if (typeof minOpacity != 'undefined') {
+ if (minOpacity < 0) {
+ this._minOpacity = 0;
+ } else if (minOpacity > 99) {
+ this._minOpacity = 99;
+ } else {
+ this._minOpacity = minOpacity;
+ }
+ }
+
+ if (typeof maxOpacity != 'undefined') {
+ if (maxOpacity < 0) {
+ this._maxOpacity = 0;
+ } else if (maxOpacity > 99) {
+ this._maxOpacity = 99;
+ } else {
+ this._maxOpacity = maxOpacity;
+ }
+
+ if (this._maxOpacity < this._minOpacity) {
+ this._maxOpacity = this._minOpacity;
+ }
+ }
+
+ if (typeof initialOpacity != 'undefined') {
+ if (initialOpacity > this._maxOpacity) {
+ this._opacity = this._maxOpacity;
+ } else if (initialOpacity < this._minOpacity) {
+ this._opacity = this._minOpacity;
+ } else {
+ this._opacity = initialOpacity;
+ }
+ }
+
+ // See if we're using W3C opacity, MSIE filter, or just
+ // toggling visiblity
+ if(typeof element.style.opacity != 'undefined') {
+
+ this._updateOpacity = this._updateOpacityW3c;
+
+ } else if(typeof element.style.filter != 'undefined') {
+
+ // If there's not an alpha filter on the element already,
+ // add one
+ if (element.style.filter.indexOf("alpha") == -1) {
+
+ // Attempt to preserve existing filters
+ var existingFilters="";
+ if (element.style.filter) {
+ existingFilters = element.style.filter+" ";
+ }
+ element.style.filter = existingFilters+"alpha(opacity="+this._opacity+")";
+ }
+
+ this._updateOpacity = this._updateOpacityMSIE;
+
+ } else {
+
+ this._updateOpacity = this._updateVisibility;
+ }
+
+ this._updateOpacity();
+ }
+
+ // Initiates a fade out
+ Fadomatic.prototype.fadeOut = function () {
+ this._isFadeOut = true;
+ this._beginFade();
+ }
+
+ // Initiates a fade in
+ Fadomatic.prototype.fadeIn = function () {
+ this._isFadeOut = false;
+ this._beginFade();
+ }
+
+ // Makes the element completely opaque, stops any fade in progress
+ Fadomatic.prototype.show = function () {
+ this.haltFade();
+ this._opacity = this._maxOpacity;
+ this._updateOpacity();
+ }
+
+ // Makes the element completely transparent, stops any fade in progress
+ Fadomatic.prototype.hide = function () {
+ this.haltFade();
+ this._opacity = 0;
+ this._updateOpacity();
+ }
+
+ // Halts any fade in progress
+ Fadomatic.prototype.haltFade = function () {
+
+ clearInterval(this._intervalId);
+ }
+
+ // Resumes a fade where it was halted
+ Fadomatic.prototype.resumeFade = function () {
+
+ this._beginFade();
+ }
+
+ // Pseudo-private members
+
+ Fadomatic.prototype._beginFade = function () {
+
+ this.haltFade();
+ var objref = this;
+ this._intervalId = setInterval(function() { objref._tickFade(); },Fadomatic.INTERVAL_MILLIS);
+ }
+
+ Fadomatic.prototype._tickFade = function () {
+
+ if (this._isFadeOut) {
+ this._opacity -= this._rate;
+ if (this._opacity < this._minOpacity) {
+ this._opacity = this._minOpacity;
+ this.haltFade();
+ }
+ } else {
+ this._opacity += this._rate;
+ if (this._opacity > this._maxOpacity ) {
+ this._opacity = this._maxOpacity;
+ this.haltFade();
+ }
+ }
+
+ this._updateOpacity();
+ }
+
+ Fadomatic.prototype._updateVisibility = function () {
+
+ if (this._opacity > 0) {
+ this._element.style.visibility = 'visible';
+ } else {
+ this._element.style.visibility = 'hidden';
+ }
+ }
+
+ Fadomatic.prototype._updateOpacityW3c = function () {
+
+ this._element.style.opacity = this._opacity/100;
+ this._updateVisibility();
+ }
+
+ Fadomatic.prototype._updateOpacityMSIE = function () {
+
+ this._element.filters.alpha.opacity = this._opacity;
+ this._updateVisibility();
+ }
+
+ Fadomatic.prototype._updateOpacity = null;
+
+
+
+ //Do this on load
+ function initEvents() {
+ if(document.getElementById("heading") == null){
+ document.getElementById("bodyNode").style.marginTop = "5px";
+ }
+
+ if(isDebug == false) {
+ document.getElementById("debug").style.display = "none";
+ }
+
+
+ alignChat(true);
+ }
+
+ //Debugging function
+ function trace(msg) {
+ var node = document.createElement("div");
+ var debugCon = document.getElementById("debug");
+ node.innerHTML = msg;
+ debugCon.appendChild(node);
+ }
+
+
+ //Appending new content to the message view
+ function appendMessage(html) {
+ var shouldScroll = nearBottom();
+
+ //Remove any existing insertion point
+ var insert = document.getElementById("insert");
+
+ if(insert) insert.parentNode.removeChild(insert);
+
+ //Append the new message to the bottom of our chat block
+ var chat = document.getElementById("Chat");
+ var range = document.createRange();
+ range.selectNode(chat);
+ var documentFragment = range.createContextualFragment(html);
+ var myFrag = chat.appendChild(documentFragment);
+ var frag1 = document.getElementById("insert");
+ if (frag1) {
+ var frag= frag1.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode.parentNode;
+
+ try {
+ var fader = new Fadomatic(frag, 9, 0, 0, 95);
+ } catch(e) {
+ trace(e);
+ }
+ fader.fadeIn();
+ }
+
+ alignChat(true);
+ }
+
+
+ function appendNextMessage(html){
+ var shouldScroll = nearBottom();
+
+ //Locate the insertion point
+ var insert = document.getElementById("insert");
+
+ //make new node
+ range = document.createRange();
+ range.selectNode(insert.parentNode);
+ newNode = range.createContextualFragment(html);
+
+ //swap
+ var pointer = insert.parentNode;
+ insert.parentNode.replaceChild(newNode,insert);
+ var els = pointer.getElementsByTagName("div");
+
+ alignChat(true);
+ }
+
+
+ //Auto-scroll to bottom. Use nearBottom to determine if a scrollToBottom is desired.
+ function nearBottom() {
+ return ( document.body.scrollTop >= ( document.body.offsetHeight - ( window.innerHeight * 1.2 ) ) );
+ }
+
+ var intervall_scroll;
+ function scrollToBottom() {
+ //document.body.scrollTop = (document.body.scrollHeight-window.innerHeight);
+ //return;
+ if( intervall_scroll ) clearInterval( intervall_scroll );
+ intervall_scroll = setInterval( function() {
+ var target_scroll = (document.body.scrollHeight-window.innerHeight);
+ var scrolldiff = target_scroll - document.body.scrollTop;
+ if ( document.body.scrollTop != target_scroll ) {
+ var saved_scroll = document.body.scrollTop;
+ document.body.scrollTop += scrolldiff / 5 + ( scrolldiff >= 0 ? (scrolldiff != 0 ) : -1 );
+ } else {
+ saved_scroll = -1;
+ clearInterval( intervall_scroll );
+ }
+ } , 10 );
+ return;
+ }
+
+
+ //Dynamically exchange the active stylesheet
+ function setStylesheet( id, url ) {
+ var code = "<style id=\"" + id + "\" type=\"text/css\" media=\"screen,print\">";
+ if( url.length ) code += "@import url( \"" + url + "\" );";
+ code += "</style>";
+ var range = document.createRange();
+ var head = document.getElementsByTagName( "head" ).item(0);
+ range.selectNode( head );
+ documentFragment = range.createContextualFragment( code );
+ head.removeChild( document.getElementById( id ) );
+ head.appendChild( documentFragment );
+ }
+
+ //Swap an image with its alt-tag text on click
+ document.onclick = imageCheck;
+ function imageCheck() {
+ node = event.target;
+ if(node.tagName == 'IMG' && node.alt && node.className!="avatar") {
+ a = document.createElement('a');
+ a.setAttribute('onclick', 'imageSwap(this)');
+ a.setAttribute('src', node.src);
+ a.className = node.className;
+ text = document.createTextNode(node.alt);
+ a.appendChild(text);
+ node.parentNode.replaceChild(a, node);
+ }
+ }
+ function imageSwap(node) {
+ shouldScroll = nearBottom();
+
+ //Swap the image/text
+ img = document.createElement('img');
+ img.setAttribute('src', node.src);
+ img.className = node.className;
+ img.setAttribute('alt', node.firstChild.nodeValue);
+ node.parentNode.replaceChild(img, node);
+
+ alignChat(shouldScroll);
+ }
+
+ //Align our chat to the bottom of the window. If true is passed, view will also be scrolled down
+ function alignChat(shouldScroll) {
+
+ var windowHeight = window.innerHeight;
+
+ if(windowHeight > 0) {
+ var contentElement = document.getElementById('Chat');
+ var contentHeight = contentElement.offsetHeight;
+ if (windowHeight - contentHeight > 0) {
+ contentElement.style.position = 'relative';
+ contentElement.style.top = '0px';
+ } else {
+ contentElement.style.position = 'static';
+ }
+ }
+
+ if(shouldScroll) scrollToBottom();
+ }
+
+ function windowDidResize() {
+ alignChat(true/*nearBottom()*/); //nearBottom buggy with inavtive tabs
+ }
+
+ window.onresize = windowDidResize;
+ //]]>
+ </script>
+
+ <style id="mainStyle" type="text/css" media="screen,print"> @import url( "%@" ); </style>
+
+</head>
+<body style="==bodyBackground==" id="bodyNode" onload="initEvents()">
+%@
+<div id="Chat">
+</div>
+%@
+<div id="debug"></div>
+</body>
+</html>
diff --git a/Swift/resources/themes/Default/Variants/Blue on Green Alternating.css b/Swift/resources/themes/Default/Variants/Blue on Green Alternating.css
new file mode 100644
index 0000000..5b910eb
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Green Alternating.css
@@ -0,0 +1,7 @@
+@import url("Blue on Green.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Blue on Green No Names Alt.css b/Swift/resources/themes/Default/Variants/Blue on Green No Names Alt.css
new file mode 100644
index 0000000..ebad314
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Green No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Blue on Green Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Green No Names.css b/Swift/resources/themes/Default/Variants/Blue on Green No Names.css
new file mode 100644
index 0000000..2a0902c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Green No Names.css
@@ -0,0 +1,2 @@
+@import url("Blue on Green.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Green.css b/Swift/resources/themes/Default/Variants/Blue on Green.css
new file mode 100644
index 0000000..361c8c6
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Green.css
@@ -0,0 +1,90 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+/*incoming */
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Blue on Red Alternating.css b/Swift/resources/themes/Default/Variants/Blue on Red Alternating.css
new file mode 100644
index 0000000..5481c10
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Red Alternating.css
@@ -0,0 +1,7 @@
+@import url("Blue on Red.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Blue on Red No Names Alt.css b/Swift/resources/themes/Default/Variants/Blue on Red No Names Alt.css
new file mode 100644
index 0000000..9818a6c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Red No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Blue on Red Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Red No Names.css b/Swift/resources/themes/Default/Variants/Blue on Red No Names.css
new file mode 100644
index 0000000..3ac8c9a
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Red No Names.css
@@ -0,0 +1,2 @@
+@import url("Blue on Red.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Red.css b/Swift/resources/themes/Default/Variants/Blue on Red.css
new file mode 100644
index 0000000..0717920
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Red.css
@@ -0,0 +1,89 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
diff --git a/Swift/resources/themes/Default/Variants/Blue on Steel Alternating.css b/Swift/resources/themes/Default/Variants/Blue on Steel Alternating.css
new file mode 100644
index 0000000..8473d1f
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Steel Alternating.css
@@ -0,0 +1,7 @@
+@import url("Blue on Steel.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Blue on Steel No Names Alt.css b/Swift/resources/themes/Default/Variants/Blue on Steel No Names Alt.css
new file mode 100644
index 0000000..1925d5c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Steel No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Blue on Steel Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Steel No Names.css b/Swift/resources/themes/Default/Variants/Blue on Steel No Names.css
new file mode 100644
index 0000000..573aa58
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Steel No Names.css
@@ -0,0 +1,2 @@
+@import url("Blue on Steel.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Steel.css b/Swift/resources/themes/Default/Variants/Blue on Steel.css
new file mode 100644
index 0000000..48ab03d
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Steel.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Blue on Yellow Alternating.css b/Swift/resources/themes/Default/Variants/Blue on Yellow Alternating.css
new file mode 100644
index 0000000..d7927fc
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Yellow Alternating.css
@@ -0,0 +1,7 @@
+@import url("Blue on Yellow.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Blue on Yellow No Names Alt.css b/Swift/resources/themes/Default/Variants/Blue on Yellow No Names Alt.css
new file mode 100644
index 0000000..38d374d
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Yellow No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Blue on Yellow Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Yellow No Names.css b/Swift/resources/themes/Default/Variants/Blue on Yellow No Names.css
new file mode 100644
index 0000000..3fdc8cd
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Yellow No Names.css
@@ -0,0 +1,2 @@
+@import url("Blue on Yellow.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Blue on Yellow.css b/Swift/resources/themes/Default/Variants/Blue on Yellow.css
new file mode 100644
index 0000000..b019b0b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Blue on Yellow.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#bdb410;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Green on Blue Alternating.css b/Swift/resources/themes/Default/Variants/Green on Blue Alternating.css
new file mode 100644
index 0000000..272c0d0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Blue Alternating.css
@@ -0,0 +1,7 @@
+@import url("Green on Blue.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Green on Blue No Names Alt.css b/Swift/resources/themes/Default/Variants/Green on Blue No Names Alt.css
new file mode 100644
index 0000000..973f91a
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Blue No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Green on Blue Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Blue No Names.css b/Swift/resources/themes/Default/Variants/Green on Blue No Names.css
new file mode 100644
index 0000000..0d92eb0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Blue No Names.css
@@ -0,0 +1,2 @@
+@import url("Green on Blue.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Blue.css b/Swift/resources/themes/Default/Variants/Green on Blue.css
new file mode 100644
index 0000000..7185f4f
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Blue.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Green on Red Alternating.css b/Swift/resources/themes/Default/Variants/Green on Red Alternating.css
new file mode 100644
index 0000000..e656dc0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Red Alternating.css
@@ -0,0 +1,7 @@
+@import url("Green on Red.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Green on Red No Names Alt.css b/Swift/resources/themes/Default/Variants/Green on Red No Names Alt.css
new file mode 100644
index 0000000..5fd2482
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Red No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Green on Red Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Red No Names.css b/Swift/resources/themes/Default/Variants/Green on Red No Names.css
new file mode 100644
index 0000000..23dae81
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Red No Names.css
@@ -0,0 +1,2 @@
+@import url("Green on Red.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Red.css b/Swift/resources/themes/Default/Variants/Green on Red.css
new file mode 100644
index 0000000..cdf38b3
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Red.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Green on Steel Alternating.css b/Swift/resources/themes/Default/Variants/Green on Steel Alternating.css
new file mode 100644
index 0000000..3c14f7f
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Steel Alternating.css
@@ -0,0 +1,7 @@
+@import url("Green on Steel.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Green on Steel No Names Alt.css b/Swift/resources/themes/Default/Variants/Green on Steel No Names Alt.css
new file mode 100644
index 0000000..cfd6bb9
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Steel No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Green on Steel Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Steel No Names.css b/Swift/resources/themes/Default/Variants/Green on Steel No Names.css
new file mode 100644
index 0000000..41bc9de
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Steel No Names.css
@@ -0,0 +1,2 @@
+@import url("Green on Steel.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Steel.css b/Swift/resources/themes/Default/Variants/Green on Steel.css
new file mode 100644
index 0000000..30a78a0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Steel.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Green on Yellow Alternating.css b/Swift/resources/themes/Default/Variants/Green on Yellow Alternating.css
new file mode 100644
index 0000000..d0553e8
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Yellow Alternating.css
@@ -0,0 +1,7 @@
+@import url("Green on Yellow.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Green on Yellow No Names Alt.css b/Swift/resources/themes/Default/Variants/Green on Yellow No Names Alt.css
new file mode 100644
index 0000000..27adc33
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Yellow No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Green on Yellow Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Yellow No Names.css b/Swift/resources/themes/Default/Variants/Green on Yellow No Names.css
new file mode 100644
index 0000000..8c8cb28
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Yellow No Names.css
@@ -0,0 +1,2 @@
+@import url("Green on Yellow.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Green on Yellow.css b/Swift/resources/themes/Default/Variants/Green on Yellow.css
new file mode 100644
index 0000000..d7f64d3
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Green on Yellow.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#bdb410;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Red on Blue Alternating.css b/Swift/resources/themes/Default/Variants/Red on Blue Alternating.css
new file mode 100644
index 0000000..5d241fb
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Blue Alternating.css
@@ -0,0 +1,7 @@
+@import url("Red on Blue.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Red on Blue No Names Alt.css b/Swift/resources/themes/Default/Variants/Red on Blue No Names Alt.css
new file mode 100644
index 0000000..2e80935
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Blue No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Red on Blue Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Blue No Names.css b/Swift/resources/themes/Default/Variants/Red on Blue No Names.css
new file mode 100644
index 0000000..da98b5c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Blue No Names.css
@@ -0,0 +1,2 @@
+@import url("Red on Blue.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Blue.css b/Swift/resources/themes/Default/Variants/Red on Blue.css
new file mode 100644
index 0000000..f6e646c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Blue.css
@@ -0,0 +1,90 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
diff --git a/Swift/resources/themes/Default/Variants/Red on Green Alternating.css b/Swift/resources/themes/Default/Variants/Red on Green Alternating.css
new file mode 100644
index 0000000..db8effa
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Green Alternating.css
@@ -0,0 +1,7 @@
+@import url("Red on Green.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Red on Green No Names Alt.css b/Swift/resources/themes/Default/Variants/Red on Green No Names Alt.css
new file mode 100644
index 0000000..9a230f2
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Green No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Red on Green Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Green No Names.css b/Swift/resources/themes/Default/Variants/Red on Green No Names.css
new file mode 100644
index 0000000..1bbc2a5
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Green No Names.css
@@ -0,0 +1,2 @@
+@import url("Red on Green.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Green.css b/Swift/resources/themes/Default/Variants/Red on Green.css
new file mode 100644
index 0000000..0e7c12b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Green.css
@@ -0,0 +1,95 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Red on Steel Alternating.css b/Swift/resources/themes/Default/Variants/Red on Steel Alternating.css
new file mode 100644
index 0000000..ad7eb15
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Steel Alternating.css
@@ -0,0 +1,7 @@
+@import url("Red on Steel.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Red on Steel No Names Alt.css b/Swift/resources/themes/Default/Variants/Red on Steel No Names Alt.css
new file mode 100644
index 0000000..9c6ab55
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Steel No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Red on Steel Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Steel No Names.css b/Swift/resources/themes/Default/Variants/Red on Steel No Names.css
new file mode 100644
index 0000000..aa2b60a
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Steel No Names.css
@@ -0,0 +1,2 @@
+@import url("Red on Steel.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Steel.css b/Swift/resources/themes/Default/Variants/Red on Steel.css
new file mode 100644
index 0000000..8a39df2
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Steel.css
@@ -0,0 +1,93 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Red on Yellow Alternating.css b/Swift/resources/themes/Default/Variants/Red on Yellow Alternating.css
new file mode 100644
index 0000000..b264d7d
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Yellow Alternating.css
@@ -0,0 +1,7 @@
+@import url("Red on Yellow.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Red on Yellow No Names Alt.css b/Swift/resources/themes/Default/Variants/Red on Yellow No Names Alt.css
new file mode 100644
index 0000000..dc4394e
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Yellow No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Red on Yellow Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Yellow No Names.css b/Swift/resources/themes/Default/Variants/Red on Yellow No Names.css
new file mode 100644
index 0000000..9ca44ec
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Yellow No Names.css
@@ -0,0 +1,2 @@
+@import url("Red on Yellow.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Red on Yellow.css b/Swift/resources/themes/Default/Variants/Red on Yellow.css
new file mode 100644
index 0000000..f2dc5a0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Red on Yellow.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#bdb410;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Blue Alternating.css b/Swift/resources/themes/Default/Variants/Steel on Blue Alternating.css
new file mode 100644
index 0000000..8c15ec2
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Blue Alternating.css
@@ -0,0 +1,7 @@
+@import url("Steel on Blue.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Blue No Names Alt.css b/Swift/resources/themes/Default/Variants/Steel on Blue No Names Alt.css
new file mode 100644
index 0000000..7edfcb1
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Blue No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Steel on Blue Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Blue No Names.css b/Swift/resources/themes/Default/Variants/Steel on Blue No Names.css
new file mode 100644
index 0000000..f7058b9
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Blue No Names.css
@@ -0,0 +1,2 @@
+@import url("Steel on Blue.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Blue.css b/Swift/resources/themes/Default/Variants/Steel on Blue.css
new file mode 100644
index 0000000..6203dc2
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Blue.css
@@ -0,0 +1,92 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Steel on Green Alternating.css b/Swift/resources/themes/Default/Variants/Steel on Green Alternating.css
new file mode 100644
index 0000000..69474f0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Green Alternating.css
@@ -0,0 +1,7 @@
+@import url("Steel on Green.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Green No Names Alt.css b/Swift/resources/themes/Default/Variants/Steel on Green No Names Alt.css
new file mode 100644
index 0000000..6fc5606
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Green No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Steel on Green Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Green No Names.css b/Swift/resources/themes/Default/Variants/Steel on Green No Names.css
new file mode 100644
index 0000000..f07264b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Green No Names.css
@@ -0,0 +1,2 @@
+@import url("Steel on Green.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Green.css b/Swift/resources/themes/Default/Variants/Steel on Green.css
new file mode 100644
index 0000000..800dc6b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Green.css
@@ -0,0 +1,97 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Steel on Red Alternating.css b/Swift/resources/themes/Default/Variants/Steel on Red Alternating.css
new file mode 100644
index 0000000..64a783b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Red Alternating.css
@@ -0,0 +1,7 @@
+@import url("Steel on Red.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Red No Names Alt.css b/Swift/resources/themes/Default/Variants/Steel on Red No Names Alt.css
new file mode 100644
index 0000000..995f329
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Red No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Steel on Red Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Red No Names.css b/Swift/resources/themes/Default/Variants/Steel on Red No Names.css
new file mode 100644
index 0000000..b5e622e
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Red No Names.css
@@ -0,0 +1,2 @@
+@import url("Steel on Red.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Red.css b/Swift/resources/themes/Default/Variants/Steel on Red.css
new file mode 100644
index 0000000..922c6ef
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Red.css
@@ -0,0 +1,89 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Yellow Alternating.css b/Swift/resources/themes/Default/Variants/Steel on Yellow Alternating.css
new file mode 100644
index 0000000..0249230
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Yellow Alternating.css
@@ -0,0 +1,7 @@
+@import url("Steel on Yellow.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Steel on Yellow No Names Alt.css b/Swift/resources/themes/Default/Variants/Steel on Yellow No Names Alt.css
new file mode 100644
index 0000000..9ab928c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Yellow No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Steel on Yellow Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Yellow No Names.css b/Swift/resources/themes/Default/Variants/Steel on Yellow No Names.css
new file mode 100644
index 0000000..ecf7861
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Yellow No Names.css
@@ -0,0 +1,2 @@
+@import url("Steel on Yellow.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Steel on Yellow.css b/Swift/resources/themes/Default/Variants/Steel on Yellow.css
new file mode 100644
index 0000000..2d91510
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Steel on Yellow.css
@@ -0,0 +1,92 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#bdb410;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Blue Alternating.css b/Swift/resources/themes/Default/Variants/Yellow on Blue Alternating.css
new file mode 100644
index 0000000..361856d
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Blue Alternating.css
@@ -0,0 +1,7 @@
+@import url("Yellow on Blue.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Blue No Names Alt.css b/Swift/resources/themes/Default/Variants/Yellow on Blue No Names Alt.css
new file mode 100644
index 0000000..2e31a7c
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Blue No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Blue Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Blue No Names.css b/Swift/resources/themes/Default/Variants/Yellow on Blue No Names.css
new file mode 100644
index 0000000..808377f
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Blue No Names.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Blue.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Blue.css b/Swift/resources/themes/Default/Variants/Yellow on Blue.css
new file mode 100644
index 0000000..7e745e9
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Blue.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#bdb410;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#7fc5f8;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/blueIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/blueCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/blueCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/blueCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/blueBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/blueBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/blueCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/blueCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ddf0fe;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Green Alternating.css b/Swift/resources/themes/Default/Variants/Yellow on Green Alternating.css
new file mode 100644
index 0000000..cb88dfb
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Green Alternating.css
@@ -0,0 +1,7 @@
+@import url("Yellow on Green.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Green No Names Alt.css b/Swift/resources/themes/Default/Variants/Yellow on Green No Names Alt.css
new file mode 100644
index 0000000..24fe8ef
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Green No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Green Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Green No Names.css b/Swift/resources/themes/Default/Variants/Yellow on Green No Names.css
new file mode 100644
index 0000000..0c7d12b
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Green No Names.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Green.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Green.css b/Swift/resources/themes/Default/Variants/Yellow on Green.css
new file mode 100644
index 0000000..de4afc6
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Green.css
@@ -0,0 +1,96 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#bdb410;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/greenIndicator.png") no-repeat top left;
+}
+
+.incomingItem .timeStamp {
+ color:#9ecf35;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/greenCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/greenCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/greenCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/greenBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/greenBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/greenCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/greenCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Red Alternating.css b/Swift/resources/themes/Default/Variants/Yellow on Red Alternating.css
new file mode 100644
index 0000000..592b8c4
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Red Alternating.css
@@ -0,0 +1,7 @@
+@import url("Yellow on Red.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Red No Names Alt.css b/Swift/resources/themes/Default/Variants/Yellow on Red No Names Alt.css
new file mode 100644
index 0000000..fe464d9
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Red No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Red Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Red No Names.css b/Swift/resources/themes/Default/Variants/Yellow on Red No Names.css
new file mode 100644
index 0000000..f35c8a2
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Red No Names.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Red.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Red.css b/Swift/resources/themes/Default/Variants/Yellow on Red.css
new file mode 100644
index 0000000..f73f0d0
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Red.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#bdb410;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#f88f8f;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/redIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/redCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/redCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/redCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/redBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/redBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/redCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/redCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ffdada;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Steel Alternating.css b/Swift/resources/themes/Default/Variants/Yellow on Steel Alternating.css
new file mode 100644
index 0000000..a019487
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Steel Alternating.css
@@ -0,0 +1,7 @@
+@import url("Yellow on Steel.css");
+@import url("../alternating.css");
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator2.png") no-repeat top left;
+}
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Steel No Names Alt.css b/Swift/resources/themes/Default/Variants/Yellow on Steel No Names Alt.css
new file mode 100644
index 0000000..273bcbb
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Steel No Names Alt.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Steel Alternating.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Steel No Names.css b/Swift/resources/themes/Default/Variants/Yellow on Steel No Names.css
new file mode 100644
index 0000000..1f8d314
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Steel No Names.css
@@ -0,0 +1,2 @@
+@import url("Yellow on Steel.css");
+@import url("../noname.css");
diff --git a/Swift/resources/themes/Default/Variants/Yellow on Steel.css b/Swift/resources/themes/Default/Variants/Yellow on Steel.css
new file mode 100644
index 0000000..680f0c8
--- /dev/null
+++ b/Swift/resources/themes/Default/Variants/Yellow on Steel.css
@@ -0,0 +1,91 @@
+@import url("../main.css");
+
+/* outgoing */
+
+
+.outgoingItem .timeStamp {
+ color:#bdb410;
+}
+
+.outgoingItem .myBubble .indicator {
+ background:url("../images/yellowIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("../images/yellowCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("../images/yellowCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("../images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("../images/yellowBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("../images/yellowBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("../images/yellowCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("../images/yellowCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+
+/*incoming */
+
+.incomingItem .timeStamp {
+ color:#a9a9a9;
+}
+
+.incomingItem .myBubble .indicator {
+ background:url("../images/steelIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("../images/steelCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("../images/steelCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("../images/steelCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("../images/steelBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("../images/steelBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("../images/steelCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("../images/steelCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#ececec;
+ border-bottom:1px solid #fff;
+}
+
+
diff --git a/Swift/resources/themes/Default/alternating.css b/Swift/resources/themes/Default/alternating.css
new file mode 100644
index 0000000..2b21147
--- /dev/null
+++ b/Swift/resources/themes/Default/alternating.css
@@ -0,0 +1,16 @@
+
+.outgoingItem .avatar {
+ float:right;
+}
+
+.outgoingItem .indicator {
+ float:right;
+ position:relative;
+ left:11px;
+ top:8px;
+}
+
+.myBubble {
+ margin-right:40px;
+}
+
diff --git a/Swift/resources/themes/Default/images/DummyContact.png b/Swift/resources/themes/Default/images/DummyContact.png
new file mode 100755
index 0000000..5149ea5
--- /dev/null
+++ b/Swift/resources/themes/Default/images/DummyContact.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/alert.png b/Swift/resources/themes/Default/images/alert.png
new file mode 100755
index 0000000..ad59ebc
--- /dev/null
+++ b/Swift/resources/themes/Default/images/alert.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueBackground.gif b/Swift/resources/themes/Default/images/blueBackground.gif
new file mode 100755
index 0000000..1aad572
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueBackground.png b/Swift/resources/themes/Default/images/blueBackground.png
new file mode 100644
index 0000000..c3eecf5
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueBackground.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueCurves.gif b/Swift/resources/themes/Default/images/blueCurves.gif
new file mode 100755
index 0000000..90e3823
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueCurves.png b/Swift/resources/themes/Default/images/blueCurves.png
new file mode 100644
index 0000000..7a6afe1
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueCurves.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueIndicator.gif b/Swift/resources/themes/Default/images/blueIndicator.gif
new file mode 100755
index 0000000..3a1b40a
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueIndicator.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueIndicator.png b/Swift/resources/themes/Default/images/blueIndicator.png
new file mode 100644
index 0000000..29b65cb
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueIndicator.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueIndicator2.png b/Swift/resources/themes/Default/images/blueIndicator2.png
new file mode 100644
index 0000000..d7c3621
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueIndicator2.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/blueIndicatorAlt.gif b/Swift/resources/themes/Default/images/blueIndicatorAlt.gif
new file mode 100644
index 0000000..aaacb89
--- /dev/null
+++ b/Swift/resources/themes/Default/images/blueIndicatorAlt.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenBackground.gif b/Swift/resources/themes/Default/images/greenBackground.gif
new file mode 100755
index 0000000..a11a52d
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenBackground.png b/Swift/resources/themes/Default/images/greenBackground.png
new file mode 100644
index 0000000..dfeb36e
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenBackground.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenCurves.gif b/Swift/resources/themes/Default/images/greenCurves.gif
new file mode 100755
index 0000000..165892a
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenCurves.png b/Swift/resources/themes/Default/images/greenCurves.png
new file mode 100644
index 0000000..13fae75
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenCurves.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenIndicator.gif b/Swift/resources/themes/Default/images/greenIndicator.gif
new file mode 100755
index 0000000..b6409c7
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenIndicator.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenIndicator.png b/Swift/resources/themes/Default/images/greenIndicator.png
new file mode 100644
index 0000000..381db82
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenIndicator.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenIndicator2.png b/Swift/resources/themes/Default/images/greenIndicator2.png
new file mode 100644
index 0000000..1dedb31
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenIndicator2.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/greenIndicatorAlt.gif b/Swift/resources/themes/Default/images/greenIndicatorAlt.gif
new file mode 100644
index 0000000..3ccbc23
--- /dev/null
+++ b/Swift/resources/themes/Default/images/greenIndicatorAlt.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redBackground.gif b/Swift/resources/themes/Default/images/redBackground.gif
new file mode 100755
index 0000000..ce1443e
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redBackground.png b/Swift/resources/themes/Default/images/redBackground.png
new file mode 100644
index 0000000..bbacbc7
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redBackground.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redCurves.gif b/Swift/resources/themes/Default/images/redCurves.gif
new file mode 100755
index 0000000..55e496d
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redCurves.png b/Swift/resources/themes/Default/images/redCurves.png
new file mode 100644
index 0000000..3e7065a
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redCurves.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redIndicator.gif b/Swift/resources/themes/Default/images/redIndicator.gif
new file mode 100755
index 0000000..58e189c
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redIndicator.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redIndicator.png b/Swift/resources/themes/Default/images/redIndicator.png
new file mode 100644
index 0000000..9c906a9
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redIndicator.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redIndicator2.png b/Swift/resources/themes/Default/images/redIndicator2.png
new file mode 100644
index 0000000..1f625a0
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redIndicator2.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/redIndicatorAlt.gif b/Swift/resources/themes/Default/images/redIndicatorAlt.gif
new file mode 100644
index 0000000..1f9c4f1
--- /dev/null
+++ b/Swift/resources/themes/Default/images/redIndicatorAlt.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/silverBackground.gif b/Swift/resources/themes/Default/images/silverBackground.gif
new file mode 100755
index 0000000..b2798a4
--- /dev/null
+++ b/Swift/resources/themes/Default/images/silverBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/silverCurves.gif b/Swift/resources/themes/Default/images/silverCurves.gif
new file mode 100755
index 0000000..b7bca30
--- /dev/null
+++ b/Swift/resources/themes/Default/images/silverCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelBackground.gif b/Swift/resources/themes/Default/images/steelBackground.gif
new file mode 100755
index 0000000..c292710
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelBackground.png b/Swift/resources/themes/Default/images/steelBackground.png
new file mode 100644
index 0000000..b1180d3
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelBackground.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelCurves.gif b/Swift/resources/themes/Default/images/steelCurves.gif
new file mode 100755
index 0000000..663c5c3
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelCurves.png b/Swift/resources/themes/Default/images/steelCurves.png
new file mode 100644
index 0000000..e1ddeb0
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelCurves.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelHeading.jpg b/Swift/resources/themes/Default/images/steelHeading.jpg
new file mode 100755
index 0000000..a319c7e
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelHeading.jpg
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelIndicator.gif b/Swift/resources/themes/Default/images/steelIndicator.gif
new file mode 100755
index 0000000..0d91eed
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelIndicator.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelIndicator.png b/Swift/resources/themes/Default/images/steelIndicator.png
new file mode 100644
index 0000000..48a3af5
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelIndicator.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelIndicator2.png b/Swift/resources/themes/Default/images/steelIndicator2.png
new file mode 100644
index 0000000..1a34ac7
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelIndicator2.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/steelIndicatorAlt.gif b/Swift/resources/themes/Default/images/steelIndicatorAlt.gif
new file mode 100644
index 0000000..5d7686d
--- /dev/null
+++ b/Swift/resources/themes/Default/images/steelIndicatorAlt.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/typing-left.png b/Swift/resources/themes/Default/images/typing-left.png
new file mode 100755
index 0000000..e5448a5
--- /dev/null
+++ b/Swift/resources/themes/Default/images/typing-left.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/typing-right.png b/Swift/resources/themes/Default/images/typing-right.png
new file mode 100755
index 0000000..1e997d4
--- /dev/null
+++ b/Swift/resources/themes/Default/images/typing-right.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowBackground.gif b/Swift/resources/themes/Default/images/yellowBackground.gif
new file mode 100755
index 0000000..adcdb5d
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowBackground.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowBackground.png b/Swift/resources/themes/Default/images/yellowBackground.png
new file mode 100644
index 0000000..ea79d06
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowBackground.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowCurves.gif b/Swift/resources/themes/Default/images/yellowCurves.gif
new file mode 100755
index 0000000..c8bf931
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowCurves.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowCurves.png b/Swift/resources/themes/Default/images/yellowCurves.png
new file mode 100644
index 0000000..b4133ba
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowCurves.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowHeading.jpg b/Swift/resources/themes/Default/images/yellowHeading.jpg
new file mode 100755
index 0000000..bd6f049
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowHeading.jpg
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowIndicator.gif b/Swift/resources/themes/Default/images/yellowIndicator.gif
new file mode 100755
index 0000000..537414c
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowIndicator.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowIndicator.png b/Swift/resources/themes/Default/images/yellowIndicator.png
new file mode 100644
index 0000000..bfaf230
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowIndicator.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowIndicator2.png b/Swift/resources/themes/Default/images/yellowIndicator2.png
new file mode 100644
index 0000000..c59fe2b
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowIndicator2.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowIndicatorAlt.gif b/Swift/resources/themes/Default/images/yellowIndicatorAlt.gif
new file mode 100644
index 0000000..f3cd7b0
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowIndicatorAlt.gif
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowTL.png b/Swift/resources/themes/Default/images/yellowTL.png
new file mode 100644
index 0000000..2bdfa65
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowTL.png
Binary files differ
diff --git a/Swift/resources/themes/Default/images/yellowTR.png b/Swift/resources/themes/Default/images/yellowTR.png
new file mode 100644
index 0000000..1aff191
--- /dev/null
+++ b/Swift/resources/themes/Default/images/yellowTR.png
Binary files differ
diff --git a/Swift/resources/themes/Default/incoming_icon.png b/Swift/resources/themes/Default/incoming_icon.png
new file mode 100755
index 0000000..7080fd6
--- /dev/null
+++ b/Swift/resources/themes/Default/incoming_icon.png
Binary files differ
diff --git a/Swift/resources/themes/Default/main.css b/Swift/resources/themes/Default/main.css
new file mode 100755
index 0000000..c2ce2d5
--- /dev/null
+++ b/Swift/resources/themes/Default/main.css
@@ -0,0 +1,292 @@
+* {
+ word-wrap: break-word;
+ word-break:break-word;
+}
+
+#header1 {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ right: 0px;
+ margin: 0;
+ padding: 10px;
+ overflow: auto;
+ color: white;
+ font-family: Lucida Grande;
+ text-align: center;
+ font-size: 10px;
+ font-weight: regular;
+ background: rgba(0,0,0,.65);
+ z-index: 999;
+}
+
+#heading {
+ position: fixed;
+ top: 0px;
+ left: 0px;
+ margin: 0;
+ padding: 5px;
+ font-weight: regular;
+ background-color:#fbfbed;
+ z-index: 999;
+ width:100%;
+ height:45px;
+ border-bottom:2px solid #d5d5d5;
+ background:url("images/steelHeading.jpg") repeat-x top left;
+
+}
+
+#heading .conversationIncomingIcon {
+ position:absolute;
+ left:5px;
+ top:5px;
+}
+
+#heading .conversationIncomingIcon img {
+ width:48px;
+ height:48px;
+}
+
+#heading .conversationWith {
+ position:relative;
+ left:60px;
+ margin:5px 0 0 0;
+ font: bold 16px Myriad Pro, Myriad, Lucida Grande, Trebuchet MS, Arial;
+ overflow:hide;
+}
+
+#heading .conversationTime {
+ position:relative;
+ left:60px;
+ color:#6d6d6d;
+ font: bold 10px Myriad Pro, Myriad, Lucida Grande, Trebuchet MS, Arial;
+}
+
+body {
+ margin-top: 65px;
+ background-color: white;
+ color: black;
+}
+
+.status_container {
+ font: 10px Myriad, Lucida Grande, Arial;
+}
+
+
+body {
+}
+
+.followUp {
+ clear:right;
+ height:1px;
+ font-size:1px;
+ line-height:1px;
+ margin:4px 0 4px 0;
+}
+
+.chatItem {
+ opacity:0.96;
+}
+
+.tableBubble {
+ width:100%;
+}
+
+.tableBubble .tl {
+ height:8px;
+}
+
+.tableBubble .tr {
+ width:8px;
+ height:8px;
+}
+
+.message {
+ padding:0 1em 0 1.25em;
+ word-wrap: break-word;
+}
+
+.tableBubble .message {
+ font-size:11px;
+}
+
+.tableBubble .message img {
+ vertical-align:middle;
+}
+
+.tableBubble .messageRight {
+ width:1px;
+}
+
+.tableBubble .bl {
+ height:10px;
+}
+
+.tableBubble .br {
+ width:8px;
+ height:10px;
+}
+
+.tableBubble .timeStamp {
+ margin:2px;
+ margin-left:7px;
+ text-align:right;
+ float:right;
+}
+
+.myBubble .indicator {
+ position:absolute;
+ top:8px;
+ left:0;
+ width:13px;
+ height:11px;
+}
+
+.myBubble {
+ position:relative;
+ padding-left:10px;
+ margin-left:33px;
+ margin-right:10px;
+}
+
+.chatItem .avatar {
+ width:26px;
+ height:26px;
+ float:left;
+}
+
+/****** STatus ******/
+
+.statusMessage {
+ opacity:0.8;
+ color:#676767;
+}
+
+.statusMessage .myBubble .indicator {
+ background:url("images/steelIndicator.png") no-repeat top left;
+}
+
+.statusMessage .tableBubble .tl {
+ background:url("images/steelCurves.png") no-repeat top left;
+}
+
+.statusMessage .tableBubble .tr {
+ background:url("images/steelCurves.png") no-repeat top right;
+}
+
+.statusMessage .tableBubble .head {
+ background:url("images/steelCurves.png") no-repeat -10px 0;
+}
+
+.statusMessage .tableBubble .message {
+ background:url("images/steelBackground.png") repeat-y top left;
+}
+
+.statusMessage .tableBubble .messageRight {
+ background:url("images/steelBackground.png") repeat-y top right;
+}
+
+.statusMessage .tableBubble .bl {
+ background:url("images/steelCurves.png") no-repeat bottom left;
+}
+
+.statusMessage .tableBubble .br {
+ background:url("images/steelCurves.png") no-repeat bottom right;
+}
+
+.statusMessage .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+.statusMessage .timeStamp {
+ color:#676767;
+}
+
+
+/*incoming */
+
+.incomingItem .myBubble .indicator {
+ background:url("images/yellowIndicator.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tl {
+ background:url("images/yellowCurves.png") no-repeat top left;
+}
+
+.incomingItem .tableBubble .tr {
+ background:url("images/yellowCurves.png") no-repeat top right;
+}
+
+.incomingItem .tableBubble .head {
+ background:url("images/yellowCurves.png") no-repeat -10px 0;
+}
+
+.incomingItem .tableBubble .message {
+ background:url("images/yellowBackground.png") repeat-y top left;
+}
+
+.incomingItem .tableBubble .messageRight {
+ background:url("images/yellowBackground.png") repeat-y top right;
+}
+
+.incomingItem .tableBubble .bl {
+ background:url("images/yellowCurves.png") no-repeat bottom left;
+}
+
+.incomingItem .tableBubble .br {
+ background:url("images/yellowCurves.png") no-repeat bottom right;
+}
+
+.incomingItem .followUp {
+ background-color:#f4f0a7;
+ border-bottom:1px solid #fff;
+}
+
+.incomingItem .timeStamp {
+ color:#bdb410;
+}
+
+/* outgoing */
+
+
+.outgoingItem .myBubble .indicator {
+ background:url("images/greenIndicator.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tl {
+ background:url("images/greenCurves.png") no-repeat top left;
+}
+
+.outgoingItem .tableBubble .tr {
+ background:url("images/greenCurves.png") no-repeat top right;
+}
+
+.outgoingItem .tableBubble .head {
+ background:url("images/greenCurves.png") no-repeat -10px 0;
+}
+
+.outgoingItem .tableBubble .message {
+ background:url("images/greenBackground.png") repeat-y top left;
+}
+
+.outgoingItem .tableBubble .messageRight {
+ background:url("images/greenBackground.png") repeat-y top right;
+}
+
+.outgoingItem .tableBubble .bl {
+ background:url("images/greenCurves.png") no-repeat bottom left;
+}
+
+.outgoingItem .tableBubble .br {
+ background:url("images/greenCurves.png") no-repeat bottom right;
+}
+
+.outgoingItem .followUp {
+ background-color:#e2efc4;
+ border-bottom:1px solid #fff;
+}
+
+.outgoingItem .timeStamp {
+ color:#9ecf35;
+}
diff --git a/Swift/resources/themes/Default/noname.css b/Swift/resources/themes/Default/noname.css
new file mode 100644
index 0000000..9d905a9
--- /dev/null
+++ b/Swift/resources/themes/Default/noname.css
@@ -0,0 +1,3 @@
+.name {
+ display:none;
+}
diff --git a/Swift/resources/themes/Default/outgoing_icon.png b/Swift/resources/themes/Default/outgoing_icon.png
new file mode 100755
index 0000000..7080fd6
--- /dev/null
+++ b/Swift/resources/themes/Default/outgoing_icon.png
Binary files differ