1 /*****************************************************************************
2 * mainwindow.cpp - QStarDict, a StarDict clone written with using Qt *
3 * Copyright (C) 2007-2009 Alexander *
5 * This program is free software; you can redistribute it and/or modify *
6 * it under the terms of the GNU General Public License as published by *
7 * the Free Software Foundation; either version 2 of the License, or *
8 * (at your option) any later version. *
10 * This program is distributed in the hope that it will be useful, *
11 * but WITHOUT ANY WARRANTY; without even the implied warranty of *
12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the *
13 * GNU General Public License for more details. *
15 * You should have received a copy of the GNU General Public License along *
16 * with this program; if not, write to the Free Software Foundation, Inc., *
17 * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA. *
18 *****************************************************************************/
20 #include "mainwindow.h"
22 #include <QApplication>
23 #include <QCloseEvent>
24 #include <QDesktopServices>
27 #include <QFileDialog>
28 #include <QListWidgetItem>
31 #include <QMessageBox>
33 #include <QTextStream>
34 #include <QTimerEvent>
37 #include "application.h"
38 #include "popupwindow.h"
39 #include "settingsdialog.h"
45 MainWindow::MainWindow(QWidget *parent)
50 translationView->setDict(m_dict);
53 font.setPointSize(16);
55 menu_File->insertActions(actionQuit, translationView->toolBar()->actions());
57 QAction *actionWordsListDock = wordsListDock->toggleViewAction();
58 menu_Options->insertAction(menu_Options->actions().first(), actionWordsListDock);
59 actionWordsListDock->setFont(font);
60 //wordsList->setProperty("FingerScrollable", true);
61 //translationView->setProperty("FingerScrollable", true);
67 MainWindow::~MainWindow()
72 void MainWindow::showTranslation(const QString &text)
74 searchBox->setText(text);
75 on_queryButton_clicked();
78 void MainWindow::createConnections()
80 connect(actionAboutQt, SIGNAL(triggered()), qApp, SLOT(aboutQt()));
81 connect(actionQuit, SIGNAL(triggered()), qApp, SLOT(quit()));
82 actionScan->setChecked(Application::instance()->popupWindow()->isScan());
83 connect(actionScan, SIGNAL(toggled(bool)),
84 Application::instance()->popupWindow(), SLOT(setScan(bool)));
85 connect(Application::instance()->popupWindow(), SIGNAL(scanChanged(bool)),
86 actionScan, SLOT(setChecked(bool)));
87 connect(wordsList, SIGNAL(itemActivated(QListWidgetItem*)),
88 SLOT(wordsListItemActivated(QListWidgetItem*)));
89 connect(wordsList, SIGNAL(itemClicked(QListWidgetItem*)),
90 SLOT(wordsListItemActivated(QListWidgetItem*)));
92 connect(translationView, SIGNAL(wordTranslated(const QString&)),
93 SLOT(wordTranslated(const QString&)));
96 void MainWindow::loadSettings()
99 restoreGeometry(config.value("MainWindow/geometry", QByteArray()).toByteArray());
100 restoreState(config.value("MainWindow/state", QByteArray()).toByteArray());
101 setVisible(config.value("MainWindow/visible", true).toBool());
103 if (isHidden() && ! Application::instance()->trayIcon()->isVisible())
106 wordsListDock->setFloating(config.value("MainWindow/wordsListDock/floating", wordsListDock->isFloating()).toBool());
107 wordsListDock->setGeometry(config.value("MainWindow/wordsListDock/geometry", wordsListDock->geometry()).toRect());
108 setInstantSearch(config.value("MainWindow/instantSearch", true).toBool());
109 setDefaultStyleSheet(config.value("MainWindow/defaultStyleSheet", defaultStyleSheet()).toString());
112 void MainWindow::saveSettings()
115 config.setValue("MainWindow/geometry", saveGeometry());
116 config.setValue("MainWindow/state", saveState());
117 config.setValue("MainWindow/visible", isVisible());
118 config.setValue("MainWindow/wordsListDock/floating", wordsListDock->isFloating());
119 config.setValue("MainWindow/wordsListDock/geometry", wordsListDock->geometry());
120 config.setValue("MainWindow/instantSearch", m_instantSearch);
121 config.setValue("MainWindow/defaultStyleSheet", defaultStyleSheet());
124 void MainWindow::on_actionAbout_triggered()
126 QMessageBox::about(this,
127 tr("About QStarDict"),
128 tr("<b>QStarDict %1 </b> - Qt version of StarDict<br>").arg(QSTARDICT_VERSION) +
129 tr("Copyright (C) 2007-2009 Alexander Rodin "
130 "<a href=\"http://qstardict.ylsoftware.com\">http://qstardict.ylsoftware.com</a><br>"
132 "<a href=\"http://sr.uz\">http://sr.uz</a>"));
135 void MainWindow::on_actionSettings_triggered()
137 SettingsDialog dialog(this);
141 void MainWindow::on_actionHelp_triggered()
143 QDesktopServices::openUrl(QUrl("http://wiki.qstardict.ylsoftware.com"));
146 void MainWindow::on_queryButton_clicked()
148 if (searchBox->text().simplified().isEmpty())
150 setWindowTitle(tr("QStarDict"));
151 translationView->clear();
156 wordsList->addItems(m_dict->findSimilarWords(searchBox->text()));
157 translationView->translate(searchBox->text());
160 void MainWindow::reload()
163 wordsList->addItems(m_dict->findSimilarWords(translationView->translatedWord()));
164 translationView->reload();
167 void MainWindow::queryEdited(const QString &)
170 killTimer(m_queryTimer);
171 m_queryTimer = startTimer(600);
174 void MainWindow::timerEvent(QTimerEvent *event)
176 if (event->timerId() == m_queryTimer)
178 killTimer(m_queryTimer);
180 on_queryButton_clicked();
183 QMainWindow::timerEvent(event);
186 void MainWindow::wordTranslated(const QString &word)
189 if (word.simplified().isEmpty())
190 setWindowTitle(tr("QStarDict"));
192 setWindowTitle(tr("%1 - QStarDict").arg(word));
196 killTimer(m_queryTimer);
201 void MainWindow::wordsListItemActivated(QListWidgetItem *item)
203 searchBox->setText(item->text());
204 translationView->translate(item->text());
206 setWindowTitle(tr("%1 - QStarDict").arg(translationView->translatedWord()));
210 void MainWindow::setInstantSearch(bool instantSearch)
212 if (instantSearch == m_instantSearch)
214 m_instantSearch = instantSearch;
216 connect(searchBox, SIGNAL(textEdited(const QString&)), SLOT(queryEdited(const QString&)));
218 disconnect(searchBox, SIGNAL(textEdited(const QString&)), this, SLOT(queryEdited(const QString&)));
221 void MainWindow::setDict(DictCore *dict)
224 translationView->setDict(dict);
227 void MainWindow::keyPressEvent(QKeyEvent *event)
229 if (event->text().size() || event->key() == Qt::Key_Escape)
231 if (! searchBox->hasFocus())
233 searchBox->setText(event->text());
234 searchBox->setFocus(Qt::OtherFocusReason);
236 if (event->key() == Qt::Key_Escape)
238 if (searchBox->text().isEmpty())
244 QMainWindow::keyPressEvent(event);
247 void MainWindow::closeEvent(QCloseEvent *event)
250 if (! Application::instance()->trayIcon()->isVisible())
251 Application::instance()->quit();
254 QMainWindow::closeEvent(event);
259 // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc