Reworked context menu in PeersDialog.

Add "Edit group" to the context menu.

git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@3527 b45a01b8-16f6-495d-af2f-9b41ad6348cc
This commit is contained in:
thunder2 2010-09-23 18:49:52 +00:00
parent e3fcfe6c1a
commit 4614a06d57
9 changed files with 219 additions and 181 deletions

View File

@ -73,7 +73,7 @@
/* Images for context menu icons */
#define IMAGE_REMOVEFRIEND ":/images/removefriend16.png"
#define IMAGE_EXPIORTFRIEND ":/images/exportpeers_16x16.png"
#define IMAGE_EXPORTFRIEND ":/images/exportpeers_16x16.png"
#define IMAGE_PEERINFO ":/images/peerdetails_16x16.png"
#define IMAGE_CHAT ":/images/chat.png"
#define IMAGE_MSG ":/images/message-mail.png"
@ -82,7 +82,8 @@
#define IMAGE_AVAILABLE ":/images/user/identityavaiblecyan24.png"
#define IMAGE_CONNECT2 ":/images/reload24.png"
#define IMAGE_PASTELINK ":/images/pasterslink.png"
#define IMAGE_GROUP ":/images/group24.png"
#define IMAGE_GROUP16 ":/images/user/group16.png"
#define IMAGE_GROUP24 ":/images/user/group24.png"
#define COLUMN_COUNT 3
#define COLUMN_NAME 0
@ -350,154 +351,22 @@ void PeersDialog::peertreeWidgetCostumPopupMenu( QPoint point )
QTreeWidgetItem *c = getCurrentPeer();
QMenu contextMnu( this );
QAction* expandAll = new QAction(tr( "Expand all" ), &contextMnu );
connect( expandAll , SIGNAL( triggered() ), ui.peertreeWidget, SLOT (expandAll()) );
QAction* collapseAll = new QAction(tr( "Collapse all" ), &contextMnu );
connect( collapseAll , SIGNAL( triggered() ), ui.peertreeWidget, SLOT(collapseAll()) );
QAction* chatAct = new QAction(QIcon(IMAGE_CHAT), tr( "Chat" ), &contextMnu );
QAction* msgAct = new QAction(QIcon(IMAGE_MSG), tr( "Message Friend" ), &contextMnu );
QAction* connectfriendAct = new QAction(QIcon(IMAGE_CONNECT), tr( "Connect To Friend" ), &contextMnu );
QAction* configurefriendAct = new QAction(QIcon(IMAGE_PEERINFO), tr( "Peer Details" ), &contextMnu );
// QAction* exportfriendAct = new QAction(QIcon(IMAGE_EXPIORTFRIEND), tr( "Export Friend" ), &contextMnu );
QAction* removefriendAct = new QAction(QIcon(IMAGE_REMOVEFRIEND), tr( "Deny Friend" ), &contextMnu );
if (c && c->type() != TYPE_GROUP) {
connect( chatAct , SIGNAL( triggered() ), this, SLOT( chatfriendproxy() ) );
connect( msgAct , SIGNAL( triggered() ), this, SLOT( msgfriend() ) );
connect( connectfriendAct , SIGNAL( triggered() ), this, SLOT( connectfriend() ) );
connect( configurefriendAct , SIGNAL( triggered() ), this, SLOT( configurefriend() ) );
// connect( exportfriendAct , SIGNAL( triggered() ), this, SLOT( exportfriend() ) );
if (c->type() == TYPE_SSL) {
//this is a SSL key
removefriendAct->setText(tr( "Remove Friend Location"));
}
connect( removefriendAct , SIGNAL( triggered() ), this, SLOT( removefriend() ) );
} else {
chatAct->setDisabled(true);
msgAct->setDisabled(true);
connectfriendAct->setDisabled(true);
configurefriendAct->setDisabled(true);
// exportfriendAct->setDisabled(true);
removefriendAct->setDisabled(true);
}
QAction* recommendfriendAct = new QAction(QIcon(IMAGE_EXPIORTFRIEND), tr( "Recomend this Friend to..." ), &contextMnu );
if (c && c->type() == TYPE_GPG) {
connect( recommendfriendAct , SIGNAL( triggered() ), this, SLOT( recommendfriend() ) );
} else {
recommendfriendAct->setDisabled(true);
}
QAction* pastePersonAct = new QAction(QIcon(IMAGE_PASTELINK), tr( "Paste Friend Link" ), &contextMnu );
if(!RSLinkClipboard::empty(RetroShareLink::TYPE_PERSON)) {
connect( pastePersonAct , SIGNAL( triggered() ), this, SLOT( pastePerson() ) );
} else {
pastePersonAct->setDisabled(true);
}
// QAction* profileviewAct = new QAction(QIcon(IMAGE_PEERINFO), tr( "Profile View" ), &contextMnu );
// if (c) {
// connect( profileviewAct , SIGNAL( triggered() ), this, SLOT( viewprofile() ) );
// } else {
// profileviewAct->setDisabled(true);
// }
QMenu* groupsMenu = NULL;
QAction *removeGroupAction = NULL;
if (c) {
if (c->type() == TYPE_GPG) {
QMenu* addToGroupMenu = NULL;
QMenu* moveToGroupMenu = NULL;
std::list<RsGroupInfo> groupInfoList;
rsPeers->getGroupInfoList(groupInfoList);
GroupDefs::sortByName(groupInfoList);
std::string gpgId = c->data(COLUMN_DATA, ROLE_ID).toString().toStdString();
bool foundGroup = false;
// add action for all groups, except the own group
for (std::list<RsGroupInfo>::iterator groupIt = groupInfoList.begin(); groupIt != groupInfoList.end(); groupIt++) {
if (std::find(groupIt->peerIds.begin(), groupIt->peerIds.end(), gpgId) == groupIt->peerIds.end()) {
if (addToGroupMenu == NULL) {
addToGroupMenu = new QMenu(tr("Add to group"), &contextMnu );
}
QAction* addToGroupAction = new QAction(GroupDefs::name(*groupIt), addToGroupMenu);
addToGroupAction->setData(QString::fromStdString(groupIt->id));
connect(addToGroupAction, SIGNAL(triggered()), this, SLOT(addToGroup()));
addToGroupMenu->addAction(addToGroupAction);
if (moveToGroupMenu == NULL) {
moveToGroupMenu = new QMenu(tr("Move to group"), &contextMnu );
}
QAction* moveToGroupAction = new QAction(GroupDefs::name(*groupIt), moveToGroupMenu);
moveToGroupAction->setData(QString::fromStdString(groupIt->id));
connect(moveToGroupAction, SIGNAL(triggered()), this, SLOT(moveToGroup()));
moveToGroupMenu->addAction(moveToGroupAction);
} else {
foundGroup = true;
}
}
if (addToGroupMenu || moveToGroupMenu || foundGroup) {
groupsMenu = new QMenu(tr("Groups"), &contextMnu);
if (addToGroupMenu) {
groupsMenu->addMenu(addToGroupMenu);
}
if (moveToGroupMenu) {
groupsMenu->addMenu(moveToGroupMenu);
}
if (foundGroup) {
// add remove group
QTreeWidgetItem *parent = c->parent();
if (parent && parent->type() == TYPE_GROUP) {
QAction *removeFromGroup = groupsMenu->addAction(tr("Remove from group"));
removeFromGroup->setData(parent->data(COLUMN_DATA, ROLE_ID));
connect(removeFromGroup, SIGNAL(triggered()), this, SLOT(removeFromGroup()));
}
QAction *removeFromAllGroups = groupsMenu->addAction(tr("Remove from all groups"));
removeFromAllGroups->setData("");
connect(removeFromAllGroups, SIGNAL(triggered()), this, SLOT(removeFromGroup()));
}
}
}
if (c->type() == TYPE_GROUP) {
removeGroupAction = new QAction(tr("Remove group"), &contextMnu);
if (c->data(COLUMN_DATA, ROLE_STANDARD).toBool() == true) {
removeGroupAction->setDisabled(true);
} else {
connect(removeGroupAction, SIGNAL(triggered()), this, SLOT(removeGroup()));
}
}
}
QAction *action;
QWidget *widget = new QWidget(&contextMnu);
widget->setStyleSheet( ".QWidget{background-color: qlineargradient(x1:0, y1:0, x2:0, y2:1,stop:0 #FEFEFE, stop:1 #E8E8E8); border: 1px solid #CCCCCC;}");
// create menu header
QHBoxLayout *hbox = new QHBoxLayout();
hbox->setMargin(0);
hbox->setSpacing(6);
iconLabel = new QLabel( this );
iconLabel->setPixmap(QPixmap(":/images/user/friends24.png"));
iconLabel->setMaximumSize( iconLabel->frameSize().height() + 24, 24 );
hbox->addWidget(iconLabel);
textLabel = new QLabel( tr("<strong>RetroShare instance</strong>"), widget );
if (c && c->type() == TYPE_GPG) {
//this is a GPG key
textLabel->setText(tr("<strong>GPG Key</strong>"));
}
hbox->addWidget(textLabel);
@ -505,29 +374,145 @@ void PeersDialog::peertreeWidgetCostumPopupMenu( QPoint point )
hbox->addItem(spacerItem);
widget->setLayout( hbox );
QWidgetAction *widgetAction = new QWidgetAction(this);
widgetAction->setDefaultWidget(widget);
contextMnu.addAction( widgetAction);
contextMnu.addAction( chatAct);
contextMnu.addAction( msgAct);
contextMnu.addAction( configurefriendAct);
//contextMnu.addAction( profileviewAct);
contextMnu.addAction( recommendfriendAct);
contextMnu.addAction( connectfriendAct);
contextMnu.addAction(pastePersonAct);
contextMnu.addAction( removefriendAct);
//contextMnu.addAction( exportfriendAct);
if (groupsMenu) {
contextMnu.addMenu(groupsMenu);
}
if (removeGroupAction) {
contextMnu.addAction(removeGroupAction);
// create menu entries
if (c) {
int type = c->type();
// define header
switch (type) {
case TYPE_GROUP:
//this is a GPG key
textLabel->setText(tr("<strong>Group</strong>"));
break;
case TYPE_GPG:
//this is a GPG key
textLabel->setText(tr("<strong>GPG Key</strong>"));
break;
}
switch (type) {
case TYPE_GROUP:
{
bool standard = c->data(COLUMN_DATA, ROLE_STANDARD).toBool();
action = contextMnu.addAction(QIcon(), tr("Edit group"), this, SLOT(editGroup()));
action->setDisabled(standard);
action = contextMnu.addAction(QIcon(), tr("Remove group"), this, SLOT(removeGroup()));
action->setDisabled(standard);
}
break;
case TYPE_GPG:
case TYPE_SSL:
{
contextMnu.addAction(QIcon(IMAGE_CHAT), tr("Chat"), this, SLOT(chatfriendproxy()));
contextMnu.addAction(QIcon(IMAGE_MSG), tr("Message Friend"), this, SLOT(msgfriend()));
contextMnu.addAction(QIcon(IMAGE_PEERINFO), tr("Peer Details"), this, SLOT(configurefriend()));
// contextMnu.addAction(QIcon(IMAGE_PEERINFO), tr("Profile View"), this, SLOT(viewprofile()));
// action = contextMnu.addAction(QIcon(IMAGE_EXPORTFRIEND), tr("Export Friend"), this, SLOT(exportfriend()));
if (type == TYPE_GPG) {
contextMnu.addAction(QIcon(IMAGE_EXPORTFRIEND), tr("Recomend this Friend to..."), this, SLOT(recommendfriend()));
}
contextMnu.addAction(QIcon(IMAGE_CONNECT), tr("Connect To Friend"), this, SLOT(connectfriend()));
action = contextMnu.addAction(QIcon(IMAGE_PASTELINK), tr("Paste Friend Link"), this, SLOT(pastePerson()));
if (RSLinkClipboard::empty(RetroShareLink::TYPE_PERSON)) {
action->setDisabled(true);
}
if (type == TYPE_GPG) {
contextMnu.addAction(QIcon(IMAGE_REMOVEFRIEND), tr("Deny Friend"), this, SLOT(removefriend()));
} else {
//this is a SSL key
contextMnu.addAction(QIcon(IMAGE_REMOVEFRIEND), tr("Remove Friend Location"), this, SLOT(removefriend()));
}
if (type == TYPE_GPG) {
QMenu* groupsMenu = NULL;
QMenu* addToGroupMenu = NULL;
QMenu* moveToGroupMenu = NULL;
std::list<RsGroupInfo> groupInfoList;
rsPeers->getGroupInfoList(groupInfoList);
GroupDefs::sortByName(groupInfoList);
std::string gpgId = c->data(COLUMN_DATA, ROLE_ID).toString().toStdString();
QTreeWidgetItem *parent = c->parent();
bool foundGroup = false;
// add action for all groups, except the own group
for (std::list<RsGroupInfo>::iterator groupIt = groupInfoList.begin(); groupIt != groupInfoList.end(); groupIt++) {
if (std::find(groupIt->peerIds.begin(), groupIt->peerIds.end(), gpgId) == groupIt->peerIds.end()) {
if (parent) {
if (addToGroupMenu == NULL) {
addToGroupMenu = new QMenu(tr("Add to group"), &contextMnu);
}
QAction* addToGroupAction = new QAction(GroupDefs::name(*groupIt), addToGroupMenu);
addToGroupAction->setData(QString::fromStdString(groupIt->id));
connect(addToGroupAction, SIGNAL(triggered()), this, SLOT(addToGroup()));
addToGroupMenu->addAction(addToGroupAction);
}
if (moveToGroupMenu == NULL) {
moveToGroupMenu = new QMenu(tr("Move to group"), &contextMnu);
}
QAction* moveToGroupAction = new QAction(GroupDefs::name(*groupIt), moveToGroupMenu);
moveToGroupAction->setData(QString::fromStdString(groupIt->id));
connect(moveToGroupAction, SIGNAL(triggered()), this, SLOT(moveToGroup()));
moveToGroupMenu->addAction(moveToGroupAction);
} else {
foundGroup = true;
}
}
if (addToGroupMenu || moveToGroupMenu || foundGroup) {
groupsMenu = contextMnu.addMenu(QIcon(IMAGE_GROUP16), tr("Groups"));
if (addToGroupMenu) {
groupsMenu->addMenu(addToGroupMenu);
}
if (moveToGroupMenu) {
groupsMenu->addMenu(moveToGroupMenu);
}
if (foundGroup) {
// add remove from group
if (parent && parent->type() == TYPE_GROUP) {
QAction *removeFromGroup = groupsMenu->addAction(tr("Remove from group"));
removeFromGroup->setData(parent->data(COLUMN_DATA, ROLE_ID));
connect(removeFromGroup, SIGNAL(triggered()), this, SLOT(removeFromGroup()));
}
QAction *removeFromAllGroups = groupsMenu->addAction(tr("Remove from all groups"));
removeFromAllGroups->setData("");
connect(removeFromAllGroups, SIGNAL(triggered()), this, SLOT(removeFromGroup()));
}
}
}
}
}
} else {
action = contextMnu.addAction(QIcon(IMAGE_PASTELINK), tr("Paste Friend Link"), this, SLOT(pastePerson()));
if (RSLinkClipboard::empty(RetroShareLink::TYPE_PERSON)) {
action->setDisabled(true);
}
}
contextMnu.addSeparator();
contextMnu.addAction( expandAll);
contextMnu.addAction( collapseAll);
contextMnu.addAction(QIcon(), tr("Expand all"), ui.peertreeWidget, SLOT(expandAll()));
contextMnu.addAction(QIcon(), tr("Collapse all"), ui.peertreeWidget, SLOT(collapseAll()));
contextMnu.exec(QCursor::pos());
}
@ -701,7 +686,7 @@ void PeersDialog::insertPeers()
groupItem->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless);
groupItem->setSizeHint(COLUMN_NAME, QSize(26, 26));
groupItem->setTextAlignment(COLUMN_NAME, Qt::AlignLeft | Qt::AlignVCenter);
groupItem->setIcon(COLUMN_NAME, QIcon(IMAGE_GROUP));
groupItem->setIcon(COLUMN_NAME, QIcon(IMAGE_GROUP24));
/* used to find back the item */
groupItem->setData(COLUMN_DATA, ROLE_ID, QString::fromStdString(groupInfo->id));
@ -2076,6 +2061,28 @@ void PeersDialog::removeFromGroup()
rsPeers->assignPeerToGroup(groupId, gpgId, false);
}
void PeersDialog::editGroup()
{
QTreeWidgetItem *c = getCurrentPeer();
if (c == NULL) {
return;
}
if (c->type() != TYPE_GROUP) {
// wrong type
return;
}
std::string groupId = c->data(COLUMN_DATA, ROLE_ID).toString().toStdString();
if (groupId.empty()) {
return;
}
CreateGroup editGrpDialog (groupId, this);
editGrpDialog.exec();
}
void PeersDialog::removeGroup()
{
QTreeWidgetItem *c = getCurrentPeer();

View File

@ -126,6 +126,7 @@ private slots:
void addToGroup();
void moveToGroup();
void removeFromGroup();
void editGroup();
void removeGroup();
void configurefriend();

View File

@ -40,6 +40,13 @@ CreateGroup::CreateGroup(const std::string groupId, QWidget *parent, Qt::WFlags
RsGroupInfo groupInfo;
if (rsPeers->getGroupInfo(m_groupId, groupInfo)) {
ui.groupname->setText(QString::fromUtf8(groupInfo.name.c_str()));
setWindowTitle(tr("Edit Group"));
ui.headerLabel->setText(tr("<!DOCTYPE HTML PUBLIC \"-//W3C//DTD HTML 4.0//EN\" \"http://www.w3.org/TR/REC-html40/strict.dtd\">"
"<html><head><meta name=\"qrichtext\" content=\"1\" /><style type=\"text/css\">"
"p, li { white-space: pre-wrap; }"
"</style></head><body style=\" font-family:'MS Shell Dlg 2'; font-size:18pt; font-weight:600; font-style:normal;\">"
"<p style=\" margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;\"><span style=\" font-weight:400; color:#ffffff;\">Edit Group</span></p></body></html>"));
} else {
/* Group not found, create new */
m_groupId.clear();
@ -51,7 +58,9 @@ CreateGroup::CreateGroup(const std::string groupId, QWidget *parent, Qt::WFlags
std::list<RsGroupInfo>::iterator groupIt;
for (groupIt = groupInfoList.begin(); groupIt != groupInfoList.end(); groupIt++) {
usedGroupNames.append(GroupDefs::name(*groupIt));
if (m_groupId.empty() || groupIt->id != m_groupId) {
usedGroupNames.append(GroupDefs::name(*groupIt));
}
}
on_groupname_textChanged(ui.groupname->text());

View File

@ -74,7 +74,7 @@
</widget>
</item>
<item row="0" column="1">
<widget class="QLabel" name="label_3">
<widget class="QLabel" name="headerLabel">
<property name="font">
<font>
<pointsize>18</pointsize>

View File

@ -226,7 +226,6 @@
<file>images/informations_24x24.png</file>
<file>images/invite-friend24.png</file>
<file>images/connect_friend.png</file>
<file>images/group24.png</file>
<file>images/kalarm.png</file>
<file>images/kbackgammon.png</file>
<file>images/kblogger.png</file>
@ -436,6 +435,8 @@
<file>images/user/kuser24.png</file>
<file>images/user/agt_forum64.png</file>
<file>images/user/agt_forum128.png</file>
<file>images/user/group16.png</file>
<file>images/user/group24.png</file>
<file>images/up.png</file>
<file>images/up0down0.png</file>
<file>images/up0down1.png</file>

Binary file not shown.

After

Width:  |  Height:  |  Size: 840 B

View File

Before

Width:  |  Height:  |  Size: 1.6 KiB

After

Width:  |  Height:  |  Size: 1.6 KiB

View File

@ -2431,6 +2431,16 @@ p, li { white-space: pre-wrap; }
<source>Enter a name for your group</source>
<translation>Gib einen Namen für Deine Gruppe ein</translation>
</message>
<message>
<location filename="../gui/groups/CreateGroup.cpp" line="+44"/>
<source>Edit Group</source>
<translation>Gruppe ändern</translation>
</message>
<message>
<location line="+1"/>
<source>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; }&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:18pt; font-weight:600; font-style:normal;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:400; color:#ffffff;&quot;&gt;Edit Group&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</source>
<translation>&lt;!DOCTYPE HTML PUBLIC &quot;-//W3C//DTD HTML 4.0//EN&quot; &quot;http://www.w3.org/TR/REC-html40/strict.dtd&quot;&gt;&lt;html&gt;&lt;head&gt;&lt;meta name=&quot;qrichtext&quot; content=&quot;1&quot; /&gt;&lt;style type=&quot;text/css&quot;&gt;p, li { white-space: pre-wrap; }&lt;/style&gt;&lt;/head&gt;&lt;body style=&quot; font-family:&apos;MS Shell Dlg 2&apos;; font-size:18pt; font-weight:600; font-style:normal;&quot;&gt;&lt;p style=&quot; margin-top:0px; margin-bottom:0px; margin-left:0px; margin-right:0px; -qt-block-indent:0; text-indent:0px;&quot;&gt;&lt;span style=&quot; font-weight:400; color:#ffffff;&quot;&gt;Gruppe ändern&lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</translation>
</message>
</context>
<context>
<name>CryptoPage</name>
@ -6877,12 +6887,12 @@ p, li { white-space: pre-wrap; }
<context>
<name>PeersDialog</name>
<message>
<location filename="../gui/PeersDialog.cpp" line="+360"/>
<location filename="../gui/PeersDialog.cpp" line="+414"/>
<source>Chat</source>
<translation>Chat</translation>
</message>
<message>
<location line="+737"/>
<location line="+665"/>
<source>Save Certificate</source>
<translation>Zertifikat speichern</translation>
</message>
@ -6897,12 +6907,12 @@ p, li { white-space: pre-wrap; }
<translation>Status</translation>
</message>
<message>
<location filename="../gui/PeersDialog.cpp" line="-736"/>
<location filename="../gui/PeersDialog.cpp" line="-656"/>
<source>Connect To Friend</source>
<translation>Verbinde zum Freund</translation>
</message>
<message>
<location line="-227"/>
<location line="-288"/>
<source>Profile</source>
<translation>Profil</translation>
</message>
@ -6922,42 +6932,52 @@ p, li { white-space: pre-wrap; }
<translation>ich</translation>
</message>
<message>
<location line="+115"/>
<location line="+269"/>
<source>Expand all</source>
<translation>Alle erweitern</translation>
</message>
<message>
<location line="+3"/>
<location line="+1"/>
<source>Collapse all</source>
<translation>Alle reduzieren</translation>
</message>
<message>
<location line="+4"/>
<location line="-95"/>
<source>Message Friend</source>
<translation>Freund anschreiben</translation>
</message>
<message>
<location line="+2"/>
<location line="-24"/>
<source>&lt;strong&gt;Group&lt;/strong&gt;</source>
<translation>&lt;strong&gt;Gruppe&lt;/strong&gt;</translation>
</message>
<message>
<location line="+13"/>
<source>Edit group</source>
<translation>Gruppe ändern</translation>
</message>
<message>
<location line="+12"/>
<source>Peer Details</source>
<translation>Peer-Details</translation>
</message>
<message>
<location line="+2"/>
<location line="+11"/>
<source>Deny Friend</source>
<translation>Blockiere Freund</translation>
</message>
<message>
<location line="+11"/>
<location line="+3"/>
<source>Remove Friend Location</source>
<translation>Freund entfernen</translation>
</message>
<message>
<location line="+53"/>
<location line="+23"/>
<source>Add to group</source>
<translation>Hinzufügen zur Gruppe</translation>
</message>
<message>
<location line="+8"/>
<location line="+9"/>
<source>Move to group</source>
<translation>Verschiebe in Gruppe</translation>
</message>
@ -6967,7 +6987,7 @@ p, li { white-space: pre-wrap; }
<translation>Gruppen</translation>
</message>
<message>
<location line="+14"/>
<location line="+13"/>
<source>Remove from group</source>
<translation>Aus Gruppe entfernen</translation>
</message>
@ -6977,27 +6997,27 @@ p, li { white-space: pre-wrap; }
<translation>Aus allen Gruppen entfernen</translation>
</message>
<message>
<location line="+7"/>
<location line="-85"/>
<source>Remove group</source>
<translation>Gruppe entfernen</translation>
</message>
<message>
<location line="+24"/>
<location line="-12"/>
<source>&lt;strong&gt;GPG Key&lt;/strong&gt;</source>
<translation></translation>
</message>
<message>
<location line="-3"/>
<location line="-26"/>
<source>&lt;strong&gt;RetroShare instance&lt;/strong&gt;</source>
<translation></translation>
</message>
<message>
<location line="+519"/>
<location line="+627"/>
<source>Available</source>
<translation>Verfügbar</translation>
</message>
<message>
<location line="+758"/>
<location line="+759"/>
<source>Add Extra File</source>
<translation>Zusätzliche Datei hinzufügen</translation>
</message>
@ -7206,17 +7226,17 @@ p, li { white-space: pre-wrap; }
<translation>Status Spalte ausblenden</translation>
</message>
<message>
<location filename="../gui/PeersDialog.cpp" line="-1799"/>
<location filename="../gui/PeersDialog.cpp" line="-1780"/>
<source>Friends Storm</source>
<translation>Aktivitäten</translation>
</message>
<message>
<location line="+252"/>
<location line="+284"/>
<source>Recomend this Friend to...</source>
<translation>Freund weiterempfehlen...</translation>
</message>
<message>
<location line="+894"/>
<location line="+843"/>
<source>is typing...</source>
<translation>tippt...</translation>
</message>
@ -7236,12 +7256,12 @@ p, li { white-space: pre-wrap; }
<translation>Freunde</translation>
</message>
<message>
<location filename="../gui/PeersDialog.cpp" line="-887"/>
<location filename="../gui/PeersDialog.cpp" line="-762"/>
<source>Paste Friend Link</source>
<translation>RetroShare Link einfügen</translation>
</message>
<message>
<location line="+482"/>
<location line="+356"/>
<source>location</source>
<translation>Standort</translation>
</message>