diff --git a/retroshare-gui/src/gui/Posted/PostedListDialog.cpp b/retroshare-gui/src/gui/Posted/PostedListDialog.cpp index 0575c01ea..55c0b5bcd 100644 --- a/retroshare-gui/src/gui/Posted/PostedListDialog.cpp +++ b/retroshare-gui/src/gui/Posted/PostedListDialog.cpp @@ -86,8 +86,8 @@ PostedListDialog::PostedListDialog(QWidget *parent) /* create posted tree */ yourTopics = ui.groupTreeWidget->addCategoryItem(tr("My Topics"), QIcon(IMAGE_FOLDER), true); subscribedTopics = ui.groupTreeWidget->addCategoryItem(tr("Subscribed Topics"), QIcon(IMAGE_FOLDERRED), true); - allTopics = ui.groupTreeWidget->addCategoryItem(tr("All Topics"), QIcon(IMAGE_FOLDERGREEN), false); - //otherTopics = ui.groupTreeWidget->addCategoryItem(tr("Other Topics"), QIcon(IMAGE_FOLDERYELLOW), false); + popularTopics = ui.groupTreeWidget->addCategoryItem(tr("Popular Topics"), QIcon(IMAGE_FOLDERGREEN), false); + otherTopics = ui.groupTreeWidget->addCategoryItem(tr("Other Topics"), QIcon(IMAGE_FOLDERYELLOW), false); ui.hotSortButton->setChecked(true); @@ -181,8 +181,6 @@ void PostedListDialog::groupListCustomPopupMenu(QPoint /*point*/) action->setEnabled(!isSubscribed); action = contextMnu.addAction(QIcon(IMAGE_MESSAGE), tr("Unsubscribe"), this, SLOT(unsubscribeTopic())); action->setEnabled(isSubscribed); - action = contextMnu.addAction(QIcon(IMAGE_FOLDERGREEN), tr("New Child-Group"), this, SLOT(newSubTopic())); - action->setEnabled(isSubscribed); contextMnu.exec(QCursor::pos()); } @@ -363,23 +361,6 @@ void PostedListDialog::newTopic() PostedGroupDialog cf (mPostedQueue, this); cf.exec (); } -void PostedListDialog::newSubTopic() -{ - std::cerr << "mCurrTopicId: " << mCurrTopicId << std::endl; - PostedGroupDialog cf (mPostedQueue, this); - cf.setParentLabel(mCurrTopicId.c_str()); - cf.exec (); -/* - if (mCurrTopicId.empty()) { - return; - } - RsPostedGroup grp; - grp.mMeta.mParentGroupId = mCurrTopicId; - - PostedGroupDialog cf (grp, this); - GxsForumGroupDialog cf(grp, GxsGroupDialog::MODE_SHOW, this); - cf.exec ();*/ -} void PostedListDialog::showGroupDetails() { @@ -942,16 +923,17 @@ void PostedListDialog::groupInfoToGroupItemInfo(const RsGroupMetaData &groupInfo groupItemInfo.popularity = groupInfo.mPop; groupItemInfo.lastpost = QDateTime::fromTime_t(groupInfo.mLastPost); groupItemInfo.subscribeFlags = groupInfo.mSubscribeFlags; - groupItemInfo.parentId = QString::fromStdString(groupInfo.mParentGrpId); } -void PostedListDialog::insertGroupData( std::list &groupList) +void PostedListDialog::insertGroupData(const std::list &groupList) { std::list::const_iterator it; QList adminList; QList subList; - QList completeList; + QList popList; + QList otherList; + std::multimap popMap; for (it = groupList.begin(); it != groupList.end(); it++) { @@ -961,8 +943,6 @@ void PostedListDialog::insertGroupData( std::list &groupList) GroupItemInfo groupItemInfo; groupInfoToGroupItemInfo(*it, groupItemInfo); - completeList.push_back(groupItemInfo); - if (IS_GROUP_SUBSCRIBED(flags)) { if (IS_GROUP_ADMIN(flags) || IS_GROUP_PUBLISHER(flags)) @@ -974,12 +954,40 @@ void PostedListDialog::insertGroupData( std::list &groupList) subList.push_back(groupItemInfo); } } + else + { + popMap.insert(std::make_pair(it->mPop, groupItemInfo)); + } + } + + /* iterate backwards through popMap - take the top 5 or 10% of list */ + uint32_t popCount = 5; + if (popCount < popMap.size() / 10) + { + popCount = popMap.size() / 10; + } + + uint32_t i = 0; + uint32_t popLimit = 0; + std::multimap::reverse_iterator rit; + for(rit = popMap.rbegin(); ((rit != popMap.rend()) && (i < popCount)); rit++, i++) ; + if (rit != popMap.rend()) { + popLimit = rit->first; + } + + for (rit = popMap.rbegin(); rit != popMap.rend(); rit++) { + if (rit->second.popularity < (int) popLimit) { + otherList.append(rit->second); + } else { + popList.append(rit->second); + } } /* now we can add them in as a tree! */ ui.groupTreeWidget->fillGroupItems(yourTopics, adminList); ui.groupTreeWidget->fillGroupItems(subscribedTopics, subList); - ui.groupTreeWidget->fillGroupItems(allTopics, completeList); + ui.groupTreeWidget->fillGroupItems(popularTopics, popList); + ui.groupTreeWidget->fillGroupItems(otherTopics, otherList); } /**************************************************************************************/ diff --git a/retroshare-gui/src/gui/Posted/PostedListDialog.h b/retroshare-gui/src/gui/Posted/PostedListDialog.h index d0eea6070..5cbefea97 100644 --- a/retroshare-gui/src/gui/Posted/PostedListDialog.h +++ b/retroshare-gui/src/gui/Posted/PostedListDialog.h @@ -66,7 +66,6 @@ private slots: void changedTopic(const QString &id); void newTopic(); - void newSubTopic(); void showGroupDetails(); void newPost(); @@ -127,7 +126,7 @@ private: void updateDisplayedItems(const std::vector& msgIds); void updateCurrentDisplayComplete(const uint32_t& token); - void insertGroupData(std::list &groupList); + void insertGroupData(const std::list &groupList); void groupInfoToGroupItemInfo(const RsGroupMetaData &groupInfo, GroupItemInfo &groupItemInfo); void loadRequest(const TokenQueue *queue, const TokenRequest &req); @@ -135,7 +134,8 @@ private: private: QTreeWidgetItem *yourTopics; QTreeWidgetItem *subscribedTopics; - QTreeWidgetItem *allTopics; + QTreeWidgetItem *popularTopics; + QTreeWidgetItem *otherTopics; int mSortMethod; int mLastSortMethod; diff --git a/retroshare-gui/src/gui/common/GroupTreeWidget.cpp b/retroshare-gui/src/gui/common/GroupTreeWidget.cpp index 4a3576afc..2e13ddddf 100644 --- a/retroshare-gui/src/gui/common/GroupTreeWidget.cpp +++ b/retroshare-gui/src/gui/common/GroupTreeWidget.cpp @@ -21,8 +21,6 @@ #include #include -#include -#include #include "GroupTreeWidget.h" #include "ui_GroupTreeWidget.h" @@ -33,7 +31,6 @@ #include "RSTreeWidgetItem.h" #include -#include #define COLUMN_NAME 0 #define COLUMN_POPULARITY 1 @@ -48,7 +45,6 @@ #define ROLE_SEARCH_SCORE Qt::UserRole + 5 #define ROLE_SUBSCRIBE_FLAGS Qt::UserRole + 6 #define ROLE_COLOR Qt::UserRole + 7 -#define ROLE_PARENT_ID Qt::UserRole + 8 #define FILTER_NAME_INDEX 0 #define FILTER_DESC_INDEX 1 @@ -303,38 +299,6 @@ QString GroupTreeWidget::itemId(QTreeWidgetItem *item) return item->data(COLUMN_DATA, ROLE_ID).toString(); } -QTreeWidgetItem* GroupTreeWidget::recursiveIdSearch(QTreeWidgetItem *currentItem, const QString &id){ - int childCount = currentItem->childCount(); - for (int child = 0; child < childCount; child++) { - QTreeWidgetItem *childItem = currentItem->child(child); - if (childItem->data(COLUMN_DATA, ROLE_ID).toString() == id) { - /* Found child */ - return childItem; - } - QTreeWidgetItem* recur = recursiveIdSearch(childItem, id); - if(recur) return recur; - } - return NULL; -} - -void GroupTreeWidget::checkOrphans(QList &orphanList, QTreeWidgetItem *justInserted){ - - if(orphanList.length()==0)return; - QString newID = justInserted->data(COLUMN_DATA, ROLE_ID).toString(); - - QList oList = orphanList; - QMutableListIterator i(oList); - while (i.hasNext()) { - QTreeWidgetItem *orphan = i.next(); - QString parentID = orphan->data(COLUMN_DATA, ROLE_PARENT_ID).toString(); - if (parentID.compare(newID)==0){ - justInserted->addChild(orphan); - i.remove(); - checkOrphans(orphanList,orphan); - } - } -} - void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList &itemList) { if (categoryItem == NULL) { @@ -343,32 +307,28 @@ void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList< QString filterText = ui->filterLineEdit->text(); - QList orphans; - /* Iterate all items */ QList::const_iterator it; for (it = itemList.begin(); it != itemList.end(); it++) { const GroupItemInfo &itemInfo = *it; - QTreeWidgetItem *item = recursiveIdSearch(categoryItem, itemInfo.id); + QTreeWidgetItem *item = NULL; + + /* Search exisiting item */ + int childCount = categoryItem->childCount(); + for (int child = 0; child < childCount; child++) { + QTreeWidgetItem *childItem = categoryItem->child(child); + if (childItem->data(COLUMN_DATA, ROLE_ID).toString() == itemInfo.id) { + /* Found child */ + item = childItem; + break; + } + } if (item == NULL) { item = new RSTreeWidgetItem(compareRole); item->setData(COLUMN_DATA, ROLE_ID, itemInfo.id); - item->setData(COLUMN_DATA, ROLE_PARENT_ID, itemInfo.parentId); - - if(itemInfo.parentId.length()<10){ - categoryItem->addChild(item); - checkOrphans(orphans,item); - }else{ - QTreeWidgetItem *parentItem = recursiveIdSearch(categoryItem, itemInfo.parentId); - if(parentItem){ - parentItem->addChild(item); - checkOrphans(orphans,item); - }else{ - orphans.append(item); - } - } + categoryItem->addChild(item); } item->setText(COLUMN_NAME, itemInfo.name); @@ -411,16 +371,6 @@ void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList< calculateScore(item, filterText); } - /* Add remaning topics whose parents are unknown */ - QMutableListIterator i(orphans); - while (i.hasNext()) { - QTreeWidgetItem *orphan = i.next(); - categoryItem->addChild(orphan); - std::cerr << "adding orphan\n"<< orphan->data(COLUMN_DATA, ROLE_PARENT_ID).toString().toStdString() <<"\n"; - std::cerr << orphan->data(COLUMN_DATA, ROLE_ID).toString().toStdString() <<"\n"; - std::cerr << "\n"; - } - /* Remove all items not in list */ int child = 0; int childCount = categoryItem->childCount(); @@ -441,7 +391,7 @@ void GroupTreeWidget::fillGroupItems(QTreeWidgetItem *categoryItem, const QList< } } - resort(categoryItem, NULL); + resort(categoryItem); } void GroupTreeWidget::setUnreadCount(QTreeWidgetItem *item, int unreadCount) @@ -516,104 +466,88 @@ int GroupTreeWidget::subscribeFlags(const QString &id) return item->data(COLUMN_DATA, ROLE_SUBSCRIBE_FLAGS).toInt(); } -int GroupTreeWidget::calculateScore(QTreeWidgetItem *item, const QString &filterText) +void GroupTreeWidget::calculateScore(QTreeWidgetItem *item, const QString &filterText) { - - int score = 0; - if (!item) return score; - - /* Calculate one item */ - if (filterText.isEmpty()) { - score = 0; - item->setHidden(false); - int count = item->childCount(); - for (int nIndex = 0; nIndex < count; ++nIndex) { - calculateScore(item->child(nIndex), filterText); - } - } else { - QString scoreString; - - switch (ui->filterLineEdit->currentFilter()) { - case FILTER_NAME_INDEX: - scoreString = item->data(COLUMN_DATA, ROLE_NAME).toString(); - break; - case FILTER_DESC_INDEX: - scoreString = item->data(COLUMN_DATA, ROLE_DESCRIPTION).toString(); - break; - } - - score = scoreString.count(filterText, Qt::CaseInsensitive); - - int count = item->childCount(); - for (int nIndex = 0; nIndex < count; ++nIndex) { - score += calculateScore(item->child(nIndex), filterText); - } - - if (score) { + if (item) { + /* Calculate one item */ + int score; + if (filterText.isEmpty()) { + score = 0; item->setHidden(false); } else { - item->setHidden(true); + QString scoreString; + + switch (ui->filterLineEdit->currentFilter()) { + case FILTER_NAME_INDEX: + scoreString = item->data(COLUMN_DATA, ROLE_NAME).toString(); + break; + case FILTER_DESC_INDEX: + scoreString = item->data(COLUMN_DATA, ROLE_DESCRIPTION).toString(); + break; + } + + score = scoreString.count(filterText, Qt::CaseInsensitive); + + if (score) { + item->setHidden(false); + } else { + item->setHidden(true); + } } + + item->setData(COLUMN_DATA, ROLE_SEARCH_SCORE, -score); // negative for correct sorting + + return; } - item->setData(COLUMN_DATA, ROLE_SEARCH_SCORE, -score); // negative for correct sorting - - return score; - -} - -void GroupTreeWidget::calculateScores(const QString &filterText) -{ /* Find out which has given word in it */ QTreeWidgetItemIterator itemIterator(ui->treeWidget); + QTreeWidgetItem *item; + while ((item = *itemIterator) != NULL) { + itemIterator++; - int count = ui->treeWidget->topLevelItemCount(); - for (int child = 0; child < count; child++) { - QTreeWidgetItem *catitem = ui->treeWidget->topLevelItem(child); - int icount = catitem->childCount(); - for (int nIndex = 0; nIndex < icount; ++nIndex) { - calculateScore(catitem->child(nIndex), filterText); + if (item->data(COLUMN_DATA, ROLE_ID).toString().isEmpty()) { + continue; } + + calculateScore(item, filterText); } } void GroupTreeWidget::filterChanged() { /* Recalculate score */ - calculateScores(ui->filterLineEdit->text()); + calculateScore(NULL, ui->filterLineEdit->text()); - sort(); + resort(NULL); } -void GroupTreeWidget::resort(QTreeWidgetItem *categoryItem, Qt::SortOrder *order) +void GroupTreeWidget::resort(QTreeWidgetItem *categoryItem) { - if(order == NULL){ - Qt::SortOrder so = (actionSortAscending == NULL || actionSortAscending->isChecked()) ? Qt::AscendingOrder : Qt::DescendingOrder; - order = &so; + Qt::SortOrder order = (actionSortAscending == NULL || actionSortAscending->isChecked()) ? Qt::AscendingOrder : Qt::DescendingOrder; - if (ui->filterLineEdit->text().isEmpty() == false) { - compareRole->setRole(COLUMN_DATA, ROLE_SEARCH_SCORE); - compareRole->addRole(COLUMN_DATA, ROLE_LASTPOST); - } else if (actionSortByName && actionSortByName->isChecked()) { - compareRole->setRole(COLUMN_DATA, ROLE_NAME); - } else if (actionSortByPopularity && actionSortByPopularity->isChecked()) { - compareRole->setRole(COLUMN_DATA, ROLE_POPULARITY); - } else if (actionSortByLastPost && actionSortByLastPost->isChecked()) { - compareRole->setRole(COLUMN_DATA, ROLE_LASTPOST); - } + if (ui->filterLineEdit->text().isEmpty() == false) { + compareRole->setRole(COLUMN_DATA, ROLE_SEARCH_SCORE); + compareRole->addRole(COLUMN_DATA, ROLE_LASTPOST); + } else if (actionSortByName && actionSortByName->isChecked()) { + compareRole->setRole(COLUMN_DATA, ROLE_NAME); + } else if (actionSortByPopularity && actionSortByPopularity->isChecked()) { + compareRole->setRole(COLUMN_DATA, ROLE_POPULARITY); + } else if (actionSortByLastPost && actionSortByLastPost->isChecked()) { + compareRole->setRole(COLUMN_DATA, ROLE_LASTPOST); } - categoryItem->sortChildren(COLUMN_DATA, *order); - int count = categoryItem->childCount(); - for (int child = 0; child < count; child++) { - resort(categoryItem->child(child), order); + if (categoryItem) { + categoryItem->sortChildren(COLUMN_DATA, order); + } else { + int count = ui->treeWidget->topLevelItemCount(); + for (int child = 0; child < count; child++) { + ui->treeWidget->topLevelItem(child)->sortChildren(COLUMN_DATA, order); + } } } void GroupTreeWidget::sort() { - int count = ui->treeWidget->topLevelItemCount(); - for (int child = 0; child < count; child++) { - resort(ui->treeWidget->topLevelItem(child), NULL); - } + resort(NULL); } diff --git a/retroshare-gui/src/gui/common/GroupTreeWidget.h b/retroshare-gui/src/gui/common/GroupTreeWidget.h index 4e222fd22..dd7326ac3 100644 --- a/retroshare-gui/src/gui/common/GroupTreeWidget.h +++ b/retroshare-gui/src/gui/common/GroupTreeWidget.h @@ -55,7 +55,6 @@ public: QString id; QString name; QString description; - QString parentId; int popularity; QDateTime lastpost; QIcon icon; @@ -86,8 +85,6 @@ public: QString itemId(QTreeWidgetItem *item); // Fill items of a group void fillGroupItems(QTreeWidgetItem *categoryItem, const QList &itemList); - QTreeWidgetItem *recursiveIdSearch(QTreeWidgetItem *currentItem, const QString &id); - void checkOrphans(QList &orphanList, QTreeWidgetItem *justInserted); // Set the unread count of an item void setUnreadCount(QTreeWidgetItem *item, int unreadCount); @@ -123,9 +120,8 @@ private slots: private: // Initialize the display menu for sorting void initDisplayMenu(QToolButton *toolButton); - int calculateScore(QTreeWidgetItem *item, const QString &filterText); - void calculateScores(const QString &filterText); - void resort(QTreeWidgetItem *categoryItem, Qt::SortOrder *order); + void calculateScore(QTreeWidgetItem *item, const QString &filterText); + void resort(QTreeWidgetItem *categoryItem); void updateColors(); private: diff --git a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp index dbd07bedc..d3f93cc24 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp +++ b/retroshare-gui/src/gui/gxs/GxsGroupDialog.cpp @@ -94,8 +94,6 @@ void GxsGroupDialog::init() this->resize(this->size().width() - ui.contactsdockWidget->size().width(), this->size().height()); } - ui.parentGroupBox->setVisible(false); - /* initialize key share list */ ui.keyShareList->setHeaderText(tr("Contacts:")); ui.keyShareList->setModus(FriendSelectionWidget::MODUS_CHECK); @@ -150,13 +148,13 @@ void GxsGroupDialog::initMode() { ui.buttonBox->setStandardButtons(QDialogButtonBox::Close); } - break; -//TODO -// case MODE_EDIT: -// { -// ui.createButton->setText(tr("Submit Changes")); -// } -// break; + break; + case MODE_EDIT: + { + ui.buttonBox->setStandardButtons(QDialogButtonBox::Ok | QDialogButtonBox::Cancel); + ui.buttonBox->button(QDialogButtonBox::Ok)->setText(tr("Submit Group Changes")); + } + break; } } @@ -322,17 +320,40 @@ void GxsGroupDialog::submitGroup() break; case MODE_EDIT: - { - /* TEMP: just close if down */ - cancelDialog(); + { + + editGroup(); } break; } } -void GxsGroupDialog::setParentLabel(QString parentId){ - ui.parentGroupBox->setVisible(true); - ui.parentLabel->setText(parentId); +void GxsGroupDialog::editGroup() +{ + std::cerr << "GxsGroupDialog::editGroup()" << std::endl; + + QString name = misc::removeNewLine(ui.groupName->text()); + uint32_t flags = GXS_SERV::FLAG_PRIVACY_PUBLIC; + + if(name.isEmpty()) + { + /* error message */ + QMessageBox::warning(this, "RetroShare", tr("Please add a Name"), QMessageBox::Ok, QMessageBox::Ok); + return; //Don't add a empty name!! + } + + uint32_t token; + RsGxsGroupUpdateMeta updateMeta(mGrpMeta.mGroupId); + updateMeta.setMetaUpdate(RsGxsGroupUpdateMeta::NAME, std::string(name.toUtf8())); + + if (service_EditGroup(token, updateMeta)) + { + // get the Queue to handle response. + if(mTokenQueue != NULL) + mTokenQueue->queueRequest(token, TOKENREQ_GROUPINFO, RS_TOKREQ_ANSTYPE_ACK, GXSGROUP_NEWGROUPID); + } + + close(); } void GxsGroupDialog::createGroup() @@ -340,8 +361,7 @@ void GxsGroupDialog::createGroup() std::cerr << "GxsGroupDialog::createGroup()"; std::cerr << std::endl; - QString name = misc::removeNewLine(ui.groupName->text()); - QString parentGroupId = misc::removeNewLine(ui.parentLabel->text()); + QString name = misc::removeNewLine(ui.groupName->text()); uint32_t flags = GXS_SERV::FLAG_PRIVACY_PUBLIC; if(name.isEmpty()) @@ -356,8 +376,6 @@ void GxsGroupDialog::createGroup() // Fill in the MetaData as best we can. meta.mGroupName = std::string(name.toUtf8()); - if(parentGroupId.length()>10) - meta.mParentGrpId = parentGroupId.toStdString(); meta.mGroupFlags = flags; meta.mSignFlags = getGroupSignFlags(); diff --git a/retroshare-gui/src/gui/gxs/GxsGroupDialog.h b/retroshare-gui/src/gui/gxs/GxsGroupDialog.h index 8356d8715..35db177d0 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupDialog.h +++ b/retroshare-gui/src/gui/gxs/GxsGroupDialog.h @@ -143,7 +143,6 @@ public: uint32_t mode() { return mMode; } - void setParentLabel(QString parentId); private: void newGroup(); void init(); @@ -156,8 +155,6 @@ protected slots: void addGroupLogo(); protected: - /** Qt Designer generated object */ - Ui::GxsGroupDialog ui; virtual void showEvent(QShowEvent*); virtual void initUi() = 0; @@ -166,13 +163,21 @@ protected: void setUiText(UiType uiType, const QString &text); /*! - * Main purpose is to help tansfer meta data to service - * + * It is up to the service to do the actual group creation + * Service can also modify initial meta going into group * @param token This should be set to the token retrieved * @param meta The deriving GXS service should set their grp meta to this value */ virtual bool service_CreateGroup(uint32_t &token, const RsGroupMetaData &meta) = 0; + /*! + * It is up to the service to do the actual group editing + * TODO: make pure virtual + * @param token This should be set to the token retrieved + * @param meta The deriving GXS service should set their grp meta to this value + */ + virtual bool service_EditGroup(uint32_t &token, RsGxsGroupUpdateMeta &updateMeta) {} + /*! * This returns a group logo from the ui \n * Should be calleld by deriving service @@ -205,6 +210,7 @@ private: void setupVisibility(); void clearForm(); void createGroup(); + void editGroup(); void sendShareList(std::string forumId); void loadNewGroupId(const uint32_t &token); @@ -218,7 +224,10 @@ private: uint32_t mReadonlyFlags; uint32_t mDefaultsFlags; + protected: + /** Qt Designer generated object */ + Ui::GxsGroupDialog ui; }; #endif diff --git a/retroshare-gui/src/gui/gxs/GxsGroupDialog.ui b/retroshare-gui/src/gui/gxs/GxsGroupDialog.ui index 1ee1514ae..632dc6027 100644 --- a/retroshare-gui/src/gui/gxs/GxsGroupDialog.ui +++ b/retroshare-gui/src/gui/gxs/GxsGroupDialog.ui @@ -7,7 +7,7 @@ 0 0 695 - 518 + 448 @@ -156,7 +156,7 @@ - + true @@ -257,7 +257,7 @@ - + Message Distribution @@ -323,7 +323,7 @@ - + Publish Signatures @@ -366,7 +366,7 @@ - + Personal Signatures @@ -402,7 +402,7 @@ - + Comments @@ -431,7 +431,7 @@ - + QFrame::StyledPanel @@ -441,40 +441,13 @@ - + QDialogButtonBox::Cancel|QDialogButtonBox::Ok - - - - - - - - - Parent: - - - Qt::AlignRight|Qt::AlignTrailing|Qt::AlignVCenter - - - - - - - None - - - - - - - - @@ -506,6 +479,7 @@ +