From d6fc19c6800827e1ce6321a5bc96ff438af325b2 Mon Sep 17 00:00:00 2001 From: uhensler <urs.hensler@frentix.com> Date: Fri, 8 Feb 2019 10:20:56 +0100 Subject: [PATCH] OO-3858: Up/Down as buttons --- .../core/gui/components/updown/UpDown.java | 27 ++++++++++++++++--- .../gui/components/updown/UpDownFactory.java | 5 ++-- .../gui/components/updown/UpDownRenderer.java | 27 +++++++++++++++++++ .../demo/guidemo/GuiDemoLinksController.java | 10 ++++--- .../ui/MultipleChoiceEditorController.java | 6 +++-- .../ui/SingleChoiceEditorController.java | 5 +++- 6 files changed, 68 insertions(+), 12 deletions(-) diff --git a/src/main/java/org/olat/core/gui/components/updown/UpDown.java b/src/main/java/org/olat/core/gui/components/updown/UpDown.java index ae1f4f8aa82..507904b72a0 100644 --- a/src/main/java/org/olat/core/gui/components/updown/UpDown.java +++ b/src/main/java/org/olat/core/gui/components/updown/UpDown.java @@ -43,30 +43,47 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co private static final ComponentRenderer RENDERER = new UpDownRenderer(); + public enum Layout { LINK_HORIZONTAL, BUTTON_HORIZONTAL }; + private final Link up; private final Link down; private final long idPrefix; private final String downName; private final String upName; + private final Layout layout; private boolean topmost = false; private boolean loweremost = false; private Object userObject; - public UpDown(String name) { + public UpDown(String name, Layout layout) { super(name); + this.layout = layout; setDomReplacementWrapperRequired(false); idPrefix = CodeHelper.getRAMUniqueID(); upName = idPrefix + "_up"; - this.up = LinkFactory.createCustomLink(upName, "up", "", Link.LINK | Link.NONTRANSLATED, null, this); + this.up = createLink(layout, upName); up.setDomReplacementWrapperRequired(false); up.setIconLeftCSS("o_icon o_icon-lg o_icon_move_up"); + up.setCustomDisplayText(""); downName = idPrefix + "_down"; - this.down = LinkFactory.createCustomLink(downName, "down", "", Link.LINK | Link.NONTRANSLATED, null, this); + this.down = createLink(layout, downName);; down.setDomReplacementWrapperRequired(false); 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() { @@ -77,6 +94,10 @@ public class UpDown extends AbstractComponent implements ComponentCollection, Co return down; } + Layout getLayout() { + return layout; + } + public void setTopmost(boolean topmost) { this.topmost = topmost; } diff --git a/src/main/java/org/olat/core/gui/components/updown/UpDownFactory.java b/src/main/java/org/olat/core/gui/components/updown/UpDownFactory.java index ffc8d7d5f69..cf133edf86b 100644 --- a/src/main/java/org/olat/core/gui/components/updown/UpDownFactory.java +++ b/src/main/java/org/olat/core/gui/components/updown/UpDownFactory.java @@ -20,6 +20,7 @@ package org.olat.core.gui.components.updown; import org.olat.core.gui.components.ComponentEventListener; +import org.olat.core.gui.components.updown.UpDown.Layout; import org.olat.core.gui.components.velocity.VelocityContainer; /** @@ -30,8 +31,8 @@ import org.olat.core.gui.components.velocity.VelocityContainer; */ public class UpDownFactory { - public static UpDown createUpDown(String name, VelocityContainer vc, ComponentEventListener listener) { - UpDown upDown = new UpDown(name); + public static UpDown createUpDown(String name, Layout layout, VelocityContainer vc, ComponentEventListener listener) { + UpDown upDown = new UpDown(name, layout); if (listener != null) { upDown.addListener(listener); } diff --git a/src/main/java/org/olat/core/gui/components/updown/UpDownRenderer.java b/src/main/java/org/olat/core/gui/components/updown/UpDownRenderer.java index b59b095b666..eb2c5b73552 100644 --- a/src/main/java/org/olat/core/gui/components/updown/UpDownRenderer.java +++ b/src/main/java/org/olat/core/gui/components/updown/UpDownRenderer.java @@ -42,6 +42,19 @@ public class UpDownRenderer extends DefaultComponentRenderer { 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_hidden'>", upDown.isTopmost()); renderer.render(upDown.getUp(), sb, args); @@ -53,4 +66,18 @@ public class UpDownRenderer extends DefaultComponentRenderer { 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>"); + } + } diff --git a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoLinksController.java b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoLinksController.java index 87c58ec8765..de9041506ee 100644 --- a/src/main/java/org/olat/gui/demo/guidemo/GuiDemoLinksController.java +++ b/src/main/java/org/olat/gui/demo/guidemo/GuiDemoLinksController.java @@ -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.TextFactory; 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.Direction; import org.olat.core.gui.components.updown.UpDownFactory; @@ -125,16 +126,17 @@ public class GuiDemoLinksController extends BasicController { linkTooltip.setTooltip("link.tooltip.text"); 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"); 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"); 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"); 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"); upDowns.add(new UpDownWrapper("D", upDownD)); doDisableUpDowns(); diff --git a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceEditorController.java b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceEditorController.java index da412414daa..2456e82cf9f 100644 --- a/src/main/java/org/olat/modules/forms/ui/MultipleChoiceEditorController.java +++ b/src/main/java/org/olat/modules/forms/ui/MultipleChoiceEditorController.java @@ -19,6 +19,8 @@ */ 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.List; import java.util.UUID; @@ -142,8 +144,8 @@ public class MultipleChoiceEditorController extends FormBasicController implemen Choice choice = choices.get(i); // 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); if (i == 0) { upDown.setTopmost(true); diff --git a/src/main/java/org/olat/modules/forms/ui/SingleChoiceEditorController.java b/src/main/java/org/olat/modules/forms/ui/SingleChoiceEditorController.java index 91019a76a02..564254b66ad 100644 --- a/src/main/java/org/olat/modules/forms/ui/SingleChoiceEditorController.java +++ b/src/main/java/org/olat/modules/forms/ui/SingleChoiceEditorController.java @@ -19,6 +19,8 @@ */ 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.Arrays; import java.util.List; @@ -143,7 +145,8 @@ public class SingleChoiceEditorController extends FormBasicController implements Choice choice = choices.get(i); // 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); if (i == 0) { upDown.setTopmost(true); -- GitLab