File indexing completed on 2024-05-05 05:34:56

0001 /*
0002     this file is part of the oxygen gtk engine
0003     SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0004 
0005     based on the Null Theme Engine for Gtk+.
0006     SPDX-FileCopyrightText: 2008 Robert Staudinger <robert.staudinger@gmail.com>
0007 
0008     SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 #include "oxygenlistdemowidget.h"
0012 
0013 #include <iostream>
0014 #include <string>
0015 
0016 namespace Oxygen
0017 {
0018 
0019     //____________________________________________________
0020     ListDemoWidget::ListDemoWidget( void )
0021     {
0022 
0023         // main widget
0024         GtkWidget* mainWidget( gtk_vbox_new( false, 0 ) );
0025         gtk_box_set_spacing( GTK_BOX( mainWidget ), 5 );
0026         setWidget( mainWidget );
0027 
0028         // setup
0029         setName( "Lists" );
0030         setComments( "Shows the appearance of lists and trees" );
0031         setIconName( "view-list-tree" );
0032         realize();
0033 
0034         // vertical pane
0035         GtkWidget* vpaned( gtk_vpaned_new() );
0036         gtk_widget_show( vpaned );
0037         gtk_box_pack_start( GTK_BOX( mainWidget ), vpaned, true, true, 0 );
0038 
0039         // simple list
0040         {
0041 
0042             GtkListStore* model( gtk_list_store_new( 1, G_TYPE_STRING ) );
0043             const char* columns[] =
0044             {
0045                 "First Item",
0046                 "Second Item",
0047                 "Third Item"
0048             };
0049 
0050             for( unsigned int i=0; i<3; i++ )
0051             {
0052                 GtkTreeIter iter;
0053                 gtk_list_store_append( model, &iter );
0054                 gtk_list_store_set( model, &iter, 0, columns[i], -1 );
0055             }
0056 
0057             GtkWidget* treeView( gtk_tree_view_new_with_model( GTK_TREE_MODEL( model ) ) );
0058             gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( treeView ), false );
0059             gtk_widget_show( treeView );
0060 
0061             // renderer
0062             GtkCellRenderer *renderer( gtk_cell_renderer_text_new() );
0063             GtkTreeViewColumn *column( gtk_tree_view_column_new_with_attributes( "", renderer, "text", 0, NULL ) );
0064 
0065             gtk_tree_view_append_column( GTK_TREE_VIEW( treeView ), column );
0066 
0067             // scrolled window
0068             GtkWidget* scrolledWindow( gtk_scrolled_window_new( 0L, 0L ) );
0069             gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_SHADOW_IN );
0070             gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
0071             gtk_container_add( GTK_CONTAINER( scrolledWindow ), treeView );
0072             gtk_container_set_border_width( GTK_CONTAINER( scrolledWindow ), 2 );
0073             gtk_widget_show( scrolledWindow );
0074 
0075             gtk_paned_pack1( GTK_PANED( vpaned ), scrolledWindow, true, true );
0076 
0077         }
0078 
0079         // tree
0080         {
0081 
0082             GtkTreeStore* model( gtk_tree_store_new ( 2, G_TYPE_STRING, G_TYPE_STRING ) );
0083             const char* titleColumns[] =
0084             {
0085                 "First Item",
0086                 "Second Item",
0087                 "Third Item"
0088             };
0089 
0090             const char* descriptionColumns[] =
0091             {
0092                 "First Description",
0093                 "Second Description",
0094                 "Third Description"
0095             };
0096 
0097             const char* subTitleColumns[] =
0098             {
0099                 "First Subitem",
0100                 "Second Subitem",
0101                 "Third Subitem"
0102             };
0103 
0104             const char* subDescriptionColumns[] =
0105             {
0106                 "First Subitem Description",
0107                 "Second Subitem Description",
0108                 "Third Subitem Description"
0109             };
0110 
0111             for( unsigned int i=0; i<3; i++ )
0112             {
0113                 GtkTreeIter iter;
0114                 gtk_tree_store_append( model, &iter, 0L );
0115                 gtk_tree_store_set( model, &iter, 0, titleColumns[i], 1, descriptionColumns[i], -1 );
0116 
0117                 // append children
0118                 if( i == 1 )
0119                 {
0120                     for( unsigned int i=0; i<2; i++ )
0121                     {
0122                         GtkTreeIter subiter;
0123                         gtk_tree_store_append( model, &subiter, &iter );
0124                         gtk_tree_store_set( model, &subiter, 0, subTitleColumns[i], 1, subDescriptionColumns[i], -1 );
0125                     }
0126 
0127                 } else if( i == 2 ) {
0128 
0129                     GtkTreeIter subiter;
0130                     gtk_tree_store_append( model, &subiter, &iter );
0131                     gtk_tree_store_set( model, &subiter, 0, subTitleColumns[2], 1, subDescriptionColumns[2], -1 );
0132 
0133                 }
0134 
0135             }
0136 
0137             GtkWidget* treeView( gtk_tree_view_new_with_model( GTK_TREE_MODEL( model ) ) );
0138             gtk_tree_view_set_headers_visible( GTK_TREE_VIEW( treeView ), true );
0139             gtk_widget_show( treeView );
0140 
0141             // renderers
0142             {
0143                 GtkCellRenderer *renderer( gtk_cell_renderer_text_new() );
0144                 GtkTreeViewColumn *column( gtk_tree_view_column_new_with_attributes( "Title", renderer, "text", 0, NULL ) );
0145                 gtk_tree_view_column_set_resizable(column, TRUE);
0146                 gtk_tree_view_append_column( GTK_TREE_VIEW( treeView ), column );
0147             }
0148 
0149             {
0150                 GtkCellRenderer *renderer( gtk_cell_renderer_text_new() );
0151                 GtkTreeViewColumn *column( gtk_tree_view_column_new_with_attributes( "Description", renderer, "text", 1, NULL ) );
0152                 gtk_tree_view_column_set_resizable(column, TRUE);
0153                 gtk_tree_view_append_column( GTK_TREE_VIEW( treeView ), column );
0154             }
0155 
0156             // scrolled window
0157             GtkWidget* scrolledWindow( gtk_scrolled_window_new( 0L, 0L ) );
0158             gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_SHADOW_IN );
0159             gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
0160             gtk_container_add( GTK_CONTAINER( scrolledWindow ), treeView );
0161             gtk_container_set_border_width( GTK_CONTAINER( scrolledWindow ), 2 );
0162             gtk_widget_show( scrolledWindow );
0163 
0164             gtk_paned_pack2( GTK_PANED( vpaned ), scrolledWindow, true, true );
0165 
0166         }
0167 
0168 
0169     }
0170 
0171 }