add focus in qml
[mdictionary] / src / mdictionary / qml / SearchBarWidget.qml
index 2210de8..6590e45 100644 (file)
@@ -6,6 +6,8 @@ Rectangle {
     color : myPalette.window;
 
     property alias enableLineEdit: inputSearchText.enabled;
+    property int focusIndex:-1;
+
 
     function setButtonText(string) { searchButton.setText(string) }
     function setEnableHistoryPrev(Boolean) { historyPrevToolButton.enabled = Boolean }
@@ -17,15 +19,63 @@ Rectangle {
     function setLineEditText(string) { inputSearchText.setText(string) }
     function setCompleterText(string) { inputSearchText.setCompleter(string) }
 
+    function setFocus(){
+        if(focusIndex==0){
+            inputSearchText.setFocus();
+            if(!inputSearchText.enabled)
+                focusIndex++;
+        }
+        if(focusIndex==1)
+            clearButton.focus=true;
+
+        if(focusIndex==2){
+            searchButton.focus = true
+            if(!searchButton.enabled)
+                focusIndex++;
+        }
+
+        if(focusIndex==3){
+            historyPrevToolButton.focus = true
+            if(!historyPrevToolButton.enabled)
+                focusIndex++;
+        }
+
+        if(focusIndex==4){
+            historyShowToolButton.focus = true
+            if(!historyShowToolButton.enabled)
+                focusIndex++;
+        }
+
+        if(focusIndex==5){
+            historyNextToolButton.focus = true
+            if(!historyNextToolButton.enabled)
+                focusIndex++;
+        }
+
+        if (focusIndex>5){
+            nextFocus();
+            focusIndex=-1;
+            focus=true;
+        }
+    }
+
+    function focusOff(){ focus=true; focusIndex=-1;}
+
+    signal nextFocus();
+    signal checkFocus();
     signal searchButtonClicked(string text);
     signal historyNextToolButtonClicked;
     signal historyShowToolButtonClicked;
     signal historyPrevToolButtonClicked;
     signal textChange(string text);
-
     signal nextCompleter();
     signal prevCompleter();
 
+    Keys.onTabPressed: {
+        focusIndex++;
+        setFocus();
+    }
+
     MyTextLineEdit{
         id: inputSearchText
         width: (searchBarWidget.width - (searchBarWidget.height*3.5 + searchButton.width + 9));
@@ -33,7 +83,6 @@ Rectangle {
         anchors.left: parent.left
         anchors.verticalCenter: parent.verticalCenter
         onEnterPressed: searchBarWidget.searchButtonClicked(text);
-        focus: searchBarWidget.focus
         useCompleter: true;
         IconButton {
             id: clearButton;
@@ -45,10 +94,13 @@ Rectangle {
             enabled: true;
             pathToIcon: "qrc:/button/go-clear.png";
             onClicked: clear();
+            onActiveFocusChanged:searchBarWidget.checkFocus();
         }
         onTextChange: searchBarWidget.textChange(text)
         onNextCompleter: searchBarWidget.nextCompleter();
         onPrevCompleter: searchBarWidget.prevCompleter();
+        onIsFocused: searchBarWidget.focusIndex=0;
+        onCheckFocus: searchBarWidget.checkFocus();
     }
 
     Item {
@@ -70,6 +122,7 @@ Rectangle {
                 searchBarWidget.searchButtonClicked(inputSearchText.textInLineEdit);
                 inputSearchText.hideCompleter();
             }
+            onActiveFocusChanged:searchBarWidget.checkFocus();
         }
 
         IconButton {
@@ -81,6 +134,7 @@ Rectangle {
             enabled: true;
             pathToIcon: "qrc:/button/go-next.png";
             onClicked: searchBarWidget.historyNextToolButtonClicked();
+            onActiveFocusChanged:searchBarWidget.checkFocus();
         }
 
         IconButton {
@@ -93,6 +147,7 @@ Rectangle {
             enabled: true;
             pathToIcon: "qrc:/button/go-show.png";
             onClicked: searchBarWidget.historyShowToolButtonClicked();
+            onActiveFocusChanged:searchBarWidget.checkFocus();
         }
 
         IconButton {
@@ -105,6 +160,7 @@ Rectangle {
             enabled: true;
             pathToIcon: "qrc:/button/go-previous.png";
             onClicked: searchBarWidget.historyPrevToolButtonClicked();
+            onActiveFocusChanged:searchBarWidget.checkFocus();
         }
     }
 }