1 /* wconfig_clock.cc
2  * This file belongs to Worker, a file manager for UN*X/X11.
3  * Copyright (C) 2006-2014 Ralf Hoffmann.
4  * You can contact me at: ralf@boomerangsworld.de
5  *   or http://www.boomerangsworld.de/worker
6  *
7  * This program is free software; you can redistribute it and/or modify
8  * it under the terms of the GNU General Public License as published by
9  * the Free Software Foundation; either version 2 of the License, or
10  * (at your option) any later version.
11  *
12  * This program is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
15  * GNU General Public License for more details.
16  *
17  * You should have received a copy of the GNU General Public License
18  * along with this program; if not, write to the Free Software
19  * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA  02110-1301  USA
20  */
21 
22 #include "wconfig_clock.hh"
23 #include "wconfig.h"
24 #include "worker.h"
25 #include "worker_locale.h"
26 #include "aguix/cyclebutton.h"
27 #include "aguix/stringgadget.h"
28 #include "aguix/choosebutton.h"
29 
ClockPanel(AWindow & basewin,WConfig & baseconfig)30 ClockPanel::ClockPanel( AWindow &basewin, WConfig &baseconfig ) : WConfigPanel( basewin, baseconfig )
31 {
32 }
33 
~ClockPanel()34 ClockPanel::~ClockPanel()
35 {
36 }
37 
create()38 int ClockPanel::create()
39 {
40   char *tstr;
41 
42   Panel::create();
43 
44   AContainer *ac1 = setContainer( new AContainer( this, 1, 5 ), true );
45   ac1->setBorderWidth( 5 );
46   ac1->setMinSpace( 5 );
47   ac1->setMaxSpace( 5 );
48 
49   addMultiLineText( catalog.getLocale( 689 ),
50                     *ac1,
51                     0, 0,
52                     NULL, NULL );
53 
54   AContainer *ac1_1 = ac1->add( new AContainer( this, 2, 1 ), 0, 1 );
55   ac1_1->setBorderWidth( 0 );
56   ac1_1->setMinSpace( 5 );
57   ac1_1->setMaxSpace( 5 );
58 
59   ac1_1->add( new Text( _aguix, 0, 0, catalog.getLocale( 369 ) ),
60               0, 0, AContainer::CO_FIX );
61 
62   cyb = (CycleButton*)ac1_1->add( new CycleButton( _aguix, 0, 0, 100, 0 ),
63                                 1, 0, AContainer::CO_INCW );
64   cyb->connect( this );
65   cyb->addOption( catalog.getLocale( 370 ) );
66   cyb->addOption( catalog.getLocale( 371 ) );
67   cyb->addOption( catalog.getLocale( 372 ) );
68   cyb->addOption( catalog.getLocale( 373 ) );
69   cyb->resize( cyb->getMaxSize(), cyb->getHeight() );
70   switch( _baseconfig.getClockbarMode() ) {
71     case WConfig::CLOCKBAR_MODE_TIME:
72       cyb->setOption( 1 );
73       break;
74     case WConfig::CLOCKBAR_MODE_VERSION:
75       cyb->setOption( 2 );
76       break;
77     case WConfig::CLOCKBAR_MODE_EXTERN:
78       cyb->setOption( 3 );
79       break;
80     default:
81       cyb->setOption( 0 );
82       break;
83   }
84   ac1_1->readLimits();
85 
86   cuwin = new AWindow( _aguix, 0, 0, 10, 10, "" );
87   ac1->add( cuwin, 0, 2, AContainer::CO_INCW );
88   cuwin->create();
89 
90   AContainer *ac1_cuwin = cuwin->setContainer( new AContainer( cuwin, 2, 1 ), true );
91   ac1_cuwin->setBorderWidth( 0 );
92   ac1_cuwin->setMinSpace( 5 );
93   ac1_cuwin->setMaxSpace( 5 );
94 
95   ac1_cuwin->add( new Text( _aguix, 0, 0, catalog.getLocale(129) ), 0, 0, AContainer::CO_FIX );
96 
97   tstr = (char*)_allocsafe( A_BYTESFORNUMBER( int ) );
98   sprintf( tstr, "%d", _baseconfig.getClockbarUpdatetime() );
99   cusg = (StringGadget*)ac1_cuwin->add( new StringGadget( _aguix, 0, 0, 200, tstr, 0 ), 1, 0, AContainer::CO_INCW );
100   _freesafe( tstr );
101   cusg->connect( this );
102   cuwin->contMaximize( true );
103   cuwin->show();
104 
105   ccwin = new AWindow( _aguix, 0, 0, 10, 10, "" );
106   ac1->add( ccwin, 0, 3, AContainer::CO_INCW );
107   ccwin->create();
108 
109   AContainer *ac1_ccwin = ccwin->setContainer( new AContainer( ccwin, 2, 1 ), true );
110   ac1_ccwin->setBorderWidth( 0 );
111   ac1_ccwin->setMinSpace( 5 );
112   ac1_ccwin->setMaxSpace( 5 );
113 
114   ac1_ccwin->add( new Text( _aguix, 0, 0, catalog.getLocale(374) ), 0, 0, AContainer::CO_FIX );
115   ccsg = (StringGadget*)ac1_ccwin->add( new StringGadget( _aguix, 0, 0, 200, _baseconfig.getClockbarCommand(), 0 ), 1, 0, AContainer::CO_INCW );
116   ccsg->connect( this );
117 
118   ccwin->contMaximize( true );
119   ccwin->show();
120 
121   ac1->readLimits();
122 
123   m_hint_cb = (ChooseButton*)ac1->add( new ChooseButton( _aguix, 0, 0,
124                                                          _baseconfig.getClockbarHints(),
125                                                          catalog.getLocale( 987 ), LABEL_RIGHT, 0 ),
126                                        0, 4, AContainer::CO_INCWNR );
127 
128   // now check which extra fields are visible
129   if( _baseconfig.getClockbarMode() != WConfig::CLOCKBAR_MODE_EXTERN ) {
130     ccwin->hide();
131   }
132   switch( _baseconfig.getClockbarMode() ) {
133     case WConfig::CLOCKBAR_MODE_VERSION:
134       cuwin->hide();
135       break;
136     case WConfig::CLOCKBAR_MODE_TIME:
137     case WConfig::CLOCKBAR_MODE_EXTERN:
138     default:
139       break;
140   }
141 
142   contMaximize( true );
143   return 0;
144 }
145 
saveValues()146 int ClockPanel::saveValues()
147 {
148   switch(cyb->getSelectedOption()) {
149     case 1:
150       _baseconfig.setClockbarMode( WConfig::CLOCKBAR_MODE_TIME );
151       break;
152     case 2:
153       _baseconfig.setClockbarMode( WConfig::CLOCKBAR_MODE_VERSION );
154       break;
155     case 3:
156       _baseconfig.setClockbarMode( WConfig::CLOCKBAR_MODE_EXTERN );
157       break;
158     default:
159       _baseconfig.setClockbarMode( WConfig::CLOCKBAR_MODE_TIMERAM );
160       break;
161   }
162   _baseconfig.setClockbarUpdatetime( atoi( cusg->getText() ) );
163   _baseconfig.setClockbarCommand( ccsg->getText() );
164   _baseconfig.setClockbarHints( m_hint_cb->getState() );
165   return 0;
166 }
167 
run(Widget * elem,const AGMessage & msg)168 void ClockPanel::run( Widget *elem, const AGMessage &msg )
169 {
170   if ( msg.type == AG_CYCLEBUTTONCLICKED ) {
171     if ( msg.cyclebutton.cyclebutton == cyb ) {
172       if ( msg.cyclebutton.option == 3 ) ccwin->show();
173       else ccwin->hide();
174       switch ( msg.cyclebutton.option ) {
175         case WConfig::CLOCKBAR_MODE_VERSION:
176           cuwin->hide();
177           break;
178         case WConfig::CLOCKBAR_MODE_TIME:
179         case WConfig::CLOCKBAR_MODE_EXTERN:
180         default:
181           cuwin->show();
182           break;
183       }
184     }
185   } else if ( msg.type == AG_STRINGGADGET_DEACTIVATE ) {
186     if ( msg.stringgadget.sg == cusg ) {
187       int val = atoi( cusg->getText() );
188       if ( val < 1 ) cusg->setText( "1" );
189     }
190   }
191 }
192