[prev in list] [next in list] [prev in thread] [next in thread] 

List:       kde-commits
Subject:    [Konversation] 3c2554d: Server list is now a tree list
From:       Dario Abatianni <eisfuchs () tigress ! com>
Date:       2010-07-01 13:27:07
Message-ID: 20100701132707.73100BB550C () projects ! kde ! org
[Download RAW message or body]

commit 3c2554d3d31761d57b4be8dd22e4bcba5eabdf80
Author: Dario Abatianni <eisfuchs@tigress.com>
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;index<dialogDefinitions.count();index++)
   {
     QString flagName(dialogDefinitions[index].section(' ',0,0));
-    item=new ServerListItem(dialogListView,index,flagName,dialogDefinitions[index].section(' \
',1)); +    item=new \
QCheckListItem(dialogListView,flagName,QCheckListItem::CheckBox); +    \
item->setText(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<ServerListItem*>(dialogListView->itemAtIndex(0));
+  QCheckListItem* item=static_cast<QCheckListItem*>(dialogListView->itemAtIndex(0));
   while(item)
   {
-    preferences->setDialogFlag(item->text(1),item->isOn());
-    item=static_cast<ServerListItem*>(item->itemBelow());
+    preferences->setDialogFlag(item->text(0),item->isOn());
+    item=static_cast<QCheckListItem*>(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<ServerListItem*>(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<ServerListItem*>(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<ServerListItem*>(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 <qlistview.h>
+#include <qstring.h>
 
 /*
   @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


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic