; Module/File: LIG_ColumnSort_Self1.pb ; Function: LIG: Sortiert mit eigener Routine, Darstellung übers System - Linux ; Author: Omi, sorting based on hjbremer-code ; Date: Oct. 25, 2014 ; Version: 0.4 (Unicode) ; Target Compiler: PureBasic 5.22/5.31 ; Target OS: Linux: (X/K/L)ubuntu, Mint, 32/64, Ascii/Uni ;-------------------------------------------------------------- ;needs big update EnableExplicit ImportC "" gtk_tree_view_column_get_tree_view(*tree_column.GtkTreeViewColumn) g_signal_connect(*instance, detailed_signal.p-utf8, *c_handler, *data, destroy= 0, flags= 0) As "g_signal_connect_data" EndImport ;Window Variablen #MainWin= 0 #LIG= 0 #WinX= 200 #WinY= 200 #WinW= 500 #WinH= 400 Global.i gEvent, gQuit Procedure TV_Sort(Gadget, Colmn); Allgemeine Sortierroutine LINUX ;No sorting of Images, Row-Colors, Cell-Colors, Row-Data Protected.i I, O, Rows, Colmns, SortDepth, StateSpace, SortOption, DataPos, RowStates, Img Protected.i ListStates= #PB_ListIcon_Selected | #PB_ListIcon_Checked | #PB_ListIcon_Inbetween | #PB_Tree_Selected | #PB_Tree_Expanded | #PB_Tree_Collapsed | #PB_Tree_Checked | #PB_Tree_Inbetween Protected I$, X$ Protected *ColumnList, *Column *ColumnList = gtk_tree_view_get_columns_(GadgetID(Gadget)); Zeiger auf Spalten Colmns= g_list_length_(*ColumnList); Anzahl Spalten ;Systemhandling der Tabellen (KEINE Systemsortierung)... For I= 0 To Colmns- 1 If I <> Colmn *Column = gtk_tree_view_get_column_(GadgetID(Gadget), I); Zeiger nacheinander auf alle Spalten außer Sortierspalte gtk_tree_view_column_set_sort_indicator_ (*Column, #False); Arrows off EndIf Next I *Column = gtk_tree_view_get_column_(GadgetID(Gadget), Colmn); Pointer to sort-column SortOption= gtk_tree_view_column_get_sort_order_(*Column) ! #GTK_SORT_DESCENDING; Get arrow-Direction and invert gtk_tree_view_column_set_sort_order_ (*Column, SortOption); New Arrow-Direction gtk_tree_view_column_set_sort_indicator_ (*Column, #True); Arrow on sorted column ;Sortieren... SortDepth= 12;25 num of letters for sorting StateSpace= 3; space for state-info of rows Rows= CountGadgetItems(Gadget) -1; number of rows Protected Dim TmpData$(Rows+1) For I= 0 To Rows X$= LSet(GetGadgetItemText(Gadget, I, Colmn), SortDepth) RowStates= GetGadgetItemState(Gadget, I) & ListStates; save ItemStates X$+ RSet(Str(RowStates), StateSpace) For O= 0 To Colmns- 1 I$= GetGadgetItemText(Gadget, I, O) X$+ I$+ #LF$ Next O X$= RTrim(X$, #LF$) TmpData$(I)= X$ Next I SortArray(TmpData$(), SortOption, 0, Rows) ;zurückschreiben... ClearGadgetItems(Gadget) DataPos= 1+ SortDepth For I= 0 To Rows X$= Mid(TmpData$(I), DataPos+ StateSpace) AddGadgetItem(Gadget, -1, X$, Img); #Gadget angeben SetGadgetItemState(Gadget, CountGadgetItems(Gadget)-1, Val(Mid(TmpData$(I), SortDepth+ 1, StateSpace))) Next I g_list_free_(*ColumnList); free ColumnList gtk_widget_queue_draw_(GadgetID(Gadget)); force Redraw to LIG SetActiveGadget(Gadget) EndProcedure ProcedureC TV_ColumnClick(*column.GtkTreeViewColumn, Colmn); LIG-sort-callback Protected.i Gadget If gtk_tree_view_column_get_tree_view(*column)= GadgetID(#LIG); search LIGs Gadget= #LIG TV_Sort(Gadget, Colmn) EndIf EndProcedure Procedure CreateWindow_Main() Protected.l I, O Protected *Column If OpenWindow(#MainWin, #WinX, #WinY, #WinW, #WinH, "sort by column-click", #PB_Window_SystemMenu | #PB_Window_ScreenCentered) ListIconGadget(#LIG, 5, 5, 480, 380, "Spalte 1", 70, #PB_ListIcon_AlwaysShowSelection | #PB_ListIcon_GridLines) For O= 1 To 4 AddGadgetColumn(#LIG, O, "Spalte "+Str(O+ 1), 70) Next O For I= 1 To 20 AddGadgetItem(#LIG, -1, Str(I)+".1") Next I For O= 1 To 4 For I= 0 To 19 SetGadgetItemText(#LIG, I, Str(I+1)+"."+Str(O+1), O) Next I Next O For O= 3 To 4 For I= 0 To 19 SetGadgetItemText(#LIG, I, Str(20-I)+"."+Str(O+1), O) Next I Next O gtk_tree_view_set_headers_clickable_(GadgetID(#LIG), #True); LINUX-API - LIG-Header clickable For I = 0 To 4 *Column = gtk_tree_view_get_column_(GadgetID(#LIG), I); LINUX-API - get the pointer to the column If *Column g_signal_connect(*Column, "clicked", @TV_ColumnClick(), I); LINUX-API - Signal when header clicked to TV_ColumnClick() EndIf Next I EndIf EndProcedure CreateWindow_Main() Repeat gEvent= WaitWindowEvent() Select gEvent Case #PB_Event_CloseWindow gQuit= #True EndSelect Until gQuit ; IDE Options = PureBasic 5.44 LTS (Linux - x86) ; CursorPosition = 14 ; Folding = - ; EnableUnicode ; EnableXP