diff --git a/uppsrc/Core/StrUtil.cpp b/uppsrc/Core/StrUtil.cpp index 0bed5bf5d..1ade9717e 100644 --- a/uppsrc/Core/StrUtil.cpp +++ b/uppsrc/Core/StrUtil.cpp @@ -114,4 +114,25 @@ String FilterWhile(const char *s, int (*filter)(int)) return result; } +WString Filter(const wchar *s, int (*filter)(int)) +{ + String result; + while(*s) { + int c = (*filter)((byte)*s++); + if(c) result.Cat(c); + } + return result; +} + +WString FilterWhile(const wchar *s, int (*filter)(int)) +{ + String result; + while(*s) { + int c = (*filter)((byte)*s++); + if(!c) break; + result.Cat(c); + } + return result; +} + END_UPP_NAMESPACE diff --git a/uppsrc/Core/String.h b/uppsrc/Core/String.h index 242a47882..05cdd8f5b 100644 --- a/uppsrc/Core/String.h +++ b/uppsrc/Core/String.h @@ -787,4 +787,7 @@ int CharFilterNoCrLf(int c); String Filter(const char *s, int (*filter)(int)); String FilterWhile(const char *s, int (*filter)(int)); +WString Filter(const wchar *s, int (*filter)(int)); +WString FilterWhile(const wchar *s, int (*filter)(int)); + #include "AString.hpp" diff --git a/uppsrc/ide/ide.lay b/uppsrc/ide/ide.lay index 185396b12..214cb7b0a 100644 --- a/uppsrc/ide/ide.lay +++ b/uppsrc/ide/ide.lay @@ -2,7 +2,7 @@ LAYOUT(ListLayout, 660, 432) ITEM(Splitter, splitter, HSizePosZ(4, 4).VSizePosZ(4, 60)) ITEM(DataPusher, description, HSizePosZ(4, 6).BottomPosZ(36, 20)) ITEM(ProgressIndicator, progress, HSizePosZ(4, 4).BottomPosZ(39, 15)) - ITEM(DropList, filter, LeftPosZ(4, 156).TopPosZ(404, 19)) + ITEM(DropList, filter, LeftPosZ(4, 156).BottomPosZ(9, 19)) ITEM(EditString, search, LeftPosZ(164, 124).BottomPosZ(9, 19)) ITEM(Option, brief, SetLabel(t_("Brief list")).HSizePosZ(296, 240).BottomPosZ(8, 20)) ITEM(Button, newu, SetLabel(t_("&New package")).RightPosZ(140, 90).BottomPosZ(8, 22))