[haiku-commits] r35375 - haiku/trunk/src/kits/tracker

  • From: mmlr@xxxxxxxx
  • To: haiku-commits@xxxxxxxxxxxxx
  • Date: Mon, 1 Feb 2010 06:30:08 +0100 (CET)

Author: mmlr
Date: 2010-02-01 06:30:08 +0100 (Mon, 01 Feb 2010)
New Revision: 35375
Changeset: http://dev.haiku-os.org/changeset/35375/haiku

Modified:
   haiku/trunk/src/kits/tracker/CountView.cpp
   haiku/trunk/src/kits/tracker/CountView.h
   haiku/trunk/src/kits/tracker/PoseView.cpp
   haiku/trunk/src/kits/tracker/Utilities.cpp
   haiku/trunk/src/kits/tracker/Utilities.h
Log:
Use the multibyte aware string functions for typeahead search and filtering so
that special characters can be used as well (umlauts for example).


Modified: haiku/trunk/src/kits/tracker/CountView.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/CountView.cpp  2010-02-01 05:27:18 UTC (rev 
35374)
+++ haiku/trunk/src/kits/tracker/CountView.cpp  2010-02-01 05:30:08 UTC (rev 
35375)
@@ -355,17 +355,17 @@
 
 
 void
-BCountView::AddFilterString(const char *string)
+BCountView::AddFilterCharacter(const char *character)
 {
-       fFilterString += string;
+       fFilterString.AppendChars(character, 1);
        Invalidate();
 }
 
 
 void
-BCountView::RemoveFilterString()
+BCountView::RemoveFilterCharacter()
 {
-       fFilterString.Truncate(fFilterString.Length() - 1);
+       fFilterString.TruncateChars(fFilterString.CountChars() - 1);
        Invalidate();
 }
 

Modified: haiku/trunk/src/kits/tracker/CountView.h
===================================================================
--- haiku/trunk/src/kits/tracker/CountView.h    2010-02-01 05:27:18 UTC (rev 
35374)
+++ haiku/trunk/src/kits/tracker/CountView.h    2010-02-01 05:30:08 UTC (rev 
35375)
@@ -63,8 +63,8 @@
        const char *TypeAhead() const;
        bool IsTypingAhead() const;
 
-       void AddFilterString(const char *string);
-       void RemoveFilterString();
+       void AddFilterCharacter(const char *character);
+       void RemoveFilterCharacter();
        void CancelFilter();
        const char *Filter() const;
        bool IsFiltering() const;

Modified: haiku/trunk/src/kits/tracker/PoseView.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/PoseView.cpp   2010-02-01 05:27:18 UTC (rev 
35374)
+++ haiku/trunk/src/kits/tracker/PoseView.cpp   2010-02-01 05:30:08 UTC (rev 
35375)
@@ -6162,9 +6162,9 @@
                                        else
                                                break;
                                } else
-                                       
lastString->Truncate(lastString->Length() - 1);
+                                       
lastString->TruncateChars(lastString->CountChars() - 1);
 
-                               fCountView->RemoveFilterString();
+                               fCountView->RemoveFilterCharacter();
                                FilterChanged();
                                break;
                        }
@@ -6173,7 +6173,7 @@
                                break;
 
                        // remove last char from the typeahead buffer
-                       sMatchString.Truncate(sMatchString.Length() - 1);
+                       sMatchString.TruncateChars(sMatchString.CountChars() - 
1);
 
                        fLastKeyTime = system_time();
 
@@ -6191,23 +6191,20 @@
 
                default:
                {
-                       // handle typeahead selection
+                       // handle typeahead selection / filtering
 
-                       // create a null-terminated version of typed char
-                       char searchChar[4] = { key, 0 };
-
                        if (TrackerSettings().TypeAheadFiltering()) {
                                if (key == ' ' && modifiers() & B_SHIFT_KEY) {
                                        if (fFilterStrings.LastItem()->Length() 
== 0)
                                                break;
 
                                        fFilterStrings.AddItem(new BString());
-                                       fCountView->AddFilterString("|");
+                                       fCountView->AddFilterCharacter("|");
                                        break;
                                }
 
-                               fFilterStrings.LastItem()->Append(searchChar);
-                               fCountView->AddFilterString(searchChar);
+                               fFilterStrings.LastItem()->AppendChars(bytes, 
1);
+                               fCountView->AddFilterCharacter(bytes);
                                FilterChanged();
                                break;
                        }
@@ -6231,9 +6228,9 @@
 
                        // add char to existing matchString or start new match 
string
                        if (eventTime - fLastKeyTime < (doubleClickSpeed * 2))
-                               sMatchString.Append(searchChar);
+                               sMatchString.AppendChars(bytes, 1);
                        else
-                               sMatchString.SetTo(searchChar);
+                               sMatchString.SetToChars(bytes, 1);
 
                        fLastKeyTime = eventTime;
 
@@ -6290,7 +6287,6 @@
        BPose *poseToSelect = NULL;
        float bestScore = -1;
        int32 count = fPoseList->CountItems();
-       size_t matchLength = sMatchString.Length();
 
        // loop through all poses to find match
        for (int32 j = 0; j < CountColumns(); j++) {
@@ -6308,12 +6304,11 @@
                                        text = widget->Text(this);
 
                                if (text != NULL) {
-                                       score = ComputeTypeAheadScore(text, 
sMatchString.String(),
-                                               matchLength);
+                                       score = ComputeTypeAheadScore(text, 
sMatchString.String());
                                }
                        } else {
                                score = 
ComputeTypeAheadScore(pose->TargetModel()->Name(),
-                                       sMatchString.String(), matchLength);
+                                       sMatchString.String());
                        }
 
                        if (score > bestScore) {
@@ -9668,7 +9663,7 @@
                return;
 
        int32 stringCount = fFilterStrings.CountItems();
-       int32 length = fFilterStrings.LastItem()->Length();
+       int32 length = fFilterStrings.LastItem()->CountChars();
 
        if (!fFiltering && length > 0)
                StartFiltering();

Modified: haiku/trunk/src/kits/tracker/Utilities.cpp
===================================================================
--- haiku/trunk/src/kits/tracker/Utilities.cpp  2010-02-01 05:27:18 UTC (rev 
35374)
+++ haiku/trunk/src/kits/tracker/Utilities.cpp  2010-02-01 05:30:08 UTC (rev 
35375)
@@ -1585,8 +1585,7 @@
 
 
 float
-ComputeTypeAheadScore(const char *text, const char *match, size_t matchLength,
-       bool wordMode)
+ComputeTypeAheadScore(const char *text, const char *match, bool wordMode)
 {
        // highest score: exact match
        const char* found = strcasestr(text, match);

Modified: haiku/trunk/src/kits/tracker/Utilities.h
===================================================================
--- haiku/trunk/src/kits/tracker/Utilities.h    2010-02-01 05:27:18 UTC (rev 
35374)
+++ haiku/trunk/src/kits/tracker/Utilities.h    2010-02-01 05:30:08 UTC (rev 
35375)
@@ -759,7 +759,7 @@
 
 extern const float kExactMatchScore;
 float ComputeTypeAheadScore(const char *text, const char *match,
-       size_t matchLength, bool wordMode = false);
+       bool wordMode = false);
 
 } // namespace BPrivate
 


Other related posts: