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