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 }