File indexing completed on 2024-05-12 05:34:35

0001 #ifndef oxygenscrollbardata_h
0002 #define oxygenscrollbardata_h
0003 /*
0004 * this file is part of the oxygen gtk engine
0005 * SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0006 *
0007 * SPDX-License-Identifier: LGPL-2.0-or-later
0008 */
0009 
0010 #include "oxygensignal.h"
0011 #include "oxygentimer.h"
0012 
0013 #include <gtk/gtk.h>
0014 
0015 namespace Oxygen
0016 {
0017     // track scrollbars
0018     class ScrollBarData
0019     {
0020 
0021         public:
0022 
0023         //! constructor
0024         ScrollBarData( void ):
0025             _target( 0L ),
0026             _updatesDelayed( false ),
0027             _delay( 10 ),
0028             _locked( false )
0029         {}
0030 
0031         //! destructor
0032         virtual ~ScrollBarData( void )
0033         { disconnect( _target ); }
0034 
0035         //! setup connections
0036         void connect( GtkWidget* );
0037 
0038         //! disconnect
0039         void disconnect( GtkWidget* );
0040 
0041         //! toggle delayed updates
0042         void setUpdatesDelayed( bool value )
0043         { _updatesDelayed = value; }
0044 
0045         //! set delay
0046         void setDelay( int value )
0047         { _delay = value; }
0048 
0049         protected:
0050 
0051         static void valueChanged( GtkRange*, gpointer );
0052 
0053         //! delayed update
0054         static gboolean delayedUpdate( gpointer );
0055 
0056         private:
0057 
0058         //! pointer to associated widget
0059         GtkWidget* _target;
0060 
0061         //! true if updates are delayed
0062         bool _updatesDelayed;
0063 
0064         //! update delay
0065         int _delay;
0066 
0067         //! timer
0068         Timer _timer;
0069 
0070         //! true if next update must be delayed
0071         bool _locked;
0072 
0073         //! signal
0074         Signal _valueChangedId;
0075 
0076     };
0077 
0078 }
0079 
0080 #endif