249
// make a tooltip with account information
250
QString ContactProfile::makeTip(bool trim, bool doLinkify) const
253
return "<qt> <center> <b>" + d->cvi->text(0) + " " + d->cvi->groupInfo() + "</b> </center>" + d->su.makeBareTip(trim,doLinkify) + "</qt>";
255
return d->su.makeTip(trim,doLinkify);
247
258
// check for user group
248
259
ContactViewItem *ContactProfile::checkGroup(const QString &name)
297
308
void ContactProfile::updateEntry(const UserListItem &u)
299
Entry *e = findEntry(u.jid());
311
// Update the self item
314
// Show and/or update item if necessary
315
if (d->cv->isShowSelf() || d->su.userResourceList().count() > 1) {
307
removeUnneededContactItems(e);
309
// update remaining items
310
QPtrListIterator<ContactViewItem> it(e->cvi);
311
for(ContactViewItem *i; (i = it.current()); ++it) {
312
i->setContact(&e->u);
314
i->stopAnimateNick();
318
deferredUpdateGroups();
319
addNeededContactItems(e);
322
void ContactProfile::updateSelf(const UserListItem &u)
328
Entry *e = findEntry(u.jid());
336
removeUnneededContactItems(e);
338
// update remaining items
339
QPtrListIterator<ContactViewItem> it(e->cvi);
340
for(ContactViewItem *i; (i = it.current()); ++it) {
341
i->setContact(&e->u);
343
i->stopAnimateNick();
347
deferredUpdateGroups();
348
addNeededContactItems(e);
352
void ContactProfile::updateSelf()
355
d->self->setContact(&d->su);
356
if(!d->su.isAvailable())
357
d->self->stopAnimateNick();
361
void ContactProfile::addSelf()
328
366
d->self = new ContactViewItem(&d->su, this, d->cvi);
331
d->self->setContact(&d->su);
333
d->self->stopAnimateNick();
337
370
void ContactProfile::removeSelf()
343
378
ContactViewItem *ContactProfile::addContactItem(Entry *e, ContactViewItem *group_item)
798
833
QPopupMenu *am = new QPopupMenu(&pm);
799
834
am->insertItem(is->transportStatus("transport", STATUS_ONLINE), tr("Online Users"), 5);
800
am->insertItem(IconsetFactory::icon("psi/sendMessage"), tr("Send server message"), 1);
835
am->insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("Send server message"), 1);
801
836
am->insertSeparator();
802
am->insertItem(/*IconsetFactory::icon("psi/edit"),*/ tr("Set MOTD"), 2);
803
am->insertItem(/*IconsetFactory::icon("psi/edit/clear"),*/ tr("Update MOTD"), 3);
804
am->insertItem(IconsetFactory::icon("psi/remove"), tr("Delete MOTD"), 4);
837
am->insertItem(/*IconsetFactory::iconPixmap("psi/edit"),*/ tr("Set MOTD"), 2);
838
am->insertItem(/*IconsetFactory::iconPixmap("psi/edit/clear"),*/ tr("Update MOTD"), 3);
839
am->insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Delete MOTD"), 4);
806
841
QPopupMenu *bm = new QPopupMenu(&pm);
807
842
bm->insertItem(is->transportStatus("transport", STATUS_ONLINE), tr("Service &Discovery"), 9);
808
843
bm->insertSeparator();
809
bm->insertItem(IconsetFactory::icon("psi/sendMessage"), tr("New &blank message"), 6);
810
bm->insertItem(IconsetFactory::icon("psi/addContact"), tr("&Add a contact"), 7);
811
bm->insertItem(IconsetFactory::icon("psi/xml"), tr("&XML Console"), 10);
844
bm->insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("New &blank message"), 6);
845
bm->insertItem(IconsetFactory::iconPixmap("psi/addContact"), tr("&Add a contact"), 7);
846
bm->insertItem(IconsetFactory::iconPixmap("psi/xml"), tr("&XML Console"), 10);
813
848
const int status_start = 16;
814
849
QPopupMenu *sm = new QPopupMenu(&pm);
827
862
pm.insertSeparator();
828
863
pm.insertItem(tr("A&ctions"), bm);
829
pm.insertItem(IconsetFactory::icon("psi/account"), tr("&Modify Account..."), 0);
864
pm.insertItem(IconsetFactory::iconPixmap("psi/account"), tr("&Modify Account..."), 0);
830
865
pm.insertSeparator();
831
866
pm.insertItem(tr("&Admin"), am);
882
917
QString gname = i->groupName();
885
pm.insertItem(IconsetFactory::icon("psi/sendMessage"), tr("Send message to group"), 0);
920
pm.insertItem(IconsetFactory::iconPixmap("psi/sendMessage"), tr("Send message to group"), 0);
886
921
if(!option.lockdown.roster) {
887
922
// disable if it's not a user group
888
923
if(!online || i->groupType() != ContactViewItem::gUser || gname == ContactView::tr("Hidden")) {
896
931
d->cv->qa_ren->addTo(&pm);
897
932
pm.insertSeparator();
898
pm.insertItem(IconsetFactory::icon("psi/remove"), tr("Remove group"), 2);
899
pm.insertItem(IconsetFactory::icon("psi/remove"), tr("Remove group and contacts"), 3);
933
pm.insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Remove group"), 2);
934
pm.insertItem(IconsetFactory::iconPixmap("psi/remove"), tr("Remove group and contacts"), 3);
902
937
if(i->groupType() == ContactViewItem::gAgents) {
974
1009
bool isPrivate = e ? e->u.isPrivate(): false;
975
1010
bool isAgent = e ? e->u.isTransport() : false;
976
1011
bool avail = e ? e->u.isAvailable() : false;
1012
QString groupNameCache = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
980
1016
if(!self && !inList && !isPrivate && !option.lockdown.roster) {
981
pm.insertItem(IconsetFactory::icon("psi/addContact"), tr("Add/Authorize to contact list"), 10);
1017
pm.insertItem(IconsetFactory::iconPixmap("psi/addContact"), tr("Add/Authorize to contact list"), 10);
983
1019
pm.setItemEnabled(10, false);
984
1020
pm.insertSeparator();
1037
1073
pm.insertItem(tr("Send message to"), s2m, 17);
1039
d->cv->qa_chat->setIconSet(IconsetFactory::icon("psi/chat"));
1075
d->cv->qa_chat->setIconSet(IconsetFactory::iconPixmap("psi/chat"));
1040
1076
d->cv->qa_chat->addTo(&pm);
1081
1117
pm.insertSeparator();
1082
pm.insertItem(IconsetFactory::icon("psi/upload"), tr("Send &file"), 23);
1118
pm.insertItem(IconsetFactory::iconPixmap("psi/upload"), tr("Send &file"), 23);
1084
1120
pm.setItemEnabled(23, false);
1097
1133
gm->setItemEnabled(id, false);
1099
pm.insertItem(IconsetFactory::icon("psi/groupChat"), tr("Invite to"), gm, 14);
1135
pm.insertItem(IconsetFactory::iconPixmap("psi/groupChat"), tr("Invite to"), gm, 14);
1100
1136
if(groupchats.isEmpty())
1101
1137
pm.setItemEnabled(14, false);
1127
1163
if(e->u.groups().isEmpty())
1128
1164
gm->setItemChecked(8, true);
1130
g = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
1133
1169
gl.remove(ContactView::tr("Hidden"));
1149
1185
if(g == ContactView::tr("Hidden"))
1150
1186
gm->setItemChecked(n+base_group, true);
1151
1187
gm->insertSeparator();
1152
gm->insertItem(IconsetFactory::icon("psi/edit/clear"), tr("&Create new..."), 9);
1188
gm->insertItem(IconsetFactory::iconPixmap("psi/edit/clear"), tr("&Create new..."), 9);
1153
1189
pm.insertItem(tr("&Group"), gm, 5);
1177
1213
authm->insertItem(tr("Resend authorization to"), 6);
1178
1214
authm->insertItem(tr("Rerequest authorization from"), 11);
1179
authm->insertItem(IconsetFactory::icon("psi/edit/delete"), tr("Remove authorization from"), 15);
1215
authm->insertItem(IconsetFactory::iconPixmap("psi/edit/delete"), tr("Remove authorization from"), 15);
1181
pm.insertItem (IconsetFactory::icon("psi/register"), tr("Authorization"), authm, 20);
1217
pm.insertItem (IconsetFactory::iconPixmap("psi/register"), tr("Authorization"), authm, 20);
1183
1219
pm.setItemEnabled(20, false);
1195
1231
pm.insertSeparator();
1235
//QPopupMenu *avpm = new QPopupMenu(&pm);
1236
//d->cv->qa_assignAvatar->addTo(avpm);
1237
//d->cv->qa_clearAvatar->setEnabled(d->pa->avatarFactory()->hasManualAvatar(u->jid()));
1238
//d->cv->qa_clearAvatar->addTo(avpm);
1239
//pm.insertItem(tr("&Avatar"), avpm);
1240
//avpm->setEnabled(option.avatarsEnabled);
1198
1242
if(d->pa->psi()->pgp()) {
1199
1243
if(u->publicKeyID().isEmpty())
1200
pm.insertItem(IconsetFactory::icon("psi/keySingle"), tr("Assign Open&PGP key"), 21);
1244
pm.insertItem(IconsetFactory::iconPixmap("psi/keySingle"), tr("Assign Open&PGP key"), 21);
1202
pm.insertItem(IconsetFactory::icon("psi/keySingle"), tr("Unassign Open&PGP key"), 22);
1246
pm.insertItem(IconsetFactory::iconPixmap("psi/keySingle"), tr("Unassign Open&PGP key"), 22);
1205
pm.insertItem(/*IconsetFactory::icon("psi/info"),*/ tr("Check &Status"), 4);
1249
pm.insertItem(/*IconsetFactory::iconPixmap("psi/info"),*/ tr("Check &Status"), 4);
1207
pm.insertItem(IconsetFactory::icon("psi/vCard"), tr("User &Info"), 12);
1251
pm.insertItem(IconsetFactory::iconPixmap("psi/vCard"), tr("User &Info"), 12);
1209
1253
if(!isPrivate) {
1210
1254
d->cv->qa_hist->addTo(&pm);
1259
1303
// if we have groups, but we are setting to 'none', then remove that particular group
1260
1304
if(!u->groups().isEmpty()) {
1261
QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
1305
QString gname = groupNameCache;
1262
1306
actionGroupRemove(u->jid(), gname);
1286
QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
1330
QString gname = groupNameCache;
1287
1331
actionGroupRemove(u->jid(), gname);
1288
1332
actionGroupAdd(u->jid(), newgroup);
1410
1454
// remove the group of this cvi if there is one
1411
1455
if(!u->groups().isEmpty()) {
1412
QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
1456
//QString gname = ((ContactViewItem *)static_cast<QListViewItem *>(i)->parent())->groupName();
1457
QString gname = groupNameCache;
1413
1458
actionGroupRemove(u->jid(), gname);
1415
1460
// add the group
1660
void ContactProfile::dragDropFiles(const QStringList &files, ContactViewItem *i)
1662
if(files.isEmpty() || !d->pa->loggedIn() || i->type() != ContactViewItem::Contact)
1665
Entry *e = findEntry(i);
1669
actionSendFiles(e->u.jid(),files);
1616
1672
//----------------------------------------------------------------------------
1738
1795
connect(qa_send, SIGNAL(activated()), SLOT(doSendMessage()));
1739
1796
qa_ren = new IconAction("", /*"psi/edit/clear",*/ tr("Re&name"), QListView::Key_F2, this);
1740
1797
connect(qa_ren, SIGNAL(activated()), SLOT(doRename()));
1799
//qa_assignAvatar = new IconAction("", tr("&Assign Avatar"),QKeySequence(), this);
1800
//connect(qa_assignAvatar, SIGNAL(activated()), SLOT(doAssignAvatar()));
1801
//qa_clearAvatar = new IconAction("", tr("&Clear Avatar"), QKeySequence(), this);
1802
//connect(qa_clearAvatar, SIGNAL(activated()), SLOT(doClearAvatar()));
1741
1803
qa_chat = new IconAction("", "psi/chat", tr("Open &chat window"), QListView::CTRL+QListView::Key_C, this);
1742
1804
connect(qa_chat, SIGNAL(activated()), SLOT(doOpenChat()));
1743
1805
qa_hist = new IconAction("", "psi/history", tr("&History"), QListView::CTRL+QListView::Key_H, this);
1795
1857
QRect r(itemRect(i));
1796
1858
if(i->type() == ContactViewItem::Contact)
1797
1859
tip(r, i->u()->makeTip(true, false));
1860
else if(i->type() == ContactViewItem::Profile) {
1861
tip(r, i->contactProfile()->makeTip(true, false));
1799
1864
tip(r, i->text(0) + " " + i->groupInfo());
1942
void ContactView::setShowSelf(bool x)
1944
if (v_showSelf != x) {
1946
showSelf(v_showSelf);
1948
QPtrListIterator<ContactProfile> it(d->profiles);
1949
for(ContactProfile *cp; (cp = it.current()); ++it) {
1950
if (v_showSelf && ! cp->self()) {
1953
else if (!v_showSelf && cp->self() && cp->self()->u()->userResourceList().count() <= 1) {
1877
1961
void ContactView::setShowAgents(bool x)
1879
1963
bool oldstate = v_showAgents;
2037
2121
i->contactProfile()->scRename(i);
2125
//void ContactView::doAssignAvatar()
2127
// // FIXME: Should check the supported filetypes dynamically
2128
// QString file = QFileDialog::getOpenFileName("", tr("All files (*.png *.jpg *.gif)"), this, 0, tr("Choose an image"));
2129
// if (!file.isNull()) {
2130
// ContactViewItem *i = (ContactViewItem *)selectedItem();
2131
// i->contactProfile()->psiAccount()->avatarFactory()->importManualAvatar(i->u()->jid(),file);
2135
//void ContactView::doClearAvatar()
2137
// ContactViewItem *i = (ContactViewItem *)selectedItem();
2138
// i->contactProfile()->psiAccount()->avatarFactory()->removeManualAvatar(i->u()->jid());
2040
2141
void ContactView::doEnter()
2042
2143
ContactViewItem *i = (ContactViewItem *)selectedItem();
2109
2210
QDragObject *d = new QTextDrag(i->u()->jid().full(), this);
2110
d->setPixmap(IconsetFactory::icon("status/online"), QPoint(8,8));
2211
d->setPixmap(IconsetFactory::iconPixmap("status/online"), QPoint(8,8));
2387
2487
UserResourceList::ConstIterator it = d->u->priority();
2388
2488
if(it != d->u->userResourceList().end()) {
2389
2489
if(d->u->isSecure((*it).name())) {
2390
const QPixmap &pix = IconsetFactory::icon("psi/cryptoYes");
2490
const QPixmap &pix = IconsetFactory::iconPixmap("psi/cryptoYes");
2391
2491
int y = (height() - pix.height()) / 2;
2392
2492
p->drawPixmap(x, y, pix);
2416
2516
int x = fm.width(text(column)) + (pix ? pix->width() : 0) + 8;
2418
2518
if(d->type == Profile) {
2419
const QPixmap &pix = d->ssl ? IconsetFactory::icon("psi/cryptoYes") : IconsetFactory::icon("psi/cryptoNo");
2519
const QPixmap &pix = d->ssl ? IconsetFactory::iconPixmap("psi/cryptoYes") : IconsetFactory::iconPixmap("psi/cryptoNo");
2420
2520
int y = (height() - pix.height()) / 2;
2421
2521
p->drawPixmap(x, y, pix);
2920
// Files. Note that the QTextDrag test has to come after QUriDrag.
2921
if (d->type == Contact && QUriDrag::canDecode(m)) {
2923
if (QUriDrag::decodeLocalFiles(m,l) && !l.isEmpty())
2820
2927
if(!QTextDrag::canDecode(m))
2823
2931
if(!QTextDrag::decode(m, str))
2841
2949
if(!acceptDrop(i))
2845
if(QTextDrag::decode(i, text))
2846
d->cp->dragDrop(text, this);
2953
if (QUriDrag::canDecode(i)) {
2955
if (QUriDrag::decodeLocalFiles(i,l) && !l.isEmpty()) {
2956
d->cp->dragDropFiles(l, this);
2962
if(QTextDrag::canDecode(i)) {
2964
if(QTextDrag::decode(i, text))
2965
d->cp->dragDrop(text, this);
2849
2969
int ContactViewItem::rtti() const