[haiku-webkit-commits] r501 - webkit/trunk/WebKit/haiku/WebPositive/autocompletion

  • From: webkit@xxxxxxxxxxxxxxx
  • To: haiku-webkit-commits@xxxxxxxxxxxxx
  • Date: Tue, 18 May 2010 18:59:34 +0000

Author: stippi
Date: Tue May 18 18:59:34 2010
New Revision: 501
URL: http://mmlr.dyndns.org/changeset/501

Log:
Extend the auto-completion framework in order to support using page-up/down
to navigate the choices list.

Modified:
   webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.cpp
   webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.h
   
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.cpp
   
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.h
   webkit/trunk/WebKit/haiku/WebPositive/autocompletion/TextViewCompleter.cpp

Modified: webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.cpp      
Tue May 18 16:59:34 2010        (r500)
+++ webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.cpp      
Tue May 18 18:59:34 2010        (r501)
@@ -158,6 +158,36 @@
 }
 
 
+int32
+BAutoCompleter::CountChoices() const
+{
+       if (fCompletionStyle && fCompletionStyle->GetChoiceModel())
+               return fCompletionStyle->GetChoiceModel()->CountChoices();
+       else
+               return 0;
+}
+
+
+int32
+BAutoCompleter::CountVisibleChoices() const
+{
+       if (fCompletionStyle && fCompletionStyle->GetChoiceView())
+               return fCompletionStyle->GetChoiceView()->CountVisibleChoices();
+       else
+               return 0;
+}
+
+
+int32
+BAutoCompleter::SelectedChoiceIndex() const
+{
+       if (fCompletionStyle)
+               return fCompletionStyle->SelectedChoiceIndex();
+       else
+               return -1;
+}
+
+
 void
 BAutoCompleter::ApplyChoice(bool hideChoices)
 {

Modified: webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.h
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.h        
Tue May 18 16:59:34 2010        (r500)
+++ webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleter.h        
Tue May 18 18:59:34 2010        (r501)
@@ -83,6 +83,7 @@
                                                                        = 0;
                virtual void                    HideChoices() = 0;
                virtual bool                    ChoicesAreShown() = 0;
+               virtual int32                   CountVisibleChoices() const = 0;
        };
 
        class CompletionStyle {
@@ -97,6 +98,7 @@
                virtual bool                    SelectNext(bool wrap = false) = 
0;
                virtual bool                    SelectPrevious(bool wrap = 
false) = 0;
                virtual bool                    IsChoiceSelected() const = 0;
+               virtual int32                   SelectedChoiceIndex() const = 0;
 
                virtual void                    ApplyChoice(bool hideChoices = 
true) = 0;
                virtual void                    CancelChoice() = 0;
@@ -137,6 +139,9 @@
                        bool                            SelectNext(bool wrap = 
false);
                        bool                            SelectPrevious(bool 
wrap = false);
                        bool                            IsChoiceSelected() 
const;
+                       int32                           CountChoices() const;
+                       int32                           CountVisibleChoices() 
const;
+                       int32                           SelectedChoiceIndex() 
const;
                
                        void                            ApplyChoice(bool 
hideChoices = true);
                        void                            CancelChoice();

Modified: 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.cpp
==============================================================================
--- 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.cpp
   Tue May 18 16:59:34 2010        (r500)
+++ 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.cpp
   Tue May 18 18:59:34 2010        (r501)
@@ -105,6 +105,13 @@
 }
 
 
+int32
+BDefaultCompletionStyle::SelectedChoiceIndex() const
+{
+       return fSelectedIndex;
+}
+
+
 void
 BDefaultCompletionStyle::ApplyChoice(bool hideChoices)
 {
@@ -187,13 +194,13 @@
 // #pragma mark - BDefaultChoiceView::ListView
 
 
-static const int32 BM_INVOKED = 'bmin';
+static const int32 MSG_INVOKED = 'invk';
 
 
 BDefaultChoiceView::ListView::ListView(
                BAutoCompleter::CompletionStyle* completer)
        :
-       BListView(BRect(0,0,100,100), "ChoiceViewList"),
+       BListView(BRect(0, 0, 100, 100), "ChoiceViewList"),
        fCompleter(completer)
 {
        // we need to check if user clicks outside of window-bounds:
@@ -205,7 +212,7 @@
 BDefaultChoiceView::ListView::AttachedToWindow()
 {
        SetTarget(this);
-       SetInvocationMessage(new BMessage(BM_INVOKED));
+       SetInvocationMessage(new BMessage(MSG_INVOKED));
        BListView::AttachedToWindow();
 }
 
@@ -221,7 +228,7 @@
 BDefaultChoiceView::ListView::MessageReceived(BMessage* message)
 {
        switch(message->what) {
-               case BM_INVOKED:
+               case MSG_INVOKED:
                        fCompleter->ApplyChoice();
                        break;
                default:
@@ -316,7 +323,8 @@
 BDefaultChoiceView::BDefaultChoiceView()
        :
        fWindow(NULL),
-       fListView(NULL)
+       fListView(NULL),
+       fMaxVisibleChoices(5)
 {
        
 }
@@ -359,7 +367,7 @@
 
        fListView = new ListView(completer);
        int32 count = choiceModel->CountChoices();
-       for(int32 i=0; i<count; ++i) {
+       for(int32 i = 0; i<count; ++i) {
                fListView->AddItem(
                        new ListItem(choiceModel->ChoiceAt(i))
                );
@@ -370,7 +378,7 @@
                        | B_AVOID_FOCUS | B_ASYNCHRONOUS_CONTROLS);
        fWindow->AddChild(fListView);
 
-       int32 visibleCount = min_c(count, 5);
+       int32 visibleCount = min_c(count, fMaxVisibleChoices);
        float listHeight = fListView->ItemFrame(visibleCount - 1).bottom + 1;
 
        BRect pvRect = editView->GetAdjustmentFrame();
@@ -407,3 +415,31 @@
        return (fWindow != NULL);
 }
 
+
+int32
+BDefaultChoiceView::CountVisibleChoices() const
+{
+       return min_c(fMaxVisibleChoices, fListView->CountItems());
+}
+
+
+void
+BDefaultChoiceView::SetMaxVisibleChoices(int32 choices)
+{
+       if (choices < 1)
+               choices = 1;
+       if (choices == fMaxVisibleChoices)
+               return;
+
+       fMaxVisibleChoices = choices;
+
+       // TODO: Update live?
+}
+
+
+int32
+BDefaultChoiceView::MaxVisibleChoices() const
+{
+       return fMaxVisibleChoices;
+}
+

Modified: 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.h
==============================================================================
--- 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.h 
    Tue May 18 16:59:34 2010        (r500)
+++ 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/AutoCompleterDefaultImpl.h 
    Tue May 18 18:59:34 2010        (r501)
@@ -35,6 +35,7 @@
        virtual bool                            SelectNext(bool wrap = false);
        virtual bool                            SelectPrevious(bool wrap = 
false);
        virtual bool                            IsChoiceSelected() const;
+       virtual int32                           SelectedChoiceIndex() const;
 
        virtual void                            ApplyChoice(bool hideChoices = 
true);
        virtual void                            CancelChoice();
@@ -60,6 +61,7 @@
                virtual void                    MessageReceived(BMessage* msg);
                virtual void                    MouseDown(BPoint point);
                virtual void                    AttachedToWindow();
+
        private:
                                BAutoCompleter::CompletionStyle* fCompleter;
        };
@@ -84,10 +86,15 @@
                                                                        
BAutoCompleter::CompletionStyle* completer);
        virtual void                            HideChoices();
        virtual bool                            ChoicesAreShown();
+       virtual int32                           CountVisibleChoices() const;
+
+                               void                    
SetMaxVisibleChoices(int32 choices);
+                               int32                   MaxVisibleChoices() 
const;
 
 private:
                        BWindow*                        fWindow;
                        ListView*                       fListView;
+                       int32                           fMaxVisibleChoices;
 };
 
 #endif // _AUTO_COMPLETER_DEFAULT_IMPL_H

Modified: 
webkit/trunk/WebKit/haiku/WebPositive/autocompletion/TextViewCompleter.cpp
==============================================================================
--- webkit/trunk/WebKit/haiku/WebPositive/autocompletion/TextViewCompleter.cpp  
Tue May 18 16:59:34 2010        (r500)
+++ webkit/trunk/WebKit/haiku/WebPositive/autocompletion/TextViewCompleter.cpp  
Tue May 18 18:59:34 2010        (r501)
@@ -122,6 +122,23 @@
                        // See above.
                        ApplyChoice(false);
                        return B_SKIP_MESSAGE;
+               case B_PAGE_UP:
+               {
+                       int32 index = SelectedChoiceIndex() - 
CountVisibleChoices();
+                       index = max_c(index, 0);
+                       Select(index);
+                       ApplyChoice(false);
+                       return B_SKIP_MESSAGE;
+               }
+               case B_PAGE_DOWN:
+               {
+                       int32 index = SelectedChoiceIndex() + 
CountVisibleChoices();
+                       index = min_c(index, CountChoices() - 1);
+                       Select(index);
+                       ApplyChoice(false);
+                       return B_SKIP_MESSAGE;
+               }
+
                case B_ESCAPE:
                        CancelChoice();
                        return B_SKIP_MESSAGE;

Other related posts:

  • » [haiku-webkit-commits] r501 - webkit/trunk/WebKit/haiku/WebPositive/autocompletion - webkit