From 0451e04bc76eabf11b5f6e02b5323aceb464d4b8 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Sat, 07 Jan 2012 16:38:58 -0500
Subject: [PATCH] Updated screenshots take 2

---
 src/com/gitblit/wicket/PageRegistration.java |   59 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++---
 1 files changed, 56 insertions(+), 3 deletions(-)

diff --git a/src/com/gitblit/wicket/PageRegistration.java b/src/com/gitblit/wicket/PageRegistration.java
index f7ddcc5..fe76a85 100644
--- a/src/com/gitblit/wicket/PageRegistration.java
+++ b/src/com/gitblit/wicket/PageRegistration.java
@@ -76,17 +76,17 @@
 
 		private static final long serialVersionUID = 1L;
 
+		final PageParameters parameters;
 		final String displayText;
 		final String parameter;
 		final String value;
+		final boolean isSelected;
 
 		/**
 		 * Divider constructor.
 		 */
 		public DropDownMenuItem() {
-			displayText = null;
-			parameter = null;
-			value = null;
+			this(null, null, null, null);
 		}
 
 		/**
@@ -97,9 +97,54 @@
 		 * @param value
 		 */
 		public DropDownMenuItem(String displayText, String parameter, String value) {
+			this(displayText, parameter, value, null);
+		}
+
+		/**
+		 * Standard Menu Item constructor that preserves aggregate parameters.
+		 * 
+		 * @param displayText
+		 * @param parameter
+		 * @param value
+		 */
+		public DropDownMenuItem(String displayText, String parameter, String value,
+				PageParameters params) {
 			this.displayText = displayText;
 			this.parameter = parameter;
 			this.value = value;
+
+			if (params == null) {
+				// no parameters specified
+				parameters = new PageParameters();
+				setParameter(parameter, value);
+				isSelected = false;
+			} else {
+				parameters = new PageParameters(params);
+				if (parameters.containsKey(parameter)) {
+					isSelected = params.getString(parameter).equals(value);
+					if (isSelected) {
+						// already selected, so remove this enables toggling
+						parameters.remove(parameter);
+					} else {
+						// set the new selection value
+						setParameter(parameter, value);
+					}
+				} else {
+					// not currently selected
+					isSelected = false;
+					setParameter(parameter, value);
+				}
+			}
+		}
+
+		private void setParameter(String parameter, String value) {
+			if (!StringUtils.isEmpty(parameter)) {
+				if (StringUtils.isEmpty(value)) {
+					this.parameters.remove(parameter);
+				} else {
+					this.parameters.put(parameter, value);
+				}
+			}
 		}
 
 		public String formatParameter() {
@@ -109,10 +154,18 @@
 			return parameter + "=" + value;
 		}
 
+		public PageParameters getPageParameters() {
+			return parameters;
+		}
+
 		public boolean isDivider() {
 			return displayText == null && value == null && parameter == null;
 		}
 
+		public boolean isSelected() {
+			return isSelected;
+		}
+
 		@Override
 		public int hashCode() {
 			if (isDivider()) {

--
Gitblit v1.9.1