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...
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
// 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
}
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
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 {
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 {
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);
return configured = storage->init(dbSettings);
}
-
+
bool Core::initStorage(QVariantMap dbSettings) {
return initStorage(dbSettings, false);
}
return;
}
}
- blockSizes[socket] = bsize = 0; // FIXME blockSizes aufräum0rn!
+ blockSizes[socket] = bsize = 0; // FIXME blockSizes aufr�um0rn!
}
// FIXME: no longer called, since connection handling is now in SignalProxy
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#define SPUTDEV
+
#include "coresession.h"
#include "server.h"
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;
}
if(!_identities.count()) {
Identity i(1);
i.setToDefaults();
+ i.setIdentityName(tr("Default Identity"));
createIdentity(i);
}
#endif
void CoreSession::scriptRequest(QString script) {
emit scriptResult(scriptEngine->evaluate(script).toString());
}
-
+#include <QDebug>
void CoreSession::createIdentity(const Identity &id) {
// find free ID
int i;
signalProxy()->synchronize(newId);
CoreUserSettings s(user);
s.storeIdentity(*newId);
- emit identityCreated(i);
+ emit identityCreated(*newId);
}
void CoreSession::updateIdentity(const Identity &id) {
* Free Software Foundation, Inc., *
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+//#define SPUTDEV
#include "mainwin.h"
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()));
}
* 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
***************************************************************************/
+#include <QInputDialog>
#include <QMessageBox>
#include "identitiessettingspage.h"
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);
if(**i != *Client::identity((*i)->id())) {
toUpdate.append(*i);
}
+ ++i;
}
}
SaveIdentitiesDlg dlg(toCreate, toUpdate, deletedIdentities, this);
foreach(Identity *id, toCreate) {
id->deleteLater();
}
+ changedIdentities.clear();
+ deletedIdentities.clear();
changeState(false);
setEnabled(true);
-
}
void IdentitiesSettingsPage::load() {
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();
}
}
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);
}
}
}
+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();
}
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
}
}
}
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++) {
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();
+ }
}
/*****************************************************************************************/
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();
void insertIdentity(Identity *identity);
void removeIdentity(Identity *identity);
+ void renameIdentity(IdentityId id, const QString &newName);
void displayIdentity(Identity *, bool dontsave = false);
void saveToIdentity(Identity *);
<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>&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&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&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>&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&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&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>