summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorisanae <14251494+isanae@users.noreply.github.com>2020-01-22 03:29:40 -0500
committerisanae <14251494+isanae@users.noreply.github.com>2020-02-04 03:33:22 -0500
commit412165fcfbbd27d679a7400ebdef75ff3a9d6aa7 (patch)
tree2237075dd6d2023b9a180c2295133d759d36de64 /src
parent2a0e78e3cf0c1106a1fb7e470148f6e0b093b2b1 (diff)
show file counts when there are discrepancies
Diffstat (limited to 'src')
-rw-r--r--src/envshell.cpp32
-rw-r--r--src/envshell.h4
-rw-r--r--src/filetree.cpp16
3 files changed, 51 insertions, 1 deletions
diff --git a/src/envshell.cpp b/src/envshell.cpp
index e01bb804..33ec0624 100644
--- a/src/envshell.cpp
+++ b/src/envshell.cpp
@@ -185,6 +185,11 @@ void ShellMenu::addFile(QFileInfo fi)
m_files.emplace_back(std::move(fi));
}
+int ShellMenu::fileCount() const
+{
+ return static_cast<int>(m_files.size());
+}
+
void ShellMenu::exec(const QPoint& pos)
{
HMENU menu = getMenu();
@@ -529,6 +534,11 @@ ShellMenuCollection::ShellMenuCollection(QMainWindow* mw)
{
}
+void ShellMenuCollection::addDetails(QString s)
+{
+ m_details.emplace_back(std::move(s));
+}
+
void ShellMenuCollection::add(QString name, ShellMenu m)
{
m_menus.push_back({name, std::move(m)});
@@ -547,6 +557,28 @@ void ShellMenuCollection::exec(const QPoint& pos)
return;
}
+ if (!m_details.empty()) {
+ for (auto&& d : m_details) {
+ const auto s = d.toStdWString();
+ const auto r = AppendMenuW(menu, MF_STRING|MF_DISABLED, 0, s.c_str());
+
+ if (!r) {
+ const auto e = GetLastError();
+ log::error(
+ "AppendMenuW failed for details '{}', {}",
+ d, formatSystemMessage(e));
+ }
+ }
+
+ const auto r = AppendMenuW(menu, MF_SEPARATOR, 0, nullptr);
+ if (!r) {
+ const auto e = GetLastError();
+ log::error(
+ "AppendMenuW failed for separator, {}",
+ formatSystemMessage(e));
+ }
+ }
+
for (auto&& m : m_menus) {
auto hmenu = m.menu.getMenu();
if (!hmenu) {
diff --git a/src/envshell.h b/src/envshell.h
index 52125a5c..f9245a37 100644
--- a/src/envshell.h
+++ b/src/envshell.h
@@ -20,6 +20,7 @@ public:
ShellMenu& operator=(ShellMenu&&) = default;
void addFile(QFileInfo fi);
+ int fileCount() const;
void exec(const QPoint& pos);
HMENU getMenu();
@@ -57,7 +58,9 @@ class ShellMenuCollection
public:
ShellMenuCollection(QMainWindow* mw);
+ void addDetails(QString s);
void add(QString name, ShellMenu m);
+
void exec(const QPoint& pos);
private:
@@ -68,6 +71,7 @@ private:
};
QMainWindow* m_mw;
+ std::vector<QString> m_details;
std::vector<MenuInfo> m_menus;
MenuInfo* m_active;
diff --git a/src/filetree.cpp b/src/filetree.cpp
index 4e3db1f7..a826ed9a 100644
--- a/src/filetree.cpp
+++ b/src/filetree.cpp
@@ -487,6 +487,7 @@ void FileTree::showShellMenu(QPoint pos)
// menus by origin
std::map<int, env::ShellMenu> menus;
+ int totalFiles = 0;
for (auto&& index : m_tree->selectionModel()->selectedRows()) {
auto* item = m_model->itemFromIndex(index);
@@ -500,6 +501,7 @@ void FileTree::showShellMenu(QPoint pos)
}
itor->second.addFile(item->realPath());
+ ++totalFiles;
if (item->isConflicted()) {
const auto file = m_core.directoryStructure()->searchFile(
@@ -549,6 +551,7 @@ void FileTree::showShellMenu(QPoint pos)
menu.exec(m_tree->viewport()->mapToGlobal(pos));
} else {
env::ShellMenuCollection mc(mw);
+ bool hasDiscrepancies = false;
for (auto&& m : menus) {
const auto* origin = m_core.directoryStructure()->findOriginByID(m.first);
@@ -557,7 +560,18 @@ void FileTree::showShellMenu(QPoint pos)
continue;
}
- mc.add(QString::fromStdWString(origin->getName()), std::move(m.second));
+ QString caption = QString::fromStdWString(origin->getName());
+ if (m.second.fileCount() < totalFiles) {
+ const auto d = m.second.fileCount();
+ caption += " " + tr("(only has %1 file(s))").arg(d);
+ hasDiscrepancies = true;
+ }
+
+ mc.add(caption, std::move(m.second));
+ }
+
+ if (hasDiscrepancies) {
+ mc.addDetails(tr("%1 file(s) selected").arg(totalFiles));
}
mc.exec(m_tree->viewport()->mapToGlobal(pos));