Diffstat (limited to 'core/pim/osearch/mainwindow.cpp') (more/less context) (ignore whitespace changes)
-rw-r--r-- | core/pim/osearch/mainwindow.cpp | 39 |
1 files changed, 25 insertions, 14 deletions
diff --git a/core/pim/osearch/mainwindow.cpp b/core/pim/osearch/mainwindow.cpp index c6934db..aa52061 100644 --- a/core/pim/osearch/mainwindow.cpp +++ b/core/pim/osearch/mainwindow.cpp | |||
@@ -1,123 +1,127 @@ | |||
1 | /*************************************************************************** | 1 | /*************************************************************************** |
2 | * * | 2 | * * |
3 | * This program is free software; you can redistribute it and/or modify * | 3 | * This program is free software; you can redistribute it and/or modify * |
4 | * it under the terms of the GNU General Public License as published by * | 4 | * it under the terms of the GNU General Public License as published by * |
5 | * the Free Software Foundation; either version 2 of the License, or * | 5 | * the Free Software Foundation; either version 2 of the License, or * |
6 | * (at your option) any later version. * | 6 | * (at your option) any later version. * |
7 | * * | 7 | * * |
8 | ***************************************************************************/ | 8 | ***************************************************************************/ |
9 | 9 | ||
10 | // (c) 2002 Patrick S. Vogt <tille@handhelds.org> | 10 | // (c) 2002 Patrick S. Vogt <tille@handhelds.org> |
11 | 11 | ||
12 | 12 | ||
13 | 13 | ||
14 | #include <qaction.h> | 14 | #include <qaction.h> |
15 | #include <qmessagebox.h> | 15 | #include <qmessagebox.h> |
16 | #include <qpopupmenu.h> | 16 | #include <qpopupmenu.h> |
17 | #include <qtoolbutton.h> | 17 | #include <qtoolbutton.h> |
18 | #include <qstring.h> | 18 | #include <qstring.h> |
19 | #include <qlabel.h> | 19 | #include <qlabel.h> |
20 | #include <qfile.h> | 20 | #include <qfile.h> |
21 | #include <qhbuttongroup.h> | 21 | #include <qhbuttongroup.h> |
22 | #include <qhbox.h> | ||
22 | #include <qpushbutton.h> | 23 | #include <qpushbutton.h> |
23 | #include <qintdict.h> | 24 | #include <qintdict.h> |
24 | #include <qlayout.h> | 25 | #include <qlayout.h> |
25 | #include <qlineedit.h> | 26 | #include <qlineedit.h> |
27 | #include <qsignalmapper.h> | ||
26 | #include <qtextbrowser.h> | 28 | #include <qtextbrowser.h> |
27 | #include <qregexp.h> | 29 | #include <qregexp.h> |
28 | #include <qwhatsthis.h> | 30 | #include <qwhatsthis.h> |
29 | #include <qpe/qpemenubar.h> | 31 | #include <qpe/qpemenubar.h> |
30 | #include <qpe/qpemessagebox.h> | 32 | #include <qpe/qpemessagebox.h> |
31 | #include <qpe/resource.h> | 33 | #include <qpe/resource.h> |
32 | #include <qpe/config.h> | 34 | #include <qpe/config.h> |
33 | #include <qpe/qpetoolbar.h> | 35 | #include <qpe/qpetoolbar.h> |
34 | #include <qpe/qpeapplication.h> | 36 | #include <qpe/qpeapplication.h> |
35 | #include <qpe/config.h> | 37 | #include <qpe/config.h> |
36 | #include <qpe/global.h> | 38 | #include <qpe/global.h> |
37 | #include <opie/owait.h> | 39 | #include <opie/owait.h> |
38 | 40 | ||
39 | #include "olistview.h" | 41 | #include "olistview.h" |
40 | #include "olistviewitem.h" | 42 | #include "olistviewitem.h" |
41 | #include "resultitem.h" | 43 | #include "resultitem.h" |
42 | #include "adresssearch.h" | 44 | #include "adresssearch.h" |
43 | #include "todosearch.h" | 45 | #include "todosearch.h" |
44 | #include "datebooksearch.h" | 46 | #include "datebooksearch.h" |
45 | #include "applnksearch.h" | 47 | #include "applnksearch.h" |
46 | #include "doclnksearch.h" | 48 | #include "doclnksearch.h" |
47 | #include "mainwindow.h" | 49 | #include "mainwindow.h" |
48 | 50 | ||
49 | MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) : | 51 | MainWindow::MainWindow( QWidget *parent, const char *name, WFlags f ) : |
50 | QMainWindow( parent, name, f ), _currentItem(0) | 52 | QMainWindow( parent, name, f ), _currentItem(0) |
51 | { | 53 | { |
52 | setCaption( tr("OSearch") ); | 54 | setCaption( tr("OSearch") ); |
53 | 55 | ||
54 | setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); | 56 | setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); |
55 | 57 | ||
56 | QFrame *mainFrame = new QFrame( this, "mainFrame" ); | 58 | QFrame *mainFrame = new QFrame( this, "mainFrame" ); |
57 | mainFrame->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); | 59 | mainFrame->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); |
58 | 60 | ||
59 | mainLayout = new QVBoxLayout( mainFrame ); | 61 | mainLayout = new QVBoxLayout( mainFrame ); |
60 | mainLayout->setSpacing( 0 ); | 62 | mainLayout->setSpacing( 0 ); |
61 | mainLayout->setMargin( 0 ); | 63 | mainLayout->setMargin( 0 ); |
62 | 64 | ||
63 | resultsList = new OListView( mainFrame ); | 65 | resultsList = new OListView( mainFrame ); |
64 | resultsList->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); | 66 | resultsList->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); |
65 | mainLayout->addWidget( resultsList ); | 67 | mainLayout->addWidget( resultsList ); |
66 | 68 | ||
67 | detailsFrame = new QFrame( mainFrame, "detailsFrame" ); | 69 | detailsFrame = new QFrame( mainFrame, "detailsFrame" ); |
68 | QVBoxLayout *detailsLayout = new QVBoxLayout( detailsFrame ); | 70 | QVBoxLayout *detailsLayout = new QVBoxLayout( detailsFrame ); |
69 | richEdit = new QTextView( detailsFrame ); | 71 | richEdit = new QTextView( detailsFrame ); |
70 | QWhatsThis::add( richEdit, tr("The details of the current result") ); | 72 | QWhatsThis::add( richEdit, tr("The details of the current result") ); |
71 | richEdit->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); | 73 | richEdit->setSizePolicy( QSizePolicy( QSizePolicy::MinimumExpanding, QSizePolicy::MinimumExpanding)); |
72 | detailsLayout->addWidget( richEdit ); | 74 | detailsLayout->addWidget( richEdit ); |
73 | 75 | ||
74 | buttonGroupActions = new QHButtonGroup( this ); | 76 | buttonBox = new QHBox( mainFrame, "Button Box" ); |
75 | buttonGroupActions->hide(); | ||
76 | _buttonCount = 0; | ||
77 | 77 | ||
78 | buttonLayout = new QHBoxLayout( detailsFrame ); | 78 | _buttonCount = 0; |
79 | detailsLayout->addLayout( buttonLayout ); | ||
80 | 79 | ||
81 | mainLayout->addWidget( detailsFrame ); | 80 | mainLayout->addWidget( detailsFrame ); |
81 | mainLayout->addWidget( buttonBox ); | ||
82 | detailsFrame->hide(); | 82 | detailsFrame->hide(); |
83 | buttonBox->hide(); | ||
83 | 84 | ||
84 | searches.append( new AppLnkSearch( resultsList, tr("applications") ) ); | 85 | searches.append( new AppLnkSearch( resultsList, tr("applications") ) ); |
85 | searches.append( new DocLnkSearch( resultsList, tr("documents") ) ); | 86 | searches.append( new DocLnkSearch( resultsList, tr("documents") ) ); |
86 | searches.append( new TodoSearch( resultsList, tr("todo") ) ); | 87 | searches.append( new TodoSearch( resultsList, tr("todo") ) ); |
87 | searches.append( new DatebookSearch( resultsList, tr("datebook") ) ); | 88 | searches.append( new DatebookSearch( resultsList, tr("datebook") ) ); |
88 | searches.append( new AdressSearch( resultsList, tr("adressbook") ) ); | 89 | searches.append( new AdressSearch( resultsList, tr("adressbook") ) ); |
89 | 90 | ||
90 | setCentralWidget( mainFrame ); | 91 | setCentralWidget( mainFrame ); |
91 | 92 | ||
92 | popupTimer = new QTimer(); | 93 | popupTimer = new QTimer(); |
93 | searchTimer = new QTimer(); | 94 | searchTimer = new QTimer(); |
94 | 95 | ||
95 | connect(popupTimer, SIGNAL(timeout()), SLOT(showPopup())); | 96 | connect(popupTimer, SIGNAL(timeout()), SLOT(showPopup())); |
96 | connect(searchTimer, SIGNAL(timeout()), SLOT(searchStringChanged())); | 97 | connect(searchTimer, SIGNAL(timeout()), SLOT(searchStringChanged())); |
97 | connect(resultsList, SIGNAL(pressed(QListViewItem*)), SLOT(setCurrent(QListViewItem*))); | 98 | connect(resultsList, SIGNAL(pressed(QListViewItem*)), SLOT(setCurrent(QListViewItem*))); |
98 | connect(resultsList, SIGNAL(clicked(QListViewItem*)), SLOT(stopTimer(QListViewItem*))); | 99 | connect(resultsList, SIGNAL(clicked(QListViewItem*)), SLOT(stopTimer(QListViewItem*))); |
99 | connect(buttonGroupActions, SIGNAL(clicked(int)), SLOT( slotAction(int) ) ); | 100 | |
101 | signalMapper = new QSignalMapper( this ); | ||
102 | |||
103 | connect(signalMapper, SIGNAL(mapped(int)), SLOT( slotAction(int) ) ); | ||
100 | 104 | ||
101 | makeMenu(); | 105 | makeMenu(); |
102 | 106 | ||
103 | Config cfg( "osearch", Config::User ); | 107 | Config cfg( "osearch", Config::User ); |
104 | cfg.setGroup( "search_settings" ); | 108 | cfg.setGroup( "search_settings" ); |
105 | actionCaseSensitiv->setOn( cfg.readBoolEntry( "caseSensitiv", false ) ); | 109 | actionCaseSensitiv->setOn( cfg.readBoolEntry( "caseSensitiv", false ) ); |
106 | actionWildcards->setOn( cfg.readBoolEntry( "wildcards", false ) ); | 110 | actionWildcards->setOn( cfg.readBoolEntry( "wildcards", false ) ); |
107 | // actionWholeWordsOnly->setOn( cfg.readBoolEntry( "whole_words_only", false ) ); | 111 | // actionWholeWordsOnly->setOn( cfg.readBoolEntry( "whole_words_only", false ) ); |
108 | } | 112 | } |
109 | 113 | ||
110 | void MainWindow::makeMenu() | 114 | void MainWindow::makeMenu() |
111 | { | 115 | { |
112 | QPEToolBar *toolBar = new QPEToolBar( this ); | 116 | QPEToolBar *toolBar = new QPEToolBar( this ); |
113 | QPEToolBar *searchBar = new QPEToolBar(this); | 117 | QPEToolBar *searchBar = new QPEToolBar(this); |
114 | QPEMenuBar *menuBar = new QPEMenuBar( toolBar ); | 118 | QPEMenuBar *menuBar = new QPEMenuBar( toolBar ); |
115 | QPopupMenu *searchMenu = new QPopupMenu( menuBar ); | 119 | QPopupMenu *searchMenu = new QPopupMenu( menuBar ); |
116 | // QPopupMenu *viewMenu = new QPopupMenu( menuBar ); | 120 | // QPopupMenu *viewMenu = new QPopupMenu( menuBar ); |
117 | QPopupMenu *cfgMenu = new QPopupMenu( menuBar ); | 121 | QPopupMenu *cfgMenu = new QPopupMenu( menuBar ); |
118 | QPopupMenu *searchOptions = new QPopupMenu( cfgMenu ); | 122 | QPopupMenu *searchOptions = new QPopupMenu( cfgMenu ); |
119 | 123 | ||
120 | setToolBarsMovable( false ); | 124 | setToolBarsMovable( false ); |
121 | toolBar->setHorizontalStretchable( true ); | 125 | toolBar->setHorizontalStretchable( true ); |
122 | menuBar->insertItem( tr( "Search" ), searchMenu ); | 126 | menuBar->insertItem( tr( "Search" ), searchMenu ); |
123 | menuBar->insertItem( tr( "Settings" ), cfgMenu ); | 127 | menuBar->insertItem( tr( "Settings" ), cfgMenu ); |
@@ -162,64 +166,71 @@ void MainWindow::makeMenu() | |||
162 | 166 | ||
163 | } | 167 | } |
164 | 168 | ||
165 | MainWindow::~MainWindow() | 169 | MainWindow::~MainWindow() |
166 | { | 170 | { |
167 | Config cfg( "osearch", Config::User ); | 171 | Config cfg( "osearch", Config::User ); |
168 | cfg.setGroup( "search_settings" ); | 172 | cfg.setGroup( "search_settings" ); |
169 | cfg.writeEntry( "caseSensitiv", actionCaseSensitiv->isOn() ); | 173 | cfg.writeEntry( "caseSensitiv", actionCaseSensitiv->isOn() ); |
170 | cfg.writeEntry( "wildcards", actionWildcards->isOn() ); | 174 | cfg.writeEntry( "wildcards", actionWildcards->isOn() ); |
171 | //cfg.writeEntry( "whole_words_only", actionWholeWordsOnly->isOn() ); | 175 | //cfg.writeEntry( "whole_words_only", actionWholeWordsOnly->isOn() ); |
172 | } | 176 | } |
173 | 177 | ||
174 | void MainWindow::setCurrent(QListViewItem *item) | 178 | void MainWindow::setCurrent(QListViewItem *item) |
175 | { | 179 | { |
176 | if (!item) return; | 180 | if (!item) return; |
177 | _currentItem = (OListViewItem*)item; | 181 | _currentItem = (OListViewItem*)item; |
178 | //_currentItem = dynamic_cast<OListViewItem*>(item); | 182 | //_currentItem = dynamic_cast<OListViewItem*>(item); |
179 | if (_currentItem->rtti() == OListViewItem::Result){ | 183 | if (_currentItem->rtti() == OListViewItem::Result){ |
180 | ResultItem *res = (ResultItem*)item; | 184 | ResultItem *res = (ResultItem*)item; |
181 | // ResultItem *res = dynamic_cast<ResultItem*>(item); | 185 | // ResultItem *res = dynamic_cast<ResultItem*>(item); |
182 | richEdit->setText( res->toRichText() ); | 186 | richEdit->setText( res->toRichText() ); |
183 | QIntDict<QString> acts = res->actions(); | 187 | QIntDict<QString> acts = res->actions(); |
184 | QButton *button; | 188 | QButton *button; |
185 | for (uint i = 0; i < acts.count(); i++){ | 189 | for (uint i = 0; i < acts.count(); i++){ |
186 | button = buttonGroupActions->find( i ); | 190 | button = buttonMap[i]; |
187 | if (!button) { | 191 | if (!button) { |
188 | button = new QPushButton( detailsFrame ); | 192 | qWarning(" no button for %s", (*acts[i]).latin1() ); |
189 | buttonLayout->addWidget( button, 0 ); | 193 | button = new QPushButton( buttonBox ); |
190 | buttonGroupActions->insert( button, i); | 194 | buttonMap.insert( i, button ); |
195 | signalMapper->setMapping(button, i ); | ||
196 | connect(button, SIGNAL(clicked() ), signalMapper, SLOT(map() ) ); | ||
191 | } | 197 | } |
192 | button->setText( *acts[i] ); | 198 | button->setText( *acts[i] ); |
193 | button->show(); | 199 | button->show(); |
194 | } | 200 | } |
195 | for (uint i = acts.count(); i < _buttonCount; i++){ | 201 | for (uint i = acts.count(); i < _buttonCount; i++){ |
196 | button = buttonGroupActions->find( i ); | 202 | button = buttonMap[i]; |
197 | if (button) button->hide(); | 203 | if (button) button->hide(); |
198 | } | 204 | } |
199 | _buttonCount = acts.count(); | 205 | _buttonCount = acts.count(); |
200 | detailsFrame->show(); | 206 | detailsFrame->show(); |
201 | }else detailsFrame->hide(); | 207 | buttonBox->show(); |
208 | |||
209 | }else { | ||
210 | detailsFrame->hide(); | ||
211 | buttonBox->hide(); | ||
212 | } | ||
202 | popupTimer->start( 300, true ); | 213 | popupTimer->start( 300, true ); |
203 | } | 214 | } |
204 | 215 | ||
205 | void MainWindow::stopTimer(QListViewItem*) | 216 | void MainWindow::stopTimer(QListViewItem*) |
206 | { | 217 | { |
207 | popupTimer->stop(); | 218 | popupTimer->stop(); |
208 | } | 219 | } |
209 | 220 | ||
210 | void MainWindow::showPopup() | 221 | void MainWindow::showPopup() |
211 | { | 222 | { |
212 | popupTimer->stop(); | 223 | popupTimer->stop(); |
213 | if (!_currentItem) return; | 224 | if (!_currentItem) return; |
214 | QPopupMenu *pop = _currentItem->popupMenu(); | 225 | QPopupMenu *pop = _currentItem->popupMenu(); |
215 | if (pop) pop->popup( QCursor::pos() ); | 226 | if (pop) pop->popup( QCursor::pos() ); |
216 | } | 227 | } |
217 | 228 | ||
218 | void MainWindow::setSearch( const QString &key ) | 229 | void MainWindow::setSearch( const QString &key ) |
219 | { | 230 | { |
220 | searchTimer->stop(); | 231 | searchTimer->stop(); |
221 | _searchString = key; | 232 | _searchString = key; |
222 | searchTimer->start( 300 ); | 233 | searchTimer->start( 300 ); |
223 | } | 234 | } |
224 | 235 | ||
225 | void MainWindow::searchStringChanged() | 236 | void MainWindow::searchStringChanged() |
@@ -232,35 +243,35 @@ void MainWindow::searchStringChanged() | |||
232 | //ss = Global::stringQuote( _searchString ); | 243 | //ss = Global::stringQuote( _searchString ); |
233 | //if (actionWholeWordsOnly->isOn()) | 244 | //if (actionWholeWordsOnly->isOn()) |
234 | // ss = "\\s"+_searchString+"\\s"; | 245 | // ss = "\\s"+_searchString+"\\s"; |
235 | //qDebug(" set searchString >%s<",ss.latin1()); | 246 | //qDebug(" set searchString >%s<",ss.latin1()); |
236 | QRegExp re( ss ); | 247 | QRegExp re( ss ); |
237 | re.setCaseSensitive( actionCaseSensitiv->isOn() ); | 248 | re.setCaseSensitive( actionCaseSensitiv->isOn() ); |
238 | re.setWildcard( actionWildcards->isOn() ); | 249 | re.setWildcard( actionWildcards->isOn() ); |
239 | for (SearchGroup *s = searches.first(); s != 0; s = searches.next() ) | 250 | for (SearchGroup *s = searches.first(); s != 0; s = searches.next() ) |
240 | s->setSearch( re ); | 251 | s->setSearch( re ); |
241 | } | 252 | } |
242 | 253 | ||
243 | void MainWindow::searchAll() | 254 | void MainWindow::searchAll() |
244 | { | 255 | { |
245 | #ifdef NEW_OWAIT | 256 | #ifdef NEW_OWAIT |
246 | OWait("searching..."); | 257 | OWait("searching..."); |
247 | #endif | 258 | #endif |
248 | for (SearchGroup *s = searches.first(); s != 0; s = searches.next() ){ | 259 | for (SearchGroup *s = searches.first(); s != 0; s = searches.next() ){ |
249 | s->doSearch(); | 260 | s->doSearch(); |
250 | //resultsList->repaint(); | 261 | //resultsList->repaint(); |
251 | } | 262 | } |
252 | } | 263 | } |
253 | 264 | ||
254 | void MainWindow::slotAction( int act ) | 265 | void MainWindow::slotAction( int act ) |
255 | { | 266 | { |
256 | if (_currentItem->rtti() == OListViewItem::Result){ | 267 | if ( _currentItem && _currentItem->rtti() == OListViewItem::Result){ |
257 | ResultItem *res = (ResultItem*)_currentItem; | 268 | ResultItem *res = (ResultItem*)_currentItem; |
258 | // ResultItem *res = dynamic_cast<ResultItem*>(item); | 269 | // ResultItem *res = dynamic_cast<ResultItem*>(item); |
259 | res->action(act); | 270 | res->action(act); |
260 | } | 271 | } |
261 | } | 272 | } |
262 | 273 | ||
263 | void MainWindow::optionChanged(int i) | 274 | void MainWindow::optionChanged(int ) |
264 | { | 275 | { |
265 | searchStringChanged(); | 276 | searchStringChanged(); |
266 | } | 277 | } |