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());
110 actionToolBar->setChecked(config.value("MainWindow/toolBar",true).toBool());
111 translationView->toggleToolBar(actionToolBar->isChecked());
114 void MainWindow::saveSettings()
117 config.setValue("MainWindow/geometry", saveGeometry());
118 config.setValue("MainWindow/state", saveState());
119 config.setValue("MainWindow/visible", isVisible());
120 config.setValue("MainWindow/wordsListDock/floating", wordsListDock->isFloating());
121 config.setValue("MainWindow/wordsListDock/geometry", wordsListDock->geometry());
122 config.setValue("MainWindow/instantSearch", m_instantSearch);
123 config.setValue("MainWindow/defaultStyleSheet", defaultStyleSheet());
124 config.setValue("MainWindow/toolBar", actionToolBar->isChecked());
127 void MainWindow::on_actionAbout_triggered()
129 QMessageBox::about(this,
130 tr("About QStarDict"),
131 tr("<b>QStarDict %1 </b> - Qt version of StarDict ").arg(QSTARDICT_VERSION) +
132 tr("Copyright (C) 2007-2009 Alexander Rodin<br>"
136 void MainWindow::on_actionSettings_triggered()
138 SettingsDialog dialog(this);
142 void MainWindow::on_actionHelp_triggered()
144 QDesktopServices::openUrl(QUrl("http://wiki.qstardict.ylsoftware.com"));
147 void MainWindow::on_queryButton_clicked()
149 if (searchBox->text().simplified().isEmpty())
151 setWindowTitle(tr("QStarDict"));
152 translationView->clear();
157 wordsList->addItems(m_dict->findSimilarWords(searchBox->text()));
158 translationView->translate(searchBox->text());
161 void MainWindow::reload()
164 wordsList->addItems(m_dict->findSimilarWords(translationView->translatedWord()));
165 translationView->reload();
168 void MainWindow::queryEdited(const QString &)
171 killTimer(m_queryTimer);
172 m_queryTimer = startTimer(600);
175 void MainWindow::timerEvent(QTimerEvent *event)
177 if (event->timerId() == m_queryTimer)
179 killTimer(m_queryTimer);
181 on_queryButton_clicked();
184 QMainWindow::timerEvent(event);
187 void MainWindow::wordTranslated(const QString &word)
190 if (word.simplified().isEmpty())
191 setWindowTitle(tr("QStarDict"));
193 setWindowTitle(tr("%1 - QStarDict").arg(word));
197 killTimer(m_queryTimer);
202 void MainWindow::wordsListItemActivated(QListWidgetItem *item)
204 searchBox->setText(item->text());
205 translationView->translate(item->text());
207 setWindowTitle(tr("%1 - QStarDict").arg(translationView->translatedWord()));
211 void MainWindow::setInstantSearch(bool instantSearch)
213 if (instantSearch == m_instantSearch)
215 m_instantSearch = instantSearch;
217 connect(searchBox, SIGNAL(textEdited(const QString&)), SLOT(queryEdited(const QString&)));
219 disconnect(searchBox, SIGNAL(textEdited(const QString&)), this, SLOT(queryEdited(const QString&)));
222 void MainWindow::setDict(DictCore *dict)
225 translationView->setDict(dict);
228 void MainWindow::keyPressEvent(QKeyEvent *event)
230 if (event->text().size() || event->key() == Qt::Key_Escape)
232 if (! searchBox->hasFocus())
234 searchBox->setText(event->text());
235 searchBox->setFocus(Qt::OtherFocusReason);
237 if (event->key() == Qt::Key_Escape)
239 if (searchBox->text().isEmpty())
245 QMainWindow::keyPressEvent(event);
248 void MainWindow::closeEvent(QCloseEvent *event)
251 if (! Application::instance()->trayIcon()->isVisible())
252 Application::instance()->quit();
255 QMainWindow::closeEvent(event);
258 void MainWindow::on_actionToolBar_toggled(bool CheckedState)
260 translationView->toggleToolBar(CheckedState);
261 //CheckedState ? translationView->m_toolBar->hide() : translationView->m_toolBar->show();
266 // vim: tabstop=4 softtabstop=4 shiftwidth=4 expandtab cindent textwidth=120 formatoptions=tc