From f825985856f68d01a1ccac1eed80676e1622a5be Mon Sep 17 00:00:00 2001 From: TheSpiritXIII Date: Thu, 2 Jul 2015 14:38:18 -0400 Subject: [PATCH] Multi-window: Translate all dialogs correctly, don't allow remove friend on dialogs --- src/widget/contentdialog.cpp | 10 ++++ src/widget/contentdialog.h | 2 + src/widget/form/settings/generalsettings.ui | 4 +- src/widget/friendwidget.cpp | 5 +- src/widget/widget.cpp | 66 ++++++++++++++++----- src/widget/widget.h | 12 +++- 6 files changed, 81 insertions(+), 18 deletions(-) diff --git a/src/widget/contentdialog.cpp b/src/widget/contentdialog.cpp index f82172cbc..a3f46f89c 100644 --- a/src/widget/contentdialog.cpp +++ b/src/widget/contentdialog.cpp @@ -33,6 +33,7 @@ #include "src/core/core.h" #include "src/widget/friendlistlayout.h" #include "src/widget/form/settingswidget.h" +#include "src/widget/translator.h" #include #include #include @@ -120,6 +121,8 @@ ContentDialog::ContentDialog(SettingsWidget* settingsWidget, QWidget* parent) new QShortcut(Qt::CTRL + Qt::Key_PageDown, this, SLOT(nextContact())); connect(Core::getInstance(), &Core::usernameSet, this, &ContentDialog::updateTitleUsername); + + Translator::registerHandler(std::bind(&ContentDialog::retranslateUi, this), this); } ContentDialog::~ContentDialog() @@ -150,6 +153,8 @@ ContentDialog::~ContentDialog() } ++groupIt; } + + Translator::unregister(this); } FriendWidget* ContentDialog::addFriend(int friendId, QString id) @@ -573,6 +578,11 @@ void ContentDialog::onGroupchatPositionChanged(bool top) friendLayout->insertLayout(1, groupLayout.getLayout()); } +void ContentDialog::retranslateUi() +{ + updateTitleUsername(Core::getInstance()->getUsername()); +} + void ContentDialog::saveDialogGeometry() { Settings::getInstance().setDialogGeometry(saveGeometry()); diff --git a/src/widget/contentdialog.h b/src/widget/contentdialog.h index 9689bd7bb..ab360ecc8 100644 --- a/src/widget/contentdialog.h +++ b/src/widget/contentdialog.h @@ -26,6 +26,7 @@ #include "src/widget/genericchatitemlayout.h" template class QHash; +template class QSet; class QSplitter; class QVBoxLayout; @@ -86,6 +87,7 @@ private slots: void onGroupchatPositionChanged(bool top); private: + void retranslateUi(); void saveDialogGeometry(); void saveSplitterState(); QLayout* nextLayout(QLayout* layout, bool forward) const; diff --git a/src/widget/form/settings/generalsettings.ui b/src/widget/form/settings/generalsettings.ui index d99510599..8cc7b04f0 100644 --- a/src/widget/form/settings/generalsettings.ui +++ b/src/widget/form/settings/generalsettings.ui @@ -40,7 +40,7 @@ 0 0 639 - 1221 + 1388 @@ -387,7 +387,7 @@ instead of system taskbar. false - Don't group chat wndows. + Don't group chat windows. diff --git a/src/widget/friendwidget.cpp b/src/widget/friendwidget.cpp index f7ec9515d..9cc13ea64 100644 --- a/src/widget/friendwidget.cpp +++ b/src/widget/friendwidget.cpp @@ -147,7 +147,10 @@ void FriendWidget::contextMenuEvent(QContextMenuEvent * event) autoAccept->setChecked(!dir.isEmpty()); menu.addSeparator(); - QAction* removeFriendAction = menu.addAction(tr("Remove friend", "Menu to remove the friend from our friendlist")); + QAction* removeFriendAction = nullptr; + + if (contentDialog == nullptr || !contentDialog->hasFriendWidget(friendId, this)) + removeFriendAction = menu.addAction(tr("Remove friend", "Menu to remove the friend from our friendlist")); QAction* selectedItem = menu.exec(pos); diff --git a/src/widget/widget.cpp b/src/widget/widget.cpp index f9f843cb9..fe79f3968 100644 --- a/src/widget/widget.cpp +++ b/src/widget/widget.cpp @@ -592,7 +592,7 @@ void Widget::onSeparateWindowChanged(bool separate, bool clicked) if (clicked) { - ContentLayout* contentLayout = createContentDialog(tr("Settings")); + ContentLayout* contentLayout = createContentDialog((SettingDialog)); contentLayout->parentWidget()->resize(size); contentLayout->parentWidget()->move(pos); settingsWidget->show(contentLayout); @@ -628,7 +628,7 @@ void Widget::onAddClicked() { if (!addFriendForm->isShown()) { - addFriendForm->show(createContentDialog(tr("Add friend"))); + addFriendForm->show(createContentDialog(AddDialog)); setActiveToolMenuButton(Widget::None); } } @@ -636,7 +636,7 @@ void Widget::onAddClicked() { hideMainForms(nullptr); addFriendForm->show(contentLayout); - setWindowTitle(tr("Add friend")); + setWindowTitle(fromDialogType(AddDialog)); setActiveToolMenuButton(Widget::AddButton); } } @@ -652,7 +652,7 @@ void Widget::onTransferClicked() { if (!filesForm->isShown()) { - filesForm->show(createContentDialog(tr("File transfers"))); + filesForm->show(createContentDialog(TransferDialog)); setActiveToolMenuButton(Widget::None); } } @@ -660,7 +660,7 @@ void Widget::onTransferClicked() { hideMainForms(nullptr); filesForm->show(contentLayout); - setWindowTitle(tr("File transfers")); + setWindowTitle(fromDialogType(TransferDialog)); setActiveToolMenuButton(Widget::TransferButton); } } @@ -741,7 +741,7 @@ void Widget::onSettingsClicked() { if (!settingsWidget->isShown()) { - settingsWidget->show(createContentDialog(tr("Settings"))); + settingsWidget->show(createContentDialog(SettingDialog)); setActiveToolMenuButton(Widget::None); } } @@ -749,7 +749,7 @@ void Widget::onSettingsClicked() { hideMainForms(nullptr); settingsWidget->show(contentLayout); - setWindowTitle(tr("Settings")); + setWindowTitle(fromDialogType(SettingDialog)); setActiveToolMenuButton(Widget::SettingButton); } } @@ -760,7 +760,7 @@ void Widget::showProfile() // onAvatarClicked, onUsernameClicked { if (!profileForm->isShown()) { - profileForm->show(createContentDialog(tr("Profile"))); + profileForm->show(createContentDialog(ProfileDialog)); setActiveToolMenuButton(Widget::None); } } @@ -768,7 +768,7 @@ void Widget::showProfile() // onAvatarClicked, onUsernameClicked { hideMainForms(nullptr); profileForm->show(contentLayout); - setWindowTitle(tr("Profile")); + setWindowTitle(fromDialogType(ProfileDialog)); setActiveToolMenuButton(Widget::None); } } @@ -1141,6 +1141,23 @@ bool Widget::newGroupMessageAlert(int groupId) return newMessageAlert(currentWindow, hasActive); } +QString Widget::fromDialogType(DialogType type) +{ + switch (type) + { + case AddDialog: + return tr("Add friend"); + case TransferDialog: + return tr("File transfers"); + case SettingDialog: + return tr("Settings"); + case ProfileDialog: + return tr("Profile"); + default: + return QString(); + } +} + bool Widget::newMessageAlert(QWidget* currentWindow, bool isActive) { bool inactiveWindow = isMinimized() || !currentWindow->isActiveWindow(); @@ -1277,15 +1294,32 @@ ContentDialog* Widget::createContentDialog() const return new ContentDialog(settingsWidget); } -ContentLayout* Widget::createContentDialog(const QString &title) const +ContentLayout* Widget::createContentDialog(DialogType type) const { class Dialog : public QDialog { public: - Dialog() + Dialog(DialogType type) : QDialog() + , type(type) { restoreGeometry(Settings::getInstance().getDialogSettingsGeometry()); + Translator::registerHandler(std::bind(&Dialog::retranslateUi, this), this); + retranslateUi(); + + connect(Core::getInstance(), &Core::usernameSet, this, &Dialog::retranslateUi); + } + + ~Dialog() + { + Translator::unregister(this); + } + + public slots: + + void retranslateUi() + { + setWindowTitle(Core::getInstance()->getUsername() + QStringLiteral(" - ") + Widget::fromDialogType(type)); } protected: @@ -1300,9 +1334,12 @@ ContentLayout* Widget::createContentDialog(const QString &title) const Settings::getInstance().setDialogSettingsGeometry(saveGeometry()); QDialog::moveEvent(event); } + + private: + DialogType type; }; - QDialog* dialog = new Dialog(); + QDialog* dialog = new Dialog(type); dialog->setAttribute(Qt::WA_DeleteOnClose); ContentLayout* contentLayoutDialog = new ContentLayout(dialog); @@ -1312,7 +1349,6 @@ ContentLayout* Widget::createContentDialog(const QString &title) const dialog->layout()->setSpacing(0); dialog->setMinimumSize(720, 400); dialog->setAttribute(Qt::WA_DeleteOnClose); - dialog->setWindowTitle(title); dialog->show(); return contentLayoutDialog; @@ -1971,7 +2007,9 @@ void Widget::retranslateUi() statusOnline->setText(tr("Online", "Button to set your status to 'Online'")); statusAway->setText(tr("Away", "Button to set your status to 'Away'")); statusBusy->setText(tr("Busy", "Button to set your status to 'Busy'")); - //setWindowTitle(tr("Settings")); + + if (!Settings::getInstance().getSeparateWindow()) + setWindowTitle(fromDialogType(SettingDialog)); } #ifdef Q_OS_MAC diff --git a/src/widget/widget.h b/src/widget/widget.h index 33deb23b4..71406f70d 100644 --- a/src/widget/widget.h +++ b/src/widget/widget.h @@ -72,8 +72,18 @@ public: bool getIsWindowMinimized(); void updateIcons(); void clearContactsList(); + + enum DialogType + { + AddDialog, + TransferDialog, + SettingDialog, + ProfileDialog + }; + + static QString fromDialogType(DialogType type); ContentDialog* createContentDialog() const; - ContentLayout* createContentDialog(const QString& title) const; + ContentLayout* createContentDialog(DialogType type) const; static void confirmExecutableOpen(const QFileInfo file);