• 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
statusrulewidgethandler.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 "statusrulewidgethandler.h"
19 
20 #include <pimcommon/widgets/minimumcombobox.h>
21 
22 #include <KDebug>
23 #include <KIconLoader>
24 
25 #include <QStackedWidget>
26 
27 using namespace MailCommon;
28 
29 static const struct {
30  SearchRule::Function id;
31  const char *displayName;
32 } StatusFunctions[] = {
33  { SearchRule::FuncContains, I18N_NOOP( "is" ) },
34  { SearchRule::FuncContainsNot, I18N_NOOP( "is not" ) }
35 };
36 static const int StatusFunctionCount =
37  sizeof( StatusFunctions ) / sizeof( *StatusFunctions );
38 
39 //---------------------------------------------------------------------------
40 
41 QWidget *StatusRuleWidgetHandler::createFunctionWidget(
42  int number, QStackedWidget *functionStack, const QObject *receiver, bool /*isNepomukSearch*/ ) const
43 {
44  if ( number != 0 ) {
45  return 0;
46  }
47 
48  PimCommon::MinimumComboBox *funcCombo = new PimCommon::MinimumComboBox( functionStack );
49  funcCombo->setObjectName( QLatin1String("statusRuleFuncCombo") );
50  for ( int i = 0; i < StatusFunctionCount; ++i ) {
51  funcCombo->addItem( i18n( StatusFunctions[i].displayName ) );
52  }
53  funcCombo->adjustSize();
54  QObject::connect( funcCombo, SIGNAL(activated(int)),
55  receiver, SLOT(slotFunctionChanged()) );
56  return funcCombo;
57 }
58 
59 //---------------------------------------------------------------------------
60 
61 QWidget * StatusRuleWidgetHandler::createValueWidget( int number,
62  QStackedWidget *valueStack,
63  const QObject *receiver ) const
64 {
65  if ( number != 0 ) {
66  return 0;
67  }
68 
69  PimCommon::MinimumComboBox *statusCombo = new PimCommon::MinimumComboBox( valueStack );
70  statusCombo->setObjectName( QLatin1String("statusRuleValueCombo") );
71  for ( int i = 0; i < MailCommon::StatusValueCountWithoutHidden; ++i ) {
72  if ( MailCommon::StatusValues[ i ].icon != 0 ) {
73  statusCombo->addItem(
74  SmallIcon( QLatin1String(MailCommon::StatusValues[ i ].icon) ),
75  i18nc( "message status", MailCommon::StatusValues[ i ].text ) );
76  } else {
77  statusCombo->addItem(
78  i18nc( "message status", MailCommon::StatusValues[ i ].text ) );
79  }
80  }
81  statusCombo->adjustSize();
82  QObject::connect( statusCombo, SIGNAL(activated(int)),
83  receiver, SLOT(slotValueChanged()) );
84  return statusCombo;
85 }
86 
87 //---------------------------------------------------------------------------
88 
89 SearchRule::Function StatusRuleWidgetHandler::currentFunction(
90  const QStackedWidget *functionStack ) const
91 {
92  const PimCommon::MinimumComboBox *funcCombo =
93  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleFuncCombo") );
94 
95  if ( funcCombo && funcCombo->currentIndex() >= 0 ) {
96  return StatusFunctions[funcCombo->currentIndex()].id;
97  }
98 
99  return SearchRule::FuncNone;
100 }
101 
102 //---------------------------------------------------------------------------
103 
104 SearchRule::Function StatusRuleWidgetHandler::function( const QByteArray &field,
105  const QStackedWidget *functionStack ) const
106 {
107  if ( !handlesField( field ) ) {
108  return SearchRule::FuncNone;
109  }
110 
111  return currentFunction( functionStack );
112 }
113 
114 //---------------------------------------------------------------------------
115 
116 int StatusRuleWidgetHandler::currentStatusValue( const QStackedWidget *valueStack ) const
117 {
118  const PimCommon::MinimumComboBox *statusCombo =
119  valueStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleValueCombo") );
120 
121  if ( statusCombo ) {
122  return statusCombo->currentIndex();
123  }
124 
125  return -1;
126 }
127 
128 //---------------------------------------------------------------------------
129 
130 QString StatusRuleWidgetHandler::value( const QByteArray &field,
131  const QStackedWidget *,
132  const QStackedWidget *valueStack ) const
133 {
134  if ( !handlesField( field ) ) {
135  return QString();
136  }
137 
138  const int status = currentStatusValue( valueStack );
139  if ( status != -1 ) {
140  return QString::fromLatin1( MailCommon::StatusValues[ status ].text );
141  } else {
142  return QString();
143  }
144 }
145 
146 //---------------------------------------------------------------------------
147 
148 QString StatusRuleWidgetHandler::prettyValue( const QByteArray &field,
149  const QStackedWidget *,
150  const QStackedWidget *valueStack ) const
151 {
152  if ( !handlesField( field ) ) {
153  return QString();
154  }
155 
156  const int status = currentStatusValue( valueStack );
157  if ( status != -1 ) {
158  return i18nc( "message status", MailCommon::StatusValues[ status ].text );
159  } else {
160  return QString();
161  }
162 }
163 
164 //---------------------------------------------------------------------------
165 
166 bool StatusRuleWidgetHandler::handlesField( const QByteArray &field ) const
167 {
168  return ( field == "<status>" );
169 }
170 
171 //---------------------------------------------------------------------------
172 
173 void StatusRuleWidgetHandler::reset( QStackedWidget *functionStack,
174  QStackedWidget *valueStack ) const
175 {
176  // reset the function combo box
177  PimCommon::MinimumComboBox *funcCombo =
178  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleFuncCombo") );
179 
180  if ( funcCombo ) {
181  funcCombo->blockSignals( true );
182  funcCombo->setCurrentIndex( 0 );
183  funcCombo->blockSignals( false );
184  }
185 
186  // reset the status value combo box
187  PimCommon::MinimumComboBox *statusCombo =
188  valueStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleValueCombo") );
189 
190  if ( statusCombo ) {
191  statusCombo->blockSignals( true );
192  statusCombo->setCurrentIndex( 0 );
193  statusCombo->blockSignals( false );
194  }
195 }
196 
197 //---------------------------------------------------------------------------
198 
199 bool StatusRuleWidgetHandler::setRule( QStackedWidget *functionStack,
200  QStackedWidget *valueStack,
201  const SearchRule::Ptr rule, bool /*isNepomukSearch*/ ) const
202 {
203  if ( !rule || !handlesField( rule->field() ) ) {
204  reset( functionStack, valueStack );
205  return false;
206  }
207 
208  // set the function
209  const SearchRule::Function func = rule->function();
210  int funcIndex = 0;
211  for ( ; funcIndex < StatusFunctionCount; ++funcIndex ) {
212  if ( func == StatusFunctions[funcIndex].id ) {
213  break;
214  }
215  }
216 
217  PimCommon::MinimumComboBox *funcCombo =
218  functionStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleFuncCombo") );
219 
220  if ( funcCombo ) {
221  funcCombo->blockSignals( true );
222  if ( funcIndex < StatusFunctionCount ) {
223  funcCombo->setCurrentIndex( funcIndex );
224  } else {
225  funcCombo->setCurrentIndex( 0 );
226  }
227  funcCombo->blockSignals( false );
228  functionStack->setCurrentWidget( funcCombo );
229  }
230 
231  // set the value
232  const QString value = rule->contents();
233  int valueIndex = 0;
234  for ( ; valueIndex <MailCommon::StatusValueCountWithoutHidden; ++valueIndex ) {
235  if ( value == QString::fromLatin1( MailCommon::StatusValues[ valueIndex ].text ) ) {
236  break;
237  }
238  }
239 
240  PimCommon::MinimumComboBox *statusCombo =
241  valueStack->findChild<PimCommon::MinimumComboBox*>( QLatin1String("statusRuleValueCombo") );
242 
243  if ( statusCombo ) {
244  statusCombo->blockSignals( true );
245  if ( valueIndex <MailCommon::StatusValueCountWithoutHidden ) {
246  statusCombo->setCurrentIndex( valueIndex );
247  } else {
248  statusCombo->setCurrentIndex( 0 );
249  }
250  statusCombo->blockSignals( false );
251  valueStack->setCurrentWidget( statusCombo );
252  }
253  return true;
254 }
255 
256 //---------------------------------------------------------------------------
257 
258 bool StatusRuleWidgetHandler::update( const QByteArray &field,
259  QStackedWidget *functionStack,
260  QStackedWidget *valueStack ) const
261 {
262  if ( !handlesField( field ) ) {
263  return false;
264  }
265 
266  // raise the correct function widget
267  functionStack->setCurrentWidget( functionStack->findChild<QWidget*>(QLatin1String( "statusRuleFuncCombo") ) );
268 
269  // raise the correct value widget
270  valueStack->setCurrentWidget( valueStack->findChild<QWidget*>( QLatin1String("statusRuleValueCombo") ) );
271 
272  return true;
273 }
274 
MailCommon::SearchRule::FuncContainsNot
Definition: searchpattern.h:83
text
const char * text
Definition: mdnadvicedialog.cpp:52
QWidget
MailCommon::StatusValueCountWithoutHidden
static const int StatusValueCountWithoutHidden
Definition: searchpattern.h:534
StatusFunctionCount
static const int StatusFunctionCount
Definition: statusrulewidgethandler.cpp:36
MailCommon::SearchRule::Ptr
boost::shared_ptr< SearchRule > Ptr
Defines a pointer to a search rule.
Definition: searchpattern.h:69
QObject
MailCommon::StatusRuleWidgetHandler::setRule
bool setRule(QStackedWidget *functionStack, QStackedWidget *valueStack, const SearchRule::Ptr rule, bool isNepomukSearch) const
Definition: statusrulewidgethandler.cpp:199
MailCommon::StatusRuleWidgetHandler::handlesField
bool handlesField(const QByteArray &field) const
Definition: statusrulewidgethandler.cpp:166
MailCommon::SearchRule::Function
Function
Describes operators for comparison of field and contents.
Definition: searchpattern.h:80
MailCommon::StatusRuleWidgetHandler::reset
void reset(QStackedWidget *functionStack, QStackedWidget *valueStack) const
Definition: statusrulewidgethandler.cpp:173
statusrulewidgethandler.h
MailCommon::StatusRuleWidgetHandler::prettyValue
QString prettyValue(const QByteArray &field, const QStackedWidget *functionStack, const QStackedWidget *valueStack) const
Definition: statusrulewidgethandler.cpp:148
MailCommon::SearchRule::FuncNone
Definition: searchpattern.h:81
StatusFunctions
static const struct @8 StatusFunctions[]
MailCommon::StatusRuleWidgetHandler::createValueWidget
QWidget * createValueWidget(int number, QStackedWidget *valueStack, const QObject *receiver) const
Definition: statusrulewidgethandler.cpp:61
MailCommon::StatusRuleWidgetHandler::update
bool update(const QByteArray &field, QStackedWidget *functionStack, QStackedWidget *valueStack) const
Definition: statusrulewidgethandler.cpp:258
displayName
const char * displayName
Definition: statusrulewidgethandler.cpp:31
MailCommon::SearchRule::FuncContains
Definition: searchpattern.h:82
MailCommon::StatusRuleWidgetHandler::function
SearchRule::Function function(const QByteArray &field, const QStackedWidget *functionStack) const
Definition: statusrulewidgethandler.cpp:104
MailCommon::StatusRuleWidgetHandler::createFunctionWidget
QWidget * createFunctionWidget(int number, QStackedWidget *functionStack, const QObject *receiver, bool isNepomukSearch) const
Definition: statusrulewidgethandler.cpp:41
MailCommon::StatusRuleWidgetHandler::value
QString value(const QByteArray &field, const QStackedWidget *functionStack, const QStackedWidget *valueStack) const
Definition: statusrulewidgethandler.cpp:130
id
SearchRule::Function id
Definition: statusrulewidgethandler.cpp:30
MailCommon::StatusValues
static const MessageStatusInfo StatusValues[]
Definition: searchpattern.h:493
I18N_NOOP
#define I18N_NOOP(t)
Definition: searchpatternedit.cpp:46
This file is part of the KDE documentation.
Documentation copyright © 1996-2014 The KDE developers.
Generated on Tue Oct 14 2014 22:55:15 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