head 1.1; access; symbols; locks; strict; comment @# @; 1.1 date 2003.06.11.20.49.07; author swiergot; state Exp; branches; next ; desc @@ 1.1 log @- Added groupstate patch from Kevin Winahradsky . This makes Psi remember open/closed state of groups in roster. @ text @diff -ruN psi-0.9-test2.orig/src/contactview.cpp psi-0.9-test2/src/contactview.cpp --- psi-0.9-test2.orig/src/contactview.cpp 2003-06-01 05:03:46.000000000 +0200 +++ psi-0.9-test2/src/contactview.cpp 2003-06-11 22:41:53.000000000 +0200 @@@@ -1993,7 +1993,10 @@@@ setProfileState(STATUS_OFFLINE); setText(0, profileName); - setOpen(true); + + QString display = cp->d->pa->userAccount().contactViewData[profileName]; + bool viewState = (display == QString::null) || (display.compare("open") == 0); + setOpen(viewState); } ContactViewItem::ContactViewItem(const QString &groupName, int groupType, ContactProfile *cp, ContactView *parent) @@@@ -2008,7 +2011,9 @@@@ drawGroupIcon(); resetGroupName(); - setOpen(true); + QString display = cp->d->pa->userAccount().contactViewData[groupName]; + bool viewState = (display == QString::null) || (display.compare("open") == 0); + setOpen(viewState); setDropEnabled(true); } @@@@ -2027,7 +2032,9 @@@@ drawGroupIcon(); resetGroupName(); - setOpen(true); + QString display = cp->d->pa->userAccount().contactViewData[groupName]; + bool viewState = (display == QString::null) || (display.compare("open") == 0); + setOpen(viewState); setDropEnabled(true); } diff -ruN psi-0.9-test2.orig/src/profiles.cpp psi-0.9-test2/src/profiles.cpp --- psi-0.9-test2.orig/src/profiles.cpp 2003-05-26 02:40:13.000000000 +0200 +++ psi-0.9-test2/src/profiles.cpp 2003-06-11 22:41:53.000000000 +0200 @@@@ -314,6 +314,15 @@@@ r.appendChild(tag); } + QDomElement cd = doc.createElement("contactviewlistdata"); + a.appendChild(cd); + for (QMap::ConstIterator itr = contactViewData.begin(); itr != contactViewData.end(); itr++) { + QDomElement tag = doc.createElement("viewitemdata"); + tag.setAttribute("group", itr.key()); + tag.setAttribute("display", itr.data()); + cd.appendChild(tag); + } + a.appendChild(textTag(doc, "proxyindex", QString::number(proxy_index))); //a.appendChild(textTag(doc, "proxytype", QString::number(proxy_type))); //a.appendChild(textTag(doc, "proxyhost", proxy_host)); @@@@ -396,6 +405,19 @@@@ else opt_passphrase = false; + QDomElement cd = findSubTag(a, "contactviewlistdata", &found); + if(found) { + for(QDomNode n = cd.firstChild(); !n.isNull(); n = n.nextSibling()) { + QDomElement i = n.toElement(); + if(i.isNull()) + continue; + + if(i.tagName() == "viewitemdata") { + contactViewData[i.attribute("group")] = i.attribute("display"); + } + } + } + QDomElement r = findSubTag(a, "roster", &found); if(found) { for(QDomNode n = r.firstChild(); !n.isNull(); n = n.nextSibling()) { diff -ruN psi-0.9-test2.orig/src/profiles.h psi-0.9-test2/src/profiles.h --- psi-0.9-test2.orig/src/profiles.h 2003-05-26 02:40:13.000000000 +0200 +++ psi-0.9-test2/src/profiles.h 2003-06-11 22:41:53.000000000 +0200 @@@@ -52,6 +52,7 @@@@ QString olr_string; Jabber::Roster roster; + QMap contactViewData; bool opt_passphrase; QString pgpPassphrase; diff -ruN psi-0.9-test2.orig/src/psiaccount.cpp psi-0.9-test2/src/psiaccount.cpp --- psi-0.9-test2.orig/src/psiaccount.cpp 2003-06-09 20:24:14.000000000 +0200 +++ psi-0.9-test2/src/psiaccount.cpp 2003-06-11 22:41:53.000000000 +0200 @@@@ -222,6 +222,8 @@@@ d->gcbank.setAutoDelete(true); + d->acc.contactViewData = acc.contactViewData; + // create Jabber::Client d->client = new Client; d->client->setOSName(getOSName()); @@@@ -279,6 +281,9 @@@@ connect(d->cp, SIGNAL(actionAssignKey(const Jid &)),SLOT(actionAssignKey(const Jid &))); connect(d->cp, SIGNAL(actionUnassignKey(const Jid &)),SLOT(actionUnassignKey(const Jid &))); + connect(d->cp->contactView(), SIGNAL(expanded(QListViewItem*)), SLOT(listStateChage(QListViewItem*))); + connect(d->cp->contactView(), SIGNAL(collapsed(QListViewItem*)), SLOT(listStateChage(QListViewItem*))); + // restore cached roster for(Roster::ConstIterator it = acc.roster.begin(); it != acc.roster.end(); ++it) client_rosterItemUpdated(*it); @@@@ -2877,6 +2882,22 @@@@ d->cp->removeSelf(); } +void PsiAccount::listStateChage(QListViewItem* litem) +{ + ContactViewItem* cvi = (ContactViewItem*)litem; + if (cvi->contactProfile()->name() != d->cp->name()) + return; + + QString isOpen = cvi->isOpen() ? "open" : "close"; + int type = cvi->type(); + if (type == ContactViewItem::Profile) { + d->acc.contactViewData[cvi->contactProfile()->name()] = isOpen; + } + else if (type == ContactViewItem::Group) { + d->acc.contactViewData[cvi->groupName()] = isOpen; + } +} + QString PsiAccount::resultToString(int result) { QString s; diff -ruN psi-0.9-test2.orig/src/psiaccount.h psi-0.9-test2/src/psiaccount.h --- psi-0.9-test2.orig/src/psiaccount.h 2003-05-22 21:12:55.000000000 +0200 +++ psi-0.9-test2/src/psiaccount.h 2003-06-11 22:41:53.000000000 +0200 @@@@ -305,6 +305,8 @@@@ void optionsUpdate(); + void listStateChage(QListViewItem*); + private: class Private; Private *d; @ .