1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105
|
#include<gtk/gtk.h>
#include<string.h>
void list_create_and_fill_model( GtkWidget *list_view ) {
GtkListStore *list_store;
GtkTreeIter iter;
GtkTreeSelection *selection;
list_store = gtk_list_store_new( 2, G_TYPE_STRING, G_TYPE_STRING );
gtk_tree_view_set_model( GTK_TREE_VIEW( list_view), GTK_TREE_MODEL( list_store ));
for ( int i = 0; ( i < 20 ); i++ ) {
gtk_list_store_append( list_store, &iter );
gtk_list_store_set( list_store,
&iter,
0, "Testing",
1, "Another",
-1 );
}
selection = gtk_tree_view_get_selection( GTK_TREE_VIEW( list_view ));
gtk_tree_selection_select_path( selection, gtk_tree_path_new_from_string( "0" ));
}
void GetTextPixels( GtkWidget *widget,
gchar *gcFont,
gint giLength,
gint *width,
gint *height ) {
PangoLayout *layout;
PangoFontDescription *fontdesc;
gchar *fill_char;
fill_char = ( gchar * )g_malloc( sizeof( gchar ) * ( giLength + 1 ));
memset( fill_char, 'A', giLength );
fill_char[ giLength + 1 ] = '\0';
layout = gtk_widget_create_pango_layout( widget, fill_char );
fontdesc = pango_font_description_from_string( gcFont );
pango_layout_set_font_description( layout, fontdesc );
pango_layout_get_pixel_size( layout, width, height );
pango_font_description_free( fontdesc );
g_object_unref( layout );
g_free( fill_char );
}
void list_view_and_model( GtkWidget *box,
GtkWidget **list_view ) {
GtkTreeViewColumn *column;
GtkCellRenderer *renderer;
GtkWidget *scrolled_win;
gint width, height;
*list_view = gtk_tree_view_new();
gtk_widget_override_font( *list_view, pango_font_description_from_string( "Courier New 12" ));
gtk_tree_view_set_grid_lines( GTK_TREE_VIEW( *list_view ), GTK_TREE_VIEW_GRID_LINES_BOTH );
GetTextPixels( *list_view, "Courier New 12", 40, &width, &height );
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes( "test", renderer, "text", 0, NULL );
// g_object_set( G_OBJECT( renderer ), "width-chars", 40, NULL );
g_object_set( G_OBJECT( renderer ), "width", width, NULL );
gtk_tree_view_append_column( GTK_TREE_VIEW( *list_view ), column );
renderer = gtk_cell_renderer_text_new();
column = gtk_tree_view_column_new_with_attributes( "test", renderer, "text", 1, NULL );
g_object_set( G_OBJECT( renderer ), "width-chars", 30, NULL );
gtk_tree_view_append_column( GTK_TREE_VIEW( *list_view ), column );
gtk_tree_selection_set_mode( gtk_tree_view_get_selection( GTK_TREE_VIEW( *list_view )), GTK_SELECTION_BROWSE );
scrolled_win = gtk_scrolled_window_new( NULL, NULL );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolled_win ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
list_create_and_fill_model( *list_view );
scrolled_win = gtk_scrolled_window_new( NULL, NULL );
gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolled_win ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
gtk_widget_set_size_request( GTK_WIDGET( scrolled_win ), 600, 400 );
gtk_container_add( GTK_CONTAINER( scrolled_win ), *list_view );
gtk_box_pack_start( GTK_BOX( box ), scrolled_win, TRUE, TRUE, 0 );
gtk_tree_view_expand_all( GTK_TREE_VIEW( *list_view ));
}
int main( int argc, char *argv[] ) {
GtkWidget *window;
GtkWidget *main_box;
GtkWidget *list_view;
gtk_init(&argc, &argv);
window = gtk_window_new( GTK_WINDOW_TOPLEVEL );
gtk_window_set_default_size(GTK_WINDOW(window), 400, 250);
gtk_window_set_title(GTK_WINDOW(window), "Linux-buddy.blogspot.com");
main_box = gtk_box_new( GTK_ORIENTATION_VERTICAL, 0 );
gtk_container_set_border_width( GTK_CONTAINER( main_box ), 0 );
gtk_container_add( GTK_CONTAINER( window ), main_box );
list_view_and_model( main_box, &list_view );
gtk_widget_show_all( window );
gtk_main();
return 0;
} |
Partager