moin moin zusammen,
wenn ich den Focus auf ein gefülltes ListIconGadget habe und irgendwas eintippe, öffnet sich ja unten ein kleines Stringedit, welches meinen getippten Text aufnimmt.
Wie krieg ich das nun hin, dass mein ListIconGadget während der Eingabe zum passenden Listen-Eintrag hüpft (wenn vorhanden).
Von allein tut es das ListIconGadget unter Linux nicht.
Ich muß sicherlich in der Ereignisschleife dieses Stringedit abfragen und dann im ListIconGadget den entsprechenden Eintrag suchen und hinscrollen.
Aber wie komm ich an dieses Stringedit ran, um es abzufragen?
Danke & Gruß
Jörg
ListIconGadget Navigation / Schnellsuche
-
- Beiträge: 64
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate
ListIconGadget Navigation / Schnellsuche
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Re: ListIconGadget Navigation / Schnellsuche
Hallo jogo
Da dieses kleine Stringedit vom System bereit gestellt wird, musst du es per API abfragen
Hier ein Beispiel aus der PureBasic Linux API Libraries (http://www.chabba.de/LinuxAPI.html)
Walter
Da dieses kleine Stringedit vom System bereit gestellt wird, musst du es per API abfragen
Hier ein Beispiel aus der PureBasic Linux API Libraries (http://www.chabba.de/LinuxAPI.html)
Code: Alles auswählen
; Module/File: LV_SearchNative.pb
; Function: native Search in ListViewGadget - Linux
; Author: Omi
; Date: Aug. 16, 2014
; Version: 0.1
; Target Compiler: PureBasic 5.22/5.31/5.40
; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni
;--------------------------------------------------------------
EnableExplicit
;Window Variablen
#MainWin= 0
#LIG= 0
#Txt= 1
#WinX= 200
#WinY= 200
#WinW= 500
#WinH= 400
Global.i gEvent, gQuit
Global.s Dim Zeile(20)
DeclareC SearchInTreeView(*model, column, *key, iter, *search_data)
Procedure CreateWindow_Main()
Protected.i I
If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "native Search in LVG", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListViewGadget(#LIG, 5, 30, 480, 355)
TextGadget(#Txt, 5, 5, 300, 20, "select row and type the search entry ...")
Restore Surnames
For I= 0 To 20
Read.s Zeile(I)
Next I
SortArray(Zeile(), #PB_Sort_NoCase)
For I= 0 To 20
AddGadgetItem(#LIG, -1, Zeile(I))
Next I
;gtk_tree_view_set_enable_search_(GadgetID(#LIG), #True); must be ON
gtk_tree_view_set_search_column_(GadgetID(#LIG), 0); set column for search - must be 0 in LVG
gtk_tree_view_set_search_equal_func_(GadgetID(#LIG), @SearchInTreeView(), #Null, 0); set function for verification
EndIf
EndProcedure
Procedure.s UTF8ToSys(UTF8.s); converts UTF8 to current Std.String-Mode
Protected *mem= AllocateMemory(StringByteLength(UTF8, #PB_UTF8) + 1)
Protected *len= PokeS(*mem, UTF8, -1)
Protected.s SAscii= PeekS(*mem, -1, #PB_UTF8)
FreeMemory(*mem)
ProcedureReturn SAscii
EndProcedure
ProcedureC SearchInTreeView(*model, column, *key, iter, *search_data)
; every path (line) which partially agrees in systemsearch is sent to this function
; om every change of editfield
Protected.i I, Indices, Found= #True
Protected *path
Protected.s Search= PeekS(*key); current search-string in UTF8-Format
Search= UTF8ToSys(Search); convert search-string to System-String-Mode
*path= gtk_tree_model_get_path_(*model, iter); get path from iter
Indices= PeekL(gtk_tree_path_get_indices_(*Path)); get index (LVG-line) from path
If FindString(GetGadgetItemText(#LIG, Indices, column), Search, 1, #PB_String_NoCase); own check to verify the suggestion
Found= #False
EndIf
ProcedureReturn Found; #False = Ok !
EndProcedure
CreateWindow_Main()
Repeat
gEvent= WaitWindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
gQuit= #True
EndSelect
Until gQuit
DataSection
Surnames:
Data.s "Bauer", "Müller", "Meier", "Maier", "Huber",
"Schmidt", "Schreiner", "Taler", "Bach", "Binder",
"Hofer", "Schneider", "Bader", "Berger", "Klein",
"Groß", "Kaiser", "König", "Graf", "Weber", "Urban"
EndDataSection
Lesen bei schlechten Lichtverhältnissen ist nicht schlecht für die Augen, sondern trainiert sie sogar.
Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
Linux Ubuntu Mate 18.04
PB 5.71
Intel i5
-
- Beiträge: 64
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate
Re: ListIconGadget Navigation / Schnellsuche
Danke Walter, jetzt hab ich endlich mal einen Ansatz, in welche Richtung die Lösung liegt. Hab gesucht wie ein Guppy - PB-Hilfe, Netz, etc. - hab schon gedacht, ich bin bekloppt.
Bin nicht drauf gekommen, dass dieses Stringedit garnicht direkt von PB erzeugt wird.
Werde dann mal experimentieren & schauen, wie ich klar komm.
Muss WE arbeiten - meld mich dann...
Gruß Jörg
PS:
grad noch schnell getestet: dein Beispiel funktioniert auf Anhieb perfekt. Die Logik hab ich soweit verstanden (hoffe ich) - feine Sache
werde das als nächsten Schritt in mein Projekt einbauen - bin gespannt..
Bin nicht drauf gekommen, dass dieses Stringedit garnicht direkt von PB erzeugt wird.
Werde dann mal experimentieren & schauen, wie ich klar komm.
Muss WE arbeiten - meld mich dann...
Gruß Jörg
PS:
grad noch schnell getestet: dein Beispiel funktioniert auf Anhieb perfekt. Die Logik hab ich soweit verstanden (hoffe ich) - feine Sache
werde das als nächsten Schritt in mein Projekt einbauen - bin gespannt..
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
-
- Beiträge: 64
- Registriert: 22.11.2020 20:05
- Computerausstattung: 'ne Handvoll gebrauchte Laptops & PCs mit Mint Mate
Re: ListIconGadget Navigation / Schnellsuche
So! Ist eingebaut & funktioniert einwandfrei.
Danke nochmals für den Tip & Dank an Omi für den Code.
Rein zur Info:
Da ich ja für mein Projekt das ListIconGadget verwende, hab ich bei chabba.de auch den entsprechenden angepassten Code genommen.
Ist im groben das gleiche Prinzip, aber für ListIconGadget spezialisiert.
Danke nochmals für den Tip & Dank an Omi für den Code.
Rein zur Info:
Da ich ja für mein Projekt das ListIconGadget verwende, hab ich bei chabba.de auch den entsprechenden angepassten Code genommen.
Ist im groben das gleiche Prinzip, aber für ListIconGadget spezialisiert.
Code: Alles auswählen
; Module/File: LIG_SearchNative.pb
; Function: Native Search in LIG-column - Linux
; Author: Omi
; Date: Dec. 09, 2014
; Version: 0.3; path_free, PeekS(*key, -1, #PB_UTF8)
; Target Compiler: PureBasic 5.22/5.31/5.40
; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni
;--------------------------------------------------------------
EnableExplicit
; Object constants
#MainWin= 0
#LIG= 0
#Txt= 1
#WinX= 200
#WinY= 200
#WinW= 500
#WinH= 400
Global.i gEvent, gQuit
Global.s Dim Zeile(20)
ProcedureC Callback_SearchInTreeView(*model, column, *key, iter, *search_data)
; every path (line) which partially agrees in systemsearch is sent to this function
; on every change of editfield
Protected.i I, Found= #True
Protected.l Indices
Protected path
Protected.s Search= PeekS(*key, -1, #PB_UTF8); current search-string in UTF8-Format
path = gtk_tree_model_get_path_(*model, iter); get path from iter,
Indices= PeekL(gtk_tree_path_get_indices_(path)); then index (LIG-line) from path
If FindString(GetGadgetItemText(#LIG, Indices, column), Search, 1, #PB_String_NoCase); own check to verify the suggestion
Found= #False
EndIf
gtk_tree_path_free_(path); forgot it till V0.2
ProcedureReturn Found; #False = Ok !
EndProcedure
Procedure CreateWindow_Main()
Protected.i I, O
If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "native Search in LIG", #PB_Window_SystemMenu | #PB_Window_ScreenCentered)
ListIconGadget(#LIG, 5, 30, 480, 355, "column 1", 100, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines)
TextGadget(#Txt, 5, 5, 300, 20, "select row and type the search item ...")
For O= 1 To 2
AddGadgetColumn(#LIG, O, "column "+Str(O+ 1), 100)
Next O
Restore Surnames
For I= 0 To 20
Read.s Zeile(I)
Next I
SortArray(Zeile(), #PB_Sort_NoCase)
For I= 0 To 20
AddGadgetItem(#LIG, -1, Zeile(I))
Next I
;gtk_tree_view_set_enable_search_(GadgetID(#LIG), #True); must be ON
gtk_tree_view_set_search_column_(GadgetID(#LIG), 0); set column 0 for search
gtk_tree_view_set_search_equal_func_(GadgetID(#LIG), @Callback_SearchInTreeView(), #Null, 0); set function for verification
EndIf
EndProcedure
CreateWindow_Main()
Repeat
gEvent= WaitWindowEvent()
Select gEvent
Case #PB_Event_CloseWindow
gQuit= #True
EndSelect
Until gQuit
End
DataSection
Surnames:
Data.s "Bauer", "Müller", "Meier", "Maier", "Huber",
"Schmidt", "Schreiner", "Taler", "Bach", "Binder",
"Hofer", "Schneider", "Bader", "Berger", "Klein",
"Groß", "Kaiser", "König", "Graf", "Weber", "Zauner"
EndDataSection
--
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02
Ideen gibt es viele - man muss sie nur haben...
Mint 18.3/19.3/21.x/LMDE5 // PureBasic 5.73 / 6.02