bi change + completer in line edit
[mdictionary] / src / mdictionary / gui / SearchBarWidget.cpp
index 9dc1450..338b87a 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,8 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     progressBar->hide();
 
     view= new QDeclarativeView();
+    ctxt = view->rootContext();
+
     view->setSource(QUrl::fromLocalFile("/usr/share/mdictionary/qml/SearchBarWidget.qml"));
     view->setResizeMode(QDeclarativeView::SizeRootObjectToView);
     view->setAlignment(Qt::AlignCenter);
@@ -66,6 +74,12 @@ 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(this, SIGNAL(progresSetMax(QVariant)),
             rootObject2, SLOT(setMax(QVariant)));
@@ -89,6 +103,9 @@ 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(busyTimer, SIGNAL(timeout()),
             this, SLOT(updateBusyTimer()));
 
@@ -96,7 +113,6 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     emit setEnableHistoryShow(false);
     emit setEnableHistoryPrev(false);
 
-    completerModel = new QStringListModel(this);
     connect(&delayTimer, SIGNAL(timeout()),
             this, SLOT(delaySearchTimeout()));
 
@@ -119,7 +135,6 @@ SearchBarWidget::SearchBarWidget(QWidget *parent) : QWidget(parent) {
     connect(&delayTimer, SIGNAL(timeout()),
             this, SLOT(delaySearchTimeout()));
 
-
     searchWordLineEdit->setFocus();
 #endif
 
@@ -132,6 +147,71 @@ SearchBarWidget::~SearchBarWidget() {
 
 }
 
+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);
+        qDebug()<<"index"<<index<<"size"<<completerActualList.size()<<"+1";
+        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);
@@ -192,12 +272,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
@@ -306,13 +380,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