Re: Sammlung beliebter API-Calls
Verfasst: 03.03.2010 23:01
Ok habs geschnallt. Hab noch ein Problem. Bei mir steht die Checkbox allein in einer Zelle. Ich würde sie gern in die Mitte der Zelle haben wollen(center). Mit dem Text funktioniert mit einen Beispiel vom englischen Forum, aber die Checkbox weigert sich eisern in die Mitte zu rutschen. Wie geht das? Sorry ist die letzte Frage dann hab ich mein Grundgerüst zusammen,denke ich.
Ich buttle mich schon durch die Linux Programmierung!
hab das mal bißchen zusammen gebuttert:
die Checkboxabfrage wird noch nicht funktionieren!

hab das mal bißchen zusammen gebuttert:
Code: Alles auswählen
ImportC ""
g_object_set_double(*Object, Property.p-ascii, Value.d, NULL) As "g_object_set"
EndImport
;EnableExplicit
#G_TYPE_BOOLEAN = 5 << 2
#G_TYPE_STRING = 16 << 2
#NumColumns = 5
#Obstarten = "Loeschen+Zurueck+Absender+Betreff+Nachricht"
Structure RendererEntry
Pointer.I
Column.I
EndStructure
NewList ToggleRenderer.RendererEntry()
Define CellText.GValue
Define CheckBoxState.GValue
Define Column.I
Define i.I
Define Info.S
Define j.I
Define *ListStore.GtkListStore
Define NumRows.I
Define *ScrolledWindow.GtkScrolledWindow
Define TreeIter.GtkTreeIter
Define *TreeView.GtkTreeView
Define *TypeList.I
Define *VBox.GtkVBox
Define *Window.GtkWindow
Define *CellRenderers
ProcedureC OnCheckBoxToggled(*ToggleRenderer, *TreePathString, *ListStore.GtkListStore)
Shared ToggleRenderer.RendererEntry()
Protected CheckBoxState.GValue
Protected Column.I
Protected TreeIter.GtkTreeIter
Protected *TreePath
ForEach ToggleRenderer()
If ToggleRenderer()\Pointer = *ToggleRenderer
Column = ToggleRenderer()\Column
Break
EndIf
Next
*TreePath = gtk_tree_path_new_from_string_(*TreePathString)
If *TreePath
If gtk_tree_model_get_iter_(*ListStore, @TreeIter, *TreePath)
gtk_tree_model_get_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
CheckBoxState\data\v_long = CheckBoxState\data\v_long ! 1
gtk_list_store_set_value_(*ListStore, @TreeIter, Column, @CheckBoxState)
g_value_unset_(@CheckBoxState)
EndIf
gtk_tree_path_free_(*TreePath)
EndIf
EndProcedure
ProcedureC AddRow(TextList.S)
Shared *ListStore.GtkListStore
Shared NumRows.I
Protected CellText.GValue
Protected i.I
Protected Text.S
Protected TreeIter.GtkTreeIter
CellText\g_type = #G_TYPE_STRING
gtk_list_store_append_(*ListStore, @TreeIter)
For i = 1 To CountString(TextList, "+") + 1
Text = StringField(TextList, i, "+")
CellText\data\v_pointer = @Text
gtk_list_store_set_value_(*ListStore, @TreeIter, i * 2 - 1+4, @CellText)
Next i
NumRows + 1
EndProcedure
Procedure SetColumnAlign(tree_view, Column, Alignment.d)
Protected *Column2, *CellRenderers2, Count, Index
*Column2 = gtk_tree_view_get_column_(tree_view, Column)
If *Column2
; This only aligns the title text
gtk_tree_view_column_set_alignment_(*Column2, Alignment)
; Align the text renderers as well
*CellRenderers2 = gtk_tree_view_column_get_cell_renderers_(*Column2)
If *CellRenderers2
Count = g_list_length_(*CellRenderers2)
For Index = 0 To Count-1
g_object_set_double(g_list_nth_data_(*CellRenderers2, Index), "xalign", Alignment, #Null)
Next Index
g_list_free_(*CellRenderers2)
EndIf
EndIf
EndProcedure
ProcedureC AddColumn(Column.I, Header.S)
Shared ToggleRenderer.RendererEntry()
Shared *TreeView.GtkTreeView
Protected *CellRenderer.GtkCellRenderer
Protected *Column.GtkTreeViewColumn
Protected *TreeModel
*TreeModel = gtk_tree_view_get_model_(*TreeView)
*Column = gtk_tree_view_column_new_()
If Column < 2
*CellRenderer = gtk_cell_renderer_toggle_new_()
gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "active", Column * 2)
g_signal_connect_data_(*CellRenderer, "toggled", @OnCheckBoxToggled(), *TreeModel, 0, 0)
AddElement(ToggleRenderer())
ToggleRenderer()\Pointer = *CellRenderer
ToggleRenderer()\Column = Column * 2
EndIf
*CellRenderer = gtk_cell_renderer_text_new_()
gtk_tree_view_column_set_title_(*Column, Header)
gtk_tree_view_column_pack_start_(*Column, *CellRenderer, #False)
If Column > 1
gtk_tree_view_column_add_attribute_(*Column, *CellRenderer, "text", Column * 2 + 1)
EndIf
gtk_tree_view_append_column_(*TreeView, *Column)
SetColumnAlign(*TreeView,Column,0.5)
EndProcedure
; ----- Variablentyp-Liste für die einzelnen Spalten anlegen (2 pro Spalte)
*TypeList = AllocateMemory(#NumColumns * 2 * SizeOf(Integer))
For i = 0 To #NumColumns - 1
PokeI(*TypeList + SizeOf(Integer) * i * 2, #G_TYPE_BOOLEAN)
PokeI(*TypeList + SizeOf(Integer) * i * 2 + SizeOf(Integer), #G_TYPE_STRING)
Next i
; ----- ListStore anlegen und mit Werten füllen
*ListStore = gtk_list_store_newv_(#NumColumns * 2, *TypeList)
FreeMemory(*TypeList)
AddRow("Kirschen+Aepfel+Johannisbeeren")
AddRow("Pflaumen+Birnen+Stachelbeeren")
AddRow("Nektarinen+Quitten+Heidelbeeren")
; ----- TreeView anlegen
*TreeView = gtk_tree_view_new_with_model_(*ListStore)
g_object_unref_(*ListStore)
; ----- Spalten anlegen
For i = 0 To #NumColumns - 1
AddColumn(i, StringField(#Obstarten, i + 1, "+"))
Next i
; ----- Fenster öffnen und ButtonGadget definieren
OpenWindow(0, 0, 0, 800, 600, "Auswahl von Obstsorten", #PB_Window_ScreenCentered)
ButtonGadget(1, 75, 10, 150, 23, "Auswahl anzeigen") ; y = 10 ist der vertikale Abstand zum
; TreeView, nicht die y-Position innerhalb
; des Fensters !
; ----- TreeView in PureBASIC-Fenster integrieren und anzeigen
*Window = WindowID(0)
*VBox = *Window\bin\child ; Von PureBASIC angelegte GtkVBox ermitteln
*ScrolledWindow = gtk_scrolled_window_new_(0, 0) ; Neues GtkScrolledWindow anlegen
gtk_scrolled_window_set_shadow_type_(*ScrolledWindow, #GTK_SHADOW_IN) ; Umrandungs-Stil des GtkScrolledWindow
; festlegen
gtk_scrolled_window_set_policy_(*ScrolledWindow, #GTK_POLICY_AUTOMATIC, #GTK_POLICY_AUTOMATIC) ; Scroll-Balken
; ausblenden, wenn kein Scrolling benötigt
; wird
gtk_widget_set_size_request_(*ScrolledWindow, WindowWidth(0) - 10, 86) ; ScrolledWindow auf feste Größe setzen
gtk_box_pack_start_(*VBox, *ScrolledWindow, #True, #True, 0) ; GtkScrolledWindow in GtkVBox einfügen
gtk_box_reorder_child_(*VBox, *ScrolledWindow, 0) ; GtkScrolledWindow an die 1.Position der
; Gadgets innerhalb der GtkVBox setzen und
; damit an den oberen Rand des Fensters
gtk_container_add_(*ScrolledWindow, *TreeView) ; TreeView in GtkScrolledWindow einfügen
gtk_container_set_border_width_(*Window, 5) ; Umrandungsbreite des Containers festlegen
gtk_widget_show_all_(*Window) ; Alle Gadgets im Fenster sichtbar machen
Repeat
Select WaitWindowEvent()
Case #PB_Event_Gadget
If EventGadget() = 1
Break
EndIf
Case #PB_Event_CloseWindow
End
EndSelect
ForEver
; ----- Zell-Inhalte und CheckBox-Stati auslesen und anzeigen
For j = 0 To #NumColumns - 1
Info + "- " + StringField(#Obstarten, j + 1, "+") + " -" + #CR$
For i = 0 To NumRows - 1
If gtk_tree_model_get_iter_from_string_(*ListStore, @TreeIter, Str(i))
gtk_tree_model_get_value_(*ListStore, @TreeIter, j * 2, @CheckBoxState)
gtk_tree_model_get_value_(*ListStore, @TreeIter, j * 2 + 1, @CellText)
If CheckBoxState\data\v_long
Info + PeekS(CellText\data\v_pointer) + ": ja" + #CR$
Else
Info + PeekS(CellText\data\v_pointer) + ": nein" + #CR$
EndIf
g_value_unset_(@CheckBoxState)
g_value_unset_(@CellText)
EndIf
Next i
Info + #CR$
Next j
MessageRequester("Auswahl", Info)
die Checkboxabfrage wird noch nicht funktionieren!