• Skip to content
  • Skip to link menu
KDE API Reference
  • KDE API Reference
  • kdepim API Reference
  • KDE Home
  • Contact Us
 

mailcommon

  • sources
  • kde-4.12
  • kdepim
  • mailcommon
  • search
daterulewidgethandler.cpp
Go to the documentation of this file.
1 /*
2  Copyright (c) 2013 Montel Laurent <montel@kde.org>
3 
4  This program is free software; you can redistribute it and/or modify it
5  under the terms of the GNU General Public License, version 2, as
6  published by the Free Software Foundation.
7 
8  This program is distributed in the hope that it will be useful, but
9  WITHOUT ANY WARRANTY; without even the implied warranty of
10  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
11  General Public License for more details.
12 
13  You should have received a copy of the GNU General Public License along
14  with this program; if not, write to the Free Software Foundation, Inc.,
15  51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA
16 */
17 
18 #include "daterulewidgethandler.h"
19 #include "search/searchpattern.h"
20 
21 #include <pimcommon/widgets/minimumcombobox.h>
22 
23 #include <KDebug>
24 #include <KDateComboBox>
25 #include <KLocale>
26 
27 #include <QObject>
28 #include <QStackedWidget>
29 
30 using namespace MailCommon;
31 
32 
33 static const struct {
34  SearchRule::Function id;
35  const char *displayName;
36 } DateFunctions[] = {
37  { SearchRule::FuncEquals, I18N_NOOP( "is equal to" ) },
38  { SearchRule::FuncNotEqual, I18N_NOOP( "is not equal to" ) },
39  { SearchRule::FuncIsGreater, I18N_NOOP( "is after" ) },
40  { SearchRule::FuncIsLessOrEqual, I18N_NOOP( "is before or equal to" ) },
41  { SearchRule::FuncIsLess, I18N_NOOP( "is before" ) },
42  { SearchRule::FuncIsGreaterOrEqual, I18N_NOOP( "is after or equal to" ) }
43 };
44 static const int DateFunctionCount =
45  sizeof( DateFunctions ) / sizeof( *DateFunctions );
46 
47 //---------------------------------------------------------------------------
48 
49 QWidget *DateRuleWidgetHandler::createFunctionWidget(
50  int number, QStackedWidget *functionStack, const QObject *receiver, bool /*isNepomukSearch*/ ) const
51 {
52  if ( number != 0 ) {
53  return 0;
54  }
55 
56  PimCommon::MinimumComboBox *funcCombo = new PimCommon::MinimumComboBox( functionStack );
57  funcCombo->setObjectName( QLatin1String("dateRuleFuncCombo") );
58  for ( int i = 0; i < DateFunctionCount; ++i ) {
59  funcCombo->addItem( i18n( DateFunctions[i].displayName ) );
60  }
61  funcCombo->adjustSize();
62  QObject::connect( funcCombo, SIGNAL(activated(int)),
63  receiver, SLOT(slotFunctionChanged()) );
64  return funcCombo;
65 }
66 
67 //---------------------------------------------------------------------------
68 
69 QWidget *DateRuleWidgetHandler::createValueWidget( int number,
70  QStackedWidget *valueStack,
71  const QObject *receiver ) const
72 {
73  if ( number != 0 ) {
74  return 0;
75  }
76 
77  KDateComboBox *dateCombo = new KDateComboBox( valueStack );
78  dateCombo->setObjectName( QLatin1String("KDateComboBox") );
79  dateCombo->setOptions( KDateComboBox::SelectDate | KDateComboBox::DatePicker | KDateComboBox::DateKeywords );
80  QObject::connect( dateCombo, SIGNAL(dateChanged(QDate)),
81  receiver, SLOT(slotValueChanged()) );
82  return dateCombo;
83 }
84 
85 //---------------------------------------------------------------------------
86 
87 SearchRule::Function DateRuleWidgetHandler::currentFunction(
88  const QStackedWidget *functionStack ) const
89 {
90  const PimCommon::MinimumComboBox *funcCombo =
91  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("dateRuleFuncCombo") );
92 
93  if ( funcCombo && funcCombo->currentIndex() >= 0 ) {
94  return DateFunctions[funcCombo->currentIndex()].id;
95  }
96 
97  return SearchRule::FuncNone;
98 }
99 
100 //---------------------------------------------------------------------------
101 
102 SearchRule::Function DateRuleWidgetHandler::function( const QByteArray &field,
103  const QStackedWidget *functionStack ) const
104 {
105  if ( !handlesField( field ) ) {
106  return SearchRule::FuncNone;
107  }
108 
109  return currentFunction( functionStack );
110 }
111 
112 //---------------------------------------------------------------------------
113 
114 QString DateRuleWidgetHandler::currentValue( const QStackedWidget *valueStack ) const
115 {
116  const KDateComboBox *dateInput = valueStack->findChild<KDateComboBox*>( QLatin1String("KDateComboBox") );
117 
118  if ( dateInput ) {
119  return dateInput->date().toString( Qt::ISODate );
120  }
121 
122  return QString();
123 }
124 
125 //---------------------------------------------------------------------------
126 
127 QString DateRuleWidgetHandler::value( const QByteArray &field,
128  const QStackedWidget *,
129  const QStackedWidget *valueStack ) const
130 {
131  if ( !handlesField( field ) ) {
132  return QString();
133  }
134 
135  return currentValue( valueStack );
136 }
137 
138 //---------------------------------------------------------------------------
139 
140 QString DateRuleWidgetHandler::prettyValue( const QByteArray &field,
141  const QStackedWidget *,
142  const QStackedWidget *valueStack ) const
143 {
144  if ( !handlesField( field ) ) {
145  return QString();
146  }
147 
148  return currentValue( valueStack );
149 }
150 
151 //---------------------------------------------------------------------------
152 
153 bool DateRuleWidgetHandler::handlesField( const QByteArray &field ) const
154 {
155  return ( field == "<date>" );
156 }
157 
158 //---------------------------------------------------------------------------
159 
160 void DateRuleWidgetHandler::reset( QStackedWidget *functionStack,
161  QStackedWidget *valueStack ) const
162 {
163  // reset the function combo box
164  PimCommon::MinimumComboBox *funcCombo =
165  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("dateRuleFuncCombo") );
166 
167  if ( funcCombo ) {
168  funcCombo->blockSignals( true );
169  funcCombo->setCurrentIndex( 0 );
170  funcCombo->blockSignals( false );
171  }
172 
173  // reset the value widget
174  KDateComboBox *dateInput = valueStack->findChild<KDateComboBox*>( QLatin1String("KDateComboBox") );
175 
176  if ( dateInput ) {
177  dateInput->blockSignals( true );
178  dateInput->setDate( QDate::currentDate() );
179  dateInput->blockSignals( false );
180  }
181 }
182 
183 //---------------------------------------------------------------------------
184 
185 bool DateRuleWidgetHandler::setRule( QStackedWidget *functionStack,
186  QStackedWidget *valueStack,
187  const SearchRule::Ptr rule, bool /*isNepomukSearch*/ ) const
188 {
189  if ( !rule || !handlesField( rule->field() ) ) {
190  reset( functionStack, valueStack );
191  return false;
192  }
193 
194  // set the function
195  const SearchRule::Function func = rule->function();
196  int funcIndex = 0;
197  for ( ; funcIndex < DateFunctionCount; ++funcIndex ) {
198  if ( func == DateFunctions[funcIndex].id ) {
199  break;
200  }
201  }
202 
203  PimCommon::MinimumComboBox *funcCombo =
204  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("dateRuleFuncCombo") );
205 
206  if ( funcCombo ) {
207  funcCombo->blockSignals( true );
208  if ( funcIndex < DateFunctionCount ) {
209  funcCombo->setCurrentIndex( funcIndex );
210  } else {
211  funcCombo->setCurrentIndex( 0 );
212  }
213  funcCombo->blockSignals( false );
214  functionStack->setCurrentWidget( funcCombo );
215  }
216 
217  // set the value
218  const QString value = rule->contents();
219 
220  KDateComboBox *dateInput = valueStack->findChild<KDateComboBox*>( QLatin1String("KDateComboBox") );
221 
222  if ( dateInput ) {
223  dateInput->blockSignals( true );
224  dateInput->setDate( QDate::fromString ( value, Qt::ISODate ) );
225  dateInput->blockSignals( false );
226  valueStack->setCurrentWidget( dateInput );
227  }
228  return true;
229 }
230 
231 //---------------------------------------------------------------------------
232 
233 bool DateRuleWidgetHandler::update( const QByteArray &field,
234  QStackedWidget *functionStack,
235  QStackedWidget *valueStack ) const
236 {
237  if ( !handlesField( field ) ) {
238  return false;
239  }
240 
241  // raise the correct function widget
242  functionStack->setCurrentWidget( functionStack->findChild<QWidget*>( QLatin1String("dateRuleFuncCombo") ) );
243 
244  // raise the correct value widget
245  KDateComboBox *dateInput = valueStack->findChild<KDateComboBox*>( QLatin1String("KDateComboBox") );
246 
247  if ( dateInput ) {
248  valueStack->setCurrentWidget( dateInput );
249  }
250  return true;
251 }
252 
MailCommon::DateRuleWidgetHandler::createFunctionWidget
QWidget * createFunctionWidget(int number, QStackedWidget *functionStack, const QObject *receiver, bool isNepomukSearch) const
Definition: daterulewidgethandler.cpp:49
MailCommon::SearchRule::FuncIsGreaterOrEqual
Definition: searchpattern.h:91
MailCommon::DateRuleWidgetHandler::setRule
bool setRule(QStackedWidget *functionStack, QStackedWidget *valueStack, const SearchRule::Ptr rule, bool isNepomukSearch) const
Definition: daterulewidgethandler.cpp:185
MailCommon::DateRuleWidgetHandler::function
SearchRule::Function function(const QByteArray &field, const QStackedWidget *functionStack) const
Definition: daterulewidgethandler.cpp:102
QWidget
MailCommon::DateRuleWidgetHandler::handlesField
bool handlesField(const QByteArray &field) const
Definition: daterulewidgethandler.cpp:153
id
SearchRule::Function id
Definition: daterulewidgethandler.cpp:34
MailCommon::SearchRule::Ptr
boost::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Definition: searchpattern.h:69
QObject
daterulewidgethandler.h
MailCommon::SearchRule::Function
Function
Describes operators for comparison of field and contents.
Definition: searchpattern.h:80
MailCommon::SearchRule::FuncNotEqual
Definition: searchpattern.h:85
MailCommon::SearchRule::FuncNone
Definition: searchpattern.h:81
DateFunctions
static const struct @1 DateFunctions[]
searchpattern.h
MailCommon::DateRuleWidgetHandler::prettyValue
QString prettyValue(const QByteArray &field, const QStackedWidget *functionStack, const QStackedWidget *valueStack) const
Definition: daterulewidgethandler.cpp:140
MailCommon::SearchRule::FuncIsGreater
Definition: searchpattern.h:88
MailCommon::SearchRule::FuncIsLessOrEqual
Definition: searchpattern.h:89
MailCommon::DateRuleWidgetHandler::value
QString value(const QByteArray &field, const QStackedWidget *functionStack, const QStackedWidget *valueStack) const
Definition: daterulewidgethandler.cpp:127
DateFunctionCount
static const int DateFunctionCount
Definition: daterulewidgethandler.cpp:44
MailCommon::DateRuleWidgetHandler::update
bool update(const QByteArray &field, QStackedWidget *functionStack, QStackedWidget *valueStack) const
Definition: daterulewidgethandler.cpp:233
MailCommon::DateRuleWidgetHandler::reset
void reset(QStackedWidget *functionStack, QStackedWidget *valueStack) const
Definition: daterulewidgethandler.cpp:160
I18N_NOOP
#define I18N_NOOP(t)
Definition: searchpatternedit.cpp:46
displayName
const char * displayName
Definition: daterulewidgethandler.cpp:35
MailCommon::SearchRule::FuncIsLess
Definition: searchpattern.h:90
MailCommon::SearchRule::FuncEquals
Definition: searchpattern.h:84
MailCommon::DateRuleWidgetHandler::createValueWidget
QWidget * createValueWidget(int number, QStackedWidget *valueStack, const QObject *receiver) const
Definition: daterulewidgethandler.cpp:69
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:14 by doxygen 1.8.7 written by Dimitri van Heesch, © 1997-2006

KDE's Doxygen guidelines are available online.

mailcommon

Skip menu "mailcommon"
  • Main Page
  • Namespace List
  • Namespace Members
  • Alphabetical List
  • Class List
  • Class Hierarchy
  • Class Members
  • File List
  • File Members
  • Related Pages

kdepim API Reference

Skip menu "kdepim API Reference"
  • akonadi_next
  • akregator
  • blogilo
  • calendarsupport
  • console
  •   kabcclient
  •   konsolekalendar
  • kaddressbook
  • kalarm
  •   lib
  • kdgantt2
  • kjots
  • kleopatra
  • kmail
  • knode
  • knotes
  • kontact
  • korgac
  • korganizer
  • ktimetracker
  • libkdepim
  • libkleo
  • libkpgp
  • mailcommon
  • messagelist
  • messageviewer

Search



Report problems with this website to our bug tracking system.
Contact the specific authors with questions and comments about the page contents.

KDE® and the K Desktop Environment® logo are registered trademarks of KDE e.V. | Legal