diff --git a/retroshare-gui/src/gui/NetworkDialog.cpp b/retroshare-gui/src/gui/NetworkDialog.cpp index 416045d15..aa045a285 100644 --- a/retroshare-gui/src/gui/NetworkDialog.cpp +++ b/retroshare-gui/src/gui/NetworkDialog.cpp @@ -24,6 +24,7 @@ #include #include #include +#include #include #include @@ -76,6 +77,8 @@ RsPeerId getNeighRsCertId(QTreeWidgetItem *i); * #define NET_DEBUG 1 *****/ +static const unsigned int ROLE_SORT = Qt::UserRole + 1 ; + /** Constructor */ NetworkDialog::NetworkDialog(QWidget *parent) : RsAutoUpdatePage(10000,parent) // updates every 10 sec. @@ -95,6 +98,9 @@ NetworkDialog::NetworkDialog(QWidget *parent) ui.connectTreeWidget -> setRootIsDecorated( false ); ui.connectTreeWidget -> setColumnCount(6); + compareNetworkRole = new RSTreeWidgetItemCompareRole; + compareNetworkRole->setRole(COLUMN_LAST_USED, ROLE_SORT); + /* Set header resize modes and initial section sizes */ QHeaderView * _header = ui.connectTreeWidget->header () ; QHeaderView_setSectionResizeModeColumn(_header, COLUMN_CHECK, QHeaderView::Custom); @@ -118,11 +124,13 @@ NetworkDialog::NetworkDialog(QWidget *parent) _header->model()->setHeaderData(COLUMN_PEERID, Qt::Horizontal, tr("Certificat ID"),Qt::ToolTipRole); _header->model()->setHeaderData(COLUMN_LAST_USED, Qt::Horizontal, tr("Since when I use this certificate"),Qt::ToolTipRole); - _header->resizeSection ( COLUMN_CHECK, 25 ); - _header->resizeSection ( COLUMN_PEERNAME, 200 ); - _header->resizeSection ( COLUMN_I_AUTH_PEER, 200 ); - _header->resizeSection ( COLUMN_PEER_AUTH_ME, 200 ); - _header->resizeSection ( COLUMN_LAST_USED, 75 ); + float f = QFontMetricsF(font()).height()/14.0 ; + + _header->resizeSection ( COLUMN_CHECK, 25*f ); + _header->resizeSection ( COLUMN_PEERNAME, 200*f ); + _header->resizeSection ( COLUMN_I_AUTH_PEER, 200*f ); + _header->resizeSection ( COLUMN_PEER_AUTH_ME, 200*f ); + _header->resizeSection ( COLUMN_LAST_USED, 75*f ); // set header text aligment QTreeWidgetItem * headerItem = ui.connectTreeWidget->headerItem(); @@ -137,17 +145,9 @@ NetworkDialog::NetworkDialog(QWidget *parent) ui.connectTreeWidget->sortItems( COLUMN_PEERNAME, Qt::AscendingOrder ); -// ui.networkTab->addTab(new TrustView(),QString(tr("Authentication matrix"))); -// ui.networkTab->addTab(networkview = new NetworkView(),QString(tr("Network View"))); - - ui.onlyTrustedKeys->setMinimumWidth(20); + ui.onlyTrustedKeys->setMinimumWidth(20*f); QMenu *menu = new QMenu(); - //menu->addAction(ui.actionAddFriend); - //menu->addAction(ui.actionCopyKey); - //menu->addAction(ui.actionExportKey); - //menu->addAction(ui.actionCreate_New_Profile); - //menu->addSeparator(); menu->addAction(ui.actionTabsright); menu->addAction(ui.actionTabswest); menu->addAction(ui.actionTabssouth); @@ -155,20 +155,11 @@ NetworkDialog::NetworkDialog(QWidget *parent) menu->addSeparator(); menu->addAction(ui.actionTabsTriangular); menu->addAction(ui.actionTabsRounded); - //ui.viewButton->setMenu(menu); - - QTimer *timer2 = new QTimer(this); - connect(timer2, SIGNAL(timeout()), this, SLOT(updateNetworkStatus())); - timer2->start(1000); /* add filter actions */ ui.filterLineEdit->addFilter(QIcon(), tr("Name"), COLUMN_PEERNAME, tr("Search name")); ui.filterLineEdit->addFilter(QIcon(), tr("Peer ID"), COLUMN_PEERID, tr("Search peer ID")); ui.filterLineEdit->setCurrentFilter(COLUMN_PEERNAME); - - //updateNetworkStatus(); - //loadtabsettings(); - } void NetworkDialog::changeEvent(QEvent *e) @@ -200,19 +191,17 @@ void NetworkDialog::connectTreeWidgetCostumPopupMenu( QPoint /*point*/ ) if(!rsPeers->getGPGDetails(peer_id, detail)) // that is not suppose to fail. return ; - if(peer_id != rsPeers->getGPGOwnId()) - { - if(detail.accept_connection) - contextMnu->addAction(QIcon(IMAGE_DENIED), tr("Deny friend"), this, SLOT(denyFriend())); - else // not a friend - contextMnu->addAction(QIcon(IMAGE_MAKEFRIEND), tr("Make friend..."), this, SLOT(makeFriend())); - } +// if(peer_id != rsPeers->getGPGOwnId()) +// { +// if(detail.accept_connection) +// contextMnu->addAction(QIcon(IMAGE_DENIED), tr("Deny friend"), this, SLOT(denyFriend())); +// else // not a friend +// contextMnu->addAction(QIcon(IMAGE_MAKEFRIEND), tr("Make friend..."), this, SLOT(makeFriend())); +// } if(peer_id == rsPeers->getGPGOwnId()) contextMnu->addAction(QIcon(IMAGE_EXPORT), tr("Export/create a new node"), this, SLOT(on_actionExportKey_activated())); - contextMnu->addAction(QIcon(IMAGE_PEERDETAILS), tr("Peer details..."), this, SLOT(peerdetails())); - //contextMnu->addAction(QIcon(IMAGE_MESSAGE), tr("Send Message"), this, SLOT(sendDistantMessage())); - //contextMnu->addAction(QIcon(IMAGE_COPYLINK), tr("Copy RetroShare Link"), this, SLOT(copyLink())); + contextMnu->addAction(QIcon(IMAGE_PEERDETAILS), tr("Profile details..."), this, SLOT(peerdetails())); contextMnu->addSeparator() ; contextMnu->addAction(QIcon(IMAGE_CLEAN_UNUSED), tr("Remove unused keys..."), this, SLOT(removeUnusedKeys())); @@ -382,10 +371,6 @@ void NetworkDialog::insertConnect() // // Because this is called from a qt signal, there's no limitation between calls. time_t now = time(NULL); -// if(last_time + 5 > now) // never update more often then every 5 seconds. -// return ; -// -// last_time = now ; std::list neighs; //these are GPG ids std::list::iterator it; @@ -407,8 +392,6 @@ void NetworkDialog::insertConnect() else ++index; } - //QList validItems; - //QList unvalidItems; for(it = neighs.begin(); it != neighs.end(); ++it) { @@ -435,7 +418,7 @@ void NetworkDialog::insertConnect() #ifdef NET_DEBUG std::cerr << "NetworkDialog::insertConnect() creating new tree widget item : " << *it << std::endl; #endif - item = new RSTreeWidgetItem(NULL, 0); + item = new RSTreeWidgetItem(compareNetworkRole, 0); item -> setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); int S = QFontMetricsF(font()).height() ; @@ -490,7 +473,10 @@ void NetworkDialog::insertConnect() else lst_used_str = tr("%1 days ago").arg((int)( last_time_used / 86400 )) ; + QString lst_used_sort_str = QString::number(detail.lastUsed,'f',10); + item->setText(COLUMN_LAST_USED,lst_used_str) ; + item->setData(COLUMN_LAST_USED,ROLE_SORT,lst_used_sort_str) ; /** * Determinated the Background Color @@ -546,7 +532,7 @@ void NetworkDialog::insertConnect() if (list.size() == 1) { self_item = list.front(); } else { - self_item = new RSTreeWidgetItem(NULL, 0); + self_item = new RSTreeWidgetItem(compareNetworkRole, 0); self_item->setChildIndicatorPolicy(QTreeWidgetItem::DontShowIndicatorWhenChildless); } self_item -> setText(COLUMN_CHECK, "0"); @@ -589,58 +575,6 @@ RsPeerId getNeighRsCertId(QTreeWidgetItem *i) RsPeerId id ( (i -> text(COLUMN_PEERID)).toStdString() ); return id; } - -/* So from the Neighbours Dialog we can call the following control Functions: - * (1) Load Certificate NeighLoadCertificate(std::string file) - * (2) Neigh Auth NeighAuthFriend(id, code) - * (4) Neigh Add NeighAddFriend(id) - * - * All of these rely on the finding of the current Id. - */ - -//std::string NetworkDialog::loadneighbour() -//{ -//#ifdef NET_DEBUG -// std::cerr << "NetworkDialog::loadneighbour()" << std::endl; -//#endif -// use misc::getOpenFileName -// QString fileName = QFileDialog::getOpenFileName(this, tr("Select Certificate"), "", -// tr("Certificates (*.pqi *.pem)")); -// -// std::string file = fileName.toStdString(); -// std::string id; -// std::string gpg_id; -// if (file != "") -// { -// rsPeers->loadCertificateFromFile(file, id, gpg_id); -// } -// return id; -//} - -//void NetworkDialog::addneighbour() -//{ -//// QTreeWidgetItem *c = getCurrentNeighbour(); -//#ifdef NET_DEBUG -// std::cerr << "NetworkDialog::addneighbour()" << std::endl; -//#endif -// /* -// rsServer->NeighAddFriend(getNeighRsCertId(c)); -// */ -//} - -//void NetworkDialog::authneighbour() -//{ -//// QTreeWidgetItem *c = getCurrentNeighbour(); -//#ifdef NET_DEBUG -// std::cerr << "NetworkDialog::authneighbour()" << std::endl; -//#endif -// /* -// RsAuthId code; -// rsServer->NeighAuthFriend(getNeighRsCertId(c), code); -// */ -//} - -/** Open a QFileDialog to browse for a pem/pqi file. */ void NetworkDialog::on_actionAddFriend_activated() { // /* Create a new input dialog, which allows users to create files, too */ diff --git a/retroshare-gui/src/gui/NetworkDialog.h b/retroshare-gui/src/gui/NetworkDialog.h index 5fbe8e191..2d90e98e7 100644 --- a/retroshare-gui/src/gui/NetworkDialog.h +++ b/retroshare-gui/src/gui/NetworkDialog.h @@ -26,7 +26,9 @@ #include "ui_NetworkDialog.h" #include "RsAutoUpdatePage.h" -class NetworkDialog : public RsAutoUpdatePage +class RSTreeWidgetItemCompareRole ; + +class NetworkDialog : public RsAutoUpdatePage { Q_OBJECT @@ -118,6 +120,8 @@ private: QColor mBackgroundColorHasSignedMe; QColor mBackgroundColorDenied; + RSTreeWidgetItemCompareRole *compareNetworkRole ; + /** Qt Designer generated object */ Ui::NetworkDialog ui; };