diff --git a/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml b/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml
index b93ab9b25c..bbd6bc11c3 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml
+++ b/org.adempiere.ui.zk/WEB-INF/src/metainfo/zk/lang-addon.xml
@@ -57,6 +57,6 @@ Copyright (C) 2007 Ashley G Ramdass (ADempiere WebUI).
-
+
diff --git a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
index 075d2f9fdf..2a2a9144be 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
+++ b/org.adempiere.ui.zk/WEB-INF/src/org/adempiere/webui/desktop/DashboardController.java
@@ -35,6 +35,7 @@ import java.util.logging.Level;
import org.adempiere.exceptions.AdempiereException;
import org.adempiere.webui.ClientInfo;
import org.adempiere.webui.Extensions;
+import org.adempiere.webui.LayoutUtils;
import org.adempiere.webui.apps.AEnv;
import org.adempiere.webui.apps.graph.IChartRendererService;
import org.adempiere.webui.apps.graph.WGraph;
@@ -77,6 +78,7 @@ import org.compiere.util.Env;
import org.compiere.util.Msg;
import org.compiere.util.Util;
import org.zkoss.util.media.AMedia;
+import org.zkoss.zhtml.Text;
import org.zkoss.zk.ui.Component;
import org.zkoss.zk.ui.Desktop;
import org.zkoss.zk.ui.Executions;
@@ -98,6 +100,7 @@ import org.zkoss.zul.Iframe;
import org.zkoss.zul.Include;
import org.zkoss.zul.Panel;
import org.zkoss.zul.Panelchildren;
+import org.zkoss.zul.Popup;
import org.zkoss.zul.Separator;
import org.zkoss.zul.Timer;
import org.zkoss.zul.Toolbar;
@@ -132,6 +135,7 @@ public class DashboardController implements EventListener {
private static final String IS_ADDITIONAL_COLUMN_ATTRIBUTE = "IsAdditionalColumn";
private static final String IS_SHOW_IN_DASHBOARD_ATTRIBUTE = "IsShowInDashboard";
private static final String FLEX_GROW_ATTRIBUTE = "FlexGrow";
+ private static final String IMAGES_CONTEXT_HELP_PNG = "images/Help16.png";
private final static int DEFAULT_DASHBOARD_WIDTH = 99;
private final static String DASHBOARD_LAYOUT_COLUMNS = "C";
@@ -325,7 +329,8 @@ public class DashboardController implements EventListener {
private Panel newGadgetPanel(MDashboardPreference dp, MDashboardContent dc) {
Panel panel;
panel = new Panel();
- Caption caption = new Caption(dc.get_Translation(MDashboardContent.COLUMNNAME_Name));
+ String dcName = dc.get_Translation(MDashboardContent.COLUMNNAME_Name);
+ Caption caption = new Caption(dcName);
panel.appendChild(caption);
panel.setAttribute(MDashboardPreference.COLUMNNAME_PA_DashboardContent_ID, dp.getPA_DashboardContent_ID());
panel.setAttribute(MDashboardPreference.COLUMNNAME_PA_DashboardPreference_ID, dp.getPA_DashboardPreference_ID());
@@ -335,20 +340,41 @@ public class DashboardController implements EventListener {
panel.setMaximizable(dc.isMaximizable());
String description = dc.get_Translation(MDashboardContent.COLUMNNAME_Description);
- if(description != null)
- panel.setTooltiptext(description);
-
- panel.setCollapsible(dc.isCollapsible());
- panel.setOpen(!dp.isCollapsedByDefault());
- panel.addEventListener(Events.ON_OPEN, this);
- if (!ClientInfo.isMobile()) {
- panel.setDroppable("true");
- panel.getCaption().setDraggable("true");
- panel.addEventListener(Events.ON_DROP, this);
+ if(!Util.isEmpty(description, true) && !description.equalsIgnoreCase(dcName)) {
+ renderHelpButton(caption, description);
+ }
+
+ panel.setCollapsible(dc.isCollapsible());
+ panel.setOpen(!dp.isCollapsedByDefault());
+ panel.addEventListener(Events.ON_OPEN, this);
+ if (!ClientInfo.isMobile()) {
+ panel.setDroppable("true");
+ panel.getCaption().setDraggable("true");
+ panel.addEventListener(Events.ON_DROP, this);
+ }
+ panel.setBorder("normal");
+
+ return panel;
}
- panel.setBorder("normal");
-
- return panel;
+
+ private void renderHelpButton(Caption caption, String text) {
+ ToolBarButton help = new ToolBarButton();
+ caption.appendChild(help);
+ if (ThemeManager.isUseFontIconForImage())
+ help.setIconSclass("z-icon-Help");
+ else
+ help.setImage(ThemeManager.getThemeResource(IMAGES_CONTEXT_HELP_PNG));
+ Popup popup = new Popup();
+ popup.setSclass("dashboard-content-help");
+ popup.setPopup(popup);
+ Text t = new Text(text);
+ popup.appendChild(t);
+ help.setTooltip(popup);
+ help.addEventListener(Events.ON_CLICK, (Event event) -> {
+ popup.setPage(help.getPage());
+ popup.open(help, "after_start");
+ LayoutUtils.autoDetachOnClose(popup);
+ });
}
private void renderGadgetPanel(MDashboardContent dc, Panel panel) throws Exception {
diff --git a/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/desktop.css.dsp b/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/desktop.css.dsp
index 3678fc1a2c..49a67edd6d 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/desktop.css.dsp
+++ b/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/desktop.css.dsp
@@ -266,6 +266,12 @@
padding: 8px;
}
+.dashboard-content-help .z-popup-content {
+ background: black;
+ color: white;
+ border-radius: 5px;
+}
+
.z-menuitem.selected .z-menuitem-text {
font-weight: bold;
}
diff --git a/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/gadget.css.dsp b/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/gadget.css.dsp
index 5b31c97a3e..f1f2f4f86b 100644
--- a/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/gadget.css.dsp
+++ b/org.adempiere.ui.zk/WEB-INF/src/web/theme/default/css/fragment/gadget.css.dsp
@@ -66,6 +66,11 @@
cursor: move;
}
+.z-caption-content .z-toolbarbutton {
+ vertical-align: middle;
+ margin-bottom: 2px;
+}
+
.dashboard-layout {
width: 100%;
height: 100%;