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

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 "oxygentabdemowidget.h"
0012 
0013 #include <iostream>
0014 #include <string>
0015 
0016 namespace Oxygen
0017 {
0018 
0019     //____________________________________________________
0020     TabDemoWidget::TabDemoWidget( 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( "Tab Widgets" );
0030         setComments( "Shows the appearance of tab widgets" );
0031         setIconName( "tab-detach" );
0032         realize();
0033 
0034         // orientation
0035         {
0036             GtkWidget* hbox( gtk_hbox_new( false, 0 ) );
0037             gtk_box_set_spacing( GTK_BOX( hbox ), 5 );
0038             gtk_box_pack_start( GTK_BOX( mainWidget ), hbox, false, true, 0 );
0039             gtk_widget_show( hbox );
0040 
0041             // label
0042             GtkWidget* label( gtk_label_new( "Tab orientation: " ) );
0043             gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
0044             gtk_box_pack_start( GTK_BOX( hbox ), label, false, true, 0 );
0045             gtk_widget_show( label );
0046 
0047             // combobox
0048             GtkListStore* model( gtk_list_store_new( 1, G_TYPE_STRING ) );
0049             const char* columns[] =
0050             {
0051                 "North",
0052                 "South",
0053                 "West",
0054                 "East"
0055             };
0056 
0057             for( unsigned int i=0; i<4; i++ )
0058             {
0059                 GtkTreeIter iter;
0060                 gtk_list_store_append( model, &iter );
0061                 gtk_list_store_set( model, &iter, 0, columns[i], -1 );
0062             }
0063 
0064             GtkWidget* comboBox( gtk_combo_box_new() );
0065             gtk_combo_box_set_model( GTK_COMBO_BOX( comboBox ), GTK_TREE_MODEL( model ) );
0066             g_object_unref( model );
0067 
0068             // text renderer
0069             GtkCellRenderer* cell( gtk_cell_renderer_text_new() );
0070             gtk_cell_layout_pack_start( GTK_CELL_LAYOUT( comboBox ), cell, FALSE );
0071             gtk_cell_layout_set_attributes( GTK_CELL_LAYOUT( comboBox ), cell, "text", 0, NULL );
0072 
0073             gtk_combo_box_set_active( GTK_COMBO_BOX( comboBox ), 0 );
0074             gtk_box_pack_start( GTK_BOX( hbox ), comboBox, false, true, 0 );
0075             gtk_widget_show( comboBox );
0076 
0077             // connection
0078             connect( G_OBJECT( comboBox ), "changed", G_CALLBACK( orientationChanged ), this );
0079 
0080         }
0081 
0082         {
0083 
0084             // frame
0085             GtkWidget* frame( gtk_frame_new( "Preview" ) );
0086             gtk_box_pack_start( GTK_BOX( mainWidget ), frame, true, true, 0 );
0087             gtk_widget_show( frame );
0088 
0089             _notebook = gtk_notebook_new();
0090             gtk_container_add( GTK_CONTAINER( frame ), _notebook );
0091             gtk_container_set_border_width( GTK_CONTAINER( _notebook ), 2 );
0092             gtk_notebook_set_tab_pos( GTK_NOTEBOOK( _notebook ), GTK_POS_TOP );
0093             gtk_widget_show( _notebook );
0094 
0095             {
0096 
0097                 // first page
0098                 GtkWidget* vbox( gtk_vbox_new( false, 0 ) );
0099                 gtk_box_set_spacing( GTK_BOX( vbox ), 5 );
0100 
0101                 // line editor
0102                 GtkWidget* lineEditor( gtk_entry_new() );
0103                 gtk_box_pack_start( GTK_BOX( vbox ), lineEditor, false, true, 0 );
0104                 gtk_widget_show( lineEditor );
0105 
0106                 // text editor
0107                 GtkTextTagTable* tags( gtk_text_tag_table_new() );
0108                 GtkTextBuffer* buffer( gtk_text_buffer_new( tags ) );
0109                 GtkWidget* textView( gtk_text_view_new_with_buffer( buffer ) );
0110                 gtk_container_set_border_width( GTK_CONTAINER( textView ), 2 );
0111                 gtk_widget_show( textView );
0112 
0113                 GtkWidget* scrolledWindow( gtk_scrolled_window_new( 0L, 0L ) );
0114                 gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_SHADOW_IN );
0115                 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC );
0116                 gtk_container_add( GTK_CONTAINER( scrolledWindow ), textView );
0117                 gtk_container_set_border_width( GTK_CONTAINER( scrolledWindow ), 2 );
0118                 gtk_widget_show( scrolledWindow );
0119 
0120                 gtk_box_pack_start( GTK_BOX( vbox ), scrolledWindow, true, true, 0 );
0121 
0122                 addPage( "First Tab", vbox );
0123 
0124 
0125             }
0126             addPage( "Second Tab", gtk_vbox_new( false, 0 ) );
0127             addPage( "Third Tab", gtk_vbox_new( false, 0 ) );
0128             addPage( "Fourth Tab", gtk_vbox_new( false, 0 ) );
0129 
0130         }
0131     }
0132 
0133     //____________________________________________________
0134     TabDemoWidget::~TabDemoWidget( void )
0135     {}
0136 
0137     //____________________________________________________
0138     void TabDemoWidget::addPage( const std::string& title, GtkWidget* widget ) const
0139     {
0140         assert( _notebook );
0141         GtkWidget* label( gtk_label_new( title.c_str() ) );
0142         gtk_notebook_append_page( GTK_NOTEBOOK( _notebook ), widget, label );
0143         gtk_widget_show( label );
0144         gtk_widget_show( widget );
0145         gtk_notebook_set_tab_reorderable( GTK_NOTEBOOK( _notebook ), widget, true );
0146     }
0147 
0148     //____________________________________________________
0149     void TabDemoWidget::orientationChanged( GtkComboBox* comboBox, gpointer data )
0150     {
0151         GtkNotebook* notebook( GTK_NOTEBOOK( static_cast<TabDemoWidget*>( data )->_notebook ) );
0152         switch( gtk_combo_box_get_active( comboBox ) )
0153         {
0154             default:
0155             case 0: gtk_notebook_set_tab_pos( notebook, GTK_POS_TOP ); break;
0156             case 1: gtk_notebook_set_tab_pos( notebook, GTK_POS_BOTTOM ); break;
0157             case 2: gtk_notebook_set_tab_pos( notebook, GTK_POS_LEFT ); break;
0158             case 3: gtk_notebook_set_tab_pos( notebook, GTK_POS_RIGHT ); break;
0159         }
0160 
0161     }
0162 
0163 }