From: Bartosz Szatkowski Date: Tue, 17 Aug 2010 08:09:37 +0000 (+0200) Subject: Merge branch 'bookmarks' of ssh://drop.maemo.org/git/mdictionary into bookmarks X-Git-Tag: 0.4~44^2~17^2~2 X-Git-Url: http://vcs.maemo.org/git/?a=commitdiff_plain;h=2d3b711aa57f021304cdbea7f24ff31bf52b1a77;hp=aa1e9a4b7af32a70cad10c0c1312105a53bdf404;p=mdictionary Merge branch 'bookmarks' of ssh://drop.maemo.org/git/mdictionary into bookmarks --- diff --git a/trunk/src/base/backbone/Bookmarks.cpp b/trunk/src/base/backbone/Bookmarks.cpp index 34f6493..8d68911 100644 --- a/trunk/src/base/backbone/Bookmarks.cpp +++ b/trunk/src/base/backbone/Bookmarks.cpp @@ -33,6 +33,7 @@ void Bookmarks::clear() { void Bookmarks::add(Translation* translation) { + qDebug()<<"added"; QSqlQuery cur(db); cur.prepare("insert into bookmarks values (?,?)"); cur.addBindValue(translation->key()); diff --git a/trunk/src/base/base.pro b/trunk/src/base/base.pro index 2a02ca7..9600dc0 100644 --- a/trunk/src/base/base.pro +++ b/trunk/src/base/base.pro @@ -33,6 +33,7 @@ SOURCES += gui/main.cpp\ gui/DictTypeSelectDialog.cpp \ backbone/History.cpp \ gui/HistoryListDialog.cpp \ + gui/WordListProxyStyle.cpp \ backbone/Bookmarks.cpp HEADERS += gui/MainWindow.h \ @@ -51,6 +52,7 @@ HEADERS += gui/MainWindow.h \ ../includes/History.h \ gui/HistoryListDialog.h \ ../includes/GUIInterface.h \ + gui/WordListProxyStyle.h \ backbone/Bookmarks.h \ backbone/BookmarkTranslations.h @@ -75,9 +77,18 @@ unix { target.path =$$BINDIR +maemo5 { desktop.path = $$DATADIR/applications/hildon - desktop.files += ../../../data/other/$${TARGET}.desktop - icon64.path = $$DATADIR/icons/hicolor/64x64/hildon +} + +!maemo5 { + desktop.path = $$DATADIR/applications + icon64.path = $$DATADIR/icons +} + desktop.files += ../../../data/other/$${TARGET}.desktop icon64.files += ../../../data/icons/64x64/$${TARGET}.png } + +RESOURCES += \ + gui/gui.qrc diff --git a/trunk/src/base/gui/DictManagerWidget.cpp b/trunk/src/base/gui/DictManagerWidget.cpp index 457529d..7e793ad 100644 --- a/trunk/src/base/gui/DictManagerWidget.cpp +++ b/trunk/src/base/gui/DictManagerWidget.cpp @@ -27,10 +27,12 @@ #include "../../includes/DictDialog.h" DictManagerWidget::DictManagerWidget(GUIInterface *parent) : - QWidget(parent) { + QDialog(parent) { + - this->guiInterface = parent; + setWindowTitle(tr("Dictionaries")); + this->guiInterface = parent; verticalLayout = new QVBoxLayout; setLayout(verticalLayout); diff --git a/trunk/src/base/gui/DictManagerWidget.h b/trunk/src/base/gui/DictManagerWidget.h index 25e922d..324ae11 100644 --- a/trunk/src/base/gui/DictManagerWidget.h +++ b/trunk/src/base/gui/DictManagerWidget.h @@ -38,7 +38,7 @@ change settings of selected dict. All changes are saved automatically after hiding of this widget. */ -class DictManagerWidget : public QWidget { +class DictManagerWidget : public QDialog { Q_OBJECT public: //! Constructor diff --git a/trunk/src/base/gui/MainWindow.cpp b/trunk/src/base/gui/MainWindow.cpp index 3948a18..5d1a9e3 100644 --- a/trunk/src/base/gui/MainWindow.cpp +++ b/trunk/src/base/gui/MainWindow.cpp @@ -46,6 +46,8 @@ MainWindow::MainWindow(Backbone *backbone, QWidget *parent): setExactSearch(false); setWindowTitle("mDictionary"); + + showMaximized(); } MainWindow::~MainWindow() { @@ -63,25 +65,40 @@ void MainWindow::initializeUI() { searchBarWidget = new SearchBarWidget; + wordListWidget = new WordListWidget; //translationWidget is antoher stacked window, so we don't add it to layout //only create it with this widget as parent translationWidget = new TranslationWidget(this); - ui->centralWidget->layout()->addWidget(wordListWidget); + #ifdef Q_WS_MAEMO_5 + ui->centralWidget->layout()->addWidget(wordListWidget); + #else + splitter = new QSplitter(Qt::Horizontal); + splitter->addWidget(wordListWidget); + splitter->addWidget(translationWidget); + splitter->setStretchFactor(1, 150); + ui->centralWidget->layout()->addWidget(splitter); + #endif ui->centralWidget->layout()->addWidget(searchBarWidget); dictManagerWidget = new DictManagerWidget(this); + dictManagerWidget->hide(); + #ifdef Q_WS_MAEMO_5 + menuWidget = new MenuWidget(this); + menuWidget->addSubMenu(tr("Dictionaries"), dictManagerWidget); + menuWidget->addSubMenu(tr("Settings"), new QPushButton("Settings")); + menuWidget->addSubMenu(tr("About"), new QPushButton("About")); + ui->menuBar->addAction(menuWidget); + #else + dictionariesAction = ui->menuBar->addAction(tr("Dictionaries")); + connect(dictionariesAction, SIGNAL(triggered()), + dictManagerWidget, SLOT(show())); + #endif - menuWidget = new MenuWidget(this); - menuWidget->addSubMenu(tr("Dictionaries"), dictManagerWidget); - menuWidget->addSubMenu(tr("Settings"), new QPushButton("Settings")); - menuWidget->addSubMenu(tr("About"), new QPushButton("About")); - - ui->menuBar->addAction(menuWidget); } void MainWindow::closeEvent(QCloseEvent *event) { @@ -204,15 +221,23 @@ void MainWindow::historyPrev() { } void MainWindow::disableMenu() { - if(ui->menuBar->actions().contains(menuWidget)) { - ui->menuBar->removeAction(menuWidget); - } + #ifdef Q_WS_MAEMO_5 + if(ui->menuBar->actions().contains(menuWidget)) { + ui->menuBar->removeAction(menuWidget); + } + #else + ui->menuBar->setEnabled(false); + #endif } void MainWindow::enableMenu() { - if(!ui->menuBar->actions().contains(menuWidget)) { - ui->menuBar->addAction(menuWidget); - } + #ifdef Q_WS_MAEMO_5 + if(!ui->menuBar->actions().contains(menuWidget)) { + ui->menuBar->addAction(menuWidget); + } + #else + ui->menuBar->setEnabled(true); + #endif } void MainWindow::showHistory() { @@ -324,9 +349,6 @@ void MainWindow::connectWordList() { connect(wordListWidget, SIGNAL(showTranslation(QList)), this, SIGNAL(searchTranslations(QList))); - //TODO TEMP - connect(wordListWidget, SIGNAL(showTranslation(QList)), - backbone, SLOT(addBookmark(QList))); @@ -335,6 +357,12 @@ void MainWindow::connectWordList() { connect(this, SIGNAL(setIdle()), wordListWidget, SLOT(unlockList())); + + connect(wordListWidget, SIGNAL(addBookmark(QList)), + backbone, SLOT(addBookmark(QList))); + + connect(wordListWidget, SIGNAL(removeBookmark(QList)), + backbone, SLOT(removeBookmark(QList))); } void MainWindow::connectTranslationWidget() { diff --git a/trunk/src/base/gui/MainWindow.h b/trunk/src/base/gui/MainWindow.h index 9a47cad..7ee6614 100644 --- a/trunk/src/base/gui/MainWindow.h +++ b/trunk/src/base/gui/MainWindow.h @@ -185,6 +185,14 @@ private: MenuWidget* menuWidget; DictManagerWidget* dictManagerWidget; + #ifndef Q_WS_MAEMO_5 + QSplitter* splitter; + QAction* dictionariesAction; + //QAction* edit; + // QAction* settingsAction; + //QAction* aboutAction; + #endif + bool _exactSearch; QString searchString; diff --git a/trunk/src/base/gui/MainWindow.ui b/trunk/src/base/gui/MainWindow.ui index a9ee0be..31e98e2 100644 --- a/trunk/src/base/gui/MainWindow.ui +++ b/trunk/src/base/gui/MainWindow.ui @@ -14,72 +14,8 @@ MainWindow - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 255 - 255 - 255 - - - - - - - 0 - 0 - 0 - - - - - - - - - 0 - 0 - 0 - - - - - - - 0 - 0 - 0 - - - - - - - true + false @@ -93,14 +29,6 @@ - - - TopToolBarArea - - - false - - diff --git a/trunk/src/base/gui/SearchBarWidget.cpp b/trunk/src/base/gui/SearchBarWidget.cpp index 40c83a4..ee9fca7 100644 --- a/trunk/src/base/gui/SearchBarWidget.cpp +++ b/trunk/src/base/gui/SearchBarWidget.cpp @@ -33,7 +33,6 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : initializeUI(); - setMaximumHeight(150); _isSearching = false; @@ -98,6 +97,14 @@ QIcon SearchBarWidget::generateIcon(QIcon oryginal, qreal rotation) { void SearchBarWidget::initializeUI() { + + #ifdef Q_WS_MAEMO_5 + setMaximumHeight(150); + #else + setMaximumHeight(100); + #endif + + horizontalLayout = new QHBoxLayout(); verticalLayout = new QVBoxLayout(); @@ -118,14 +125,12 @@ void SearchBarWidget::initializeUI() { #endif - //create layout for lineEdit to have clear button on it QHBoxLayout* lineEditLayout = new QHBoxLayout; searchWordLineEdit->setLayout(lineEditLayout); clearSearchWordToolButton = new QToolButton(); - #ifdef Q_WS_MAEMO_5 clearSearchWordToolButton->setIcon(QIcon::fromTheme("general_stop")); //tool buttons will have size 2 times smaller @@ -152,6 +157,8 @@ void SearchBarWidget::initializeUI() { clearSearchWordToolButton->sizeHint().height()*2); #endif + + historyPrevToolButton = new QToolButton(); #ifdef Q_WS_MAEMO_5 historyPrevToolButton->setIcon( @@ -164,6 +171,8 @@ void SearchBarWidget::initializeUI() { clearSearchWordToolButton->sizeHint().height()*2); #endif + + historyShowToolButton = new QToolButton(); #ifdef Q_WS_MAEMO_5 historyShowToolButton->setIcon( @@ -183,7 +192,9 @@ void SearchBarWidget::initializeUI() { searchingProgressBar->setMinimum(0); searchingProgressBar->setMaximum(0); searchingProgressBar->hide(); - searchingProgressBar->setMaximumHeight(50); + #ifdef Q_WS_MAEMO_5 + searchingProgressBar->setMaximumHeight(50); + #endif setLayout(verticalLayout); diff --git a/trunk/src/base/gui/WordListProxyStyle.cpp b/trunk/src/base/gui/WordListProxyStyle.cpp new file mode 100644 index 0000000..57d03c4 --- /dev/null +++ b/trunk/src/base/gui/WordListProxyStyle.cpp @@ -0,0 +1,50 @@ +/******************************************************************************* + + This file is part of mDictionary. + + mDictionary is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + mDictionary is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with mDictionary. If not, see . + + Copyright 2010 Comarch S.A. + +*******************************************************************************/ + +//Created by Mateusz Półrola + +#include "WordListProxyStyle.h" + + +WordListProxyStyle::WordListProxyStyle() : + QProxyStyle() +{ + starPixmapOn = QPixmap(":/icons/staron.png"); + starPixmapOff = QPixmap(":/icons/staroff.png"); +} + + +void WordListProxyStyle::drawPrimitive(PrimitiveElement element, + const QStyleOption *option, + QPainter *painter, + const QWidget *widget) const { + if(element == PE_IndicatorCheckBox) { + if(option->state & QStyle::State_On) + painter->drawPixmap(option->rect, starPixmapOn); + else + painter->drawPixmap(option->rect, starPixmapOff); + } + else { + QProxyStyle::drawPrimitive(element, option, painter, widget); + } +} + + diff --git a/trunk/src/base/gui/WordListProxyStyle.h b/trunk/src/base/gui/WordListProxyStyle.h new file mode 100644 index 0000000..dd76e73 --- /dev/null +++ b/trunk/src/base/gui/WordListProxyStyle.h @@ -0,0 +1,44 @@ +/******************************************************************************* + + This file is part of mDictionary. + + mDictionary is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + mDictionary is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with mDictionary. If not, see . + + Copyright 2010 Comarch S.A. + +*******************************************************************************/ + +//Created by Mateusz Półrola + +#ifndef WORDLISTPROXYSTYLE_H +#define WORDLISTPROXYSTYLE_H + +#include +#include + +class WordListProxyStyle : public QProxyStyle +{ +public: + WordListProxyStyle(); + void drawPrimitive(PrimitiveElement element, + const QStyleOption *option, + QPainter *painter, + const QWidget *widget) const; + +private: + QPixmap starPixmapOn; + QPixmap starPixmapOff; +}; + +#endif // WORDLISTPROXYSTYLE_H diff --git a/trunk/src/base/gui/WordListWidget.cpp b/trunk/src/base/gui/WordListWidget.cpp index 5c066a7..d03b9a1 100644 --- a/trunk/src/base/gui/WordListWidget.cpp +++ b/trunk/src/base/gui/WordListWidget.cpp @@ -25,43 +25,39 @@ #include #include "../../includes/translation.h" #include +#include "WordListProxyStyle.h" + #ifdef Q_WS_MAEMO_5 #include #endif WordListWidget::WordListWidget(QWidget *parent): - QListView(parent) { - - wordListModel = new QStringListModel(); + QListWidget(parent) { + connect(this, SIGNAL(itemPressed(QListWidgetItem*)), + this, SLOT(wordPressed(QListWidgetItem*))); - connect(this, SIGNAL(clicked(QModelIndex)), - this, SLOT(itemClicked(QModelIndex))); - setModel(wordListModel); -} + connect(this, SIGNAL(itemClicked(QListWidgetItem*)), + this, SLOT(wordClicked(QListWidgetItem*))); -void WordListWidget::addWord(QString word) { - int wordsCount = wordListModel->rowCount(); - wordListModel->insertRow(wordsCount); + setStyle(new WordListProxyStyle); - QModelIndex newWordIndex = wordListModel->index(wordsCount); + setLayoutDirection(Qt::RightToLeft); - wordListModel->setData(newWordIndex, word); } -void WordListWidget::clear() { - int wordsCount = wordListModel->rowCount(); - - for(int i = 0; i < wordsCount; i++) { - wordListModel->removeRow(0); - } +void WordListWidget::addWord(QString word) { + QListWidgetItem* item = new QListWidgetItem(word, this); + item->setCheckState(Qt::Unchecked); + item->setTextAlignment(Qt::AlignRight); } + void WordListWidget::showSearchResults( - QHash > result) { + QHash > result) { clear(); searchResult.clear(); @@ -70,17 +66,30 @@ void WordListWidget::showSearchResults( for(i = result.begin(); i != result.end(); i++) { addWord(i.key()); } +} - wordListModel->sort(0, Qt::AscendingOrder); - - scrollTo(model()->index(0,0)); - +void WordListWidget::wordClicked(QListWidgetItem *item) { + if(itemState == item->checkState()) { + emit showTranslation( + searchResult[item->data(Qt::DisplayRole).toString()]); + } + else { + if(item->checkState() == Qt::Checked) { + emit addBookmark( + searchResult[item->data(Qt::DisplayRole).toString()]); + } + else { + emit removeBookmark( + searchResult[item->data(Qt::DisplayRole).toString()]); + } + } } -void WordListWidget::itemClicked(QModelIndex index) { - emit showTranslation(searchResult[index.model()->data(index).toString()]); +void WordListWidget::wordPressed(QListWidgetItem *item) { + itemState = item->checkState(); } + void WordListWidget::lockList() { setEnabled(false); } diff --git a/trunk/src/base/gui/WordListWidget.h b/trunk/src/base/gui/WordListWidget.h index d2cff2c..f368653 100644 --- a/trunk/src/base/gui/WordListWidget.h +++ b/trunk/src/base/gui/WordListWidget.h @@ -35,7 +35,7 @@ /*! It allow user to select word to see it's translation or to mark it as "star" */ -class WordListWidget : public QListView { +class WordListWidget : public QListWidget { Q_OBJECT public: explicit WordListWidget(QWidget *parent = 0); @@ -45,6 +45,10 @@ Q_SIGNALS: //! objects void showTranslation(QList); + void addBookmark(QList); + + void removeBookmark(QList); + public Q_SLOTS: //! Shows search results @@ -59,19 +63,15 @@ public Q_SLOTS: //! Unlocks words list void unlockList(); - private Q_SLOTS: - void itemClicked(QModelIndex index); + void wordClicked(QListWidgetItem* item); + void wordPressed(QListWidgetItem* item); private: - //Backbone *backbone; - //words are keeping as QStringListModel which allow to sort them - QStringListModel *wordListModel; void addWord(QString word); - //clears all list of words - void clear(); + + Qt::CheckState itemState; QHash > searchResult; - //QString _exactMatchString; }; #endif // WORDLISTWIDGET_H diff --git a/trunk/src/base/gui/gui.qrc b/trunk/src/base/gui/gui.qrc new file mode 100644 index 0000000..0bd0ca2 --- /dev/null +++ b/trunk/src/base/gui/gui.qrc @@ -0,0 +1,6 @@ + + + staroff.png + staron.png + + diff --git a/trunk/src/base/gui/staroff.png b/trunk/src/base/gui/staroff.png new file mode 100644 index 0000000..7b0c1bc Binary files /dev/null and b/trunk/src/base/gui/staroff.png differ diff --git a/trunk/src/base/gui/staron.png b/trunk/src/base/gui/staron.png new file mode 100644 index 0000000..2291707 Binary files /dev/null and b/trunk/src/base/gui/staron.png differ diff --git a/trunk/src/includes/GUIInterface.h b/trunk/src/includes/GUIInterface.h index 7914ce1..1d8e9fb 100644 --- a/trunk/src/includes/GUIInterface.h +++ b/trunk/src/includes/GUIInterface.h @@ -182,6 +182,8 @@ Q_SIGNALS: /*! \param list of only active dictionaries */ void selectedDictionaries(QList); + + void addToBookmarks(QList); }; #endif // GUIINTERFACE_H diff --git a/trunk/src/plugins/xdxf/src/XdxfCachingDialog.cpp b/trunk/src/plugins/xdxf/src/XdxfCachingDialog.cpp index 2a3b935..e57585f 100644 --- a/trunk/src/plugins/xdxf/src/XdxfCachingDialog.cpp +++ b/trunk/src/plugins/xdxf/src/XdxfCachingDialog.cpp @@ -41,6 +41,11 @@ XdxfCachingDialog::XdxfCachingDialog(XdxfPlugin *parent) : cancelButton = new QPushButton(tr("Cancel")); + cachingLabel = new QLabel(); + cachingLabel->hide(); + + + verticalLayout->addWidget(cachingLabel); verticalLayout->addWidget(cachingProgressBar); verticalLayout->addWidget(cancelButton); @@ -56,11 +61,13 @@ XdxfCachingDialog::XdxfCachingDialog(XdxfPlugin *parent) : void XdxfCachingDialog::updateCachingProgress(int progress, int time) { cachingProgressBar->setValue(progress); + if(!cachingLabel->isVisible()) + cachingLabel->show(); int seconds = float((100 - progress)*time) / (5*1000); - setWindowTitle(tr("Caching dictionary, please wait ") + "( " + - QString::number(seconds) + tr(" seconds left") + " )"); + cachingLabel->setText(tr("Estimated time left: ") + + QString::number(seconds) + tr(" seconds")); } diff --git a/trunk/src/plugins/xdxf/src/xdxfplugin.cpp b/trunk/src/plugins/xdxf/src/xdxfplugin.cpp index 8497d1d..cab4493 100644 --- a/trunk/src/plugins/xdxf/src/xdxfplugin.cpp +++ b/trunk/src/plugins/xdxf/src/xdxfplugin.cpp @@ -405,10 +405,9 @@ bool XdxfPlugin::makeCache(QString dir) { QXmlStreamReader reader(&dictionaryFile); - db.setDatabaseName(cachePathN); if(!db.open()) { - qDebug() << "Database error" << endl; + qDebug() << "Database error" << db.lastError().text() << endl; return false; } QCoreApplication::processEvents(); @@ -433,7 +432,6 @@ bool XdxfPlugin::makeCache(QString dir) { while (!reader.atEnd() && !stopped) { QCoreApplication::processEvents(); - // usleep(50); reader.readNext(); if(reader.tokenType() == QXmlStreamReader::StartElement) { diff --git a/trunk/tests/mDictionaryTests/mDictionaryTests.pro b/trunk/tests/mDictionaryTests/mDictionaryTests.pro index ed2c910..656bb4b 100644 --- a/trunk/tests/mDictionaryTests/mDictionaryTests.pro +++ b/trunk/tests/mDictionaryTests/mDictionaryTests.pro @@ -4,7 +4,7 @@ # #------------------------------------------------- -QT += testlib core +QT += testlib core sql TARGET = mDictionaryTests @@ -16,7 +16,8 @@ TEMPLATE = app SOURCES += tst_Backbone.cpp \ ../../src/base/backbone/backbone.cpp \ - ../../src/base/backbone/History.cpp + ../../src/base/backbone/History.cpp \ + ../../src/base/backbone/Bookmarks.cpp DEFINES += SRCDIR=\\\"$$PWD/\\\" HEADERS += \ @@ -26,9 +27,10 @@ HEADERS += \ ../../src/includes/settings.h \ ../../src/includes/CommonDictInterface.h \ ../../src/includes/History.h \ - TranslationMock.h + TranslationMock.h \ + ../../src/base/backbone/BookmarkTranslations.h \ + ../../src/base/backbone/Bookmarks.h check.target = check check.commands += ./mDictionaryTests QMAKE_EXTRA_TARGETS += check - diff --git a/trunk/trunk.pro b/trunk/trunk.pro index 0739438..7235070 100644 --- a/trunk/trunk.pro +++ b/trunk/trunk.pro @@ -3,5 +3,5 @@ SUBDIRS = tests src check.target = check check.CONFIG = recursive -check.recurse = tests src +check.recurse = src QMAKE_EXTRA_TARGETS += check