summaryrefslogtreecommitdiff
path: root/src/modinfodialogfiletree.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-12-02 15:29:23 -0500
committerGitHub <noreply@github.com>2019-12-02 15:29:23 -0500
commitd5a4077a4396058a9f79339dba0c29c4b742b60f (patch)
treea8f32d4aa0ec39600c32788c9022ea4559d408b6 /src/modinfodialogfiletree.cpp
parenteabca00c35d7af3b6822bb7857ef1e073807ca0a (diff)
parent3b78e436dbee043e4a3f81e5bfa09695c2a708c4 (diff)
Merge pull request #915 from isanae/lock-hook-shell
Lock, hook, shell
Diffstat (limited to 'src/modinfodialogfiletree.cpp')
-rw-r--r--src/modinfodialogfiletree.cpp130
1 files changed, 73 insertions, 57 deletions
diff --git a/src/modinfodialogfiletree.cpp b/src/modinfodialogfiletree.cpp
index 79ed4cba..e94b0a4f 100644
--- a/src/modinfodialogfiletree.cpp
+++ b/src/modinfodialogfiletree.cpp
@@ -24,6 +24,7 @@ FileTreeTab::FileTreeTab(ModInfoDialogTabContext cx)
m_actions.newFolder = new QAction(tr("&New Folder"), ui->filetree);
m_actions.open = new QAction(tr("&Open/Execute"), ui->filetree);
+ m_actions.runHooked = new QAction(tr("Open with &VFS"), ui->filetree);
m_actions.preview = new QAction(tr("&Preview"), ui->filetree);
m_actions.explore = new QAction(tr("Open in &Explorer"), ui->filetree);
m_actions.rename = new QAction(tr("&Rename"), ui->filetree);
@@ -31,8 +32,13 @@ FileTreeTab::FileTreeTab(ModInfoDialogTabContext cx)
m_actions.hide = new QAction(tr("&Hide"), ui->filetree);
m_actions.unhide = new QAction(tr("&Unhide"), ui->filetree);
+ auto bold = m_actions.open->font();
+ bold.setBold(true);
+ m_actions.open->setFont(bold);
+
connect(m_actions.newFolder, &QAction::triggered, [&]{ onCreateDirectory(); });
connect(m_actions.open, &QAction::triggered, [&]{ onOpen(); });
+ connect(m_actions.runHooked, &QAction::triggered, [&]{ onRunHooked(); });
connect(m_actions.preview, &QAction::triggered, [&]{ onPreview(); });
connect(m_actions.explore, &QAction::triggered, [&]{ onExplore(); });
connect(m_actions.rename, &QAction::triggered, [&]{ onRename(); });
@@ -45,6 +51,12 @@ FileTreeTab::FileTreeTab(ModInfoDialogTabContext cx)
connect(
ui->filetree, &QTreeView::customContextMenuRequested,
[&](const QPoint& pos){ onContextMenu(pos); });
+
+ // disable renaming on double click, open the file instead
+ ui->filetree->setEditTriggers(
+ ui->filetree->editTriggers() & (~QAbstractItemView::DoubleClicked));
+
+ connect(ui->filetree, &QTreeView::activated, [&](auto&&){ onOpen(); });
}
void FileTreeTab::clear()
@@ -140,7 +152,23 @@ void FileTreeTab::onOpen()
return;
}
- shell::Open(m_fs->filePath(selection));
+ core().processRunner()
+ .setFromFile(parentWidget(), m_fs->filePath(selection))
+ .setWaitForCompletion()
+ .run();
+}
+
+void FileTreeTab::onRunHooked()
+{
+ auto selection = singleSelection();
+ if (!selection.isValid()) {
+ return;
+ }
+
+ core().processRunner()
+ .setFromFile(parentWidget(), m_fs->filePath(selection), true)
+ .setWaitForCompletion()
+ .run();
}
void FileTreeTab::onPreview()
@@ -339,75 +367,53 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
QMenu menu(ui->filetree);
- bool enableNewFolder = true;
- bool enableOpen = true;
- bool enablePreview = true;
- bool enableExplore = true;
- bool enableRename = true;
- bool enableDelete = true;
- bool enableHide = true;
- bool enableUnhide = true;
+ bool enableNewFolder = false;
+ bool enableRun = false;
+ bool enableOpen = false;
+ bool enablePreview = false;
+ bool enableExplore = false;
+ bool enableRename = false;
+ bool enableDelete = false;
+ bool enableHide = false;
+ bool enableUnhide = false;
if (selection.size() == 0) {
// no selection, only new folder and explore
- enableOpen = false;
- enablePreview = false;
- enableRename = false;
- enableDelete = false;
- enableHide = false;
- enableUnhide = false;
+ enableNewFolder = true;
+ enableExplore = true;
} else if (selection.size() == 1) {
// single selection
+ enableNewFolder = true;
+ enableRename = true;
+ enableDelete = true;
// only enable open action if a file is selected
bool hasFiles = false;
- for (auto index : selection) {
- if (m_fs->fileInfo(index).isFile()) {
- hasFiles = true;
- break;
- }
- }
-
- if (!hasFiles) {
- enableOpen = false;
- enablePreview = false;
- }
-
const QString fileName = m_fs->fileName(selection[0]);
- if (!canPreviewFile(plugin(), false, fileName)) {
- enablePreview = false;
- }
-
- if (!canExploreFile(false, fileName)) {
- enableExplore = false;
- }
-
- if (!canHideFile(false, fileName)) {
- enableHide = false;
+ if (m_fs->fileInfo(selection[0]).isFile()) {
+ if (canRunFile(false, fileName)) {
+ enableRun = true;
+ } else if (canOpenFile(false, fileName)) {
+ enableOpen = true;
+ }
}
- if (!canUnhideFile(false, fileName)) {
- enableUnhide = false;
- }
+ enablePreview = canPreviewFile(plugin(), false, fileName);
+ enableExplore = canExploreFile(false, fileName);
+ enableHide = canHideFile(false, fileName);
+ enableUnhide = canUnhideFile(false, fileName);
} else {
- // this is a multiple selection, don't show open action so users don't open
- // a thousand files
- enableOpen = false;
- enablePreview = false;
-
- // can't explore multiple files
- enableExplore = false;
-
- // can't rename multiple files
- enableRename = false;
+ // this is a multiple selection, don't show open or explore actions so users
+ // don't open a thousand files
+ enableNewFolder = true;
+ enablePreview = true;
+ enableDelete = true;
if (selection.size() < max_scan_for_context_menu) {
// if the number of selected items is low, checking them to accurately
// show the menu items is worth it
- enableHide = false;
- enableUnhide = false;
for (const auto& index : selection) {
const QString fileName = m_fs->fileName(index);
@@ -428,11 +434,14 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
}
}
- menu.addAction(m_actions.newFolder);
- m_actions.newFolder->setEnabled(enableNewFolder);
-
- menu.addAction(m_actions.open);
- m_actions.open->setEnabled(enableOpen);
+ if (enableRun) {
+ m_actions.open->setText(tr("&Execute"));
+ menu.addAction(m_actions.open);
+ } else if (enableOpen) {
+ m_actions.open->setText(tr("&Open"));
+ menu.addAction(m_actions.open);
+ menu.addAction(m_actions.runHooked);
+ }
menu.addAction(m_actions.preview);
m_actions.preview->setEnabled(enablePreview);
@@ -440,12 +449,19 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
menu.addAction(m_actions.explore);
m_actions.explore->setEnabled(enableExplore);
+ menu.addSeparator();
+
+ menu.addAction(m_actions.newFolder);
+ m_actions.newFolder->setEnabled(enableNewFolder);
+
menu.addAction(m_actions.rename);
m_actions.rename->setEnabled(enableRename);
menu.addAction(m_actions.del);
m_actions.del->setEnabled(enableDelete);
+ menu.addSeparator();
+
menu.addAction(m_actions.hide);
m_actions.hide->setEnabled(enableHide);