All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH QGit 4/4] Create a separate submenu for tags
@ 2009-06-06 11:57 Markus Heidelberg
  0 siblings, 0 replies; only message in thread
From: Markus Heidelberg @ 2009-06-06 11:57 UTC (permalink / raw)
  To: Marco Costalba; +Cc: git, Markus Heidelberg

It is more logical and hierarchical correct not to begin listing tags in
the existing submenu. The remaining space of the main context menu is
halved for the branches and tags to be displayed before the submenu has
to be created.

A little downside is that now you can get 2 "More..." submenus for
branches and tags instead of only 1.

Signed-off-by: Markus Heidelberg <markus.heidelberg@web.de>
---
 src/mainimpl.cpp |   38 ++++++++++++++++++++++++++------------
 1 files changed, 26 insertions(+), 12 deletions(-)

diff --git a/src/mainimpl.cpp b/src/mainimpl.cpp
index 38bbfbe..9613fac 100644
--- a/src/mainimpl.cpp
+++ b/src/mainimpl.cpp
@@ -1138,7 +1138,8 @@ static int cntMenuEntries(const QMenu& menu) {
 void MainImpl::doContexPopup(SCRef sha) {
 
 	QMenu contextMenu(this);
-	QMenu contextSubMenu("More...", this);
+	QMenu contextBrnMenu("More branches...", this);
+	QMenu contextTagMenu("More tags...", this);
 	QMenu contextRmtMenu("Remote branches", this);
 
 	connect(&contextMenu, SIGNAL(triggered(QAction*)), this, SLOT(goRef_triggered(QAction*)));
@@ -1193,35 +1194,48 @@ void MainImpl::doContexPopup(SCRef sha) {
 		if (!contextRmtMenu.isEmpty())
 			contextMenu.addMenu(&contextRmtMenu);
 
+		// halve the possible remaining entries for branches and tags
+		int remainingEntries = (MAX_MENU_ENTRIES - cntMenuEntries(contextMenu));
+		int tagEntries = remainingEntries / 2;
+		int brnEntries = remainingEntries - tagEntries;
+
+		// display more branches, if there are few tags
+		if (tagEntries > tn.count())
+			tagEntries = tn.count();
+
+		// one branch less because of the "More branches..." submenu
+		if ((bn.count() > brnEntries) && tagEntries)
+			tagEntries++;
+
 		if (!bn.empty())
 			contextMenu.addSeparator();
 
 		FOREACH_SL (it, bn) {
-			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES
-					|| (*it == bn.last() && contextSubMenu.isEmpty() && tn.empty()))
+			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES - tagEntries
+					|| (*it == bn.last() && contextBrnMenu.isEmpty()))
 				act = contextMenu.addAction(*it);
 			else
-				act = contextSubMenu.addAction(*it);
+				act = contextBrnMenu.addAction(*it);
 
 			act->setData("Ref");
 		}
+		if (!contextBrnMenu.isEmpty())
+			contextMenu.addMenu(&contextBrnMenu);
+
 		if (!tn.empty())
-			if (!contextSubMenu.isEmpty())
-				contextSubMenu.addSeparator();
-			else
-				contextMenu.addSeparator();
+			contextMenu.addSeparator();
 
 		FOREACH_SL (it, tn) {
 			if (cntMenuEntries(contextMenu) < MAX_MENU_ENTRIES
-					|| (*it == tn.last() && contextSubMenu.isEmpty()))
+					|| (*it == tn.last() && contextTagMenu.isEmpty()))
 				act = contextMenu.addAction(*it);
 			else
-				act = contextSubMenu.addAction(*it);
+				act = contextTagMenu.addAction(*it);
 
 			act->setData("Ref");
 		}
-		if (!contextSubMenu.isEmpty())
-			contextMenu.addMenu(&contextSubMenu);
+		if (!contextTagMenu.isEmpty())
+			contextMenu.addMenu(&contextTagMenu);
 	}
 	contextMenu.exec(QCursor::pos());
 }
-- 
1.6.3.2.213.g30b07

^ permalink raw reply related	[flat|nested] only message in thread

only message in thread, other threads:[~2009-06-06 11:58 UTC | newest]

Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2009-06-06 11:57 [PATCH QGit 4/4] Create a separate submenu for tags Markus Heidelberg

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.