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 "oxygeninputdemowidget.h" 0012 0013 #include <iostream> 0014 #include <string> 0015 0016 namespace Oxygen 0017 { 0018 0019 //____________________________________________________ 0020 InputDemoWidget::InputDemoWidget( 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( "Input Widgets" ); 0030 setComments( "Shows the appearance of text input widgets" ); 0031 setIconName( "edit-rename" ); 0032 realize(); 0033 0034 // main container 0035 GtkWidget* table = gtk_table_new( 4, 3, false ); 0036 gtk_table_set_row_spacings( GTK_TABLE( table ), 5 ); 0037 gtk_box_pack_start( GTK_BOX( mainWidget ), table, false, true, 0 ); 0038 gtk_widget_show( table ); 0039 0040 // spacing 0041 GtkWidget* spacing( gtk_label_new( "" ) ); 0042 gtk_table_attach( GTK_TABLE( table ), spacing, 2, 3, 0, 1, GTK_EXPAND, GTK_FILL, 2, 0 ); 0043 gtk_widget_show( spacing ); 0044 0045 // generic label 0046 GtkWidget* label( 0L ); 0047 0048 // simple line editor 0049 gtk_table_attach( GTK_TABLE( table ), label = gtk_label_new( "Single line text editor: " ), 0, 1, 0, 1, GTK_FILL, GTK_FILL, 2, 0 ); 0050 gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); 0051 gtk_widget_show( label ); 0052 0053 GtkWidget* lineEditor( 0L ); 0054 gtk_table_attach( GTK_TABLE( table ), lineEditor = gtk_entry_new(), 1, 2, 0, 1, GTK_FILL, GTK_FILL, 2, 0 ); 0055 gtk_entry_set_text( GTK_ENTRY( lineEditor ), "Example text" ); 0056 gtk_widget_show( lineEditor ); 0057 0058 _entries.push_back( lineEditor ); 0059 0060 // invisible line editor 0061 gtk_table_attach( GTK_TABLE( table ), label = gtk_label_new( "Password editor: " ), 0, 1, 1, 2, GTK_FILL, GTK_FILL, 2, 0 ); 0062 gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); 0063 gtk_widget_show( label ); 0064 0065 gtk_table_attach( GTK_TABLE( table ), lineEditor = gtk_entry_new(), 1, 2, 1, 2, GTK_FILL, GTK_FILL, 2, 0 ); 0066 gtk_entry_set_text( GTK_ENTRY( lineEditor ), "Example text" ); 0067 gtk_entry_set_visibility( GTK_ENTRY( lineEditor ), false ); 0068 gtk_widget_show( lineEditor ); 0069 0070 _entries.push_back( lineEditor ); 0071 0072 // combobox 0073 gtk_table_attach( GTK_TABLE( table ), label = gtk_label_new( "Editable combobox: " ), 0, 1, 2, 3, GTK_FILL, GTK_FILL, 2, 0 ); 0074 gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); 0075 gtk_widget_show( label ); 0076 0077 // model 0078 GtkListStore* model( gtk_list_store_new( 1, G_TYPE_STRING ) ); 0079 const char* columns[] = { 0080 "First item", 0081 "Second item", 0082 "Third item" 0083 }; 0084 0085 for( unsigned int i=0; i<3; i++ ) 0086 { 0087 GtkTreeIter iter; 0088 gtk_list_store_append( model, &iter ); 0089 gtk_list_store_set( model, &iter, 0, columns[i], -1 ); 0090 } 0091 0092 GtkWidget* comboBox(0L); 0093 #if GTK_CHECK_VERSION(2, 24, 0) 0094 gtk_table_attach( GTK_TABLE( table ), comboBox = gtk_combo_box_new_with_entry(), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 2, 0 ); 0095 gtk_combo_box_set_model( GTK_COMBO_BOX( comboBox ), GTK_TREE_MODEL( model ) ); 0096 gtk_combo_box_set_entry_text_column( GTK_COMBO_BOX( comboBox ), 0 ); 0097 0098 #else 0099 gtk_table_attach( GTK_TABLE( table ), comboBox = gtk_combo_box_entry_new(), 1, 2, 2, 3, GTK_FILL, GTK_FILL, 2, 0 ); 0100 gtk_combo_box_set_model( GTK_COMBO_BOX( comboBox ), GTK_TREE_MODEL( model ) ); 0101 gtk_combo_box_entry_set_text_column( GTK_COMBO_BOX_ENTRY( comboBox ), 0 ); 0102 #endif 0103 g_object_unref( model ); 0104 0105 gtk_combo_box_set_active( GTK_COMBO_BOX( comboBox ), 0 ); 0106 gtk_widget_show( comboBox ); 0107 0108 // spin button 0109 gtk_table_attach( GTK_TABLE( table ), label = gtk_label_new( "Spinbox: " ), 0, 1, 3, 4, GTK_FILL, GTK_FILL, 2, 0 ); 0110 gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 ); 0111 gtk_widget_show( label ); 0112 0113 GtkWidget* spinButton( 0L ); 0114 gtk_table_attach( GTK_TABLE( table ), spinButton = gtk_spin_button_new_with_range( 0, 100, 1 ), 1, 2, 3, 4, GTK_FILL, GTK_FILL, 2, 0 ); 0115 gtk_widget_show( spinButton ); 0116 0117 _entries.push_back( spinButton ); 0118 0119 // flat widget button 0120 GtkWidget* checkbutton; 0121 gtk_table_attach( GTK_TABLE( table ), checkbutton = gtk_check_button_new_with_label( "Use flat widgets" ), 0, 2, 4, 5, GTK_FILL, GTK_FILL, 2, 0 ); 0122 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkbutton ), false ); 0123 gtk_widget_show( checkbutton ); 0124 0125 connect( G_OBJECT( checkbutton ), "toggled", G_CALLBACK( flatModeChanged ), this ); 0126 0127 0128 // separator 0129 GtkWidget* separator( gtk_hseparator_new() ); 0130 gtk_box_pack_start( GTK_BOX( mainWidget ), separator, false, true, 0 ); 0131 gtk_widget_show( separator ); 0132 0133 // text view 0134 gtk_box_pack_start( GTK_BOX( mainWidget ), label = gtk_label_new( "Multi-line text editor: " ), false, true, 0 ); 0135 gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 ); 0136 gtk_widget_show( label ); 0137 0138 const std::string content( "Lorem ipsum dolor sit amet, consectetur " 0139 "adipisicing elit, sed do eiusmod tempor incididunt ut labore " 0140 "et dolore magna aliqua. Ut enim ad minim veniam, quis nostrud " 0141 "exercitation ullamco laboris nisi ut aliquip ex ea commodo " 0142 "consequat. Duis aute irure dolor in reprehenderit in voluptate " 0143 "velit esse cillum dolore eu fugiat nulla pariatur. Excepteur " 0144 "sint occaecat cupidatat non proident, sunt in culpa qui officia " 0145 "deserunt mollit anim id est laborum.\n" 0146 "\n" 0147 "Sed ut perspiciatis unde omnis iste natus error sit voluptatem " 0148 "accusantium doloremque laudantium, totam rem aperiam, eaque " 0149 "ipsa quae ab illo inventore veritatis et quasi architecto beatae " 0150 "vitae dicta sunt explicabo. Nemo enim ipsam voluptatem quia " 0151 "voluptas sit aspernatur aut odit aut fugit, sed quia consequuntur " 0152 "magni dolores eos qui ratione voluptatem sequi nesciunt. " 0153 "Neque porro quisquam est, qui dolorem ipsum quia dolor sit amet, " 0154 "consectetur, adipisci velit, sed quia non numquam eius modi " 0155 "tempora incidunt ut labore et dolore magnam aliquam quaerat " 0156 "voluptatem. Ut enim ad minima veniam, quis nostrum exercitationem " 0157 "ullam corporis suscipit laboriosam, nisi ut aliquid ex ea commodi " 0158 "consequatur? Quis autem vel eum iure reprehenderit qui in ea " 0159 "voluptate velit esse quam nihil molestiae consequatur, vel illum " 0160 "qui dolorem eum fugiat quo voluptas nulla pariatur?" ); 0161 0162 GtkTextTagTable* tags( gtk_text_tag_table_new() ); 0163 GtkTextBuffer* buffer( gtk_text_buffer_new( tags ) ); 0164 gtk_text_buffer_set_text( buffer, content.c_str(), content.size() ); 0165 _textView = gtk_text_view_new_with_buffer( buffer ); 0166 gtk_text_view_set_wrap_mode( GTK_TEXT_VIEW( _textView ), GTK_WRAP_WORD ); 0167 gtk_container_set_border_width( GTK_CONTAINER( _textView ), 2 ); 0168 gtk_widget_show( _textView ); 0169 0170 GtkWidget* scrolledWindow( gtk_scrolled_window_new( 0L, 0L ) ); 0171 gtk_scrolled_window_set_shadow_type( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_SHADOW_IN ); 0172 gtk_scrolled_window_set_policy( GTK_SCROLLED_WINDOW( scrolledWindow ), GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC ); 0173 gtk_container_add( GTK_CONTAINER( scrolledWindow ), _textView ); 0174 gtk_box_pack_start( GTK_BOX( mainWidget ), scrolledWindow, true, true, 0 ); 0175 gtk_widget_show( scrolledWindow ); 0176 0177 gtk_box_pack_start( GTK_BOX( mainWidget ), checkbutton = gtk_check_button_new_with_label( "Wrap words" ), false, true, 0 ); 0178 gtk_toggle_button_set_active( GTK_TOGGLE_BUTTON( checkbutton ), true ); 0179 gtk_widget_show( checkbutton ); 0180 0181 connect( G_OBJECT( checkbutton ), "toggled", G_CALLBACK( wrapModeChanged ), this ); 0182 0183 } 0184 0185 //____________________________________________________ 0186 InputDemoWidget::~InputDemoWidget( void ) 0187 {} 0188 0189 //____________________________________________________ 0190 void InputDemoWidget::flatModeChanged( GtkToggleButton* button, gpointer data ) 0191 { 0192 WidgetList entries( static_cast<InputDemoWidget*>( data )->_entries ); 0193 bool state( gtk_toggle_button_get_active( button ) ); 0194 for( WidgetList::const_iterator iter = entries.begin(); iter != entries.end(); iter++ ) 0195 { gtk_entry_set_has_frame( GTK_ENTRY( *iter ), !state ); } 0196 } 0197 0198 //____________________________________________________ 0199 void InputDemoWidget::wrapModeChanged( GtkToggleButton* button, gpointer data ) 0200 { 0201 GtkTextView* textView( GTK_TEXT_VIEW( static_cast<InputDemoWidget*>( data )->_textView ) ); 0202 bool state( gtk_toggle_button_get_active( button ) ); 0203 gtk_text_view_set_wrap_mode( textView, (state ? GTK_WRAP_WORD:GTK_WRAP_NONE) ); 0204 } 0205 0206 }