From 2c29c303344dcd7ebc082a24afa7bde1cb73b882 Mon Sep 17 00:00:00 2001 From: unknown Date: Tue, 8 Jun 2010 22:32:11 +0200 Subject: [PATCH] added context menu in file browser to create new directories or remove files or directories --- qhimdtransfer/qhimdmainwindow.cpp | 73 +++++++++++++++++++++++++++++++++++++ qhimdtransfer/qhimdmainwindow.h | 10 +++++ 2 files changed, 83 insertions(+), 0 deletions(-) diff --git a/qhimdtransfer/qhimdmainwindow.cpp b/qhimdtransfer/qhimdmainwindow.cpp index 34ff44d..94c5ddc 100644 --- a/qhimdtransfer/qhimdmainwindow.cpp +++ b/qhimdtransfer/qhimdmainwindow.cpp @@ -250,6 +250,24 @@ void QHiMDMainWindow::init_local_browser() ui->localScan->setColumnWidth(0, 350); } +void QHiMDMainWindow::init_context_menu() +{ + newdir->setText(tr("new folder")); + newdir->setToolTip(tr("Create a new folder")); + newdir->setIconText(tr("new folder")); + + remove->setText(tr("remove")); + remove->setToolTip(tr("Remove file or directory")); + remove->setIconText(tr("remove")); + + QObject::connect(newdir, SIGNAL(triggered()), this, SLOT(action_newdir_triggered())); + QObject::connect(remove, SIGNAL(triggered()), this, SLOT(action_remove_triggered())); + + ui->localScan->addAction(newdir); + ui->localScan->addAction(remove); + ui->localScan->setContextMenuPolicy(Qt::ActionsContextMenu); +} + void QHiMDMainWindow::save_window_settings() { int i = 0; @@ -384,6 +402,8 @@ QHiMDMainWindow::QHiMDMainWindow(QWidget *parent) aboutDialog = new QHiMDAboutDialog; formatDialog = new QHiMDFormatDialog; uploadDialog = new QHiMDUploadDialog; + newdir = new QAction(this); + remove = new QAction(this); detect = createDetection(this); ui->setupUi(this); ui->updir->setText(settings.value("lastUploadDirectory", @@ -391,6 +411,7 @@ QHiMDMainWindow::QHiMDMainWindow(QWidget *parent) set_buttons_enable(1,0,0,0,0,0,1); init_himd_browser(); init_local_browser(); + init_context_menu(); read_window_settings(); ui->himd_devices->hide(); if(!autodetect_init()) @@ -402,6 +423,12 @@ QHiMDMainWindow::~QHiMDMainWindow() delete ui; } +void QHiMDMainWindow::contextMenuEvent(QContextMenuEvent * event) +{ + if(event->reason() == QContextMenuEvent::Mouse) + event->accept(); +} + /* Slots for the actions */ void QHiMDMainWindow::on_action_Download_triggered() @@ -555,3 +582,49 @@ void QHiMDMainWindow::on_himd_devices_activated(QString device) { open_himd_at(device); } + +void QHiMDMainWindow::action_newdir_triggered() +{ + QString newdir; + QModelIndex cur_index = ui->localScan->currentIndex(); + + if(!localmodel.fileInfo(cur_index).isDir()) + cur_index = localmodel.parent(cur_index); + + newdir = QFileDialog::getExistingDirectory(this, + tr("Please create the new folder now"), + localmodel.filePath(cur_index), + QFileDialog::ShowDirsOnly + | QFileDialog::DontResolveSymlinks + | QFileDialog::DontUseNativeDialog); + + if(newdir.isEmpty()) + return; + + ui->localScan->setCurrentIndex(localmodel.index(newdir)); + on_localScan_clicked(ui->localScan->currentIndex()); +} + +void QHiMDMainWindow::action_remove_triggered() +{ + int ret; + QModelIndex index = ui->localScan->currentIndex(); + QString file = localmodel.filePath(index); + + if((file == localmodel.rootPath()) || !localmodel.fileInfo(index).isWritable()) + return; + + ret = QMessageBox::question(this, tr("Removing file or directory"), + tr("Are you sure you want to remove ") + file + tr(" ?\n\n") + + tr("Note: The file or directory will be removed finally ") + + tr("and cannot be recovered"), + QMessageBox::Ok | QMessageBox::Cancel, + QMessageBox::Cancel); + + if(ret != QMessageBox::Ok) + return; + + ui->localScan->setCurrentIndex(localmodel.parent(index)); + on_localScan_clicked(ui->localScan->currentIndex()); + localmodel.remove(index); +} diff --git a/qhimdtransfer/qhimdmainwindow.h b/qhimdtransfer/qhimdmainwindow.h index 0ca406f..a57e263 100644 --- a/qhimdtransfer/qhimdmainwindow.h +++ b/qhimdtransfer/qhimdmainwindow.h @@ -5,6 +5,8 @@ #include #include #include +#include +#include #include "qhimdaboutdialog.h" #include "qhimdformatdialog.h" #include "qhimduploaddialog.h" @@ -42,6 +44,8 @@ private: QHiMDTracksModel trackmodel; QFileSystemModel localmodel; QSettings settings; + QAction * newdir; + QAction * remove; QString dumpmp3(const QHiMDTrack & trk, QString file); QString dumpoma(const QHiMDTrack & trk, QString file); QString dumppcm(const QHiMDTrack & trk, QString file); @@ -49,12 +53,16 @@ private: void set_buttons_enable(bool connect, bool download, bool upload, bool rename, bool del, bool format, bool quit); void init_himd_browser(); void init_local_browser(); + void init_context_menu(); void save_window_settings(); void read_window_settings(); bool autodetect_init(); void open_himd_at(const QString & path); void upload_to(const QString & path); +protected: + virtual void contextMenuEvent(QContextMenuEvent * event); + private slots: void on_action_Connect_triggered(); void on_action_Format_triggered(); @@ -68,6 +76,8 @@ private slots: void himd_found(QString path); void himd_removed(QString path); void on_himd_devices_activated(QString device); + void action_newdir_triggered(); + void action_remove_triggered(); signals: void himd_busy(QString path); -- 1.6.4.msysgit.0