1 /*******************************************************************************
3 This file is part of mDictionary.
5 mDictionary 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 3 of the License, or
8 (at your option) any later version.
10 mDictionary 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
16 along with mDictionary. If not, see <http://www.gnu.org/licenses/>.
18 Copyright 2010 Comarch S.A.
20 *******************************************************************************/
22 //Created by Mateusz Półrola
24 #include "StarDialog.h"
28 StarDialog::StarDialog(StarDictPlugin *plugin,
32 this->plugin = plugin;
35 accentsToolTip = tr("Strip accents (searching takes more time, but spelling doesn't have to be exact)");
40 connect(accentsCheckBox, SIGNAL(toggled(bool)),
41 this, SLOT(setAccents(bool)));
44 connect(accentsInfoToolButton, SIGNAL(clicked()),
49 connect(browseButton, SIGNAL(clicked()),
50 this, SLOT(selectFile()));
53 connect(confirmButton, SIGNAL(clicked()),
54 this, SLOT(accept()));
59 void StarDialog::initializeUI() {
60 mainVerticalLayout = new QVBoxLayout;
62 widget->setLayout(mainVerticalLayout);
64 infoLabel = new QLabel;
65 infoLabel->setWordWrap(true);
66 QVBoxLayout* buttonLayout = new QVBoxLayout;
69 setWindowTitle(tr("Add new StarDict dictionary"));
71 browseLayout = new QHBoxLayout;
72 browseButton = new QPushButton(tr("Browse"));
73 browseButton->setMaximumWidth(150);
74 infoLabel->setText(tr("Dictionary file: not selected"));
76 browseLayout->addWidget(infoLabel, 0, Qt::AlignLeft);
77 browseLayout->addLayout(buttonLayout);
78 browseLayout->addWidget(browseButton, 0, Qt::AlignRight);
80 mainVerticalLayout->addLayout(browseLayout);
83 setWindowTitle(tr("StarDict Settings"));
85 infoLabel->setText(tr("Plugin: ") + plugin->type().toUpper() +"\n" +
86 tr("Book name: ") + plugin->settings()->value("bookname")
88 tr("Version: ") + plugin->settings()->value("version") + "\n" +
89 tr("Word count: ") + plugin->settings()->value("wordcount")
91 tr("Author: ") + plugin->settings()->value("author") + "\n" +
92 tr("E-mail: ") + plugin->settings()->value("email") + "\n" +
93 tr("Website: ") + plugin->settings()->value("website") + "\n" +
94 tr("Description: ") + plugin->settings()->value("description")
96 tr("Date: ") + plugin->settings()->value("date"));
97 mainVerticalLayout->addWidget(infoLabel);
100 accentsLayout = new QHBoxLayout;
101 accentsCheckBox = new QCheckBox(tr("Strip accents"));
102 accentsCheckBox->setToolTip(accentsToolTip);
103 accentsLayout->addWidget(accentsCheckBox);
105 accentsInfoToolButton = new QToolButton;
106 accentsInfoToolButton->setIcon(QIcon::fromTheme("general_information"));
107 accentsLayout->addWidget(accentsInfoToolButton);
111 mainVerticalLayout->addLayout(accentsLayout);
114 //load old setting if exists
116 accentsCheckBox->setChecked(true);
117 accentsCheckBox->setEnabled(false);
119 _dictionaryFilePath = "";
121 else if(plugin && plugin->settings()->value("cached") == "true") {
122 accentsCheckBox->setChecked(true);
123 accentsCheckBox->setEnabled(false);
127 if(plugin->settings()->value("strip_accents") == "true") {
128 accentsCheckBox->setChecked(true);
132 accentsCheckBox->setChecked(false);
137 confirmButton = new QPushButton;
138 mainVerticalLayout->addWidget(confirmButton);
140 confirmButton->setText(tr("Add"));
143 confirmButton->setText(tr("Save settings"));
146 scrollArea = new QScrollArea;
147 scrollArea->setWidget(widget);
148 scrollArea->setWidgetResizable(true);
150 scrollArea->setHorizontalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
153 infoLabel->setMinimumWidth(200);
154 setMinimumSize(sizeHint().width()*1.5, sizeHint().height()*1.2);
155 setMaximumSize(sizeHint().width()*1.7, sizeHint().height()*1.5);
156 scrollArea->setVerticalScrollBarPolicy(Qt::ScrollBarAlwaysOff);
160 layout = new QHBoxLayout;
161 layout->addWidget(scrollArea);
165 setMinimumSize(400,200);
167 setMinimumHeight(350);
170 scrollArea->setLineWidth(0);
171 scrollArea->setMidLineWidth(0);
172 scrollArea->setFrameStyle(QFrame::NoFrame);
178 void StarDialog::setAccents(bool accents) {
183 void StarDialog::selectFile() {
184 QString fileName = QFileDialog::getOpenFileName(this,
185 tr("Select dictionary file"),
187 tr("StarDict Files (*.dict *dict.dz *.idx *idx.gz *.ifo)"),
191 if (!fileName.isEmpty()) {
192 infoLabel->setText(tr("Dictionary file: %1").arg(fileName));
193 _dictionaryFilePath = fileName;
194 if (_dictionaryFilePath.endsWith(".tar.bz2")){
195 _isCompressed = true;
198 _isCompressed = false;
204 void StarDialog::saveSettings() {
205 _settings = new Settings;
207 foreach(QString key, plugin->settings()->keys())
208 _settings->setValue(key, plugin->settings()->value(key));
211 _settings->setValue("path", _dictionaryFilePath);
212 _settings->setValue("ifoFileName", _dictName + ".ifo");
213 _settings->setValue("idxFileName", _dictName + ".idx");
214 if (QFile::exists(_dictName + ".dict.dz") == true) {
215 _settings->setValue("dictFileName", _dictName + ".dict.dz");
218 _settings->setValue("dictFileName", _dictName + ".dict");
221 if (QFile::exists(_dictName + ".syn") == true) {
222 _settings->setValue("synFileName", _dictName + ".syn");
226 _settings->setValue("strip_accents", "true");
228 _settings->setValue("strip_accents", "false");
231 void StarDialog::accept() {
232 if(type == New && _dictionaryFilePath.isEmpty()) {
233 Q_EMIT notify(Notify::Warning, tr("File path is not set"));
238 if(type == New && !_dictionaryFilePath.isEmpty() && !checkFiles()) {
239 Q_EMIT notify(Notify::Warning, tr("Dictionary files are not complete"));
247 bool StarDialog::checkFiles() {
248 if (!_isCompressed) {
250 if (_dictionaryFilePath.right(2) == "dz") {
251 _dictName = _dictionaryFilePath.left(_dictionaryFilePath.lastIndexOf("."));
252 _dictName = _dictName.left(_dictName.lastIndexOf("."));
255 _dictName = _dictionaryFilePath.left(_dictionaryFilePath.lastIndexOf("."));
258 if (QFile::exists(_dictName + ".idx") == false && QFile::exists(_dictName + ".idx.gz") == false) {
261 if (QFile::exists(_dictName + ".dict") == false && QFile::exists(_dictName + ".dict.dz") == false) {
267 //TODO: untar files (?)
272 Settings* StarDialog::getSettings() {
277 void StarDialog::showAccentsInfo() {
278 Q_EMIT notify(Notify::Warning, accentsToolTip);