[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [publictransport] engine: Add time zone validity test, validate in dialog
From:       Friedrich_Karl_Tilman_Pülz <fpuelz () gmx ! de>
Date:       2012-11-30 20:36:57
Message-ID: 20121130203657.A033BA60DA () git ! kde ! org
[Download RAW message or body]

Git commit 57be0e24f5eda742995a48af8f31db382225c153 by Friedrich Karl Tilman Pülz.
Committed on 28/11/2012 at 16:24.
Pushed by fkpulz into branch 'master'.

Add time zone validity test, validate in dialog

New test ServiceProviderDataTimeZoneTest in TestModel.
Add ServiceProviderDataTester::isTimeZoneValid().
Show error in ProjectSettingsDialog when the time zone is invalid.

Improve ProjectSettingsDialog::appendMessageWidgetAfter()
to show the message at the bottom of the current tab if the
widget after which the message should be shown is not visible,
ie. on another tab.

Fix time zone name "PST" to "America/Los_Angeles" for us_bart
(plus formatting done by TimetableMate).

Fix name of the main QTabWidget in timetablemateview_base.ui,
somehow that name was used twice: "tabNotes". Renamed to "tabWidget".

M  +16   -13   engine/gtfs/serviceProviders/us_bart.pts
M  +23   -1    engine/timetablemate/src/projectsettingsdialog.cpp
M  +22   -0    engine/timetablemate/src/serviceproviderdatatester.cpp
M  +3    -0    engine/timetablemate/src/serviceproviderdatatester.h
M  +8    -0    engine/timetablemate/src/testmodel.cpp
M  +2    -0    engine/timetablemate/src/testmodel.h
M  +2    -2    engine/timetablemate/src/timetablemateview_base.ui

http://commits.kde.org/publictransport/57be0e24f5eda742995a48af8f31db382225c153

diff --git a/engine/gtfs/serviceProviders/us_bart.pts \
b/engine/gtfs/serviceProviders/us_bart.pts index 92af1f3..77a95e5 100644
--- a/engine/gtfs/serviceProviders/us_bart.pts
+++ b/engine/gtfs/serviceProviders/us_bart.pts
@@ -1,14 +1,17 @@
-<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
-<serviceProvider fileVersion="1.0" version="1.0" type="GTFS">
-
-<name lang="en">California, San Fransisco Bay Area (BART)</name>
-<author> <fullname>Friedrich Pülz</fullname> <short>fpuelz</short> \
                <email>fpuelz@gmx.de</email> </author>
-<description>Accessor for California, San Fransisco Bay Area, using the GTFS feed of \
                Bay Area Rapid Transit (BART).</description>
-<credit>Route and arrival data provided by permission of BART</credit>
-<timeZone>PST</timeZone>
-<url>http://www.bart.gov</url>
-<feedUrl>http://bart.gov/dev/schedules/google_transit.zip</feedUrl>
-<realtimeTripUpdateUrl>http://www.bart.gov/dev/gtrtfs/tripupdate.aspx</realtimeTripUpdateUrl>
                
-<realtimeAlertsUrl>http://www.bart.gov/dev/gtrtfs/alerts.aspx</realtimeAlertsUrl>
-
+<?xml version="1.0" encoding="UTF-8"?>
+<serviceProvider fileVersion="1.0" version="1.0" type="gtfs">
+    <name lang="en">California, San Fransisco Bay Area (BART)</name>
+    <description lang="en">Accessor for California, San Fransisco Bay Area, using \
the GTFS feed of Bay Area Rapid Transit (BART).</description> +    <author>
+        <fullname>Friedrich Pülz</fullname>
+        <short>fpuelz</short>
+        <email>fpuelz@gmx.de</email>
+    </author>
+    <url>http://www.bart.gov</url>
+    <shortUrl>www.bart.gov</shortUrl>
+    <credit>Route and arrival data provided by permission of BART</credit>
+    <feedUrl>http://bart.gov/dev/schedules/google_transit.zip</feedUrl>
+    <realtimeTripUpdateUrl>http://www.bart.gov/dev/gtrtfs/tripupdate.aspx</realtimeTripUpdateUrl>
 +    <realtimeAlertsUrl>http://www.bart.gov/dev/gtrtfs/alerts.aspx</realtimeAlertsUrl>
 +    <timeZone>America/Los_Angeles</timeZone>
 </serviceProvider>
diff --git a/engine/timetablemate/src/projectsettingsdialog.cpp \
b/engine/timetablemate/src/projectsettingsdialog.cpp index 5efff51..2a8d803 100644
--- a/engine/timetablemate/src/projectsettingsdialog.cpp
+++ b/engine/timetablemate/src/projectsettingsdialog.cpp
@@ -499,6 +499,18 @@ bool ProjectSettingsDialog::testWidget( QWidget *widget )
 
 void ProjectSettingsDialog::appendMessageWidgetAfter( QWidget *after, const QString \
&errorMessage )  {
+    if ( !after || !after->isVisible() ) {
+        // The widget after which the error message should be shown is not visible,
+        // ie. it is not in the current tab, use the last widget of the current tab \
instead +        QWidget *tab = ui_provider->tabWidget->currentWidget();
+        after = tab->layout()->itemAt( tab->layout()->count() - 1 )->widget();
+        if ( !after ) {
+            kWarning() << "Could not find last widget in current tab to show this \
error message:" +                       << errorMessage;
+            return;
+        }
+    }
+
     QFormLayout *formLayout = qobject_cast< QFormLayout* >( \
after->parentWidget()->layout() );  Q_ASSERT( formLayout );
 
@@ -891,7 +903,17 @@ void ProjectSettingsDialog::setProviderData( const \
ServiceProviderData *data,  ui_provider->gtfsFeed->setText( data->feedUrl() );
     ui_provider->gtfsTripUpdates->setText( data->realtimeTripUpdateUrl() );
     ui_provider->gtfsAlerts->setText( data->realtimeAlertsUrl() );
-    ui_provider->timeZone->setSelected( data->timeZone(), true );
+
+    QString errorMessage;
+    if ( ServiceProviderDataTester::isTimeZoneValid(data->timeZone(), &errorMessage)
+         == TestModel::TestFinishedSuccessfully )
+    {
+        // Valid time zone name
+        ui_provider->timeZone->setSelected( data->timeZone(), true );
+    } else {
+        // No time zone with that name found
+        appendMessageWidgetAfter( ui_provider->timeZone, errorMessage );
+    }
 #endif
 
     ui_provider->savePath->setText( fileName );
diff --git a/engine/timetablemate/src/serviceproviderdatatester.cpp \
b/engine/timetablemate/src/serviceproviderdatatester.cpp index 0506695..c021fae \
                100644
--- a/engine/timetablemate/src/serviceproviderdatatester.cpp
+++ b/engine/timetablemate/src/serviceproviderdatatester.cpp
@@ -31,6 +31,7 @@
 #include <KLocalizedString>
 #include <KDebug>
 #include <KUrl>
+#include <KSystemTimeZones>
 
 // Qt includes
 #include <QFile>
@@ -66,6 +67,8 @@ TestModel::TestState  \
ServiceProviderDataTester::runServiceProviderDataTest( Tes  case \
TestModel::ServiceProviderDataGtfsRealtimeUpdatesUrlTest:  case \
                TestModel::ServiceProviderDataGtfsRealtimeAlertsTest:
         return isGtfsRealtimeUrlValid( text, errorMessage, tooltip, \
childrenExplanations ); +    case TestModel::ServiceProviderDataTimeZoneTest:
+        return isTimeZoneValid( text, errorMessage, tooltip, childrenExplanations );
 
     default:
         kWarning() << "Unknown test";
@@ -114,6 +117,8 @@ TestModel::TestState \
                ServiceProviderDataTester::runServiceProviderDataTest( Test
                 ? data->realtimeTripUpdateUrl() : data->realtimeAlertsUrl();
         return isGtfsRealtimeUrlValid( url, errorMessage, tooltip, \
childrenExplanations );  }
+    case TestModel::ServiceProviderDataTimeZoneTest:
+        return isTimeZoneValid( data->timeZone(), errorMessage, tooltip, \
childrenExplanations );  
     default:
         kWarning() << "Unknown test";
@@ -455,3 +460,20 @@ TestModel::TestState \
ServiceProviderDataTester::isGtfsRealtimeUrlValid(  
     return TestModel::TestFinishedSuccessfully;
 }
+
+TestModel::TestState ServiceProviderDataTester::isTimeZoneValid( const QString \
&timeZone, +        QString *errorMessage, QString *tooltip,
+        QList< TimetableDataRequestMessage > *childrenExplanations )
+{
+    Q_UNUSED( tooltip )
+    Q_UNUSED( childrenExplanations )
+    if ( timeZone.isEmpty() || KSystemTimeZones::zones().contains(timeZone) ) {
+        // Time zone is optional
+        return TestModel::TestFinishedSuccessfully;
+    }
+
+    if ( errorMessage ) {
+        *errorMessage = i18nc("@info/plain", "No such time zone found: %1", \
timeZone); +    }
+    return TestModel::TestFinishedWithErrors;
+}
diff --git a/engine/timetablemate/src/serviceproviderdatatester.h \
b/engine/timetablemate/src/serviceproviderdatatester.h index d4940e6..3f6b17d 100644
--- a/engine/timetablemate/src/serviceproviderdatatester.h
+++ b/engine/timetablemate/src/serviceproviderdatatester.h
@@ -73,6 +73,9 @@ public:
     static TestModel::TestState isGtfsRealtimeUrlValid( const QString \
&gtfsRealtimeUrl,  QString *errorMessage = 0, QString *tooltip = 0,
             QList< TimetableDataRequestMessage > *childrenExplanations = 0 );
+    static TestModel::TestState isTimeZoneValid( const QString &timeZone,
+            QString *errorMessage = 0, QString *tooltip = 0,
+            QList< TimetableDataRequestMessage > *childrenExplanations = 0 );
 };
 
 #endif // Multiple inclusion guard
diff --git a/engine/timetablemate/src/testmodel.cpp \
b/engine/timetablemate/src/testmodel.cpp index 8ad83b6..109c021 100644
--- a/engine/timetablemate/src/testmodel.cpp
+++ b/engine/timetablemate/src/testmodel.cpp
@@ -888,6 +888,7 @@ bool TestModel::isTestApplicableTo( Test test, const \
ServiceProviderData *data,  case ServiceProviderDataUrlTest:
     case ServiceProviderDataShortUrlTest:
     case ServiceProviderDataDescriptionTest:
+    case ServiceProviderDataTimeZoneTest:
         return true;
 
     case LoadScriptTest:
@@ -961,6 +962,7 @@ QList< TestModel::Test > TestModel::testsOfTestCase( \
                TestModel::TestCase testCas
               << ServiceProviderDataAuthorNameTest << \
                ServiceProviderDataShortAuthorNameTest
               << ServiceProviderDataEmailTest << ServiceProviderDataUrlTest
               << ServiceProviderDataShortUrlTest << \
ServiceProviderDataDescriptionTest +              << ServiceProviderDataTimeZoneTest
               << ServiceProviderDataScriptFileNameTest << \
ServiceProviderDataGtfsFeedUrlTest  << ServiceProviderDataGtfsRealtimeUpdatesUrlTest
               << ServiceProviderDataGtfsRealtimeAlertsTest;
@@ -992,6 +994,7 @@ TestModel::TestCase TestModel::testCaseOfTest( TestModel::Test \
test )  case ServiceProviderDataUrlTest:
     case ServiceProviderDataShortUrlTest:
     case ServiceProviderDataDescriptionTest:
+    case ServiceProviderDataTimeZoneTest:
     case ServiceProviderDataScriptFileNameTest:
     case ServiceProviderDataGtfsFeedUrlTest:
     case ServiceProviderDataGtfsRealtimeUpdatesUrlTest:
@@ -1057,6 +1060,7 @@ QList< TestModel::Test > TestModel::testIsDependedOf( \
TestModel::Test test )  case ServiceProviderDataUrlTest:
     case ServiceProviderDataShortUrlTest:
     case ServiceProviderDataDescriptionTest:
+    case ServiceProviderDataTimeZoneTest:
     case ServiceProviderDataScriptFileNameTest:
     case ServiceProviderDataGtfsFeedUrlTest:
     case ServiceProviderDataGtfsRealtimeUpdatesUrlTest:
@@ -1100,6 +1104,8 @@ QString TestModel::nameForTest( TestModel::Test test )
         return i18nc("@info/plain", "URL Test" );
     case ServiceProviderDataShortUrlTest:
         return i18nc("@info/plain", "Short URL Test" );
+    case ServiceProviderDataTimeZoneTest:
+        return i18nc("@info/plain", "Time Zone Test" );
     case ServiceProviderDataDescriptionTest:
         return i18nc("@info/plain", "Description Test" );
     case ServiceProviderDataScriptFileNameTest:
@@ -1177,6 +1183,8 @@ QString TestModel::descriptionForTest( TestModel::Test test )
         return i18nc("@info/plain", "Tests for a valid short version of URL" );
     case ServiceProviderDataDescriptionTest:
         return i18nc("@info/plain", "Tests for a valid description" );
+    case ServiceProviderDataTimeZoneTest:
+        return i18nc("@info/plain", "Tests for a valid or empty time zone" );
     case ServiceProviderDataScriptFileNameTest:
         return i18nc("@info/plain", "Tests for a valid script file" );
     case ServiceProviderDataGtfsFeedUrlTest:
diff --git a/engine/timetablemate/src/testmodel.h \
b/engine/timetablemate/src/testmodel.h index 48dbd6c..c4a958d 100644
--- a/engine/timetablemate/src/testmodel.h
+++ b/engine/timetablemate/src/testmodel.h
@@ -129,6 +129,8 @@ public:
         ServiceProviderDataUrlTest,
         ServiceProviderDataShortUrlTest,
         ServiceProviderDataDescriptionTest,
+        ServiceProviderDataTimeZoneTest, /**< Tests if the time zone string is \
valid, ie. +                * if the time zone exists. See KTimeZones::zones(). */
         ServiceProviderDataScriptFileNameTest,
         ServiceProviderDataGtfsFeedUrlTest, /**< Checks the GTFS feed URL for \
validity. */  ServiceProviderDataGtfsRealtimeUpdatesUrlTest,
diff --git a/engine/timetablemate/src/timetablemateview_base.ui \
b/engine/timetablemate/src/timetablemateview_base.ui index 9fecc33..f613bf2 100644
--- a/engine/timetablemate/src/timetablemateview_base.ui
+++ b/engine/timetablemate/src/timetablemateview_base.ui
@@ -15,7 +15,7 @@
   </property>
   <layout class="QVBoxLayout" name="verticalLayout">
    <item>
-    <widget class="QTabWidget" name="tabNotes">
+    <widget class="QTabWidget" name="tabWidget">
      <property name="currentIndex">
       <number>0</number>
      </property>
@@ -974,7 +974,7 @@
   </customwidget>
  </customwidgets>
  <tabstops>
-  <tabstop>tabNotes</tabstop>
+  <tabstop>tabWidget</tabstop>
   <tabstop>savePath</tabstop>
   <tabstop>name</tabstop>
   <tabstop>currentLanguage</tabstop>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic