diff --git a/retroshare-gui/src/gui/common/RsCollectionDialog.cpp b/retroshare-gui/src/gui/common/RsCollectionDialog.cpp index b73191fec..e78fbdf08 100644 --- a/retroshare-gui/src/gui/common/RsCollectionDialog.cpp +++ b/retroshare-gui/src/gui/common/RsCollectionDialog.cpp @@ -23,6 +23,7 @@ #include #include +#include #include #include #include @@ -50,6 +51,7 @@ #define MAX_FILE_ADDED_BEFORE_ASK 500 //Number of file added in Recursive mode before asking to continue +#define IMAGE_SEARCH ":/icons/svg/magnifying-glass.svg" /** * @brief The FSMSortFilterProxyModel class sort directory before file. @@ -140,9 +142,21 @@ RsCollectionDialog::RsCollectionDialog(const QString& collectionFileName ui.headerFrame->setHeaderImage(QPixmap(":/images/library64.png")); if(creation) + { ui.headerFrame->setHeaderText(tr("Collection Editor")); + ui.downloadFolder_LE->hide(); + ui.downloadFolder_LB->hide(); + } else + { ui.headerFrame->setHeaderText(tr("Download files")); + ui.downloadFolder_LE->show(); + ui.downloadFolder_LB->show(); + + ui.downloadFolder_LE->setText(QString::fromUtf8(rsFiles->getDownloadDirectory().c_str())) ; + + QObject::connect(ui.downloadFolder_LE,SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(openDestinationDirectoryMenu(QPoint))); + } // 1 - add all elements to the list. @@ -213,6 +227,46 @@ RsCollectionDialog::RsCollectionDialog(const QString& collectionFileName QMessageBox::warning(NULL,tr("Bad filenames have been cleaned"),tr("Some filenames or directory names contained forbidden characters.\nCharacters \",|,/,\\,<,>,*,? will be replaced by '_'.\n Concerned files are listed in red.")) ; } +void RsCollectionDialog::openDestinationDirectoryMenu(QPoint) +{ + QMenu contextMnu( this ); + + // pop a menu with existing entries and also a custom entry + // Now get the list of existing directories. + + std::list< SharedDirInfo> dirs ; + rsFiles->getSharedDirectories( dirs) ; + + for (std::list::const_iterator it(dirs.begin());it!=dirs.end();++it){ + // Check for existence of directory name + QFile directory( QString::fromUtf8((*it).filename.c_str())) ; + + if (!directory.exists()) continue ; + if (!(directory.permissions() & QFile::WriteOwner)) continue ; + + contextMnu.addAction(QString::fromUtf8((*it).filename.c_str()), this, SLOT(setDestinationDirectory()))->setData(QString::fromUtf8( (*it).filename.c_str() ) ) ; + } + + contextMnu.addAction( QIcon(IMAGE_SEARCH),tr("Specify..."),this,SLOT(chooseDestinationDirectory())); + + contextMnu.exec(QCursor::pos()) ; +} + +void RsCollectionDialog::setDestinationDirectory() +{ + QString dest_dir(qobject_cast(sender())->data().toString()) ; + ui.downloadFolder_LE->setText(dest_dir) ; +} + +void RsCollectionDialog::chooseDestinationDirectory() +{ + QString dest_dir = QFileDialog::getExistingDirectory(this,tr("Choose directory")) ; + + if(dest_dir.isNull()) + return ; + + ui.downloadFolder_LE->setText(dest_dir) ; +} /** * @brief RsCollectionDialog::~RsCollectionDialog */ @@ -1226,7 +1280,7 @@ void RsCollectionDialog::download() { std::cerr << "Downloading!" << std::endl; - QString dldir = QString::fromUtf8(rsFiles->getDownloadDirectory().c_str()) ; + QString dldir = ui.downloadFolder_LE->text(); std::cerr << "downloading all these files:" << std::endl; diff --git a/retroshare-gui/src/gui/common/RsCollectionDialog.h b/retroshare-gui/src/gui/common/RsCollectionDialog.h index bac5289b4..7ecf9b6da 100644 --- a/retroshare-gui/src/gui/common/RsCollectionDialog.h +++ b/retroshare-gui/src/gui/common/RsCollectionDialog.h @@ -49,6 +49,9 @@ private slots: void add() ; void addRecursive() ; void remove() ; + void chooseDestinationDirectory(); + void setDestinationDirectory(); + void openDestinationDirectoryMenu(QPoint pt); void processItem(QMap &dirToAdd , int &index , ColFileInfo &parent diff --git a/retroshare-gui/src/gui/common/RsCollectionDialog.ui b/retroshare-gui/src/gui/common/RsCollectionDialog.ui index 78e736c24..a1b2fd275 100644 --- a/retroshare-gui/src/gui/common/RsCollectionDialog.ui +++ b/retroshare-gui/src/gui/common/RsCollectionDialog.ui @@ -6,8 +6,8 @@ 0 0 - 693 - 525 + 969 + 778 @@ -67,19 +67,7 @@ QFrame::Plain - - - 0 - - - 0 - - - 0 - - - 0 - + @@ -403,7 +391,7 @@ - + @@ -424,6 +412,26 @@ + + + + Destination: + + + + + + + Qt::PreventContextMenu + + + Right click to change download directory + + + true + + +