From 41cffba4298d61383d0dd99857429960a4ca3d44 Mon Sep 17 00:00:00 2001
From: James Moger <james.moger@gitblit.com>
Date: Fri, 04 Nov 2011 23:00:19 -0400
Subject: [PATCH] Refinements to search dialog and null checks in cell renderers

---
 src/com/gitblit/client/RepositoriesPanel.java |   40 ++++++++++++++++++++++++++++++++--------
 1 files changed, 32 insertions(+), 8 deletions(-)

diff --git a/src/com/gitblit/client/RepositoriesPanel.java b/src/com/gitblit/client/RepositoriesPanel.java
index 1efc876..3e156e9 100644
--- a/src/com/gitblit/client/RepositoriesPanel.java
+++ b/src/com/gitblit/client/RepositoriesPanel.java
@@ -26,7 +26,6 @@
 import java.awt.event.MouseAdapter;
 import java.awt.event.MouseEvent;
 import java.io.IOException;
-import java.text.MessageFormat;
 import java.util.ArrayList;
 import java.util.List;
 
@@ -91,9 +90,8 @@
 		browseRepository.addActionListener(new ActionListener() {
 			public void actionPerformed(ActionEvent e) {
 				RepositoryModel model = getSelectedRepositories().get(0);
-				String u = MessageFormat.format("{0}/summary/{1}", gitblit.url,
-						StringUtils.encodeURL(model.name));
-				Utils.browse(u);
+				String url = gitblit.getURL("summary", model.name, null);
+				Utils.browse(url);
 			}
 		});
 
@@ -136,6 +134,15 @@
 			}
 		});
 
+		final JButton searchRepository = new JButton(Translation.get("gb.search") + "...");
+		searchRepository.setEnabled(false);
+		searchRepository.addActionListener(new ActionListener() {
+			public void actionPerformed(ActionEvent e) {
+				RepositoryModel model = getSelectedRepositories().get(0);
+				searchRepository(model);
+			}
+		});
+
 		SubscribedRepositoryRenderer nameRenderer = new SubscribedRepositoryRenderer(gitblit);
 		IndicatorsRenderer typeRenderer = new IndicatorsRenderer();
 
@@ -166,10 +173,18 @@
 					return;
 				}
 				boolean singleSelection = table.getSelectedRowCount() == 1;
-				boolean selected = table.getSelectedRow() > -1;
-				browseRepository.setEnabled(singleSelection);
-				delRepository.setEnabled(selected);
-				subscribeRepository.setEnabled(singleSelection);
+				boolean selected = table.getSelectedRow() > -1;				
+				if (singleSelection) {
+					RepositoryModel repository = getSelectedRepositories().get(0);
+					browseRepository.setEnabled(repository.hasCommits);
+					searchRepository.setEnabled(repository.hasCommits);
+					subscribeRepository.setEnabled(repository.hasCommits);
+				} else {
+					browseRepository.setEnabled(false);
+					searchRepository.setEnabled(false);
+					subscribeRepository.setEnabled(false);
+				}
+				delRepository.setEnabled(selected);				
 				if (selected) {
 					int viewRow = table.getSelectedRow();
 					int modelRow = table.convertRowIndexToModel(viewRow);
@@ -218,6 +233,7 @@
 		repositoryControls.add(editRepository);
 		repositoryControls.add(delRepository);
 		repositoryControls.add(subscribeRepository);
+		repositoryControls.add(searchRepository);
 
 		setLayout(new BorderLayout(Utils.MARGIN, Utils.MARGIN));
 		header = new HeaderPanel(Translation.get("gb.repositories"), "gitweb-favicon.png");
@@ -451,4 +467,12 @@
 		}
 	}
 
+	protected void searchRepository(final RepositoryModel repository) {
+		SearchDialog searchDialog = new SearchDialog(gitblit);
+		if (repository != null) {
+			searchDialog.selectRepository(repository);
+		}
+		searchDialog.setLocationRelativeTo(this);
+		searchDialog.setVisible(true);
+	}
 }

--
Gitblit v1.9.1