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