summaryrefslogtreecommitdiffstats
path: root/Swift
diff options
context:
space:
mode:
Diffstat (limited to 'Swift')
-rw-r--r--Swift/QtUI/QtLoginWindow.cpp17
-rw-r--r--Swift/QtUI/QtLoginWindow.h3
-rw-r--r--Swift/QtUI/QtSpellCheckerWindow.cpp3
-rw-r--r--Swift/QtUI/QtSpellCheckerWindow.h2
-rw-r--r--Swift/QtUI/QtTextEdit.cpp86
-rw-r--r--Swift/QtUI/QtTextEdit.h9
6 files changed, 69 insertions, 51 deletions
diff --git a/Swift/QtUI/QtLoginWindow.cpp b/Swift/QtUI/QtLoginWindow.cpp
index c2854c5..c8b40a4 100644
--- a/Swift/QtUI/QtLoginWindow.cpp
+++ b/Swift/QtUI/QtLoginWindow.cpp
@@ -201,11 +201,6 @@ QtLoginWindow::QtLoginWindow(UIEventStream* uiEventStream, SettingsProvider* set
toggleNotificationsAction_->setChecked(settings_->getSetting(SettingConstants::SHOW_NOTIFICATIONS));
connect(toggleNotificationsAction_, SIGNAL(toggled(bool)), SLOT(handleToggleNotifications(bool)));
- QAction* spellCheckerAction_ = new QAction(tr("Spell &Checker"), this);
- connect(spellCheckerAction_, SIGNAL(triggered()), SLOT(handleSpellChecker()));
- generalMenu_->addAction(spellCheckerAction_);
-
-
#ifndef SWIFTEN_PLATFORM_MACOSX
swiftMenu_->addSeparator();
#endif
@@ -437,18 +432,6 @@ void QtLoginWindow::handleAbout() {
}
}
-void QtLoginWindow::handleSpellChecker() {
- if (!spellCheckerDialog_) {
- spellCheckerDialog_ = new QtSpellCheckerWindow(settings_);
- spellCheckerDialog_->show();
- }
- else {
- spellCheckerDialog_->show();
- spellCheckerDialog_->raise();
- spellCheckerDialog_->activateWindow();
- }
-}
-
void QtLoginWindow::handleShowXMLConsole() {
uiEventStream_->send(boost::make_shared<RequestXMLConsoleUIEvent>());
}
diff --git a/Swift/QtUI/QtLoginWindow.h b/Swift/QtUI/QtLoginWindow.h
index 95a4b2a..c1966d8 100644
--- a/Swift/QtUI/QtLoginWindow.h
+++ b/Swift/QtUI/QtLoginWindow.h
@@ -18,7 +18,6 @@
#include <Swift/Controllers/UIEvents/UIEventStream.h>
#include <Swift/Controllers/UIInterfaces/MainWindow.h>
#include <QtAboutWidget.h>
-#include <QtSpellCheckerWindow.h>
class QLabel;
class QToolButton;
@@ -66,7 +65,6 @@ namespace Swift {
void handleToggleSounds(bool enabled);
void handleToggleNotifications(bool enabled);
void handleAbout();
- void handleSpellChecker();
void bringToFront();
void toggleBringToFront();
void handleUsernameTextChanged();
@@ -102,7 +100,6 @@ namespace Swift {
QAction* toggleNotificationsAction_;
UIEventStream* uiEventStream_;
QPointer<QtAboutWidget> aboutDialog_;
- QPointer<QtSpellCheckerWindow> spellCheckerDialog_;
SettingsProvider* settings_;
QAction* xmlConsoleAction_;
QAction* fileTransferOverviewAction_;
diff --git a/Swift/QtUI/QtSpellCheckerWindow.cpp b/Swift/QtUI/QtSpellCheckerWindow.cpp
index ef1985e..f955668 100644
--- a/Swift/QtUI/QtSpellCheckerWindow.cpp
+++ b/Swift/QtUI/QtSpellCheckerWindow.cpp
@@ -64,9 +64,8 @@ void QtSpellCheckerWindow::handleApply() {
QList<QListWidgetItem* > selectedLanguage = ui_.languageView->selectedItems();
if (!selectedLanguage.empty()) {
settings_->storeSetting(SettingConstants::DICT_FILE, Q2PSTRING(selectedLanguage[0]->text()));
- } else {
- settings_->storeSetting(SettingConstants::SPELL_CHECKER, false);
}
+ emit settingsChanged();
this->done(0);
}
diff --git a/Swift/QtUI/QtSpellCheckerWindow.h b/Swift/QtUI/QtSpellCheckerWindow.h
index ad94907..40ed882 100644
--- a/Swift/QtUI/QtSpellCheckerWindow.h
+++ b/Swift/QtUI/QtSpellCheckerWindow.h
@@ -22,6 +22,8 @@ namespace Swift {
void handlePathButton();
void handlePersonalPathButton();
void handleApply();
+ signals:
+ void settingsChanged();
private:
void setEnabled(bool state);
diff --git a/Swift/QtUI/QtTextEdit.cpp b/Swift/QtUI/QtTextEdit.cpp
index e523dca..f115d1c 100644
--- a/Swift/QtUI/QtTextEdit.cpp
+++ b/Swift/QtUI/QtTextEdit.cpp
@@ -65,23 +65,18 @@ void QtTextEdit::keyPressEvent(QKeyEvent* event) {
}
void QtTextEdit::underlineMisspells() {
- if (checker_ == NULL) {
- // Try to setUp the checker again in case that
- // settings changed.
- setUpSpellChecker();
- if (checker_ == NULL) {
- return;
- }
- }
+ QTextCursor cursor = textCursor();
misspelledPositions_.clear();
- QTextCharFormat spellingErrorFormat;
QTextCharFormat normalFormat;
- spellingErrorFormat.setUnderlineColor(QColor(Qt::red));
- spellingErrorFormat.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline);
- QTextCursor cursor = textCursor();
cursor.movePosition(QTextCursor::Start, QTextCursor::MoveAnchor, 1);
cursor.movePosition(QTextCursor::End, QTextCursor::KeepAnchor, 1);
cursor.setCharFormat(normalFormat);
+ if (checker_ == NULL) {
+ return;
+ }
+ QTextCharFormat spellingErrorFormat;
+ spellingErrorFormat.setUnderlineColor(QColor(Qt::red));
+ spellingErrorFormat.setUnderlineStyle(QTextCharFormat::SpellCheckUnderline);
std::string fragment = Q2PSTRING(cursor.selectedText());
checker_->checkFragment(fragment, misspelledPositions_);
for (PositionPairList::iterator it = misspelledPositions_.begin(); it != misspelledPositions_.end(); ++it) {
@@ -103,8 +98,9 @@ void QtTextEdit::handleTextChanged() {
}
}
-void QtTextEdit::handleReplaceMisspellWord(const QString& word, const boost::tuple<int, int>& wordPosition) {
+void QtTextEdit::replaceMisspelledWord(const QString& word, int cursorPosition) {
QTextCursor cursor = textCursor();
+ boost::tuple<int, int> wordPosition = getWordFromCursor(cursorPosition);
cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor);
cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor);
QTextCharFormat normalFormat;
@@ -136,41 +132,55 @@ QSize QtTextEdit::sizeHint() const {
void QtTextEdit::contextMenuEvent(QContextMenuEvent* event) {
QMenu *menu = createStandardContextMenu();
QTextCursor cursor = cursorForPosition(event->pos());
+ QAction *insertPoint = menu->actions().first();
+
+ QAction *settingsAction = new QAction(QApplication::translate("QtTextEdit", "Spell Checker Options", 0, QApplication::UnicodeUTF8), menu);
+ menu->insertAction(insertPoint, settingsAction);
+ menu->insertAction(insertPoint, menu->addSeparator());
+ addSuggestions(menu, event);
+ QAction* result = menu->exec(event->globalPos());
+ if (result == settingsAction) {
+ spellCheckerSettingsWindow();
+ }
+ for (std::vector<QAction*>::iterator it = replaceWordActions_.begin(); it != replaceWordActions_.end(); ++it) {
+ if (*it == result) {
+ replaceMisspelledWord((*it)->text(), cursor.position());
+ }
+ }
+ delete menu;
+}
+
+void QtTextEdit::addSuggestions(QMenu* menu, QContextMenuEvent* event)
+{
+ replaceWordActions_.clear();
+ QAction *insertPoint = menu->actions().first();
+ QTextCursor cursor = cursorForPosition(event->pos());
boost::tuple<int, int> wordPosition = getWordFromCursor(cursor.position());
if (boost::get<0>(wordPosition) < 0) {
// The click was executed outside a spellable word so no
- // suggestion menu is necessary
- menu->exec(event->globalPos());
- delete menu;
+ // suggestions are necessary
return;
}
cursor.setPosition(boost::get<0>(wordPosition), QTextCursor::MoveAnchor);
cursor.setPosition(boost::get<1>(wordPosition), QTextCursor::KeepAnchor);
std::vector<std::string> wordList;
checker_->getSuggestions(Q2PSTRING(cursor.selectedText()), wordList);
- std::vector<QAction*> replaceWordActions;
- QAction *insertPoint = menu->actions().first();
if (wordList.size() == 0) {
QAction *noSuggestions = new QAction(QApplication::translate("QtTextEdit", "No Suggestions", 0, QApplication::UnicodeUTF8), menu);
noSuggestions->setDisabled(true);
menu->insertAction(insertPoint, noSuggestions);
- } else {
+ }
+ else {
for (std::vector<std::string>::iterator it = wordList.begin(); it != wordList.end(); ++it) {
QAction *wordAction = new QAction(it->c_str(), menu);
menu->insertAction(insertPoint, wordAction);
- replaceWordActions.push_back(wordAction);
+ replaceWordActions_.push_back(wordAction);
}
}
menu->insertAction(insertPoint, menu->addSeparator());
- QAction* result = menu->exec(event->globalPos());
- for (std::vector<QAction*>::iterator it = replaceWordActions.begin(); it != replaceWordActions.end(); ++it) {
- if (*it == result) {
- handleReplaceMisspellWord((*it)->text(), wordPosition);
- }
- }
- delete menu;
}
+
void QtTextEdit::setUpSpellChecker()
{
SpellCheckerFactory *checkerFactory = new SpellCheckerFactory();
@@ -188,9 +198,29 @@ void QtTextEdit::setUpSpellChecker()
}
checker_ = checkerFactory->createSpellChecker((dictPath + affixFile).c_str(), (dictPath + dictFile).c_str());
delete checkerFactory;
- } else {
+ }
+ else {
checker_ = NULL;
}
}
+void QtTextEdit::spellCheckerSettingsWindow() {
+ if (!spellCheckerWindow_) {
+ spellCheckerWindow_ = new QtSpellCheckerWindow(settings_);
+ connect(spellCheckerWindow_, SIGNAL(settingsChanged()), this, SLOT(handleModifiedSettings()));
+ spellCheckerWindow_->show();
+ }
+ else {
+ spellCheckerWindow_->show();
+ spellCheckerWindow_->raise();
+ spellCheckerWindow_->activateWindow();
+ }
+}
+
+void QtTextEdit::handleModifiedSettings() {
+ delete checker_;
+ setUpSpellChecker();
+ underlineMisspells();
+}
+
}
diff --git a/Swift/QtUI/QtTextEdit.h b/Swift/QtUI/QtTextEdit.h
index 38d5d0a..b40c935 100644
--- a/Swift/QtUI/QtTextEdit.h
+++ b/Swift/QtUI/QtTextEdit.h
@@ -12,9 +12,11 @@
#include <Swift/Controllers/SettingConstants.h>
#include <QTextEdit>
+#include <QPointer>
namespace Swift {
class SpellChecker;
+ class QtSpellCheckerWindow;
class QtTextEdit : public QTextEdit {
Q_OBJECT
public:
@@ -26,7 +28,7 @@ namespace Swift {
void returnPressed();
void unhandledKeyPressEvent(QKeyEvent* event);
public slots:
- void handleReplaceMisspellWord(const QString& word, const boost::tuple<int,int>& wordPosition);
+ void handleModifiedSettings();
protected:
virtual void keyPressEvent(QKeyEvent* event);
virtual void contextMenuEvent(QContextMenuEvent* event);
@@ -34,10 +36,15 @@ namespace Swift {
void handleTextChanged();
private:
SpellChecker *checker_;
+ std::vector<QAction*> replaceWordActions_;
PositionPairList misspelledPositions_;
SettingsProvider *settings_;
+ QPointer<QtSpellCheckerWindow> spellCheckerWindow_;
+ void addSuggestions(QMenu* menu, QContextMenuEvent* event);
+ void replaceMisspelledWord(const QString& word, int cursorPosition);
void setUpSpellChecker();
void underlineMisspells();
+ void spellCheckerSettingsWindow();
boost::tuple<int,int> getWordFromCursor(int cursorPosition);
};
}