X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fqtui%2Fchannellistdlg.cpp;h=ddf0d0b00af226623544c345bec9c03df65eb933;hp=f8b70284a40b12605c8a68e298fe4d6dfef2f6ba;hb=HEAD;hpb=8e93326fd70af3c0accc599770796619ef3cee6e diff --git a/src/qtui/channellistdlg.cpp b/src/qtui/channellistdlg.cpp index f8b70284..e8826d05 100644 --- a/src/qtui/channellistdlg.cpp +++ b/src/qtui/channellistdlg.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2018 by the Quassel Project * + * Copyright (C) 2005-2022 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -20,21 +20,18 @@ #include "channellistdlg.h" -#include #include +#include #include #include "client.h" #include "clientirclisthelper.h" #include "icon.h" -ChannelListDlg::ChannelListDlg(QWidget *parent) - : QDialog(parent), - _listFinished(true), - _ircListModel(this), - _sortFilter(this), - _simpleModeSpacer(0), - _advancedMode(false) +ChannelListDlg::ChannelListDlg(QWidget* parent) + : QDialog(parent) + , _ircListModel(this) + , _sortFilter(this) { _sortFilter.setSourceModel(&_ircListModel); _sortFilter.setFilterCaseSensitivity(Qt::CaseInsensitive); @@ -49,6 +46,8 @@ ChannelListDlg::ChannelListDlg(QWidget *parent) ui.channelListView->setTabKeyNavigation(false); ui.channelListView->setModel(&_sortFilter); ui.channelListView->setSortingEnabled(true); + // Sort A-Z by default + ui.channelListView->sortByColumn(0, Qt::AscendingOrder); ui.channelListView->verticalHeader()->hide(); ui.channelListView->horizontalHeader()->setStretchLastSection(true); @@ -56,22 +55,23 @@ ChannelListDlg::ChannelListDlg(QWidget *parent) setWindowIcon(icon::get("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))); + connect(ui.advancedModeLabel, &ClickableLabel::clicked, this, &ChannelListDlg::toggleMode); + connect(ui.searchChannelsButton, &QAbstractButton::clicked, this, &ChannelListDlg::requestSearch); + connect(ui.channelNameLineEdit, &QLineEdit::returnPressed, this, &ChannelListDlg::requestSearch); + connect(ui.filterLineEdit, &QLineEdit::textChanged, &_sortFilter, &QSortFilterProxyModel::setFilterFixedString); + connect(Client::ircListHelper(), &ClientIrcListHelper::channelListReceived, this, &ChannelListDlg::receiveChannelList); + connect(Client::ircListHelper(), &ClientIrcListHelper::finishedListReported, this, &ChannelListDlg::reportFinishedList); + connect(Client::ircListHelper(), &ClientIrcListHelper::errorReported, this, &ChannelListDlg::showError); + connect(ui.channelListView, &QAbstractItemView::activated, this, &ChannelListDlg::joinChannel); setAdvancedMode(false); enableQuery(true); showFilterLine(false); showErrors(false); -} + // Set initial input focus + updateInputFocus(); +} void ChannelListDlg::setNetwork(NetworkId netId) { @@ -83,8 +83,7 @@ void ChannelListDlg::setNetwork(NetworkId netId) showFilterLine(false); } - -void ChannelListDlg::setChannelFilters(const QString &channelFilters) +void ChannelListDlg::setChannelFilters(const QString& channelFilters) { // Enable advanced mode if searching setAdvancedMode(!channelFilters.isEmpty()); @@ -92,9 +91,13 @@ void ChannelListDlg::setChannelFilters(const QString &channelFilters) ui.channelNameLineEdit->setText(channelFilters.trimmed()); } - void ChannelListDlg::requestSearch() { + if (!_netId.isValid()) { + // No valid network set yet + return; + } + _listFinished = false; enableQuery(false); showErrors(false); @@ -103,8 +106,9 @@ void ChannelListDlg::requestSearch() Client::ircListHelper()->requestChannelList(_netId, channelFilters); } - -void ChannelListDlg::receiveChannelList(const NetworkId &netId, const QStringList &channelFilters, const QList &channelList) +void ChannelListDlg::receiveChannelList(const NetworkId& netId, + const QStringList& channelFilters, + const QList& channelList) { Q_UNUSED(channelFilters) if (netId != _netId) @@ -113,9 +117,10 @@ void ChannelListDlg::receiveChannelList(const NetworkId &netId, const QStringLis showFilterLine(!channelList.isEmpty()); _ircListModel.setChannelList(channelList); enableQuery(_listFinished); + // Reset input focus since UI changed + updateInputFocus(); } - void ChannelListDlg::showFilterLine(bool show) { ui.line->setVisible(show); @@ -123,14 +128,12 @@ void ChannelListDlg::showFilterLine(bool show) ui.filterLineEdit->setVisible(show); } - void ChannelListDlg::enableQuery(bool enable) { ui.channelNameLineEdit->setEnabled(enable); ui.searchChannelsButton->setEnabled(enable); } - void ChannelListDlg::setAdvancedMode(bool advanced) { _advancedMode = advanced; @@ -139,7 +142,7 @@ void ChannelListDlg::setAdvancedMode(bool advanced) if (_simpleModeSpacer) { ui.searchLayout->removeItem(_simpleModeSpacer); delete _simpleModeSpacer; - _simpleModeSpacer = 0; + _simpleModeSpacer = nullptr; } ui.advancedModeLabel->setPixmap(icon::get("edit-clear-locationbar-rtl").pixmap(16)); } @@ -156,6 +159,17 @@ void ChannelListDlg::setAdvancedMode(bool advanced) ui.searchPatternLabel->setVisible(advanced); } +void ChannelListDlg::updateInputFocus() +{ + // Update keyboard focus to match what options are available. Prioritize the channel name + // editor as one likely won't need to filter when already limiting the list. + if (ui.channelNameLineEdit->isVisible()) { + ui.channelNameLineEdit->setFocus(); + } + else if (ui.filterLineEdit->isVisible()) { + ui.filterLineEdit->setFocus(); + } +} void ChannelListDlg::showErrors(bool show) { @@ -166,22 +180,20 @@ void ChannelListDlg::showErrors(bool show) ui.errorTextEdit->setVisible(show); } - void ChannelListDlg::reportFinishedList() { _listFinished = true; } - -void ChannelListDlg::showError(const QString &error) +void ChannelListDlg::showError(const QString& error) { showErrors(true); ui.errorTextEdit->moveCursor(QTextCursor::End); ui.errorTextEdit->insertPlainText(error + "\n"); } - -void ChannelListDlg::joinChannel(const QModelIndex &index) +void ChannelListDlg::joinChannel(const QModelIndex& index) { - Client::instance()->userInput(BufferInfo::fakeStatusBuffer(_netId), QString("/JOIN %1").arg(index.sibling(index.row(), 0).data().toString())); + Client::instance()->userInput(BufferInfo::fakeStatusBuffer(_netId), + QString("/JOIN %1").arg(index.sibling(index.row(), 0).data().toString())); }