diff --git a/.gitmodules b/.gitmodules index 9ac26001d..c9696bc60 100644 --- a/.gitmodules +++ b/.gitmodules @@ -32,3 +32,6 @@ path = libretroshare url = ../libretroshare branch = master +[submodule "retroshare-webui"] + path = retroshare-webui + url = git@github.com:Retroshare/RSNewWebUI diff --git a/RetroShare.pro b/RetroShare.pro index 58ae659ab..944e8204e 100644 --- a/RetroShare.pro +++ b/RetroShare.pro @@ -68,6 +68,13 @@ retroshare_plugins { plugins.target = plugins } +rs_webui { + SUBDIRS += retroshare-webui + retroshare-webui.file = retroshare-webui/webui.pro + retroshare-webui.target = rs_webui + retroshare-webui.depends = retroshare_gui +} + wikipoos { SUBDIRS += pegmarkdown pegmarkdown.file = supportlibs/pegmarkdown/pegmarkdown.pro diff --git a/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp b/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp index 3c323e286..92003e0a6 100644 --- a/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp +++ b/retroshare-gui/src/gui/Circles/CreateCircleDialog.cpp @@ -357,8 +357,8 @@ void CreateCircleDialog::addMember(const QString& keyId, const QString& idtype, member->setText(RSCIRCLEID_COL_IDTYPE, idtype); tree->addTopLevelItem(member); - - ui.members_groupBox->setTitle( tr("Invited Members") + " (" + QString::number(ui.treeWidget_membership->topLevelItemCount()) + ")" ); + + updateMembership(); } /** Maybe we can use RsGxsCircleGroup instead of RsGxsCircleDetails ??? (TODO)**/ @@ -413,6 +413,8 @@ void CreateCircleDialog::removeMember() // does this just work? (TODO) delete(item); + + updateMembership(); } void CreateCircleDialog::createCircle() @@ -952,3 +954,8 @@ void CreateCircleDialog::MembershipListCustomPopupMenu( QPoint ) contextMnu.exec(QCursor::pos()); } +void CreateCircleDialog::updateMembership() +{ + ui.members_groupBox->setTitle( tr("Invited Members") + " (" + QString::number(ui.treeWidget_membership->topLevelItemCount()) + ")" ); +} + diff --git a/retroshare-gui/src/gui/Circles/CreateCircleDialog.h b/retroshare-gui/src/gui/Circles/CreateCircleDialog.h index fbbaacb2c..5e713b9c3 100644 --- a/retroshare-gui/src/gui/Circles/CreateCircleDialog.h +++ b/retroshare-gui/src/gui/Circles/CreateCircleDialog.h @@ -56,6 +56,7 @@ private slots: void filterChanged(const QString &text); void createNewGxsId(); void idTypeChanged(); + void updateMembership(); /** Create the context popup menu and it's submenus */ void IdListCustomPopupMenu( QPoint point ); diff --git a/retroshare-gui/src/gui/MainWindow.cpp b/retroshare-gui/src/gui/MainWindow.cpp index 0af20e824..a59d76dfb 100644 --- a/retroshare-gui/src/gui/MainWindow.cpp +++ b/retroshare-gui/src/gui/MainWindow.cpp @@ -1628,6 +1628,11 @@ NATStatus *MainWindow::natstatusInstance() return natstatus; } +void MainWindow::torstatusReset() +{ + if(torstatus != nullptr) + torstatus->reset(); +} DHTStatus *MainWindow::dhtstatusInstance() { return dhtstatus; diff --git a/retroshare-gui/src/gui/MainWindow.h b/retroshare-gui/src/gui/MainWindow.h index 23b70e66f..bac210f2c 100644 --- a/retroshare-gui/src/gui/MainWindow.h +++ b/retroshare-gui/src/gui/MainWindow.h @@ -187,6 +187,7 @@ public: RSComboBox *statusComboBoxInstance(); PeerStatus *peerstatusInstance(); NATStatus *natstatusInstance(); + void torstatusReset(); DHTStatus *dhtstatusInstance(); HashingStatus *hashingstatusInstance(); DiscStatus *discstatusInstance(); diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp index 8f4a91873..34724282f 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.cpp +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.cpp @@ -29,10 +29,10 @@ PulseMessage::PulseMessage(QWidget *parent) { setupUi(this); - connect(label_image1, SIGNAL(clicked()), this, SLOT(viewPicture())); - connect(label_image2, SIGNAL(clicked()), this, SLOT(viewPicture())); - connect(label_image3, SIGNAL(clicked()), this, SLOT(viewPicture())); - connect(label_image4, SIGNAL(clicked()), this, SLOT(viewPicture())); + connect(label_image1, SIGNAL(clicked()), this, SLOT(viewPictureOne())); + connect(label_image2, SIGNAL(clicked()), this, SLOT(viewPictureTwo())); + connect(label_image3, SIGNAL(clicked()), this, SLOT(viewPictureThree())); + connect(label_image4, SIGNAL(clicked()), this, SLOT(viewPictureFour())); } void PulseMessage::setup(RsWirePulseSPtr pulse) @@ -148,7 +148,7 @@ void PulseMessage::setRefImageCount(uint32_t count) } } -void PulseMessage::viewPicture() +void PulseMessage::viewPictureOne() { PhotoView *photoView = new PhotoView(this); @@ -158,21 +158,69 @@ void PulseMessage::viewPicture() pixmap.loadFromData(mPulse->mImage1.mData, mPulse->mImage1.mSize); photoView->setPixmap(pixmap); } - + + QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs); + + photoView->setTitle(QString::fromStdString(mPulse->mPulseText)); + photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName)); + photoView->setTime(timestamp); + //photoView->setGroupId(mPulse->mRefGroupId); + + photoView->show(); + + /* window will destroy itself! */ +} + +void PulseMessage::viewPictureTwo() +{ + PhotoView *photoView = new PhotoView(this); + if (!mPulse->mImage2.empty()) { // install image. QPixmap pixmap; pixmap.loadFromData(mPulse->mImage2.mData, mPulse->mImage2.mSize); photoView->setPixmap(pixmap); } - + + QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs); + + photoView->setTitle(QString::fromStdString(mPulse->mPulseText)); + photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName)); + photoView->setTime(timestamp); + //photoView->setGroupId(mPulse->mRefGroupId); + + photoView->show(); + + /* window will destroy itself! */ +} + +void PulseMessage::viewPictureThree() +{ + PhotoView *photoView = new PhotoView(this); + if (!mPulse->mImage3.empty()) { // install image. QPixmap pixmap; pixmap.loadFromData(mPulse->mImage3.mData, mPulse->mImage3.mSize); photoView->setPixmap(pixmap); } - + + QString timestamp = misc::timeRelativeToNow(mPulse->mRefPublishTs); + + photoView->setTitle(QString::fromStdString(mPulse->mPulseText)); + photoView->setGroupNameString(QString::fromStdString(mPulse->mRefGroupName)); + photoView->setTime(timestamp); + //photoView->setGroupId(mPulse->mRefGroupId); + + photoView->show(); + + /* window will destroy itself! */ +} + +void PulseMessage::viewPictureFour() +{ + PhotoView *photoView = new PhotoView(this); + if (!mPulse->mImage4.empty()) { // install image. QPixmap pixmap; diff --git a/retroshare-gui/src/gui/TheWire/PulseMessage.h b/retroshare-gui/src/gui/TheWire/PulseMessage.h index a2372ebbf..234f0da02 100644 --- a/retroshare-gui/src/gui/TheWire/PulseMessage.h +++ b/retroshare-gui/src/gui/TheWire/PulseMessage.h @@ -37,7 +37,10 @@ public: void setRefImageCount(uint32_t count); private slots: - void viewPicture(); + void viewPictureOne(); + void viewPictureTwo(); + void viewPictureThree(); + void viewPictureFour(); private: RsWirePulseSPtr mPulse; diff --git a/retroshare-gui/src/gui/common/Emoticons.cpp b/retroshare-gui/src/gui/common/Emoticons.cpp index 9da7530b1..2341039cd 100644 --- a/retroshare-gui/src/gui/common/Emoticons.cpp +++ b/retroshare-gui/src/gui/common/Emoticons.cpp @@ -51,7 +51,7 @@ static QHash iconcache; void Emoticons::load() { loadSmiley(); - filters << "*.png" << "*.jpg" << "*.gif" << "*.webp"; + filters << "*.png" << "*.jpg" << "*.jpeg" << "*.gif" << "*.webp"; stickerFolders << (QString::fromStdString(RsAccounts::AccountDirectory()) + "/stickers"); //under account, unique for user stickerFolders << (QString::fromStdString(RsAccounts::ConfigDirectory()) + "/stickers"); //under .retroshare, shared between users stickerFolders << (QString::fromStdString(RsAccounts::systemDataDirectory()) + "/stickers"); //exe's folder, shipped with RS diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.cpp index 365dab3f3..66eb0f793 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.cpp @@ -33,8 +33,8 @@ #include "retroshare/rsfiles.h" -GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent) : - QWidget(parent), mFile(file), ui(new Ui::GxsChannelFilesStatusWidget) +GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent,bool used_as_editor) : + QWidget(parent), mFile(file), mUsedAsEditor(used_as_editor),ui(new Ui::GxsChannelFilesStatusWidget) { ui->setupUi(this); @@ -46,7 +46,7 @@ GxsChannelFilesStatusWidget::GxsChannelFilesStatusWidget(const RsGxsFile &file, connect(ui->downloadPushButton, SIGNAL(clicked()), this, SLOT(download())); connect(ui->resumeToolButton, SIGNAL(clicked()), this, SLOT(resume())); connect(ui->pauseToolButton, SIGNAL(clicked()), this, SLOT(pause())); - connect(ui->cancelToolButton, SIGNAL(clicked()), this, SLOT(cancel())); + connect(ui->cancelToolButton, SIGNAL(clicked()), this, SLOT(cancel())); connect(ui->openFilePushButton, SIGNAL(clicked()), this, SLOT(openFile())); ui->downloadPushButton->setIcon(FilesDefs::getIconFromQtResourcePath(":/icons/png/download.png")); @@ -306,14 +306,19 @@ void GxsChannelFilesStatusWidget::resume() void GxsChannelFilesStatusWidget::cancel() { - if ((QMessageBox::question(this, "", tr("Are you sure that you want to cancel and delete the file?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) == QMessageBox::No) { - return; - } + // When QMessgeBox asks for cancel confirmtion, this makes the widget lose focus => since it is an editor widget, + // it gets destroyed by the parent list widget => subsequent code after the QMessageBox runs over a deleted object => crash + // In summary: no QMessageBox here when the Status widget is used as an editor. + + if(!mUsedAsEditor) + if ((QMessageBox::question(this, "", tr("Are you sure that you want to cancel and delete the file?"), QMessageBox::Yes | QMessageBox::No, QMessageBox::No)) == QMessageBox::No) { + return; + } rsFiles->FileCancel(mFile.mHash); emit onButtonClick();// Signals the parent widget to e.g. update the downloadable file count - check(); + check(); } void GxsChannelFilesStatusWidget::openFolder() @@ -327,8 +332,12 @@ void GxsChannelFilesStatusWidget::openFolder() QDir dir = QFileInfo(QString::fromUtf8(fileInfo.path.c_str())).absoluteDir(); if (dir.exists()) { if (!RsUrlHandler::openUrl(QUrl::fromLocalFile(dir.absolutePath()))) { - QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), dir.absolutePath())); - } + if(!mUsedAsEditor) + QMessageBox::warning(this, "", QString("%1 %2").arg(tr("Can't open folder"), dir.absolutePath())); + else + RsErr() << "Can't open folder " << dir.absolutePath().toStdString() ; + + } } } @@ -347,8 +356,12 @@ void GxsChannelFilesStatusWidget::openFile() std::cerr << "GxsChannelFilesStatusWidget(): can't open file " << fileInfo.path << std::endl; } }else{ - QMessageBox::information(this, tr("Play File"), - tr("File %1 does not exist at location.").arg(fileInfo.path.c_str())); - return; + if(!mUsedAsEditor) + QMessageBox::information(this, tr("Play File"), + tr("File %1 does not exist at location.").arg(fileInfo.path.c_str())); + else + RsErr() << "File " << fileInfo.path << " does not exist at location." ; + + return; } } diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.h b/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.h index 8f2f7f8e4..7ae09ce6b 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelFilesStatusWidget.h @@ -34,9 +34,10 @@ class GxsChannelFilesStatusWidget : public QWidget Q_OBJECT public: - explicit GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent = 0); + explicit GxsChannelFilesStatusWidget(const RsGxsFile &file, QWidget *parent = 0,bool used_as_editor=false); ~GxsChannelFilesStatusWidget(); + bool usedAsEditor() const { return mUsedAsEditor; } signals: void onButtonClick(); @@ -73,6 +74,8 @@ private: uint64_t mSize; uint64_t mDivisor; + bool mUsedAsEditor; + Ui::GxsChannelFilesStatusWidget *ui; }; diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostFilesModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostFilesModel.cpp index be2f288ac..a0db07085 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostFilesModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostFilesModel.cpp @@ -295,7 +295,7 @@ void RsGxsChannelPostFilesModel::setFilter(const QStringList& strings, uint32_t& { preMods(); - initEmptyHierarchy(); + mFilteredFiles.clear(); if(strings.empty()) { @@ -317,8 +317,6 @@ void RsGxsChannelPostFilesModel::setFilter(const QStringList& strings, uint32_t& } count = mFilteredFiles.size(); - std::cerr << "After filtering: " << count << " posts remain." << std::endl; - if (rowCount()>0) { beginInsertRows(QModelIndex(),0,rowCount()-1); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp index 1fa83926a..74bd7361f 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.cpp @@ -280,16 +280,18 @@ void ChannelPostDelegate::setWidgetGrid(bool use_grid) QWidget *ChannelPostFilesDelegate::createEditor(QWidget *parent, const QStyleOptionViewItem &/*option*/, const QModelIndex& index) const { - ChannelPostFileInfo file = index.data(Qt::UserRole).value() ; + ChannelPostFileInfo file = index.data(Qt::UserRole).value() ; - if(index.column() == RsGxsChannelPostFilesModel::COLUMN_FILES_FILE) - { - GxsChannelFilesStatusWidget* w = new GxsChannelFilesStatusWidget(file,parent); + if(index.column() == RsGxsChannelPostFilesModel::COLUMN_FILES_FILE) + { + GxsChannelFilesStatusWidget* w = new GxsChannelFilesStatusWidget(file,parent,true); + w->setFocusPolicy(Qt::StrongFocus); connect(w,SIGNAL(onButtonClick()),this->parent(),SLOT(updateDAll_PB())); - return w; - } - else - return NULL; + + return w; + } + else + return NULL; } void ChannelPostFilesDelegate::updateEditorGeometry(QWidget *editor, const QStyleOptionViewItem &option, const QModelIndex &/* index */) const { @@ -416,6 +418,8 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI connect(ui->postsTree->selectionModel(),SIGNAL(selectionChanged(const QItemSelection&,const QItemSelection&)),this,SLOT(showPostDetails())); connect(ui->postsTree,SIGNAL(customContextMenuRequested(const QPoint&)),this,SLOT(postContextMenu(const QPoint&))); + connect(ui->channel_TW,SIGNAL(currentChanged(int)),this,SLOT(currentTabChanged(int))); + connect(mChannelPostsModel,SIGNAL(channelPostsLoaded()),this,SLOT(postChannelPostLoad())); ui->postName_LB->hide(); @@ -501,6 +505,22 @@ GxsChannelPostsWidgetWithModel::GxsChannelPostsWidgetWithModel(const RsGxsGroupI }, mEventHandlerId, RsEventType::GXS_CHANNELS ); } +void GxsChannelPostsWidgetWithModel::currentTabChanged(int t) +{ + switch(t) + { + case CHANNEL_TABS_DETAILS: + case CHANNEL_TABS_FILES: + ui->showUnread_TB->setHidden(true); + ui->viewType_TB->setHidden(true); + break; + + case CHANNEL_TABS_POSTS: + ui->showUnread_TB->setHidden(false); + ui->viewType_TB->setHidden(false); + break; + } +} void GxsChannelPostsWidgetWithModel::updateZoomFactor(bool zoom_or_unzoom) { mChannelPostsDelegate->zoom(zoom_or_unzoom); diff --git a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h index 56e46f49d..70673f57f 100644 --- a/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h +++ b/retroshare-gui/src/gui/gxschannels/GxsChannelPostsWidgetWithModel.h @@ -47,7 +47,7 @@ class ChannelPostFilesDelegate: public QStyledItemDelegate Q_OBJECT public: - ChannelPostFilesDelegate(QObject *parent=0) : QStyledItemDelegate(parent){} + ChannelPostFilesDelegate(QObject *parent=0) : QStyledItemDelegate(parent){} virtual ~ChannelPostFilesDelegate(){} void paint(QPainter * painter, const QStyleOptionViewItem & option, const QModelIndex & index) const override; @@ -160,6 +160,7 @@ private slots: void markMessageUnread(); public slots: + void currentTabChanged(int t); void sortColumnFiles(int col,Qt::SortOrder so); void sortColumnPostFiles(int col,Qt::SortOrder so); void updateCommentsCount(int n); diff --git a/retroshare-gui/src/gui/msgs/MessageModel.cpp b/retroshare-gui/src/gui/msgs/MessageModel.cpp index 4e1debaba..a19087dc0 100644 --- a/retroshare-gui/src/gui/msgs/MessageModel.cpp +++ b/retroshare-gui/src/gui/msgs/MessageModel.cpp @@ -387,12 +387,11 @@ void RsMessageModel::setFilter(FilterType filter_type, const QStringList& string std::cerr << std::endl; #endif - preMods(); - mFilterType = filter_type; mFilterStrings = strings; - postMods(); + if(rowCount() > 0) + emit dataChanged(createIndex(0,0),createIndex(rowCount()-1,RsMessageModel::columnCount()-1)); } QVariant RsMessageModel::toolTipRole(const Rs::Msgs::MsgInfoSummary& fmpe,int column) const diff --git a/retroshare-gui/src/gui/settings/ServerPage.cpp b/retroshare-gui/src/gui/settings/ServerPage.cpp index 4dd49ed80..3dfe9069d 100755 --- a/retroshare-gui/src/gui/settings/ServerPage.cpp +++ b/retroshare-gui/src/gui/settings/ServerPage.cpp @@ -21,6 +21,7 @@ #include "ServerPage.h" #include +#include "gui/MainWindow.h" #include "rshare.h" #include "rsharesettings.h" #include "util/i2pcommon.h" @@ -1366,6 +1367,7 @@ void ServerPage::saveAddressesHiddenNode() void ServerPage::updateOutProxyIndicator() { + MainWindow::getInstance()->torstatusReset(); QTcpSocket socket ; // Tor @@ -1382,22 +1384,39 @@ void ServerPage::updateOutProxyIndicator() ui.iconlabel_tor_outgoing->setToolTip(tr("Tor proxy is not enabled")) ; } - // I2P - SAM - // Note: there is only "the SAM port", there is no additional proxy port! - samStatus ss; - rsAutoProxyMonitor::taskSync(autoProxyType::I2PSAM3, autoProxyTask::status, &ss); - if(ss.state == samStatus::samState::online) + if (mHiddenType == RS_HIDDEN_TYPE_I2P && mSamSettings.enable) { - socket.disconnectFromHost(); - ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ; - ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ; + // I2P - SAM + // Note: there is only "the SAM port", there is no additional proxy port! + samStatus ss; + rsAutoProxyMonitor::taskSync(autoProxyType::I2PSAM3, autoProxyTask::status, &ss); + if(ss.state == samStatus::samState::online) + { + socket.disconnectFromHost(); + ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ; + ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ; + } + else + { + ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ; + ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ; + } } else { - ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ; - ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ; + socket.connectToHost(ui.hiddenpage_proxyAddress_i2p->text(),ui.hiddenpage_proxyPort_i2p->text().toInt()); + if(socket.waitForConnected(500)) + { + socket.disconnectFromHost(); + ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_OK)) ; + ui.iconlabel_i2p_outgoing->setToolTip(tr("Proxy seems to work.")) ; + } + else + { + ui.iconlabel_i2p_outgoing->setPixmap(FilesDefs::getPixmapFromQtResourcePath(ICON_STATUS_UNKNOWN)) ; + ui.iconlabel_i2p_outgoing->setToolTip(tr("I2P proxy is not enabled")) ; + } } - socket.connectToHost(ui.hiddenpage_proxyAddress_i2p_2->text(), 7656); if(true == (mSamAccessible = socket.waitForConnected(1000))) { diff --git a/retroshare-gui/src/gui/statusbar/torstatus.cpp b/retroshare-gui/src/gui/statusbar/torstatus.cpp index fdde22337..d43de1df3 100644 --- a/retroshare-gui/src/gui/statusbar/torstatus.cpp +++ b/retroshare-gui/src/gui/statusbar/torstatus.cpp @@ -168,7 +168,7 @@ void TorStatus::getTorStatus() torstatusLabel->setToolTip( text + tr("Tor proxy is not available")); } } - if(hiddentype == RS_HIDDEN_TYPE_I2P) + else if(hiddentype == RS_HIDDEN_TYPE_I2P) { statusTor->setText("" + tr("I2P") + ":"); rsPeers->getProxyServer(RS_HIDDEN_TYPE_I2P, proxyaddr, proxyport, status); @@ -185,6 +185,11 @@ void TorStatus::getTorStatus() torstatusLabel->setToolTip( text + tr("i2p proxy is not available")); } } + else + { + torstatusLabel->setPixmap(FilesDefs::getPixmapFromQtResourcePath(":/icons/tile_inactive_48.png").scaledToHeight(S,Qt::SmoothTransformation)); + torstatusLabel->setToolTip(tr("No tor configuration")); + } _updated = true; } } diff --git a/retroshare-webui b/retroshare-webui new file mode 160000 index 000000000..a593b9c80 --- /dev/null +++ b/retroshare-webui @@ -0,0 +1 @@ +Subproject commit a593b9c808f90cce7d47a5de86c207ef8675945f