commit 3c2554d3d31761d57b4be8dd22e4bcba5eabdf80 Author: Dario Abatianni Date: Wed Dec 3 20:50:26 2003 +0000 Server list is now a tree list svn path=/trunk/kdeextragear-2/konversation/; revision=271029 diff --git a/TODO b/TODO index f542c8b..9cd4965 100644 --- a/TODO +++ b/TODO @@ -10,7 +10,6 @@ after being away a summary of lines with highlighting in its own window would be additionally the text-search could offer a button "any highlight" additionally do some kind of marker to the lines that came in while being away; maybe with a special colour of the timestamp Make a command that makes you go to away mode on all servers -/amsg and /ame for sending messages/actions to all open channels/queries Per nick coloring in channel discussion Use checkForUtf8 to make non-UTF8-users able to at least read UTF8. DCC RESUME should start counting cps from the beginning diff --git a/konversation/prefspagedialogs.cpp b/konversation/prefspagedialogs.cpp index 6c5d94d..1546a26 100644 --- a/konversation/prefspagedialogs.cpp +++ b/konversation/prefspagedialogs.cpp @@ -6,7 +6,7 @@ */ /* - prefspagedialogs.cpp - description + prefspagedialogs.cpp - Page to manage "do not show again" dialogs begin: Don Mai 29 2003 copyright: (C) 2003 by Dario Abatianni email: eisfuchs@tigress.com @@ -20,7 +20,6 @@ #include "prefspagedialogs.h" #include "preferences.h" - PrefsPageDialogs::PrefsPageDialogs(QFrame* newParent,Preferences* newPreferences) : PrefsPage(newParent,newPreferences) { @@ -46,10 +45,11 @@ PrefsPageDialogs::PrefsPageDialogs(QFrame* newParent,Preferences* newPreferences for(unsigned int index=0;indexsetText(1,dialogDefinitions[index].section(' ',1)); if(preferences->getDialogFlag(flagName)) item->setOn(true); - } // for + } // endfor dialogsLayout->addWidget(dialogListView); } @@ -61,11 +61,11 @@ PrefsPageDialogs::~PrefsPageDialogs() void PrefsPageDialogs::applyPreferences() { - ServerListItem* item=static_cast(dialogListView->itemAtIndex(0)); + QCheckListItem* item=static_cast(dialogListView->itemAtIndex(0)); while(item) { - preferences->setDialogFlag(item->text(1),item->isOn()); - item=static_cast(item->itemBelow()); + preferences->setDialogFlag(item->text(0),item->isOn()); + item=static_cast(item->itemBelow()); } } diff --git a/konversation/prefspagedialogs.h b/konversation/prefspagedialogs.h index 48216ba..47484e2 100644 --- a/konversation/prefspagedialogs.h +++ b/konversation/prefspagedialogs.h @@ -6,7 +6,7 @@ */ /* - prefspagedialogs.h - description + prefspagedialogs.h - Page to manage "do not show again" dialogs begin: Don Mai 29 2003 copyright: (C) 2003 by Dario Abatianni email: eisfuchs@tigress.com @@ -16,13 +16,13 @@ #define PREFSPAGEDIALOGS_H #include "prefspage.h" -#include "serverlistitem.h" /* @author Dario Abatianni */ class KListView; +class QCheckListItem; class PrefsPageDialogs : public PrefsPage { @@ -37,7 +37,7 @@ class PrefsPageDialogs : public PrefsPage protected: KListView* dialogListView; - ServerListItem* item; + QCheckListItem* item; }; #endif diff --git a/konversation/prefspageserverlist.cpp b/konversation/prefspageserverlist.cpp index 4a0c4d3..41de1c0 100644 --- a/konversation/prefspageserverlist.cpp +++ b/konversation/prefspageserverlist.cpp @@ -27,7 +27,7 @@ #include "editserverdialog.h" PrefsPageServerList::PrefsPageServerList(QFrame* newParent,Preferences* newPreferences) : - PrefsPage(newParent,newPreferences) + PrefsPage(newParent,newPreferences) { // Add Layout to Server list pane QVBoxLayout* serverListLayout=new QVBoxLayout(parentFrame,marginHint(),spacingHint(),"server_list_layout"); @@ -36,33 +36,35 @@ PrefsPageServerList::PrefsPageServerList(QFrame* newParent,Preferences* newPrefe serverListView=new KListView(parentFrame); serverListView->setItemsRenameable(true); - serverListView->addColumn(i18n("Auto")); - serverListView->addColumn(i18n("Group")); - serverListView->addColumn(i18n("Server")); - serverListView->addColumn(i18n("Port")); - serverListView->addColumn(i18n("Password")); - serverListView->addColumn(i18n("Channel")); - serverListView->addColumn(i18n("Password")); - serverListView->addColumn(i18n("Identity")); + serverListView->addColumn(i18n("Group")); // 0 + serverListView->addColumn(i18n("Server")); // 1 + serverListView->addColumn(i18n("Port")); // 2 + serverListView->addColumn(i18n("Password")); // 3 + serverListView->addColumn(i18n("Channel")); // 4 + serverListView->addColumn(i18n("Password")); // 5 + serverListView->addColumn(i18n("Identity")); // 6 serverListView->setRenameable(0,false); serverListView->setRenameable(1,true); serverListView->setRenameable(2,true); - serverListView->setRenameable(3,true); - serverListView->setRenameable(5,true); + serverListView->setRenameable(4,true); serverListView->setAllColumnsShowFocus(true); // Fill in the servers from the preferences int index=0; + serverListView->setRootIsDecorated(true); + QString serverString=preferences->getServerByIndex(index); while(!serverString.isEmpty()) { int id=preferences->getServerIdByIndex(index); QStringList serverEntry=QStringList::split(',',serverString,true); - ServerListItem* item=new ServerListItem(serverListView,id, - serverEntry[0], + + QListViewItem* branch=findBranch(serverEntry[0]); + ServerListItem* item=new ServerListItem(branch,id, + serverEntry[0], // won't be shown, but stored inside serverEntry[1], serverEntry[2], (!serverEntry[3].isEmpty()) ? QString("********") : QString::null, @@ -91,7 +93,7 @@ PrefsPageServerList::PrefsPageServerList(QFrame* newParent,Preferences* newPrefe showServerList=new QCheckBox(i18n("&Show server list while autoconnecting"),parentFrame,"show_serverlist_check"); showServerList->setChecked(preferences->getShowServerList()); - + serverListLayout->addWidget(serverListView); serverListLayout->addWidget(buttonBox); serverListLayout->addWidget(showServerList); @@ -138,7 +140,7 @@ void PrefsPageServerList::connectClicked() itemId=item->getId(); // now we can pass the integer variable as argument for the emitted // signal instead of a reference to the locally declared - // ServerListItems accessor function. [MG] + // ServerListItem's accessor function. [MG] emit connectToServer(itemId); } } @@ -147,9 +149,11 @@ void PrefsPageServerList::newServer() { int newId=preferences->addServer("New,new.server.com,6667,,,,,"); - ServerListItem* newItem=new ServerListItem(serverListView,newId,QString::null); + QListViewItem* branch=findBranch("New"); + ServerListItem* newItem=new ServerListItem(branch,newId,"New"); serverListView->setSelected(newItem,true); + serverListView->ensureItemVisible(newItem); editServer(); } @@ -172,8 +176,14 @@ void PrefsPageServerList::removeServer() ServerListItem* item=static_cast(lv_item); if(item) { + // find branch this item belongs to + QListViewItem* branch=findBranch(item->getGroup()); + // remove server from preferences preferences->removeServer(item->getId()); + // remove item from view delete item; + // if the branch has no other items, remove it + if(branch->childCount()==0) delete branch; } } @@ -218,18 +228,29 @@ void PrefsPageServerList::updateServer(const QString& groupName, const QString& channelKey, const QString& identity) { - QListViewItem* item=serverListView->selectedItems().first(); // Need to find a better way without casting - ServerListItem* serverItem=static_cast(item); - int id=serverItem->getId(); - - serverItem->setText(1,groupName); - serverItem->setText(2,serverName); - serverItem->setText(3,serverPort); - serverItem->setText(4,(!serverKey || serverKey.isEmpty()) ? QString::null : QString("********")); - serverItem->setText(5,channelName); - serverItem->setText(6,(!channelKey || channelKey.isEmpty()) ? QString::null : QString("********")); - serverItem->setText(7,identity); + ServerListItem* item=static_cast(serverListView->selectedItems().first()); + // find branch the old item resides in + QListViewItem* branch=findBranch(item->getGroup()); + // save server id of the old item + int id=item->getId(); + // remove item from the list + delete item; + // if the branch is empty, remove it + if(branch->childCount()==0) delete branch; + + // find branch to insert the new item into + branch=findBranch(groupName); + + item=new ServerListItem(branch, + id, + groupName, + serverName, + serverPort, + (!serverKey || serverKey.isEmpty()) ? QString::null : QString("********"), + channelName, + (!channelKey || channelKey.isEmpty()) ? QString::null : QString("********"), + identity); preferences->updateServer(id,groupName+","+ serverName+","+ @@ -237,8 +258,11 @@ void PrefsPageServerList::updateServer(const QString& groupName, serverKey+","+ channelName+","+ channelKey+","+ - (serverItem->isOn() ? "1" : "0")+","+ + (item->isOn() ? "1" : "0")+","+ identity); + + serverListView->setSelected(item,true); + serverListView->ensureItemVisible(item); } void PrefsPageServerList::updateServerProperty(QListViewItem* item,const QString& value,int property) @@ -248,7 +272,9 @@ void PrefsPageServerList::updateServerProperty(QListViewItem* item,const QString int id=serverItem->getId(); if(property==0) property=6; // to keep old preferences working with auto connect checkbox - else property--; // -1 because the first is the checkbox + +// No longer needed, since the group property was moved out +// else property--; // -1 because the first is the checkbox preferences->changeServerProperty(id,property,value); } @@ -260,9 +286,8 @@ void PrefsPageServerList::updateAutoState(ServerListItem* item,bool state) void PrefsPageServerList::serverDoubleClicked(QListViewItem* item) { - // Suppress a compiler warning - item->height(); - connectClicked(); + if(item->text(1).isEmpty()) item->setOpen(!item->isOpen()); + else connectClicked(); } void PrefsPageServerList::showServerListChanged(int state) @@ -270,4 +295,17 @@ void PrefsPageServerList::showServerListChanged(int state) preferences->setShowServerList(state==2); } +QListViewItem* PrefsPageServerList::findBranch(QString name,bool generate) +{ + QListViewItem* branch=serverListView->findItem(name,0); + if(branch==0 && generate==true) + { + branch=new QListViewItem(serverListView,name); + branch->setOpen(true); + branch->setSelectable(false); + } + + return branch; +} + #include "prefspageserverlist.moc" diff --git a/konversation/prefspageserverlist.h b/konversation/prefspageserverlist.h index 2a7dc88..4487ba8 100644 --- a/konversation/prefspageserverlist.h +++ b/konversation/prefspageserverlist.h @@ -33,13 +33,13 @@ class PrefsPageServerList : public PrefsPage { Q_OBJECT - public: + public: PrefsPageServerList(QFrame* newParent,Preferences* newPreferences); ~PrefsPageServerList(); signals: void connectToServer(int id); - + protected slots: void newServer(); void editServer(); @@ -53,6 +53,8 @@ class PrefsPageServerList : public PrefsPage void showServerListChanged(int state); protected: + QListViewItem* findBranch(QString name,bool generate=true); + QPushButton* connectButton; QPushButton* newServerButton; QPushButton* editServerButton; diff --git a/konversation/serverlistitem.cpp b/konversation/serverlistitem.cpp index 7d188bd..ed0c0ec 100644 --- a/konversation/serverlistitem.cpp +++ b/konversation/serverlistitem.cpp @@ -6,7 +6,7 @@ */ /* - serverlistitem.cpp - description + serverlistitem.cpp - Holds the list items inside the server list preferences panel begin: Sun Feb 10 2002 copyright: (C) 2002 by Dario Abatianni email: eisfuchs@tigress.com @@ -16,7 +16,8 @@ #include "serverlistitem.h" -ServerListItem::ServerListItem(QListView* parent,int newId, +ServerListItem::ServerListItem(QListViewItem* parent, + int newId, QString arg0, QString arg1, QString arg2, @@ -27,13 +28,14 @@ ServerListItem::ServerListItem(QListView* parent,int newId, QCheckListItem(parent,QString::null,QCheckListItem::CheckBox) { id=newId; - setText(1,arg0); - setText(2,arg1); - setText(3,arg2); - setText(4,arg3); - setText(5,arg4); - setText(6,arg5); - setText(7,arg6); + setText(1,arg1); + setText(2,arg2); + setText(3,arg3); + setText(4,arg4); + setText(5,arg5); + setText(6,arg6); + + group=arg0; } ServerListItem::~ServerListItem() @@ -45,4 +47,7 @@ void ServerListItem::stateChange(bool state) emit stateChanged(this,state); } +int ServerListItem::getId() const { return id; }; +QString ServerListItem::getGroup() const { return group; }; + #include "serverlistitem.moc" diff --git a/konversation/serverlistitem.h b/konversation/serverlistitem.h index 66f54b3..f9ba0e3 100644 --- a/konversation/serverlistitem.h +++ b/konversation/serverlistitem.h @@ -6,7 +6,7 @@ */ /* - serverlistitem.h - description + serverlistitem.h - Holds the list items inside the server list preferences panel begin: Sun Feb 10 2002 copyright: (C) 2002 by Dario Abatianni email: eisfuchs@tigress.com @@ -18,6 +18,7 @@ #define SERVERLISTITEM_H #include +#include /* @author Dario Abatianni @@ -28,7 +29,9 @@ class ServerListItem : public QObject, public QCheckListItem Q_OBJECT public: - ServerListItem(QListView* parent,int newId,QString arg0, + ServerListItem(QListViewItem* parent, + int newId, + QString arg0, QString arg1=QString::null, QString arg2=QString::null, QString arg3=QString::null, @@ -36,7 +39,9 @@ class ServerListItem : public QObject, public QCheckListItem QString arg5=QString::null, QString arg6=QString::null); ~ServerListItem(); - int getId() const { return id; }; + + int getId() const; + QString getGroup() const; signals: void stateChanged(ServerListItem* myself,bool state); @@ -44,6 +49,7 @@ class ServerListItem : public QObject, public QCheckListItem protected: void stateChange(bool state); int id; + QString group; }; #endif