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

View File

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

View File

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