_Almost_ finished the identity dialog (which is still not used and not visible yet...
authorManuel Nickschas <sputnick@quassel-irc.org>
Tue, 8 Jan 2008 22:32:31 +0000 (22:32 +0000)
committerManuel Nickschas <sputnick@quassel-irc.org>
Tue, 8 Jan 2008 22:32:31 +0000 (22:32 +0000)
What a bugfixing orgy that was until I had sorted out all the issues with managing, syncing and
editing identities in both client and server... now only some more tweaks and tests, and that
baby should be outta house!
Committing just in case -- commit early, commit often...

Quassel.kdevelop.filelist
src/client/client.cpp
src/common/identity.cpp
src/common/syncableobject.h
src/core/core.cpp
src/core/coresession.cpp
src/qtui/mainwin.cpp
src/qtui/settingspages/identitiessettingspage.cpp
src/qtui/settingspages/identitiessettingspage.h
src/qtui/settingspages/identitiessettingspage.ui

index 9f4e17e..64f0c64 100644 (file)
@@ -180,6 +180,7 @@ src/qtui/settingspages/identitiessettingspage.cpp
 src/qtui/settingspages/identitiessettingspage.h
 src/qtui/settingspages/identitiessettingspage.ui
 src/qtui/settingspages/networkssettingspage.ui
+src/qtui/settingspages/saveidentitiesdlg.ui
 src/qtui/settingspages/servereditdlg.ui
 src/qtui/settingspages/settingspages.pri
 src/qtui/topicwidget.cpp
index 55fccf2..fe84844 100644 (file)
@@ -387,10 +387,6 @@ void Client::syncToCore(const QVariant &coreState) {
   // create identities
   foreach(QVariant vid, sessionState["Identities"].toList()) {
     coreIdentityCreated(vid.value<Identity>());
-    //Identity *id = new Identity(vid.value<Identity>(), this);
-    //_identities[id->id()] = id;
-    //signalProxy()->synchronize(id);
-    //qDebug() << "received identity" << id->identityName();
   }
 
   // store Buffer details
index a45eb75..b69f898 100644 (file)
@@ -60,7 +60,7 @@ void Identity::init() {
 }
 
 void Identity::setToDefaults() {
-  setIdentityName(tr("Default Identity"));
+  setIdentityName(tr("<empty>"));
   setRealName(tr("Quassel IRC User"));
   QStringList n;
   n << QString("quassel%1").arg(qrand() & 0xff); // FIXME provide more sensible default nicks
@@ -81,7 +81,6 @@ void Identity::setToDefaults() {
   setKickReason(tr("Kindergarten is elsewhere!"));
   setPartReason(tr("http://quassel-irc.org - Chat comfortably. Anywhere."));
   setQuitReason(tr("http://quassel-irc.org - Chat comfortably. Anywhere."));
-
 }
 
 bool Identity::isValid() const {
@@ -296,8 +295,8 @@ bool Identity::operator==(const Identity &other) {
     QMetaProperty metaProp = metaObject()->property(idx);
     Q_ASSERT(metaProp.isValid());
     QVariant v1 = this->property(metaProp.name());
-    QVariant v2 = other.property(metaProp.name()); //qDebug() << v1 << v2;
-    // QVariant cannot compare custom types, so we need to check for this case
+    QVariant v2 = other.property(metaProp.name()); // qDebug() << v1 << v2;
+    // QVariant cannot compare custom types, so we need to check for this special case
     if(QString(v1.typeName()) == "IdentityId") {
       if(v1.value<IdentityId>() != v2.value<IdentityId>()) return false;
     } else {
index 7883861..4ce8c91 100644 (file)
@@ -46,7 +46,7 @@ class SyncableObject : public QObject {
     virtual QVariantMap toVariantMap();
 
     //! Initialize the object's state from a given QVariantMap.
-    /** \see toVarianMap() for important information concerning this method.
+    /** \see toVariantMap() for important information concerning this method.
      */
     virtual void fromVariantMap(const QVariantMap &map);
 
index 0f007d3..66d1d37 100644 (file)
@@ -140,7 +140,7 @@ bool Core::initStorage(QVariantMap dbSettings, bool setup) {
 
   return configured = storage->init(dbSettings);
 }
-                                               
+
 bool Core::initStorage(QVariantMap dbSettings) {
   return initStorage(dbSettings, false);
 }
@@ -254,7 +254,7 @@ void Core::clientHasData() {
       return;
     }
   }
-  blockSizes[socket] = bsize = 0;  // FIXME blockSizes aufräum0rn!
+  blockSizes[socket] = bsize = 0;  // FIXME blockSizes aufrum0rn!
 }
 
 // FIXME: no longer called, since connection handling is now in SignalProxy
index 92eeafe..bbe4a1f 100644 (file)
@@ -18,6 +18,8 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
+#define SPUTDEV
+
 #include "coresession.h"
 #include "server.h"
 
@@ -50,13 +52,13 @@ CoreSession::CoreSession(UserId uid, Storage *_storage, QObject *parent)
   foreach(IdentityId id, s.identityIds()) {
     Identity *i = new Identity(s.identity(id), this);
     if(!i->isValid()) {
-      qDebug() << QString("Invalid identity! Removing...");
+      qWarning() << QString("Invalid identity! Removing...");
       s.removeIdentity(id);
       delete i;
       continue;
     }
     if(_identities.contains(i->id())) {
-      qDebug() << "Duplicate identity, ignoring!";
+      qWarning() << "Duplicate identity, ignoring!";
       delete i;
       continue;
     }
@@ -65,6 +67,7 @@ CoreSession::CoreSession(UserId uid, Storage *_storage, QObject *parent)
   if(!_identities.count()) {
     Identity i(1);
     i.setToDefaults();
+    i.setIdentityName(tr("Default Identity"));
     createIdentity(i);
   }
 #endif
@@ -297,7 +300,7 @@ void CoreSession::initScriptEngine() {
 void CoreSession::scriptRequest(QString script) {
   emit scriptResult(scriptEngine->evaluate(script).toString());
 }
-
+#include <QDebug>
 void CoreSession::createIdentity(const Identity &id) {
   // find free ID
   int i;
@@ -311,7 +314,7 @@ void CoreSession::createIdentity(const Identity &id) {
   signalProxy()->synchronize(newId);
   CoreUserSettings s(user);
   s.storeIdentity(*newId);
-  emit identityCreated(i);
+  emit identityCreated(*newId);
 }
 
 void CoreSession::updateIdentity(const Identity &id) {
index 0feeb63..47e44e5 100644 (file)
@@ -17,6 +17,7 @@
  *   Free Software Foundation, Inc.,                                       *
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
+//#define SPUTDEV
 
 #include "mainwin.h"
 
@@ -154,7 +155,6 @@ void MainWin::setupMenus() {
   connect(ui.actionEditIdentities, SIGNAL(triggered()), serverListDlg, SLOT(editIdentities()));
   connect(ui.actionSettingsDlg, SIGNAL(triggered()), this, SLOT(showSettingsDlg()));
   connect(ui.actionDebug_Console, SIGNAL(triggered()), this, SLOT(showDebugConsole()));
-  //ui.actionSettingsDlg->setEnabled(false);
   connect(ui.actionAboutQt, SIGNAL(triggered()), QApplication::instance(), SLOT(aboutQt()));
 }
 
index 2817b84..c9cb1f1 100644 (file)
@@ -18,6 +18,7 @@
  *   59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.             *
  ***************************************************************************/
 
+#include <QInputDialog>
 #include <QMessageBox>
 
 #include "identitiessettingspage.h"
@@ -73,7 +74,8 @@ void IdentitiesSettingsPage::save() {
   QList<Identity *> toCreate, toUpdate;
   // we need to remove our temporarily created identities.
   // these are going to be re-added after the core has propagated them back...
-  for(QHash<IdentityId, Identity *>::iterator i = identities.begin(); i != identities.end(); ++i) {
+  QHash<IdentityId, Identity *>::iterator i = identities.begin();
+  while(i != identities.end()) {
     if((*i)->id() < 0) {
       Identity *temp = *i;
       i = identities.erase(i);
@@ -83,6 +85,7 @@ void IdentitiesSettingsPage::save() {
       if(**i != *Client::identity((*i)->id())) {
         toUpdate.append(*i);
       }
+      ++i;
     }
   }
   SaveIdentitiesDlg dlg(toCreate, toUpdate, deletedIdentities, this);
@@ -94,9 +97,10 @@ void IdentitiesSettingsPage::save() {
   foreach(Identity *id, toCreate) {
     id->deleteLater();
   }
+  changedIdentities.clear();
+  deletedIdentities.clear();
   changeState(false);
   setEnabled(true);
-
 }
 
 void IdentitiesSettingsPage::load() {
@@ -128,10 +132,13 @@ bool IdentitiesSettingsPage::testHasChanged() {
   if(currentId < 0) {
     return true; // new identity
   } else {
-    changedIdentities.removeAll(currentId);
-    Identity temp(currentId, this);
-    saveToIdentity(&temp);
-    if(temp != *identities[currentId]) changedIdentities.append(currentId);
+    if(currentId != 0) {
+      changedIdentities.removeAll(currentId);
+      Identity temp(currentId, this);
+      saveToIdentity(&temp);
+      temp.setIdentityName(identities[currentId]->identityName());
+      if(temp != *Client::identity(currentId)) changedIdentities.append(currentId);
+    }
     return changedIdentities.count();
   }
 }
@@ -158,21 +165,23 @@ bool IdentitiesSettingsPage::aboutToSave() {
 
 void IdentitiesSettingsPage::clientIdentityCreated(IdentityId id) {
   insertIdentity(new Identity(*Client::identity(id), this));
+  Identity *i = identities[id];
   connect(Client::identity(id), SIGNAL(updatedRemotely()), this, SLOT(clientIdentityUpdated()));
 }
 
 void IdentitiesSettingsPage::clientIdentityUpdated() {
-  Identity *identity = qobject_cast<Identity *>(sender());
-  if(!identity) {
+  const Identity *clientIdentity = qobject_cast<Identity *>(sender());
+  if(!clientIdentity) {
     qWarning() << "Invalid identity to update!";
     return;
   }
-  if(!identities.contains(identity->id())) {
-    qWarning() << "Unknown identity to update:" << identity->identityName();
+  if(!identities.contains(clientIdentity->id())) {
+    qWarning() << "Unknown identity to update:" << clientIdentity->identityName();
     return;
   }
-  identities[identity->id()]->update(*identity);
-  ui.identityList->setItemText(ui.identityList->findData(identity->id()), identity->identityName());
+  Identity *identity = identities[clientIdentity->id()];
+  if(identity->identityName() != clientIdentity->identityName()) renameIdentity(identity->id(), clientIdentity->identityName());
+  identity->update(*clientIdentity);
   if(identity->id() == currentId) displayIdentity(identity, true);
 }
 
@@ -205,9 +214,16 @@ void IdentitiesSettingsPage::insertIdentity(Identity *identity) {
   }
 }
 
+void IdentitiesSettingsPage::renameIdentity(IdentityId id, const QString &newName) {
+  Identity *identity = identities[id];
+  ui.identityList->setItemText(ui.identityList->findData(identity->id()), newName);
+  identity->setIdentityName(newName);
+}
+
 void IdentitiesSettingsPage::removeIdentity(Identity *id) {
-  ui.identityList->removeItem(ui.identityList->findData(id->id()));
   identities.remove(id->id());
+  ui.identityList->removeItem(ui.identityList->findData(id->id()));
+  changedIdentities.removeAll(id->id());
   id->deleteLater();
   widgetHasChanged();
 }
@@ -220,7 +236,7 @@ void IdentitiesSettingsPage::on_identityList_currentIndexChanged(int index) {
     IdentityId id = ui.identityList->itemData(index).toInt();
     if(identities.contains(id)) displayIdentity(identities[id]);
     ui.deleteIdentity->setEnabled(id != 1); // default identity cannot be deleted
-    //ui.identityList->setEditable(id != 1);  // ...or renamed
+    ui.renameIdentity->setEnabled(id != 1); // ...or renamed
   }
 }
 
@@ -257,7 +273,6 @@ void IdentitiesSettingsPage::displayIdentity(Identity *id, bool dontsave) {
 }
 
 void IdentitiesSettingsPage::saveToIdentity(Identity *id) {
-  id->setIdentityName(ui.identityList->currentText());
   id->setRealName(ui.realName->text());
   QStringList nicks;
   for(int i = 0; i < ui.nicknameList->count(); i++) {
@@ -312,11 +327,20 @@ void IdentitiesSettingsPage::on_deleteIdentity_clicked() {
                                   QMessageBox::Yes|QMessageBox::No, QMessageBox::No);
   if(ret != QMessageBox::Yes) return;
   if(id->id() > 0) deletedIdentities.append(id->id());
+  currentId = 0;
   removeIdentity(id);
 }
 
-void IdentitiesSettingsPage::on_identityList_editTextChanged(const QString &text) {
-  ui.identityList->setItemText(ui.identityList->currentIndex(), text);
+void IdentitiesSettingsPage::on_renameIdentity_clicked() {
+  QString oldName = identities[currentId]->identityName();
+  bool ok = false;
+  QString name = QInputDialog::getText(this, tr("Rename Identity"),
+                                       tr("Please enter a new name for the identity \"%1\":").arg(oldName),
+                                       QLineEdit::Normal, oldName, &ok);
+  if(ok && !name.isEmpty()) {
+    renameIdentity(currentId, name);
+    widgetHasChanged();
+  }
 }
 
 /*****************************************************************************************/
index 0e21662..294d646 100644 (file)
@@ -50,10 +50,10 @@ class IdentitiesSettingsPage : public SettingsPage {
     void clientIdentityRemoved(IdentityId);
 
     void on_identityList_currentIndexChanged(int index);
-    void on_identityList_editTextChanged(const QString &);
 
     void on_addIdentity_clicked();
     void on_deleteIdentity_clicked();
+    void on_renameIdentity_clicked();
 
     void widgetHasChanged();
 
@@ -68,6 +68,7 @@ class IdentitiesSettingsPage : public SettingsPage {
 
     void insertIdentity(Identity *identity);
     void removeIdentity(Identity *identity);
+    void renameIdentity(IdentityId id, const QString &newName);
     void displayIdentity(Identity *, bool dontsave = false);
     void saveToIdentity(Identity *);
 
index fdd03e7..92f18b2 100644 (file)
@@ -5,8 +5,8 @@
    <rect>
     <x>0</x>
     <y>0</y>
-    <width>422</width>
-    <height>380</height>
+    <width>431</width>
+    <height>398</height>
    </rect>
   </property>
   <property name="windowTitle" >
        </property>
       </widget>
      </item>
+     <item>
+      <widget class="QToolButton" name="renameIdentity" >
+       <property name="text" >
+        <string>...</string>
+       </property>
+       <property name="icon" >
+        <iconset resource="../../icons/icons.qrc" >:/22x22/actions/oxygen/22x22/actions/edit-rename.png</iconset>
+       </property>
+       <property name="iconSize" >
+        <size>
+         <width>22</width>
+         <height>22</height>
+        </size>
+       </property>
+      </widget>
+     </item>
      <item>
       <widget class="QToolButton" name="addIdentity" >
        <property name="text" >
           <item>
            <layout class="QVBoxLayout" >
             <item>
-             <layout class="QVBoxLayout" >
+             <widget class="QPushButton" name="addNick" >
+              <property name="sizePolicy" >
+               <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>&amp;Add...</string>
+              </property>
+              <property name="icon" >
+               <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/list-add.png</iconset>
+              </property>
+              <property name="iconSize" >
+               <size>
+                <width>16</width>
+                <height>16</height>
+               </size>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QPushButton" name="deleteNick" >
+              <property name="sizePolicy" >
+               <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>De&amp;lete</string>
+              </property>
+              <property name="icon" >
+               <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-delete.png</iconset>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <widget class="QPushButton" name="renameNick" >
+              <property name="sizePolicy" >
+               <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
+                <horstretch>0</horstretch>
+                <verstretch>0</verstretch>
+               </sizepolicy>
+              </property>
+              <property name="text" >
+               <string>Re&amp;name...</string>
+              </property>
+              <property name="icon" >
+               <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-rename.png</iconset>
+              </property>
+             </widget>
+            </item>
+            <item>
+             <layout class="QHBoxLayout" >
               <property name="spacing" >
                <number>6</number>
               </property>
                <number>0</number>
               </property>
               <item>
-               <widget class="QPushButton" name="addNick" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
-                </property>
-                <property name="text" >
-                 <string>&amp;Add...</string>
-                </property>
-                <property name="icon" >
-                 <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/list-add.png</iconset>
+               <spacer>
+                <property name="orientation" >
+                 <enum>Qt::Horizontal</enum>
                 </property>
-                <property name="iconSize" >
+                <property name="sizeHint" >
                  <size>
-                  <width>16</width>
-                  <height>16</height>
+                  <width>0</width>
+                  <height>20</height>
                  </size>
                 </property>
-               </widget>
+               </spacer>
               </item>
               <item>
-               <widget class="QPushButton" name="renameNick" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
+               <widget class="QToolButton" name="upNick" >
+                <property name="toolTip" >
+                 <string>Move upwards in list</string>
                 </property>
                 <property name="text" >
-                 <string>Re&amp;name...</string>
+                 <string>...</string>
                 </property>
                 <property name="icon" >
-                 <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-rename.png</iconset>
+                 <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/go-up.png</iconset>
                 </property>
                </widget>
               </item>
               <item>
-               <widget class="QPushButton" name="deleteNick" >
-                <property name="sizePolicy" >
-                 <sizepolicy vsizetype="Fixed" hsizetype="Preferred" >
-                  <horstretch>0</horstretch>
-                  <verstretch>0</verstretch>
-                 </sizepolicy>
+               <widget class="QToolButton" name="downNick" >
+                <property name="toolTip" >
+                 <string>Move downwards in list</string>
                 </property>
                 <property name="text" >
-                 <string>De&amp;lete</string>
+                 <string>...</string>
                 </property>
                 <property name="icon" >
-                 <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/edit-delete.png</iconset>
+                 <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/go-down.png</iconset>
                 </property>
                </widget>
               </item>
-              <item>
-               <layout class="QHBoxLayout" >
-                <property name="spacing" >
-                 <number>6</number>
-                </property>
-                <property name="leftMargin" >
-                 <number>0</number>
-                </property>
-                <property name="topMargin" >
-                 <number>0</number>
-                </property>
-                <property name="rightMargin" >
-                 <number>0</number>
-                </property>
-                <property name="bottomMargin" >
-                 <number>0</number>
-                </property>
-                <item>
-                 <spacer>
-                  <property name="orientation" >
-                   <enum>Qt::Horizontal</enum>
-                  </property>
-                  <property name="sizeHint" >
-                   <size>
-                    <width>0</width>
-                    <height>20</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-                <item>
-                 <widget class="QToolButton" name="upNick" >
-                  <property name="toolTip" >
-                   <string>Move upwards in list</string>
-                  </property>
-                  <property name="text" >
-                   <string>...</string>
-                  </property>
-                  <property name="icon" >
-                   <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/go-up.png</iconset>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <widget class="QToolButton" name="downNick" >
-                  <property name="toolTip" >
-                   <string>Move downwards in list</string>
-                  </property>
-                  <property name="text" >
-                   <string>...</string>
-                  </property>
-                  <property name="icon" >
-                   <iconset resource="../../icons/icons.qrc" >:/16x16/actions/oxygen/16x16/actions/go-down.png</iconset>
-                  </property>
-                 </widget>
-                </item>
-                <item>
-                 <spacer>
-                  <property name="orientation" >
-                   <enum>Qt::Horizontal</enum>
-                  </property>
-                  <property name="sizeHint" >
-                   <size>
-                    <width>0</width>
-                    <height>20</height>
-                   </size>
-                  </property>
-                 </spacer>
-                </item>
-               </layout>
-              </item>
               <item>
                <spacer>
                 <property name="orientation" >
-                 <enum>Qt::Vertical</enum>
+                 <enum>Qt::Horizontal</enum>
                 </property>
                 <property name="sizeHint" >
                  <size>
-                  <width>20</width>
-                  <height>0</height>
+                  <width>0</width>
+                  <height>20</height>
                  </size>
                 </property>
                </spacer>
               </property>
               <property name="sizeHint" >
                <size>
-                <width>20</width>
-                <height>40</height>
+                <width>124</width>
+                <height>76</height>
                </size>
               </property>
              </spacer>