diff options
| author | 2011-03-17 16:22:57 +0000 | |
|---|---|---|
| committer | 2011-03-17 16:22:57 +0000 | |
| commit | 8a28c5c488edbd32353704d648f0eed061bf52c6 (patch) | |
| tree | a52f994cfdbcd74db481c4594f3ca317eaf7bbed /src/modules/options | |
| parent | added a search/filter to the server options dialog (diff) | |
| download | KVIrc-8a28c5c488edbd32353704d648f0eed061bf52c6.tar.gz KVIrc-8a28c5c488edbd32353704d648f0eed061bf52c6.tar.bz2 KVIrc-8a28c5c488edbd32353704d648f0eed061bf52c6.zip | |
reworkes server filtering so that it doesn't mess up with config save
git-svn-id: https://svn.kvirc.de/svn/trunk/kvirc@5622 17fca916-40b9-46aa-a4ea-0a15b648b75c
Diffstat (limited to 'src/modules/options')
| -rw-r--r-- | src/modules/options/OptionsWidget_servers.cpp | 61 |
1 files changed, 40 insertions, 21 deletions
diff --git a/src/modules/options/OptionsWidget_servers.cpp b/src/modules/options/OptionsWidget_servers.cpp index a5eebb81f..bf9bb13d6 100644 --- a/src/modules/options/OptionsWidget_servers.cpp +++ b/src/modules/options/OptionsWidget_servers.cpp @@ -1581,22 +1581,14 @@ void OptionsWidget_servers::fillServerList() IrcServerOptionsTreeWidgetItem * net; IrcServerOptionsTreeWidgetItem * srv; IrcServerOptionsTreeWidgetItem * cur = 0; - QString szFilter=m_pFilterEdit->text().trimmed(); - bool bFilter=!szFilter.isEmpty(); - bool bFilterNet=false; // true on network match, shows all the servers in this net KviPointerHashTableIterator<QString,KviIrcNetwork> it(*(g_pServerDataBase->recordDict())); if(m_pConnectCurrent) m_pConnectCurrent->setEnabled(false); - m_pTreeWidget->clear(); - while(KviIrcNetwork * r = it.current()) { - if(bFilter) - bFilterNet=r->name().contains(szFilter, Qt::CaseInsensitive); - net = new IrcServerOptionsTreeWidgetItem(m_pTreeWidget,*(g_pIconManager->getSmallIcon(KviIconManager::World)),r); KviPointerList<KviIrcServer> * sl = r->serverList(); bool bCurrent = r->name() == g_pServerDataBase->currentNetworkName().toUtf8().data(); @@ -1604,25 +1596,13 @@ void OptionsWidget_servers::fillServerList() for(KviIrcServer * s = sl->first();s;s = sl->next()) { - if(bFilter && ! bFilterNet) - { - if(!s->hostName().contains(szFilter, Qt::CaseInsensitive)) - continue; - } - srv = new IrcServerOptionsTreeWidgetItem(net,*(g_pIconManager->getSmallIcon(KviIconManager::Server)),s); - if((s == r->currentServer()) && bCurrent) { srv->setSelected(true); cur = srv; } } - - if(bFilter && !net->childCount()) - { - delete net; - } ++it; } if(cur) @@ -1691,7 +1671,45 @@ void OptionsWidget_servers::serverNetworkEditTextEdited(const QString &) void OptionsWidget_servers::filterTextEdited(const QString &) { - fillServerList(); + QString szFilter=m_pFilterEdit->text().trimmed(); + + IrcServerOptionsTreeWidgetItem * network; + for (int i=0;i<m_pTreeWidget->topLevelItemCount();i++) + { + network = (IrcServerOptionsTreeWidgetItem *) m_pTreeWidget->topLevelItem(i); + if(network->m_pNetworkData->name().contains(szFilter, Qt::CaseInsensitive) || + network->m_pNetworkData->description().contains(szFilter, Qt::CaseInsensitive)) + { + network->setHidden(false); + // if the net matches, we always show all its servers + IrcServerOptionsTreeWidgetItem * ch; + for (int j=0;j<network->childCount();j++) + { + ch=(IrcServerOptionsTreeWidgetItem *)network->child(j); + ch->setHidden(false); + } + } else { + uint uServers=0; + + IrcServerOptionsTreeWidgetItem * ch; + for (int j=0;j<network->childCount();j++) + { + bool bHidden=true; + ch=(IrcServerOptionsTreeWidgetItem *)network->child(j); + if(ch->m_pServerData) + { + if(ch->m_pServerData->hostName().contains(szFilter, Qt::CaseInsensitive) || + ch->m_pServerData->description().contains(szFilter, Qt::CaseInsensitive)) + bHidden=false; + } + if(!bHidden) + uServers++; + ch->setHidden(bHidden); + } + //if at list one server matches, we show its network + network->setHidden(!uServers); + } + } } void OptionsWidget_servers::saveLastItem() @@ -1719,6 +1737,7 @@ void OptionsWidget_servers::saveLastItem() void OptionsWidget_servers::commit() { saveLastItem(); + g_pServerDataBase->clear(); IrcServerOptionsTreeWidgetItem * network; |
