IdDialog:

- optimized fill
- fixed utf8 issue
- added new strings to translation
- added load/save of ui state
- fixed splitter resize
- fixed sensitive state of menu items in context menu
Updated english translation

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@7791 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2014-12-24 14:43:06 +00:00
parent dff43792b6
commit e5f0e6fcc7
4 changed files with 355 additions and 344 deletions

View file

@ -25,27 +25,30 @@
#include <QMenu> #include <QMenu>
#include "IdDialog.h" #include "IdDialog.h"
#include "ui_IdDialog.h"
#include "IdEditDialog.h"
#include "gui/gxs/GxsIdDetails.h" #include "gui/gxs/GxsIdDetails.h"
#include "gui/gxs/GxsIdTreeWidgetItem.h" #include "gui/gxs/GxsIdTreeWidgetItem.h"
#include "gui/common/UIStateHelper.h" #include "gui/common/UIStateHelper.h"
#include "gui/chat/ChatDialog.h" #include "gui/chat/ChatDialog.h"
#include "gui/settings/rsharesettings.h"
#include <retroshare/rspeers.h> #include <retroshare/rspeers.h>
//#include <retroshare/rsidentity.h> //On header
#include "retroshare/rsgxsflags.h" #include "retroshare/rsgxsflags.h"
#include "retroshare/rsmsgs.h" #include "retroshare/rsmsgs.h"
#include <iostream> #include <iostream>
#include <algorithm>
/****** /******
* #define ID_DEBUG 1 * #define ID_DEBUG 1
*****/ *****/
// Data Requests. // Data Requests.
#define IDDIALOG_IDLIST 1 #define IDDIALOG_IDLIST 1
#define IDDIALOG_IDDETAILS 2 #define IDDIALOG_IDDETAILS 2
#define IDDIALOG_REPLIST 3 #define IDDIALOG_REPLIST 3
#define IDDIALOG_REFRESH 4 #define IDDIALOG_REFRESH 4
/**************************************************************** /****************************************************************
*/ */
@ -68,108 +71,111 @@
#define IMAGE_EDIT ":/images/edit_16.png" #define IMAGE_EDIT ":/images/edit_16.png"
/** Constructor */ /** Constructor */
IdDialog::IdDialog(QWidget *parent) IdDialog::IdDialog(QWidget *parent) :
: RsGxsUpdateBroadcastPage(rsIdentity, parent) RsGxsUpdateBroadcastPage(rsIdentity, parent),
ui(new Ui::IdDialog)
{ {
ui.setupUi(this); ui->setupUi(this);
mIdQueue = NULL; mIdQueue = NULL;
/* Setup UI helper */ /* Setup UI helper */
mStateHelper = new UIStateHelper(this); mStateHelper = new UIStateHelper(this);
mStateHelper->addWidget(IDDIALOG_IDLIST, ui.treeWidget_IdList); // mStateHelper->addWidget(IDDIALOG_IDLIST, ui->treeWidget_IdList);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDLIST, ui.treeWidget_IdList, false); mStateHelper->addLoadPlaceholder(IDDIALOG_IDLIST, ui->treeWidget_IdList, false);
mStateHelper->addClear(IDDIALOG_IDLIST, ui.treeWidget_IdList); mStateHelper->addClear(IDDIALOG_IDLIST, ui->treeWidget_IdList);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_Nickname); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_Nickname);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_KeyId); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_KeyId);
// mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_GpgHash); // mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_GpgId); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgId);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_GpgName); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.lineEdit_Type); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->lineEdit_Type);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.toolButton_Reputation); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->toolButton_Reputation);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.line_RatingOverall); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->line_RatingOverall);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.line_RatingImplicit); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->line_RatingImplicit);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.line_RatingOwn); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->line_RatingOwn);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.line_RatingPeers); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->line_RatingPeers);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repModButton); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repModButton);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_Accept); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_Accept);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_Ban); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_Ban);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_Negative); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_Negative);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_Positive); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_Positive);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_Custom); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_Custom);
mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui.repMod_spinBox); mStateHelper->addWidget(IDDIALOG_IDDETAILS, ui->repMod_spinBox);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_Nickname); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_Nickname);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_GpgName); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_KeyId); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_KeyId);
// mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_GpgHash); // mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_GpgId); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgId);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_Type); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_Type);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.lineEdit_GpgName); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.line_RatingOverall); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingOverall);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.line_RatingImplicit); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingImplicit);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.line_RatingOwn); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingOwn);
mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui.line_RatingPeers); mStateHelper->addLoadPlaceholder(IDDIALOG_IDDETAILS, ui->line_RatingPeers);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_Nickname); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_Nickname);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_KeyId); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_KeyId);
// mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_GpgHash); // mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgHash);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_GpgId); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgId);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_Type); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_Type);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.lineEdit_GpgName); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->lineEdit_GpgName);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.line_RatingOverall); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingOverall);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.line_RatingImplicit); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingImplicit);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.line_RatingOwn); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingOwn);
mStateHelper->addClear(IDDIALOG_IDDETAILS, ui.line_RatingPeers); mStateHelper->addClear(IDDIALOG_IDDETAILS, ui->line_RatingPeers);
//mStateHelper->addWidget(IDDIALOG_REPLIST, ui.treeWidget_RepList); //mStateHelper->addWidget(IDDIALOG_REPLIST, ui->treeWidget_RepList);
//mStateHelper->addLoadPlaceholder(IDDIALOG_REPLIST, ui.treeWidget_RepList); //mStateHelper->addLoadPlaceholder(IDDIALOG_REPLIST, ui->treeWidget_RepList);
//mStateHelper->addClear(IDDIALOG_REPLIST, ui.treeWidget_RepList); //mStateHelper->addClear(IDDIALOG_REPLIST, ui->treeWidget_RepList);
/* Connect signals */ /* Connect signals */
connect(ui.toolButton_NewId, SIGNAL(clicked()), this, SLOT(addIdentity())); connect(ui->toolButton_NewId, SIGNAL(clicked()), this, SLOT(addIdentity()));
connect(ui.todoPushButton, SIGNAL(clicked()), this, SLOT(todo())); connect(ui->todoPushButton, SIGNAL(clicked()), this, SLOT(todo()));
//connect(ui.toolButton_Delete, SIGNAL(clicked()), this, SLOT(removeIdentity())); //connect(ui->toolButton_Delete, SIGNAL(clicked()), this, SLOT(removeIdentity()));
//connect(ui.toolButton_EditId, SIGNAL(clicked()), this, SLOT(editIdentity())); //connect(ui->toolButton_EditId, SIGNAL(clicked()), this, SLOT(editIdentity()));
connect(ui.removeIdentity, SIGNAL(triggered()), this, SLOT(removeIdentity())); connect(ui->removeIdentity, SIGNAL(triggered()), this, SLOT(removeIdentity()));
connect(ui.editIdentity, SIGNAL(triggered()), this, SLOT(editIdentity())); connect(ui->editIdentity, SIGNAL(triggered()), this, SLOT(editIdentity()));
connect(ui.chatIdentity, SIGNAL(triggered()), this, SLOT(chatIdentity())); connect(ui->chatIdentity, SIGNAL(triggered()), this, SLOT(chatIdentity()));
connect(ui.treeWidget_IdList, SIGNAL(itemSelectionChanged()), this, SLOT(updateSelection())); connect(ui->treeWidget_IdList, SIGNAL(itemSelectionChanged()), this, SLOT(updateSelection()));
connect(ui.treeWidget_IdList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(IdListCustomPopupMenu(QPoint))); connect(ui->treeWidget_IdList, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(IdListCustomPopupMenu(QPoint)));
connect(ui.filterComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterComboBoxChanged())); connect(ui->filterComboBox, SIGNAL(currentIndexChanged(int)), this, SLOT(filterComboBoxChanged()));
connect(ui.filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString))); connect(ui->filterLineEdit, SIGNAL(textChanged(QString)), this, SLOT(filterChanged(QString)));
connect(ui.repModButton, SIGNAL(clicked()), this, SLOT(modifyReputation())); connect(ui->repModButton, SIGNAL(clicked()), this, SLOT(modifyReputation()));
ui.headerFrame->setHeaderImage(QPixmap(":/images/identity/identity_64.png")); ui->headerFrame->setHeaderImage(QPixmap(":/images/identity/identity_64.png"));
ui.headerFrame->setHeaderText(tr("Identities")); ui->headerFrame->setHeaderText(tr("Identities"));
/* Initialize splitter */
ui->splitter->setStretchFactor(0, 1);
ui->splitter->setStretchFactor(1, 0);
/* Add filter types */ /* Add filter types */
ui.filterComboBox->addItem(tr("All"), RSID_FILTER_ALL); ui->filterComboBox->addItem(tr("All"), RSID_FILTER_ALL);
ui.filterComboBox->addItem(tr("Owned by you"), RSID_FILTER_YOURSELF); ui->filterComboBox->addItem(tr("Owned by you"), RSID_FILTER_YOURSELF);
ui.filterComboBox->addItem(tr("Owned by neighbor nodes"), RSID_FILTER_FRIENDS); ui->filterComboBox->addItem(tr("Owned by neighbor nodes"), RSID_FILTER_FRIENDS);
ui.filterComboBox->addItem(tr("Owned by distant nodes"), RSID_FILTER_OTHERS); ui->filterComboBox->addItem(tr("Owned by distant nodes"), RSID_FILTER_OTHERS);
ui.filterComboBox->addItem(tr("Anonymous"), RSID_FILTER_PSEUDONYMS); ui->filterComboBox->addItem(tr("Anonymous"), RSID_FILTER_PSEUDONYMS);
ui.filterComboBox->setCurrentIndex(0); ui->filterComboBox->setCurrentIndex(0);
/* Add filter actions */ /* Add filter actions */
QTreeWidgetItem *headerItem = ui.treeWidget_IdList->headerItem(); QTreeWidgetItem *headerItem = ui->treeWidget_IdList->headerItem();
QString headerText = headerItem->text(RSID_COL_NICKNAME); QString headerText = headerItem->text(RSID_COL_NICKNAME);
ui.filterLineEdit->addFilter(QIcon(), headerText, RSID_COL_NICKNAME, QString("%1 %2").arg(tr("Search"), headerText)); ui->filterLineEdit->addFilter(QIcon(), headerText, RSID_COL_NICKNAME, QString("%1 %2").arg(tr("Search"), headerText));
headerText = headerItem->text(RSID_COL_KEYID); headerText = headerItem->text(RSID_COL_KEYID);
ui.filterLineEdit->addFilter(QIcon(), headerItem->text(RSID_COL_KEYID), RSID_COL_KEYID, QString("%1 %2").arg(tr("Search"), headerText)); ui->filterLineEdit->addFilter(QIcon(), headerItem->text(RSID_COL_KEYID), RSID_COL_KEYID, QString("%1 %2").arg(tr("Search"), headerText));
/* Set header resize modes and initial section sizes ID TreeView*/
/* Set header resize modes and initial section sizes ID TreeView*/ QHeaderView * _idheader = ui->treeWidget_IdList->header () ;
QHeaderView * _idheader = ui.treeWidget_IdList->header () ; _idheader->resizeSection ( RSID_COL_NICKNAME, 170 );
_idheader->resizeSection ( RSID_COL_NICKNAME, 170 );
/* Setup tree */ /* Setup tree */
ui.treeWidget_IdList->sortByColumn(RSID_COL_NICKNAME, Qt::AscendingOrder); ui->treeWidget_IdList->sortByColumn(RSID_COL_NICKNAME, Qt::AscendingOrder);
ui.treeWidget_IdList->setContextMenuPolicy(Qt::CustomContextMenu) ; ui->treeWidget_IdList->setContextMenuPolicy(Qt::CustomContextMenu) ;
mIdQueue = new TokenQueue(rsIdentity->getTokenService(), this); mIdQueue = new TokenQueue(rsIdentity->getTokenService(), this);
@ -177,10 +183,10 @@ IdDialog::IdDialog(QWidget *parent)
mStateHelper->setActive(IDDIALOG_REPLIST, false); mStateHelper->setActive(IDDIALOG_REPLIST, false);
// Hiding RepList until that part is finished. // Hiding RepList until that part is finished.
//ui.treeWidget_RepList->setVisible(false); //ui->treeWidget_RepList->setVisible(false);
ui.toolButton_Reputation->setVisible(false); ui->toolButton_Reputation->setVisible(false);
#ifndef UNFINISHED #ifndef UNFINISHED
ui.todoPushButton->hide() ; ui->todoPushButton->hide() ;
#endif #endif
QString hlp_str = tr( QString hlp_str = tr(
@ -200,22 +206,60 @@ IdDialog::IdDialog(QWidget *parent)
</p> \ </p> \
") ; ") ;
registerHelpButton(ui.helpButton, hlp_str) ; registerHelpButton(ui->helpButton, hlp_str) ;
// load settings
processSettings(true);
} }
IdDialog::~IdDialog() IdDialog::~IdDialog()
{ {
// save settings
processSettings(false);
delete(ui);
delete(mIdQueue); delete(mIdQueue);
} }
void IdDialog::todo() void IdDialog::todo()
{ {
QMessageBox::information(this, "Todo", QMessageBox::information(this, "Todo",
"<b>Open points:</b><ul>" "<b>Open points:</b><ul>"
// "<li>Delete ID" "<li>Reputation"
"<li>Reputation" "</ul>");
"<li>Load/save settings" }
"</ul>");
void IdDialog::processSettings(bool load)
{
QHeaderView *header = ui->treeWidget_IdList->header();
Settings->beginGroup("IdDialog");
if (load) {
// load settings
// filterColumn
ui->filterLineEdit->setCurrentFilter(Settings->value("filterColumn", RSID_COL_NICKNAME).toInt());
// state of thread tree
header->restoreState(Settings->value("IdList").toByteArray());
// state of splitter
ui->splitter->restoreState(Settings->value("splitter").toByteArray());
} else {
// save settings
// filterColumn
Settings->setValue("filterColumn", ui->filterLineEdit->currentFilter());
// state of thread tree
Settings->setValue("IdList", header->saveState());
// state of splitter
Settings->setValue("splitter", ui->splitter->saveState());
}
Settings->endGroup();
} }
void IdDialog::filterComboBoxChanged() void IdDialog::filterComboBoxChanged()
@ -230,25 +274,30 @@ void IdDialog::filterChanged(const QString& /*text*/)
void IdDialog::updateSelection() void IdDialog::updateSelection()
{ {
QTreeWidgetItem *item = ui.treeWidget_IdList->currentItem(); QTreeWidgetItem *item = ui->treeWidget_IdList->currentItem();
RsGxsGroupId id; RsGxsGroupId id;
if (item) if (item) {
{ id = RsGxsGroupId(item->text(RSID_COL_KEYID).toStdString());
id = RsGxsGroupId(item->text(RSID_COL_KEYID).toStdString());
} }
requestIdDetails(id); if (id != mId) {
mId = id;
requestIdDetails();
requestRepList();
}
} }
void IdDialog::requestIdList() void IdDialog::requestIdList()
{ {
//Disable by default, will be enable by insertIdDetails()
ui->removeIdentity->setEnabled(false);
ui->editIdentity->setEnabled(false);
if (!mIdQueue) if (!mIdQueue)
return; return;
mStateHelper->setLoading(IDDIALOG_IDLIST, true); mStateHelper->setLoading(IDDIALOG_IDLIST, true);
mStateHelper->setLoading(IDDIALOG_IDDETAILS, true);
mStateHelper->setLoading(IDDIALOG_REPLIST, true);
mIdQueue->cancelActiveRequestTokens(IDDIALOG_IDLIST); mIdQueue->cancelActiveRequestTokens(IDDIALOG_IDLIST);
@ -313,27 +362,20 @@ bool IdDialog::fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item,
item = new QTreeWidgetItem(); item = new QTreeWidgetItem();
} }
item->setText(RSID_COL_NICKNAME, QString::fromUtf8(data.mMeta.mGroupName.c_str())); item->setText(RSID_COL_NICKNAME, QString::fromUtf8(data.mMeta.mGroupName.c_str()));
item->setText(RSID_COL_KEYID, QString::fromStdString(data.mMeta.mGroupId.toStdString())); item->setText(RSID_COL_KEYID, QString::fromStdString(data.mMeta.mGroupId.toStdString()));
QFont font("Courier New",10,50,false);
font.setStyleHint(QFont::TypeWriter,QFont::PreferMatch);
item->setFont(RSID_COL_KEYID,font) ;
if(isOwnId) if(isOwnId)
{ {
QFont font = item->font(RSID_COL_NICKNAME) ; QFont font = item->font(RSID_COL_NICKNAME) ;
font.setWeight(QFont::Bold) ; font.setBold(true) ;
item->setFont(RSID_COL_NICKNAME,font) ; item->setFont(RSID_COL_NICKNAME,font) ;
item->setFont(RSID_COL_IDTYPE,font) ; item->setFont(RSID_COL_IDTYPE,font) ;
item->setFont(RSID_COL_KEYID,font) ;
font = item->font(RSID_COL_KEYID) ;
font.setWeight(QFont::Bold) ;
item->setFont(RSID_COL_KEYID,font) ;
item->setToolTip(RSID_COL_NICKNAME,tr("This identity is owned by you")) ;
item->setToolTip(RSID_COL_KEYID ,tr("This identity is owned by you")) ;
item->setToolTip(RSID_COL_IDTYPE ,tr("This identity is owned by you")) ;
QString tooltip = tr("This identity is owned by you");
item->setToolTip(RSID_COL_NICKNAME, tooltip) ;
item->setToolTip(RSID_COL_KEYID, tooltip) ;
item->setToolTip(RSID_COL_IDTYPE, tooltip) ;
} }
QPixmap pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(data.mMeta.mGroupId))) ; QPixmap pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(data.mMeta.mGroupId))) ;
@ -370,7 +412,7 @@ void IdDialog::insertIdList(uint32_t token)
{ {
mStateHelper->setLoading(IDDIALOG_IDLIST, false); mStateHelper->setLoading(IDDIALOG_IDLIST, false);
int accept = ui.filterComboBox->itemData(ui.filterComboBox->currentIndex()).toInt(); int accept = ui->filterComboBox->itemData(ui->filterComboBox->currentIndex()).toInt();
RsGxsIdGroup data; RsGxsIdGroup data;
std::vector<RsGxsIdGroup> datavector; std::vector<RsGxsIdGroup> datavector;
@ -382,14 +424,8 @@ void IdDialog::insertIdList(uint32_t token)
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
mStateHelper->setLoading(IDDIALOG_IDDETAILS, false);
mStateHelper->setLoading(IDDIALOG_REPLIST, false);
mStateHelper->setActive(IDDIALOG_IDLIST, false); mStateHelper->setActive(IDDIALOG_IDLIST, false);
mStateHelper->setActive(IDDIALOG_IDDETAILS, false);
mStateHelper->setActive(IDDIALOG_REPLIST, false);
mStateHelper->clear(IDDIALOG_IDLIST); mStateHelper->clear(IDDIALOG_IDLIST);
mStateHelper->clear(IDDIALOG_IDDETAILS);
mStateHelper->clear(IDDIALOG_REPLIST);
return; return;
} }
@ -399,14 +435,14 @@ void IdDialog::insertIdList(uint32_t token)
RsPgpId ownPgpId = rsPeers->getGPGOwnId(); RsPgpId ownPgpId = rsPeers->getGPGOwnId();
/* Update existing and remove not existing items */ /* Update existing and remove not existing items */
QTreeWidgetItemIterator itemIterator(ui.treeWidget_IdList); QTreeWidgetItemIterator itemIterator(ui->treeWidget_IdList);
QTreeWidgetItem *item = NULL; QTreeWidgetItem *item = NULL;
while ((item = *itemIterator) != NULL) { while ((item = *itemIterator) != NULL) {
++itemIterator; ++itemIterator;
for (vit = datavector.begin(); vit != datavector.end(); ++vit) for (vit = datavector.begin(); vit != datavector.end(); ++vit)
{ {
if (vit->mMeta.mGroupId == RsGxsGroupId(item->text(RSID_COL_KEYID).toStdString())) if (vit->mMeta.mGroupId == RsGxsGroupId(item->text(RSID_COL_KEYID).toStdString()))
{ {
break; break;
} }
@ -431,41 +467,36 @@ void IdDialog::insertIdList(uint32_t token)
item = NULL; item = NULL;
if (fillIdListItem(*vit, item, ownPgpId, accept)) if (fillIdListItem(*vit, item, ownPgpId, accept))
{ {
ui.treeWidget_IdList->addTopLevelItem(item); ui->treeWidget_IdList->addTopLevelItem(item);
} }
} }
filterIds(); filterIds();
// fix up buttons.
updateSelection(); updateSelection();
} }
void IdDialog::requestIdDetails(RsGxsGroupId &id) void IdDialog::requestIdDetails()
{ {
mIdQueue->cancelActiveRequestTokens(IDDIALOG_IDDETAILS); mIdQueue->cancelActiveRequestTokens(IDDIALOG_IDDETAILS);
if (id.isNull()) if (mId.isNull())
{ {
mStateHelper->setActive(IDDIALOG_IDDETAILS, false); mStateHelper->setActive(IDDIALOG_IDDETAILS, false);
mStateHelper->setActive(IDDIALOG_REPLIST, false);
mStateHelper->setLoading(IDDIALOG_IDDETAILS, false); mStateHelper->setLoading(IDDIALOG_IDDETAILS, false);
mStateHelper->setLoading(IDDIALOG_REPLIST, false);
mStateHelper->clear(IDDIALOG_IDDETAILS); mStateHelper->clear(IDDIALOG_IDDETAILS);
mStateHelper->clear(IDDIALOG_REPLIST);
return; return;
} }
mStateHelper->setLoading(IDDIALOG_IDDETAILS, true); mStateHelper->setLoading(IDDIALOG_IDDETAILS, true);
mStateHelper->setLoading(IDDIALOG_REPLIST, true);
RsTokReqOptions opts; RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA; opts.mReqType = GXS_REQUEST_TYPE_GROUP_DATA;
uint32_t token; uint32_t token;
std::list<RsGxsGroupId> groupIds; std::list<RsGxsGroupId> groupIds;
groupIds.push_back(id); groupIds.push_back(mId);
mIdQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds, IDDIALOG_IDDETAILS); mIdQueue->requestGroupInfo(token, RS_TOKREQ_ANSTYPE_DATA, opts, groupIds, IDDIALOG_IDDETAILS);
} }
@ -480,12 +511,9 @@ void IdDialog::insertIdDetails(uint32_t token)
if (!rsIdentity->getGroupData(token, datavector)) if (!rsIdentity->getGroupData(token, datavector))
{ {
mStateHelper->setActive(IDDIALOG_IDDETAILS, false); mStateHelper->setActive(IDDIALOG_IDDETAILS, false);
mStateHelper->setActive(IDDIALOG_REPLIST, false);
mStateHelper->setLoading(IDDIALOG_REPLIST, false);
mStateHelper->clear(IDDIALOG_IDDETAILS);
mStateHelper->clear(IDDIALOG_REPLIST); mStateHelper->clear(IDDIALOG_REPLIST);
ui.lineEdit_KeyId->setText("ERROR GETTING KEY!"); ui->lineEdit_KeyId->setText("ERROR GETTING KEY!");
return; return;
} }
@ -497,12 +525,9 @@ void IdDialog::insertIdDetails(uint32_t token)
#endif #endif
mStateHelper->setActive(IDDIALOG_IDDETAILS, false); mStateHelper->setActive(IDDIALOG_IDDETAILS, false);
mStateHelper->setActive(IDDIALOG_REPLIST, false);
mStateHelper->setLoading(IDDIALOG_REPLIST, false);
mStateHelper->clear(IDDIALOG_IDDETAILS); mStateHelper->clear(IDDIALOG_IDDETAILS);
mStateHelper->clear(IDDIALOG_REPLIST);
ui.lineEdit_KeyId->setText("INVALID DV SIZE"); ui->lineEdit_KeyId->setText("INVALID DV SIZE");
return; return;
} }
@ -514,75 +539,75 @@ void IdDialog::insertIdDetails(uint32_t token)
/* get GPG Details from rsPeers */ /* get GPG Details from rsPeers */
RsPgpId ownPgpId = rsPeers->getGPGOwnId(); RsPgpId ownPgpId = rsPeers->getGPGOwnId();
ui.lineEdit_Nickname->setText(QString::fromUtf8(data.mMeta.mGroupName.c_str())); ui->lineEdit_Nickname->setText(QString::fromUtf8(data.mMeta.mGroupName.c_str()));
ui.lineEdit_KeyId->setText(QString::fromStdString(data.mMeta.mGroupId.toStdString())); ui->lineEdit_KeyId->setText(QString::fromStdString(data.mMeta.mGroupId.toStdString()));
//ui.lineEdit_GpgHash->setText(QString::fromStdString(data.mPgpIdHash.toStdString())); //ui->lineEdit_GpgHash->setText(QString::fromStdString(data.mPgpIdHash.toStdString()));
ui.lineEdit_GpgId->setText(QString::fromStdString(data.mPgpId.toStdString())); ui->lineEdit_GpgId->setText(QString::fromStdString(data.mPgpId.toStdString()));
ui.headerFrame->setHeaderText(QString::fromUtf8(data.mMeta.mGroupName.c_str())); ui->headerFrame->setHeaderText(QString::fromUtf8(data.mMeta.mGroupName.c_str()));
QPixmap pix = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(data.mMeta.mGroupId))) ; QPixmap pix = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(RsGxsId(data.mMeta.mGroupId))) ;
#ifdef ID_DEBUG #ifdef ID_DEBUG
std::cerr << "Setting header frame image : " << pix.width() << " x " << pix.height() << std::endl; std::cerr << "Setting header frame image : " << pix.width() << " x " << pix.height() << std::endl;
#endif #endif
ui.headerFrame->setHeaderImage(pix); ui->headerFrame->setHeaderImage(pix);
if (data.mPgpKnown) if (data.mPgpKnown)
{ {
RsPeerDetails details; RsPeerDetails details;
rsPeers->getGPGDetails(data.mPgpId, details); rsPeers->getGPGDetails(data.mPgpId, details);
ui.lineEdit_GpgName->setText(QString::fromUtf8(details.name.c_str())); ui->lineEdit_GpgName->setText(QString::fromUtf8(details.name.c_str()));
} }
else else
{ {
if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
{ {
ui.lineEdit_GpgName->setText(tr("Unknown real name")); ui->lineEdit_GpgName->setText(tr("Unknown real name"));
} }
else else
{ {
ui.lineEdit_GpgName->setText(tr("Anonymous Id")); ui->lineEdit_GpgName->setText(tr("Anonymous Id"));
} }
} }
if(data.mPgpId.isNull()) if(data.mPgpId.isNull())
{ {
ui.lineEdit_GpgId->hide() ; ui->lineEdit_GpgId->hide() ;
ui.lineEdit_GpgName->hide() ; ui->lineEdit_GpgName->hide() ;
ui.PgpId_LB->hide() ; ui->PgpId_LB->hide() ;
ui.PgpName_LB->hide() ; ui->PgpName_LB->hide() ;
} }
else else
{ {
ui.lineEdit_GpgId->show() ; ui->lineEdit_GpgId->show() ;
ui.lineEdit_GpgName->show() ; ui->lineEdit_GpgName->show() ;
ui.PgpId_LB->show() ; ui->PgpId_LB->show() ;
ui.PgpName_LB->show() ; ui->PgpName_LB->show() ;
} }
bool isOwnId = (data.mPgpKnown && (data.mPgpId == ownPgpId)) || (data.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN); bool isOwnId = (data.mPgpKnown && (data.mPgpId == ownPgpId)) || (data.mMeta.mSubscribeFlags & GXS_SERV::GROUP_SUBSCRIBE_ADMIN);
if(isOwnId) if(isOwnId)
if (data.mPgpKnown) if (data.mPgpKnown)
ui.lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ; ui->lineEdit_Type->setText(tr("Identity owned by you, linked to your Retroshare node")) ;
else else
ui.lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ; ui->lineEdit_Type->setText(tr("Anonymous identity, owned by you")) ;
else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
{ {
if (data.mPgpKnown) if (data.mPgpKnown)
if (rsPeers->isGPGAccepted(data.mPgpId)) if (rsPeers->isGPGAccepted(data.mPgpId))
ui.lineEdit_Type->setText(tr("Owned by a friend Retroshare node")) ; ui->lineEdit_Type->setText(tr("Owned by a friend Retroshare node")) ;
else else
ui.lineEdit_Type->setText(tr("Owned by 2-hops Retroshare node")) ; ui->lineEdit_Type->setText(tr("Owned by 2-hops Retroshare node")) ;
else else
ui.lineEdit_Type->setText(tr("Owned by unknown Retroshare node")) ; ui->lineEdit_Type->setText(tr("Owned by unknown Retroshare node")) ;
} }
else else
ui.lineEdit_Type->setText(tr("Anonymous identity")) ; ui->lineEdit_Type->setText(tr("Anonymous identity")) ;
// if (isOwnId) // if (isOwnId)
// { // {
// ui.radioButton_IdYourself->setChecked(true); // ui->radioButton_IdYourself->setChecked(true);
// } // }
// else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) // else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
// { // {
@ -590,79 +615,75 @@ void IdDialog::insertIdDetails(uint32_t token)
// { // {
// if (rsPeers->isGPGAccepted(data.mPgpId)) // if (rsPeers->isGPGAccepted(data.mPgpId))
// { // {
// ui.radioButton_IdFriend->setChecked(true); // ui->radioButton_IdFriend->setChecked(true);
// } // }
// else // else
// { // {
// ui.radioButton_IdFOF->setChecked(true); // ui->radioButton_IdFOF->setChecked(true);
// } // }
// } // }
// else // else
// { // {
// ui.radioButton_IdOther->setChecked(true); // ui->radioButton_IdOther->setChecked(true);
// } // }
// } // }
// else // else
// { // {
// ui.radioButton_IdPseudo->setChecked(true); // ui->radioButton_IdPseudo->setChecked(true);
// } // }
if (isOwnId) if (isOwnId)
{ {
mStateHelper->setWidgetEnabled(ui.toolButton_Reputation, false); mStateHelper->setWidgetEnabled(ui->toolButton_Reputation, false);
ui.editIdentity->setEnabled(true); ui->editIdentity->setEnabled(true);
ui.removeIdentity->setEnabled(true); ui->removeIdentity->setEnabled(true);
ui.chatIdentity->setEnabled(false); ui->chatIdentity->setEnabled(false);
} }
else else
{ {
// No Reputation yet! // No Reputation yet!
mStateHelper->setWidgetEnabled(ui.toolButton_Reputation, /*true*/ false); mStateHelper->setWidgetEnabled(ui->toolButton_Reputation, /*true*/ false);
ui.editIdentity->setEnabled(false); ui->editIdentity->setEnabled(false);
ui.removeIdentity->setEnabled(false); ui->removeIdentity->setEnabled(false);
ui.chatIdentity->setEnabled(true); ui->chatIdentity->setEnabled(true);
} }
/* now fill in the reputation information */ /* now fill in the reputation information */
ui.line_RatingOverall->setText("Overall Rating TODO"); ui->line_RatingOverall->setText("Overall Rating TODO");
ui.line_RatingOwn->setText("Own Rating TODO"); ui->line_RatingOwn->setText("Own Rating TODO");
if (data.mPgpKnown) if (data.mPgpKnown)
{ {
ui.line_RatingImplicit->setText("+50 Known PGP"); ui->line_RatingImplicit->setText("+50 Known PGP");
} }
else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID) else if (data.mMeta.mGroupFlags & RSGXSID_GROUPFLAG_REALID)
{ {
ui.line_RatingImplicit->setText("+10 UnKnown PGP"); ui->line_RatingImplicit->setText("+10 UnKnown PGP");
} }
else else
{ {
ui.line_RatingImplicit->setText("+5 Anon Id"); ui->line_RatingImplicit->setText("+5 Anon Id");
} }
{ {
QString rating = QString::number(data.mReputation.mOverallScore); QString rating = QString::number(data.mReputation.mOverallScore);
ui.line_RatingOverall->setText(rating); ui->line_RatingOverall->setText(rating);
} }
{ {
QString rating = QString::number(data.mReputation.mIdScore); QString rating = QString::number(data.mReputation.mIdScore);
ui.line_RatingImplicit->setText(rating); ui->line_RatingImplicit->setText(rating);
} }
{ {
QString rating = QString::number(data.mReputation.mOwnOpinion); QString rating = QString::number(data.mReputation.mOwnOpinion);
ui.line_RatingOwn->setText(rating); ui->line_RatingOwn->setText(rating);
} }
{ {
QString rating = QString::number(data.mReputation.mPeerOpinion); QString rating = QString::number(data.mReputation.mPeerOpinion);
ui.line_RatingPeers->setText(rating); ui->line_RatingPeers->setText(rating);
} }
/* request network ratings */
// Removing this for the moment.
// requestRepList(data.mMeta.mGroupId);
} }
void IdDialog::modifyReputation() void IdDialog::modifyReputation()
@ -672,28 +693,28 @@ void IdDialog::modifyReputation()
std::cerr << std::endl; std::cerr << std::endl;
#endif #endif
RsGxsId id(ui.lineEdit_KeyId->text().toStdString()); RsGxsId id(ui->lineEdit_KeyId->text().toStdString());
int mod = 0; int mod = 0;
if (ui.repMod_Accept->isChecked()) if (ui->repMod_Accept->isChecked())
{ {
mod += 100; mod += 100;
} }
else if (ui.repMod_Positive->isChecked()) else if (ui->repMod_Positive->isChecked())
{ {
mod += 10; mod += 10;
} }
else if (ui.repMod_Negative->isChecked()) else if (ui->repMod_Negative->isChecked())
{ {
mod += -10; mod += -10;
} }
else if (ui.repMod_Ban->isChecked()) else if (ui->repMod_Ban->isChecked())
{ {
mod += -100; mod += -100;
} }
else if (ui.repMod_Custom->isChecked()) else if (ui->repMod_Custom->isChecked())
{ {
mod += ui.repMod_spinBox->value(); mod += ui->repMod_spinBox->value();
} }
else else
{ {
@ -727,10 +748,29 @@ void IdDialog::modifyReputation()
return; return;
} }
void IdDialog::updateDisplay(bool /*complete*/) void IdDialog::updateDisplay(bool complete)
{ {
/* Update identity list */ /* Update identity list */
requestIdList();
if (complete) {
/* Fill complete */
requestIdList();
requestIdDetails();
requestRepList();
return;
}
std::list<RsGxsGroupId> grpIds;
getAllGrpIds(grpIds);
if (!getGrpIds().empty()) {
requestIdList();
if (!mId.isNull() && std::find(grpIds.begin(), grpIds.end(), mId) != grpIds.end()) {
requestIdDetails();
requestRepList();
}
}
} }
void IdDialog::addIdentity() void IdDialog::addIdentity()
@ -742,7 +782,7 @@ void IdDialog::addIdentity()
void IdDialog::removeIdentity() void IdDialog::removeIdentity()
{ {
QTreeWidgetItem *item = ui.treeWidget_IdList->currentItem(); QTreeWidgetItem *item = ui->treeWidget_IdList->currentItem();
if (!item) if (!item)
{ {
#ifdef ID_DEBUG #ifdef ID_DEBUG
@ -751,30 +791,21 @@ void IdDialog::removeIdentity()
#endif #endif
return; return;
} }
QString queryWrn;
queryWrn.clear();
queryWrn.append(tr("Do you really want to delete this Identity ?"));
if ((QMessageBox::question(this, tr("Really delete? "),queryWrn,QMessageBox::Yes|QMessageBox::No, QMessageBox::Yes))== QMessageBox::Yes)
{
std::string keyId = item->text(RSID_COL_KEYID).toStdString();
uint32_t dummyToken = 0;
RsGxsIdGroup group;
group.mMeta.mGroupId=RsGxsGroupId(keyId);
rsIdentity->deleteIdentity(dummyToken, group);
}
else
return;
if ((QMessageBox::question(this, tr("Really delete? "), tr("Do you really want to delete this Identity?"), QMessageBox::Yes|QMessageBox::No, QMessageBox::No))== QMessageBox::Yes)
{
std::string keyId = item->text(RSID_COL_KEYID).toStdString();
uint32_t dummyToken = 0;
RsGxsIdGroup group;
group.mMeta.mGroupId=RsGxsGroupId(keyId);
rsIdentity->deleteIdentity(dummyToken, group);
}
} }
void IdDialog::editIdentity() void IdDialog::editIdentity()
{ {
QTreeWidgetItem *item = ui.treeWidget_IdList->currentItem(); QTreeWidgetItem *item = ui->treeWidget_IdList->currentItem();
if (!item) if (!item)
{ {
#ifdef ID_DEBUG #ifdef ID_DEBUG
@ -793,20 +824,23 @@ void IdDialog::editIdentity()
void IdDialog::filterIds() void IdDialog::filterIds()
{ {
int filterColumn = ui.filterLineEdit->currentFilter(); int filterColumn = ui->filterLineEdit->currentFilter();
QString text = ui.filterLineEdit->text(); QString text = ui->filterLineEdit->text();
ui.treeWidget_IdList->filterItems(filterColumn, text); ui->treeWidget_IdList->filterItems(filterColumn, text);
} }
void IdDialog::requestRepList(const RsGxsGroupId &aboutId) void IdDialog::requestRepList()
{ {
// Removing this for the moment.
return;
mStateHelper->setLoading(IDDIALOG_REPLIST, true); mStateHelper->setLoading(IDDIALOG_REPLIST, true);
mIdQueue->cancelActiveRequestTokens(IDDIALOG_REPLIST); mIdQueue->cancelActiveRequestTokens(IDDIALOG_REPLIST);
std::list<RsGxsGroupId> groupIds; std::list<RsGxsGroupId> groupIds;
groupIds.push_back(aboutId); groupIds.push_back(mId);
RsTokReqOptions opts; RsTokReqOptions opts;
opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA; opts.mReqType = GXS_REQUEST_TYPE_MSG_DATA;
@ -844,7 +878,7 @@ void IdDialog::insertRepList(uint32_t token)
/* insert 4 columns */ /* insert 4 columns */
/* friend name */ /* friend name */
item->setId(op.mMeta.mAuthorId, RSIDREP_COL_NAME); item->setId(op.mMeta.mAuthorId, RSIDREP_COL_NAME);
/* score */ /* score */
item->setText(RSIDREP_COL_OPINION, QString::number(op.getOpinion())); item->setText(RSIDREP_COL_OPINION, QString::number(op.getOpinion()));
@ -855,9 +889,10 @@ void IdDialog::insertRepList(uint32_t token)
/* local reputation */ /* local reputation */
item->setText(RSIDREP_COL_REPUTATION, QString::number(op.getReputation())); item->setText(RSIDREP_COL_REPUTATION, QString::number(op.getReputation()));
ui.treeWidget_RepList->addTopLevelItem(item); ui->treeWidget_RepList->addTopLevelItem(item);
} }
#endif #endif
mStateHelper->setActive(IDDIALOG_REPLIST, true); mStateHelper->setActive(IDDIALOG_REPLIST, true);
} }
@ -876,14 +911,15 @@ void IdDialog::loadRequest(const TokenQueue * /*queue*/, const TokenRequest &req
case IDDIALOG_IDDETAILS: case IDDIALOG_IDDETAILS:
insertIdDetails(req.mToken); insertIdDetails(req.mToken);
break; break;
case IDDIALOG_REPLIST: case IDDIALOG_REPLIST:
insertRepList(req.mToken); insertRepList(req.mToken);
break; break;
case IDDIALOG_REFRESH: case IDDIALOG_REFRESH:
updateDisplay(true); // replaced by RsGxsUpdateBroadcastPage
// updateDisplay(true);
break; break;
default: default:
std::cerr << "IdDialog::loadRequest() ERROR"; std::cerr << "IdDialog::loadRequest() ERROR";
@ -894,49 +930,45 @@ void IdDialog::loadRequest(const TokenQueue * /*queue*/, const TokenRequest &req
void IdDialog::IdListCustomPopupMenu( QPoint ) void IdDialog::IdListCustomPopupMenu( QPoint )
{ {
//Disable by default, will be enable by insertIdDetails() QMenu contextMnu( this );
ui.removeIdentity->setEnabled(false);
ui.editIdentity->setEnabled(false);
QMenu contextMnu( this ); contextMnu.addAction(ui->editIdentity);
contextMnu.addAction(ui->removeIdentity);
contextMnu.addAction(ui.editIdentity); std::list<RsGxsId> own_identities ;
contextMnu.addAction(ui.removeIdentity); rsIdentity->getOwnIds(own_identities) ;
std::list<RsGxsId> own_identities ; if(own_identities.size() <= 1)
rsIdentity->getOwnIds(own_identities) ; {
QAction *action = contextMnu.addAction(QIcon(), tr("Chat with this peer"), this, SLOT(chatIdentity()));
if(own_identities.size() <= 1) if(own_identities.empty())
{ action->setEnabled(false) ;
QAction * action = contextMnu.addAction(QIcon(),"Chat with this peer",this,SLOT(chatIdentity())); else
action->setData(QString::fromStdString((own_identities.front()).toStdString())) ;
}
else
{
QMenu *mnu = contextMnu.addMenu(tr("Chat with this peer as...")) ;
if(own_identities.empty()) for(std::list<RsGxsId>::const_iterator it=own_identities.begin();it!=own_identities.end();++it)
action->setEnabled(false) ; {
else RsIdentityDetails idd ;
action->setData(QString::fromStdString((own_identities.front()).toStdString())) ; rsIdentity->getIdDetails(*it,idd) ;
}
else
{
QMenu *mnu = contextMnu.addMenu("Chat with this peer as...") ;
for(std::list<RsGxsId>::const_iterator it=own_identities.begin();it!=own_identities.end();++it) QPixmap pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(*it)) ;
{
RsIdentityDetails idd ;
rsIdentity->getIdDetails(*it,idd) ;
QPixmap pixmap = QPixmap::fromImage(GxsIdDetails::makeDefaultIcon(*it)) ; QAction *action = mnu->addAction(QIcon(pixmap), QString("%1 (%2)").arg(QString::fromUtf8(idd.mNickname.c_str()), QString::fromStdString((*it).toStdString())), this, SLOT(chatIdentity()));
action->setData(QString::fromStdString((*it).toStdString())) ;
}
}
QAction * action = mnu->addAction(QIcon(pixmap),QString::fromStdString(idd.mNickname) + " (" + QString::fromStdString((*it).toStdString())+ ")",this,SLOT(chatIdentity())); contextMnu.exec(QCursor::pos());
action->setData(QString::fromStdString((*it).toStdString())) ;
}
}
contextMnu.exec(QCursor::pos());
} }
void IdDialog::chatIdentity() void IdDialog::chatIdentity()
{ {
QTreeWidgetItem *item = ui.treeWidget_IdList->currentItem(); QTreeWidgetItem *item = ui->treeWidget_IdList->currentItem();
if (!item) if (!item)
{ {
std::cerr << "IdDialog::editIdentity() Invalid item"; std::cerr << "IdDialog::editIdentity() Invalid item";
@ -944,17 +976,15 @@ void IdDialog::chatIdentity()
return; return;
} }
std::string keyId = item->text(RSID_COL_KEYID).toStdString(); std::string keyId = item->text(RSID_COL_KEYID).toStdString();
QAction *action = qobject_cast<QAction *>(QObject::sender()); QAction *action = qobject_cast<QAction *>(QObject::sender());
if (!action) if (!action)
return ; return ;
RsGxsId from_gxs_id(action->data().toString().toStdString()); RsGxsId from_gxs_id(action->data().toString().toStdString());
uint32_t error_code ; uint32_t error_code ;
if(!rsMsgs->initiateDistantChatConnexion(RsGxsId(keyId), from_gxs_id, error_code)) if(!rsMsgs->initiateDistantChatConnexion(RsGxsId(keyId), from_gxs_id, error_code))
QMessageBox::information(NULL,"Distant chat cannot work","Distant chat refused with this peer. Error code: "+QString::number(error_code)) ; QMessageBox::information(NULL, tr("Distant chat cannot work"), QString("%1 %2: %3").arg(tr("Distant chat refused with this peer.")).arg(tr("Error code")).arg(error_code)) ;
} }

View file

@ -25,18 +25,19 @@
#define IDENTITYDIALOG_H #define IDENTITYDIALOG_H
#include "gui/gxs/RsGxsUpdateBroadcastPage.h" #include "gui/gxs/RsGxsUpdateBroadcastPage.h"
#include "ui_IdDialog.h"
#include <retroshare/rsidentity.h> #include <retroshare/rsidentity.h>
#include <map>
#include "gui/Identity/IdEditDialog.h"
#include "util/TokenQueue.h" #include "util/TokenQueue.h"
#define IMAGE_IDDIALOG ":/images/identity/identities_32.png" #define IMAGE_IDDIALOG ":/images/identity/identities_32.png"
namespace Ui {
class IdDialog;
}
class UIStateHelper; class UIStateHelper;
class QTreeWidgetItem;
class IdDialog : public RsGxsUpdateBroadcastPage, public TokenResponse class IdDialog : public RsGxsUpdateBroadcastPage, public TokenResponse
{ {
@ -68,21 +69,23 @@ private slots:
void todo(); void todo();
void modifyReputation(); void modifyReputation();
/** Create the context popup menu and it's submenus */ /** Create the context popup menu and it's submenus */
void IdListCustomPopupMenu( QPoint point ); void IdListCustomPopupMenu( QPoint point );
private: private:
void requestIdDetails(RsGxsGroupId &id); void processSettings(bool load);
void requestIdDetails();
void insertIdDetails(uint32_t token); void insertIdDetails(uint32_t token);
void requestIdList(); void requestIdList();
void requestIdData(std::list<RsGxsGroupId> &ids); void requestIdData(std::list<RsGxsGroupId> &ids);
bool fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item, const RsPgpId &ownPgpId, int accept); bool fillIdListItem(const RsGxsIdGroup& data, QTreeWidgetItem *&item, const RsPgpId &ownPgpId, int accept);
void insertIdList(uint32_t token); void insertIdList(uint32_t token);
void filterIds(); void filterIds();
void requestRepList(const RsGxsGroupId &aboutId); void requestRepList();
void insertRepList(uint32_t token); void insertRepList(uint32_t token);
void requestIdEdit(std::string &id); void requestIdEdit(std::string &id);
@ -92,8 +95,10 @@ private:
TokenQueue *mIdQueue; TokenQueue *mIdQueue;
UIStateHelper *mStateHelper; UIStateHelper *mStateHelper;
RsGxsGroupId mId;
/* UI - from Designer */ /* UI - from Designer */
Ui::IdDialog ui; Ui::IdDialog *ui;
}; };
#endif #endif

View file

@ -24,7 +24,7 @@
#include "GxsIdChooser.h" #include "GxsIdChooser.h"
#include "GxsIdDetails.h" #include "GxsIdDetails.h"
#include "RsGxsUpdateBroadcastBase.h" #include "RsGxsUpdateBroadcastBase.h"
#include "gui/Identity/IdDialog.h" #include "gui/Identity/IdEditDialog.h"
#include <QSortFilterProxyModel> #include <QSortFilterProxyModel>
#include <algorithm> #include <algorithm>

View file

@ -2860,14 +2860,6 @@ p, li { white-space: pre-wrap; }
<source>Signed by known nodes</source> <source>Signed by known nodes</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Edit Circle</source> <source>Edit Circle</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -3091,14 +3083,6 @@ p, li { white-space: pre-wrap; }
<source>Generate mass data</source> <source>Generate mass data</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Do you really want to generate %1 messages ?</source> <source>Do you really want to generate %1 messages ?</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -5637,6 +5621,18 @@ p, li { white-space: pre-wrap; }
<source>Loading</source> <source>Loading</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Open</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Open File</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Play Media</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>GxsChannelPostsWidget</name> <name>GxsChannelPostsWidget</name>
@ -5773,14 +5769,6 @@ p, li { white-space: pre-wrap; }
<source>OwnVote</source> <source>OwnVote</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>GxsCommentTreeWidget</name> <name>GxsCommentTreeWidget</name>
@ -5848,14 +5836,6 @@ p, li { white-space: pre-wrap; }
before you can comment</source> before you can comment</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>GxsForumGroupDialog</name> <name>GxsForumGroupDialog</name>
@ -6320,14 +6300,6 @@ before you can comment</source>
<source>Load Group Logo</source> <source>Load Group Logo</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Create Forum</source> <source>Create Forum</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -6414,6 +6386,10 @@ before you can comment</source>
<source>No Signature</source> <source>No Signature</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>GxsIdDetails</name> <name>GxsIdDetails</name>
@ -6816,10 +6792,6 @@ p, li { white-space: pre-wrap; }
<source>Launches a distant chat with this peer</source> <source>Launches a distant chat with this peer</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Do you really want to delete this Identity ?</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Really delete? </source> <source>Really delete? </source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -6908,6 +6880,26 @@ p, li { white-space: pre-wrap; }
<source>Anonymous identity</source> <source>Anonymous identity</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Do you really want to delete this Identity?</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Chat with this peer as...</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distant chat cannot work</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Distant chat refused with this peer.</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>Error code</source>
<translation type="unfinished"></translation>
</message>
</context> </context>
<context> <context>
<name>IdEditDialog</name> <name>IdEditDialog</name>
@ -9674,14 +9666,6 @@ malicious behavior of crafted plugins.</source>
<source>Please add a Title</source> <source>Please add a Title</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Title</source> <source>Title</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
@ -9885,14 +9869,6 @@ malicious behavior of crafted plugins.</source>
<source>This Year</source> <source>This Year</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>
</message> </message>
<message>
<source>Create new Identity</source>
<translation type="unfinished"></translation>
</message>
<message>
<source>New ID</source>
<translation type="unfinished"></translation>
</message>
<message> <message>
<source>Submit a new Post</source> <source>Submit a new Post</source>
<translation type="unfinished"></translation> <translation type="unfinished"></translation>