Skip to content
Snippets Groups Projects
Commit d6fc19c6 authored by uhensler's avatar uhensler
Browse files

OO-3858: Up/Down as buttons

parent ee60e1e3
No related branches found
No related tags found
No related merge requests found
...@@ -43,30 +43,47 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co ...@@ -43,30 +43,47 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co
private static final ComponentRenderer RENDERER = new UpDownRenderer(); private static final ComponentRenderer RENDERER = new UpDownRenderer();
public enum Layout { LINK_HORIZONTAL, BUTTON_HORIZONTAL };
private final Link up; private final Link up;
private final Link down; private final Link down;
private final long idPrefix; private final long idPrefix;
private final String downName; private final String downName;
private final String upName; private final String upName;
private final Layout layout;
private boolean topmost = false; private boolean topmost = false;
private boolean loweremost = false; private boolean loweremost = false;
private Object userObject; private Object userObject;
public UpDown(String name) { public UpDown(String name, Layout layout) {
super(name); super(name);
this.layout = layout;
setDomReplacementWrapperRequired(false); setDomReplacementWrapperRequired(false);
idPrefix = CodeHelper.getRAMUniqueID(); idPrefix = CodeHelper.getRAMUniqueID();
upName = idPrefix + "_up"; upName = idPrefix + "_up";
this.up = LinkFactory.createCustomLink(upName, "up", "", Link.LINK | Link.NONTRANSLATED, null, this); this.up = createLink(layout, upName);
up.setDomReplacementWrapperRequired(false); up.setDomReplacementWrapperRequired(false);
up.setIconLeftCSS("o_icon o_icon-lg o_icon_move_up"); up.setIconLeftCSS("o_icon o_icon-lg o_icon_move_up");
up.setCustomDisplayText("");
downName = idPrefix + "_down"; downName = idPrefix + "_down";
this.down = LinkFactory.createCustomLink(downName, "down", "", Link.LINK | Link.NONTRANSLATED, null, this); this.down = createLink(layout, downName);;
down.setDomReplacementWrapperRequired(false); down.setDomReplacementWrapperRequired(false);
down.setIconLeftCSS("o_icon o_icon-lg o_icon_move_down"); down.setIconLeftCSS("o_icon o_icon-lg o_icon_move_down");
down.setCustomDisplayText("");
}
private Link createLink(Layout layout, String name) {
switch (layout) {
case LINK_HORIZONTAL:
return LinkFactory.createCustomLink(name, "up", "", Link.LINK | Link.NONTRANSLATED, null, this);
case BUTTON_HORIZONTAL:
return LinkFactory.createButton(name, null, this);
default:
return LinkFactory.createCustomLink(name, "up", "", Link.LINK | Link.NONTRANSLATED, null, this);
}
} }
Link getUp() { Link getUp() {
...@@ -77,6 +94,10 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co ...@@ -77,6 +94,10 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co
return down; return down;
} }
Layout getLayout() {
return layout;
}
public void setTopmost(boolean topmost) { public void setTopmost(boolean topmost) {
this.topmost = topmost; this.topmost = topmost;
} }
......
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
package org.olat.core.gui.components.updown; package org.olat.core.gui.components.updown;
import org.olat.core.gui.components.ComponentEventListener; import org.olat.core.gui.components.ComponentEventListener;
import org.olat.core.gui.components.updown.UpDown.Layout;
import org.olat.core.gui.components.velocity.VelocityContainer; import org.olat.core.gui.components.velocity.VelocityContainer;
/** /**
...@@ -30,8 +31,8 @@ import org.olat.core.gui.components.velocity.VelocityContainer; ...@@ -30,8 +31,8 @@ import org.olat.core.gui.components.velocity.VelocityContainer;
*/ */
public class UpDownFactory { public class UpDownFactory {
public static UpDown createUpDown(String name, VelocityContainer vc, ComponentEventListener listener) { public static UpDown createUpDown(String name, Layout layout, VelocityContainer vc, ComponentEventListener listener) {
UpDown upDown = new UpDown(name); UpDown upDown = new UpDown(name, layout);
if (listener != null) { if (listener != null) {
upDown.addListener(listener); upDown.addListener(listener);
} }
......
...@@ -42,6 +42,19 @@ public class UpDownRenderer extends DefaultComponentRenderer { ...@@ -42,6 +42,19 @@ public class UpDownRenderer extends DefaultComponentRenderer {
UpDown upDown = (UpDown) source; UpDown upDown = (UpDown) source;
switch (upDown.getLayout()) {
case LINK_HORIZONTAL:
renderLinkHorizontal(renderer, sb, args, upDown);
break;
case BUTTON_HORIZONTAL:
renderButtonHorizontal(renderer, sb, args, upDown);
break;
default:
break;
}
}
private void renderLinkHorizontal(Renderer renderer, StringOutput sb, String[] args, UpDown upDown) {
sb.append("<span class='o_updown'>"); sb.append("<span class='o_updown'>");
sb.append("<span class='o_hidden'>", upDown.isTopmost()); sb.append("<span class='o_hidden'>", upDown.isTopmost());
renderer.render(upDown.getUp(), sb, args); renderer.render(upDown.getUp(), sb, args);
...@@ -53,4 +66,18 @@ public class UpDownRenderer extends DefaultComponentRenderer { ...@@ -53,4 +66,18 @@ public class UpDownRenderer extends DefaultComponentRenderer {
sb.append("</span>"); sb.append("</span>");
} }
private void renderButtonHorizontal(Renderer renderer, StringOutput sb, String[] args, UpDown upDown) {
sb.append("<div class='btn-group o_updown'>");
if (upDown.isTopmost()) {
upDown.getUp().setEnabled(false);
}
renderer.render(upDown.getUp(), sb, args);
if (upDown.isLowermost()) {
upDown.getDown().setEnabled(false);
}
renderer.render(upDown.getDown(), sb, args);
sb.append("</div>");
}
} }
...@@ -41,6 +41,7 @@ import org.olat.core.gui.components.panel.Panel; ...@@ -41,6 +41,7 @@ import org.olat.core.gui.components.panel.Panel;
import org.olat.core.gui.components.text.TextComponent; import org.olat.core.gui.components.text.TextComponent;
import org.olat.core.gui.components.text.TextFactory; import org.olat.core.gui.components.text.TextFactory;
import org.olat.core.gui.components.updown.UpDown; import org.olat.core.gui.components.updown.UpDown;
import org.olat.core.gui.components.updown.UpDown.Layout;
import org.olat.core.gui.components.updown.UpDownEvent; import org.olat.core.gui.components.updown.UpDownEvent;
import org.olat.core.gui.components.updown.UpDownEvent.Direction; import org.olat.core.gui.components.updown.UpDownEvent.Direction;
import org.olat.core.gui.components.updown.UpDownFactory; import org.olat.core.gui.components.updown.UpDownFactory;
...@@ -125,16 +126,17 @@ public class GuiDemoLinksController extends BasicController { ...@@ -125,16 +126,17 @@ public class GuiDemoLinksController extends BasicController {
linkTooltip.setTooltip("link.tooltip.text"); linkTooltip.setTooltip("link.tooltip.text");
upDowns = new ArrayList<>(); upDowns = new ArrayList<>();
UpDown upDownA = UpDownFactory.createUpDown("updown-a", mainVC, this); Layout layout = Layout.LINK_HORIZONTAL;
UpDown upDownA = UpDownFactory.createUpDown("updown-a", layout, mainVC, this);
upDownA.setUserObject("A"); upDownA.setUserObject("A");
upDowns.add(new UpDownWrapper("A", upDownA)); upDowns.add(new UpDownWrapper("A", upDownA));
UpDown upDownB = UpDownFactory.createUpDown("updown-b", mainVC, this); UpDown upDownB = UpDownFactory.createUpDown("updown-b", layout, mainVC, this);
upDownA.setUserObject("B"); upDownA.setUserObject("B");
upDowns.add(new UpDownWrapper("B", upDownB)); upDowns.add(new UpDownWrapper("B", upDownB));
UpDown upDownC = UpDownFactory.createUpDown("updown-c", mainVC, this); UpDown upDownC = UpDownFactory.createUpDown("updown-c", layout, mainVC, this);
upDownA.setUserObject("C"); upDownA.setUserObject("C");
upDowns.add(new UpDownWrapper("C", upDownC)); upDowns.add(new UpDownWrapper("C", upDownC));
UpDown upDownD = UpDownFactory.createUpDown("updown-d", mainVC, this); UpDown upDownD = UpDownFactory.createUpDown("updown-d",layout, mainVC, this);
upDownA.setUserObject("D"); upDownA.setUserObject("D");
upDowns.add(new UpDownWrapper("D", upDownD)); upDowns.add(new UpDownWrapper("D", upDownD));
doDisableUpDowns(); doDisableUpDowns();
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
*/ */
package org.olat.modules.forms.ui; package org.olat.modules.forms.ui;
import static org.olat.core.gui.components.updown.UpDown.Layout.LINK_HORIZONTAL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.List; import java.util.List;
import java.util.UUID; import java.util.UUID;
...@@ -142,8 +144,8 @@ public class MultipleChoiceEditorController extends FormBasicController implemen ...@@ -142,8 +144,8 @@ public class MultipleChoiceEditorController extends FormBasicController implemen
Choice choice = choices.get(i); Choice choice = choices.get(i);
// move // move
UpDown upDown = UpDownFactory.createUpDown("ud_" + CodeHelper.getRAMUniqueID(), flc.getFormItemComponent(), UpDown upDown = UpDownFactory.createUpDown("ud_" + CodeHelper.getRAMUniqueID(), LINK_HORIZONTAL,
this); flc.getFormItemComponent(), this);
upDown.setUserObject(choice); upDown.setUserObject(choice);
if (i == 0) { if (i == 0) {
upDown.setTopmost(true); upDown.setTopmost(true);
......
...@@ -19,6 +19,8 @@ ...@@ -19,6 +19,8 @@
*/ */
package org.olat.modules.forms.ui; package org.olat.modules.forms.ui;
import static org.olat.core.gui.components.updown.UpDown.Layout.LINK_HORIZONTAL;
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Arrays; import java.util.Arrays;
import java.util.List; import java.util.List;
...@@ -143,7 +145,8 @@ public class SingleChoiceEditorController extends FormBasicController implements ...@@ -143,7 +145,8 @@ public class SingleChoiceEditorController extends FormBasicController implements
Choice choice = choices.get(i); Choice choice = choices.get(i);
// move // move
UpDown upDown = UpDownFactory.createUpDown("ud_" + CodeHelper.getRAMUniqueID(), flc.getFormItemComponent(), this); UpDown upDown = UpDownFactory.createUpDown("ud_" + CodeHelper.getRAMUniqueID(), LINK_HORIZONTAL,
flc.getFormItemComponent(), this);
upDown.setUserObject(choice); upDown.setUserObject(choice);
if (i == 0) { if (i == 0) {
upDown.setTopmost(true); upDown.setTopmost(true);
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment