diff options
| author | Kevin Smith <git@kismith.co.uk> | 2009-11-26 17:31:53 (GMT) |
|---|---|---|
| committer | Kevin Smith <git@kismith.co.uk> | 2009-11-26 17:46:21 (GMT) |
| commit | eebdef9a7724ff7fa86a5d1cca37759d37bbb336 (patch) | |
| tree | 7dd76b8e5d364eb1b019b2511a839a9eac8397e4 /Swift | |
| parent | 39e58e4593f54a65f810e73728fe2490958fcba2 (diff) | |
| download | swift-eebdef9a7724ff7fa86a5d1cca37759d37bbb336.zip swift-eebdef9a7724ff7fa86a5d1cca37759d37bbb336.tar.bz2 | |
Plumbing to show a dummy XMLConsoleWidget in the chat tabs.
This should all work now, and the XMLConsoleController needs to talk to the QtXMLConsoleWidget through the XMLConsoleWidget interface.
Resolves: #256
Diffstat (limited to 'Swift')
28 files changed, 223 insertions, 21 deletions
diff --git a/Swift/Controllers/MainController.cpp b/Swift/Controllers/MainController.cpp index e030a31..0705eb4 100644 --- a/Swift/Controllers/MainController.cpp +++ b/Swift/Controllers/MainController.cpp @@ -1,145 +1,153 @@ #include "Swift/Controllers/MainController.h" #include <boost/bind.hpp> #include <boost/lexical_cast.hpp> #include <boost/shared_ptr.hpp> #include <stdlib.h> #include "Swiften/Application/Application.h" #include "Swiften/Application/ApplicationMessageDisplay.h" #include "Swift/Controllers/ChatController.h" #include "Swift/Controllers/ChatWindowFactory.h" #include "Swift/Controllers/EventController.h" -#include "Swift/Controllers/LoginWindow.h" -#include "Swift/Controllers/LoginWindowFactory.h" +#include "Swift/Controllers/UIInterfaces/LoginWindow.h" +#include "Swift/Controllers/UIInterfaces/LoginWindowFactory.h" #include "Swift/Controllers/MainWindow.h" #include "Swift/Controllers/MainWindowFactory.h" #include "Swift/Controllers/MUCController.h" #include "Swift/Controllers/NickResolver.h" #include "Swift/Controllers/ProfileSettingsProvider.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/XMLConsoleController.h" #include "Swift/Controllers/XMPPRosterController.h" +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" #include "Swiften/Base/foreach.h" #include "Swiften/Base/String.h" #include "Swiften/Client/Client.h" #include "Swiften/Presence/PresenceSender.h" #include "Swiften/Elements/Presence.h" #include "Swiften/Elements/VCardUpdate.h" #include "Swiften/Queries/Responders/SoftwareVersionResponder.h" #include "Swiften/Roster/TreeWidgetFactory.h" #include "Swiften/Settings/SettingsProvider.h" #include "Swiften/Elements/DiscoInfo.h" #include "Swiften/Queries/Responders/DiscoInfoResponder.h" #include "Swiften/Disco/CapsInfoGenerator.h" #include "Swiften/Queries/Requests/GetDiscoInfoRequest.h" #include "Swiften/Queries/Requests/GetVCardRequest.h" #include "Swiften/Avatars/AvatarFileStorage.h" #include "Swiften/Avatars/AvatarManager.h" #include "Swiften/StringCodecs/SHA1.h" namespace { void printIncomingData(const Swift::String& data) { std::cout << "<- " << data << std::endl; } void printOutgoingData(const Swift::String& data) { std::cout << "-> " << data << std::endl; } } namespace Swift { static const String CLIENT_NAME = "Swift"; static const String CLIENT_VERSION = "0.3"; 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, SoundPlayer* soundPlayer) +MainController::MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory *treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory) : timerFactory_(&boostIOServiceThread_.getIOService()), idleDetector_(&idleQuerier_, &timerFactory_, 100), client_(NULL), presenceSender_(NULL), chatWindowFactory_(chatWindowFactory), mainWindowFactory_(mainWindowFactory), loginWindowFactory_(loginWindowFactory), treeWidgetFactory_(treeWidgetFactory), settings_(settings), xmppRosterController_(NULL), rosterController_(NULL), loginWindow_(NULL), clientVersionResponder_(NULL), nickResolver_(NULL), discoResponder_(NULL) { application_ = application; presenceOracle_ = NULL; avatarManager_ = NULL; + uiEventStream_ = new UIEventStream(); avatarStorage_ = new AvatarFileStorage(application_->getAvatarDir()); eventController_ = new EventController(); eventController_->onEventQueueLengthChange.connect(boost::bind(&MainController::handleEventQueueLengthChange, this, _1)); systemTrayController_ = new SystemTrayController(eventController_, systemTray); soundEventController_ = new SoundEventController(eventController_, soundPlayer, settings->getBoolSetting("playSounds", true)); - loginWindow_ = loginWindowFactory_->createLoginWindow(); + loginWindow_ = loginWindowFactory_->createLoginWindow(uiEventStream_); foreach (String profile, settings->getAvailableProfiles()) { ProfileSettingsProvider* profileSettings = new ProfileSettingsProvider(profile, settings); loginWindow_->addAvailableAccount(profileSettings->getStringSetting("jid"), profileSettings->getStringSetting("pass"), profileSettings->getStringSetting("certificate")); delete profileSettings; } loginWindow_->onLoginRequest.connect(boost::bind(&MainController::handleLoginRequest, this, _1, _2, _3, _4)); loginWindow_->onCancelLoginRequest.connect(boost::bind(&MainController::handleCancelLoginRequest, this)); idleDetector_.setIdleTimeSeconds(600); idleDetector_.onIdleChanged.connect(boost::bind(&MainController::handleInputIdleChanged, this, _1)); + + xmlConsoleController_ = new XMLConsoleController(uiEventStream_, xmlConsoleWidgetFactory); } MainController::~MainController() { foreach (JIDChatControllerPair controllerPair, chatControllers_) { delete controllerPair.second; } foreach (JIDMUCControllerPair controllerPair, mucControllers_) { delete controllerPair.second; } delete systemTrayController_; delete soundEventController_; delete avatarStorage_; + delete xmlConsoleController_; + delete uiEventStream_; resetClient(); } void MainController::resetClient() { serverDiscoInfo_ = boost::shared_ptr<DiscoInfo>(); xmppRoster_ = boost::shared_ptr<XMPPRoster>(); delete presenceOracle_; presenceOracle_ = NULL; delete nickResolver_; nickResolver_ = NULL; delete avatarManager_; avatarManager_ = NULL; delete rosterController_; rosterController_ = NULL; delete xmppRosterController_; xmppRosterController_ = NULL; delete clientVersionResponder_; clientVersionResponder_ = NULL; delete discoResponder_; discoResponder_ = NULL; delete presenceSender_; presenceSender_ = NULL; delete client_; client_ = NULL; } void MainController::handleConnected() { //FIXME: this freshLogin thing is temporary so I can see what's what before I split into a seperate method. bool freshLogin = rosterController_ == NULL; if (freshLogin) { serverDiscoInfo_ = boost::shared_ptr<DiscoInfo>(new DiscoInfo()); xmppRoster_ = boost::shared_ptr<XMPPRoster>(new XMPPRoster()); presenceOracle_ = new PresenceOracle(client_); lastSentPresence_ = boost::shared_ptr<Presence>(); client_->onPresenceReceived.connect(boost::bind(&MainController::handleIncomingPresence, this, _1)); nickResolver_ = new NickResolver(xmppRoster_); avatarManager_ = new AvatarManager(client_, client_, avatarStorage_, this); rosterController_ = new RosterController(jid_, xmppRoster_, avatarManager_, mainWindowFactory_, treeWidgetFactory_, nickResolver_); rosterController_->onStartChatRequest.connect(boost::bind(&MainController::handleChatRequest, this, _1)); rosterController_->onJoinMUCRequest.connect(boost::bind(&MainController::handleJoinMUCRequest, this, _1, _2)); rosterController_->onChangeStatusRequest.connect(boost::bind(&MainController::handleChangeStatusRequest, this, _1, _2)); rosterController_->onSignOutRequest.connect(boost::bind(&MainController::signOut, this)); diff --git a/Swift/Controllers/MainController.h b/Swift/Controllers/MainController.h index 78e49a2..c260f33 100644 --- a/Swift/Controllers/MainController.h +++ b/Swift/Controllers/MainController.h @@ -2,122 +2,127 @@ #include <boost/signals.hpp> #include <boost/shared_ptr.hpp> #include <vector> #include "Swiften/Network/BoostIOServiceThread.h" #include "Swiften/Network/BoostTimerFactory.h" #include "SwifTools/Idle/PlatformIdleQuerier.h" #include "SwifTools/Idle/ActualIdleDetector.h" #include "Swiften/Base/String.h" #include "Swiften/Client/ClientError.h" #include "Swiften/JID/JID.h" #include "Swiften/Elements/VCard.h" #include "Swiften/Elements/DiscoInfo.h" #include "Swiften/Elements/ErrorPayload.h" #include "Swiften/Elements/Presence.h" #include "Swiften/Elements/Message.h" #include "Swiften/Settings/SettingsProvider.h" #include "Swiften/Elements/CapsInfo.h" #include "Swiften/MUC/MUCRegistry.h" #include "Swiften/Roster/XMPPRoster.h" namespace Swift { class AvatarStorage; class Application; class Client; class ChatWindowFactory; class ChatController; class EventController; class MainWindowFactory; class MainWindow; class NickResolver; class RosterController; class XMPPRosterController; class PresenceSender; class DiscoInfoResponder; class AvatarManager; class LoginWindow; class EventLoop; class SoftwareVersionResponder; class LoginWindowFactory; class TreeWidgetFactory; class MUCController; class PresenceOracle; class SystemTray; class SystemTrayController; class SoundEventController; class SoundPlayer; + class XMLConsoleController; + class UIEventStream; + class XMLConsoleWidgetFactory; class MainController : public MUCRegistry { public: - MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer); + MainController(ChatWindowFactory* chatWindowFactory, MainWindowFactory *mainWindowFactory, LoginWindowFactory *loginWindowFactory, TreeWidgetFactory* treeWidgetFactory, SettingsProvider *settings, Application* application, SystemTray* systemTray, SoundPlayer* soundPlayer, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory); ~MainController(); private: void resetClient(); void handleConnected(); void handleLoginRequest(const String& username, const String& password, const String& certificateFile, bool remember); void handleCancelLoginRequest(); void handleChatRequest(const String& contact); void handleJoinMUCRequest(const JID& muc, const String& nick); void handleIncomingPresence(boost::shared_ptr<Presence> presence); void handleChatControllerJIDChanged(const JID& from, const JID& to); void handleIncomingMessage(boost::shared_ptr<Message> message); void handleChangeStatusRequest(StatusShow::Type show, const String &statusText); void handleError(const ClientError& error); void handleServerDiscoInfoResponse(boost::shared_ptr<DiscoInfo>, const boost::optional<ErrorPayload>&); void handleEventQueueLengthChange(int count); void handleOwnVCardReceived(boost::shared_ptr<VCard> vCard, const boost::optional<ErrorPayload>& error); ChatController* getChatController(const JID &contact); void sendPresence(boost::shared_ptr<Presence> presence); void handleInputIdleChanged(bool); void logout(); void signOut(); virtual bool isMUC(const JID& muc) const; void performLoginFromCachedCredentials(); void reconnectAfterError(); void setManagersEnabled(bool enabled); BoostIOServiceThread boostIOServiceThread_; BoostTimerFactory timerFactory_; PlatformIdleQuerier idleQuerier_; ActualIdleDetector idleDetector_; Client* client_; PresenceSender* presenceSender_; ChatWindowFactory* chatWindowFactory_; MainWindowFactory* mainWindowFactory_; LoginWindowFactory* loginWindowFactory_; TreeWidgetFactory* treeWidgetFactory_; SettingsProvider *settings_; Application* application_; AvatarStorage* avatarStorage_; ChatController* chatController_; XMPPRosterController* xmppRosterController_; RosterController* rosterController_; EventController* eventController_; LoginWindow* loginWindow_; SoftwareVersionResponder* clientVersionResponder_; NickResolver* nickResolver_; DiscoInfoResponder* discoResponder_; + UIEventStream* uiEventStream_; + XMLConsoleController* xmlConsoleController_; boost::shared_ptr<CapsInfo> capsInfo_; std::map<JID, MUCController*> mucControllers_; std::map<JID, ChatController*> chatControllers_; boost::shared_ptr<DiscoInfo> serverDiscoInfo_; boost::shared_ptr<XMPPRoster> xmppRoster_;; JID jid_; PresenceOracle* presenceOracle_; SystemTrayController* systemTrayController_; SoundEventController* soundEventController_; AvatarManager* avatarManager_; boost::shared_ptr<Presence> lastSentPresence_; boost::shared_ptr<Presence> preIdlePresence_; String vCardPhotoHash_; boost::shared_ptr<Presence> queuedPresence_; String password_; String certificateFile_; }; } diff --git a/Swift/Controllers/SConscript b/Swift/Controllers/SConscript index dfcf878..6c9b049 100644 --- a/Swift/Controllers/SConscript +++ b/Swift/Controllers/SConscript @@ -1,27 +1,29 @@ Import("env") env["SWIFT_CONTROLLERS_FLAGS"] = { "LIBPATH": [Dir(".")], "LIBS": ["SwiftControllers"] } myenv = env.Clone() myenv.MergeFlags(env["BOOST_FLAGS"]) myenv.StaticLibrary("SwiftControllers", [ "ChatController.cpp", "ChatControllerBase.cpp", "MainController.cpp", "NickResolver.cpp", "RosterController.cpp", "XMPPRosterController.cpp", "MUCController.cpp", "EventController.cpp", "SoundEventController.cpp", - "SystemTrayController.cpp" + "SystemTrayController.cpp", + "XMLConsoleController.cpp", + "UIEvents/UIEvent.cpp" ]) env.Append(UNITTEST_SOURCES = [ File("UnitTest/NickResolverTest.cpp"), File("UnitTest/RosterControllerTest.cpp"), File("UnitTest/XMPPRosterControllerTest.cpp") ]) diff --git a/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h b/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h new file mode 100644 index 0000000..63492b3 --- /dev/null +++ b/Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h @@ -0,0 +1,9 @@ +#pragma once + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { + class RequestXMLConsoleUIEvent : public UIEvent { + + }; +} diff --git a/Swift/Controllers/UIEvents/UIEvent.cpp b/Swift/Controllers/UIEvents/UIEvent.cpp new file mode 100644 index 0000000..7d29a19 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEvent.cpp @@ -0,0 +1,7 @@ +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { +UIEvent::~UIEvent() { + +} +} diff --git a/Swift/Controllers/UIEvents/UIEvent.h b/Swift/Controllers/UIEvents/UIEvent.h new file mode 100644 index 0000000..7e06255 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEvent.h @@ -0,0 +1,8 @@ +#pragma once + +namespace Swift { + class UIEvent { + public: + virtual ~UIEvent(); + }; +} diff --git a/Swift/Controllers/UIEvents/UIEventStream.h b/Swift/Controllers/UIEvents/UIEventStream.h new file mode 100644 index 0000000..a20c578 --- /dev/null +++ b/Swift/Controllers/UIEvents/UIEventStream.h @@ -0,0 +1,15 @@ +#pragma once + +#include <boost/signals.hpp> +#include <boost/shared_ptr.hpp> + + +#include "Swift/Controllers/UIEvents/UIEvent.h" + +namespace Swift { + class UIEventStream { + public: + boost::signal<void (boost::shared_ptr<UIEvent>)> onUIEvent; + void send(boost::shared_ptr<UIEvent> event) {onUIEvent(event);}; + }; +} diff --git a/Swift/Controllers/LoginWindow.h b/Swift/Controllers/UIInterfaces/LoginWindow.h index cfa20c7..cfa20c7 100644 --- a/Swift/Controllers/LoginWindow.h +++ b/Swift/Controllers/UIInterfaces/LoginWindow.h diff --git a/Swift/Controllers/LoginWindowFactory.h b/Swift/Controllers/UIInterfaces/LoginWindowFactory.h index 79ad5c0..d2dc31b 100644 --- a/Swift/Controllers/LoginWindowFactory.h +++ b/Swift/Controllers/UIInterfaces/LoginWindowFactory.h @@ -1,22 +1,23 @@ #ifndef SWIFTEN_LoginWindowFactory_H #define SWIFTEN_LoginWindowFactory_H namespace Swift { class LoginWindow; - class String; + class String; + class UIEventStream; class LoginWindowFactory { public: virtual ~LoginWindowFactory() {}; /** * Transfers ownership of result. */ - virtual LoginWindow* createLoginWindow() = 0; + virtual LoginWindow* createLoginWindow(UIEventStream* uiEventStream) = 0; }; } #endif diff --git a/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h b/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h new file mode 100644 index 0000000..69628df --- /dev/null +++ b/Swift/Controllers/UIInterfaces/XMLConsoleWidget.h @@ -0,0 +1,7 @@ +#pragma once + +namespace Swift { + class XMLConsoleWidget { + + }; +} diff --git a/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h b/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h new file mode 100644 index 0000000..fa7707a --- /dev/null +++ b/Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidget.h" + +namespace Swift { + class UIEventStream; + class XMLConsoleWidgetFactory { + public: + virtual XMLConsoleWidget* createXMLConsoleWidget() = 0; + virtual ~XMLConsoleWidgetFactory() {}; + }; +} diff --git a/Swift/Controllers/XMLConsoleController.cpp b/Swift/Controllers/XMLConsoleController.cpp new file mode 100644 index 0000000..8bd79ed --- /dev/null +++ b/Swift/Controllers/XMLConsoleController.cpp @@ -0,0 +1,21 @@ +#include "Swift/Controllers/XMLConsoleController.h" + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" + +#include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" + +namespace Swift { +XMLConsoleController::XMLConsoleController(UIEventStream* uiEventStream, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory) { + uiEventStream_ = uiEventStream; + xmlConsoleWidgetFactory_ = xmlConsoleWidgetFactory; + uiEventStream_->onUIEvent.connect(boost::bind(&XMLConsoleController::handleUIEvent, this, _1)); +} + +void XMLConsoleController::handleUIEvent(boost::shared_ptr<UIEvent> rawEvent) { + boost::shared_ptr<RequestXMLConsoleUIEvent> event = boost::dynamic_pointer_cast<RequestXMLConsoleUIEvent>(rawEvent); + if (event != NULL) { + xmlConsoleWidget_ = xmlConsoleWidgetFactory_->createXMLConsoleWidget(); + } +} + +} diff --git a/Swift/Controllers/XMLConsoleController.h b/Swift/Controllers/XMLConsoleController.h new file mode 100644 index 0000000..f97e6c1 --- /dev/null +++ b/Swift/Controllers/XMLConsoleController.h @@ -0,0 +1,21 @@ +#pragma once + +#include <boost/signals.hpp> +#include <boost/bind.hpp> +#include <boost/shared_ptr.hpp> + +#include "Swift/Controllers/UIEvents/UIEventStream.h" + +namespace Swift { + class XMLConsoleWidgetFactory; + class XMLConsoleWidget; + class XMLConsoleController { + public: + XMLConsoleController(UIEventStream* uiEventStream, XMLConsoleWidgetFactory* xmlConsoleWidgetFactory); + private: + void handleUIEvent(boost::shared_ptr<UIEvent> event); + UIEventStream* uiEventStream_; + XMLConsoleWidgetFactory* xmlConsoleWidgetFactory_; + XMLConsoleWidget* xmlConsoleWidget_; + }; +} diff --git a/Swift/QtUI/QtChatWindowFactory.cpp b/Swift/QtUI/QtChatWindowFactory.cpp index c0f1e09..ff927c9 100644 --- a/Swift/QtUI/QtChatWindowFactory.cpp +++ b/Swift/QtUI/QtChatWindowFactory.cpp @@ -1,41 +1,41 @@ #include "QtChatWindowFactory.h" #include <QDesktopWidget> #include "QtChatTabs.h" #include "QtChatWindow.h" #include "QtSwiftUtil.h" #include "Roster/QtTreeWidgetFactory.h" namespace Swift { -QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings) : treeWidgetFactory_(treeWidgetFactory) { +QtChatWindowFactory::QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs) : treeWidgetFactory_(treeWidgetFactory) { settings_ = settings; - tabs_ = new QtChatTabs(); + tabs_ = tabs; if (splitter) { splitter->addWidget(tabs_); } else { QVariant chatTabsGeometryVariant = settings_->getQSettings()->value("chatTabsGeometry"); if (chatTabsGeometryVariant.isValid()) { tabs_->restoreGeometry(chatTabsGeometryVariant.toByteArray()); } connect(tabs_, SIGNAL(geometryChanged()), this, SLOT(handleWindowGeometryChanged())); } } ChatWindow* QtChatWindowFactory::createChatWindow(const JID &contact) { QtChatWindow *chatWindow = new QtChatWindow(P2QSTRING(contact.toString()), treeWidgetFactory_); tabs_->addTab(chatWindow); if (!tabs_->isVisible()) { tabs_->showMinimized(); //tabs_->minimise(); } //chatWindow->show(); return chatWindow; } void QtChatWindowFactory::handleWindowGeometryChanged() { settings_->getQSettings()->setValue("chatTabsGeometry", tabs_->saveGeometry()); } } diff --git a/Swift/QtUI/QtChatWindowFactory.h b/Swift/QtUI/QtChatWindowFactory.h index 4a5a7fb..0c8a092 100644 --- a/Swift/QtUI/QtChatWindowFactory.h +++ b/Swift/QtUI/QtChatWindowFactory.h @@ -1,27 +1,27 @@ #ifndef SWIFT_QtChatWindowFactory_H #define SWIFT_QtChatWindowFactory_H #include "Swift/Controllers/ChatWindowFactory.h" #include "Swiften/JID/JID.h" #include "QtSettingsProvider.h" #include <QObject> #include <QSplitter> namespace Swift { class QtTreeWidgetFactory; class QtChatTabs; class QtChatWindowFactory : public QObject, public ChatWindowFactory { Q_OBJECT public: - QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings); + QtChatWindowFactory(QtTreeWidgetFactory *treeWidgetFactory, QSplitter* splitter, QtSettingsProvider* settings, QtChatTabs* tabs); ChatWindow* createChatWindow(const JID &contact); private slots: void handleWindowGeometryChanged(); private: QtTreeWidgetFactory* treeWidgetFactory_; QtSettingsProvider* settings_; QtChatTabs* tabs_; }; } #endif diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp index 6466692..2fd27c6 100644 --- a/Swift/QtUI/QtLoginWindow.cpp +++ b/Swift/QtUI/QtLoginWindow.cpp @@ -1,154 +1,163 @@ #include "QtLoginWindow.h" +#include "Swift/Controllers/UIEvents/UIEventStream.h" +#include "Swift/Controllers/UIEvents/RequestXMLConsoleUIEvent.h" #include "QtAboutWidget.h" #include "QtSwiftUtil.h" #include "QtMainWindow.h" #include <algorithm> #include <QApplication> #include <QBoxLayout> #include <QComboBox> #include <QDesktopWidget> #include <QFileDialog> #include <QStatusBar> #include <QToolButton> #include <QLabel> #include <QMenuBar> #include <cassert> namespace Swift{ -QtLoginWindow::QtLoginWindow() : QMainWindow() { +QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream) : QMainWindow() { + uiEventStream_ = uiEventStream; setWindowTitle("Swift"); resize(200, 500); setContentsMargins(0,0,0,0); QWidget *centralWidget = new QWidget(this); setCentralWidget(centralWidget); QBoxLayout *topLayout = new QBoxLayout(QBoxLayout::TopToBottom, centralWidget); stack_ = new QStackedWidget(centralWidget); topLayout->addWidget(stack_); topLayout->setMargin(0); QWidget *wrapperWidget = new QWidget(this); wrapperWidget->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); QBoxLayout *layout = new QBoxLayout(QBoxLayout::TopToBottom, wrapperWidget); layout->addStretch(); QLabel* logo = new QLabel(this); logo->setPixmap(QPixmap(":/logo-shaded-text.256.png")); logo->setScaledContents(true); logo->setFixedSize(192,192); layout->addWidget(logo); layout->addStretch(); QLabel* jidLabel = new QLabel(this); jidLabel->setText("<font size='-1'>User address</font>"); layout->addWidget(jidLabel); username_ = new QComboBox(this); username_->setEditable(true); layout->addWidget(username_); QLabel* passwordLabel = new QLabel(); passwordLabel->setText("<font size='-1'>Password</font>"); layout->addWidget(passwordLabel); QWidget* w = new QWidget(this); w->setSizePolicy(QSizePolicy(QSizePolicy::Expanding, QSizePolicy::Expanding)); layout->addWidget(w); QHBoxLayout* credentialsLayout = new QHBoxLayout(w); credentialsLayout->setMargin(0); credentialsLayout->setSpacing(3); password_ = new QLineEdit(this); password_->setEchoMode(QLineEdit::Password); connect(password_, SIGNAL(returnPressed()), this, SLOT(loginClicked())); connect(username_->lineEdit(), SIGNAL(returnPressed()), password_, SLOT(setFocus())); connect(username_, SIGNAL(editTextChanged(const QString&)), this, SLOT(handleUsernameTextChanged())); credentialsLayout->addWidget(password_); certificateButton_ = new QToolButton(this); certificateButton_->setCheckable(true); certificateButton_->setIcon(QIcon(":/icons/certificate.png")); credentialsLayout->addWidget(certificateButton_); connect(certificateButton_, SIGNAL(clicked(bool)), SLOT(handleCertficateChecked(bool))); loginButton_ = new QPushButton(this); loginButton_->setText(tr("Connect")); loginButton_->setAutoDefault(true); loginButton_->setDefault(true); layout->addWidget(loginButton_); message_ = new QLabel(this); message_->setTextFormat(Qt::RichText); message_->setWordWrap(true); layout->addWidget(message_); layout->addStretch(); remember_ = new QCheckBox(tr("Remember Password?"), this); layout->addWidget(remember_); connect(loginButton_, SIGNAL(clicked()), SLOT(loginClicked())); stack_->addWidget(wrapperWidget); #ifdef SWIFTEN_PLATFORM_MACOSX menuBar_ = new QMenuBar(NULL); #else menuBar_ = menuBar(); #endif QApplication::setQuitOnLastWindowClosed(false); swiftMenu_ = new QMenu(tr("Swift"), this); QAction* aboutAction = new QAction("About Swift", this); connect(aboutAction, SIGNAL(activated()), SLOT(handleAbout())); swiftMenu_->addAction(aboutAction); + + toolsMenu_ = new QMenu(tr("Tools"), this); + + QAction* xmlConsoleAction = new QAction(tr("Show Debug Console"), this); + connect(xmlConsoleAction, SIGNAL(activated()), SLOT(handleShowXMLConsole())); + toolsMenu_->addAction(xmlConsoleAction); QAction* quitAction = new QAction("Quit", this); connect(quitAction, SIGNAL(activated()), SLOT(handleQuit())); swiftMenu_->addAction(quitAction); setInitialMenus(); this->show(); } /** * Move and resize the window, but respect minimum sizes. * (Like QWidget::setGeometry, only that will truncate the window * the setGeometry docs say that it shouldn't do this, but I've just seen it * maybe we can remove this method if that's a Qt bug (or I'm misusing it)). */ void QtLoginWindow::setGentleGeometry(const QRect& rect) { resize(rect.size()); move(rect.topLeft()); } QRect QtLoginWindow::defaultPosition() { QDesktopWidget desktop; int windowWidth = 200; int windowHeight = 500; QRect screen = desktop.screenGeometry(-1); //appear on default screen windowWidth = std::min(windowWidth, screen.width()); windowHeight = std::min(windowHeight, screen.height()); int left = (screen.width() - windowWidth) / 2; int height = (screen.height() - windowHeight) / 2; return QRect(left, height, windowWidth, windowHeight); } void QtLoginWindow::addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate) { QString username = P2QSTRING(defaultJID); int index = -1; for (int i = 0; i < usernames_.count(); i++) { if (username == usernames_[i]) { index = i; } } if (index == -1) { usernames_.append(username); passwords_.append(P2QSTRING(defaultPassword)); certificateFiles_.append(P2QSTRING(defaultCertificate)); username_->addItem(username); } else { usernames_[index] = username; passwords_[index] = P2QSTRING(defaultPassword); @@ -165,99 +174,104 @@ void QtLoginWindow::handleUsernameTextChanged() { } } if (!certificateFile_.isEmpty()) { certificateButton_->setChecked(true); } remember_->setChecked(password_->text() != ""); } void QtLoginWindow::loggedOut() { if (stack_->count() > 1) { QWidget* current = stack_->currentWidget(); stack_->setCurrentIndex(0); stack_->removeWidget(current); } setInitialMenus(); setEnabled(true); } void QtLoginWindow::loginClicked() { setEnabled(false); message_->setText(""); onLoginRequest(Q2PSTRING(username_->currentText()), Q2PSTRING(password_->text()), Q2PSTRING(certificateFile_), remember_->isChecked()); } void QtLoginWindow::handleCertficateChecked(bool checked) { if (checked) { certificateFile_ = QFileDialog::getOpenFileName(this, "Select an authentication certificate", QString(), QString("*.cert")); if (certificateFile_.isEmpty()) { certificateButton_->setChecked(false); } } else { certificateFile_ = ""; } } void QtLoginWindow::handleAbout() { if (!aboutDialog_) { aboutDialog_ = new QtAboutWidget(); aboutDialog_->show(); } else { aboutDialog_->show(); aboutDialog_->raise(); aboutDialog_->activateWindow(); } } +void QtLoginWindow::handleShowXMLConsole() { + uiEventStream_->send(boost::shared_ptr<RequestXMLConsoleUIEvent>(new RequestXMLConsoleUIEvent())); +} + void QtLoginWindow::handleQuit() { QApplication::quit(); } void QtLoginWindow::setInitialMenus() { menuBar_->clear(); menuBar_->addMenu(swiftMenu_); + menuBar_->addMenu(toolsMenu_); } void QtLoginWindow::morphInto(MainWindow *mainWindow) { QtMainWindow *qtMainWindow = dynamic_cast<QtMainWindow*>(mainWindow); assert(qtMainWindow); stack_->addWidget(qtMainWindow); stack_->setCurrentWidget(qtMainWindow); setEnabled(true); setInitialMenus(); foreach (QMenu* menu, qtMainWindow->getMenus()) { menuBar_->addMenu(menu); } } void QtLoginWindow::setMessage(const String& message) { if (!message.isEmpty()) { message_->setText("<center><font color=\"red\">" + P2QSTRING(message) + "</font></center>"); } else { message_->setText(""); } } void QtLoginWindow::bringToFront() { if (isHidden()) { showNormal(); raise(); activateWindow(); } else { hide(); } } void QtLoginWindow::resizeEvent(QResizeEvent*) { emit geometryChanged(); } void QtLoginWindow::moveEvent(QMoveEvent*) { emit geometryChanged(); } } diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h index 5abb10a..491521b 100644 --- a/Swift/QtUI/QtLoginWindow.h +++ b/Swift/QtUI/QtLoginWindow.h @@ -1,64 +1,68 @@ #ifndef SWIFT_QtLoginWindow_H #define SWIFT_QtLoginWindow_H #include <QMainWindow> #include <QPointer> #include <QLineEdit> #include <QPushButton> #include <QCheckBox> #include <QStackedWidget> #include <QMenuBar> -#include "Swift/Controllers/LoginWindow.h" +#include "Swift/Controllers/UIInterfaces/LoginWindow.h" #include "Swift/Controllers/MainWindow.h" #include "QtAboutWidget.h" class QLabel; class QToolButton; class QComboBox; namespace Swift { + class UIEventStream; class QtLoginWindow : public QMainWindow, public LoginWindow { Q_OBJECT public: - QtLoginWindow(); + QtLoginWindow(UIEventStream* uiEventStream); void morphInto(MainWindow *mainWindow); virtual void loggedOut(); virtual void setMessage(const String& message); virtual void addAvailableAccount(const String& defaultJID, const String& defaultPassword, const String& defaultCertificate); static QRect defaultPosition(); void setGentleGeometry(const QRect&); signals: void geometryChanged(); private slots: void loginClicked(); void handleCertficateChecked(bool); void handleQuit(); + void handleShowXMLConsole(); void handleAbout(); void bringToFront(); void handleUsernameTextChanged(); void resizeEvent(QResizeEvent* event); void moveEvent(QMoveEvent* event); private: void setInitialMenus(); QStringList usernames_; QStringList passwords_; QStringList certificateFiles_; QComboBox* username_; QLineEdit* password_; QPushButton* loginButton_; QCheckBox* remember_; QStackedWidget* stack_; QLabel* message_; QString certificateFile_; QToolButton* certificateButton_; QMenuBar* menuBar_; QMenu* swiftMenu_; + QMenu* toolsMenu_; + UIEventStream* uiEventStream_; QPointer<QtAboutWidget> aboutDialog_; }; } #endif diff --git a/Swift/QtUI/QtLoginWindowFactory.cpp b/Swift/QtUI/QtLoginWindowFactory.cpp index c395c57..0453d0f 100644 --- a/Swift/QtUI/QtLoginWindowFactory.cpp +++ b/Swift/QtUI/QtLoginWindowFactory.cpp @@ -1,33 +1,33 @@ #include "QtLoginWindowFactory.h" #include "QtLoginWindow.h" #include <QDesktopWidget> namespace Swift { QtLoginWindowFactory::QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings) : QObject() { settings_ = settings; splitter_ = splitter; systemTray_ = systemTray; } -LoginWindow* QtLoginWindowFactory::createLoginWindow() { - window_ = new QtLoginWindow(); +LoginWindow* QtLoginWindowFactory::createLoginWindow(UIEventStream* uiEventStream) { + window_ = new QtLoginWindow(uiEventStream); if (splitter_) { splitter_->insertWidget(0, window_); return window_; } connect(systemTray_, SIGNAL(clicked()), window_, SLOT(bringToFront())); QVariant loginWindowGeometryVariant = settings_->getQSettings()->value("loginWindowGeometry"); if (loginWindowGeometryVariant.isValid()) { window_->restoreGeometry(loginWindowGeometryVariant.toByteArray()); } connect(window_, SIGNAL(geometryChanged()), this, SLOT(handleWindowGeometryChanged())); return window_; } void QtLoginWindowFactory::handleWindowGeometryChanged() { settings_->getQSettings()->setValue("loginWindowGeometry", window_->saveGeometry()); } } diff --git a/Swift/QtUI/QtLoginWindowFactory.h b/Swift/QtUI/QtLoginWindowFactory.h index dd5bc57..5af8b76 100644 --- a/Swift/QtUI/QtLoginWindowFactory.h +++ b/Swift/QtUI/QtLoginWindowFactory.h @@ -1,28 +1,28 @@ #ifndef SWIFT_QtLoginWindowFactory_H #define SWIFT_QtLoginWindowFactory_H -#include "Swift/Controllers/LoginWindowFactory.h" +#include "Swift/Controllers/UIInterfaces/LoginWindowFactory.h" #include "Swift/QtUI/QtSystemTray.h" #include <QSplitter> #include "QtSettingsProvider.h" namespace Swift { class QtLoginWindow; class QtLoginWindowFactory : public QObject, public LoginWindowFactory { Q_OBJECT public: QtLoginWindowFactory(QSplitter* splitter, QtSystemTray* systemTray, QtSettingsProvider* settings); - LoginWindow* createLoginWindow(); + LoginWindow* createLoginWindow(UIEventStream* uiEventStream); private slots: void handleWindowGeometryChanged(); private: QSplitter* splitter_; QtSystemTray* systemTray_; QtSettingsProvider* settings_; QtLoginWindow* window_; }; } #endif diff --git a/Swift/QtUI/QtSwift.cpp b/Swift/QtUI/QtSwift.cpp index 2aaa27e..7e204e9 100644 --- a/Swift/QtUI/QtSwift.cpp +++ b/Swift/QtUI/QtSwift.cpp @@ -1,62 +1,68 @@ #include "QtSwift.h" #include "QtLoginWindowFactory.h" #include "QtChatWindowFactory.h" #include "QtLoginWindow.h" #include "QtChatTabs.h" #include "QtMainWindowFactory.h" #include "Roster/QtTreeWidgetFactory.h" #include "QtSystemTray.h" #include "QtSoundPlayer.h" +#include "QtXMLConsoleWidgetFactory.h" #include <boost/bind.hpp> #include <QSplitter> #include "Swiften/Application/Application.h" #include "Swiften/Application/Platform/PlatformApplication.h" #include "Swiften/Base/String.h" #include "Swiften/Elements/Presence.h" #include "Swiften/Client/Client.h" #include "Swift/Controllers/ChatController.h" #include "Swift/Controllers/MainController.h" #include "Swift/QtUI/BuildVersion.h" namespace Swift{ QtSwift::QtSwift(bool netbookMode) { if (netbookMode) { splitter_ = new QSplitter(); } else { splitter_ = NULL; } QCoreApplication::setApplicationName("Swift"); QCoreApplication::setOrganizationName("Swift"); QCoreApplication::setOrganizationDomain("swift.im"); QCoreApplication::setApplicationVersion(buildVersion); + + tabs_ = new QtChatTabs(); settings_ = new QtSettingsProvider(); application_ = new PlatformApplication("Swift"); treeWidgetFactory_ = new QtTreeWidgetFactory(); systemTray_ = new QtSystemTray(); loginWindowFactory_ = new QtLoginWindowFactory(splitter_, systemTray_, settings_); - chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_, settings_); + chatWindowFactory_ = new QtChatWindowFactory(treeWidgetFactory_, splitter_, settings_, tabs_); rosterWindowFactory_ = new QtMainWindowFactory(treeWidgetFactory_); + xmlConsoleWidgetFactory_ = new QtXMLConsoleWidgetFactory(tabs_); soundPlayer_ = new QtSoundPlayer(); if (splitter_) { splitter_->show(); } - mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_); + mainController_ = new MainController(chatWindowFactory_, rosterWindowFactory_, loginWindowFactory_, treeWidgetFactory_, settings_, application_, systemTray_, soundPlayer_, xmlConsoleWidgetFactory_); } QtSwift::~QtSwift() { delete chatWindowFactory_; delete rosterWindowFactory_; delete loginWindowFactory_; delete treeWidgetFactory_; delete mainController_; delete settings_; delete application_; delete systemTray_; delete splitter_; delete soundPlayer_; + delete tabs_; + delete xmlConsoleWidgetFactory_; } } diff --git a/Swift/QtUI/QtSwift.h b/Swift/QtUI/QtSwift.h index 263dc05..ad113d6 100644 --- a/Swift/QtUI/QtSwift.h +++ b/Swift/QtUI/QtSwift.h @@ -1,43 +1,46 @@ #ifndef SWIFT_QtSwift_H #define SWIFT_QtSwift_H #include "Swiften/Base/String.h" #include "Swiften/EventLoop/Qt/QtEventLoop.h" #include "QtLoginWindowFactory.h" #include "QtMainWindowFactory.h" #include "QtChatWindowFactory.h" #include "QtSettingsProvider.h" class QSplitter; namespace Swift { class Application; class MainController; class QtChatWindowFactory; class QtMainWindowFactory; class QtLoginWindowFactory; class QtTreeWidgetFactory; + class QtXMLConsoleWidgetFactory; class QtSystemTray; class QtSoundPlayer; - + class QtSwift : public QObject { Q_OBJECT public: QtSwift(bool netbookMode); ~QtSwift(); private: MainController *mainController_; QtTreeWidgetFactory *treeWidgetFactory_; QtChatWindowFactory *chatWindowFactory_; QtMainWindowFactory *rosterWindowFactory_; QtLoginWindowFactory *loginWindowFactory_; + QtXMLConsoleWidgetFactory* xmlConsoleWidgetFactory_; QtEventLoop clientMainThreadCaller_; QtSettingsProvider *settings_; QtSystemTray* systemTray_; QSplitter* splitter_; QtSoundPlayer* soundPlayer_; + QtChatTabs* tabs_; Application* application_; }; } #endif diff --git a/Swift/QtUI/QtXMLConsole.cpp b/Swift/QtUI/QtXMLConsole.cpp new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Swift/QtUI/QtXMLConsole.cpp diff --git a/Swift/QtUI/QtXMLConsole.h b/Swift/QtUI/QtXMLConsole.h new file mode 100644 index 0000000..e69de29 --- /dev/null +++ b/Swift/QtUI/QtXMLConsole.h diff --git a/Swift/QtUI/QtXMLConsoleWidget.cpp b/Swift/QtUI/QtXMLConsoleWidget.cpp new file mode 100644 index 0000000..d2ebb06 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidget.cpp @@ -0,0 +1,7 @@ +#include "QtXMLConsoleWidget.h" + +namespace Swift { +QtXMLConsoleWidget::QtXMLConsoleWidget() { + +} +} diff --git a/Swift/QtUI/QtXMLConsoleWidget.h b/Swift/QtUI/QtXMLConsoleWidget.h new file mode 100644 index 0000000..f545e18 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidget.h @@ -0,0 +1,12 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidget.h" +#include "QtTabbable.h" + +namespace Swift { + class QtXMLConsoleWidget : public QtTabbable, public XMLConsoleWidget { + Q_OBJECT + public: + QtXMLConsoleWidget(); + }; +} diff --git a/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp b/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp new file mode 100644 index 0000000..9e32b0a --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidgetFactory.cpp @@ -0,0 +1,22 @@ +#include "QtXMLConsoleWidgetFactory.h" + +#include "QtXMLConsoleWidget.h" +#include "QtChatTabs.h" + +namespace Swift { + +QtXMLConsoleWidgetFactory::QtXMLConsoleWidgetFactory(QtChatTabs* tabs) { + tabs_ = tabs; +} + +XMLConsoleWidget* QtXMLConsoleWidgetFactory::createXMLConsoleWidget() { + QtXMLConsoleWidget* widget = new QtXMLConsoleWidget(); + tabs_->addTab(widget); + if (!tabs_->isVisible()) { + tabs_->show(); + } + widget->show(); + return widget; +} + +} diff --git a/Swift/QtUI/QtXMLConsoleWidgetFactory.h b/Swift/QtUI/QtXMLConsoleWidgetFactory.h new file mode 100644 index 0000000..5158949 --- /dev/null +++ b/Swift/QtUI/QtXMLConsoleWidgetFactory.h @@ -0,0 +1,16 @@ +#pragma once + +#include "Swift/Controllers/UIInterfaces/XMLConsoleWidgetFactory.h" + +#include "QtXMLConsoleWidget.h" + +namespace Swift { + class QtChatTabs; + class QtXMLConsoleWidgetFactory : public XMLConsoleWidgetFactory { + public: + QtXMLConsoleWidgetFactory(QtChatTabs* tabs); + XMLConsoleWidget* createXMLConsoleWidget(); + private: + QtChatTabs* tabs_; + }; +} diff --git a/Swift/QtUI/SConscript b/Swift/QtUI/SConscript index 42cf07a..b70832a 100644 --- a/Swift/QtUI/SConscript +++ b/Swift/QtUI/SConscript @@ -23,96 +23,98 @@ myenv = env.Clone() myenv.MergeFlags(env["SWIFT_CONTROLLERS_FLAGS"]) myenv.MergeFlags(env["SWIFTOOLS_FLAGS"]) if myenv["HAVE_XSS"] : myenv.MergeFlags(env["XSS_FLAGS"]) myenv.MergeFlags(env["SWIFTEN_FLAGS"]) myenv.MergeFlags(env["CPPUNIT_FLAGS"]) myenv.MergeFlags(env["LIBIDN_FLAGS"]) myenv.MergeFlags(env["BOOST_FLAGS"]) myenv.MergeFlags(env["SQLITE_FLAGS"]) myenv.MergeFlags(env["ZLIB_FLAGS"]) myenv.MergeFlags(env["OPENSSL_FLAGS"]) myenv.MergeFlags(env.get("LIBXML_FLAGS", "")) myenv.MergeFlags(env.get("EXPAT_FLAGS", "")) myenv.Tool("qt4", toolpath = ["#/BuildTools/SCons/Tools"]) myenv.Tool("nsis", toolpath = ["#/BuildTools/SCons/Tools"]) myenv.EnableQt4Modules(['QtCore', 'QtGui', 'QtWebKit'], debug = False) myenv.Append(CPPPATH = ["/usr/include/phonon"]) myenv.Append(CPPPATH = ["."]) if env["PLATFORM"] == "win32" : #myenv["LINKFLAGS"] = ["/SUBSYSTEM:CONSOLE"] myenv.Append(LINKFLAGS = ["/SUBSYSTEM:WINDOWS"]) myenv.Append(LIBS = "qtmain") myenv.Command("DefaultTheme.qrc", "../resources/themes/Default", Action(generateDefaultTheme, cmdstr = "$GENCOMSTR")) sources = [ "main.cpp", "QtAboutWidget.cpp", "QtAddContactDialog.cpp", "QtChatWindow.cpp", "QtChatWindowFactory.cpp", "QtJoinMUCDialog.cpp", "QtLoginWindow.cpp", "QtLoginWindowFactory.cpp", "QtMainWindow.cpp", "QtMainWindowFactory.cpp", "QtSettingsProvider.cpp", "QtStatusWidget.cpp", "QtSwift.cpp", "QtChatView.cpp", "QtChatTabs.cpp", "QtSoundPlayer.cpp", "QtSystemTray.cpp", "QtTabbable.cpp", "QtTextEdit.cpp", + "QtXMLConsoleWidgetFactory.cpp", + "QtXMLConsoleWidget.cpp", "ChatSnippet.cpp", "MessageSnippet.cpp", "SystemMessageSnippet.cpp", "Roster/RosterModel.cpp", "Roster/QtTreeWidget.cpp", "Roster/QtTreeWidgetItem.cpp", "Roster/RosterDelegate.cpp", "EventViewer/EventView.cpp", "EventViewer/EventModel.cpp", "EventViewer/EventDelegate.cpp", "QtRosterHeader.cpp", "qrc_DefaultTheme.cc", "qrc_Swift.cc", ] myenv.BuildVersion("BuildVersion.h", version = ARGUMENTS.get("swift_version", None)) if env["PLATFORM"] == "win32" : myenv.RES("../resources/Windows/Swift.rc") sources += ["../resources/Windows/Swift.res"] if env["PLATFORM"] == "darwin" or env["PLATFORM"] == "win32" : swiftProgram = myenv.Program("Swift", sources) else : swiftProgram = myenv.Program("swift", sources) myenv.Uic4("QtJoinMUCDialog.ui") myenv.Uic4("QtAddContactDialog.ui") myenv.Qrc("DefaultTheme.qrc") myenv.Qrc("Swift.qrc") buildVersion = Version.getBuildVersion(ARGUMENTS.get("swift_version", None)) if env["PLATFORM"] == "darwin" : myenv.AppBundle("Swift", version = buildVersion, resources = ["../resources/MacOSX/Swift.icns"]) if env.get("SWIFT_INSTALLDIR", "") : env.Install(os.path.join(env["SWIFT_INSTALLDIR"], "bin"), swiftProgram) if env["PLATFORM"] == "win32" : if "dist" in COMMAND_LINE_TARGETS or env.GetOption("clean") : myenv.WindowsBundle("Swift", resources = [ os.path.join(env["OPENSSL_DIR"], "bin", "ssleay32.dll"), os.path.join(env["OPENSSL_DIR"], "bin", "libeay32.dll"), ], qtimageformats = ["gif", "ico", "jpeg", "mng", "svg", "tiff"], qtlibs = ["QtCore4", "QtGui4", "QtNetwork4", "QtWebKit4", "phonon4"]) |
Swift