diff --git a/CMakeLists.txt b/CMakeLists.txt index e642fc209..0575477d5 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -100,6 +100,15 @@ include_directories(${CMAKE_SOURCE_DIR}) include(Dependencies) +# Copy themes +if (UNIX AND NOT APPLE) + file(COPY ${CMAKE_SOURCE_DIR}/themes DESTINATION $ENV{HOME}/.config/qtox) +elseif (APPLE) + file(COPY ${CMAKE_SOURCE_DIR}/themes DESTINATION "$ENV{HOME}/Library/Application Support/qtox") +elseif (WIN32) + file(COPY ${CMAKE_SOURCE_DIR}/themes DESTINATION C:\\users\\%username%\\AppData\\roaming\\qtox) +endif() + ################################################################################ # # :: qTox main library sources diff --git a/res.qrc b/res.qrc index 83e8b99af..f816bcfac 100644 --- a/res.qrc +++ b/res.qrc @@ -44,70 +44,70 @@ img/taskbar/light/taskbar_offline.svg img/taskbar/light/taskbar_event.svg img/transfer.svg - ui/fileTransferWidget/fileDone.svg - ui/chatArea/chatArea.css - ui/chatArea/chatHead.css - ui/chatArea/innerStyle.css - ui/chatArea/scrollBarUpArrow.svg - ui/chatArea/scrollBarDownArrow.svg - ui/chatArea/scrollBarLeftArrow.svg - ui/chatArea/scrollBarRightArrow.svg - ui/chatForm/buttons.css - ui/chatForm/fullScreenButtons.css - ui/chatForm/callButton.svg - ui/chatForm/labels.css - ui/chatForm/micButton.svg - ui/chatForm/micButtonRed.svg - ui/chatForm/videoButton.svg - ui/chatForm/videoButtonRed.svg - ui/chatForm/volButton.svg - ui/chatForm/volButtonRed.svg - ui/chatForm/videoPreview.svg - ui/chatForm/videoPreviewRed.svg - ui/chatForm/emoteButton.svg - ui/chatForm/fileButton.svg - ui/chatForm/screenshotButton.svg - ui/chatForm/searchCalendarButton.svg - ui/chatForm/searchDownButton.svg - ui/chatForm/searchHideButton.svg - ui/chatForm/searchSettingsButton.svg - ui/chatForm/searchUpButton.svg - ui/chatForm/sendButton.svg - ui/chatForm/exitFullScreenButton.svg - ui/emoticonWidget/dot_page.svg - ui/emoticonWidget/dot_page_current.svg - ui/emoticonWidget/dot_page_hover.svg - ui/emoticonWidget/emoticonWidget.css - ui/fileTransferWidget/fileTransferWidget.css - ui/friendList/friendList.css - ui/msgEdit/msgEdit.css - ui/settings/mainContent.css - ui/settings/mainHead.css - ui/statusButton/statusButton.css - ui/statusButton/menu_indicator.svg - ui/window/general.css - ui/window/profile.css - ui/window/statusPanel.css - ui/window/window.css - ui/chatArea/info.svg - ui/chatArea/spinner.svg - ui/chatArea/typing.svg - ui/chatArea/error.svg - ui/fileTransferInstance/no.svg - ui/fileTransferInstance/pause.svg - ui/fileTransferInstance/yes.svg - ui/fileTransferInstance/dir.svg - ui/fileTransferInstance/arrow_white.svg - ui/fileTransferInstance/browse.svg - ui/fileTransferInstance/filetransferWidget.css - ui/acceptCall/acceptCall.svg - ui/rejectCall/rejectCall.svg + themes/default/fileTransferWidget/fileDone.svg + themes/default/chatArea/chatArea.css + themes/default/chatArea/chatHead.css + themes/default/chatArea/innerStyle.css + themes/default/chatArea/scrollBarUpArrow.svg + themes/default/chatArea/scrollBarDownArrow.svg + themes/default/chatArea/scrollBarLeftArrow.svg + themes/default/chatArea/scrollBarRightArrow.svg + themes/default/chatForm/buttons.css + themes/default/chatForm/fullScreenButtons.css + themes/default/chatForm/callButton.svg + themes/default/chatForm/labels.css + themes/default/chatForm/micButton.svg + themes/default/chatForm/micButtonRed.svg + themes/default/chatForm/videoButton.svg + themes/default/chatForm/videoButtonRed.svg + themes/default/chatForm/volButton.svg + themes/default/chatForm/volButtonRed.svg + themes/default/chatForm/videoPreview.svg + themes/default/chatForm/videoPreviewRed.svg + themes/default/chatForm/emoteButton.svg + themes/default/chatForm/fileButton.svg + themes/default/chatForm/screenshotButton.svg + themes/default/chatForm/searchCalendarButton.svg + themes/default/chatForm/searchDownButton.svg + themes/default/chatForm/searchHideButton.svg + themes/default/chatForm/searchSettingsButton.svg + themes/default/chatForm/searchUpButton.svg + themes/default/chatForm/sendButton.svg + themes/default/chatForm/exitFullScreenButton.svg + themes/default/emoticonWidget/dot_page.svg + themes/default/emoticonWidget/dot_page_current.svg + themes/default/emoticonWidget/dot_page_hover.svg + themes/default/emoticonWidget/emoticonWidget.css + themes/default/fileTransferWidget/fileTransferWidget.css + themes/default/friendList/friendList.css + themes/default/msgEdit/msgEdit.css + themes/default/settings/mainContent.css + themes/default/settings/mainHead.css + themes/default/statusButton/statusButton.css + themes/default/statusButton/menu_indicator.svg + themes/default/window/general.css + themes/default/window/profile.css + themes/default/window/statusPanel.css + themes/default/window/window.css + themes/default/chatArea/info.svg + themes/default/chatArea/spinner.svg + themes/default/chatArea/typing.svg + themes/default/chatArea/error.svg + themes/default/fileTransferInstance/no.svg + themes/default/fileTransferInstance/pause.svg + themes/default/fileTransferInstance/yes.svg + themes/default/fileTransferInstance/dir.svg + themes/default/fileTransferInstance/arrow_white.svg + themes/default/fileTransferInstance/browse.svg + themes/default/fileTransferInstance/filetransferWidget.css + themes/default/acceptCall/acceptCall.svg + themes/default/rejectCall/rejectCall.svg img/login_logo.svg - ui/notificationEdge/notificationEdge.css - ui/loginScreen/loginScreen.css + themes/default/notificationEdge/notificationEdge.css + themes/default/loginScreen/loginScreen.css img/others/logout-icon.svg img/caps_lock.svg - ui/contentDialog/contentDialog.css - ui/tooliconsZone/tooliconsZone.css + themes/default/contentDialog/contentDialog.css + themes/default/tooliconsZone/tooliconsZone.css diff --git a/src/chatlog/chatmessage.cpp b/src/chatlog/chatmessage.cpp index 03c0beec9..ebb491dda 100644 --- a/src/chatlog/chatmessage.cpp +++ b/src/chatlog/chatmessage.cpp @@ -26,6 +26,7 @@ #include "content/spinner.h" #include "content/text.h" #include "content/timestamp.h" +#include "src/widget/style.h" #include @@ -92,7 +93,7 @@ ChatMessage::Ptr ChatMessage::createChatMessage(const QString& sender, const QSt ? QString("%1 %2").arg(sender, rawMessage) : rawMessage), ColumnFormat(1.0, ColumnFormat::VariableSize)); - msg->addColumn(new Spinner(":/ui/chatArea/spinner.svg", QSize(16, 16), 360.0 / 1.6), + msg->addColumn(new Spinner(Style::getImagePath("chatArea/spinner.svg"), QSize(16, 16), 360.0 / 1.6), ColumnFormat(TIME_COL_WIDTH, ColumnFormat::FixedSize, ColumnFormat::Right)); if (!date.isNull()) @@ -110,13 +111,13 @@ ChatMessage::Ptr ChatMessage::createChatInfoMessage(const QString& rawMessage, QString img; switch (type) { case INFO: - img = ":/ui/chatArea/info.svg"; + img = Style::getImagePath("chatArea/info.svg"); break; case ERROR: - img = ":/ui/chatArea/error.svg"; + img = Style::getImagePath("chatArea/error.svg"); break; case TYPING: - img = ":/ui/chatArea/typing.svg"; + img = Style::getImagePath("chatArea/typing.svg"); break; } diff --git a/src/chatlog/content/filetransferwidget.cpp b/src/chatlog/content/filetransferwidget.cpp index 9fd45e59e..86365384d 100644 --- a/src/chatlog/content/filetransferwidget.cpp +++ b/src/chatlog/content/filetransferwidget.cpp @@ -181,7 +181,7 @@ void FileTransferWidget::setBackgroundColor(const QColor& c, bool whiteFont) setProperty("fontColor", whiteFont ? "white" : "black"); - setStyleSheet(Style::getStylesheet(":/ui/fileTransferInstance/filetransferWidget.css")); + setStyleSheet(Style::getStylesheet("fileTransferInstance/filetransferWidget.css")); Style::repolish(this); update(); @@ -387,12 +387,12 @@ void FileTransferWidget::onFileTransferFinished(ToxFile file) setupButtons(); hideWidgets(); - ui->leftButton->setIcon(QIcon(":/ui/fileTransferInstance/yes.svg")); + ui->leftButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/yes.svg"))); ui->leftButton->setObjectName("ok"); ui->leftButton->setToolTip(tr("Open file")); ui->leftButton->show(); - ui->rightButton->setIcon(QIcon(":/ui/fileTransferInstance/dir.svg")); + ui->rightButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/dir.svg"))); ui->rightButton->setObjectName("dir"); ui->rightButton->setToolTip(tr("Open file directory")); ui->rightButton->show(); @@ -443,11 +443,11 @@ void FileTransferWidget::setupButtons() { switch (fileInfo.status) { case ToxFile::TRANSMITTING: - ui->leftButton->setIcon(QIcon(":/ui/fileTransferInstance/pause.svg")); + ui->leftButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/pause.svg"))); ui->leftButton->setObjectName("pause"); ui->leftButton->setToolTip(tr("Pause transfer")); - ui->rightButton->setIcon(QIcon(":/ui/fileTransferInstance/no.svg")); + ui->rightButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/no.svg"))); ui->rightButton->setObjectName("cancel"); ui->rightButton->setToolTip(tr("Cancel transfer")); @@ -455,11 +455,11 @@ void FileTransferWidget::setupButtons() break; case ToxFile::PAUSED: - ui->leftButton->setIcon(QIcon(":/ui/fileTransferInstance/arrow_white.svg")); + ui->leftButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/arrow_white.svg"))); ui->leftButton->setObjectName("resume"); ui->leftButton->setToolTip(tr("Resume transfer")); - ui->rightButton->setIcon(QIcon(":/ui/fileTransferInstance/no.svg")); + ui->rightButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/no.svg"))); ui->rightButton->setObjectName("cancel"); ui->rightButton->setToolTip(tr("Cancel transfer")); @@ -468,16 +468,16 @@ void FileTransferWidget::setupButtons() case ToxFile::STOPPED: case ToxFile::BROKEN: - ui->rightButton->setIcon(QIcon(":/ui/fileTransferInstance/no.svg")); + ui->rightButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/no.svg"))); ui->rightButton->setObjectName("cancel"); ui->rightButton->setToolTip(tr("Cancel transfer")); if (fileInfo.direction == ToxFile::SENDING) { - ui->leftButton->setIcon(QIcon(":/ui/fileTransferInstance/pause.svg")); + ui->leftButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/pause.svg"))); ui->leftButton->setObjectName("pause"); ui->leftButton->setToolTip(tr("Pause transfer")); } else { - ui->leftButton->setIcon(QIcon(":/ui/fileTransferInstance/yes.svg")); + ui->leftButton->setIcon(QIcon(Style::getImagePath("fileTransferInstance/yes.svg"))); ui->leftButton->setObjectName("accept"); ui->leftButton->setToolTip(tr("Accept transfer")); } diff --git a/src/chatlog/content/filetransferwidget.ui b/src/chatlog/content/filetransferwidget.ui index 8b99e6de9..eca5d8480 100644 --- a/src/chatlog/content/filetransferwidget.ui +++ b/src/chatlog/content/filetransferwidget.ui @@ -297,7 +297,7 @@ - :/ui/fileTransferInstance/no.svg:/ui/fileTransferInstance/no.svg + :themes/default/fileTransferInstance/no.svg:themes/default/fileTransferInstance/no.svg @@ -383,7 +383,7 @@ - :/ui/fileTransferInstance/no.svg:/ui/fileTransferInstance/no.svg + :themes/default/fileTransferInstance/no.svg:themes/default/fileTransferInstance/no.svg @@ -421,7 +421,7 @@ - :/ui/fileTransferInstance/no.svg:/ui/fileTransferInstance/no.svg + :themes/default/fileTransferInstance/no.svg:themes/default/fileTransferInstance/no.svg diff --git a/src/chatlog/content/notificationicon.cpp b/src/chatlog/content/notificationicon.cpp index 8f9ba06bc..ba79e0f8a 100644 --- a/src/chatlog/content/notificationicon.cpp +++ b/src/chatlog/content/notificationicon.cpp @@ -19,6 +19,7 @@ #include "notificationicon.h" #include "../pixmapcache.h" +#include "src/widget/style.h" #include #include @@ -27,7 +28,7 @@ NotificationIcon::NotificationIcon(QSize Size) : size(Size) { - pmap = PixmapCache::getInstance().get(":/ui/chatArea/typing.svg", size); + pmap = PixmapCache::getInstance().get(Style::getImagePath("chatArea/typing.svg"), size); updateTimer = new QTimer(this); updateTimer->setInterval(1000 / 30); diff --git a/src/chatlog/content/text.cpp b/src/chatlog/content/text.cpp index f34ff8aea..f6f1d2fb1 100644 --- a/src/chatlog/content/text.cpp +++ b/src/chatlog/content/text.cpp @@ -40,7 +40,7 @@ Text::Text(const QString& txt, const QFont& font, bool enableElide, const QStrin : rawText(rwText) , elide(enableElide) , defFont(font) - , defStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatArea/innerStyle.css"), font)) + , defStyleSheet(Style::getStylesheet(QStringLiteral("chatArea/innerStyle.css"), font)) , color(c) { setText(txt); diff --git a/src/video/genericnetcamview.cpp b/src/video/genericnetcamview.cpp index 7b7db2091..716eed331 100644 --- a/src/video/genericnetcamview.cpp +++ b/src/video/genericnetcamview.cpp @@ -32,7 +32,7 @@ const auto BTN_STATE_NONE = QVariant("none"); const auto BTN_STATE_RED = QVariant("red"); const int BTN_PANEL_HEIGHT = 55; const int BTN_PANEL_WIDTH = 250; -const auto BTN_STYLE_SHEET_PATH = QStringLiteral(":/ui/chatForm/fullScreenButtons.css"); +const auto BTN_STYLE_SHEET_PATH = QStringLiteral("chatForm/fullScreenButtons.css"); } GenericNetCamView::GenericNetCamView(QWidget* parent) @@ -117,7 +117,7 @@ void GenericNetCamView::setShowMessages(bool show, bool notify) toggleMessagesButton->setText(tr("Show Messages")); if (notify) { - toggleMessagesButton->setIcon(QIcon(":/ui/chatArea/info.svg")); + toggleMessagesButton->setIcon(QIcon(Style::getImagePath("chatArea/info.svg"))); } } diff --git a/src/widget/categorywidget.cpp b/src/widget/categorywidget.cpp index c8f2b9588..aab87b22c 100644 --- a/src/widget/categorywidget.cpp +++ b/src/widget/categorywidget.cpp @@ -48,7 +48,7 @@ CategoryWidget::CategoryWidget(bool compact, QWidget* parent) statusLabel->setObjectName("status"); statusLabel->setTextFormat(Qt::PlainText); - statusPic.setPixmap(QPixmap(":/ui/chatArea/scrollBarRightArrow.svg")); + statusPic.setPixmap(QPixmap(Style::getImagePath("chatArea/scrollBarRightArrow.svg"))); fullLayout = new QVBoxLayout(this); fullLayout->setSpacing(0); @@ -90,9 +90,9 @@ void CategoryWidget::setExpanded(bool isExpanded, bool save) QString pixmapPath; if (isExpanded) - pixmapPath = ":/ui/chatArea/scrollBarDownArrow.svg"; + pixmapPath = Style::getImagePath("chatArea/scrollBarDownArrow.svg"); else - pixmapPath = ":/ui/chatArea/scrollBarRightArrow.svg"; + pixmapPath = Style::getImagePath("chatArea/scrollBarRightArrow.svg"); statusPic.setPixmap(QPixmap(pixmapPath)); // The listWidget will recieve a enterEvent for some reason if now visible. // Using the following, we prevent that. diff --git a/src/widget/chatformheader.cpp b/src/widget/chatformheader.cpp index 4852d88dc..82ada779d 100644 --- a/src/widget/chatformheader.cpp +++ b/src/widget/chatformheader.cpp @@ -38,7 +38,7 @@ static const short MIC_BUTTONS_LAYOUT_SPACING = 4; static const short BUTTONS_LAYOUT_HOR_SPACING = 4; namespace { -const QString STYLE_PATH = QStringLiteral(":/ui/chatForm/buttons.css"); +const QString STYLE_PATH = QStringLiteral("chatForm/buttons.css"); const QString STATE_NAME[] = { QString{}, diff --git a/src/widget/contentdialog.cpp b/src/widget/contentdialog.cpp index e4293b3f0..4a4ab0c60 100644 --- a/src/widget/contentdialog.cpp +++ b/src/widget/contentdialog.cpp @@ -63,7 +63,7 @@ ContentDialog::ContentDialog(QWidget* parent) , videoCount(0) { const Settings& s = Settings::getInstance(); - setStyleSheet(Style::getStylesheet(":/ui/contentDialog/contentDialog.css")); + setStyleSheet(Style::getStylesheet("contentDialog/contentDialog.css")); friendLayout->setMargin(0); friendLayout->setSpacing(0); @@ -87,7 +87,7 @@ ContentDialog::ContentDialog(QWidget* parent) friendScroll->setFrameStyle(QFrame::NoFrame); friendScroll->setLayoutDirection(Qt::RightToLeft); friendScroll->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff); - friendScroll->setStyleSheet(Style::getStylesheet(":/ui/friendList/friendList.css")); + friendScroll->setStyleSheet(Style::getStylesheet("friendList/friendList.css")); friendScroll->setWidgetResizable(true); friendScroll->setWidget(friendWidget); diff --git a/src/widget/contentlayout.cpp b/src/widget/contentlayout.cpp index 7e5d64a8a..4c3a0e259 100644 --- a/src/widget/contentlayout.cpp +++ b/src/widget/contentlayout.cpp @@ -111,8 +111,8 @@ void ContentLayout::init() } #ifndef Q_OS_MAC - mainHead->setStyleSheet(Style::getStylesheet(":ui/settings/mainHead.css")); - mainContent->setStyleSheet(Style::getStylesheet(":ui/settings/mainContent.css")); + mainHead->setStyleSheet(Style::getStylesheet("settings/mainHead.css")); + mainContent->setStyleSheet(Style::getStylesheet("settings/mainContent.css")); #endif mainHLineLayout.addWidget(&mainHLine); diff --git a/src/widget/emoticonswidget.cpp b/src/widget/emoticonswidget.cpp index 0cf653d1a..05237f797 100644 --- a/src/widget/emoticonswidget.cpp +++ b/src/widget/emoticonswidget.cpp @@ -34,7 +34,7 @@ EmoticonsWidget::EmoticonsWidget(QWidget* parent) : QMenu(parent) { - setStyleSheet(Style::getStylesheet(":/ui/emoticonWidget/emoticonWidget.css")); + setStyleSheet(Style::getStylesheet("emoticonWidget/emoticonWidget.css")); setLayout(&layout); layout.addWidget(&stack); diff --git a/src/widget/form/filesform.cpp b/src/widget/form/filesform.cpp index f57a9180d..39ace4928 100644 --- a/src/widget/form/filesform.cpp +++ b/src/widget/form/filesform.cpp @@ -20,13 +20,14 @@ #include "filesform.h" #include "src/widget/contentlayout.h" #include "src/widget/translator.h" +#include "src/widget/style.h" #include "src/widget/widget.h" #include #include FilesForm::FilesForm() : QObject() - , doneIcon(":/ui/fileTransferWidget/fileDone.svg") + , doneIcon(Style::getImagePath("fileTransferWidget/fileDone.svg")) { head = new QWidget(); QFont bold; diff --git a/src/widget/form/genericchatform.cpp b/src/widget/form/genericchatform.cpp index f98537b7a..ae7eccb39 100644 --- a/src/widget/form/genericchatform.cpp +++ b/src/widget/form/genericchatform.cpp @@ -58,7 +58,7 @@ * elements and methods to work with chat messages. */ -#define SET_STYLESHEET(x) (x)->setStyleSheet(Style::getStylesheet(":/ui/" #x "/" #x ".css")) +#define SET_STYLESHEET(x) (x)->setStyleSheet(Style::getStylesheet(":/themes/default/" #x "/" #x ".css")) static const QSize FILE_FLYOUT_SIZE{24, 24}; static const short FOOT_BUTTONS_SPACING = 2; @@ -108,7 +108,7 @@ QString GenericChatForm::resolveToxPk(const ToxPk& pk) namespace { -const QString STYLE_PATH = QStringLiteral(":/ui/chatForm/buttons.css"); +const QString STYLE_PATH = QStringLiteral("chatForm/buttons.css"); } namespace @@ -170,7 +170,7 @@ GenericChatForm::GenericChatForm(const Contact* contact, QWidget* parent) fileLayout->setSpacing(0); fileLayout->setMargin(0); - msgEdit->setStyleSheet(Style::getStylesheet(":/ui/msgEdit/msgEdit.css") + msgEdit->setStyleSheet(Style::getStylesheet("msgEdit/msgEdit.css") + fontToCss(s.getChatMessageFont(), "QTextEdit")); msgEdit->setFixedHeight(MESSAGE_EDIT_HEIGHT); msgEdit->setFrameStyle(QFrame::NoFrame); @@ -238,8 +238,8 @@ GenericChatForm::GenericChatForm(const Contact* contact, QWidget* parent) connect(chatWidget, &ChatLog::workerTimeoutFinished, this, &GenericChatForm::onContinueSearch); - chatWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatArea.css")); - headWidget->setStyleSheet(Style::getStylesheet(":/ui/chatArea/chatHead.css")); + chatWidget->setStyleSheet(Style::getStylesheet("chatArea/chatArea.css")); + headWidget->setStyleSheet(Style::getStylesheet("chatArea/chatHead.css")); fileFlyout->setFixedSize(FILE_FLYOUT_SIZE); fileFlyout->setParent(this); @@ -523,7 +523,7 @@ void GenericChatForm::onChatMessageFontChanged(const QFont& font) chatWidget->fontChanged(font); chatWidget->forceRelayout(); // message editor - msgEdit->setStyleSheet(Style::getStylesheet(":/ui/msgEdit/msgEdit.css") + msgEdit->setStyleSheet(Style::getStylesheet("msgEdit/msgEdit.css") + fontToCss(font, "QTextEdit")); } diff --git a/src/widget/form/groupchatform.cpp b/src/widget/form/groupchatform.cpp index 2a73d8ca4..2b521c581 100644 --- a/src/widget/form/groupchatform.cpp +++ b/src/widget/form/groupchatform.cpp @@ -50,7 +50,7 @@ const auto LABEL_PEER_TYPE_OUR = QVariant(QStringLiteral("our")); const auto LABEL_PEER_TYPE_MUTED = QVariant(QStringLiteral("muted")); const auto LABEL_PEER_PLAYING_AUDIO = QVariant(QStringLiteral("true")); const auto LABEL_PEER_NOT_PLAYING_AUDIO = QVariant(QStringLiteral("false")); -const auto PEER_LABEL_STYLE_SHEET_PATH = QStringLiteral(":/ui/chatArea/chatHead.css"); +const auto PEER_LABEL_STYLE_SHEET_PATH = QStringLiteral("chatArea/chatHead.css"); } /** diff --git a/src/widget/form/profileform.cpp b/src/widget/form/profileform.cpp index 2c8c35e1c..e8b200e38 100644 --- a/src/widget/form/profileform.cpp +++ b/src/widget/form/profileform.cpp @@ -144,7 +144,7 @@ ProfileForm::ProfileForm(IProfileInfo* profileInfo, QWidget* parent) profilePicture->installEventFilter(this); profilePicture->setAccessibleName("Profile avatar"); profilePicture->setAccessibleDescription("Set a profile avatar shown to all contacts"); - profilePicture->setStyleSheet(Style::getStylesheet(":ui/window/profile.css")); + profilePicture->setStyleSheet(Style::getStylesheet("window/profile.css")); connect(profilePicture, &MaskablePixmapWidget::clicked, this, &ProfileForm::onAvatarClicked); connect(profilePicture, &MaskablePixmapWidget::customContextMenuRequested, this, &ProfileForm::showProfilePictureContextMenu); diff --git a/src/widget/form/searchsettingsform.cpp b/src/widget/form/searchsettingsform.cpp index 3c9223e10..4d993ad06 100644 --- a/src/widget/form/searchsettingsform.cpp +++ b/src/widget/form/searchsettingsform.cpp @@ -15,9 +15,9 @@ SearchSettingsForm::SearchSettingsForm(QWidget *parent) : ui->choiceDateButton->setAttribute(Qt::WA_LayoutUsesWidgetRect); ui->choiceDateButton->setObjectName(QStringLiteral("choiceDateButton")); - ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/buttons.css"))); + ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); - ui->startDateLabel->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/labels.css"))); + ui->startDateLabel->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/labels.css"))); connect(ui->startSearchComboBox, static_cast(&QComboBox::currentIndexChanged), this, &SearchSettingsForm::onStartSearchSelected); @@ -93,7 +93,7 @@ void SearchSettingsForm::onStartSearchSelected(const int index) ui->startDateLabel->setEnabled(true); ui->choiceDateButton->setProperty("state", QStringLiteral("green")); - ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/buttons.css"))); + ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); if (startDate.isNull()) { startDate = QDate::currentDate(); @@ -105,7 +105,7 @@ void SearchSettingsForm::onStartSearchSelected(const int index) ui->startDateLabel->setEnabled(false); ui->choiceDateButton->setProperty("state", QString()); - ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/buttons.css"))); + ui->choiceDateButton->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); } setUpdate(true); diff --git a/src/widget/loginscreen.cpp b/src/widget/loginscreen.cpp index 1bf36bc92..8c0a72479 100644 --- a/src/widget/loginscreen.cpp +++ b/src/widget/loginscreen.cpp @@ -60,7 +60,7 @@ LoginScreen::LoginScreen(QString initialProfile, QWidget* parent) connect(ui->importButton, &QPushButton::clicked, this, &LoginScreen::onImportProfile); reset(initialProfile); - this->setStyleSheet(Style::getStylesheet(":/ui/loginScreen/loginScreen.css")); + this->setStyleSheet(Style::getStylesheet("loginScreen/loginScreen.css")); retranslateUi(); Translator::registerHandler(std::bind(&LoginScreen::retranslateUi, this), this); diff --git a/src/widget/notificationedgewidget.cpp b/src/widget/notificationedgewidget.cpp index ddf9dda10..f3a6df5b4 100644 --- a/src/widget/notificationedgewidget.cpp +++ b/src/widget/notificationedgewidget.cpp @@ -28,7 +28,7 @@ NotificationEdgeWidget::NotificationEdgeWidget(Position position, QWidget* paren : QWidget(parent) { setAttribute(Qt::WA_StyledBackground); // Show background. - setStyleSheet(Style::getStylesheet(":/ui/notificationEdge/notificationEdge.css")); + setStyleSheet(Style::getStylesheet("notificationEdge/notificationEdge.css")); QHBoxLayout* layout = new QHBoxLayout(this); layout->addStretch(); @@ -39,9 +39,9 @@ NotificationEdgeWidget::NotificationEdgeWidget(Position position, QWidget* paren QLabel* arrowLabel = new QLabel(this); if (position == Top) - arrowLabel->setPixmap(QPixmap("://ui/chatArea/scrollBarUpArrow.svg")); + arrowLabel->setPixmap(QPixmap(Style::getImagePath("chatArea/scrollBarUpArrow.svg"))); else - arrowLabel->setPixmap(QPixmap("://ui/chatArea/scrollBarDownArrow.svg")); + arrowLabel->setPixmap(QPixmap(Style::getImagePath("chatArea/scrollBarDownArrow.svg"))); layout->addWidget(arrowLabel); layout->addStretch(); diff --git a/src/widget/searchform.cpp b/src/widget/searchform.cpp index 7ed28c476..6aca3f67e 100644 --- a/src/widget/searchform.cpp +++ b/src/widget/searchform.cpp @@ -48,7 +48,7 @@ SearchForm::SearchForm(QWidget* parent) : QWidget(parent) settings->setVisible(false); messageLabel->setProperty("state", QStringLiteral("red")); - messageLabel->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/labels.css"))); + messageLabel->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/labels.css"))); messageLabel->setText(tr("The text could not be found.")); messageLabel->setVisible(false); @@ -130,7 +130,7 @@ QPushButton *SearchForm::createButton(const QString& name, const QString& state) btn->setAttribute(Qt::WA_LayoutUsesWidgetRect); btn->setObjectName(name); btn->setProperty("state", state); - btn->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/buttons.css"))); + btn->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); return btn; } @@ -156,7 +156,7 @@ void SearchForm::setStateName(QPushButton *btn, ToolButtonState state) { const auto index = static_cast(state); btn->setProperty("state", STATE_NAME[index]); - btn->setStyleSheet(Style::getStylesheet(QStringLiteral(":/ui/chatForm/buttons.css"))); + btn->setStyleSheet(Style::getStylesheet(QStringLiteral("chatForm/buttons.css"))); btn->setEnabled(index != 0); } diff --git a/src/widget/style.cpp b/src/widget/style.cpp index 5003ff466..b67ae4ef8 100644 --- a/src/widget/style.cpp +++ b/src/widget/style.cpp @@ -22,11 +22,13 @@ #include "src/widget/gui.h" #include +#include #include #include #include #include #include +#include #include #include #include @@ -89,6 +91,31 @@ QStringList Style::getThemeColorNames() QObject::tr("Violet")}; } +QString Style::getThemeName() +{ + //TODO: return name of the current theme + const QString themeName = "default"; + return QStringLiteral("default"); +} + +QString Style::getThemePath() +{ + const QString themeName = getThemeName(); + const QString homePath = QDir::homePath(); + +#if defined(Q_OS_UNIX) and not defined(Q_OS_MACOS) + const QString themePath = homePath % QLatin1String("/.config/qtox/themes/") % themeName % '/'; +#elif defined(Q_OS_MACOS) + const QString themePath = homePath % QLatin1String("/Library/Application Support/qtox/themes/") + % themeName % '/'; +#elif defined(Q_OS_WIN32) + const QString themePath = homePath % QLatin1String("/AppData/roaming/qtox/themes/") + % themeName % '/'; +#endif + + return themePath; +} + QList Style::themeColorColors = {QColor(), QColor("#004aa4"), QColor("#97ba00"), QColor("#c23716"), QColor("#4617b5")}; @@ -98,7 +125,8 @@ std::map, const QString> Style::stylesheet const QString Style::getStylesheet(const QString& filename, const QFont& baseFont) { - const std::pair cacheKey(filename, baseFont); + const QString fullPath = getThemePath() + filename; + const std::pair cacheKey(fullPath, baseFont); auto it = stylesheetsCache.find(cacheKey); if (it != stylesheetsCache.end()) { @@ -111,6 +139,34 @@ const QString Style::getStylesheet(const QString& filename, const QFont& baseFon return newStylesheet; } +static QStringList existingImagesCache; +const QString Style::getImagePath(const QString& filename) +{ + QString fullPath = getThemePath() + filename; + + // search for image in cache + if (existingImagesCache.contains(fullPath)) { + return fullPath; + } + + // if not in cache + if (QFileInfo::exists(fullPath)) { + existingImagesCache << fullPath; + return fullPath; + } else { + qWarning() << "Failed to open file (using defaults):" << fullPath; + + fullPath = QLatin1String(":themes/default/") % filename; + + if (QFileInfo::exists(fullPath)) { + return fullPath; + } else { + qWarning() << "Failed to open default file:" << fullPath; + return {}; + } + } +} + QColor Style::getColor(Style::ColorPalette entry) { return palette[entry]; @@ -138,12 +194,26 @@ QFont Style::getFont(Style::Font font) const QString Style::resolve(const QString& filename, const QFont& baseFont) { - QFile file{filename}; - if (!file.open(QFile::ReadOnly | QFile::Text)) { - qWarning() << "Stylesheet " << filename << " not found"; - return QString(""); + QString themePath = getThemePath(); + QString fullPath = themePath + filename; + QString qss; + + QFile file{fullPath}; + if (file.open(QFile::ReadOnly | QFile::Text)) { + qss = file.readAll(); + } else { + qWarning() << "Failed to open file (using defaults):" << fullPath; + + fullPath = QLatin1String(":themes/default/") % filename; + QFile file{fullPath}; + + if (file.open(QFile::ReadOnly | QFile::Text)) { + qss = file.readAll(); + } else { + qWarning() << "Failed to open default file:" << fullPath; + return {}; + } } - QString qss = file.readAll(); if (dict.isEmpty()) { dict = {// colors @@ -175,8 +245,35 @@ const QString Style::resolve(const QString& filename, const QFont& baseFont) } for (const QString& key : dict.keys()) { - qss.replace(QRegularExpression(QString("%1\\b").arg(key)), dict[key]); + qss.replace(QRegularExpression(key % QLatin1Literal{"\\b"}), dict[key]); } + + // @getImagePath() function + const QRegularExpression re{QStringLiteral(R"(@getImagePath\([^)\s]*\))")}; + QRegularExpressionMatchIterator i = re.globalMatch(qss); + + while (i.hasNext()) { + QRegularExpressionMatch match = i.next(); + QString path = match.captured(0); + const QString phrase = path; + + path.remove(QStringLiteral("@getImagePath(")); + path.chop(1); + + QString fullImagePath = getThemePath() + path; + // image not in cache + if (!existingImagesCache.contains(fullPath)) { + if (QFileInfo::exists(fullImagePath)) { + existingImagesCache << fullImagePath; + } else { + qWarning() << "Failed to open file (using defaults):" << fullImagePath; + fullImagePath = QLatin1String(":themes/default/") % path; + } + } + + qss.replace(phrase, fullImagePath); + } + return qss; } diff --git a/src/widget/style.h b/src/widget/style.h index b81708f70..ce9a6a0c2 100644 --- a/src/widget/style.h +++ b/src/widget/style.h @@ -60,6 +60,9 @@ public: static QStringList getThemeColorNames(); static const QString getStylesheet(const QString& filename, const QFont& baseFont = QFont()); + static const QString getImagePath(const QString& filename); + static QString getThemePath(); + static QString getThemeName(); static QColor getColor(ColorPalette entry); static QFont getFont(Font font); static const QString resolve(const QString& filename, const QFont& baseFont = QFont()); diff --git a/src/widget/tool/callconfirmwidget.cpp b/src/widget/tool/callconfirmwidget.cpp index f3048dd68..7c99d8aca 100644 --- a/src/widget/tool/callconfirmwidget.cpp +++ b/src/widget/tool/callconfirmwidget.cpp @@ -19,6 +19,7 @@ #include "callconfirmwidget.h" +#include "src/widget/style.h" #include "src/widget/widget.h" #include #include @@ -89,8 +90,8 @@ CallConfirmWidget::CallConfirmWidget(const QWidget* anchor) reject->setFlat(true); accept->setStyleSheet("QPushButton{border:none;}"); reject->setStyleSheet("QPushButton{border:none;}"); - accept->setIcon(QIcon(":/ui/acceptCall/acceptCall.svg")); - reject->setIcon(QIcon(":/ui/rejectCall/rejectCall.svg")); + accept->setIcon(QIcon(Style::getImagePath("acceptCall/acceptCall.svg"))); + reject->setIcon(QIcon(Style::getImagePath("rejectCall/rejectCall.svg"))); accept->setIconSize(accept->size()); reject->setIconSize(reject->size()); diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index 7e3d7486d..b274b67ca 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -142,17 +142,17 @@ void Widget::init() actionQuit->setMenuRole(QAction::QuitRole); #endif - actionQuit->setIcon(prepareIcon(":/ui/rejectCall/rejectCall.svg", icon_size, icon_size)); + actionQuit->setIcon(prepareIcon(Style::getImagePath("rejectCall/rejectCall.svg"), icon_size, icon_size)); connect(actionQuit, &QAction::triggered, qApp, &QApplication::quit); layout()->setContentsMargins(0, 0, 0, 0); - ui->friendList->setStyleSheet(Style::getStylesheet(":/ui/friendList/friendList.css")); + ui->friendList->setStyleSheet(Style::getStylesheet("friendList/friendList.css")); profilePicture = new MaskablePixmapWidget(this, QSize(40, 40), ":/img/avatar_mask.svg"); profilePicture->setPixmap(QPixmap(":/img/contact_dark.svg")); profilePicture->setClickable(true); profilePicture->setObjectName("selfAvatar"); - profilePicture->setStyleSheet(Style::getStylesheet(":ui/window/profile.css")); + profilePicture->setStyleSheet(Style::getStylesheet("window/profile.css")); ui->myProfile->insertWidget(0, profilePicture); ui->myProfile->insertSpacing(1, 7); @@ -196,7 +196,7 @@ void Widget::init() ui->searchContactFilterBox->setMenu(filterMenu); #ifndef Q_OS_MAC - ui->statusHead->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); + ui->statusHead->setStyleSheet(Style::getStylesheet("window/statusPanel.css")); #endif contactListWidget = new FriendListWidget(this, Settings::getInstance().getGroupchatPosition()); @@ -206,7 +206,7 @@ void Widget::init() ui->statusLabel->setEditable(true); - ui->statusPanel->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); + ui->statusPanel->setStyleSheet(Style::getStylesheet("window/statusPanel.css")); QMenu* statusButtonMenu = new QMenu(ui->statusButton); statusButtonMenu->addAction(statusOnline); @@ -2217,13 +2217,13 @@ void Widget::clearAllReceipts() void Widget::reloadTheme() { - this->setStyleSheet(Style::getStylesheet(":/ui/window/general.css")); - QString statusPanelStyle = Style::getStylesheet(":/ui/window/statusPanel.css"); - ui->tooliconsZone->setStyleSheet(Style::getStylesheet(":/ui/tooliconsZone/tooliconsZone.css")); + this->setStyleSheet(Style::getStylesheet("window/general.css")); + QString statusPanelStyle = Style::getStylesheet("window/statusPanel.css"); + ui->tooliconsZone->setStyleSheet(Style::getStylesheet("tooliconsZone/tooliconsZone.css")); ui->statusPanel->setStyleSheet(statusPanelStyle); ui->statusHead->setStyleSheet(statusPanelStyle); - ui->friendList->setStyleSheet(Style::getStylesheet(":/ui/friendList/friendList.css")); - ui->statusButton->setStyleSheet(Style::getStylesheet(":/ui/statusButton/statusButton.css")); + ui->friendList->setStyleSheet(Style::getStylesheet("friendList/friendList.css")); + ui->statusButton->setStyleSheet(Style::getStylesheet("statusButton/statusButton.css")); contactListWidget->reDraw(); for (Friend* f : FriendList::getAllFriends()) { diff --git a/ui/acceptCall/acceptCall.svg b/themes/default/acceptCall/acceptCall.svg similarity index 100% rename from ui/acceptCall/acceptCall.svg rename to themes/default/acceptCall/acceptCall.svg diff --git a/ui/chatArea/chatArea.css b/themes/default/chatArea/chatArea.css similarity index 100% rename from ui/chatArea/chatArea.css rename to themes/default/chatArea/chatArea.css diff --git a/ui/chatArea/chatHead.css b/themes/default/chatArea/chatHead.css similarity index 100% rename from ui/chatArea/chatHead.css rename to themes/default/chatArea/chatHead.css diff --git a/ui/chatArea/error.svg b/themes/default/chatArea/error.svg similarity index 100% rename from ui/chatArea/error.svg rename to themes/default/chatArea/error.svg diff --git a/ui/chatArea/info.svg b/themes/default/chatArea/info.svg similarity index 100% rename from ui/chatArea/info.svg rename to themes/default/chatArea/info.svg diff --git a/ui/chatArea/innerStyle.css b/themes/default/chatArea/innerStyle.css similarity index 100% rename from ui/chatArea/innerStyle.css rename to themes/default/chatArea/innerStyle.css diff --git a/ui/chatArea/scrollBarDownArrow.svg b/themes/default/chatArea/scrollBarDownArrow.svg similarity index 100% rename from ui/chatArea/scrollBarDownArrow.svg rename to themes/default/chatArea/scrollBarDownArrow.svg diff --git a/ui/chatArea/scrollBarLeftArrow.svg b/themes/default/chatArea/scrollBarLeftArrow.svg similarity index 100% rename from ui/chatArea/scrollBarLeftArrow.svg rename to themes/default/chatArea/scrollBarLeftArrow.svg diff --git a/ui/chatArea/scrollBarRightArrow.svg b/themes/default/chatArea/scrollBarRightArrow.svg similarity index 100% rename from ui/chatArea/scrollBarRightArrow.svg rename to themes/default/chatArea/scrollBarRightArrow.svg diff --git a/ui/chatArea/scrollBarUpArrow.svg b/themes/default/chatArea/scrollBarUpArrow.svg similarity index 100% rename from ui/chatArea/scrollBarUpArrow.svg rename to themes/default/chatArea/scrollBarUpArrow.svg diff --git a/ui/chatArea/spinner.svg b/themes/default/chatArea/spinner.svg similarity index 100% rename from ui/chatArea/spinner.svg rename to themes/default/chatArea/spinner.svg diff --git a/ui/chatArea/symbols.svg b/themes/default/chatArea/symbols.svg similarity index 100% rename from ui/chatArea/symbols.svg rename to themes/default/chatArea/symbols.svg diff --git a/ui/chatArea/typing.svg b/themes/default/chatArea/typing.svg similarity index 100% rename from ui/chatArea/typing.svg rename to themes/default/chatArea/typing.svg diff --git a/ui/chatForm/buttons.css b/themes/default/chatForm/buttons.css similarity index 71% rename from ui/chatForm/buttons.css rename to themes/default/chatForm/buttons.css index 1533d8d19..52325391e 100644 --- a/ui/chatForm/buttons.css +++ b/themes/default/chatForm/buttons.css @@ -2,7 +2,7 @@ QAbstractButton#emoteButton { - background-image: url(":/ui/chatForm/emoteButton.svg"); + background-image: url("@getImagePath(chatForm/emoteButton.svg)"); border-top-right-radius: 5px; width: 24px; height: 24px; @@ -10,7 +10,7 @@ QAbstractButton#emoteButton QAbstractButton#fileButton { - background-image: url(":/ui/chatForm/fileButton.svg"); + background-image: url("@getImagePath(chatForm/fileButton.svg)"); border-bottom-right-radius: 5px; width: 24px; height: 24px; @@ -18,7 +18,7 @@ QAbstractButton#fileButton QAbstractButton#screenshotButton { - background-image: url(":/ui/chatForm/screenshotButton.svg"); + background-image: url("@getImagePath(chatForm/screenshotButton.svg)"); border-top-left-radius: 5px; width: 24px; height: 24px; @@ -26,7 +26,7 @@ QAbstractButton#screenshotButton QAbstractButton#sendButton { - background-image: url(":/ui/chatForm/sendButton.svg"); + background-image: url("@getImagePath(chatForm/sendButton.svg)"); border-radius: 5px; width: 50px; height: 50px; @@ -37,7 +37,7 @@ QAbstractButton#sendButton QAbstractButton#volButton { - border-image: url(":/ui/chatForm/volButton.svg"); + border-image: url("@getImagePath(chatForm/volButton.svg)"); border-radius: 5px; width: 22px; height: 18px; @@ -45,7 +45,7 @@ QAbstractButton#volButton QAbstractButton#micButton { - border-image: url(":/ui/chatForm/micButton.svg"); + border-image: url("@getImagePath(chatForm/micButton.svg)"); border-radius: 5px; width: 22px; height: 18px; @@ -53,7 +53,7 @@ QAbstractButton#micButton QAbstractButton#videoButton { - background-image: url(":/ui/chatForm/videoButton.svg"); + background-image: url("@getImagePath(chatForm/videoButton.svg)"); border-radius: 5px; width: 50px; height: 40px; @@ -61,7 +61,7 @@ QAbstractButton#videoButton QAbstractButton#callButton { - background-image: url(":/ui/chatForm/callButton.svg"); + background-image: url("@getImagePath(chatForm/callButton.svg)"); border-radius: 5px; width: 50px; height: 40px; @@ -71,7 +71,7 @@ QAbstractButton#callButton QAbstractButton#searchSettingsButton { - background-image: url(":/ui/chatForm/searchSettingsButton.svg"); + background-image: url("@getImagePath(chatForm/searchSettingsButton.svg)"); border-radius: 5px; width: 35px; height: 35px; @@ -79,7 +79,7 @@ QAbstractButton#searchSettingsButton QAbstractButton#searchHideButton { - background-image: url(":/ui/chatForm/searchHideButton.svg"); + background-image: url("@getImagePath(chatForm/searchHideButton.svg)"); border-radius: 5px; width: 35px; height: 35px; @@ -87,7 +87,7 @@ QAbstractButton#searchHideButton QAbstractButton#searchUpButton { - background-image: url(":/ui/chatForm/searchUpButton.svg"); + background-image: url("@getImagePath(chatForm/searchUpButton.svg)"); border-radius: 5px; width: 35px; height: 35px; @@ -95,7 +95,7 @@ QAbstractButton#searchUpButton QAbstractButton#searchDownButton { - background-image: url(":/ui/chatForm/searchDownButton.svg"); + background-image: url("@getImagePath(chatForm/searchDownButton.svg)"); border-radius: 5px; width: 35px; height: 35px; @@ -103,7 +103,7 @@ QAbstractButton#searchDownButton QAbstractButton#choiceDateButton { - background-image: url(":/ui/chatForm/searchCalendarButton.svg"); + background-image: url("@getImagePath(chatForm/searchCalendarButton.svg)"); border-radius: 5px; width: 45px; height: 35px; diff --git a/ui/chatForm/callButton.svg b/themes/default/chatForm/callButton.svg similarity index 100% rename from ui/chatForm/callButton.svg rename to themes/default/chatForm/callButton.svg diff --git a/ui/chatForm/emoteButton.svg b/themes/default/chatForm/emoteButton.svg similarity index 100% rename from ui/chatForm/emoteButton.svg rename to themes/default/chatForm/emoteButton.svg diff --git a/ui/chatForm/exitFullScreenButton.svg b/themes/default/chatForm/exitFullScreenButton.svg similarity index 100% rename from ui/chatForm/exitFullScreenButton.svg rename to themes/default/chatForm/exitFullScreenButton.svg diff --git a/ui/chatForm/fileButton.svg b/themes/default/chatForm/fileButton.svg similarity index 100% rename from ui/chatForm/fileButton.svg rename to themes/default/chatForm/fileButton.svg diff --git a/ui/chatForm/fullScreenButtons.css b/themes/default/chatForm/fullScreenButtons.css similarity index 63% rename from ui/chatForm/fullScreenButtons.css rename to themes/default/chatForm/fullScreenButtons.css index da0596378..1fdc96e2e 100644 --- a/ui/chatForm/fullScreenButtons.css +++ b/themes/default/chatForm/fullScreenButtons.css @@ -25,7 +25,7 @@ QAbstractButton:pressed QAbstractButton#volButtonFullScreen { - background-image: url(":/ui/chatForm/volButton.svg"); + background-image: url("@getImagePath(chatForm/volButton.svg)"); width: 11px; height: 9px; padding: 12px; @@ -33,7 +33,7 @@ QAbstractButton#volButtonFullScreen QAbstractButton#micButtonFullScreen { - background-image: url(":/ui/chatForm/micButton.svg"); + background-image: url("@getImagePath(chatForm/micButton.svg)"); width: 11px; height: 9px; padding: 12px; @@ -41,14 +41,14 @@ QAbstractButton#micButtonFullScreen QAbstractButton#videoButtonFullScreen { - background-image: url(":/ui/chatForm/videoButtonRed.svg"); + background-image: url("@getImagePath(chatForm/videoButtonRed.svg)"); width: 37px; height: 33px; } QAbstractButton#videoPreviewButton { - background-image: url(":/ui/chatForm/videoPreview.svg"); + background-image: url("@getImagePath(chatForm/videoPreview.svg)"); width: 13px; height: 13px; padding: 10px; @@ -56,7 +56,7 @@ QAbstractButton#videoPreviewButton QAbstractButton#exitFullScreenButton { - background-image: url(":/ui/chatForm/exitFullScreenButton.svg"); + background-image: url("@getImagePath(chatForm/exitFullScreenButton.svg)"); width: 30px; height: 30px; padding: 1px; @@ -64,15 +64,15 @@ QAbstractButton#exitFullScreenButton QAbstractButton#volButtonFullScreen[state="red"] { - background-image: url(":/ui/chatForm/volButtonRed.svg"); + background-image: url("@getImagePath(chatForm/volButtonRed.svg)"); } QAbstractButton#micButtonFullScreen[state="red"] { - background-image: url(":/ui/chatForm/micButtonRed.svg"); + background-image: url("@getImagePath(chatForm/micButtonRed.svg)"); } QAbstractButton#videoPreviewButton[state="red"] { - background-image: url(":/ui/chatForm/videoPreviewRed.svg"); + background-image: url("@getImagePath(chatForm/videoPreviewRed.svg)"); } diff --git a/ui/chatForm/labels.css b/themes/default/chatForm/labels.css similarity index 100% rename from ui/chatForm/labels.css rename to themes/default/chatForm/labels.css diff --git a/ui/chatForm/micButton.svg b/themes/default/chatForm/micButton.svg similarity index 100% rename from ui/chatForm/micButton.svg rename to themes/default/chatForm/micButton.svg diff --git a/ui/chatForm/micButtonRed.svg b/themes/default/chatForm/micButtonRed.svg similarity index 100% rename from ui/chatForm/micButtonRed.svg rename to themes/default/chatForm/micButtonRed.svg diff --git a/ui/chatForm/screenshotButton.svg b/themes/default/chatForm/screenshotButton.svg similarity index 100% rename from ui/chatForm/screenshotButton.svg rename to themes/default/chatForm/screenshotButton.svg diff --git a/ui/chatForm/searchCalendarButton.svg b/themes/default/chatForm/searchCalendarButton.svg similarity index 100% rename from ui/chatForm/searchCalendarButton.svg rename to themes/default/chatForm/searchCalendarButton.svg diff --git a/ui/chatForm/searchDownButton.svg b/themes/default/chatForm/searchDownButton.svg similarity index 100% rename from ui/chatForm/searchDownButton.svg rename to themes/default/chatForm/searchDownButton.svg diff --git a/ui/chatForm/searchHideButton.svg b/themes/default/chatForm/searchHideButton.svg similarity index 100% rename from ui/chatForm/searchHideButton.svg rename to themes/default/chatForm/searchHideButton.svg diff --git a/ui/chatForm/searchSettingsButton.svg b/themes/default/chatForm/searchSettingsButton.svg similarity index 100% rename from ui/chatForm/searchSettingsButton.svg rename to themes/default/chatForm/searchSettingsButton.svg diff --git a/ui/chatForm/searchUpButton.svg b/themes/default/chatForm/searchUpButton.svg similarity index 100% rename from ui/chatForm/searchUpButton.svg rename to themes/default/chatForm/searchUpButton.svg diff --git a/ui/chatForm/sendButton.svg b/themes/default/chatForm/sendButton.svg similarity index 100% rename from ui/chatForm/sendButton.svg rename to themes/default/chatForm/sendButton.svg diff --git a/ui/chatForm/videoButton.svg b/themes/default/chatForm/videoButton.svg similarity index 100% rename from ui/chatForm/videoButton.svg rename to themes/default/chatForm/videoButton.svg diff --git a/ui/chatForm/videoButtonRed.svg b/themes/default/chatForm/videoButtonRed.svg similarity index 100% rename from ui/chatForm/videoButtonRed.svg rename to themes/default/chatForm/videoButtonRed.svg diff --git a/ui/chatForm/videoPreview.svg b/themes/default/chatForm/videoPreview.svg similarity index 100% rename from ui/chatForm/videoPreview.svg rename to themes/default/chatForm/videoPreview.svg diff --git a/ui/chatForm/videoPreviewRed.svg b/themes/default/chatForm/videoPreviewRed.svg similarity index 100% rename from ui/chatForm/videoPreviewRed.svg rename to themes/default/chatForm/videoPreviewRed.svg diff --git a/ui/chatForm/volButton.svg b/themes/default/chatForm/volButton.svg similarity index 100% rename from ui/chatForm/volButton.svg rename to themes/default/chatForm/volButton.svg diff --git a/ui/chatForm/volButtonRed.svg b/themes/default/chatForm/volButtonRed.svg similarity index 100% rename from ui/chatForm/volButtonRed.svg rename to themes/default/chatForm/volButtonRed.svg diff --git a/ui/contentDialog/contentDialog.css b/themes/default/contentDialog/contentDialog.css similarity index 100% rename from ui/contentDialog/contentDialog.css rename to themes/default/contentDialog/contentDialog.css diff --git a/ui/emoteButton/emoteButton.css b/themes/default/emoteButton/emoteButton.css similarity index 82% rename from ui/emoteButton/emoteButton.css rename to themes/default/emoteButton/emoteButton.css index 237e3cc31..0d9ba959d 100644 --- a/ui/emoteButton/emoteButton.css +++ b/themes/default/emoteButton/emoteButton.css @@ -1,7 +1,7 @@ QPushButton { background-color: #6bc260; - background-image: url(":/ui/emoteButton/emoteButton.svg"); + background-image: url("@getImagePath(emoteButton/emoteButton.svg)"); background-repeat: none; background-position: center; border-top-right-radius: 5px; diff --git a/ui/emoteButton/emoteButton.svg b/themes/default/emoteButton/emoteButton.svg similarity index 100% rename from ui/emoteButton/emoteButton.svg rename to themes/default/emoteButton/emoteButton.svg diff --git a/ui/emoticonWidget/dot_page.svg b/themes/default/emoticonWidget/dot_page.svg similarity index 100% rename from ui/emoticonWidget/dot_page.svg rename to themes/default/emoticonWidget/dot_page.svg diff --git a/ui/emoticonWidget/dot_page_current.svg b/themes/default/emoticonWidget/dot_page_current.svg similarity index 100% rename from ui/emoticonWidget/dot_page_current.svg rename to themes/default/emoticonWidget/dot_page_current.svg diff --git a/ui/emoticonWidget/dot_page_hover.svg b/themes/default/emoticonWidget/dot_page_hover.svg similarity index 100% rename from ui/emoticonWidget/dot_page_hover.svg rename to themes/default/emoticonWidget/dot_page_hover.svg diff --git a/ui/emoticonWidget/emoticonWidget.css b/themes/default/emoticonWidget/emoticonWidget.css similarity index 64% rename from ui/emoticonWidget/emoticonWidget.css rename to themes/default/emoticonWidget/emoticonWidget.css index c24683f11..9074241e4 100644 --- a/ui/emoticonWidget/emoticonWidget.css +++ b/themes/default/emoticonWidget/emoticonWidget.css @@ -15,22 +15,22 @@ QRadioButton::indicator QRadioButton::indicator:unchecked { - image: url(:/ui/emoticonWidget/dot_page.svg); + image: url(@getImagePath(emoticonWidget/dot_page.svg)); } QRadioButton::indicator:unchecked:hover { - image: url(:/ui/emoticonWidget/dot_page_hover.svg); + image: url(@getImagePath(emoticonWidget/dot_page_hover.svg)); } QRadioButton::indicator:unchecked:pressed { - image: url(:/ui/emoticonWidget/dot_page_hover.svg); + image: url(@getImagePath(emoticonWidget/dot_page_hover.svg)); } QRadioButton::indicator:checked { - image: url(:/ui/emoticonWidget/dot_page_current.svg); + image: url(@getImagePath(emoticonWidget/dot_page_current.svg)); } QMenu diff --git a/ui/fileButton/fileButton.css b/themes/default/fileButton/fileButton.css similarity index 85% rename from ui/fileButton/fileButton.css rename to themes/default/fileButton/fileButton.css index 50854944b..7d6fb6258 100644 --- a/ui/fileButton/fileButton.css +++ b/themes/default/fileButton/fileButton.css @@ -1,7 +1,7 @@ QPushButton { background-color: #6bc260; - background-image: url(":/ui/fileButton/fileButton.svg"); + background-image: url("@getImagePath(fileButton/fileButton.svg)"); background-repeat: none; background-position: center; border-bottom-right-radius: 5px; diff --git a/ui/fileButton/fileButton.svg b/themes/default/fileButton/fileButton.svg similarity index 100% rename from ui/fileButton/fileButton.svg rename to themes/default/fileButton/fileButton.svg diff --git a/ui/fileTransferInstance/arrow_white.svg b/themes/default/fileTransferInstance/arrow_white.svg similarity index 100% rename from ui/fileTransferInstance/arrow_white.svg rename to themes/default/fileTransferInstance/arrow_white.svg diff --git a/ui/fileTransferInstance/browse.svg b/themes/default/fileTransferInstance/browse.svg similarity index 100% rename from ui/fileTransferInstance/browse.svg rename to themes/default/fileTransferInstance/browse.svg diff --git a/ui/fileTransferInstance/dir.svg b/themes/default/fileTransferInstance/dir.svg similarity index 100% rename from ui/fileTransferInstance/dir.svg rename to themes/default/fileTransferInstance/dir.svg diff --git a/ui/fileTransferInstance/filetransferWidget.css b/themes/default/fileTransferInstance/filetransferWidget.css similarity index 100% rename from ui/fileTransferInstance/filetransferWidget.css rename to themes/default/fileTransferInstance/filetransferWidget.css diff --git a/ui/fileTransferInstance/no.svg b/themes/default/fileTransferInstance/no.svg similarity index 100% rename from ui/fileTransferInstance/no.svg rename to themes/default/fileTransferInstance/no.svg diff --git a/ui/fileTransferInstance/pause.svg b/themes/default/fileTransferInstance/pause.svg similarity index 100% rename from ui/fileTransferInstance/pause.svg rename to themes/default/fileTransferInstance/pause.svg diff --git a/ui/fileTransferInstance/yes.svg b/themes/default/fileTransferInstance/yes.svg similarity index 100% rename from ui/fileTransferInstance/yes.svg rename to themes/default/fileTransferInstance/yes.svg diff --git a/ui/fileTransferWidget/fileDone.svg b/themes/default/fileTransferWidget/fileDone.svg similarity index 100% rename from ui/fileTransferWidget/fileDone.svg rename to themes/default/fileTransferWidget/fileDone.svg diff --git a/ui/fileTransferWidget/fileTransferWidget.css b/themes/default/fileTransferWidget/fileTransferWidget.css similarity index 100% rename from ui/fileTransferWidget/fileTransferWidget.css rename to themes/default/fileTransferWidget/fileTransferWidget.css diff --git a/ui/friendList/friendList.css b/themes/default/friendList/friendList.css similarity index 100% rename from ui/friendList/friendList.css rename to themes/default/friendList/friendList.css diff --git a/ui/loginScreen/loginScreen.css b/themes/default/loginScreen/loginScreen.css similarity index 100% rename from ui/loginScreen/loginScreen.css rename to themes/default/loginScreen/loginScreen.css diff --git a/ui/msgEdit/msgEdit.css b/themes/default/msgEdit/msgEdit.css similarity index 100% rename from ui/msgEdit/msgEdit.css rename to themes/default/msgEdit/msgEdit.css diff --git a/ui/notificationEdge/notificationEdge.css b/themes/default/notificationEdge/notificationEdge.css similarity index 100% rename from ui/notificationEdge/notificationEdge.css rename to themes/default/notificationEdge/notificationEdge.css diff --git a/ui/rejectCall/rejectCall.svg b/themes/default/rejectCall/rejectCall.svg similarity index 100% rename from ui/rejectCall/rejectCall.svg rename to themes/default/rejectCall/rejectCall.svg diff --git a/ui/screenshotButton/screenshotButton.css b/themes/default/screenshotButton/screenshotButton.css similarity index 83% rename from ui/screenshotButton/screenshotButton.css rename to themes/default/screenshotButton/screenshotButton.css index 82d523193..7e5a94a57 100644 --- a/ui/screenshotButton/screenshotButton.css +++ b/themes/default/screenshotButton/screenshotButton.css @@ -1,7 +1,7 @@ QPushButton { background-color: #6bc260; - background-image: url(":/ui/screenshotButton/screenshotButton.svg"); + background-image: url("@getImagePath(screenshotButton/screenshotButton.svg)"); background-repeat: none; background-position: center; border-top-left-radius: 5px; diff --git a/ui/screenshotButton/screenshotButton.svg b/themes/default/screenshotButton/screenshotButton.svg similarity index 100% rename from ui/screenshotButton/screenshotButton.svg rename to themes/default/screenshotButton/screenshotButton.svg diff --git a/ui/sendButton/sendButton.css b/themes/default/sendButton/sendButton.css similarity index 82% rename from ui/sendButton/sendButton.css rename to themes/default/sendButton/sendButton.css index d3b9998a8..249a9737f 100644 --- a/ui/sendButton/sendButton.css +++ b/themes/default/sendButton/sendButton.css @@ -1,7 +1,7 @@ QPushButton { background-color: #6bc260; - background-image: url(":/ui/sendButton/sendButton.svg"); + background-image: url("@getImagePath(sendButton/sendButton.svg)"); background-repeat: none; background-position: center; border: none; diff --git a/ui/sendButton/sendButton.svg b/themes/default/sendButton/sendButton.svg similarity index 100% rename from ui/sendButton/sendButton.svg rename to themes/default/sendButton/sendButton.svg diff --git a/ui/settings/mainContent.css b/themes/default/settings/mainContent.css similarity index 100% rename from ui/settings/mainContent.css rename to themes/default/settings/mainContent.css diff --git a/ui/settings/mainHead.css b/themes/default/settings/mainHead.css similarity index 100% rename from ui/settings/mainHead.css rename to themes/default/settings/mainHead.css diff --git a/ui/statusButton/menu_indicator.svg b/themes/default/statusButton/menu_indicator.svg similarity index 100% rename from ui/statusButton/menu_indicator.svg rename to themes/default/statusButton/menu_indicator.svg diff --git a/ui/statusButton/statusButton.css b/themes/default/statusButton/statusButton.css similarity index 91% rename from ui/statusButton/statusButton.css rename to themes/default/statusButton/statusButton.css index f97975d2c..515153bad 100644 --- a/ui/statusButton/statusButton.css +++ b/themes/default/statusButton/statusButton.css @@ -33,7 +33,7 @@ QPushButton::menu-indicator {image: none;} QPushButton::menu-indicator:pressed, QPushButton::menu-indicator:open { - image: url(":ui/statusButton/menu_indicator.svg"); + image: url("@getImagePath(statusButton/menu_indicator.svg)"); subcontrol-origin: padding; subcontrol-position: bottom center; position: relative; diff --git a/ui/tooliconsZone/tooliconsZone.css b/themes/default/tooliconsZone/tooliconsZone.css similarity index 100% rename from ui/tooliconsZone/tooliconsZone.css rename to themes/default/tooliconsZone/tooliconsZone.css diff --git a/ui/window/general.css b/themes/default/window/general.css similarity index 100% rename from ui/window/general.css rename to themes/default/window/general.css diff --git a/ui/window/profile.css b/themes/default/window/profile.css similarity index 100% rename from ui/window/profile.css rename to themes/default/window/profile.css diff --git a/ui/window/statusPanel.css b/themes/default/window/statusPanel.css similarity index 97% rename from ui/window/statusPanel.css rename to themes/default/window/statusPanel.css index 3b94f248e..f0bab5f38 100644 --- a/ui/window/statusPanel.css +++ b/themes/default/window/statusPanel.css @@ -119,7 +119,7 @@ QListView #statusPanel > #statusHead > #statusButton::menu-indicator:pressed, #statusPanel > #statusHead > #statusButton::menu-indicator:open { - image: url(":ui/statusButton/menu_indicator.png"); + image: url("@getImagePath(statusButton/menu_indicator.svg)"); subcontrol-origin: padding; subcontrol-position: bottom center; position: relative; diff --git a/ui/window/window.css b/themes/default/window/window.css similarity index 52% rename from ui/window/window.css rename to themes/default/window/window.css index 49c60da8c..c56387d25 100644 --- a/ui/window/window.css +++ b/themes/default/window/window.css @@ -35,38 +35,38 @@ QPushButton#minimizeButton { border: 0px solid transparent; background-color: transparent; - image: url(":ui/window/minimizeButton.png"); + image: url("@getImagePath(window/minimizeButton.png)"); } -QPushButton#minimizeButton:hover {image: url(":ui/window/minimizeButtonHover.png");} -QPushButton#minimizeButton:pressed {image: url(":ui/window/minimizeButtonPressed.png");} +QPushButton#minimizeButton:hover {image: url("@getImagePath(window/minimizeButtonHover.png)");} +QPushButton#minimizeButton:pressed {image: url("@getImagePath(window/minimizeButtonPressed.png)");} QPushButton#minimizeButton:focus {outline: none;} QPushButton#maximizeButton { border: 0px solid transparent; background-color: transparent; - image: url(":ui/window/maximizeButton.png"); + image: url("@getImagePath(window/maximizeButton.png"); } -QPushButton#maximizeButton:hover {image: url(":ui/window/maximizeButtonHover.png");} -QPushButton#maximizeButton:pressed {image: url(":ui/window/maximizeButtonPressed.png");} +QPushButton#maximizeButton:hover {image: url("@getImagePath(window/maximizeButtonHover.png)");} +QPushButton#maximizeButton:pressed {image: url("@getImagePath(window/maximizeButtonPressed.png)");} QPushButton#maximizeButton:focus {outline: none;} QPushButton#closeButton { border: 0px solid transparent; background-color: transparent; - image: url(":ui/window/closeButton.png"); + image: url("@getImagePath(window/closeButton.png"); } -QPushButton#closeButton:hover {image: url(":ui/window/closeButtonHover.png");} -QPushButton#closeButton:pressed {image: url(":ui/window/closeButtonPressed.png");} +QPushButton#closeButton:hover {image: url("@getImagePath(window/closeButtonHover.png)");} +QPushButton#closeButton:pressed {image: url("@getImagePath(window/closeButtonPressed.png)");} QPushButton#closeButton:focus {outline: none;} QPushButton#restoreButton { border: 0px solid transparent; background-color: transparent; - image: url(":ui/window/restoreButton.png"); + image: url("@getImagePath(window/restoreButton.png)"); } -QPushButton#restoreButton:hover {image: url(":ui/window/restoreButtonHover.png");} -QPushButton#restoreButton:pressed {image: url(":ui/window/restoreButtonPressed.png");} +QPushButton#restoreButton:hover {image: url("@getImagePath(window/restoreButtonHover.png)");} +QPushButton#restoreButton:pressed {image: url("@getImagePath(window/restoreButtonPressed.png)");} QPushButton#restoreButton:focus {outline: none;}