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 "oxygensliderdemowidget.h"
0012 
0013 #include <iostream>
0014 #include <string>
0015 
0016 namespace Oxygen
0017 {
0018 
0019     //____________________________________________________
0020     SliderDemoWidget::SliderDemoWidget( void )
0021     {
0022 
0023         // main widget
0024         GtkWidget* mainWidget( gtk_hbox_new( false, 0 ) );
0025         gtk_box_set_spacing( GTK_BOX( mainWidget ), 5 );
0026         setWidget( mainWidget );
0027 
0028         // setup
0029         setName( "Sliders" );
0030         setComments( "Shows the appearance of sliders, progress bars and scrollbars" );
0031         setIconName( "measure" );
0032         realize();
0033 
0034         // horizontal sliders
0035         {
0036 
0037             // frame
0038             GtkWidget* frame( gtk_frame_new( "Horizontal" ) );
0039             gtk_box_pack_start( GTK_BOX( mainWidget ), frame, true, true, 0 );
0040             gtk_widget_show( frame );
0041 
0042             // container
0043             GtkWidget* box( gtk_vbox_new( false, 0 ) );
0044             gtk_container_set_border_width( GTK_CONTAINER( box ), 5 );
0045             gtk_box_set_spacing( GTK_BOX( box ), 2 );
0046             gtk_widget_show( box );
0047             gtk_container_add( GTK_CONTAINER( frame ), box );
0048 
0049             // scale
0050             _horizontalSliders._scale = gtk_hscale_new_with_range( 0, 100, 1 );
0051             gtk_scale_set_draw_value( GTK_SCALE( _horizontalSliders._scale ), false );
0052             gtk_box_pack_start( GTK_BOX( box ), _horizontalSliders._scale, false, true, 0 );
0053             gtk_widget_show( _horizontalSliders._scale );
0054 
0055 
0056             // progress entry
0057             _horizontalSliders._progressEntry = gtk_entry_new();
0058             gtk_entry_set_text( GTK_ENTRY( _horizontalSliders._progressEntry ), "Progress Bar Entry" );
0059             gtk_entry_set_progress_fraction( GTK_ENTRY( _horizontalSliders._progressEntry ), 0.25 );
0060             gtk_box_pack_start( GTK_BOX( box ), _horizontalSliders._progressEntry, false, true, 0 );
0061             gtk_widget_show( _horizontalSliders._progressEntry );
0062 
0063             // progress bar
0064             _horizontalSliders._progressBar = gtk_progress_bar_new();
0065             #if GTK_CHECK_VERSION(3, 0, 0)
0066             gtk_orientable_set_orientation( GTK_ORIENTABLE( _horizontalSliders._progressBar ), GTK_ORIENTATION_HORIZONTAL );
0067             #else
0068             gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR( _horizontalSliders._progressBar ), GTK_PROGRESS_LEFT_TO_RIGHT );
0069             #endif
0070 
0071             gtk_progress_set_show_text( GTK_PROGRESS( _horizontalSliders._progressBar ), true );
0072             gtk_box_pack_start( GTK_BOX( box ), _horizontalSliders._progressBar, false, true, 0 );
0073             gtk_widget_show( _horizontalSliders._progressBar );
0074 
0075             // pulse progressBar
0076             _pulseProgressBar = gtk_progress_bar_new();
0077             #if GTK_CHECK_VERSION(3, 0, 0)
0078             gtk_orientable_set_orientation( GTK_ORIENTABLE( _pulseProgressBar ), GTK_ORIENTATION_HORIZONTAL );
0079             #else
0080             gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR( _pulseProgressBar ), GTK_PROGRESS_LEFT_TO_RIGHT );
0081             #endif
0082 
0083             gtk_progress_bar_set_pulse_step( GTK_PROGRESS_BAR( _pulseProgressBar ), 0.01 );
0084             gtk_box_pack_start( GTK_BOX( box ), _pulseProgressBar, false, true, 0 );
0085             gtk_widget_show( _pulseProgressBar );
0086 
0087             // scrollbar
0088             GtkAdjustment* adjustment( GTK_ADJUSTMENT( gtk_adjustment_new( 25, 0, 110, 1, 1, 10 ) ) );
0089             _horizontalSliders._scrollBar = gtk_hscrollbar_new( adjustment );
0090             gtk_box_pack_start( GTK_BOX( box ), _horizontalSliders._scrollBar, false, true, 0 );
0091             gtk_widget_show( _horizontalSliders._scrollBar );
0092 
0093         }
0094 
0095         // vertical sliders
0096         {
0097 
0098             // frame
0099             GtkWidget* frame( gtk_frame_new( "Vertical" ) );
0100             gtk_box_pack_start( GTK_BOX( mainWidget ), frame, false, true, 0 );
0101             gtk_widget_show( frame );
0102 
0103             // container
0104             GtkWidget* box( gtk_hbox_new( false, 0 ) );
0105             gtk_container_set_border_width( GTK_CONTAINER( box ), 5 );
0106             gtk_box_set_spacing( GTK_BOX( box ), 5 );
0107             gtk_widget_show( box );
0108             gtk_container_add( GTK_CONTAINER( frame ), box );
0109 
0110             // scale
0111             _verticalSliders._scale = gtk_vscale_new_with_range( 0, 100, 1 );
0112             gtk_scale_set_draw_value( GTK_SCALE( _verticalSliders._scale ), false );
0113             gtk_box_pack_start( GTK_BOX( box ), _verticalSliders._scale, false, true, 0 );
0114             gtk_widget_show( _verticalSliders._scale );
0115 
0116             // progress bar
0117             _verticalSliders._progressBar = gtk_progress_bar_new();
0118             #if GTK_CHECK_VERSION(3, 0, 0)
0119             gtk_orientable_set_orientation( GTK_ORIENTABLE( _verticalSliders._progressBar ), GTK_ORIENTATION_VERTICAL );
0120             #else
0121             gtk_progress_bar_set_orientation( GTK_PROGRESS_BAR( _verticalSliders._progressBar ), GTK_PROGRESS_BOTTOM_TO_TOP );
0122             #endif
0123 
0124             gtk_progress_set_show_text( GTK_PROGRESS( _verticalSliders._progressBar ), true );
0125             gtk_box_pack_start( GTK_BOX( box ), _verticalSliders._progressBar, false, true, 0 );
0126             gtk_widget_show( _verticalSliders._progressBar );
0127 
0128             // scrollbar
0129             GtkAdjustment* adjustment( GTK_ADJUSTMENT( gtk_adjustment_new( 25, 0, 110, 1, 1, 10 ) ) );
0130             _verticalSliders._scrollBar = gtk_vscrollbar_new( adjustment );
0131             gtk_box_pack_start( GTK_BOX( box ), _verticalSliders._scrollBar, false, true, 0 );
0132             gtk_widget_show( _verticalSliders._scrollBar );
0133 
0134         }
0135 
0136         // connections
0137         connect( G_OBJECT( _horizontalSliders._scale ), "value-changed", GCallback( valueChanged ), this );
0138         connect( G_OBJECT( _horizontalSliders._scrollBar ), "value-changed", GCallback( valueChanged ), this );
0139 
0140         connect( G_OBJECT( _verticalSliders._scale ), "value-changed", GCallback( valueChanged ), this );
0141         connect( G_OBJECT( _verticalSliders._scrollBar ), "value-changed", GCallback( valueChanged ), this );
0142 
0143         // Initialize all
0144         gtk_range_set_value( GTK_RANGE( _verticalSliders._scale ), 25 );
0145     }
0146 
0147     //____________________________________________________
0148     SliderDemoWidget::~SliderDemoWidget( void )
0149     {}
0150 
0151     //____________________________________________________
0152     gboolean SliderDemoWidget::pulseProgressBar( gpointer pointer )
0153     {
0154         SliderDemoWidget& demoWidget( *static_cast<SliderDemoWidget*>( pointer ) );
0155         gtk_progress_bar_pulse( GTK_PROGRESS_BAR( demoWidget._pulseProgressBar ) );
0156         return TRUE;
0157     }
0158 
0159     //____________________________________________________
0160     void SliderDemoWidget::valueChanged( GtkRange* range, gpointer pointer )
0161     {
0162         const double value( gtk_range_get_value( range ) );
0163         SliderDemoWidget& data( *static_cast<SliderDemoWidget*>( pointer ) );
0164         data._horizontalSliders.setValue( value );
0165         data._verticalSliders.setValue( value );
0166     }
0167 
0168     //____________________________________________________
0169     void SliderDemoWidget::Sliders::setValue( const double& value ) const
0170     {
0171         gtk_range_set_value( GTK_RANGE( _scale ), value );
0172         gtk_progress_bar_set_fraction( GTK_PROGRESS_BAR( _progressBar ), value/100 );
0173         gtk_range_set_value( GTK_RANGE( _scrollBar ), value );
0174         if( _progressEntry ) gtk_entry_set_progress_fraction( GTK_ENTRY( _progressEntry ), value/100 );
0175     }
0176 
0177 }