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 }