Skip to content
Snippets Groups Projects
Commit ce152343 authored by srosse's avatar srosse
Browse files

OO-4731: optimize set dirty for invisible components in toolbar

parent 7d6660cb
No related branches found
No related tags found
No related merge requests found
......@@ -27,14 +27,10 @@
package org.olat.core.gui.components;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import org.olat.core.gui.UserRequest;
import org.olat.core.gui.Windows;
import org.olat.core.gui.render.ValidationResult;
import org.olat.core.util.component.ComponentTraverser;
import org.olat.core.util.component.ComponentVisitor;
/**
* Description: <br>
......@@ -119,42 +115,5 @@ public class ComponentHelper {
}
}
/**
* REVIEW:pb: 2008-05-05 -> not referenced from .html or .java
* @param wins
* @param compToFind
* @return
* @deprecated
*/
protected static Window findWindowWithComponentInIt(Windows wins, final Component compToFind) {
Window awin = null;
for (Iterator<Window> it_wins = wins.getWindowIterator(); it_wins.hasNext();) {
awin = it_wins.next();
// find the correct component within the window
MyVisitor v = new MyVisitor(compToFind);
ComponentTraverser ct = new ComponentTraverser(v, awin.getContentPane(), false);
ct.visitAll(null);
if (v.f != null) return awin;
}
return null;
}
static class MyVisitor implements ComponentVisitor {
private Component compToFind;
private Component f = null;
public MyVisitor(Component compToFind) {
this.compToFind = compToFind;
}
@Override
public boolean visit(Component comp, UserRequest ureq) {
if (comp == compToFind) {
f = comp;
return false;
}
return true;
}
}
}
\ No newline at end of file
......@@ -114,6 +114,8 @@ public class DropdownRenderer extends DefaultComponentRenderer {
}
renderer.render(component, sb, args);
sb.append("</li>");
} else {
component.setDirty(false);
}
}
sb.append("</ul>").append("</div>", dropdown.isEmbbeded());
......
......@@ -145,6 +145,9 @@ public abstract class AbstractFlexiTableRenderer extends DefaultComponentRendere
if(searchCmp == null && !ftE.isExtendedSearchExpanded() && !ftE.isNumOfRowsEnabled()
&& !ftE.isFilterEnabled() && !ftE.isSortEnabled() && ! ftE.isExportEnabled()
&& !ftE.isCustomizeColumns() && ftE.getAvailableRendererTypes().length <= 1) {
if(ftE.getCustomButton() != null) {
ftE.getCustomButton().getComponent().setDirty(false);
}
return;
}
......
......@@ -56,7 +56,6 @@ public class BreadcrumbBarRenderer extends DefaultComponentRenderer {
if(backLink.isVisible() && numOfCrumbs > panel.getInvisibleCrumb()) {
sb.append("<li class='o_breadcrumb_back'>");
backLink.getHTMLRendererSingleton().render(renderer, sb, backLink, ubu, translator, renderResult, args);
backLink.setDirty(false);
sb.append("</li>");
for(Link crumb:breadCrumbs) {
......@@ -65,14 +64,15 @@ public class BreadcrumbBarRenderer extends DefaultComponentRenderer {
sb.append("</li>");
}
}
backLink.setDirty(false);
Link closeLink = panel.getCloseLink();
if (closeLink.isVisible()) {
sb.append("<li class='o_breadcrumb_close'>");
closeLink.getHTMLRendererSingleton().render(renderer, sb, closeLink, ubu, translator, renderResult, args);
closeLink.setDirty(false);
sb.append("</li>");
}
}
closeLink.setDirty(false);
sb.append("</ol>");
} else {
sb.append("<div id='o_c").append(source.getDispatchID()).append("'>");
......
......@@ -19,6 +19,7 @@
*/
package org.olat.core.gui.components.stack;
import java.util.ArrayList;
import java.util.List;
import org.olat.core.gui.components.Component;
......@@ -49,11 +50,11 @@ public class ToolBarRenderer extends DefaultComponentRenderer {
ToolBar toolBar = (ToolBar)source;
TooledStackedPanel panel = toolBar.getPanel();
List<Tool> leftTools = panel.getTools(Align.left);
List<Tool> rightEdgeTools = panel.getTools(Align.rightEdge);
List<Tool> rightTools = panel.getTools(Align.right);
List<Tool> segmentsTools = panel.getTools(Align.segment);
List<Tool> centerTools = panel.getTools(Align.center);
List<Tool> leftTools = getVisibleTools(panel, Align.left);
List<Tool> rightEdgeTools = getVisibleTools(panel, Align.rightEdge);
List<Tool> rightTools = getVisibleTools(panel, Align.right);
List<Tool> segmentsTools = getVisibleTools(panel, Align.segment);
List<Tool> centerTools = getVisibleTools(panel, Align.center);
if(panel.isToolbarEnabled() || (panel.isToolbarAutoEnabled()
&& (!leftTools.isEmpty() || !rightTools.isEmpty() || !centerTools.isEmpty() || !segmentsTools.isEmpty()))) {
......@@ -82,6 +83,19 @@ public class ToolBarRenderer extends DefaultComponentRenderer {
}
}
private List<Tool> getVisibleTools(TooledStackedPanel panel, Align align) {
List<Tool> tools = panel.getTools(align);
List<Tool> visibleTools = new ArrayList<>(tools.size());
for(Tool tool:tools) {
if(tool.getComponent().isVisible()) {
visibleTools.add(tool);
} else {
tool.getComponent().setDirty(false);
}
}
return visibleTools;
}
private void renderTools(List<Tool> tools, Renderer renderer, ToolsSlot slot, StringOutput sb, Translator translator, String[] args) {
if(!tools.isEmpty()) {
Align align = slot.getSlot();
......
......@@ -230,10 +230,16 @@ public class TooledStackedPanel extends BreadcrumbedStackedPanel {
public List<Tool> getTools(Align alignement) {
List<Tool> tools = getTools();
return tools.stream()
.filter(tool -> alignement.equals(tool.getAlign()) && tool.getComponent().isVisible())
.filter(tool -> alignement.equals(tool.getAlign()))
.collect(Collectors.toList());
}
public boolean hasVisibleTool(Align alignement) {
List<Tool> tools = getTools();
return tools.stream()
.anyMatch(tool -> alignement.equals(tool.getAlign()) && tool.getComponent().isVisible());
}
private BreadCrumb getCurrentCrumb() {
if(stack.isEmpty()) {
return null;
......
......@@ -61,7 +61,7 @@ public class TooledStackedPanelRenderer extends DefaultComponentRenderer {
if((panel.isBreadcrumbEnabled() && breadCrumbs.size() > panel.getInvisibleCrumb()) || (!tools.isEmpty() && panel.isToolbarEnabled())) {
sb.append("<div id='o_main_toolbar' class='o_toolbar");
if ((panel.isToolbarAutoEnabled() || panel.isToolbarEnabled() ) && !panel.getTools(Align.segment).isEmpty()) {
if((panel.isToolbarAutoEnabled() || panel.isToolbarEnabled()) && panel.hasVisibleTool(Align.segment)) {
sb.append(" o_toolbar_with_segments");
}
sb.append("'>");
......
......@@ -86,7 +86,9 @@ public class InstantMessagingMainController extends BasicController implements G
private IMBuddyListController rosterCtr;
private FloatingResizableDialogController rosterPanelCtr;
//status changes
private final Link available, unavailable, dnd;
private final Link dnd;
private final Link available;
private final Link unavailable;
//chat list
private JSAndCSSComponent jsc;
private ChatManagerController chatMgrCtrl;
......@@ -225,6 +227,7 @@ public class InstantMessagingMainController extends BasicController implements G
* or an Assessment starts or ends
* @see org.olat.core.util.event.GenericEventListener#event(org.olat.core.gui.control.Event)
*/
@Override
public void event(Event event) {
if(event instanceof InstantMessagingEvent) {
processInstantMessageEvent((InstantMessagingEvent)event);
......@@ -244,7 +247,10 @@ public class InstantMessagingMainController extends BasicController implements G
private void updateBuddyStats() {
if(allowToUpdateBuddyStats()) {
BuddyStats stats = imService.getBuddyStats(getIdentity());
onlineOfflineCount.setCustomDisplayText(translate("im.roster.launch", new String[]{stats.getOnlineBuddies() + "", stats.getOfflineBuddies() + ""}));
String text = translate("im.roster.launch", new String[]{ Long.toString(stats.getOnlineBuddies()), Long.toString(stats.getOfflineBuddies()) });
if(!text.equals(onlineOfflineCount.getCustomDisplayText())) {
onlineOfflineCount.setCustomDisplayText(text);
}
}
}
......
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