X-Git-Url: http://git.maemo.org/git/?p=mverbiste;a=blobdiff_plain;f=mainwindow.cpp;h=f194fc11923be74874cd2433c12033017fc6305d;hp=dbba68b724028be67c36b71a7d69fa7561b4a954;hb=fc65a0926de9cbfb2f55dd167860170ecc11a3c5;hpb=6b71b328a4ed0cc4e8236fc27f4dd0dc392e1c34 diff --git a/mainwindow.cpp b/mainwindow.cpp index dbba68b..f194fc1 100644 --- a/mainwindow.cpp +++ b/mainwindow.cpp @@ -3,7 +3,6 @@ #include "gui/conjugation.h" #include -#include MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent), ui(new Ui::MainWindow) @@ -30,10 +29,7 @@ void MainWindow::setupcodedUI() btnClear = new QPushButton; btnClear->setIcon(QIcon("/usr/share/icons/hicolor/64x64/hildon/general_delete.png")); wordinput = new QLineEdit; - labVerb = new QLabel(); - labVerb->setMinimumWidth(250); btlayout->addWidget(btnClear); - btlayout->addWidget(labVerb); btlayout->addWidget(wordinput); btnLookup = new QPushButton; // Lookup button btnLookup->setIcon(QIcon("/usr/share/icons/hicolor/64x64/hildon/general_search.png")); @@ -43,7 +39,7 @@ void MainWindow::setupcodedUI() cent->setLayout(mlayout); // Clear the word input when Clear button is tapped - connect(btnClear, SIGNAL(clicked()), this, SLOT(clearResults())); + connect(btnClear, SIGNAL(clicked()), this, SLOT(startAgain())); connect(wordinput, SIGNAL(returnPressed()), this, SLOT(startLookup())); connect(btnLookup, SIGNAL(clicked()), this, SLOT(startLookup())); @@ -52,6 +48,7 @@ void MainWindow::setupcodedUI() MainWindow::~MainWindow() { delete ui; + delete freVerbDic; } void MainWindow::setOrientation(ScreenOrientation orientation) @@ -112,11 +109,6 @@ void MainWindow::showExpanded() void MainWindow::initverbiste() { langCode = "fr"; -} - -void MainWindow::startLookup() -{ - QString input = wordinput->text(); FrenchVerbDictionary::Language lang = FrenchVerbDictionary::parseLanguageCode(langCode); if (lang != FrenchVerbDictionary::FRENCH) @@ -126,6 +118,20 @@ void MainWindow::startLookup() /* Create verb dictionary, accept non-accent input */ freVerbDic = new FrenchVerbDictionary(true); +} + +void MainWindow::startLookup() +{ + QString input = wordinput->text().trimmed(); + if (input.isEmpty()) { + return; + } + + btnLookup->setText(tr("Please wait...")); + btnLookup->setEnabled(false); + clearResults(); + /* Pending the lookup job to the next event loop (redraw the button right now) */ + QApplication::processEvents(QEventLoop::ExcludeUserInputEvents); /* Get input word to look up */ const std::string word = input.toLower().toUtf8().constData(); @@ -134,17 +140,36 @@ void MainWindow::startLookup() * For each possible deconjugation, take the infinitive form and * obtain its complete conjugation. */ - std::vector v; + std::vector infles; bool includePronouns = FALSE; // TODO: Will get this value from external bool isItalian = FALSE; // TODO: Will get this value from external - freVerbDic->deconjugate(word, v); + freVerbDic->deconjugate(word, infles); - std::string prevUTF8Infinitive, prevTemplateName; - for (std::vector::const_iterator it = v.begin(); - it != v.end(); it++) + resultPages->setUpdatesEnabled(false); + std::string prevUTF8Infinitive, prevTemplateName; /* Remember found word + to avoid conjugating again */ + + for (std::vector::const_iterator it = infles.begin(); + it != infles.end(); it++) { const InflectionDesc &d = *it; + +#ifndef QT_NO_DEBUG + qDebug() << ">> Infinitive " << d.infinitive.c_str(); + qDebug() << " Template " << d.templateName.c_str(); +#endif + /* If this infinitive has been conjugated, we skip to the next infinitive */ + if (d.infinitive == prevUTF8Infinitive && d.templateName == prevTemplateName) { + continue; + } + /* FIXME: + * In original source (Verbiste), this checking is done later, + * after getConjugation(). I place it here to avoid calling again + * multitimes getConjugation(), which is very slow. + * We need to test more to see which place is more correct. + */ + VVVS conjug; getConjugation(freVerbDic, d.infinitive, d.templateName, conjug, includePronouns); @@ -157,20 +182,19 @@ void MainWindow::startLookup() } std::string utf8Infinitive = conjug[0][0][0]; - if (utf8Infinitive == prevUTF8Infinitive && d.templateName == prevTemplateName) - // This result is duplicated - continue; +#ifndef QT_NO_DEBUG + qDebug() << " getConjugation() returns:"; + qDebug() << " Infinitive " << utf8Infinitive.c_str() << " at " << timer.elapsed(); + qDebug() << " Template " << d.templateName.c_str(); +#endif - /* Show on GUI */ + /* Add result to GUI (not show yet) */ ResultPage *rsp = addResultPage(utf8Infinitive); - //QString infVerb = QString::fromUtf8(utf8Infinitive.c_str()); - //labVerb->setText(infVerb); /* Get modes and tenses of the verb */ int i = 0; for (VVVS::const_iterator t = conjug.begin(); - t != conjug.end(); t++, i++) - { + t != conjug.end(); t++, i++) { if (i == 1) i = 4; else if (i == 11) @@ -179,18 +203,23 @@ void MainWindow::startLookup() int row = i / 4; int col = i % 4; - qDebug() << row << col; std::string utf8TenseName = getTenseNameForTableCell(row, col, isItalian); if (utf8TenseName.empty()) continue; - qDebug() << utf8TenseName.c_str(); + QVBoxLayout *cell = makeResultCell(*t, utf8TenseName, word, freVerbDic); + rsp->grid->addLayout(cell, row, col); } - + /* Show the result on GUI */ + rsp->packContent(); prevUTF8Infinitive = utf8Infinitive; prevTemplateName = d.templateName; } + /* Enable the button again */ + btnLookup->setEnabled(true); + btnLookup->setText(""); + resultPages->setUpdatesEnabled(true); } ResultPage* MainWindow::addResultPage(const std::string &labelText) @@ -203,22 +232,56 @@ ResultPage* MainWindow::addResultPage(const std::string &labelText) void MainWindow::clearResults() { - wordinput->clear(); - labVerb->clear(); - while (resultPages->count()) { int lastIndex = resultPages->count() - 1; resultPages->widget(lastIndex)->deleteLater(); resultPages->removeTab(lastIndex); } +} + +void MainWindow::startAgain() +{ + wordinput->clear(); + clearResults(); wordinput->setFocus(); + btnLookup->setEnabled(true); +} + +QVBoxLayout* MainWindow::makeResultCell(const VVS &tenseIterator, + const std::string &tenseName, + const std::string &inputWord, + FrenchVerbDictionary *verbDict) +{ + /* Mode & Tense name */ + QLabel *tenseLabel = new QLabel(); + tenseLabel->setText(QString::fromUtf8(tenseName.c_str())); + tenseLabel->setStyleSheet("QLabel {background-color: #44A51C; " + "padding-left: 10px; padding-right: 10px}"); + + /* Conjugaison */ + QVBoxLayout *vbox = new QVBoxLayout(); + vbox->addWidget(tenseLabel); + QVector persons = qgetConjugates(*verbDict, tenseIterator,inputWord, + "", ""); + for (int i = 0; i < persons.size(); ++i) { + QLabel *lb = new QLabel(persons.at(i)); + lb->setMargin(4); + vbox->addWidget(lb, 1); + } + return vbox; } /**** For ResultPage class ****/ ResultPage::ResultPage() : page(new QScrollArea), - table(new QTableWidget) + grid(new QGridLayout) { } +void ResultPage::packContent() +{ + QWidget *immediate = new QWidget(); + immediate->setLayout(grid); + page->setWidget(immediate); +}