From 9d9729caa16be3e7e1c28b8fe997264610d86937 Mon Sep 17 00:00:00 2001
From: Emil Siverhall <emil-siv@dsv.su.se>
Date: Tue, 31 Jul 2012 10:32:14 +0200
Subject: [PATCH] fixed bug to avoid the need to refocus on partner selection
 when authors accepting supervisor ideas. added an enclosure container as well
 to avoid wicket warnings

---
 .../project/panels/AcceptIdeaDialogPanel.html |  6 ++---
 .../project/panels/AcceptIdeaDialogPanel.java | 23 +++++++++++++++++--
 2 files changed, 24 insertions(+), 5 deletions(-)

diff --git a/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.html b/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.html
index 0aa6cc4d15..321ca27f6a 100644
--- a/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.html
+++ b/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.html
@@ -18,11 +18,11 @@
    		</div>
 		<div wicket:id="ideaDetails"></div>
    		<div>
-    	<wicket:enclosure child="partnerPanel"> 
+		<div wicket:id="partnerEnclosure">
     		<b>Partner:</b><br />		
     		<div wicket:id="partnerPanel"></div>
-   		</wicket:enclosure>
-   		<span class="right"><input type="submit" wicket:id="selectButton" value="Select project idea"/></span>
+		</div>   		
+		<span class="right"><input type="submit" wicket:id="selectButton" value="Select project idea"/></span>
    		</div>
     </form>
 </wicket:panel>
diff --git a/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.java b/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.java
index 9ae5be8196..6a437374b5 100644
--- a/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.java
+++ b/src/main/java/se/su/dsv/scipro/project/panels/AcceptIdeaDialogPanel.java
@@ -2,13 +2,16 @@ package se.su.dsv.scipro.project.panels;
 
 import java.util.TreeSet;
 
+import org.apache.wicket.ajax.AbstractAjaxTimerBehavior;
 import org.apache.wicket.ajax.AjaxRequestTarget;
 import org.apache.wicket.markup.html.basic.EnclosureContainer;
 import org.apache.wicket.markup.html.form.Button;
 import org.apache.wicket.markup.html.form.Form;
 import org.apache.wicket.markup.html.panel.Panel;
 import org.apache.wicket.model.IModel;
+import org.apache.wicket.model.Model;
 import org.apache.wicket.spring.injection.annot.SpringBean;
+import org.apache.wicket.util.time.Duration;
 
 import se.su.dsv.scipro.data.dataobjects.ProjectClass;
 import se.su.dsv.scipro.data.dataobjects.Student;
@@ -34,6 +37,7 @@ public class AcceptIdeaDialogPanel extends Panel {
 
 		private static final long serialVersionUID = -9118352523380756043L;
 		private AddRemoveStudentsPanel partnerPanel;
+		private Button button;
 
 		public AcceptIdeaForm(String id, final IModel<SupervisorIdea> model, final User loggedInUser, final boolean unconfirmed) {
 			super(id, model);
@@ -41,6 +45,19 @@ public class AcceptIdeaDialogPanel extends Panel {
 			add(new ProjectIdeaDetailsPanel("ideaDetails", model, unconfirmed, false));
 			addUnconfirmedContainer(model, loggedInUser, unconfirmed); //Info box with accept/decline buttons
 			addButton(model, loggedInUser, unconfirmed);
+			setFocusOnButton(); //Workaround to make partner selection work without the need to refocus.
+		}
+
+		private void setFocusOnButton() {
+			add(new AbstractAjaxTimerBehavior(Duration.milliseconds(1)) {
+				private static final long serialVersionUID = 8249890924500999472L;
+
+				@Override
+				protected void onTimer(AjaxRequestTarget target) {
+					target.focusComponent(button);
+					stop();
+				}
+			});
 		}
 
 		private void addUnconfirmedContainer(final IModel<SupervisorIdea> model, final User loggedInUser, final boolean unconfirmed) {
@@ -83,11 +100,13 @@ public class AcceptIdeaDialogPanel extends Panel {
                 }
             };
             partnerPanel.setVisible(model.getObject().getProjectClass().getCode().equals(ProjectClass.BACHELOR) && !unconfirmed);
-			add(partnerPanel);
+            EnclosureContainer partnerEnclosure = new EnclosureContainer("partnerEnclosure", partnerPanel);
+            partnerEnclosure.add(partnerPanel);
+			add(partnerEnclosure);
 		}
 
 		private void addButton(final IModel<SupervisorIdea> model, final User loggedInUser, final boolean unconfirmed) {
-			Button button = new Button("selectButton") {
+			button = new Button("selectButton") {
 
 				private static final long serialVersionUID = 8805671593150004137L;