Merge branch 'qml'
[mdictionary] / src / mdictionary / gui / SearchBarWidget.cpp
index 9dc1450..7e9e16d 100644 (file)
 
 
 SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
-    qDebug()<<"test1";
+
+    completerModel = new QStringList;
+    lineEditCompleter = new QCompleter(this);
+    lineEditCompleter->setModel(new QStringListModel(*completerModel));
+    lineEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
+    lineEditCompleter->setCompletionMode(QCompleter::InlineCompletion);
+
 #ifndef Q_WS_MAEMO_5
     this->setMaximumHeight(50);
     busyTimer=new QTimer;
@@ -45,6 +51,9 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     progressBar->hide();
 
     view= new QDeclarativeView();
+    ctxt = view->rootContext();
+    ctxt->setContextProperty("focusss",true);
+
     view->setSource(QUrl::fromLocalFile("/usr/share/mdictionary/qml/SearchBarWidget.qml"));
     view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
     view->setAlignment(Qt::AlignCenter);
@@ -66,6 +75,16 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
             this, SIGNAL(historyPrev()));
     connect(rootObject, SIGNAL(historyShowToolButtonClicked()),
             this, SLOT(showHistoryButtonClicked()));
+    connect(rootObject, SIGNAL(textChange(QString)),
+            this, SLOT(textChange(QString)));
+    connect(rootObject, SIGNAL(nextCompleter()),
+            this, SLOT(nextCompleter()));
+    connect(rootObject, SIGNAL(prevCompleter()),
+            this, SLOT(prevCompleter()));
+    connect(rootObject, SIGNAL(checkFocus()),
+            this, SLOT(checkFocus()));
+    connect(rootObject, SIGNAL(nextFocus()),
+            this, SLOT(nextFocus()));
 
     connect(this, SIGNAL(progresSetMax(QVariant)),
             rootObject2, SLOT(setMax(QVariant)));
@@ -89,6 +108,11 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     connect(this, SIGNAL(setLineEditEnables(QVariant)),
             rootObject, SLOT(setEnableLineEdit(QVariant)));
 
+    connect(this, SIGNAL(setCompleterText(QVariant)),
+            rootObject, SLOT(setCompleterText(QVariant)));
+    connect(this, SIGNAL(focusOff()),
+            rootObject, SLOT(focusOff()));
+
     connect(busyTimer, SIGNAL(timeout()),
             this, SLOT(updateBusyTimer()));
 
@@ -96,12 +120,9 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     emit setEnableHistoryShow(false);
     emit setEnableHistoryPrev(false);
 
-    completerModel = new QStringListModel(this);
     connect(&delayTimer, SIGNAL(timeout()),
             this, SLOT(delaySearchTimeout()));
 
-    view->setFocus();
-
 #else
     initializeUI();
     connect(searchPushButton, SIGNAL(clicked()),
@@ -119,10 +140,9 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     connect(&delayTimer, SIGNAL(timeout()),
             this, SLOT(delaySearchTimeout()));
 
-
     searchWordLineEdit->setFocus();
 #endif
-
+    setFocus();
     busy = false;
     setEnabled(true);
     updateHistoryButtons(false,false,false);
@@ -132,8 +152,80 @@ SearchBarWidget::~SearchBarWidget() {
 
 }
 
+void SearchBarWidget::checkFocus(){
+    if(focusWidget()!=QApplication::focusWidget())
+        emit focusOff();
+}
+
+void SearchBarWidget::nextFocus(){
+    parentWidget()->nextInFocusChain()->setFocus();
+}
+
+void SearchBarWidget::textChange(QString text){
+    QLineEdit line;
+    QString toSend="";
+    QString tempString;
+    actualString=text;
+    completerActualList.clear();
+
+    line.setCompleter(lineEditCompleter);
+    line.completer()->setCompletionPrefix(text);
+    for (int i = 0; lineEditCompleter->setCurrentRow(i); i++)
+        completerActualList.append(lineEditCompleter->currentCompletion());
+
+    completerActualList.sort();
+    if(completerActualList.contains(preferedCompliter)){
+        tempString = preferedCompliter;
+        toSend = tempString.remove(0,text.size());
+        emit setCompleterText(toSend);
+    }
+    else if(completerActualList.size()>0 && text.size()>0){
+        toSend = completerActualList.at(0);
+        preferedCompliter= toSend;
+        toSend=toSend.remove(0,text.size());
+        if(toSend.size()>0)
+            emit setCompleterText(toSend);
+        else if(completerActualList.size()>1){
+            toSend = completerActualList.at(1);
+            preferedCompliter= toSend;
+            toSend=toSend.remove(0,text.size());
+            emit setCompleterText(toSend);
+        }
+    }
+    else{
+        preferedCompliter="";
+        emit setCompleterText(toSend);
+    }
+}
+
+void SearchBarWidget::prevCompleter(){
+    QString tempString;
+    if(!preferedCompliter.isEmpty()){
+        int index = completerActualList.indexOf(preferedCompliter);
+        if(index!=-1 && completerActualList.size()>index+1){
+            preferedCompliter = completerActualList.at(index+1);
+            tempString=preferedCompliter;
+            QString toSend = tempString.remove(0,actualString.size());
+            emit setCompleterText(toSend);
+        }
+    }
+}
+
+void SearchBarWidget::nextCompleter(){
+    QString tempString;
+    if(!preferedCompliter.isEmpty()){
+        int index = completerActualList.indexOf(preferedCompliter);
+        if(index>0){
+            preferedCompliter = completerActualList.at(index-1);
+            tempString=preferedCompliter;
+            QString toSend = tempString.remove(0,actualString.size());
+            emit setCompleterText(toSend);
+        }
+    }
+}
+
+
 QIcon SearchBarWidget::generateIcon(QIcon original, qreal rotation) {
-    qDebug()<<"test2";
     QPixmap p = original.pixmap(64);
 
     if(rotation != 0) {
@@ -170,7 +262,6 @@ QIcon SearchBarWidget::generateIcon(QIcon original, qreal rotation) {
 }
 
 void SearchBarWidget::setFocus() {
-    qDebug()<<"test3";
 #ifndef Q_WS_MAEMO_5
         view->setFocus();
 #else
@@ -179,7 +270,6 @@ void SearchBarWidget::setFocus() {
 }
 
 void SearchBarWidget::initializeUI() {
-    qDebug()<<"test4";
 #ifdef Q_WS_MAEMO_5
     setMaximumHeight(150);
 
@@ -192,12 +282,6 @@ void SearchBarWidget::initializeUI() {
     searchWordLineEdit = new QLineEdit;
     searchWordLineEdit->setMinimumWidth(250);
 
-    completerModel = new QStringListModel(this);
-
-    lineEditCompleter = new QCompleter(searchWordLineEdit);
-    lineEditCompleter->setModel(completerModel);
-    lineEditCompleter->setCaseSensitivity(Qt::CaseInsensitive);
-    lineEditCompleter->setCompletionMode(QCompleter::InlineCompletion);
     searchWordLineEdit->setCompleter(lineEditCompleter);
 
     #ifndef Q_WS_MAEMO_5
@@ -286,7 +370,6 @@ void SearchBarWidget::initializeUI() {
 }
 
 void SearchBarWidget::searchButtonClicked(QString text) {
-    qDebug()<<"test5";
     if(busy)
         Q_EMIT stopSearching();
     else
@@ -294,7 +377,6 @@ void SearchBarWidget::searchButtonClicked(QString text) {
 }
 
 void SearchBarWidget::searchPushButtonClicked() {
-    qDebug()<<"test6";
 #ifdef Q_WS_MAEMO_5
     if(busy) {
         Q_EMIT stopSearching();
@@ -306,13 +388,14 @@ void SearchBarWidget::searchPushButtonClicked() {
 }
 
 void SearchBarWidget::search(QString word) {
-    qDebug()<<"test7";
-    qDebug()<<word;
     if(!busy && !word.isEmpty()) {
-        completerModel->insertRow(completerModel->rowCount());
-        QModelIndex index=completerModel->index(completerModel->rowCount() -1);
-        completerModel->setData(index, word);
-
+        while(word.lastIndexOf(" ")==word.size()-1 && word.size()>0)
+            word=word.remove(word.size()-1,1);
+        if(!completerModel->contains(word))
+            completerModel->append(word);
+        QAbstractItemModel *temp=lineEditCompleter->model();
+        lineEditCompleter->setModel(new QStringListModel(*completerModel));
+        delete temp;
 #ifndef Q_WS_MAEMO_5
         emit setLineEditText(word);
 #else
@@ -323,7 +406,6 @@ void SearchBarWidget::search(QString word) {
 }
 
 void SearchBarWidget::searchDelay(QString word) {
-    qDebug()<<"test8";
     if(!busy && !word.isEmpty()) {
         #ifndef Q_WS_MAEMO_5
             emit setLineEditText(word);
@@ -339,7 +421,6 @@ void SearchBarWidget::searchDelay(QString word) {
 }
 
 void SearchBarWidget::delaySearchTimeout() {
-    qDebug()<<"test9";
     delayTimer.stop();
     if(!busy) {
         Q_EMIT searchForTranslations(delayString);
@@ -347,11 +428,9 @@ void SearchBarWidget::delaySearchTimeout() {
 }
 
 void SearchBarWidget::setEnabled(bool enabled) {
-    qDebug()<<"test10";
 #ifndef Q_WS_MAEMO_5
     emit setLineEditEnables(enabled);
     if(!enabled) {
-        qDebug()<<"tu???";
         emit setEnableHistoryNext(false);
         emit setEnableHistoryShow(false);
         emit setEnableHistoryPrev(false);
@@ -364,11 +443,9 @@ void SearchBarWidget::setEnabled(bool enabled) {
         historyShowToolButton->setEnabled(false);
     }
 #endif
-qDebug()<<"tu2???";
 }
 
 void SearchBarWidget::setBusy() {
-    qDebug()<<"test11";
     if(busy) return;
 
 #ifndef Q_WS_MAEMO_5
@@ -391,7 +468,6 @@ void SearchBarWidget::setBusy() {
 }
 
 void SearchBarWidget::updateBusyTimer(){
-    qDebug()<<"test12";
     if(progressMax==true){
         emit progresSetValue2(0);
         progressMax=false;
@@ -404,7 +480,6 @@ void SearchBarWidget::updateBusyTimer(){
 }
 
 void SearchBarWidget::setIdle() {
-    qDebug()<<"test13";
     if(!busy) return;
 #ifndef Q_WS_MAEMO_5
     progressBar->hide();
@@ -423,7 +498,6 @@ void SearchBarWidget::setIdle() {
 
 
 void SearchBarWidget::clearSearchWordToolButtonClicked() {
-    qDebug()<<"test14";
 #ifdef Q_WS_MAEMO_5
     searchWordLineEdit->clear();
 #endif
@@ -432,7 +506,6 @@ void SearchBarWidget::clearSearchWordToolButtonClicked() {
 
 
 void SearchBarWidget::updateHistoryButtons(bool prev, bool next, bool list) {
-    qDebug()<<"test15";
     if(!busy) {
         #ifndef Q_WS_MAEMO_5
             emit setEnableHistoryNext(next);
@@ -447,7 +520,6 @@ void SearchBarWidget::updateHistoryButtons(bool prev, bool next, bool list) {
 }
 
 void SearchBarWidget::showHistoryButtonClicked() {
-    qDebug()<<"test16";
 #ifndef Q_WS_MAEMO_5
     QPoint p=view->pos(); // = historyShowToolButton->pos();
     p=mapToGlobal(p);