From 659a0bf2c41ae9920e035917cb3f1625839b0f74 Mon Sep 17 00:00:00 2001 From: "Tux3 / Mlkj / !Lev.uXFMLA" Date: Sat, 7 Feb 2015 12:46:55 +0100 Subject: [PATCH 01/10] First draft of the Android GUI Very much not finished and non-functional --- qtox.pro | 3 +- src/android.ui | 905 ++++++++++++++++++++++++++++++++++++++ src/nexus.cpp | 16 +- src/widget/androidgui.cpp | 162 ++++++- src/widget/androidgui.h | 37 +- src/widget/gui.cpp | 28 +- src/widget/gui.h | 9 +- src/widget/widget.cpp | 4 +- ui/window/statusPanel.css | 7 + 9 files changed, 1155 insertions(+), 16 deletions(-) create mode 100644 src/android.ui diff --git a/qtox.pro b/qtox.pro index 3c95c22ba..450978f61 100644 --- a/qtox.pro +++ b/qtox.pro @@ -33,7 +33,8 @@ FORMS += \ src/widget/form/settings/privacysettings.ui \ src/widget/form/loadhistorydialog.ui \ src/widget/form/setpassworddialog.ui \ - src/widget/form/settings/advancedsettings.ui + src/widget/form/settings/advancedsettings.ui \ + src/android.ui CONFIG += c++11 diff --git a/src/android.ui b/src/android.ui new file mode 100644 index 000000000..1c22c54b4 --- /dev/null +++ b/src/android.ui @@ -0,0 +1,905 @@ + + + Android + + + + 0 + 0 + 320 + 480 + + + + Form + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 0 + 0 + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + true + + + + 0 + 0 + + + + + + + 0 + + + + + Qt::Horizontal + + + QSizePolicy::Maximum + + + + 5 + 20 + + + + + + + + 0 + + + + + true + + + + 1 + 0 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 240 + 240 + 240 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + 255 + 255 + 255 + + + + + + + + + 11 + 75 + true + + + + Your name + + + + + + + + 1 + 0 + + + + + + + + + 193 + 193 + 193 + + + + + + + 193 + 193 + 193 + + + + + + + + + 193 + 193 + 193 + + + + + + + 193 + 193 + 193 + + + + + + + + + 14 + 14 + 14 + + + + + + + 14 + 14 + 14 + + + + + + + + + 8 + + + + Your status + + + + + + + + + Qt::Horizontal + + + QSizePolicy::Fixed + + + + 10 + 20 + + + + + + + + + 0 + 0 + + + + + 20 + 40 + + + + Qt::NoFocus + + + + + + + 10 + 10 + + + + false + + + false + + + false + + + true + + + + + + + + + + + + + 0 + 0 + + + + Qt::LeftToRight + + + true + + + QFrame::NoFrame + + + Qt::ScrollBarAlwaysOff + + + true + + + + + 0 + 0 + 320 + 385 + + + + + + + + + + true + + + + 0 + 0 + + + + + + + + 0 + + + 0 + + + 0 + + + 0 + + + 0 + + + + + + 55 + 35 + + + + + 55 + 35 + + + + Qt::NoFocus + + + Add friends + + + false + + + + + + + + + + :/img/add.png:/img/add.png + + + false + + + false + + + false + + + + + + + + 55 + 35 + + + + Qt::NoFocus + + + Create a group chat + + + false + + + + + + + :/img/group_button.png:/img/group_button.png + + + true + + + + + + + + 55 + 35 + + + + + 55 + 35 + + + + Qt::NoFocus + + + View completed file transfers + + + + + + + :/img/transfer.png:/img/transfer.png + + + true + + + + + + + + 55 + 35 + + + + + 55 + 35 + + + + Qt::NoFocus + + + Change your settings + + + + + + + :/img/settings.png:/img/settings.png + + + true + + + + + + + + + + + + + + AdjustingScrollArea + QScrollArea +
src/widget/adjustingscrollarea.h
+ 1 +
+ + CroppingLabel + QLabel +
src/widget/croppinglabel.h
+
+
+ + + + +
diff --git a/src/nexus.cpp b/src/nexus.cpp index 9c80bcfcd..6a56f8bd6 100644 --- a/src/nexus.cpp +++ b/src/nexus.cpp @@ -72,7 +72,21 @@ void Nexus::start() GUI::getInstance(); // Connections -#ifndef Q_OS_ANDROID +#ifdef Q_OS_ANDROID + connect(core, &Core::connected, androidgui, &AndroidGUI::onConnected); + connect(core, &Core::disconnected, androidgui, &AndroidGUI::onDisconnected); + //connect(core, &Core::failedToStart, androidgui, &AndroidGUI::onFailedToStartCore); + //connect(core, &Core::badProxy, androidgui, &AndroidGUI::onBadProxyCore); + connect(core, &Core::statusSet, androidgui, &AndroidGUI::onStatusSet); + connect(core, &Core::usernameSet, androidgui, &AndroidGUI::setUsername); + connect(core, &Core::statusMessageSet, androidgui, &AndroidGUI::setStatusMessage); + connect(core, &Core::selfAvatarChanged, androidgui, &AndroidGUI::onSelfAvatarLoaded); + + connect(androidgui, &AndroidGUI::statusSet, core, &Core::setStatus); + //connect(androidgui, &AndroidGUI::friendRequested, core, &Core::requestFriendship); + //connect(androidgui, &AndroidGUI::friendRequestAccepted, core, &Core::acceptFriendRequest); + //connect(androidgui, &AndroidGUI::changeProfile, core, &Core::switchConfiguration); +#else connect(core, &Core::connected, widget, &Widget::onConnected); connect(core, &Core::disconnected, widget, &Widget::onDisconnected); connect(core, &Core::failedToStart, widget, &Widget::onFailedToStartCore); diff --git a/src/widget/androidgui.cpp b/src/widget/androidgui.cpp index 7ae41d983..8dd2b7a9d 100644 --- a/src/widget/androidgui.cpp +++ b/src/widget/androidgui.cpp @@ -1,13 +1,169 @@ #include "androidgui.h" +#include "ui_android.h" +#include "friendlistwidget.h" +#include "maskablepixmapwidget.h" +#include "src/core.h" +#include "src/friend.h" +#include "src/friendlist.h" +#include "src/group.h" +#include "src/grouplist.h" +#include "src/misc/settings.h" +#include "src/misc/style.h" +#include "src/nexus.h" +#include "src/widget/friendwidget.h" +#include "src/widget/groupwidget.h" #include +#include AndroidGUI::AndroidGUI(QWidget *parent) : - QWidget(parent) + QWidget(parent), + ui{new Ui::Android} { - l = new QLabel("qTox Android", this); + ui->setupUi(this); + + ui->friendList->setStyleSheet(Style::resolve(Style::getStylesheet(":ui/friendList/friendList.css"))); + + profilePicture = new MaskablePixmapWidget(this, QSize(40, 40), ":/img/avatar_mask.png"); + profilePicture->setPixmap(QPixmap(":/img/contact_dark.png")); + profilePicture->setClickable(true); + ui->myProfile->insertWidget(0, profilePicture); + ui->myProfile->insertSpacing(1, 7); + + ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}")); + ui->statusHead->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); + + contactListWidget = new FriendListWidget(); + ui->friendList->setWidget(contactListWidget); + ui->friendList->setLayoutDirection(Qt::RightToLeft); + + ui->nameLabel->setEditable(true); + ui->statusLabel->setEditable(true); + + ui->statusPanel->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); + + QMenu *statusButtonMenu = new QMenu(ui->statusButton); + QAction* setStatusOnline = statusButtonMenu->addAction(AndroidGUI::tr("Online","Button to set your status to 'Online'")); + setStatusOnline->setIcon(QIcon(":ui/statusButton/dot_online.png")); + QAction* setStatusAway = statusButtonMenu->addAction(AndroidGUI::tr("Away","Button to set your status to 'Away'")); + setStatusAway->setIcon(QIcon(":ui/statusButton/dot_idle.png")); + QAction* setStatusBusy = statusButtonMenu->addAction(AndroidGUI::tr("Busy","Button to set your status to 'Busy'")); + setStatusBusy->setIcon(QIcon(":ui/statusButton/dot_busy.png")); + ui->statusButton->setMenu(statusButtonMenu); + + ui->statusButton->setProperty("status", "offline"); + Style::repolish(ui->statusButton); + + // Disable some widgets until we're connected to the DHT + ui->statusButton->setEnabled(false); + + Style::setThemeColor(Settings::getInstance().getThemeColor()); + Style::setThemeColor(1); + reloadTheme(); + + connect(ui->nameLabel, &CroppingLabel::textChanged, this, &AndroidGUI::onUsernameChanged); + connect(ui->statusLabel, &CroppingLabel::textChanged, this, &AndroidGUI::onStatusMessageChanged); } AndroidGUI::~AndroidGUI() { - delete l; + delete profilePicture; + delete contactListWidget; } + +void AndroidGUI::reloadTheme() +{ + QString statusPanelStyle = Style::getStylesheet(":/ui/window/statusPanel.css"); + ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}")); + 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")); + + for (Friend* f : FriendList::getAllFriends()) + f->getFriendWidget()->reloadTheme(); + + for (Group* g : GroupList::getAllGroups()) + g->getGroupWidget()->reloadTheme(); +} + +void AndroidGUI::onSelfAvatarLoaded(const QPixmap& pic) +{ + profilePicture->setPixmap(pic); +} + +void AndroidGUI::onConnected() +{ + ui->statusButton->setEnabled(true); + if (beforeDisconnect == Status::Offline) + emit statusSet(Status::Online); + else + emit statusSet(beforeDisconnect); +} + +void AndroidGUI::onDisconnected() +{ + QString stat = ui->statusButton->property("status").toString(); + if (stat == "online") + beforeDisconnect = Status::Online; + else if (stat == "busy") + beforeDisconnect = Status::Busy; + else if (stat == "away") + beforeDisconnect = Status::Away; + else + beforeDisconnect = Status::Offline; + + ui->statusButton->setEnabled(false); + emit statusSet(Status::Offline); +} + +void AndroidGUI::onUsernameChanged(const QString& newUsername, const QString& oldUsername) +{ + setUsername(oldUsername); // restore old username until Core tells us to set it + Nexus::getCore()->setUsername(newUsername); +} + +void AndroidGUI::setUsername(const QString& username) +{ + ui->nameLabel->setText(username); + ui->nameLabel->setToolTip(username); // for overlength names + QString sanename = username; + sanename.remove(QRegExp("[\\t\\n\\v\\f\\r\\x0000]")); + nameMention = QRegExp("\\b" + QRegExp::escape(username) + "\\b", Qt::CaseInsensitive); + sanitizedNameMention = QRegExp("\\b" + QRegExp::escape(sanename) + "\\b", Qt::CaseInsensitive); +} + +void AndroidGUI::onStatusMessageChanged(const QString& newStatusMessage, const QString& oldStatusMessage) +{ + ui->statusLabel->setText(oldStatusMessage); // restore old status message until Core tells us to set it + ui->statusLabel->setToolTip(oldStatusMessage); // for overlength messsages + Nexus::getCore()->setStatusMessage(newStatusMessage); +} + +void AndroidGUI::setStatusMessage(const QString &statusMessage) +{ + ui->statusLabel->setText(statusMessage); + ui->statusLabel->setToolTip(statusMessage); // for overlength messsages +} + +void AndroidGUI::onStatusSet(Status status) +{ + //We have to use stylesheets here, there's no way to + //prevent the button icon from moving when pressed otherwise + switch (status) + { + case Status::Online: + ui->statusButton->setProperty("status" ,"online"); + break; + case Status::Away: + ui->statusButton->setProperty("status" ,"away"); + break; + case Status::Busy: + ui->statusButton->setProperty("status" ,"busy"); + break; + case Status::Offline: + ui->statusButton->setProperty("status" ,"offline"); + break; + } + Style::repolish(ui->statusButton); +} + diff --git a/src/widget/androidgui.h b/src/widget/androidgui.h index 853483ce2..c820bb878 100644 --- a/src/widget/androidgui.h +++ b/src/widget/androidgui.h @@ -1,9 +1,15 @@ #ifndef ANDROIDGUI_H #define ANDROIDGUI_H +#include "src/corestructs.h" #include -class QLabel; +class MaskablePixmapWidget; +class FriendListWidget; + +namespace Ui { +class Android; +} class AndroidGUI : public QWidget { @@ -12,8 +18,35 @@ public: explicit AndroidGUI(QWidget *parent = 0); ~AndroidGUI(); +public slots: + void onConnected(); + void onDisconnected(); + void onStatusSet(Status status); + void onSelfAvatarLoaded(const QPixmap &pic); + void setUsername(const QString& username); + void setStatusMessage(const QString &statusMessage); + +signals: + void friendRequestAccepted(const QString& userId); + void friendRequested(const QString& friendAddress, const QString& message); + void statusSet(Status status); + void statusSelected(Status status); + void usernameChanged(const QString& username); + void statusMessageChanged(const QString& statusMessage); + private: - QLabel* l; + void reloadTheme(); + +private slots: + void onUsernameChanged(const QString& newUsername, const QString& oldUsername); + void onStatusMessageChanged(const QString& newStatusMessage, const QString& oldStatusMessage); + +private: + Ui::Android* ui; + MaskablePixmapWidget* profilePicture; + FriendListWidget* contactListWidget; + Status beforeDisconnect = Status::Offline; + QRegExp nameMention, sanitizedNameMention; }; #endif // ANDROIDGUI_H diff --git a/src/widget/gui.cpp b/src/widget/gui.cpp index d6b8a7dc0..12515fc3c 100644 --- a/src/widget/gui.cpp +++ b/src/widget/gui.cpp @@ -73,6 +73,19 @@ void GUI::reloadTheme() } } +void GUI::showInfo(const QString& title, const QString& msg) +{ + if (QThread::currentThread() == qApp->thread()) + { + getInstance()._showInfo(title, msg); + } + else + { + QMetaObject::invokeMethod(&getInstance(), "_showInfo", Qt::BlockingQueuedConnection, + Q_ARG(const QString&, title), Q_ARG(const QString&, msg)); + } +} + void GUI::showWarning(const QString& title, const QString& msg) { if (QThread::currentThread() == qApp->thread()) @@ -86,15 +99,15 @@ void GUI::showWarning(const QString& title, const QString& msg) } } -void GUI::showInfo(const QString& title, const QString& msg) +void GUI::showError(const QString& title, const QString& msg) { if (QThread::currentThread() == qApp->thread()) { - getInstance()._showInfo(title, msg); + getInstance()._showError(title, msg); } else { - QMetaObject::invokeMethod(&getInstance(), "_showInfo", Qt::BlockingQueuedConnection, + QMetaObject::invokeMethod(&getInstance(), "_showError", Qt::BlockingQueuedConnection, Q_ARG(const QString&, title), Q_ARG(const QString&, msg)); } } @@ -182,14 +195,19 @@ void GUI::_reloadTheme() #endif } +void GUI::_showInfo(const QString& title, const QString& msg) +{ + QMessageBox::information(getMainWidget(), title, msg); +} + void GUI::_showWarning(const QString& title, const QString& msg) { QMessageBox::warning(getMainWidget(), title, msg); } -void GUI::_showInfo(const QString& title, const QString& msg) +void GUI::_showError(const QString& title, const QString& msg) { - QMessageBox::information(getMainWidget(), title, msg); + QMessageBox::critical(getMainWidget(), title, msg); } bool GUI::_askQuestion(const QString& title, const QString& msg, diff --git a/src/widget/gui.h b/src/widget/gui.h index 70cc73a7c..926685467 100644 --- a/src/widget/gui.h +++ b/src/widget/gui.h @@ -23,10 +23,12 @@ public: static void setWindowTitle(const QString& title); /// Reloads the application theme and redraw the window static void reloadTheme(); - /// Show a warning to the user, for example in a message box - static void showWarning(const QString& title, const QString& msg); /// Show some text to the user, for example in a message box static void showInfo(const QString& title, const QString& msg); + /// Show a warning to the user, for example in a message box + static void showWarning(const QString& title, const QString& msg); + /// Show an error to the user, for example in a message box + static void showError(const QString& title, const QString& msg); /// Asks the user a question, for example in a message box. /// If warning is true, we will use a special warning style. /// Returns the answer. @@ -57,8 +59,9 @@ private slots: void _setEnabled(bool state); void _setWindowTitle(const QString& title); void _reloadTheme(); - void _showWarning(const QString& title, const QString& msg); void _showInfo(const QString& title, const QString& msg); + void _showWarning(const QString& title, const QString& msg); + void _showError(const QString& title, const QString& msg); bool _askQuestion(const QString& title, const QString& msg, bool defaultAns = false, bool warning = true); QString _itemInputDialog(QWidget * parent, const QString & title, diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index 3868e1ece..f6cd0ab6f 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -1133,8 +1133,10 @@ void Widget::clearAllReceipts() void Widget::reloadTheme() { + QString statusPanelStyle = Style::getStylesheet(":/ui/window/statusPanel.css"); ui->tooliconsZone->setStyleSheet(Style::resolve("QPushButton{background-color:@themeDark;border:none;}QPushButton:hover{background-color:@themeMediumDark;border:none;}")); - ui->statusPanel->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.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")); diff --git a/ui/window/statusPanel.css b/ui/window/statusPanel.css index 2c9b77d7a..536c50918 100644 --- a/ui/window/statusPanel.css +++ b/ui/window/statusPanel.css @@ -12,12 +12,19 @@ QLineEdit background-color: @themeDark; } +#statusPanel > #statusHead +{ + background-color: @themeDark; +} + #statusPanel > #statusHead > #nameLabel { + background-color: @themeDark; font: @extraBig; color: @white; } #statusPanel > #statusHead > #statusLabel { + background-color: @themeDark; font: @medium; color: @lightGrey; } From 7b8398457d7eef2454321df5e985805f9f29dd90 Mon Sep 17 00:00:00 2001 From: Sascha Brendel Date: Fri, 6 Feb 2015 18:56:02 +0100 Subject: [PATCH 02/10] Added German translation for new Encryption-Dialogs and -forms --- translations/de.ts | 141 ++++++++++++++++++++++++++++++++++++++------- 1 file changed, 121 insertions(+), 20 deletions(-) diff --git a/translations/de.ts b/translations/de.ts index 5abcccc6c..27f4c059e 100644 --- a/translations/de.ts +++ b/translations/de.ts @@ -743,10 +743,6 @@ Alias: Autoaccept files Dateien automatisch annehmen - - Save files in - Speichern unter - PushButton @@ -1260,24 +1256,119 @@ Soll die alte Historiedatei gelöscht werden? Tippen anzeigen - - Keep History (unstable) - Historie behalten (instabil) + + Keep chat history (mostly stable) + Chatverlauf speichern (größtenteils stabil) - - Encryption - Verschlüsselung + + Local file encryption + Lokale Dateien verschlüsseln + + + + + + + + + + All Tox communications over the internet are encrypted, and this cannot be disabled. However, you may optionally password protect your local Tox files. + Die gesamte Tox-Kommunikation über das Internet ist verschlüsselt und kann auch nicht deaktiviert werden. Es ist optional auch möglich, die lokal gespeicherten Tox-Daten mit einem Passwort zu schützen. - - Encrypt Tox datafile + + Encrypt Tox data file Tox Datendatei verschlüsseln - - Encrypt History - Historie verschlüsseln + + Encrypt chat history + Chatverlauf verschlüsseln + + + + + Change password + Passwort ändern + + + + Please set your new chat history password. + Bitte Passwort zum Verschlüsseln des Chatverlaufs setzen. + + + + It appears you have an unused encrypted chat history; if the password matches, it will be added to your current history. + Es scheint als gäbe es einen unverschlüsselten Chatverlauf. Wenn die Passwörter übereinstimmen wird dieser zum aktuellen Chatverlauf hinzugefügt. + + + + Use data file password + Nutze das Tox-Datendatei Passwort + + + + Successfully decrypted old chat history + Alter Chatverlauf erfolgreich entschlüsselt + + + + You have succesfully decrypted the old chat history, and it has been added to your current history and re-encrypted. + Der alte Chatverlauf wurde erfolgreich entschlüsselt, zum aktuellen Chatverlauf hinzugefügt und wieder verschlüsselt. + + + + + + Old encrypted chat history + Alter verschlüsselter Chatverlauf + + + + There is currently an unused encrypted chat history, but the password you just entered doesn't match.\nWould you like to try again?\nCanceling will delete the old history and set the password to what you just entered. + Es gibt aktuell einen ungenutzten verschlüsselten Chatverlauf, aber das eingegebene Passwort stimmt nicht überein.\nMöchten Sie ein anderes probieren?\nWenn Sie abbrechen wird der alte Chatverlauf gelöscht und das soeben eingegebene Passwort verwendet. + + + + This happens when enabling encryption after previously \"Disabling History\" + Dies passiert, wenn die Verschlüsselung nach einem vorherigen Deaktivieren des Chatverlaufs wieder aktiviert wird. + + + + Would you like to decrypt your chat history?\nOtherwise it will be deleted. + Möchten Sie den Chatverlauf entschlüsseln?\nAnsonsten wird dieser gelöscht. + + + + Are you sure you want to lose your entire chat history? + Sind Sie sicher, dass der gesamte Chatverlauf gelöscht werden soll? + + + + Please set your new data file password. + Bitte Passwort zum Verschlüsseln der Datendatei setzen. + + + + Use chat history password + Nutze das Chatverlauf-Passwort + + + + Decrypt your data file + Datendatei entschlüsseln + + + + Would you like to decrypt your data file? + Möchten Sie die Datendatei entschlüsseln? + + + + + The passwords don't match. + Die Passwörter stimmen nicht überein. @@ -1399,14 +1490,24 @@ Es wird beim Neustart von qTox installiert. SetPasswordDialog - - Type Password + + Set your password + Passwort setzen + + + + Type password Passwort eingeben - - Repeat Password - Passworteingabe wiederholen + + Repeat password + Passwort wiederholen + + + + Password strength + Passwortstärke From a1bc56b6f7b3f6b853c6b1cc121e0f0cb416eb6f Mon Sep 17 00:00:00 2001 From: Sascha Brendel Date: Fri, 6 Feb 2015 19:14:59 +0100 Subject: [PATCH 03/10] Added svg-Support --- simple_make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_make.sh b/simple_make.sh index 9f954d7f6..dfedfa57b 100755 --- a/simple_make.sh +++ b/simple_make.sh @@ -2,7 +2,7 @@ if which apt-get; then sudo apt-get install build-essential qt5-qmake qt5-default libopenal-dev libopencv-dev \ - libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev qttools5-dev-tools qtchooser libxss-dev + libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev qttools5-dev-tools qtchooser libxss-dev libqt5svg5* elif which pacman; then sudo pacman -S --needed base-devel qt5 opencv openal opus libvpx libxss elif which yum; then From de6bf6c029a4fa918d1bff76c1e09f36352b3bd5 Mon Sep 17 00:00:00 2001 From: novist Date: Fri, 6 Feb 2015 20:16:01 +0200 Subject: [PATCH 04/10] Fixed busy and invisible taskbar icons Updated other status icons Removed duplicate status icons from ui/statusButton --- img/status/dot_away.png | Bin 367 -> 228 bytes img/status/dot_away_2x.png | Bin 411 -> 375 bytes img/status/dot_away_notification.png | Bin 878 -> 390 bytes img/status/dot_busy.png | Bin 308 -> 237 bytes img/status/dot_busy_2x.png | Bin 947 -> 363 bytes img/status/dot_busy_notification.png | Bin 791 -> 410 bytes img/status/dot_idle.png | Bin 360 -> 231 bytes img/status/dot_idle_2x.png | Bin 376 -> 351 bytes img/status/dot_idle_notification.png | Bin 825 -> 405 bytes img/status/dot_online.png | Bin 277 -> 201 bytes img/status/dot_online_2x.png | Bin 282 -> 278 bytes img/status/dot_online_notification.png | Bin 790 -> 351 bytes img/taskbar/dark/taskbar_busy.svg | 99 +++++++++++++++++------- img/taskbar/dark/taskbar_invisible.svg | 99 +++++++++++++++++------- img/taskbar/light/taskbar_busy.svg | 86 ++++++++++++++++---- img/taskbar/light/taskbar_invisible.svg | 60 ++++++++++---- res.qrc | 4 - src/mainwindow.ui | 6 +- src/widget/widget.cpp | 36 ++++----- ui/statusButton/dot_away.png | Bin 345 -> 0 bytes ui/statusButton/dot_busy.png | Bin 292 -> 0 bytes ui/statusButton/dot_idle.png | Bin 333 -> 0 bytes ui/statusButton/dot_online.png | Bin 259 -> 0 bytes ui/statusButton/statusButton.css | 20 ----- 24 files changed, 283 insertions(+), 127 deletions(-) delete mode 100644 ui/statusButton/dot_away.png delete mode 100644 ui/statusButton/dot_busy.png delete mode 100644 ui/statusButton/dot_idle.png delete mode 100644 ui/statusButton/dot_online.png diff --git a/img/status/dot_away.png b/img/status/dot_away.png index e65e372229c52c98cec2fc5be10824d378090f25..f83fcfb1bd24d4b5507930de0263e51ab05cf381 100644 GIT binary patch literal 228 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3C;>jEeFh6*JCe}lU_{xK_u zT&z?`Wth5$AvA;GD$675O%A?B4V(=n&Zf;GZ`)6a8ZfcmbM_5r(R3=}^Y~aRFq<>Y zW|xvcLzgVW%ETlE9+m{PrV>eqwTTCkOm9r~xuC#cEfZ-tDc#|V%cAD?i8mP7ISd#i X)2$YZAGFs7x`@Hk)z4*}Q$iB}t>j56 literal 367 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^_!3HE-Zss2cQfx`y?k)`fL2$v|<&%LToCO|{ z#Xud`L734=V|E2lkiEpy*OmPqo3x;)oXxWbAAv%DJY5_^G|rb!+U?aGDA2Os()CLw z3-{z3(gH32kGRDU-}SKl@vi)GYn1t*wnu zcggc4#~i!oFpJS(539xcWhK6Bj0q7U?FV!x<;ZjQHGN6Uus?R=6sM_9m+BJh2TP`1 zx))z0@Oak)r%PE|Z|{{XUHx3v IIVCg!01hpX9RL6T diff --git a/img/status/dot_away_2x.png b/img/status/dot_away_2x.png index 66054bf36f50e9368624dde303fa7a16a6bbef3c..c5e4d81c20f5d7c1622cf836ef829a1e94aa78d4 100644 GIT binary patch delta 311 zcmV-70m%NF1NQ=uNq-qhL_t(|+O(D54T3Nb#!KS>jDQ>9gYP&2aRZqEnSc?532*~t z0(tj^4P=Cl;Me3J_0sY$_$8Od_U@M}*E>C7(K|i|SW;L73)yiCYhdNEesnz6V;~<( z4!eqZDge!_K!Uw28BIxNd;(Yvz!BITR>Kti)_yVU;)3pIBY$Tw?U2BswPf@}0wvbU zhzW_2c~pRp>k2M8Znc+GO;gDfOpAOHww+3P8pAhpT+;<@={xs|Bulv#%Voxdk{zlQ zz@L~cfMN_7tYG*YXci$}0W@P;NsZp?g7-DM^~l%knnnXl=2y|96*C@o#kNaHBd9P- zuRCBYQ##{aqA({_L_t(|+N@O3al$YRjXgm|pd0Yh|1tq#0>}iR6SSECGC?~+ zIsyLYhYjixJOWQwrKb}j*uB0xoqe(Oq9@66m4WlRSzzg4FR-OLj<69nJb#T*`#OW{ z9m`vlha;>9ak?P{QH|wfMDz$3*lHs6;y{zpg&y{V%Z`lpuzy#UJ%M~q9MDgMhD^#) zE2S8z`M|Q1KDfVeT!3$VkfYTgU3spil-cGc4?k{|{H^EKm@v%Ayn|ls8?OrSS(RfH z``RlBv6PJ!{rdUpe~?Tv59>A)_568s0fMWdB3k+afh*_ru&W@kTnmaN~mrq%W? zdrd;4>}&fyoV_!5z!zZ$xxk2>@S6v`Sq}ND6$?nGsi(vmrhJKFirD z`5^1@WdKfAS@t1o!BjbSHs(>_TIUPx&a|6x4xDSi)=9TvV7B&FndBu=gfs0M_=nie zfU>KsFJPLKY@nXXE7%s_HL;%gSbkZ!JH}~G9-NTafCC*ZLoTwvt>E_H3H-E6Dx?C7 zT9~=QN-zQ{d8%b#p2Q8&_7j>|hW+$2MkPkjDkNSc71GfO$%b7;B{oR8rM0yUK$2JgQ=wY~Pisbt;VVA9eVrkN{W=LUU1GU0ds%VSV)-TQX?65Gp*!TGGK0jXG ze@0W3v)K;S>mOk@=)fz2R^YLu1vB%WuC87iD3vz0dhCAy*Bu7Nfi}$MOsWXhfDX(K zBlQ4x2*VFk#p2J;LCUWC6>tuiv@krIEEX4l^8IW7K`QC=8JS%H zF5QjA&YjBV>*Z|r0Map}U6|c=!q7|j{_m5y+>Uq%<9aN%2Uw2;!2>h9>R{G`Gz%a&0X$fY#lB^m*sRyT0a~3}ZJpxpuPD-63D;ys{yI+ttR4)VBG z+Y6Xuw%Cw%1IrHZD~|IPfFn%+5hn;PHUk7^(&xZ(t)-$>L!p8@eL#VjFxlJfohbUNJ~F`Gl0O8NfKzZ;v$9Fg>+nN2>c)!sXF z;w)Ed;kCd07*qoM6N<$ Ef_uQAsQ>@~ diff --git a/img/status/dot_busy.png b/img/status/dot_busy.png index 316bbdb1d7a0a2e643e23d9430c946c1c681d134..c73b469cdf112a46531089ef06b26b117c9f938a 100644 GIT binary patch literal 237 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3Ci2YU45_%4l)}(-`ClWG!zzZ3&y5mC*c$mAYy>;hXXM5F zZxmeh!DfO{gI8RGmPtbv(?{8v4P8Q%SS9(!Q!PV)<3Yd{c`fsaFCHYi i6eTn7V_@enU|6H#x@(S7*h-+&7(8A5T-G@yGywqI?onz0 literal 308 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^_!3HE-Zss2cQfx`y?k)^F82lLgjHZ};2a0eO zctjQhbzBEwMkkHg6+l7u5>H=O_IvEif_lQ&G*q_$g${bUIEHAP@4aZ~sA9ZuI5M94ZW=gPu+IO-Bxjg_hkIJGxo-3 zOt@mtv0EHl(6X;^u2P!T7S~yiIIVXa=H2%3!qb{S;n{l6Yxg`5TCSNCIBToLamhB# zM}?J-IG@#W1|8vFR&jjCwpViZeg*meJE~nay*N6<;APRgh_j2#K3=Zcm-Xl>+oS!n z%v^1zcdvV7=6Wam{|u#L7DwFm&5s9mNnG9am+`is~07lRa>Vxkv0dWJE0GWWe0ZgD97$%T+U)VrLUuDEIt0#mYty8 zG%fdl@d^q-N8{5oN0}~ILVea23+B}Nz^D>4MhX@`c)~_8!gaW2!bZk{(E?b+f#xQp z3o=VhKS38=TS?{v!^b7NHJt)B%ujk8@(WvT1dX72>e5>>3lTT!4f5s=;>KF9OdA?lFsK*tRDPpUXa? zls=xAot=E3t$&RtMn=d1cCKGfDbF9R+Pi?aBo)#k&n4hjz^)5CX6Q5w00WNL*jXs- zo0^+D4b%yjwY22(5j%n1f`Wh~T?4)Z&IqnA5Oy0L4|ocDT>v5N!gevG3%h%JZ>dr) z(^V|?+x}2edxGgC9n7+9&o8%boemoT0s=@tcU#+ruz%mE+AoKFFLoGSyIHLc=gSL) z^%1cRsa*il0ZH%uIWu$i`O#7Cgk$~v=eml;cLi0!n>9$bUueto%gOdYz%vWcz9ebr z`^m|(TMr%L-|+0=!(5n{xSU{*;mkt9o_54Q3fLTWPuPDMDwDIb=U*8cg|D%XW)gRcQkH>Tv3=Y&0c&zYd)Oeg2RvNLvQ?FG`6mJQ zwYC-olIkk9ZSZ`pHa{^t8-@@hm%lJH`A zhixD_i^W>aZV7vZ?T-2~H*?^(rVc0>RxPL@iGQ&F@yy0vG-kWLRxhpJbKuHt^*SqB zJb;$AUK4>E_M+&IxukD^je-qLH)SDccT7g}xrQzH0qImO_|))_8-xoaUgCTgs3fV9 zW@@#of=Yt%=I2B`0slEzyx|4GCv&yh`Lu0xl=+CS1jCZPOG^WP2jXT?+1CUg&D&$A zZ-3mV|2A1lNE(qHz^j5y0@aqpi6u!&a8A;}l+ykb!P_TJkO8b&wv4V)X)2RW@GnVrhx02bV?~5v3+H0PY)Uz0^s=e?H2qEjO^l{YXjx*00000NkvXXu0mjfhX}Hu diff --git a/img/status/dot_busy_notification.png b/img/status/dot_busy_notification.png index 4a2bde641624b056eedcb41265de631b4e7f66cc..94b1e85f2d7b390ddc81de11e0b857798b6d161b 100644 GIT binary patch literal 410 zcmV;L0cHM)P)&-!EqG;6#x}PQ~>{bkPe`Pl)y|hKCLYC;w+7vwRdJWyX(XS>-Vdwv8{m5 z;OYvT7U%wG4--S2Ve5fhM*}eGI}6S$2tED;M83(9ks9w11UM)&3K#VG(0wm5)9ZjW z2(8YX2zy2bwm>aTk?5bPe1&2O`=)e9rR!v8vP+SfNt3EzTph?8In!}YK}CHSp*4xJ z+f+&eoJndGxr9AJkWnv2ly|M_Lpx8+Kl*A9FUY0#Om|aOsf(-_nWBMPW(91u^B7s8 zQ*k9WaoB~6>QDen;M)vLtQJ3N_nkh>;3UEp&KuLZX)+byZZg`b?Oc05iN5zoh%{;+lkXY=(PhzD}t~IiqvT>2O;zzmqzsK~>bAAdi0Of(4;ZVVL=l}o!07*qoM6N<$ Ef)u5#l>h($ literal 791 zcmV+y1L*vTP)C z6hcUwq=nEb3}z^l_q{K*7#N}?j2I|zQ4B<+=D_%=A92rV^G(^zP|xn%d(OkdxzBTj zb-0#gqpeo!4NvJfs{1k9is~w6OTc_`zx+zmJbZLU9xdv!>|pjDupPLL>Nl9(14e

mRDEvts%(H zfr0lin*v(EJzxlU;O^(jrkSnF@^Q>=0DmlZyN5N1bb#%i()7v2McX+rFzYFuk`OKc zyNVcxfjz*dBJysX=Tk*ht)O}acxLb5;7d}MQG`1U3{`2=_k z)qN5|&r`aM*(Jqn+}*zgaQ6wodnuh~bG!o#drC!q_38uQ2jD;p)e%x!0T7YhsNUZK zXX`xQz#t)rr{p5C8vwJrsE)KSyCot|^p*T7X4`-_H7uGuFzfU!Feg=(Z4r?lfrk>p zbGN$P`|EtNhJSpL=VSd?EEHAss+LXDbN3D~<|%!)Yj}8DQB^aj?gyrTw@{q~_LWUD z8{6%1;B(+lVESL#sj}>Zgm4M7-%&j+AzbM{f4NtU=qlmzFem6RtIr7}3ChyGR45_%4l+w_&`S)C@h7daeZiiMohL0`^^Ag_dc+adH za&*NjQz--Pm zn_Wr*4PCMfD;a10nBT~8faNQL;)g~~DVCN4E?*uTWIM3%AWP{M#R*w1#mCrJNLZX; cVB%q5n`Zo^>5tPapraT(UHx3vIVCg!0H8Nc^#A|> literal 360 zcmeAS@N?(olHy`uVBq!ia0vp^d_c^_!3HE-Zss2cQfx`y?k)`fL2$v|<&%LToCO|{ z#Xud`L734=V|E2lkiEpy*OmPqo3x;)!0ouR-+)42JzX3_G|sn9+~{?!Gf>r>~@L5oDJdS|MHy9Y(Bxfy7~OAV-ZrxZNDPFWNi?! zx<4c0YEPSw{$-(t7Rf5MYu-C;diOP^rWy0hjh|uF_jN}1ucfPJSt*V=ccu-~ zUCCRiH+iAaRG1vSC9#i35XL&C(sdO z0dWD7ZXhGDf!-wtskIfw`^lxDy?eR#+9OgP-J10Rha4?Ii=AbIc16>x^wPSqkpr6J zP@?VBcd8Itc!3OSJQi2DghXEp0+Q_{?D^CeH#Po8Ko1UhGX9w lEI;~#NQ0I71sFU97ywspT$YTf_Wu9?002ovPDHLkV1g1rdguTE delta 312 zcmV-80muH|0{8-uNq-tiL_t(|+N@N83BoWCOdkhu1l>TKz=8wl1lkG23A7uS3G4_R zKrjYIXDtX{*uf8CoutB+)tL-_V42%#Z{bKpk5P=RS9N@~Fu;|)1D#^!{{b1)Oz4SzW1EEjs-FkqA4DAQH~ zPjkeu)-l+>Oe6tUwNPLoYvVN_nv!Hw+uXK&JULj~Uy+nX1N+V92jptLATJSx>5fv( zhvZqPyQ+z!SKPpRIX8f$OX&ar0>(*1 zK~y-)eUwjVTvZgtf9JiICe_rMjx7?3AY`Z%|IMTo3C85jn;qsYFlF$)uw_sN z7yz=sEjb#U-wvg0YyR0U~BDk|)Jq9DWuzY?)q*f^&mGlYH z*_-p3_1=d>62%#8P^lfq~&tSlOwG|1Hkt`w}6M3aJ!d{{m>8;AQ+^Xi~e z`7nN`^-ZRe=u_Y|kMyxdd$ZYb=Ye^NbDkiJ^aH>e-Y_7y{NO3JAdq{{V24xiQeWTI zhRLoQ>umUBIvMOS{3(OUTv&e90IKm& zgt<#V5(LfHpYFf1@PCf2T^`EHrJsX6Vx$LiVdd7w?o{LA8+ba0_#M-U)oqQ7eSKFO z>-qYnmv=SW|2Zn`q(Rf1hI3K;?WQfBPKwW)>0?A5_#3zmEDJIQPXU3!7jhcSNAWLP zegyz3mAu*hZ;H;hL&BagX_vuoLNnlx=fkh3T5J9V|F}oqA&}@g00000NkvXXu0mjf D7&d=} diff --git a/img/status/dot_online.png b/img/status/dot_online.png index 51671a2cfd5b9287a43c18d9f3a9402643627fb7..1e5f40af916a22aa6ab0cc917757f4e0d4124d96 100644 GIT binary patch literal 201 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4NtU=qlmzFem6RtIr7}3C2~BK_iUt#3 vJYd`{D6yc;VU^%nN%;jyeG3@aISd#!%gB6Ka5wiT&{_shS3j3^P6K57@&IV!7hYGzK<6c>s%)Mhe670<0JV8wf3W9LY5F0#q-J3s`DZ0RRC80Lf%+0& zE7R#1#5Eob;M3Iu1K&N%zlG3q6d<`{pkzvPfR*6J%0xJjm=(_(k}Eh91ZO}>pCX}@ z%s>vrB2)U=(YQs5ziF3CNzi+ZZ&EoFZs z-gk{VD&x*m=CPsgCcEl48+0<)$~=5S#uY|^MVeUiAcu0s=BSA=796`+sW(y2eq1C@ x#9pMrSR|QT@M)Eg9P8{VFY`0~^EE{Xgb{9{$gC(V%fIq>?rC9EOi{hNbGYZ>oEP3Jr0LkL@?5Xu zIjkbPQPu!ipc5bih+G-7sjhe+KK<*A{94qw2g53I3Rns}Qssfbq>AJU>Id?HK@knb z{GC0&K_bb}Y0z50HP%zrRN6L>zGbZ&+-`*yV6BRToBi!wKOm80@DOlbpyloGL~UYU zB30#v3&q%-V#!j`PmagwK3&}QtkSJq;x*HkPy$wsza?s0TKWC5K8Sk_`3&nP;|j6hx901z;ZVcTL#LnN^ORowKvqA4RpzEI2L? zzx%w4e=FNeWt21(C8iLbs>nJ6_!K+3;IicX2ju5FxDwYUjQmrjzl*k zW;0SVVZgy?x3OOrUjzol=-IlyV0N>=qY})|0uvwYc?jja!i;;we_OE3BHAA1_eyOP_G4&%i_d?6;9EVV?2WC`sPqV-C-ftIp2>^We|!a4d> zkx7AEU=!c~*XC1l{9IZ4t3Q4P08x#akvl`%jj~%{y}~l!J)-@_%9W--$D{O_ZwCny UW%A)36#xJL07*qoM6N<$g17EwBme*a diff --git a/img/taskbar/dark/taskbar_busy.svg b/img/taskbar/dark/taskbar_busy.svg index 042811085..1be7d6cdf 100644 --- a/img/taskbar/dark/taskbar_busy.svg +++ b/img/taskbar/dark/taskbar_busy.svg @@ -1,27 +1,72 @@ - - - - - - - - - - - - - - + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/img/taskbar/dark/taskbar_invisible.svg b/img/taskbar/dark/taskbar_invisible.svg index 129394a60..5e8760159 100644 --- a/img/taskbar/dark/taskbar_invisible.svg +++ b/img/taskbar/dark/taskbar_invisible.svg @@ -1,28 +1,71 @@ - - - - - - - - - - - - - - + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/img/taskbar/light/taskbar_busy.svg b/img/taskbar/light/taskbar_busy.svg index 90111bf5c..652d24062 100644 --- a/img/taskbar/light/taskbar_busy.svg +++ b/img/taskbar/light/taskbar_busy.svg @@ -1,14 +1,72 @@ - - - - - - - - - + + + + + + + image/svg+xml + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/img/taskbar/light/taskbar_invisible.svg b/img/taskbar/light/taskbar_invisible.svg index ed1974200..f562bef36 100644 --- a/img/taskbar/light/taskbar_invisible.svg +++ b/img/taskbar/light/taskbar_invisible.svg @@ -1,14 +1,46 @@ - - - - - - - - - + + + + + + + image/svg+xml + + + + + + + + + + \ No newline at end of file diff --git a/res.qrc b/res.qrc index b59b86b2a..d810ed819 100644 --- a/res.qrc +++ b/res.qrc @@ -201,10 +201,6 @@ ui/sendButton/sendButtonPressed.png ui/settings/mainContent.css ui/settings/mainHead.css - ui/statusButton/dot_away.png - ui/statusButton/dot_busy.png - ui/statusButton/dot_idle.png - ui/statusButton/dot_online.png ui/statusButton/menu_indicator.png ui/statusButton/statusButton.css ui/stopFileButton/default.png diff --git a/src/mainwindow.ui b/src/mainwindow.ui index ed58ca986..f2f289e1b 100644 --- a/src/mainwindow.ui +++ b/src/mainwindow.ui @@ -980,6 +980,10 @@ QSplitter:handle{ + + + :/img/status/dot_away.png:/img/status/dot_away.png + 10 @@ -1775,7 +1779,7 @@ QSplitter:handle{ 0 0 775 - 21 + 20 diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index f6cd0ab6f..f9c5ef5e5 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -94,21 +94,22 @@ void Widget::init() restoreState(Settings::getInstance().getWindowState()); ui->mainSplitter->restoreState(Settings::getInstance().getSplitterState()); + statusOnline = new QAction(tr("Online", "Button to set your status to 'Online'"), this); + statusOnline->setIcon(QIcon(":img/status/dot_online.png")); + connect(statusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline())); + statusAway = new QAction(tr("Away", "Button to set your status to 'Away'"), this); + statusAway->setIcon(QIcon(":img/status/dot_idle.png")); + connect(statusAway, SIGNAL(triggered()), this, SLOT(setStatusAway())); + statusBusy = new QAction(tr("Busy", "Button to set your status to 'Busy'"), this); + statusBusy->setIcon(QIcon(":img/status/dot_busy.png")); + connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy())); + if (QSystemTrayIcon::isSystemTrayAvailable()) { icon = new SystemTrayIcon; updateTrayIcon(); trayMenu = new QMenu; - statusOnline = new QAction(tr("Online"), this); - statusOnline->setIcon(QIcon(":ui/statusButton/dot_online.png")); - connect(statusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline())); - statusAway = new QAction(tr("Away"), this); - statusAway->setIcon(QIcon(":ui/statusButton/dot_idle.png")); - connect(statusAway, SIGNAL(triggered()), this, SLOT(setStatusAway())); - statusBusy = new QAction(tr("Busy"), this); - statusBusy->setIcon(QIcon(":ui/statusButton/dot_busy.png")); - connect(statusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy())); actionQuit = new QAction(tr("&Quit"), this); connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit())); @@ -184,12 +185,9 @@ void Widget::init() ui->statusPanel->setStyleSheet(Style::getStylesheet(":/ui/window/statusPanel.css")); QMenu *statusButtonMenu = new QMenu(ui->statusButton); - QAction* setStatusOnline = statusButtonMenu->addAction(Widget::tr("Online","Button to set your status to 'Online'")); - setStatusOnline->setIcon(QIcon(":ui/statusButton/dot_online.png")); - QAction* setStatusAway = statusButtonMenu->addAction(Widget::tr("Away","Button to set your status to 'Away'")); - setStatusAway->setIcon(QIcon(":ui/statusButton/dot_idle.png")); - QAction* setStatusBusy = statusButtonMenu->addAction(Widget::tr("Busy","Button to set your status to 'Busy'")); - setStatusBusy->setIcon(QIcon(":ui/statusButton/dot_busy.png")); + statusButtonMenu->addAction(statusOnline); + statusButtonMenu->addAction(statusAway); + statusButtonMenu->addAction(statusBusy); ui->statusButton->setMenu(statusButtonMenu); // disable proportional scaling @@ -221,9 +219,6 @@ void Widget::init() connect(ui->statusLabel, SIGNAL(textChanged(QString, QString)), this, SLOT(onStatusMessageChanged(QString, QString))); connect(ui->mainSplitter, &QSplitter::splitterMoved, this, &Widget::onSplitterMoved); connect(profilePicture, SIGNAL(clicked()), this, SLOT(onAvatarClicked())); - connect(setStatusOnline, SIGNAL(triggered()), this, SLOT(setStatusOnline())); - connect(setStatusAway, SIGNAL(triggered()), this, SLOT(setStatusAway())); - connect(setStatusBusy, SIGNAL(triggered()), this, SLOT(setStatusBusy())); connect(addFriendForm, SIGNAL(friendRequested(QString, QString)), this, SIGNAL(friendRequested(QString, QString))); connect(timer, &QTimer::timeout, this, &Widget::onUserAwayCheck); connect(timer, &QTimer::timeout, this, &Widget::onEventIconTick); @@ -443,19 +438,22 @@ void Widget::onStatusSet(Status status) { case Status::Online: ui->statusButton->setProperty("status" ,"online"); + ui->statusButton->setIcon(QIcon(":img/status/dot_online.png")); break; case Status::Away: ui->statusButton->setProperty("status" ,"away"); + ui->statusButton->setIcon(QIcon(":img/status/dot_idle.png")); break; case Status::Busy: ui->statusButton->setProperty("status" ,"busy"); + ui->statusButton->setIcon(QIcon(":img/status/dot_busy.png")); break; case Status::Offline: ui->statusButton->setProperty("status" ,"offline"); + ui->statusButton->setIcon(QIcon(":img/status/dot_away.png")); break; } updateTrayIcon(); - Style::repolish(ui->statusButton); } void Widget::setWindowTitle(const QString& title) diff --git a/ui/statusButton/dot_away.png b/ui/statusButton/dot_away.png deleted file mode 100644 index 0a55cf1faa379daac8a4ff0e45c016715005d69f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 345 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u_bxCyDx`7I;J! z19e;nVMZs7*%d%R_7YEDSN41CtU}Tj|2zI42MRs&ba4!kxLkT+uU>PaOxwrT|M;I~ zsIW!tHlOHmZ@HMCW0HV;XXB3uovkJka~zj;R!C*`9NQY7hPcmB!DV>m-+M zQQa|Vi=fLJrCxif-ek2cMf=#=+WsDhJFqYQ{rCMd4jCMo$M4W2`A_hY&VmDVh9Ydf z+}YKv72HeoHkjmX?^k=QwN&=trlso`+)^tQGyOlLR2*3+8hAsmVRqWN*}sfs_!`t2 kmR#Sp&U)>^1?(Sq+Yg3uls^6t0Q50~r>mdKI;Vst01iBc5dZ)H diff --git a/ui/statusButton/dot_busy.png b/ui/statusButton/dot_busy.png deleted file mode 100644 index 6813c1cc9dfc93dbcb9c6bf43e11e051880fc183..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 292 zcmeAS@N?(olHy`uVBq!ia0vp^AT}2V8<6ZZI=>f4u_bxCyDx`7I;J! z19e;nVMZs7*%d%R_7YEDSN41CtU@v}J*Rpv0);kux;TbNT<$%u>vbehqV?nb|4j)3 zg{p^GVh^)EWcA&}JloZvQ_taW!@-SGCYpOR?in3T3-HN1Vw17+kiw6TM-CT1nB%zI zH7ALGwQbem$g_LeE-h8QlOQQ>ahz#g)Dcb|-6ZC6i=&Qb=X@a`E?# jLzm}#Xqr1~C-?kS_e~e~&Ry~c=y(QCS3j3^P6Vf4u_bxCyDx`7I;J! z19e;nVMZs7*%d%R_7YEDSN41CtU@wE*+mPk0flaPx;TbNTy8zH-pjd=;poTrKN}MS zB&!7uYD=Y-Ur)Pa@P#)=?4ZdW{s)H+EC_3ETHtDU*FMAO%{|r2^BfjeTCf4u_bxCyDx`7I;J! z19e;nVMZs7*%d%R_7YEDSN41CtU@yEZ0lWYfkG2JT^vIsF85xr<~kH0((IqAVKH(@(P&)~=Y&tA-3_w%${z%uiy y%+PK78?P~M4Hfn)|0-kmdeL&{yD9D32l#JC>KRP^yGaG;HU>{uKbLh*2~7a7xL Date: Fri, 6 Feb 2015 19:18:51 +0100 Subject: [PATCH 05/10] removed whitespace --- translations/de.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/translations/de.ts b/translations/de.ts index 27f4c059e..4c79112ab 100644 --- a/translations/de.ts +++ b/translations/de.ts @@ -1265,12 +1265,6 @@ Soll die alte Historiedatei gelöscht werden? Local file encryption Lokale Dateien verschlüsseln - - - - - - All Tox communications over the internet are encrypted, and this cannot be disabled. However, you may optionally password protect your local Tox files. From a98c4191ec2561d9eb69e7dac2d796b1e16f1bb5 Mon Sep 17 00:00:00 2001 From: Sascha Brendel Date: Fri, 6 Feb 2015 19:39:13 +0100 Subject: [PATCH 06/10] Added pacman qt5-svg support. --- simple_make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_make.sh b/simple_make.sh index dfedfa57b..4d3b527e2 100755 --- a/simple_make.sh +++ b/simple_make.sh @@ -4,7 +4,7 @@ if which apt-get; then sudo apt-get install build-essential qt5-qmake qt5-default libopenal-dev libopencv-dev \ libtool autotools-dev automake checkinstall check libopus-dev libvpx-dev qttools5-dev-tools qtchooser libxss-dev libqt5svg5* elif which pacman; then - sudo pacman -S --needed base-devel qt5 opencv openal opus libvpx libxss + sudo pacman -S --needed base-devel qt5 opencv openal opus libvpx libxss qt5-svg elif which yum; then sudo yum groupinstall "Development Tools" sudo yum install qt-devel qt-doc qt-creator opencv-devel openal-soft-devel libtool autoconf automake check check-devel libXScrnSaver-devel From 7f8f0cb8b28531a24c89199610debd19a2cd8cf5 Mon Sep 17 00:00:00 2001 From: Sascha Brendel Date: Fri, 6 Feb 2015 19:45:19 +0100 Subject: [PATCH 07/10] Added yum qt5-qtsvg support. --- simple_make.sh | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/simple_make.sh b/simple_make.sh index 4d3b527e2..8557f6d81 100755 --- a/simple_make.sh +++ b/simple_make.sh @@ -7,7 +7,7 @@ elif which pacman; then sudo pacman -S --needed base-devel qt5 opencv openal opus libvpx libxss qt5-svg elif which yum; then sudo yum groupinstall "Development Tools" - sudo yum install qt-devel qt-doc qt-creator opencv-devel openal-soft-devel libtool autoconf automake check check-devel libXScrnSaver-devel + sudo yum install qt-devel qt-doc qt-creator opencv-devel openal-soft-devel libtool autoconf automake check check-devel libXScrnSaver-devel qt5-qtsvg else echo "Unknown package manager, attempting to compile anyways" fi From dedf9c3c92f560868f94279af69ca65c76095b82 Mon Sep 17 00:00:00 2001 From: Zetok Zalbavar Date: Fri, 6 Feb 2015 18:07:25 +0000 Subject: [PATCH 08/10] Change warning message to less confusing one Previous message without context causes confusion about security of Tox --- src/toxdns.cpp | 12 ++++++++---- 1 file changed, 8 insertions(+), 4 deletions(-) diff --git a/src/toxdns.cpp b/src/toxdns.cpp index 7364f180a..11cd1670f 100644 --- a/src/toxdns.cpp +++ b/src/toxdns.cpp @@ -220,8 +220,10 @@ fallbackOnTox1: #if TOX1_SILENT_FALLBACK toxIdStr = queryTox1(record, silent); #elif TOX1_ASK_FALLBACK - QMessageBox::StandardButton btn = QMessageBox::warning(nullptr, "qTox", tr("It appears that qTox has to use the old tox1 protocol.\n\ -Unfortunately tox1 is not secure. Should it be used anyway?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::No); + QMessageBox::StandardButton btn = QMessageBox::warning(nullptr, "qTox", tr("It appears that qTox has to use the old tox1 protocol to access DNS record of your friend's Tox ID.\n\ +Unfortunately tox1 is not secure, and you are at risk of someone hijacking what is sent between you and ToxDNS service.\n\ +Should tox1 be used anyway?\n\ +If unsure, press “No”, so that request to ToxDNS service will not be made using unsecure protocol."), QMessageBox::Yes|QMessageBox::No, QMessageBox::No); if (btn == QMessageBox::Yes) queryTox1(record, silent); #endif @@ -264,8 +266,10 @@ ToxID ToxDNS::resolveToxAddress(const QString &address, bool silent) #if TOX1_SILENT_FALLBACK toxId = ToxID::fromString(queryTox1(address, silent)); #elif TOX1_ASK_FALLBACK - QMessageBox::StandardButton btn = QMessageBox::warning(nullptr, "qTox", tr("It appears that qTox has to use the old tox1 protocol.\n\ -Unfortunately tox1 is not secure. Should it be used anyway?"), QMessageBox::Ok|QMessageBox::No, QMessageBox::No); + QMessageBox::StandardButton btn = QMessageBox::warning(nullptr, "qTox", tr("It appears that qTox has to use the old tox1 protocol to access DNS record of your friend's Tox ID.\n\ +Unfortunately tox1 is not secure, and you are at risk of someone hijacking what is sent between you and ToxDNS service.\n\ +Should tox1 be used anyway?\n\ +If unsure, press “No”, so that request to ToxDNS service will not be made using unsecure protocol."), QMessageBox::Ok|QMessageBox::No, QMessageBox::No); if (btn == QMessageBox::Ok) toxId = ToxID::fromString(queryTox1(address, silent)); #else From fd8c20617bcf151a48757e16a7fa5e12b7fe8b86 Mon Sep 17 00:00:00 2001 From: "Tux3 / Mlkj / !Lev.uXFMLA" Date: Fri, 6 Feb 2015 21:13:35 +0100 Subject: [PATCH 09/10] Fix screenshot in README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index a99c8f526..e1306c576 100644 --- a/README.md +++ b/README.md @@ -29,7 +29,7 @@ This client runs on Windows, Linux and Mac natively.

Screenshots

Note: The screenshots may not always be up to date, but they should give a good idea of the general look and features
- + ##Documentation: From f6660f7d00128abf85f57caaf83b6374ac2abae6 Mon Sep 17 00:00:00 2001 From: Dubslow Date: Fri, 6 Feb 2015 14:27:05 -0600 Subject: [PATCH 10/10] Fix newlines in German translation --- translations/de.ts | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/translations/de.ts b/translations/de.ts index 4c79112ab..6f7fe4467 100644 --- a/translations/de.ts +++ b/translations/de.ts @@ -1320,8 +1320,12 @@ Soll die alte Historiedatei gelöscht werden?
- There is currently an unused encrypted chat history, but the password you just entered doesn't match.\nWould you like to try again?\nCanceling will delete the old history and set the password to what you just entered. - Es gibt aktuell einen ungenutzten verschlüsselten Chatverlauf, aber das eingegebene Passwort stimmt nicht überein.\nMöchten Sie ein anderes probieren?\nWenn Sie abbrechen wird der alte Chatverlauf gelöscht und das soeben eingegebene Passwort verwendet. + There is currently an unused encrypted chat history, but the password you just entered doesn't match. +Would you like to try again? +Canceling will delete the old history and set the password to what you just entered. + Es gibt aktuell einen ungenutzten verschlüsselten Chatverlauf, aber das eingegebene Passwort stimmt nicht überein. +Möchten Sie ein anderes probieren? +Wenn Sie abbrechen wird der alte Chatverlauf gelöscht und das soeben eingegebene Passwort verwendet. @@ -1330,8 +1334,10 @@ Soll die alte Historiedatei gelöscht werden? - Would you like to decrypt your chat history?\nOtherwise it will be deleted. - Möchten Sie den Chatverlauf entschlüsseln?\nAnsonsten wird dieser gelöscht. + Would you like to decrypt your chat history? +Otherwise it will be deleted. + Möchten Sie den Chatverlauf entschlüsseln? +Ansonsten wird dieser gelöscht.