summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2019-06-27 11:30:46 -0400
committerisanae <14251494+isanae@users.noreply.github.com>2019-07-02 10:10:19 -0400
commita818954ee5d02b8723f5b48f458a0c76f9ba1935 (patch)
tree86a892d029f463827f67f1d5a59061ade895aa86 /src
parent4b958d9efed3834ceaa57f6c50a1e8288eff01b0 (diff)
added explore menu item to conflict lists and filetree
changed filetree context menu to always show all items added mnemonics to conflicts context menu
Diffstat (limited to 'src')
-rw-r--r--src/modinfodialog.cpp6
-rw-r--r--src/modinfodialog.h1
-rw-r--r--src/modinfodialogconflicts.cpp43
-rw-r--r--src/modinfodialogconflicts.h3
-rw-r--r--src/modinfodialogfiletree.cpp178
-rw-r--r--src/modinfodialogfiletree.h2
6 files changed, 153 insertions, 80 deletions
diff --git a/src/modinfodialog.cpp b/src/modinfodialog.cpp
index 7696023f..2772994c 100644
--- a/src/modinfodialog.cpp
+++ b/src/modinfodialog.cpp
@@ -66,6 +66,12 @@ bool canOpenFile(bool isArchive, const QString&)
return !isArchive;
}
+bool canExploreFile(bool isArchive, const QString&)
+{
+ // can explore anything as long as it's not in an archive
+ return !isArchive;
+}
+
bool canHideFile(bool isArchive, const QString& filename)
{
if (isArchive) {
diff --git a/src/modinfodialog.h b/src/modinfodialog.h
index 6dc66003..273af8c7 100644
--- a/src/modinfodialog.h
+++ b/src/modinfodialog.h
@@ -36,6 +36,7 @@ class MainWindow;
bool canPreviewFile(PluginContainer& pluginContainer, bool isArchive, const QString& filename);
bool canOpenFile(bool isArchive, const QString& filename);
+bool canExploreFile(bool isArchive, const QString& filename);
bool canHideFile(bool isArchive, const QString& filename);
bool canUnhideFile(bool isArchive, const QString& filename);
diff --git a/src/modinfodialogconflicts.cpp b/src/modinfodialogconflicts.cpp
index e631db30..a3383a50 100644
--- a/src/modinfodialogconflicts.cpp
+++ b/src/modinfodialogconflicts.cpp
@@ -7,6 +7,7 @@
using namespace MOShared;
using namespace MOBase;
+namespace shell = MOBase::shell;
// if there are more than 50 selected items in the conflict tree, don't bother
// checking whether menu items apply to them, just show all of them
@@ -91,6 +92,11 @@ public:
return canPreviewFile(pluginContainer, isArchive(), fileName());
}
+ bool canExplore() const
+ {
+ return canExploreFile(isArchive(), fileName());
+ }
+
private:
QString m_before;
QString m_relativeName;
@@ -533,6 +539,16 @@ void ConflictsTab::previewItems(QTreeView* tree)
});
}
+void ConflictsTab::exploreItems(QTreeView* tree)
+{
+ // the menu item is only shown for a single selection, but handle all of them
+ // in case this changes
+ for_each_in_selection(tree, [&](const ConflictItem* item) {
+ shell::ExploreFile(item->fileName());
+ return true;
+ });
+}
+
void ConflictsTab::showContextMenu(const QPoint &pos, QTreeView* tree)
{
auto actions = createMenuActions(tree);
@@ -557,6 +573,15 @@ void ConflictsTab::showContextMenu(const QPoint &pos, QTreeView* tree)
menu.addAction(actions.preview);
}
+ // explore
+ if (actions.explore) {
+ connect(actions.explore, &QAction::triggered, [&]{
+ exploreItems(tree);
+ });
+
+ menu.addAction(actions.explore);
+ }
+
// hide
if (actions.hide) {
connect(actions.hide, &QAction::triggered, [&]{
@@ -603,6 +628,7 @@ ConflictsTab::Actions ConflictsTab::createMenuActions(QTreeView* tree)
bool enableUnhide = true;
bool enableOpen = true;
bool enablePreview = true;
+ bool enableExplore = true;
bool enableGoto = true;
const auto n = smallSelectionSize(tree);
@@ -626,6 +652,7 @@ ConflictsTab::Actions ConflictsTab::createMenuActions(QTreeView* tree)
enableUnhide = item->canUnhide();
enableOpen = item->canOpen();
enablePreview = item->canPreview(plugin());
+ enableExplore = item->canExplore();
enableGoto = item->hasAlts();
}
else {
@@ -634,6 +661,9 @@ ConflictsTab::Actions ConflictsTab::createMenuActions(QTreeView* tree)
enableOpen = false;
enablePreview = false;
+ // can't explore multiple files
+ enableExplore = false;
+
// don't bother with this on multiple selection, at least for now
enableGoto = false;
@@ -664,21 +694,24 @@ ConflictsTab::Actions ConflictsTab::createMenuActions(QTreeView* tree)
Actions actions;
- actions.hide = new QAction(tr("Hide"), parentWidget());
+ actions.hide = new QAction(tr("&Hide"), parentWidget());
actions.hide->setEnabled(enableHide);
// note that it is possible for hidden files to appear if they override other
// hidden files from another mod
- actions.unhide = new QAction(tr("Unhide"), parentWidget());
+ actions.unhide = new QAction(tr("&Unhide"), parentWidget());
actions.unhide->setEnabled(enableUnhide);
- actions.open = new QAction(tr("Open/Execute"), parentWidget());
+ actions.open = new QAction(tr("&Open/Execute"), parentWidget());
actions.open->setEnabled(enableOpen);
- actions.preview = new QAction(tr("Preview"), parentWidget());
+ actions.preview = new QAction(tr("&Preview"), parentWidget());
actions.preview->setEnabled(enablePreview);
- actions.gotoMenu = new QMenu(tr("Go to..."), parentWidget());
+ actions.explore = new QAction(tr("Open in &Explorer"), parentWidget());
+ actions.explore->setEnabled(enableExplore);
+
+ actions.gotoMenu = new QMenu(tr("&Go to..."), parentWidget());
actions.gotoMenu->setEnabled(enableGoto);
if (enableGoto && n == 1) {
diff --git a/src/modinfodialogconflicts.h b/src/modinfodialogconflicts.h
index fc7dd32a..3fa12231 100644
--- a/src/modinfodialogconflicts.h
+++ b/src/modinfodialogconflicts.h
@@ -115,6 +115,7 @@ public:
void openItems(QTreeView* tree);
void previewItems(QTreeView* tree);
+ void exploreItems(QTreeView* tree);
void changeItemsVisibility(QTreeView* tree, bool visible);
@@ -127,7 +128,9 @@ private:
QAction* unhide = nullptr;
QAction* open = nullptr;
QAction* preview = nullptr;
+ QAction* explore = nullptr;
QMenu* gotoMenu = nullptr;
+
std::vector<QAction*> gotoActions;
};
diff --git a/src/modinfodialogfiletree.cpp b/src/modinfodialogfiletree.cpp
index 24faec5e..6690dd2f 100644
--- a/src/modinfodialogfiletree.cpp
+++ b/src/modinfodialogfiletree.cpp
@@ -24,8 +24,9 @@ FileTreeTab::FileTreeTab(
ui->filetree->setColumnWidth(0, 300);
m_actions.newFolder = new QAction(tr("&New Folder"), ui->filetree);
- m_actions.open = new QAction(tr("&Open"), ui->filetree);
+ m_actions.open = new QAction(tr("&Open/Execute"), 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);
m_actions.del = new QAction(tr("&Delete"), ui->filetree);
m_actions.hide = new QAction(tr("&Hide"), ui->filetree);
@@ -34,6 +35,7 @@ FileTreeTab::FileTreeTab(
connect(m_actions.newFolder, &QAction::triggered, [&]{ onCreateDirectory(); });
connect(m_actions.open, &QAction::triggered, [&]{ onOpen(); });
connect(m_actions.preview, &QAction::triggered, [&]{ onPreview(); });
+ connect(m_actions.explore, &QAction::triggered, [&]{ onExplore(); });
connect(m_actions.rename, &QAction::triggered, [&]{ onRename(); });
connect(m_actions.del, &QAction::triggered, [&]{ onDelete(); });
connect(m_actions.hide, &QAction::triggered, [&]{ onHide(); });
@@ -140,6 +142,17 @@ void FileTreeTab::onPreview()
core().previewFile(parentWidget(), mod()->name(), m_fs->filePath(selection));
}
+void FileTreeTab::onExplore()
+{
+ auto selection = singleSelection();
+
+ if (selection.isValid()) {
+ shell::ExploreFile(m_fs->filePath(selection));
+ } else {
+ shell::ExploreFile(mod()->absolutePath());
+ }
+}
+
void FileTreeTab::onRename()
{
auto selection = singleSelection();
@@ -316,103 +329,118 @@ void FileTreeTab::onContextMenu(const QPoint &pos)
QMenu menu(ui->filetree);
- menu.addAction(m_actions.newFolder);
-
- if (selection.size() > 0) {
- bool enableOpen = true;
- bool enablePreview = true;
- bool enableRename = true;
- bool enableDelete = true;
- bool enableHide = true;
- bool enableUnhide = true;
+ bool enableNewFolder = true;
+ bool enableOpen = true;
+ bool enablePreview = true;
+ bool enableExplore = true;
+ bool enableRename = true;
+ bool enableDelete = true;
+ bool enableHide = true;
+ bool enableUnhide = true;
- if (selection.size() == 1) {
- // single selection
+ if (selection.size() == 0) {
+ // no selection, only new folder and explore
+ enableOpen = false;
+ enablePreview = false;
+ enableRename = false;
+ enableDelete = false;
+ enableHide = false;
+ enableUnhide = false;
+ } else if (selection.size() == 1) {
+ // single selection
- // only enable open action if a file is selected
- bool hasFiles = false;
+ // 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;
- }
+ for (auto index : selection) {
+ if (m_fs->fileInfo(index).isFile()) {
+ hasFiles = true;
+ break;
}
+ }
- if (!hasFiles) {
- enableOpen = false;
- enablePreview = false;
- }
+ if (!hasFiles) {
+ enableOpen = false;
+ enablePreview = false;
+ }
- const QString fileName = m_fs->fileName(selection[0]);
+ const QString fileName = m_fs->fileName(selection[0]);
- if (!canPreviewFile(plugin(), false, fileName)) {
- enablePreview = false;
- }
+ if (!canPreviewFile(plugin(), false, fileName)) {
+ enablePreview = false;
+ }
- if (!canHideFile(false, fileName)) {
- enableHide = false;
- }
+ if (!canExploreFile(false, fileName)) {
+ enableExplore = false;
+ }
- if (!canUnhideFile(false, fileName)) {
- enableUnhide = false;
- }
- } else {
- // this is a multiple selection, don't show open action so users don't open
- // a thousand files
- enableOpen = false;
- enablePreview = false;
- enableRename = false;
+ if (!canHideFile(false, fileName)) {
+ enableHide = false;
+ }
+
+ if (!canUnhideFile(false, fileName)) {
+ enableUnhide = false;
+ }
+ } 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;
- 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;
+ 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);
+ for (const auto& index : selection) {
+ const QString fileName = m_fs->fileName(index);
- if (canHideFile(false, fileName)) {
- enableHide = true;
- }
+ if (canHideFile(false, fileName)) {
+ enableHide = true;
+ }
- if (canUnhideFile(false, fileName)) {
- enableUnhide = true;
- }
+ if (canUnhideFile(false, fileName)) {
+ enableUnhide = true;
+ }
- if (enableHide && enableUnhide) {
- // found both, no need to check more
- break;
- }
+ if (enableHide && enableUnhide) {
+ // found both, no need to check more
+ break;
}
}
}
+ }
- if (enableOpen) {
- menu.addAction(m_actions.open);
- }
+ menu.addAction(m_actions.newFolder);
+ m_actions.newFolder->setEnabled(enableNewFolder);
- if (enablePreview) {
- menu.addAction(m_actions.preview);
- }
+ menu.addAction(m_actions.open);
+ m_actions.open->setEnabled(enableOpen);
- if (enableRename) {
- menu.addAction(m_actions.rename);
- }
+ menu.addAction(m_actions.preview);
+ m_actions.preview->setEnabled(enablePreview);
- if (enableDelete) {
- menu.addAction(m_actions.del);
- }
+ menu.addAction(m_actions.explore);
+ m_actions.explore->setEnabled(enableExplore);
- if (enableHide) {
- menu.addAction(m_actions.hide);
- }
+ menu.addAction(m_actions.rename);
+ m_actions.rename->setEnabled(enableRename);
- if (enableUnhide) {
- menu.addAction(m_actions.unhide);
- }
- }
+ menu.addAction(m_actions.del);
+ m_actions.del->setEnabled(enableDelete);
+
+ menu.addAction(m_actions.hide);
+ m_actions.hide->setEnabled(enableHide);
+
+ menu.addAction(m_actions.unhide);
+ m_actions.unhide->setEnabled(enableUnhide);
menu.exec(ui->filetree->viewport()->mapToGlobal(pos));
}
diff --git a/src/modinfodialogfiletree.h b/src/modinfodialogfiletree.h
index 2145f298..9f5206b9 100644
--- a/src/modinfodialogfiletree.h
+++ b/src/modinfodialogfiletree.h
@@ -20,6 +20,7 @@ private:
QAction *newFolder = nullptr;
QAction *open = nullptr;
QAction *preview = nullptr;
+ QAction *explore = nullptr;
QAction *rename = nullptr;
QAction *del = nullptr;
QAction *hide = nullptr;
@@ -32,6 +33,7 @@ private:
void onCreateDirectory();
void onOpen();
void onPreview();
+ void onExplore();
void onRename();
void onDelete();
void onHide();