87
75
Private(PsiCon *, MainWin *);
91
79
bool onTop, asTool;
92
QMenu *mainMenu, *statusMenu, *optionsMenu, *toolsMenu;
80
QMenu* mainMenu, *statusMenu, *optionsMenu, *toolsMenu;
99
PopupAction *optionsButton, *statusButton;
100
IconActionGroup *statusGroup;
101
EventNotifierAction *eventNotifier;
105
QSignalMapper *statusMapper;
87
PopupAction* optionsButton, *statusButton;
88
IconActionGroup* statusGroup;
89
EventNotifierAction* eventNotifier;
93
QLineEdit* searchText;
94
QToolButton* searchPb;
95
QWidget* searchWidget;
97
QSignalMapper* statusMapper;
110
102
QMap<QAction *, int> statusActions;
113
105
bool old_trayicon;
106
bool filterActive, prefilterShowOffline, prefilterShowAway;
115
108
void registerActions();
116
IconAction *getAction( QString name );
117
void updateMenu(QStringList actions, QMenu *menu);
109
IconAction* getAction( QString name );
110
void updateMenu(QStringList actions, QMenu* menu);
120
MainWin::Private::Private(PsiCon *_psi, MainWin *_mainWin)
113
MainWin::Private::Private(PsiCon* _psi, MainWin* _mainWin) : psi(_psi), mainWin(_mainWin)
125
116
statusGroup = (IconActionGroup *)getAction("status_all");
126
117
eventNotifier = (EventNotifierAction *)getAction("event_notifier");
168
163
QStringList names = actions.actions();
169
164
QStringList::Iterator it = names.begin();
170
165
for ( ; it != names.end(); ++it ) {
171
IconAction *action = actions.action( *it );
166
IconAction* action = actions.action( *it );
173
168
mainWin->registerAction( action );
177
IconAction *MainWin::Private::getAction( QString name )
173
IconAction* MainWin::Private::getAction( QString name )
179
175
PsiActionList::ActionsType type = PsiActionList::ActionsType( PsiActionList::Actions_MainWin | PsiActionList::Actions_Common );
180
176
ActionList actions = psi->actionList()->suitableActions( type );
181
IconAction *action = actions.action( name );
177
IconAction* action = actions.action( name );
184
180
qWarning("MainWin::Private::getAction(): action %s not found!", name.latin1());
186
183
// mainWin->registerAction( action );
191
void MainWin::Private::updateMenu(QStringList actions, QMenu *menu)
188
void MainWin::Private::updateMenu(QStringList actions, QMenu* menu)
196
193
foreach (QString name, actions) {
197
194
// workind around Qt/X11 bug, which displays
198
195
// actions's text and the separator bar in Qt 4.1.1
222
228
#define TOOLW_FLAGS ((Qt::WFlags) 0)
225
MainWin::MainWin(bool _onTop, bool _asTool, PsiCon *psi, const char *name)
226
:AdvancedWidget<Q3MainWindow>(0, (_onTop ? Qt::WStyle_StaysOnTop : Qt::Widget) | (_asTool ? (Qt::WStyle_Tool |TOOLW_FLAGS) : Qt::Widget))
227
//: Q3MainWindow(0,name,(_onTop ? Qt::WStyle_StaysOnTop : Qt::Widget) | (_asTool ? (Qt::WStyle_Tool |TOOLW_FLAGS) : Qt::Widget))
231
MainWin::MainWin(bool _onTop, bool _asTool, PsiCon* psi, const char* name)
232
:AdvancedWidget<QMainWindow>(0, (_onTop ? Qt::WStyle_StaysOnTop : Qt::Widget) | (_asTool ? (Qt::WStyle_Tool |TOOLW_FLAGS) : Qt::Widget))
229
234
setObjectName(name);
230
235
setAttribute(Qt::WA_AlwaysShowToolTips);
231
if ( option.brushedMetal ) {
236
if ( PsiOptions::instance()->getOption("options.ui.mac.use-brushed-metal-windows").toBool() ) {
232
237
setAttribute(Qt::WA_MacMetalStyle);
234
239
d = new Private(psi, this);
270
275
d->vb_main->setMargin(layoutMargin);
271
276
d->vb_main->setSpacing(layoutMargin);
279
d->searchWidget = new QWidget(centralWidget());
280
d->vb_main->addWidget(d->searchWidget);
281
QHBoxLayout* searchLayout = new QHBoxLayout(d->searchWidget);
282
searchLayout->setMargin(0);
283
searchLayout->setSpacing(0);
284
d->searchText = new QLineEdit(d->searchWidget);
285
connect(d->searchText,SIGNAL(textEdited(const QString&)),SLOT(searchTextEntered(const QString&)));
286
searchLayout->addWidget(d->searchText);
287
d->searchPb = new QToolButton(d->searchWidget);
288
d->searchPb->setText("X");
289
connect(d->searchPb,SIGNAL(clicked()),SLOT(searchClearClicked()));
290
connect(cvlist, SIGNAL(searchInput(const QString&)), SLOT(searchTextStarted(const QString&)));
291
searchLayout->addWidget(d->searchPb);
292
d->searchWidget->setVisible(false);
273
294
d->vb_main->addWidget(cvlist);
312
333
// Mac-only menus
314
QMenu *mainMenu = new QMenu(this);
335
QMenu* mainMenu = new QMenu(this);
315
336
mainMenuBar()->insertItem(tr("Menu"), mainMenu);
316
mainMenu->insertItem(tr("Preferences"), this, SIGNAL(doOptions()));
317
mainMenu->insertItem(tr("Quit"), this, SLOT(try2tryCloseProgram()));
337
d->getAction("menu_options")->addTo(mainMenu);
338
d->getAction("menu_quit")->addTo(mainMenu);
318
339
d->getAction("help_about")->addTo(mainMenu);
319
340
d->getAction("help_about_qt")->addTo(mainMenu);
328
349
mainMenuBar()->insertItem(tr("Status"), d->statusMenu);
330
QMenu *viewMenu = new QMenu(this);
351
QMenu* viewMenu = new QMenu(this);
331
352
mainMenuBar()->insertItem(tr("View"), viewMenu);
332
353
d->getAction("show_offline")->addTo(viewMenu);
333
if (PsiOptions::instance()->getOption("options.ui.menu.view.show-away").toBool())
354
if (PsiOptions::instance()->getOption("options.ui.menu.view.show-away").toBool()) {
334
355
d->getAction("show_away")->addTo(viewMenu);
335
357
d->getAction("show_hidden")->addTo(viewMenu);
336
358
d->getAction("show_agents")->addTo(viewMenu);
337
359
d->getAction("show_self")->addTo(viewMenu);
344
366
mainMenuBar()->insertItem(tr("Tools"), d->toolsMenu);
345
367
connect(d->toolsMenu, SIGNAL(aboutToShow()), SLOT(buildToolsMenu()));
347
QMenu *helpMenu = new QMenu(this);
369
QMenu* helpMenu = new QMenu(this);
348
370
mainMenuBar()->insertItem(tr("Help"), helpMenu);
349
371
d->getAction("help_readme")->addTo (helpMenu);
350
372
d->getAction("help_tip")->addTo (helpMenu);
354
376
d->getAction("help_online_home")->addTo (helpMenu);
355
377
d->getAction("help_psi_muc")->addTo (helpMenu);
356
378
d->getAction("help_report_bug")->addTo (helpMenu);
379
QMenu* diagMenu = new QMenu(this);
380
helpMenu->insertItem(tr("Diagnostics"), diagMenu);
381
d->getAction("help_diag_qcaplugin")->addTo (diagMenu);
382
d->getAction("help_diag_qcakeystore")->addTo (diagMenu);
358
if (option.hideMenubar)
384
if (!PsiOptions::instance()->getOption("options.ui.contactlist.show-menubar").toBool()) {
359
385
mainMenuBar()->hide();
361
388
// mainMenuBar()->show();
363
390
d->optionsButton->setMenu( d->optionsMenu );
364
391
d->statusButton->setMenu( d->statusMenu );
368
setWindowOpacity(double(qMax(MINIMUM_OPACITY,PsiOptions::instance()->getOption("options.ui.contactlist.opacity").toInt()))/100);
394
// setUnifiedTitleAndToolBarOnMac(true);
370
396
connect(qApp, SIGNAL(dockActivated()), SLOT(dockActivated()));
372
connect(PsiOptions::instance(), SIGNAL(optionChanged(const QString&)), SLOT(optionsUpdate()));
398
connect(psi, SIGNAL(emitOptionsUpdate()), SLOT(optionsUpdate()));
376
402
MainWin::~MainWin()
385
//saveToolbarsPositions();
386
// need to find some workaround to case, when you're logging off. in that case
387
// toobars are all disabled, and when you start psi again you need to enable
393
void MainWin::registerAction( IconAction *action )
415
void MainWin::registerAction( IconAction* action )
395
417
char activated[] = SIGNAL( activated() );
396
418
char toggled[] = SIGNAL( toggled(bool) );
397
419
char setChecked[] = SLOT( setChecked(bool) );
404
426
} actionlist[] = {
405
427
{ "show_offline", toggled, cvlist, SLOT( setShowOffline(bool) ) },
406
428
{ "show_away", toggled, cvlist, SLOT( setShowAway(bool) ) },
440
462
{ "help_report_bug", activated, this, SLOT( actBugReportActivated() ) },
441
463
{ "help_about", activated, this, SLOT( actAboutActivated() ) },
442
464
{ "help_about_qt", activated, this, SLOT( actAboutQtActivated() ) },
465
{ "help_diag_qcaplugin", activated, this, SLOT( actDiagQCAPluginActivated() ) },
466
{ "help_diag_qcakeystore", activated, this, SLOT( actDiagQCAKeyStoreActivated() ) },
450
474
if ( aName == action->name() ) {
452
476
// Check before connecting, otherwise we get a loop
453
if ( aName == "publish_tune")
477
if ( aName == "publish_tune") {
454
478
action->setChecked( PsiOptions::instance()->getOption("options.extended-presence.tune.publish").toBool() );
457
482
disconnect( action, actionlist[i].signal, actionlist[i].receiver, actionlist[i].slot ); // for safety
458
483
connect( action, actionlist[i].signal, actionlist[i].receiver, actionlist[i].slot );
461
if ( aName == "menu_play_sounds" )
462
action->setChecked( useSound );
486
if ( aName == "menu_play_sounds" ) {
487
action->setChecked(PsiOptions::instance()->getOption("options.ui.notifications.sounds.enable").toBool());
463
489
//else if ( aName == "foobar" )
473
500
} reverseactionlist[] = {
474
{ "show_away", cvlist, SIGNAL( showAway(bool) ), setChecked },
475
{ "show_hidden", cvlist, SIGNAL( showHidden(bool) ), setChecked },
476
{ "show_offline", cvlist, SIGNAL( showOffline(bool) ), setChecked },
477
{ "show_self", cvlist, SIGNAL( showSelf(bool) ), setChecked },
478
{ "show_agents", cvlist, SIGNAL( showAgents(bool) ), setChecked },
479
{ "show_statusmsg", cvlist, SIGNAL( showStatusMsg(bool) ), setChecked },
501
{ "show_away", cvlist, SIGNAL( showAway(bool) ), setChecked, cvlist->isShowAway()},
502
{ "show_hidden", cvlist, SIGNAL( showHidden(bool) ), setChecked, cvlist->isShowHidden()},
503
{ "show_offline", cvlist, SIGNAL( showOffline(bool) ), setChecked, cvlist->isShowOffline()},
504
{ "show_self", cvlist, SIGNAL( showSelf(bool) ), setChecked, cvlist->isShowSelf()},
505
{ "show_agents", cvlist, SIGNAL( showAgents(bool) ), setChecked, cvlist->isShowAgents()},
506
{ "show_statusmsg", cvlist, SIGNAL( showStatusMsg(bool) ), setChecked, cvlist->isShowStatusMsg()},
507
{ "", 0, 0, 0, false }
483
510
for ( i = 0; !(aName = QString(reverseactionlist[i].name)).isEmpty(); i++ ) {
489
516
action->setChecked( PsiOptions::instance()->getOption("options.ui.contactlist.status-messages.show").toBool() );
492
action->setChecked( true );
519
action->setChecked( reverseactionlist[i].checked );
497
PsiCon *MainWin::psiCon() const
524
PsiCon* MainWin::psiCon() const
502
529
void MainWin::setWindowOpts(bool _onTop, bool _asTool)
504
if(_onTop == d->onTop && _asTool == d->asTool)
531
if(_onTop == d->onTop && _asTool == d->asTool) {
507
535
d->onTop = _onTop;
508
536
d->asTool = _asTool;
510
538
Qt::WFlags flags = 0;
512
540
flags |= Qt::WStyle_StaysOnTop;
514
543
flags |= Qt::WStyle_Tool | TOOLW_FLAGS;
516
546
QPoint p = pos();
517
547
reparent(parentWidget(), flags, p, FALSE);
522
552
void MainWin::setUseDock(bool use)
524
if(use == false || d->tray) {
554
if (use == (d->tray != 0)) {
565
d->tray = new PsiTrayIcon("Psi", d->trayMenu, d->old_trayicon);
566
if (d->old_trayicon) {
567
connect(d->tray, SIGNAL(closed()), SLOT(dockActivated()));
568
connect(qApp, SIGNAL(trayOwnerDied()), SLOT(dockActivated()));
537
d->tray = new PsiTrayIcon("Psi", d->trayMenu, d->old_trayicon);
538
if (d->old_trayicon) {
539
connect(d->tray, SIGNAL(closed()), SLOT(dockActivated()));
540
connect(qApp, SIGNAL(trayOwnerDied()), SLOT(dockActivated()));
542
connect(d->tray, SIGNAL(clicked(const QPoint &, int)), SLOT(trayClicked(const QPoint &, int)));
543
connect(d->tray, SIGNAL(doubleClicked(const QPoint &)), SLOT(trayDoubleClicked()));
544
d->tray->setIcon( PsiIconset::instance()->statusPtr( STATUS_OFFLINE ));
545
d->tray->setToolTip(ApplicationInfo::name());
547
updateReadNext(d->nextAnim, d->nextAmount);
570
connect(d->tray, SIGNAL(clicked(const QPoint &, int)), SLOT(trayClicked(const QPoint &, int)));
571
connect(d->tray, SIGNAL(doubleClicked(const QPoint &)), SLOT(trayDoubleClicked()));
572
d->tray->setIcon(PsiIconset::instance()->statusPtr(STATUS_OFFLINE));
573
d->tray->setToolTip(ApplicationInfo::name());
575
updateReadNext(d->nextAnim, d->nextAmount);
552
581
void MainWin::buildStatusMenu()
554
583
d->statusMenu->clear();
555
584
d->getAction("status_online")->addTo(d->statusMenu);
556
if (PsiOptions::instance()->getOption("options.ui.menu.status.chat").toBool())
585
if (PsiOptions::instance()->getOption("options.ui.menu.status.chat").toBool()) {
557
586
d->getAction("status_chat")->addTo(d->statusMenu);
558
588
d->statusMenu->insertSeparator();
559
589
d->getAction("status_away")->addTo(d->statusMenu);
560
if (PsiOptions::instance()->getOption("options.ui.menu.status.xa").toBool())
590
if (PsiOptions::instance()->getOption("options.ui.menu.status.xa").toBool()) {
561
591
d->getAction("status_xa")->addTo(d->statusMenu);
562
593
d->getAction("status_dnd")->addTo(d->statusMenu);
563
594
if (PsiOptions::instance()->getOption("options.ui.menu.status.invisible").toBool()) {
564
595
d->statusMenu->insertSeparator();
626
const QString toolbarsStateOptionPath = "options.ui.contactlist.toolbars-state";
628
void MainWin::saveToolbarsState()
630
PsiOptions::instance()->setOption(toolbarsStateOptionPath, saveState());
633
void MainWin::loadToolbarsState()
635
restoreState(PsiOptions::instance()->getOption(toolbarsStateOptionPath).toByteArray());
595
638
void MainWin::buildToolbars()
597
while ( option.toolbars["mainWin"].count() < toolbars.count() && toolbars.count() ) {
598
PsiToolBar *tb = toolbars.last();
599
toolbars.removeLast();
603
for (int i = 0; i < option.toolbars["mainWin"].count(); i++) {
605
if ( i < toolbars.count() )
608
Options::ToolbarPrefs &tbPref = option.toolbars["mainWin"][i];
609
if ( tb && !tbPref.dirty )
615
tb = new PsiToolBar(tbPref.name, this, d->psi);
616
moveDockWindow ( tb, tbPref.dock, tbPref.nl, tbPref.index, tbPref. extraOffset );
618
tb->setGroup( "mainWin", i );
619
tb->setType( PsiActionList::Actions_MainWin );
620
//connect( tb, SIGNAL( registerAction( IconAction * ) ), SLOT( registerAction( IconAction * ) ) );
621
tb->initialize( tbPref, false );
623
if ( i < toolbars.count() )
624
toolbars.removeAt(i);
625
toolbars.insert(i, tb);
629
void MainWin::saveToolbarsPositions()
631
for (int i = 0; i < toolbars.count(); i++) {
632
Options::ToolbarPrefs &tbPref = option.toolbars["mainWin"][i];
633
getLocation ( toolbars.at(i), tbPref.dock, tbPref.index, tbPref.nl, tbPref.extraOffset );
634
tbPref.on = toolbars.at(i)->isVisible();
640
setUpdatesEnabled(false);
641
if (toolbars_.count() > 0) {
645
qDeleteAll(toolbars_);
648
foreach(QString base, PsiOptions::instance()->getChildOptionNames("options.ui.contactlist.toolbars", true, true)) {
649
PsiToolBar* tb = new PsiToolBar(base, this, d->psi->actionList());
651
connect(tb, SIGNAL(customize()), d->psi, SLOT(doToolbars()));
657
// loadToolbarsState also restores correct toolbar visibility,
658
// we might want to override that
659
foreach(PsiToolBar* tb, toolbars_) {
660
tb->updateVisibility();
663
// d->eventNotifier->updateVisibility();
664
setUpdatesEnabled(true);
666
// in case we have floating toolbars, they have inherited the 'no updates enabled'
667
// state. now we need to explicitly re-enable updates.
668
foreach(PsiToolBar* tb, toolbars_) {
669
tb->setUpdatesEnabled(true);
674
710
QStringList actions;
675
711
actions << "menu_add_contact";
676
if (PsiOptions::instance()->getOption("options.ui.message.enabled").toBool())
712
if (PsiOptions::instance()->getOption("options.ui.message.enabled").toBool()) {
677
713
actions << "menu_new_message";
678
715
actions << "menu_disco"
679
716
<< "menu_join_groupchat"
681
718
<< "menu_account_setup";
682
if (PsiOptions::instance()->getOption("options.ui.menu.main.change-profile").toBool())
719
if (PsiOptions::instance()->getOption("options.ui.menu.main.change-profile").toBool()) {
683
720
actions << "menu_change_profile";
684
722
actions << "menu_play_sounds";
686
724
d->updateMenu(actions, d->mainMenu);
696
734
d->updateMenu(actions, d->toolsMenu);
699
void MainWin::buildGeneralMenu(QMenu *menu)
737
void MainWin::buildGeneralMenu(QMenu* menu)
702
740
QStringList actions;
703
741
actions << "menu_add_contact";
704
if (PsiOptions::instance()->getOption("options.ui.message.enabled").toBool())
742
if (PsiOptions::instance()->getOption("options.ui.message.enabled").toBool()) {
705
743
actions << "menu_new_message";
706
745
actions << "menu_disco"
707
746
<< "menu_join_groupchat"
708
747
<< "menu_account_setup"
709
748
<< "menu_options"
710
749
<< "menu_file_transfer";
711
if (PsiOptions::instance()->getOption("options.ui.menu.main.change-profile").toBool())
750
if (PsiOptions::instance()->getOption("options.ui.menu.main.change-profile").toBool()) {
712
751
actions << "menu_change_profile";
713
753
actions << "menu_play_sounds";
715
755
d->updateMenu(actions, menu);
718
758
void MainWin::actReadmeActivated ()
720
ShowTextDlg *w = new ShowTextDlg(":/README");
760
ShowTextDlg* w = new ShowTextDlg(":/README");
721
761
w->setWindowTitle(CAP(tr("ReadMe")));
725
765
void MainWin::actOnlineHelpActivated ()
727
QDesktopServices::openUrl(QUrl("http://psi-im.org/wiki/User_Guide"));
767
DesktopUtil::openUrl("http://psi-im.org/wiki/User_Guide");
730
770
void MainWin::actOnlineWikiActivated ()
732
QDesktopServices::openUrl(QUrl("http://psi-im.org/wiki"));
772
DesktopUtil::openUrl("http://psi-im.org/wiki");
735
775
void MainWin::actOnlineHomeActivated ()
737
QDesktopServices::openUrl(QUrl("http://psi-im.org"));
777
DesktopUtil::openUrl("http://psi-im.org");
740
780
void MainWin::actJoinPsiMUCActivated()
742
PsiAccount *account = d->psi->contactList()->defaultAccount();
782
PsiAccount* account = d->psi->contactList()->defaultAccount();
746
MUCJoinDlg *w = new MUCJoinDlg(d->psi, account);
747
w->le_host->setText("conference.psi-im.org");
748
w->le_room->setText("psi");
787
account->actionJoin("psi@conference.psi-im.org");
752
790
void MainWin::actBugReportActivated ()
754
QDesktopServices::openUrl(QUrl("http://psi-im.org/forum/forum/2"));
792
DesktopUtil::openUrl("http://psi-im.org/forum/forum/2");
757
795
void MainWin::actAboutActivated ()
759
AboutDlg *about = new AboutDlg();
797
AboutDlg* about = new AboutDlg();
770
808
QMessageBox::aboutQt(this);
811
void MainWin::actDiagQCAPluginActivated()
813
QString dtext = QCA::pluginDiagnosticText();
814
ShowTextDlg* w = new ShowTextDlg(dtext, true, false, this);
815
w->setWindowTitle(CAP(tr("Security Plugins Diagnostic Text")));
820
void MainWin::actDiagQCAKeyStoreActivated()
822
QString dtext = QCA::KeyStoreManager::diagnosticText();
823
ShowTextDlg* w = new ShowTextDlg(dtext, true, false, this);
824
w->setWindowTitle(CAP(tr("Key Storage Diagnostic Text")));
773
829
void MainWin::actPlaySoundsActivated (bool state)
831
PsiOptions::instance()->setOption("options.ui.notifications.sounds.enable", state);
778
834
void MainWin::actPublishTuneActivated (bool state)
825
887
// update the 'change status' buttons
826
888
QObjectList l = d->statusGroup->queryList( "IconAction" );
827
889
for (QObjectList::Iterator it = l.begin() ; it != l.end(); ++it) {
828
IconAction *action = (IconAction *)(*it);
890
IconAction* action = (IconAction *)(*it);
829
891
action->setChecked ( d->statusActions[action] == status );
832
if(d->lastStatus == status)
894
if(d->lastStatus == status) {
834
897
d->lastStatus = status;
836
899
if(status == -1) {
837
900
d->statusButton->setText(tr("Connecting"));
838
if (option.alertStyle != 0) {
901
if (PsiOptions::instance()->getOption("options.ui.notifications.alert-style").toString() != "no") {
839
902
d->statusButton->setAlert(IconsetFactory::iconPtr("psi/connect"));
840
903
d->statusGroup->setPsiIcon(IconsetFactory::iconPtr("psi/connect"));
1040
1126
void MainWin::trayHide()
1042
emit geomChanged(saveableGeometry());
1046
void MainWin::updateReadNext(PsiIcon *anim, int amount)
1131
void MainWin::updateReadNext(PsiIcon* anim, int amount)
1048
1133
d->nextAnim = anim;
1050
1135
d->nextAmount = 0;
1052
1138
d->nextAmount = amount;
1054
1141
if(d->nextAmount <= 0) {
1055
1142
d->eventNotifier->hide();
1056
d->eventNotifier->setText("");
1143
d->eventNotifier->setMessage("");
1059
d->eventNotifier->setText(QString("<b>") + numEventsString(d->nextAmount) + "</b>");
1146
d->eventNotifier->setMessage(QString("<b>") + numEventsString(d->nextAmount) + "</b>");
1060
1147
d->eventNotifier->show();
1061
1148
// make sure it shows
1062
1149
//qApp->processEvents();
1069
1156
QString MainWin::numEventsString(int x) const
1075
1163
s = tr("1 event received");
1077
1166
s = tr("%1 events received").arg(x);
1082
1172
void MainWin::updateTray()
1087
if ( d->nextAmount > 0 )
1178
if ( d->nextAmount > 0 ) {
1088
1179
d->tray->setAlert(d->nextAnim);
1089
else if ( d->lastStatus == -1 )
1181
else if ( d->lastStatus == -1 ) {
1090
1182
d->tray->setAlert(IconsetFactory::iconPtr("psi/connect"));
1092
1185
d->tray->setIcon(PsiIconset::instance()->statusPtr(d->lastStatus));
1094
1188
buildTrayMenu();
1095
1189
d->tray->setContextMenu(d->trayMenu);
1129
1224
void MainWin::dockActivated()
1232
* Called when the cancel is clicked or the search becomes empty.
1233
* Cancels the search.
1235
void MainWin::searchClearClicked()
1237
d->searchWidget->setVisible(false);
1238
d->searchText->clear();
1239
cvlist->clearFilter();
1240
if (d->filterActive)
1242
d->getAction("show_offline")->setChecked(d->prefilterShowOffline);
1243
d->getAction("show_away")->setChecked(d->prefilterShowAway);
1245
d->filterActive=false;
1249
* Called when the contactview has a keypress.
1250
* Starts the search/filter process
1252
void MainWin::searchTextStarted(QString const& text)
1254
d->searchWidget->setVisible(true);
1255
d->searchText->setText(d->searchText->text() + text);
1256
searchTextEntered(d->searchText->text());
1257
d->searchText->setFocus();
1261
* Called when the search input is changed.
1262
* Updates the search.
1264
void MainWin::searchTextEntered(QString const& text)
1266
if (!d->filterActive)
1268
d->filterActive = true;
1269
d->prefilterShowOffline = d->getAction("show_offline")->isChecked();
1270
d->prefilterShowAway = d->getAction("show_away")->isChecked();
1271
d->getAction("show_offline")->setChecked(true);
1272
d->getAction("show_away")->setChecked(true);
1274
if (text.isEmpty()) {
1275
searchClearClicked();
1278
cvlist->setFilter(text);
1136
1282
#ifdef Q_WS_MAC
1137
1283
void MainWin::setWindowIcon(const QPixmap&)