package scrum.client.workspace; import ilarkesto.core.scope.Scope; import ilarkesto.gwt.client.DropdownMenuButtonWidget; import ilarkesto.gwt.client.Gwt; import ilarkesto.gwt.client.HyperlinkWidget; import ilarkesto.gwt.client.SwitchingNavigatorWidget.SwitchAction; import ilarkesto.gwt.client.TableBuilder; import ilarkesto.gwt.client.undo.UndoButtonWidget; import java.util.Collections; import java.util.List; import scrum.client.ApplicationInfo; import scrum.client.ScrumScopeManager; import scrum.client.admin.LogoutAction; import scrum.client.common.AScrumAction; import scrum.client.common.AScrumWidget; import scrum.client.img.Img; import scrum.client.project.ChangeProjectAction; import scrum.client.project.Project; import scrum.client.search.SearchInputWidget; import scrum.client.undo.Undo; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.SimplePanel; import com.google.gwt.user.client.ui.Widget; public class HeaderWidget extends AScrumWidget { private SimplePanel wrapper; private Label title; private UndoButtonWidget undoButton; private DropdownMenuButtonWidget switchProjectButton; private SearchInputWidget search; private CommunicationIndicatorWidget status; private HTML feedback; @Override protected Widget onInitialization() { setHeight100(); title = new Label(""); title.setStyleName("HeaderWidget-title"); status = new CommunicationIndicatorWidget(); undoButton = new UndoButtonWidget(); switchProjectButton = new DropdownMenuButtonWidget(); switchProjectButton.setLabel("Switch Project"); search = new SearchInputWidget(); feedback = new HTML("<a href='http://kunagi.org/support.html' target='blank'>Support/Feedback</a>"); wrapper = Gwt.createDiv("HeaderWidget", title); return wrapper; } @Override protected void onUpdate() { boolean projectOpen = ScrumScopeManager.isProjectScope(); undoButton.setUndoManager(null); ApplicationInfo applicationInfo = getApp().getApplicationInfo(); if (applicationInfo != null) { title.setText(applicationInfo.getName()); title.setTitle(applicationInfo.getVersionDescription()); } if (projectOpen) { switchProjectButton.clear(); switchProjectButton.addAction("ProjectSelectorLink", new AScrumAction() { @Override public String getLabel() { return "Project Selector"; } @Override protected void onExecute() { getNavigator().gotoProjectSelector(); } }); switchProjectButton.addSeparator(); List<Project> projects = getDao().getProjects(); Collections.sort(projects, Project.LAST_OPENED_COMPARATOR); for (Project p : projects) { if (p == getCurrentProject()) continue; switchProjectButton.addAction("QuickLinks", new ChangeProjectAction(p)); } } TableBuilder tb = new TableBuilder(); tb.setCellPadding(2); tb.setColumnWidths("70px", "", "", "", "200px", "60px", "100px", "50px"); Widget searchWidget = projectOpen ? search : Gwt.createEmptyDiv(); Widget undoWidget = projectOpen ? undoButton : Gwt.createEmptyDiv(); // Widget changeProjectWidget = projectOpen ? new HyperlinkWidget(new ChangeProjectAction()) : Gwt // .createEmptyDiv(); Widget changeProjectWidget = projectOpen ? switchProjectButton : Gwt.createEmptyDiv(); tb.add(createLogo(), status, createCurrentUserWidget(), searchWidget, feedback, undoWidget, changeProjectWidget, new HyperlinkWidget(new LogoutAction())); wrapper.setWidget(tb.createTable()); super.onUpdate(); } private Widget createCurrentUserWidget() { boolean loggedIn = getAuth().isUserLoggedIn(); if (!loggedIn) return Gwt.createEmptyDiv(); ProjectWorkspaceWidgets widgets = Scope.get().getComponent(ProjectWorkspaceWidgets.class); if (!ScrumScopeManager.isProjectScope()) return new Label(createCurrentUserText()); SwitchAction action = widgets.getSidebar().getNavigator().createSwitchAction(widgets.getProjectUserConfig()); action.setLabel(createCurrentUserText()); return new HyperlinkWidget(action); } private String createCurrentUserText() { boolean loggedIn = getAuth().isUserLoggedIn(); StringBuilder text = new StringBuilder(); if (loggedIn) { text.append(getCurrentUser().getName()); if (ScrumScopeManager.isProjectScope()) { text.append(getCurrentProject().getUsersRolesAsString(getCurrentUser(), " (", ")")); text.append(" @ " + getCurrentProject().getLabel()); undoButton.setUndoManager(Scope.get().getComponent(Undo.class).getManager()); } } return text.toString(); } private Widget createLogo() { SimplePanel div = Gwt.createDiv("HeaderWidget-logo", Img.bundle.logo25().createImage()); ApplicationInfo applicationInfo = getApp().getApplicationInfo(); if (applicationInfo != null) div.setTitle(applicationInfo.getVersionDescription()); return div; } }