X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchannellistdlg.cpp;h=18bc5ef77982e59b00144658a18bd1d3c223f592;hp=c232a05e33041563b34b633d02ab5975cd0db1ad;hb=c3f1b84a9d98b886ada6aff962eadae1a6000b6d;hpb=fe4b38e66592f11fdf4c4651863968983daecd2d diff --git a/src/qtui/channellistdlg.cpp b/src/qtui/channellistdlg.cpp index c232a05e..18bc5ef7 100644 --- a/src/qtui/channellistdlg.cpp +++ b/src/qtui/channellistdlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-09 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,22 +20,30 @@ #include "channellistdlg.h" +#include +#include +#include + #include "client.h" #include "clientirclisthelper.h" - -#include +#include "icon.h" +#include "iconloader.h" ChannelListDlg::ChannelListDlg(QWidget *parent) : QDialog(parent), _listFinished(true), _ircListModel(this), - _sortFilter(this) + _sortFilter(this), + _simpleModeSpacer(0), + _advancedMode(false) { _sortFilter.setSourceModel(&_ircListModel); _sortFilter.setFilterCaseSensitivity(Qt::CaseInsensitive); _sortFilter.setFilterKeyColumn(-1); - + ui.setupUi(this); + ui.advancedModeLabel->setPixmap(BarIcon("edit-rename")); + ui.channelListView->setSelectionBehavior(QAbstractItemView::SelectRows); ui.channelListView->setSelectionMode(QAbstractItemView::SingleSelection); ui.channelListView->setAlternatingRowColors(true); @@ -47,38 +55,46 @@ ChannelListDlg::ChannelListDlg(QWidget *parent) ui.searchChannelsButton->setAutoDefault(false); + setWindowIcon(Icon("format-list-unordered")); + + connect(ui.advancedModeLabel, SIGNAL(clicked()), this, SLOT(toggleMode())); connect(ui.searchChannelsButton, SIGNAL(clicked()), this, SLOT(requestSearch())); connect(ui.channelNameLineEdit, SIGNAL(returnPressed()), this, SLOT(requestSearch())); connect(ui.filterLineEdit, SIGNAL(textChanged(QString)), &_sortFilter, SLOT(setFilterFixedString(QString))); connect(Client::ircListHelper(), SIGNAL(channelListReceived(const NetworkId &, const QStringList &, QList)), this, SLOT(receiveChannelList(NetworkId , QStringList, QList))); connect(Client::ircListHelper(), SIGNAL(finishedListReported(const NetworkId &)), this, SLOT(reportFinishedList())); + connect(Client::ircListHelper(), SIGNAL(errorReported(const QString &)), this, SLOT(showError(const QString &))); connect(ui.channelListView, SIGNAL(activated(QModelIndex)), this, SLOT(joinChannel(QModelIndex))); + setAdvancedMode(false); enableQuery(true); showFilterLine(false); + showErrors(false); } - void ChannelListDlg::setNetwork(NetworkId netId) { if(_netId == netId) return; - + _netId = netId; _ircListModel.setChannelList(); + showFilterLine(false); } void ChannelListDlg::requestSearch() { _listFinished = false; enableQuery(false); + showErrors(false); QStringList channelFilters; channelFilters << ui.channelNameLineEdit->text().trimmed(); Client::ircListHelper()->requestChannelList(_netId, channelFilters); } void ChannelListDlg::receiveChannelList(const NetworkId &netId, const QStringList &channelFilters, const QList &channelList) { - Q_UNUSED(netId) Q_UNUSED(channelFilters) + if(netId != _netId) + return; showFilterLine(!channelList.isEmpty()); _ircListModel.setChannelList(channelList); @@ -96,10 +112,47 @@ void ChannelListDlg::enableQuery(bool enable) { ui.searchChannelsButton->setEnabled(enable); } +void ChannelListDlg::setAdvancedMode(bool advanced) { + _advancedMode = advanced; + + if(advanced) { + if(_simpleModeSpacer) { + ui.searchLayout->removeItem(_simpleModeSpacer); + delete _simpleModeSpacer; + _simpleModeSpacer = 0; + } + ui.advancedModeLabel->setPixmap(BarIcon("edit-clear-locationbar-rtl")); + } else { + if(!_simpleModeSpacer) { + _simpleModeSpacer = new QSpacerItem(40, 20, QSizePolicy::Expanding, QSizePolicy::Minimum); + ui.searchLayout->insertSpacerItem(0, _simpleModeSpacer); + } + ui.advancedModeLabel->setPixmap(BarIcon("edit-rename")); + } + + ui.channelNameLineEdit->clear(); + ui.channelNameLineEdit->setVisible(advanced); + ui.searchPatternLabel->setVisible(advanced); +} + +void ChannelListDlg::showErrors(bool show) { + if(!show) { + ui.errorTextEdit->clear(); + } + ui.errorLabel->setVisible(show); + ui.errorTextEdit->setVisible(show); +} + + void ChannelListDlg::reportFinishedList() { _listFinished = true; } +void ChannelListDlg::showError(const QString &error) { + showErrors(true); + ui.errorTextEdit->moveCursor(QTextCursor::End); + ui.errorTextEdit->insertPlainText(error + "\n"); +} void ChannelListDlg::joinChannel(const QModelIndex &index) { Client::instance()->userInput(BufferInfo::fakeStatusBuffer(_netId), QString("/JOIN %1").arg(index.sibling(index.row(), 0).data().toString()));