summaryrefslogtreecommitdiff
path: root/library/tzselect.cpp
Unidiff
Diffstat (limited to 'library/tzselect.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r--library/tzselect.cpp1
1 files changed, 1 insertions, 0 deletions
diff --git a/library/tzselect.cpp b/library/tzselect.cpp
index 848dfb7..8dd427f 100644
--- a/library/tzselect.cpp
+++ b/library/tzselect.cpp
@@ -1,302 +1,303 @@
1/********************************************************************** 1/**********************************************************************
2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved. 2** Copyright (C) 2000-2002 Trolltech AS. All rights reserved.
3** 3**
4** This file is part of the Qtopia Environment. 4** This file is part of the Qtopia Environment.
5** 5**
6** This file may be distributed and/or modified under the terms of the 6** This file may be distributed and/or modified under the terms of the
7** GNU General Public License version 2 as published by the Free Software 7** GNU General Public License version 2 as published by the Free Software
8** Foundation and appearing in the file LICENSE.GPL included in the 8** Foundation and appearing in the file LICENSE.GPL included in the
9** packaging of this file. 9** packaging of this file.
10** 10**
11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE 11** This file is provided AS IS with NO WARRANTY OF ANY KIND, INCLUDING THE
12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. 12** WARRANTY OF DESIGN, MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
13** 13**
14** See http://www.trolltech.com/gpl/ for GPL licensing information. 14** See http://www.trolltech.com/gpl/ for GPL licensing information.
15** 15**
16** Contact info@trolltech.com if any conditions of this licensing are 16** Contact info@trolltech.com if any conditions of this licensing are
17** not clear to you. 17** not clear to you.
18** 18**
19**********************************************************************/ 19**********************************************************************/
20 20
21#define QTOPIA_INTERNAL_TZSELECT_INC_LOCAL 21#define QTOPIA_INTERNAL_TZSELECT_INC_LOCAL
22 22
23#include "tzselect.h" 23#include "tzselect.h"
24#include "resource.h" 24#include "resource.h"
25#include "config.h" 25#include "config.h"
26#include <qtoolbutton.h> 26#include <qtoolbutton.h>
27#include <qfile.h> 27#include <qfile.h>
28#include <stdlib.h> 28#include <stdlib.h>
29 29
30#include <qcopchannel_qws.h> 30#include <qcopchannel_qws.h>
31#include <qpe/global.h>
31#include <qpe/qpeapplication.h> 32#include <qpe/qpeapplication.h>
32#include <qmessagebox.h> 33#include <qmessagebox.h>
33 34
34/*! 35/*!
35 \class TimeZoneSelector 36 \class TimeZoneSelector
36 37
37 \brief The TimeZoneSelector widget allows users to configure their time zone information. 38 \brief The TimeZoneSelector widget allows users to configure their time zone information.
38 39
39 \ingroup qtopiaemb 40 \ingroup qtopiaemb
40*/ 41*/
41 42
42class TimeZoneSelectorPrivate 43class TimeZoneSelectorPrivate
43{ 44{
44public: 45public:
45 TimeZoneSelectorPrivate() : includeLocal(FALSE) {} 46 TimeZoneSelectorPrivate() : includeLocal(FALSE) {}
46 bool includeLocal; 47 bool includeLocal;
47}; 48};
48 49
49TZCombo::TZCombo( QWidget *p, const char* n ) 50TZCombo::TZCombo( QWidget *p, const char* n )
50 : QComboBox( p, n ) 51 : QComboBox( p, n )
51{ 52{
52 updateZones(); 53 updateZones();
53 // check to see if TZ is set, if it is set the current item to that 54 // check to see if TZ is set, if it is set the current item to that
54 QString tz = getenv("TZ"); 55 QString tz = getenv("TZ");
55 if (parent()->inherits("TimeZoneSelector")) { 56 if (parent()->inherits("TimeZoneSelector")) {
56 if ( ((TimeZoneSelector *)parent())->localIncluded() ) { 57 if ( ((TimeZoneSelector *)parent())->localIncluded() ) {
57 // overide to the 'local' type. 58 // overide to the 'local' type.
58 tz = "None"; 59 tz = "None";
59 } 60 }
60 } 61 }
61 if ( !tz.isNull() ) { 62 if ( !tz.isNull() ) {
62 int n = 0, 63 int n = 0,
63 index = 0; 64 index = 0;
64 for ( QStringList::Iterator it=identifiers.begin(); 65 for ( QStringList::Iterator it=identifiers.begin();
65 it!=identifiers.end(); ++it) { 66 it!=identifiers.end(); ++it) {
66 if ( *it == tz ) 67 if ( *it == tz )
67 index = n; 68 index = n;
68 n++; 69 n++;
69 } 70 }
70 setCurrentItem(index); 71 setCurrentItem(index);
71 } else { 72 } else {
72 setCurrentItem(0); 73 setCurrentItem(0);
73 } 74 }
74 75
75 76
76 77
77 // listen on QPE/System 78 // listen on QPE/System
78#if !defined(QT_NO_COP) 79#if !defined(QT_NO_COP)
79 QCopChannel *channel = new QCopChannel( "QPE/System", this ); 80 QCopChannel *channel = new QCopChannel( "QPE/System", this );
80 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)), 81 connect( channel, SIGNAL(received(const QCString&,const QByteArray&)),
81 this, SLOT(handleSystemChannel(const QCString&,const QByteArray&)) ); 82 this, SLOT(handleSystemChannel(const QCString&,const QByteArray&)) );
82#endif 83#endif
83 84
84 85
85} 86}
86 87
87TZCombo::~TZCombo() 88TZCombo::~TZCombo()
88{ 89{
89} 90}
90 91
91void TZCombo::updateZones() 92void TZCombo::updateZones()
92{ 93{
93 QString cur = currentText(); 94 QString cur = currentText();
94 clear(); 95 clear();
95 identifiers.clear(); 96 identifiers.clear();
96 int curix=0; 97 int curix=0;
97 QString tz = getenv("TZ"); 98 QString tz = getenv("TZ");
98 bool tzFound = FALSE; 99 bool tzFound = FALSE;
99 Config cfg("CityTime"); 100 Config cfg("CityTime");
100 cfg.setGroup("TimeZones"); 101 cfg.setGroup("TimeZones");
101 int listIndex = 0; 102 int listIndex = 0;
102 if (parent()->inherits("TimeZoneSelector")) { 103 if (parent()->inherits("TimeZoneSelector")) {
103 if ( ((TimeZoneSelector *)parent())->localIncluded() ) { 104 if ( ((TimeZoneSelector *)parent())->localIncluded() ) {
104 // overide to the 'local' type. 105 // overide to the 'local' type.
105 identifiers.append( "None" ); 106 identifiers.append( "None" );
106 insertItem( tr("None") ); 107 insertItem( tr("None") );
107 if ( cur == tr("None")) 108 if ( cur == tr("None"))
108 curix = 0; 109 curix = 0;
109 listIndex++; 110 listIndex++;
110 } 111 }
111 } 112 }
112 int cfgIndex = 0; 113 int cfgIndex = 0;
113 while (1) { 114 while (1) {
114 QString zn = cfg.readEntry("Zone"+QString::number(cfgIndex), QString::null); 115 QString zn = cfg.readEntry("Zone"+QString::number(cfgIndex), QString::null);
115 if ( zn.isNull() ) 116 if ( zn.isNull() )
116 break; 117 break;
117 if ( zn == tz ) 118 if ( zn == tz )
118 tzFound = TRUE; 119 tzFound = TRUE;
119 QString nm = cfg.readEntry("ZoneName"+QString::number(cfgIndex)); 120 QString nm = cfg.readEntry("ZoneName"+QString::number(cfgIndex));
120 identifiers.append(zn); 121 identifiers.append(zn);
121 insertItem(nm); 122 insertItem(nm);
122 if ( nm == cur ) 123 if ( nm == cur )
123 curix = listIndex; 124 curix = listIndex;
124 ++cfgIndex; 125 ++cfgIndex;
125 ++listIndex; 126 ++listIndex;
126 } 127 }
127 if ( !listIndex ) { 128 if ( !listIndex ) {
128 QStringList list = timezoneDefaults(); 129 QStringList list = timezoneDefaults();
129 for ( QStringList::Iterator it = list.begin(); it!=list.end(); ++it ) { 130 for ( QStringList::Iterator it = list.begin(); it!=list.end(); ++it ) {
130 QString zn = *it; 131 QString zn = *it;
131 QString nm = *++it; 132 QString nm = *++it;
132 if ( zn == tz ) 133 if ( zn == tz )
133 tzFound = TRUE; 134 tzFound = TRUE;
134 if ( nm == cur ) 135 if ( nm == cur )
135 curix = listIndex; 136 curix = listIndex;
136 identifiers.append(zn); 137 identifiers.append(zn);
137 insertItem(nm); 138 insertItem(nm);
138 ++listIndex; 139 ++listIndex;
139 } 140 }
140 } 141 }
141 for (QStringList::Iterator it=extras.begin(); it!=extras.end(); ++it) { 142 for (QStringList::Iterator it=extras.begin(); it!=extras.end(); ++it) {
142 insertItem(*it); 143 insertItem(*it);
143 identifiers.append(*it); 144 identifiers.append(*it);
144 if ( *it == cur ) 145 if ( *it == cur )
145 curix = listIndex; 146 curix = listIndex;
146 ++listIndex; 147 ++listIndex;
147 } 148 }
148 if ( !tzFound && !tz.isEmpty()) { 149 if ( !tzFound && !tz.isEmpty()) {
149 int i = tz.find( '/' ); 150 int i = tz.find( '/' );
150 QString nm = tz.mid( i+1 ).replace(QRegExp("_"), " "); 151 QString nm = tz.mid( i+1 ).replace(QRegExp("_"), " ");
151 identifiers.append(tz); 152 identifiers.append(tz);
152 insertItem(nm); 153 insertItem(nm);
153 if ( nm == cur ) 154 if ( nm == cur )
154 curix = listIndex; 155 curix = listIndex;
155 ++listIndex; 156 ++listIndex;
156 } 157 }
157 setCurrentItem(curix); 158 setCurrentItem(curix);
158} 159}
159 160
160 161
161void TZCombo::keyPressEvent( QKeyEvent *e ) 162void TZCombo::keyPressEvent( QKeyEvent *e )
162{ 163{
163 // ### should popup() in Qt 3.0 (it's virtual there) 164 // ### should popup() in Qt 3.0 (it's virtual there)
164// updateZones(); 165// updateZones();
165 QComboBox::keyPressEvent(e); 166 QComboBox::keyPressEvent(e);
166} 167}
167 168
168void TZCombo::mousePressEvent(QMouseEvent*e) 169void TZCombo::mousePressEvent(QMouseEvent*e)
169{ 170{
170 // ### should popup() in Qt 3.0 (it's virtual there) 171 // ### should popup() in Qt 3.0 (it's virtual there)
171// updateZones(); 172// updateZones();
172 QComboBox::mousePressEvent(e); 173 QComboBox::mousePressEvent(e);
173} 174}
174 175
175QString TZCombo::currZone() const 176QString TZCombo::currZone() const
176{ 177{
177 return identifiers[currentItem()]; 178 return identifiers[currentItem()];
178} 179}
179 180
180void TZCombo::setCurrZone( const QString& id ) 181void TZCombo::setCurrZone( const QString& id )
181{ 182{
182 for (int i=0; i< count(); i++) { 183 for (int i=0; i< count(); i++) {
183 if ( identifiers[i] == id ) { 184 if ( identifiers[i] == id ) {
184 setCurrentItem(i); 185 setCurrentItem(i);
185 return; 186 return;
186} 187}
187 } 188 }
188 insertItem(id); 189 insertItem(id);
189 setCurrentItem( count() - 1); 190 setCurrentItem( count() - 1);
190 identifiers.append(id); 191 identifiers.append(id);
191 extras.append(id); 192 extras.append(id);
192} 193}
193 194
194 195
195 196
196void TZCombo::handleSystemChannel(const QCString&msg, const QByteArray&) 197void TZCombo::handleSystemChannel(const QCString&msg, const QByteArray&)
197{ 198{
198 if ( msg == "timeZoneListChange()" ) { 199 if ( msg == "timeZoneListChange()" ) {
199 updateZones(); 200 updateZones();
200 } 201 }
201} 202}
202 203
203/*! 204/*!
204 Creates a new TimeZoneSelector with parent \a p and name \a n. The combobox will be 205 Creates a new TimeZoneSelector with parent \a p and name \a n. The combobox will be
205 populated with the available timezones. 206 populated with the available timezones.
206*/ 207*/
207 208
208TimeZoneSelector::TimeZoneSelector(QWidget* p, const char* n) : 209TimeZoneSelector::TimeZoneSelector(QWidget* p, const char* n) :
209 QHBox(p,n) 210 QHBox(p,n)
210{ 211{
211 d = new TimeZoneSelectorPrivate(); 212 d = new TimeZoneSelectorPrivate();
212 // build the combobox before we do any updates... 213 // build the combobox before we do any updates...
213 cmbTz = new TZCombo( this, "timezone combo" ); 214 cmbTz = new TZCombo( this, "timezone combo" );
214 215
215 cmdTz = new QToolButton( this, "timezone button" ); 216 cmdTz = new QToolButton( this, "timezone button" );
216 cmdTz->setIconSet( Resource::loadIconSet( "citytime_icon" ) ); 217 cmdTz->setIconSet( Resource::loadIconSet( "citytime_icon" ) );
217 cmdTz->setMaximumSize( cmdTz->sizeHint() ); 218 cmdTz->setMaximumSize( cmdTz->sizeHint() );
218 219
219 // set up a connection to catch a newly selected item and throw our 220 // set up a connection to catch a newly selected item and throw our
220 // signal 221 // signal
221 QObject::connect( cmbTz, SIGNAL( activated(int) ), 222 QObject::connect( cmbTz, SIGNAL( activated(int) ),
222 this, SLOT( slotTzActive(int) ) ); 223 this, SLOT( slotTzActive(int) ) );
223 QObject::connect( cmdTz, SIGNAL( clicked() ), 224 QObject::connect( cmdTz, SIGNAL( clicked() ),
224 this, SLOT( slotExecute() ) ); 225 this, SLOT( slotExecute() ) );
225} 226}
226 227
227/*! 228/*!
228 Destroys a TimeZoneSelector. 229 Destroys a TimeZoneSelector.
229*/ 230*/
230TimeZoneSelector::~TimeZoneSelector() 231TimeZoneSelector::~TimeZoneSelector()
231{ 232{
232} 233}
233 234
234void TimeZoneSelector::setLocalIncluded(bool b) 235void TimeZoneSelector::setLocalIncluded(bool b)
235{ 236{
236 d->includeLocal = b; 237 d->includeLocal = b;
237 cmbTz->updateZones(); 238 cmbTz->updateZones();
238} 239}
239 240
240bool TimeZoneSelector::localIncluded() const 241bool TimeZoneSelector::localIncluded() const
241{ 242{
242 return d->includeLocal; 243 return d->includeLocal;
243} 244}
244 245
245/*! 246/*!
246 Returns the currently selected timezone as a string in location format, e.g. 247 Returns the currently selected timezone as a string in location format, e.g.
247 \code Australia/Brisbane \endcode 248 \code Australia/Brisbane \endcode
248*/ 249*/
249QString TimeZoneSelector::currentZone() const 250QString TimeZoneSelector::currentZone() const
250{ 251{
251 return cmbTz->currZone(); 252 return cmbTz->currZone();
252} 253}
253 254
254/*! 255/*!
255 Sets the current timezone to \a id. 256 Sets the current timezone to \a id.
256*/ 257*/
257void TimeZoneSelector::setCurrentZone( const QString& id ) 258void TimeZoneSelector::setCurrentZone( const QString& id )
258{ 259{
259 cmbTz->setCurrZone( id ); 260 cmbTz->setCurrZone( id );
260} 261}
261/*! \fn void TimeZoneSelector::signalNewTz( const QString& id ) 262/*! \fn void TimeZoneSelector::signalNewTz( const QString& id )
262 This signal is emitted when a timezone has been selected by the user. The id 263 This signal is emitted when a timezone has been selected by the user. The id
263 is a \l QString in location format, eg \code Australia/Brisbane \endcode 264 is a \l QString in location format, eg \code Australia/Brisbane \endcode
264*/ 265*/
265 266
266 267
267void TimeZoneSelector::slotTzActive( int ) 268void TimeZoneSelector::slotTzActive( int )
268{ 269{
269 emit signalNewTz( cmbTz->currZone() ); 270 emit signalNewTz( cmbTz->currZone() );
270} 271}
271 272
272void TimeZoneSelector::slotExecute( void ) 273void TimeZoneSelector::slotExecute( void )
273{ 274{
274 // execute the world time application... 275 // execute the world time application...
275 if (QFile::exists(QPEApplication::qpeDir()+"bin/citytime")) 276 if (QFile::exists(QPEApplication::qpeDir()+"bin/citytime"))
276 Global::execute( "citytime" ); 277 Global::execute( "citytime" );
277 else 278 else
278 QMessageBox::warning(this,tr("citytime executable not found"), 279 QMessageBox::warning(this,tr("citytime executable not found"),
279 tr("In order to choose the time zones,\nplease install citytime.")); 280 tr("In order to choose the time zones,\nplease install citytime."));
280} 281}
281 282
282QStringList timezoneDefaults( void ) 283QStringList timezoneDefaults( void )
283{ 284{
284 QStringList tzs; 285 QStringList tzs;
285 // load up the list just like the file format (citytime.cpp) 286 // load up the list just like the file format (citytime.cpp)
286 tzs.append( "America/New_York" ); 287 tzs.append( "America/New_York" );
287 tzs.append( "New York" ); 288 tzs.append( "New York" );
288 tzs.append( "America/Los_Angeles" ); 289 tzs.append( "America/Los_Angeles" );
289 tzs.append( "Los Angeles" ); 290 tzs.append( "Los Angeles" );
290 tzs.append( "Australia/Brisbane" ); 291 tzs.append( "Australia/Brisbane" );
291 tzs.append( "Brisbane" ); 292 tzs.append( "Brisbane" );
292 tzs.append( "Europe/Berlin" ); 293 tzs.append( "Europe/Berlin" );
293 tzs.append( "Berlin" ); 294 tzs.append( "Berlin" );
294 tzs.append( "Asia/Tokyo" ); 295 tzs.append( "Asia/Tokyo" );
295 tzs.append( "Tokyo" ); 296 tzs.append( "Tokyo" );
296 tzs.append( "America/Denver" ); 297 tzs.append( "America/Denver" );
297 tzs.append( "Denver" ); 298 tzs.append( "Denver" );
298 299
299 return tzs; 300 return tzs;
300} 301}
301 302
302 303