From 1636b5c80b0a4e8de11a1eb537682c0359141eeb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Josep=20Llodr=C3=A0?= <jlg.hrtc@gmail.com> Date: Sat, 31 Mar 2018 17:53:48 +0200 Subject: [PATCH] linguist: Add actions in View menu to show more/fewer guesses Three actions have been added to the main View menu (Guesses submenu) in order to easily change the number of Guesses displayed. View Menu ...... Guesses > Show more (alt - +) [shows 5 more guesses] Show fewer (alt - -) [shows 5 fewer guesses] --- Reset to default (alt - 0) [resets to 5 guesses] ...... Motivation behind this commit is that in large UIs with thousands of strings, 5 guesses are not enough in some situations to gather all the information necessary to correctly translate a string. Change-Id: I3fdc1b8fc27af40300897cdfd1f9fa3620caad55 Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@qt.io> --- src/linguist/linguist/mainwindow.cpp | 7 ++++++ src/linguist/linguist/mainwindow.ui | 34 ++++++++++++++++++++++++++++ src/linguist/linguist/phraseview.cpp | 29 ++++++++++++++++++++---- src/linguist/linguist/phraseview.h | 10 ++++++++ 4 files changed, 76 insertions(+), 4 deletions(-) diff --git a/src/linguist/linguist/mainwindow.cpp b/src/linguist/linguist/mainwindow.cpp index 9f7109c85..355754b21 100644 --- a/src/linguist/linguist/mainwindow.cpp +++ b/src/linguist/linguist/mainwindow.cpp @@ -1933,6 +1933,10 @@ void MainWindow::setupMenuBar() connect(m_ui.actionIncreaseZoom, SIGNAL(triggered()), m_messageEditor, SLOT(increaseFontSize())); connect(m_ui.actionDecreaseZoom, SIGNAL(triggered()), m_messageEditor, SLOT(decreaseFontSize())); connect(m_ui.actionResetZoomToDefault, SIGNAL(triggered()), m_messageEditor, SLOT(resetFontSize())); + connect(m_ui.actionShowMoreGuesses, SIGNAL(triggered()), m_phraseView, SLOT(moreGuesses())); + connect(m_ui.actionShowFewerGuesses, SIGNAL(triggered()), m_phraseView, SLOT(fewerGuesses())); + connect(m_phraseView, SIGNAL(showFewerGuessesAvailable(bool)), m_ui.actionShowFewerGuesses, SLOT(setEnabled(bool))); + connect(m_ui.actionResetGuessesToDefault, SIGNAL(triggered()), m_phraseView, SLOT(resetNumGuesses())); m_ui.menuViewViews->addAction(m_contextDock->toggleViewAction()); m_ui.menuViewViews->addAction(m_messagesDock->toggleViewAction()); m_ui.menuViewViews->addAction(m_phrasesDock->toggleViewAction()); @@ -2622,6 +2626,8 @@ void MainWindow::readConfig() m_messageEditor->setFontSize( config.value(settingPath("Options/EditorFontsize"), font().pointSize()).toReal()); + m_phraseView->setMaxCandidates(config.value(settingPath("Options/NumberOfGuesses"), + PhraseView::getDefaultMaxCandidates()).toInt()); recentFiles().readConfig(); @@ -2657,6 +2663,7 @@ void MainWindow::writeConfig() recentFiles().writeConfig(); config.setValue(settingPath("Options/EditorFontsize"), m_messageEditor->fontSize()); + config.setValue(settingPath("Options/NumberOfGuesses"), m_phraseView->getMaxCandidates()); config.beginWriteArray(settingPath("OpenedPhraseBooks"), m_phraseBooks.size()); diff --git a/src/linguist/linguist/mainwindow.ui b/src/linguist/linguist/mainwindow.ui index c09015912..6b4922e16 100644 --- a/src/linguist/linguist/mainwindow.ui +++ b/src/linguist/linguist/mainwindow.ui @@ -110,6 +110,15 @@ <addaction name="separator"/> <addaction name="actionResetZoomToDefault"/> </widget> + <widget class="QMenu" name="menuGuesses"> + <property name="title"> + <string>Guesses</string> + </property> + <addaction name="actionShowMoreGuesses"/> + <addaction name="actionShowFewerGuesses"/> + <addaction name="separator"/> + <addaction name="actionResetGuessesToDefault"/> + </widget> <addaction name="actionResetSorting"/> <addaction name="actionDisplayGuesses"/> <addaction name="actionStatistics"/> @@ -117,6 +126,7 @@ <addaction name="actionVisualizeWhitespace"/> <addaction name="separator"/> <addaction name="menuZoom"/> + <addaction name="menuGuesses"/> <addaction name="separator"/> <addaction name="menuToolbars"/> <addaction name="menuViewViews"/> @@ -926,6 +936,30 @@ <string>Ctrl+0</string> </property> </action> + <action name="actionShowMoreGuesses"> + <property name="text"> + <string>Show more</string> + </property> + <property name="shortcut"> + <string>Alt++</string> + </property> + </action> + <action name="actionShowFewerGuesses"> + <property name="text"> + <string>Show fewer</string> + </property> + <property name="shortcut"> + <string>Alt+-</string> + </property> + </action> + <action name="actionResetGuessesToDefault"> + <property name="text"> + <string>Reset to default</string> + </property> + <property name="shortcut"> + <string>Alt+0</string> + </property> + </action> </widget> <resources/> <connections/> diff --git a/src/linguist/linguist/phraseview.cpp b/src/linguist/linguist/phraseview.cpp index e1d31954e..39b02c8cd 100644 --- a/src/linguist/linguist/phraseview.cpp +++ b/src/linguist/linguist/phraseview.cpp @@ -44,9 +44,6 @@ QT_BEGIN_NAMESPACE -// Maximum number of guesses to display -static const int MaxCandidates = 5; - static QString phraseViewHeaderKey() { return settingPath("PhraseViewHeader"); @@ -154,6 +151,30 @@ void PhraseView::editPhrase() edit(currentIndex()); } +void PhraseView::setMaxCandidates(const int max) +{ + m_maxCandidates = max; + emit showFewerGuessesAvailable(m_maxCandidates > DefaultMaxCandidates); +} + +void PhraseView::moreGuesses() +{ + setMaxCandidates(m_maxCandidates + DefaultMaxCandidates); + setSourceText(m_modelIndex, m_sourceText); +} + +void PhraseView::fewerGuesses() +{ + setMaxCandidates(m_maxCandidates - DefaultMaxCandidates); + setSourceText(m_modelIndex, m_sourceText); +} + +void PhraseView::resetNumGuesses() +{ + setMaxCandidates(DefaultMaxCandidates); + setSourceText(m_modelIndex, m_sourceText); +} + static CandidateList similarTextHeuristicCandidates(MultiDataModel *model, int mi, const char *text, int maxCandidates) { @@ -217,7 +238,7 @@ void PhraseView::setSourceText(int model, const QString &sourceText) if (!sourceText.isEmpty() && m_doGuesses) { CandidateList cl = similarTextHeuristicCandidates(m_dataModel, model, - sourceText.toLatin1(), MaxCandidates); + sourceText.toLatin1(), m_maxCandidates); int n = 0; foreach (const Candidate &candidate, cl) { QString def; diff --git a/src/linguist/linguist/phraseview.h b/src/linguist/linguist/phraseview.h index 2e315b759..fbc4610fe 100644 --- a/src/linguist/linguist/phraseview.h +++ b/src/linguist/linguist/phraseview.h @@ -36,6 +36,8 @@ QT_BEGIN_NAMESPACE +static const int DefaultMaxCandidates = 5; + class MultiDataModel; class PhraseModel; @@ -73,9 +75,13 @@ public: public slots: void toggleGuessing(); void update(); + int getMaxCandidates() const { return m_maxCandidates; } + void setMaxCandidates(const int max); + static int getDefaultMaxCandidates() { return DefaultMaxCandidates; } signals: void phraseSelected(int latestModel, const QString &phrase); + void showFewerGuessesAvailable(bool canShow); protected: // QObject @@ -88,6 +94,9 @@ private slots: void selectPhrase(const QModelIndex &index); void selectPhrase(); void editPhrase(); + void moreGuesses(); + void fewerGuesses(); + void resetNumGuesses(); private: QList<Phrase *> getPhrases(int model, const QString &sourceText); @@ -100,6 +109,7 @@ private: QString m_sourceText; int m_modelIndex; bool m_doGuesses; + int m_maxCandidates = DefaultMaxCandidates; }; QT_END_NAMESPACE -- GitLab