summaryrefslogtreecommitdiff
path: root/src/filetree.cpp
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-02-02 17:07:51 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-04 03:33:23 -0500
commit47d1826f55c66a039951d922dabab8b01324bebb (patch)
treea55665174c27c6d6c55bc97fcb6ab4e26eee519b /src/filetree.cpp
parent97b91b5fe5077228a82c622e4af6a9b698396fda (diff)
hidden unique_ptr into FileTreeItem
refactored pruning don't show shell menu for directories added collapse all in context menu
Diffstat (limited to 'src/filetree.cpp')
-rw-r--r--src/filetree.cpp37
1 files changed, 31 insertions, 6 deletions
diff --git a/src/filetree.cpp b/src/filetree.cpp
index a826ed9a..41b10586 100644
--- a/src/filetree.cpp
+++ b/src/filetree.cpp
@@ -442,8 +442,11 @@ void FileTree::onContextMenu(const QPoint &pos)
const auto m = QApplication::keyboardModifiers();
if (m & Qt::ShiftModifier) {
- showShellMenu(pos);
- return;
+ // if no shell menu was available, continue on and show the regular
+ // context menu
+ if (showShellMenu(pos)) {
+ return;
+ }
}
QMenu menu;
@@ -481,13 +484,14 @@ QMainWindow* getMainWindow(QWidget* w)
return nullptr;
}
-void FileTree::showShellMenu(QPoint pos)
+bool FileTree::showShellMenu(QPoint pos)
{
auto* mw = getMainWindow(m_tree);
// menus by origin
std::map<int, env::ShellMenu> menus;
int totalFiles = 0;
+ bool hasDirectory = false;
for (auto&& index : m_tree->selectionModel()->selectedRows()) {
auto* item = m_model->itemFromIndex(index);
@@ -495,6 +499,16 @@ void FileTree::showShellMenu(QPoint pos)
continue;
}
+ if (item->isDirectory()) {
+ hasDirectory = true;
+
+ log::warn(
+ "directories do not have shell menus; '{}' selected",
+ item->filename());
+
+ continue;
+ }
+
auto itor = menus.find(item->originID());
if (itor == menus.end()) {
itor = menus.emplace(item->originID(), mw).first;
@@ -543,8 +557,13 @@ void FileTree::showShellMenu(QPoint pos)
}
if (menus.empty()) {
- log::warn("no menus to show");
- return;
+ // don't warn if a directory was selected, a warning has already been
+ // logged above
+ if (!hasDirectory) {
+ log::warn("no menus to show");
+ }
+
+ return false;
}
else if (menus.size() == 1) {
auto& menu = menus.begin()->second;
@@ -576,6 +595,8 @@ void FileTree::showShellMenu(QPoint pos)
mc.exec(m_tree->viewport()->mapToGlobal(pos));
}
+
+ return true;
}
void FileTree::addDirectoryMenus(QMenu&, FileTreeItem&)
@@ -720,7 +741,11 @@ void FileTree::addCommonMenus(QMenu& menu)
.hint(QObject::tr("Refreshes the list"))
.addTo(menu);
- MenuItem(QObject::tr("E&xpand All"))
+ MenuItem(QObject::tr("Ex&pand All"))
.callback([&]{ m_tree->expandAll(); })
.addTo(menu);
+
+ MenuItem(QObject::tr("&Collapse All"))
+ .callback([&]{ m_tree->collapseAll(); })
+ .addTo(menu);
}