--Boundary-00=_rwS5CIFrHJdQQTw Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 7bit Content-Disposition: inline Retry... ---------- Forwarded Message ---------- Subject: [PATCH] Port koprefsdialog to new generic timezone support Date: Sunday 24 July 2005 15:48 From: Shaheed To: kde-pim@mail.kde.org Hi all, Here is a patch to port koprefsdialog to the new generic timezone support. You will note that the QComboBox has been replaced with a (derivation of) KListView: this is deliberate and intended to eventually allow for multiple timezones to be selected, a primary and one or more secondaries. The idea is to be able to display the secondary timezone(s) in some manner on the koagendaview so that, for example, someone corresponding with a colleague in a different timezone can see both "clocks" simultaneously. Comments? Thanks, Shaheed P.S. Please CC me on responses ------------------------------------------------------- --Boundary-00=_rwS5CIFrHJdQQTw Content-Type: text/x-diff; charset="utf-8"; name="timezone.diff" Content-Transfer-Encoding: 7bit Content-Disposition: attachment; filename="timezone.diff" Index: koprefsdialog.cpp =================================================================== --- koprefsdialog.cpp (revision 437945) +++ koprefsdialog.cpp (working copy) @@ -32,6 +32,7 @@ #include #include #include +#include #include #include #include @@ -55,15 +56,10 @@ #include #include #include +#include +#include #include -#if defined(USE_SOLARIS) -#include - -#define ZONEINFODIR "/usr/share/lib/zoneinfo" -#define INITFILE "/etc/default/init" -#endif - #include "koprefs.h" #include "koprefsdialog.h" @@ -219,99 +215,22 @@ QGridLayout *topLayout = new QGridLayout(topFrame,6,2); topLayout->setSpacing( KDialog::spacingHint() ); - QHBox *timeZoneBox = new QHBox( topFrame ); + QVBox *timeZoneBox = new QVBox( topFrame ); topLayout->addMultiCellWidget( timeZoneBox, 0, 0, 0, 1 ); QLabel *timeZoneLabel = new QLabel( i18n("Timezone:"), timeZoneBox ); QString whatsThis = i18n( "Select your timezone from the list of " - "locations on this drop down box. If your city " + "locations. If your city " "is not listed, select one which shares the " "same timezone. KOrganizer will automatically " "adjust for daylight savings." ); QWhatsThis::add( timeZoneLabel, whatsThis ); - mTimeZoneCombo = new QComboBox( timeZoneBox ); - connect( mTimeZoneCombo, SIGNAL( activated( int ) ), + mTimeZoneList = new KTimezoneWidget( timeZoneBox ); + connect( mTimeZoneList, SIGNAL( selectionChanged() ), SLOT( slotWidChanged() ) ); + QWhatsThis::add( mTimeZoneList, whatsThis ); - FILE *f; - char tempstring[101] = "Unknown"; - QString sCurrentlySet(i18n("Unknown")); - int nCurrentlySet = 0; - QStringList list; - - // read the currently set time zone - #if defined(USE_SOLARIS) // MARCO - char buf[MAXPATHLEN]; - - snprintf(buf, MAXPATHLEN, - "/bin/fgrep 'TZ=' %s | /bin/head -n 1 | /bin/cut -b 4-", - INITFILE); - - if (f = popen(buf, "r")) - { - if (fgets(buf, MAXPATHLEN - 1, f) != NULL) - { - buf[strlen(buf) - 1] = '\0'; - sCurrentlySet = QString(buf); - } - pclose(f); - } - #else - if((f = fopen("/etc/timezone", "r")) != NULL) { - // get the currently set timezone - fgets(tempstring, 100, f); - tempstring[strlen(tempstring) - 1] = '\0'; - sCurrentlySet = QString(tempstring); - fclose(f); - } - #endif // !USE_SOLARIS - - mTimeZoneCombo->insertItem(i18n("[No selection]")); - - // Read all system time zones - #if defined(USE_SOLARIS) // MARCO - snprintf(buf, MAXPATHLEN, - "/bin/find %s \\( -name src -prune \\) -o -type f -print | /bin/cut -b %d-", - ZONEINFODIR, strlen(ZONEINFODIR) + 2); - - if (f = popen(buf, "r")) - { - while(fgets(buf, MAXPATHLEN - 1, f) != NULL) - { - buf[strlen(buf) - 1] = '\0'; - list.append(buf); - } - pclose(f); - } - - #else - f = popen("grep -e ^[^#] /usr/share/zoneinfo/zone.tab | cut -f 3","r"); - if (!f) return; - while(fgets(tempstring, 100, f) != NULL) { - tempstring[strlen(tempstring)-1] = '\0'; - list.append(i18n(tempstring)); - tzonenames << tempstring; - } - pclose(f); - #endif // !USE_SOLARIS - list.sort(); - - mTimeZoneCombo->insertStringList(list); - - // find the currently set time zone and select it - for ( int i = 0; i < mTimeZoneCombo->count(); ++i ) - { - if (mTimeZoneCombo->text(i) == sCurrentlySet) - { - nCurrentlySet = i; - break; - } - } - - mTimeZoneCombo->setCurrentItem(nCurrentlySet); - QWhatsThis::add( mTimeZoneCombo, whatsThis ); - // holiday region selection QHBox *holidayRegBox = new QHBox( topFrame ); topLayout->addMultiCellWidget( holidayRegBox, 1, 1, 0, 1 ); @@ -419,7 +338,7 @@ "working hours for this day of the week. " "If this is a work day for you, check " "this box, or the working hours will not be " - "marked with color." ) ); + "marked with color." ) ); connect( mWorkDays[ index ], SIGNAL( stateChanged( int ) ), SLOT( slotWidChanged() ) ); @@ -443,8 +362,7 @@ protected: void usrReadConfig() { - setCombo( mTimeZoneCombo, - i18n( KOPrefs::instance()->mTimeZoneId.utf8() ) ); + mTimeZoneList->setSelected( KOPrefs::instance()->mTimeZoneId.utf8(), true ); mAlarmTimeCombo->setCurrentItem( KOPrefs::instance()->mAlarmTime ); for ( int i = 0; i < 7; ++i ) { @@ -455,14 +373,7 @@ void usrWriteConfig() { // Find untranslated selected zone - QStringList::Iterator tz; - for ( tz = tzonenames.begin(); tz != tzonenames.end(); ++tz ) - if (mTimeZoneCombo->currentText() == i18n((*tz).utf8())) - break; - if (tz != tzonenames.end()) - KOPrefs::instance()->mTimeZoneId = (*tz); - else - KOPrefs::instance()->mTimeZoneId = mTimeZoneCombo->currentText(); + KOPrefs::instance()->mTimeZoneId = mTimeZoneList->selection()[0]; KOPrefs::instance()->mHolidays = ( mHolidayCombo->currentItem() == 0 ) ? // (None) QString::null : @@ -477,25 +388,8 @@ KOPrefs::instance()->writeConfig(); } - void setCombo( QComboBox *combo, const QString &text, - const QStringList *tags = 0 ) - { - if (tags) { - int i = tags->findIndex(text); - if (i > 0) combo->setCurrentItem(i); - } else { - for(int i=0;icount();++i) { - if (combo->text(i) == text) { - combo->setCurrentItem(i); - break; - } - } - } - } - private: - QComboBox *mTimeZoneCombo; - QStringList tzonenames; + KTimezoneWidget *mTimeZoneList; QComboBox *mHolidayCombo; QMap mRegionMap; QComboBox *mAlarmTimeCombo; @@ -937,7 +831,7 @@ QPushButton *add = new QPushButton(i18n("New"),topFrame,"new"); whatsThis = i18n( "Press this button to add a new entry to the " "additional e-mail addresses list. Use the edit " - "box above to edit the new entry." ); + "box above to edit the new entry." ); QWhatsThis::add( add, whatsThis ); topLayout->addWidget(add,5,0); QPushButton *del = new QPushButton(i18n("Remove"),topFrame,"remove"); --Boundary-00=_rwS5CIFrHJdQQTw Content-Type: text/plain; charset="iso-8859-1" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Disposition: inline _______________________________________________ kde-pim mailing list kde-pim@kde.org https://mail.kde.org/mailman/listinfo/kde-pim kde-pim home page at http://pim.kde.org/ --Boundary-00=_rwS5CIFrHJdQQTw--