OSDN Git Service

Addded context menu to "source file" view + make the "output folder" view update...
authorlordmulder <mulder2@gmx.de>
Thu, 25 Nov 2010 19:41:59 +0000 (20:41 +0100)
committerlordmulder <mulder2@gmx.de>
Thu, 25 Nov 2010 19:41:59 +0000 (20:41 +0100)
gui/MainWindow.ui
src/Config.h
src/Dialog_MainWindow.cpp
src/Dialog_MainWindow.h
src/Dialog_Processing.cpp

index 90d1c15..c0863ff 100644 (file)
             </item>
             <item>
              <widget class="QTreeView" name="outputFolderView">
+              <property name="editTriggers">
+               <set>QAbstractItemView::NoEditTriggers</set>
+              </property>
               <property name="alternatingRowColors">
                <bool>true</bool>
               </property>
   <include location="../res/Images.qrc"/>
   <include location="../res/Icons.qrc"/>
   <include location="../res/Images.qrc"/>
+  <include location="../res/Icons.qrc"/>
+  <include location="../res/Images.qrc"/>
  </resources>
  <connections>
   <connection>
index 602d08c..dd1aa74 100644 (file)
@@ -25,7 +25,7 @@
 #define VER_LAMEXP_MAJOR                               4
 #define VER_LAMEXP_MINOR_HI                            0
 #define VER_LAMEXP_MINOR_LO                            0
-#define VER_LAMEXP_BUILD                               80
+#define VER_LAMEXP_BUILD                               82
 #define VER_LAMEXP_SUFFIX                              TechPreview
 
 /*
index eb28673..ffec4da 100644 (file)
@@ -54,6 +54,7 @@
 #include <QWindowsMime>
 #include <QProcess>
 #include <QUuid>
+#include <QProcessEnvironment>
 
 //Win32 includes
 #include <Windows.h>
@@ -64,7 +65,6 @@
 #define SET_FONT_BOLD(WIDGET,BOLD) { QFont _font = WIDGET->font(); _font.setBold(BOLD); WIDGET->setFont(_font); }
 #define LINK(URL) QString("<a href=\"%1\">%2</a>").arg(URL).arg(URL)
 
-
 //Helper class
 class Index: public QObjectUserData
 {
@@ -114,11 +114,17 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
        sourceFileView->setModel(m_fileListModel);
        sourceFileView->verticalHeader()->setResizeMode(QHeaderView::ResizeToContents);
        sourceFileView->horizontalHeader()->setResizeMode(QHeaderView::ResizeToContents);
+       sourceFileView->setContextMenuPolicy(Qt::CustomContextMenu);
        m_dropNoteLabel = new QLabel(sourceFileView);
        m_dropNoteLabel->setAlignment(Qt::AlignHCenter | Qt::AlignVCenter);
        m_dropNoteLabel->setText("» You can drop in audio files here! «");
        SET_FONT_BOLD(m_dropNoteLabel, true);
        SET_TEXT_COLOR(m_dropNoteLabel, Qt::darkGray);
+       m_sourceFilesContextMenu = new QMenu();
+       QAction *showDetailsContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/zoom.png"), "Show Details");
+       QAction *previewContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/sound.png"), "Open File in External Application");
+       QAction *findFileContextAction = m_sourceFilesContextMenu->addAction(QIcon(":/icons/folder_go.png"), "Browse File Location");
+       SET_FONT_BOLD(showDetailsContextAction, true);
        connect(buttonAddFiles, SIGNAL(clicked()), this, SLOT(addFilesButtonClicked()));
        connect(buttonRemoveFile, SIGNAL(clicked()), this, SLOT(removeFileButtonClicked()));
        connect(buttonClearFiles, SIGNAL(clicked()), this, SLOT(clearFilesButtonClicked()));
@@ -128,7 +134,11 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
        connect(m_fileListModel, SIGNAL(rowsInserted(QModelIndex,int,int)), this, SLOT(sourceModelChanged()));
        connect(m_fileListModel, SIGNAL(rowsRemoved(QModelIndex,int,int)), this, SLOT(sourceModelChanged()));
        connect(m_fileListModel, SIGNAL(modelReset()), this, SLOT(sourceModelChanged()));
-       
+       connect(sourceFileView, SIGNAL(customContextMenuRequested(QPoint)), this, SLOT(sourceFilesContextMenu(QPoint)));
+       connect(showDetailsContextAction, SIGNAL(triggered(bool)), this, SLOT(showDetailsButtonClicked()));
+       connect(previewContextAction, SIGNAL(triggered(bool)), this, SLOT(previewContextActionTriggered()));
+       connect(findFileContextAction, SIGNAL(triggered(bool)), this, SLOT(findFileContextActionTriggered()));
+
        //Setup "Output" tab
        m_fileSystemModel = new QFileSystemModelEx();
        m_fileSystemModel->setRootPath(m_fileSystemModel->rootPath());
@@ -140,8 +150,12 @@ MainWindow::MainWindow(FileListModel *fileListModel, AudioFileModel *metaInfo, S
        outputFolderView->header()->hideSection(3);
        outputFolderView->setHeaderHidden(true);
        outputFolderView->setAnimated(true);
+       outputFolderView->installEventFilter(this);
+       outputFolderView->setMouseTracking(false);
        while(saveToSourceFolderCheckBox->isChecked() != m_settings->outputToSourceDir()) saveToSourceFolderCheckBox->click();
        connect(outputFolderView, SIGNAL(clicked(QModelIndex)), this, SLOT(outputFolderViewClicked(QModelIndex)));
+       connect(outputFolderView, SIGNAL(activated(QModelIndex)), this, SLOT(outputFolderViewClicked(QModelIndex)));
+       connect(outputFolderView, SIGNAL(entered(QModelIndex)), this, SLOT(outputFolderViewClicked(QModelIndex)));
        outputFolderView->setCurrentIndex(m_fileSystemModel->index(m_settings->outputDir()));
        outputFolderViewClicked(outputFolderView->currentIndex());
        connect(buttonMakeFolder, SIGNAL(clicked()), this, SLOT(makeFolderButtonClicked()));
@@ -284,6 +298,7 @@ MainWindow::~MainWindow(void)
        LAMEXP_DELETE(m_metaInfoModel);
        LAMEXP_DELETE(m_encoderButtonGroup);
        LAMEXP_DELETE(m_encoderButtonGroup);
+       LAMEXP_DELETE(m_sourceFilesContextMenu);
 }
 
 ////////////////////////////////////////////////////////////
@@ -401,7 +416,10 @@ bool MainWindow::eventFilter(QObject *obj, QEvent *event)
                QApplication::setOverrideCursor(QCursor(Qt::WaitCursor));
                QTimer::singleShot(250, this, SLOT(restoreCursor()));
        }
-
+       else if(obj == outputFolderView && (event->type() == QEvent::KeyRelease || event->type() == QEvent::KeyPress))
+       {
+               outputFolderViewClicked(outputFolderView->currentIndex());
+       }
        return false;
 }
 
@@ -1131,3 +1149,47 @@ void MainWindow::restoreCursor(void)
 {
        QApplication::restoreOverrideCursor();
 }
+
+/*
+ * Show context menu for source files
+ */
+void MainWindow::sourceFilesContextMenu(const QPoint &pos)
+{
+       m_sourceFilesContextMenu->popup(sourceFileView->mapToGlobal(pos));
+}
+
+/*
+ * Open selected file in external player
+ */
+void MainWindow::previewContextActionTriggered(void)
+{
+       QModelIndex index = sourceFileView->currentIndex();
+       if(index.isValid())
+       {
+               QDesktopServices::openUrl(QString("file:///").append(m_fileListModel->getFile(index).filePath()));
+       }
+}
+
+/*
+ * Find selected file in explorer
+ */
+void MainWindow::findFileContextActionTriggered(void)
+{
+       QModelIndex index = sourceFileView->currentIndex();
+       if(index.isValid())
+       {
+               QProcessEnvironment procEnv = QProcessEnvironment::systemEnvironment();
+               QString systemRootPath = procEnv.value("SystemRoot", procEnv.value("windir"));
+               if(!systemRootPath.isEmpty())
+               {
+                       QFileInfo explorer(QString("%1/explorer.exe").arg(systemRootPath));
+                       if(explorer.exists() && explorer.isFile())
+                       {
+                               QProcess::execute(explorer.canonicalFilePath(), QStringList() << "/select," << QDir::toNativeSeparators(m_fileListModel->getFile(index).filePath()));
+                               return;
+                       }
+               }
+               qWarning("SystemRoot directory could not be detected!");
+               QProcess::execute("explorer.exe", QStringList() << "/select," << QDir::toNativeSeparators(m_fileListModel->getFile(index).filePath()));
+       }
+}
index cba8c17..454b7a4 100644 (file)
@@ -33,6 +33,7 @@ class SettingsModel;
 class QButtonGroup;
 class FileListModel;
 class AbstractEncoder;
+class QMenu;
 
 class MainWindow: public QMainWindow, private Ui::MainWindow
 {
@@ -79,6 +80,9 @@ private slots:
        void playlistEnabledChanged(void);
        void saveToSourceFolderChanged(void);
        void restoreCursor(void);
+       void sourceFilesContextMenu(const QPoint &pos);
+       void previewContextActionTriggered(void);
+       void findFileContextActionTriggered(void);
 
 protected:
        void showEvent(QShowEvent *event);
@@ -107,4 +111,5 @@ private:
        MetaInfoModel *m_metaInfoModel;
        SettingsModel *m_settings;
        QLabel *m_dropNoteLabel;
+       QMenu *m_sourceFilesContextMenu;
 };
index 7e9bf3c..68b45f4 100644 (file)
@@ -254,6 +254,7 @@ void ProcessingDialog::doneEncoding(void)
                return;
        }
 
+       QApplication::setOverrideCursor(Qt::WaitCursor);
        qDebug("Running jobs: %u", m_runningThreads);
 
        if(!m_userAborted && m_settings->createPlaylist() && !m_settings->outputToSourceDir())
@@ -292,6 +293,8 @@ void ProcessingDialog::doneEncoding(void)
        view_log->scrollToBottom();
        m_progressIndicator->stop();
        progressBar->setValue(100);
+
+       QApplication::restoreOverrideCursor();
 }
 
 void ProcessingDialog::processFinished(const QUuid &jobId, const QString &outFileName, bool success)