[Bug 260267] calendar configuration: a lot of time fields not changable

Tobias Koenig tokoe at kde.org
Wed Jan 12 09:24:23 GMT 2011


https://bugs.kde.org/show_bug.cgi?id=260267


Tobias Koenig <tokoe at kde.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
             Status|REOPENED                    |RESOLVED
         Resolution|                            |FIXED




--- Comment #5 from Tobias Koenig <tokoe kde org>  2011-01-12 10:23:38 ---
commit f47b350036d750d984b2e7eee290de43502e156d
branch master
Author: Tobias Koenig <tokoe at kde.org>
Date:   Wed Jan 12 10:25:27 2011 +0100

    Use QML Clock in calendar config dialog

    Open the QML Clock like it's done in the 'New Appointment'
    dialog when changing a time.

    BUG: 260267

diff --git a/mobile/calendar/ConfigDialog.qml
b/mobile/calendar/ConfigDialog.qml
index 99671ac..07ba08e 100644
--- a/mobile/calendar/ConfigDialog.qml
+++ b/mobile/calendar/ConfigDialog.qml
@@ -34,6 +34,30 @@ QML.Rectangle {
     configWidget.load();
   }

+  QML.Connections {
+    target: configWidget
+    onShowClockWidget: {
+       clockWidget.expand()
+       clockWidget.okEnabled = false
+
+       // set the initial values
+       clockWidget.hours = hour;
+       clockWidget.minutes = minute;
+    }
+  }
+
+  QML.Connections {
+    target: clockWidget
+    onTimeChanged: {
+      configWidget.setNewTime( hour, minute );
+    }
+  }
+
+  KPIM.ClockDialog {
+    id: clockWidget
+    anchors.fill: parent
+  }
+
   KPIM.DecoratedFlickable {
     id: configWidgetBox
     anchors.fill: parent
diff --git a/mobile/calendar/configwidget.cpp
b/mobile/calendar/configwidget.cpp
index aa1a9ea..e117de1 100644
--- a/mobile/calendar/configwidget.cpp
+++ b/mobile/calendar/configwidget.cpp
@@ -32,32 +32,32 @@ using namespace CalendarSupport;
 ConfigWidget::ConfigWidget( QWidget *parent )
   : QWidget( parent )
 {
-  Ui_ConfigWidget ui;
-  ui.setupUi( this );
-
-  ui.kcfg_DayBegins->setProperty( "kcfg_property", QByteArray( "dateTime" ) );
-  ui.kcfg_DailyStartingHour->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
-  ui.kcfg_DailyEndingHour->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
-  ui.kcfg_DefaultAppointmentTime->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
-
-  ui.kcfg_AgendaViewColorUsage->addItem( i18n( "Category inside, calendar
outside" ) );
-  ui.kcfg_AgendaViewColorUsage->addItem( i18n( "Calendar inside, category
outside" ) );
-  ui.kcfg_AgendaViewColorUsage->addItem( i18n( "Only category" ) );
-  ui.kcfg_AgendaViewColorUsage->addItem( i18n( "Only calendar" ) );
-
-  ui.kcfg_MonthViewColorUsage->addItem( i18n( "Category inside, calendar
outside" ) );
-  ui.kcfg_MonthViewColorUsage->addItem( i18n( "Calendar inside, category
outside" ) );
-  ui.kcfg_MonthViewColorUsage->addItem( i18n( "Only category" ) );
-  ui.kcfg_MonthViewColorUsage->addItem( i18n( "Only calendar" ) );
-
-  mHolidayCombo = ui.kcfg_HolidayRegion;
-  mWorkDays << ui.workingPeriodMonday;
-  mWorkDays << ui.workingPeriodTuesday;
-  mWorkDays << ui.workingPeriodWednesday;
-  mWorkDays << ui.workingPeriodThursday;
-  mWorkDays << ui.workingPeriodFriday;
-  mWorkDays << ui.workingPeriodSaturday;
-  mWorkDays << ui.workingPeriodSunday;
+  mUi = new Ui_ConfigWidget;
+  mUi->setupUi( this );
+
+  mUi->kcfg_DayBegins->setProperty( "kcfg_property", QByteArray( "dateTime" )
);
+  mUi->kcfg_DailyStartingHour->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
+  mUi->kcfg_DailyEndingHour->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
+  mUi->kcfg_DefaultAppointmentTime->setProperty( "kcfg_property", QByteArray(
"dateTime" ) );
+
+  mUi->kcfg_AgendaViewColorUsage->addItem( i18n( "Category inside, calendar
outside" ) );
+  mUi->kcfg_AgendaViewColorUsage->addItem( i18n( "Calendar inside, category
outside" ) );
+  mUi->kcfg_AgendaViewColorUsage->addItem( i18n( "Only category" ) );
+  mUi->kcfg_AgendaViewColorUsage->addItem( i18n( "Only calendar" ) );
+
+  mUi->kcfg_MonthViewColorUsage->addItem( i18n( "Category inside, calendar
outside" ) );
+  mUi->kcfg_MonthViewColorUsage->addItem( i18n( "Calendar inside, category
outside" ) );
+  mUi->kcfg_MonthViewColorUsage->addItem( i18n( "Only category" ) );
+  mUi->kcfg_MonthViewColorUsage->addItem( i18n( "Only calendar" ) );
+
+  mHolidayCombo = mUi->kcfg_HolidayRegion;
+  mWorkDays << mUi->workingPeriodMonday;
+  mWorkDays << mUi->workingPeriodTuesday;
+  mWorkDays << mUi->workingPeriodWednesday;
+  mWorkDays << mUi->workingPeriodThursday;
+  mWorkDays << mUi->workingPeriodFriday;
+  mWorkDays << mUi->workingPeriodSaturday;
+  mWorkDays << mUi->workingPeriodSunday;

   mManager = new KConfigDialogManager( this, Settings::self() );

@@ -86,15 +86,30 @@ ConfigWidget::ConfigWidget( QWidget *parent )
     mHolidayCombo->addItem( it.key(), it.value() );
   }

+  mUi->kcfg_DayBegins->installEventFilter( this );
+  mUi->kcfg_DailyStartingHour->installEventFilter( this );
+  mUi->kcfg_DailyEndingHour->installEventFilter( this );
+  mUi->kcfg_DefaultAppointmentTime->installEventFilter( this );
+
+  connect( this, SIGNAL( dayBeginsFocus( QObject* ) ), SLOT( showClock(
QObject* ) ) );
+  connect( this, SIGNAL( dailyStartingHourFocus( QObject* ) ), SLOT(
showClock( QObject* ) ) );
+  connect( this, SIGNAL( dailyEndingHourFocus( QObject* ) ), SLOT( showClock(
QObject* ) ) );
+  connect( this, SIGNAL( defaultAppointmentTimeFocus( QObject* ) ), SLOT(
showClock( QObject* ) ) );
+
   // UI workarounds for Maemo5
 #ifdef Q_WS_MAEMO_5
-  ui.kcfg_DayBegins->setEditable( false );
-  ui.kcfg_DailyStartingHour->setEditable( false );
-  ui.kcfg_DailyEndingHour->setEditable( false );
-  ui.kcfg_DefaultAppointmentTime->setEditable( false );
+  mUi->kcfg_DayBegins->setEditable( false );
+  mUi->kcfg_DailyStartingHour->setEditable( false );
+  mUi->kcfg_DailyEndingHour->setEditable( false );
+  mUi->kcfg_DefaultAppointmentTime->setEditable( false );
 #endif
 }

+ConfigWidget::~ConfigWidget()
+{
+  delete mUi;
+}
+
 void ConfigWidget::setPreferences( const EventViews::PrefsPtr &preferences )
 {
   mViewPrefs = preferences;
@@ -218,10 +233,50 @@ void ConfigWidget::saveToExternalSettings()
   mViewPrefs->writeConfig();
 }

+void ConfigWidget::showClock( QObject *object )
+{
+  setFocus();
+  mFocusedTimeWidget = qobject_cast<KPIM::KTimeEdit*>( object );
+  if ( !mFocusedTimeWidget )
+    return;
+
+  const QTime time = mFocusedTimeWidget->time();
+  emit showClockWidget( time.hour(), time.minute() );
+}
+
+void ConfigWidget::setNewTime( int hour, int minute )
+{
+  if ( mFocusedTimeWidget == 0 )
+    return;
+
+  mFocusedTimeWidget->setTime( QTime( hour, minute ) );
+}
+
+bool ConfigWidget::eventFilter( QObject *object, QEvent *event )
+{
+  if ( event->type() == QEvent::FocusIn ) {
+    if ( object == mUi->kcfg_DayBegins ) {
+      emit dayBeginsFocus( object );
+    } else if ( object == mUi->kcfg_DailyStartingHour ) {
+      emit dailyStartingHourFocus( object );
+    } else if ( object == mUi->kcfg_DailyEndingHour ) {
+      emit dailyEndingHourFocus( object );
+    } else if ( object == mUi->kcfg_DefaultAppointmentTime ) {
+      emit defaultAppointmentTimeFocus( object );
+    }
+
+    return true;
+  } else {
+    // standard event processing
+    return QObject::eventFilter( object, event );
+  }
+}
+
 DeclarativeConfigWidget::DeclarativeConfigWidget( QGraphicsItem *parent )
   : DeclarativeWidgetBase< ConfigWidget, MainView,
&MainView::setConfigWidget>( parent )
 {
-  connect( this, SIGNAL(configChanged()), widget(), SIGNAL(configChanged()) );
+  connect( this, SIGNAL( configChanged() ), widget(), SIGNAL( configChanged()
) );
+  connect( widget(), SIGNAL( showClockWidget( int, int ) ), this, SIGNAL(
showClockWidget( int, int ) ) );
 }

 DeclarativeConfigWidget::~DeclarativeConfigWidget()
@@ -239,4 +294,9 @@ void DeclarativeConfigWidget::save()
   emit configChanged();
 }

+void DeclarativeConfigWidget::setNewTime( int hour, int minute )
+{
+  widget()->setNewTime( hour, minute );
+}
+
 #include "configwidget.moc"
diff --git a/mobile/calendar/configwidget.h b/mobile/calendar/configwidget.h
index 2a7ec1f..ebbd4bc 100644
--- a/mobile/calendar/configwidget.h
+++ b/mobile/calendar/configwidget.h
@@ -32,6 +32,11 @@
 class KComboBox;
 class KConfigDialogManager;
 class QCheckBox;
+class Ui_ConfigWidget;
+
+namespace KPIM {
+class KTimeEdit;
+}

 class ConfigWidget : public QWidget
 {
@@ -39,6 +44,7 @@ class ConfigWidget : public QWidget

   public:
     explicit ConfigWidget( QWidget *parent = 0 );
+    ~ConfigWidget();

     void setPreferences( const EventViews::PrefsPtr &preferences );

@@ -46,17 +52,33 @@ class ConfigWidget : public QWidget
     void load();
     void save();

+    void setNewTime( int hour, int minute );
+
   Q_SIGNALS:
     void configChanged();
+    void showClockWidget( int hour, int minute );
+
+    void dayBeginsFocus( QObject *object );
+    void dailyStartingHourFocus( QObject *object );
+    void dailyEndingHourFocus( QObject *object );
+    void defaultAppointmentTimeFocus( QObject *object );
+
+  protected:
+    bool eventFilter( QObject *object, QEvent *event );
+
+  private Q_SLOTS:
+    void showClock( QObject *object );

   private:
     void loadFromExternalSettings();
     void saveToExternalSettings();

+    Ui_ConfigWidget *mUi;
     KConfigDialogManager *mManager;
     KComboBox *mHolidayCombo;
     QVector<QCheckBox*> mWorkDays;
     EventViews::PrefsPtr mViewPrefs;
+    KPIM::KTimeEdit *mFocusedTimeWidget;
 };

 class DeclarativeConfigWidget :
@@ -76,8 +98,11 @@ public QGraphicsProxyWidget
     void load();
     void save();

+    void setNewTime( int hour, int minute );
+
   Q_SIGNALS:
     void configChanged();
+    void showClockWidget( int hour, int minute );
 };

 #endif
diff --git a/mobile/calendar/mainview.cpp b/mobile/calendar/mainview.cpp
index 43ba8e4..2d86f4a 100644
--- a/mobile/calendar/mainview.cpp
+++ b/mobile/calendar/mainview.cpp
@@ -25,6 +25,7 @@
 #include "agendaviewitem.h"
 #include "calendaradaptor.h"
 #include "calendarinterface.h"
+#include "calendar/clockhelper.h"
 #include "calendar/incidenceview.h"
 #include "calendar/kcalitembrowseritem.h"
 #include "configwidget.h"
@@ -136,6 +137,7 @@ void MainView::doDelayedInit()
   qmlRegisterType<EventViews::MonthViewItem>( "org.kde.calendarviews", 4, 5,
"MonthView" );
   qmlRegisterType<EventViews::TimelineViewItem>( "org.kde.calendarviews", 4,
5, "TimelineView" );
   qmlRegisterType<Qt::QmlDateEdit>( "org.qt", 4, 7, "QmlDateEdit" );
+  qmlRegisterType<ClockHelper>( "ClockHelper", 4, 5, "ClockHelper" );
   qmlRegisterUncreatableType<EventsGuiStateManager>( "org.kde.akonadi.events",
4, 5, "EventsGuiStateManager", QLatin1String( "This type is only exported for
its enums" ) );

   m_calendar = new CalendarSupport::Calendar( entityTreeModel(), itemModel(),
KSystemTimeZones::local() );

-- 
Configure bugmail: https://bugs.kde.org/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
You are the assignee for the bug.



More information about the Kdepim-bugs mailing list