Hi, I want to use the gtk tree view to create a table like structure, but this example script has gtk tree view rederer with user functions within, I am not sure how to simply insert my strings into the treeview columns without any sophisticated rederers,
Code:
#!/bin/bash
# As unique communication channel the current PID
# number '$$' is used.
# Name of PIPE file
declare PI=/tmp/bash.gtk.$$
# Communication function; assignment function
function gtk() { echo $1 > $PI; read GTK < $PI; }
function define() { $2 "$3"; eval $1=$GTK; }
#------------------------ Main starts here
# Define some constants
NULL="NULL"
FIRST_COL=0
SECOND_COL=1
NUM_COLS=2
TRUE=1
# Start gtk-server in FIFO mode
gtk-server -fifo=$PI &
while [ ! -p $PI ]; do continue; done
# Setup GUI
gtk "gtk_init NULL NULL"
# Define main window and some attributes
define win gtk "gtk_window_new 0"
gtk "gtk_window_set_title $win 'Task Manager'"
gtk "gtk_window_set_resizable $win 0"
gtk "gtk_widget_set_size_request $win 500 500"
# Create a model
define view gtk "gtk_tree_view_new"
gtk "gtk_tree_view_set_headers_clickable $view 1"
gtk "gtk_tree_view_set_grid_lines $view 3"
# Create columns
define col1 gtk "gtk_tree_view_column_new"
gtk "gtk_tree_view_column_set_title $col1 Icon"
gtk "gtk_tree_view_append_column $view $col1"
gtk "gtk_tree_view_column_set_resizable $col1 1"
gtk "gtk_tree_view_column_set_clickable $col1 1"
define col2 gtk "gtk_tree_view_column_new"
gtk "gtk_tree_view_column_set_title $col2 Applications"
gtk "gtk_tree_view_append_column $view $col2"
gtk "gtk_tree_view_column_set_resizable $col2 1"
gtk "gtk_tree_view_column_set_clickable $col2 1"
# Define the store where the actual data is kept
gtk "gtk_server_redefine gtk_list_store_new NONE WIDGET 3 INT INT INT"
define LST gtk "gtk_list_store_new 2 G_TYPE_STRING G_TYPE_STRING"
# Fill store with some data
define ITER gtk "gtk_server_opaque"
gtk "gtk_server_redefine gtk_list_store_set NONE NONE 5 WIDGET WIDGET INT STRING INT"
gtk "gtk_list_store_append $LST $ITER"
gtk "gtk_list_store_set $LST $ITER $FIRST_COL yasetaet -1"
gtk "gtk_list_store_set $LST $ITER $SECOND_COL ewtawet -1"
gtk "gtk_list_store_append $LST $ITER"
gtk "gtk_list_store_set $LST $ITER $FIRST_COL aetawet -1"
gtk "gtk_list_store_set $LST $ITER $SECOND_COL aetawet -1"
gtk "gtk_list_store_append $LST $ITER"
gtk "gtk_list_store_set $LST $ITER $FIRST_COL aetawetweat -1"
gtk "gtk_list_store_set $LST $ITER $SECOND_COL waetawetwet -1"
# Attach store to model
gtk "gtk_tree_view_set_model $view $LST"
# Make sure all memory is released when the model is destroyed
gtk "g_object_unref $LST"
# Set the mode of the view
define SEL gtk "gtk_tree_view_get_selection $view"
gtk "gtk_tree_selection_set_mode $SEL GTK_SELECTION_SINGLE"
# Define a scrolled window
define SW gtk "gtk_scrolled_window_new $NULL $NULL"
gtk "gtk_scrolled_window_set_policy $SW 1 1"
gtk "gtk_scrolled_window_set_shadow_type $SW 1"
gtk "gtk_container_add $SW $view"
# Now register a 'userfunction' for both columns - using different macros with different column number
# Create renderers to show contents
define renderer gtk "gtk_cell_renderer_text_new"
gtk "gtk_tree_view_column_pack_start $col1 $FIRST_COL 1"
gtk "gtk_tree_view_column_pack_start $col2 $renderer 1"
gtk "gtk_server_define gtk_tree_view_column_set_cell_data_func NONE NONE 5 WIDGET WIDGET MACRO DATA NULL"
gtk "gtk_tree_store_append $col1 $renderer"
gtk "gtk_tree_view_column_set_cell_data_func $col2 $renderer2 GtkTreeCellDataFunc_2 $SECOND_COL $NULL"
# Finish gui
gtk "gtk_container_add $win $SW"
gtk "gtk_widget_show_all $win"
# Set ordering variable
ORDER_FIRST=0
ORDER_SECOND=1
# MAINLOOP
until [[ $EVENT = $win ]]
do
define EVENT gtk "gtk_server_callback wait"
case $EVENT in
$col1)
let ORDER_FIRST=1-$ORDER_FIRST
let ORDER_SECOND=1-$ORDER_SECOND
gtk "gtk_tree_sortable_set_sort_column_id $LST $FIRST_COL $ORDER_FIRST";;
$col2)
let ORDER_FIRST=1-$ORDER_FIRST
let ORDER_SECOND=1-$ORDER_SECOND
gtk "gtk_tree_sortable_set_sort_column_id $LST $SECOND_COL $ORDER_SECOND";;
esac
done
gtk "gtk_server_exit"
Thanks,
Ted