List of usage examples for com.google.gwt.user.client.ui MenuBar focus
public void focus()
From source file:org.unitime.timetable.gwt.client.curricula.CourseCurriculaTable.java
License:Apache License
public CourseCurriculaTable(boolean editable, final boolean showHeader) { iEditable = editable;// www . j av a 2 s . c om iCurriculaPanel = new SimpleForm(); iCurriculaPanel.removeStyleName("unitime-NotPrintableBottomLine"); iMenu = new ClickHandler() { @Override public void onClick(ClickEvent event) { PopupPanel popup = new PopupPanel(true); MenuBar menu = createMenu(popup, showHeader); popup.add(menu); popup.showRelativeTo((Widget) event.getSource()); menu.focus(); } }; iHeader = new UniTimeHeaderPanel(showHeader ? MESSAGES.headerCurricula() : ""); iHeader.setCollapsible(showHeader ? CurriculumCookie.getInstance().getCurriculaCoursesDetails() : null); iHeader.setTitleStyleName("unitime3-HeaderTitle"); if (showHeader) { iHeader.addButton("operations", MESSAGES.buttonCurriculaOperations(), (Integer) null, iMenu); iHeader.setEnabled("operations", false); iHeader.getElement().getStyle().setMarginTop(10, Unit.PX); } iHeader.addCollapsibleHandler(new ValueChangeHandler<Boolean>() { @Override public void onValueChange(ValueChangeEvent<Boolean> event) { CurriculumCookie.getInstance().setCurriculaCoursesDetails(event.getValue()); if (iCurricula.getRowCount() == 0) { refresh(); } else if (iCurricula.getRowCount() > 2) { for (int row = 1; row < iCurricula.getRowCount() - 1; row++) { int rowType = iRowTypes.get(row); if (CurriculumCookie.getInstance().getCurriculaCoursesDetails() && (rowType == sRowTypeCurriculum || rowType == sRowTypeOtherArea)) continue; iCurricula.getRowFormatter().setVisible(row, CurriculumCookie.getInstance().getCurriculaCoursesDetails()); } for (int col = 0; col < iClassifications.size() + 2; col++) { iCurricula.getCellFormatter().setStyleName(iCurricula.getRowCount() - 1, col, CurriculumCookie.getInstance().getCurriculaCoursesDetails() ? "unitime-TotalRow" : null); } } } }); if (showHeader) iCurriculaPanel.addHeaderRow(iHeader); VerticalPanel tableAndHint = new VerticalPanel(); iCurricula = new MyFlexTable(); tableAndHint.add(iCurricula); iHint = new Label(MESSAGES .hintEnrollmentOfType(CurriculumCookie.getInstance().getCourseCurriculaTableType().getName())); iHint.setStyleName("unitime-Hint"); iHint.setVisible(false); tableAndHint.add(iHint); tableAndHint.setCellHorizontalAlignment(iHint, HasHorizontalAlignment.ALIGN_RIGHT); iCurriculaPanel.addRow(tableAndHint); iHint.addClickHandler(new ClickHandler() { @Override public void onClick(ClickEvent event) { for (int i = 1; i < Type.values().length; i++) { Type type = Type .values()[(CurriculumCookie.getInstance().getCourseCurriculaTableType().ordinal() + i) % Type.values().length]; if (isAvailable(type)) { CurriculumCookie.getInstance().setCourseCurriculaTableType(type); break; } } iHint.setText(MESSAGES.hintEnrollmentOfType( CurriculumCookie.getInstance().getCourseCurriculaTableType().getName())); if (iCurricula.getRowCount() > 1) { for (int row = 1; row < iCurricula.getRowCount(); row++) { for (int col = 0; col <= iClassifications.size(); col++) { ((MyLabel) iCurricula.getWidget(row, getHeaderCols(row) + col)).refresh(); } } //((MyLabel)iCurricula.getWidget(iCurricula.getRowCount() - 1, 1)).refresh(); ((Label) iCurricula.getWidget(iCurricula.getRowCount() - 1, 0)) .setText(MESSAGES.totalEnrollmentOfType( CurriculumCookie.getInstance().getCourseCurriculaTableType().getName())); } } }); if (!showHeader) iCurriculaPanel.addRow(iHeader); initWidget(iCurriculaPanel); }
From source file:org.unitime.timetable.gwt.client.events.AddMeetingsDialog.java
License:Apache License
public AddMeetingsDialog(AcademicSessionProvider session, EventPropertiesProvider propeties, AsyncCallback<List<MeetingInterface>> callback) { super(true, true); setAnimationEnabled(false);/* w ww.ja v a 2 s .com*/ iCallback = callback; iSession = session; iProperties = propeties; setText(MESSAGES.dialogAddMeetings()); setEscapeToHide(true); iDatesForm = new SimpleForm(); iDatesHeader = new UniTimeHeaderPanel(); iDatesHeader.setRotateFocus(true); iDatesHeader.addButton("next", MESSAGES.buttonNext(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { if (iDates.getSelectedDaysCount() == 0) { iDatesHeader.setErrorMessage(MESSAGES.errorNoDateSelected()); AriaStatus.getInstance().setText(MESSAGES.errorNoDateSelected()); return; } else if (getStartSlot() == null) { iDatesHeader.setErrorMessage(MESSAGES.errorNoStartTime()); AriaStatus.getInstance().setText(MESSAGES.errorNoStartTime()); return; } else if (getEndSlot() == null) { iDatesHeader.setErrorMessage(MESSAGES.errorNoEndTime()); AriaStatus.getInstance().setText(MESSAGES.errorNoEndTime()); return; } LoadingWidget.getInstance().show(MESSAGES.waitCheckingRoomAvailability()); iRooms.getElements(new AsyncCallback<List<Entity>>() { @Override public void onFailure(Throwable caught) { LoadingWidget.getInstance().hide(); iDatesHeader.setErrorMessage(caught.getMessage()); AriaStatus.getInstance().setText(caught.getMessage()); } @Override public void onSuccess(List<Entity> result) { iMatchingRooms = result; if (result == null || result.isEmpty()) { LoadingWidget.getInstance().hide(); iDatesHeader.setErrorMessage(MESSAGES.errorNoMatchingRooms()); AriaStatus.getInstance().setText(MESSAGES.errorNoMatchingRooms()); } else if (iDates.getSelectedDaysCount() > 0) { iDatesHeader.clearMessage(); if (iProperties != null && iProperties.isTooEarly(getStartSlot(), getEndSlot())) { iAvailabilityHeader.setWarningMessage( MESSAGES.warnMeetingTooEarly(TimeUtils.slot2time(getStartSlot()) + " - " + TimeUtils.slot2time(getEndSlot()))); AriaStatus.getInstance() .setText(MESSAGES.warnMeetingTooEarly(TimeUtils.slot2aria(getStartSlot()) + " - " + TimeUtils.slot2aria(getEndSlot()))); } else { iAvailabilityHeader.clearMessage(); } RPC.execute( EventRoomAvailabilityRpcRequest.checkAvailability(getStartSlot(), getEndSlot(), getDates(), getRooms(), iEventId, iSession.getAcademicSessionId()), new AsyncCallback<EventRoomAvailabilityRpcResponse>() { @Override public void onFailure(Throwable caught) { LoadingWidget.getInstance().hide(); iDatesHeader.setErrorMessage(caught.getMessage()); AriaStatus.getInstance().setText(caught.getMessage()); } @Override public void onSuccess(EventRoomAvailabilityRpcResponse result) { LoadingWidget.getInstance().hide(); iResponse = result; populate(0, EventCookie.getInstance().getRoomsSortBy()); setWidget(iAvailabilityForm); recenter(); iText.setFocus(true); } }); } } }); } }); iDatesForm.addHeaderRow(iDatesHeader); SimpleForm form = new SimpleForm(); form.removeStyleName("unitime-NotPrintableBottomLine"); iDates = new SessionDatesSelector(session); form.addRow(MESSAGES.propDates(), iDates); iTimes = new StartEndTimeSelector(); form.addRow(MESSAGES.propTimes(), iTimes); iRooms = new RoomFilterBox(session); form.addRow(MESSAGES.propLocations(), iRooms); iScrollDates = new ScrollPanel(form); iScrollDates.setStyleName("unitime-VerticalScrollPanel"); iDatesForm.addRow(iScrollDates); iDatesForm.addBottomRow(iDatesHeader.clonePanel()); iAvailabilityForm = new SimpleForm(); iAvailabilityHeader = new UniTimeHeaderPanel(); iAvailabilityHeader.setRotateFocus(true); iAvailabilityHeader.addButton("dates", MESSAGES.buttonPrevious(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { setWidget(iDatesForm); recenter(); iResponse = null; Scheduler.get().scheduleDeferred(new ScheduledCommand() { @Override public void execute() { iDates.setFocus(true); } }); } }); iAvailabilityHeader.addButton("prev", MESSAGES.buttonLeft(), new ClickHandler() { @Override public void onClick(ClickEvent event) { populate(iIndex - iStep, null); recenter(); } }); iAvailabilityHeader.addButton("next", MESSAGES.buttonRight(), new ClickHandler() { @Override public void onClick(ClickEvent event) { populate(iIndex + iStep, null); recenter(); } }); iAvailabilityHeader.addButton("more", MESSAGES.buttonMoreOperations(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { final PopupPanel popup = new PopupPanel(true); MenuBar menu = new MenuBar(true); for (final SortRoomsBy sortBy : SortRoomsBy.values()) { if (sortBy == SortRoomsBy.DISTANCE && !iRooms.hasChip(new Chip("flag", "Nearby"))) continue; MenuItem item = new MenuItem( (sortBy.ordinal() == EventCookie.getInstance().getRoomsSortBy() ? "↑ " : (sortBy.ordinal() + SortRoomsBy.values().length == EventCookie.getInstance() .getRoomsSortBy()) ? "↓ " : "") + MESSAGES.opSortBy(getSortRoomsByName(sortBy)), true, new Command() { @Override public void execute() { popup.hide(); if (sortBy.ordinal() == EventCookie.getInstance().getRoomsSortBy()) { EventCookie.getInstance() .setSortRoomsBy(SortRoomsBy.values().length + sortBy.ordinal()); } else { EventCookie.getInstance().setSortRoomsBy(sortBy.ordinal()); } populate(0, EventCookie.getInstance().getRoomsSortBy()); recenter(); } }); item.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(item); } menu.addSeparator(); MenuItem swapItem = new MenuItem(MESSAGES.opSwapAxes(), true, new Command() { @Override public void execute() { popup.hide(); EventCookie.getInstance() .setRoomsHorizontal(!EventCookie.getInstance().areRoomsHorizontal()); populate(0, EventCookie.getInstance().getRoomsSortBy()); recenter(); } }); swapItem.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(swapItem); MenuItem expandOrCollapseAll = new MenuItem( EventCookie.getInstance().isExpandRoomConflicts() ? MESSAGES.opCollapseAll() : MESSAGES.opExpandAll(), true, new Command() { @Override public void execute() { popup.hide(); EventCookie.getInstance() .setExpandRoomConflicts(!EventCookie.getInstance().isExpandRoomConflicts()); populate(iIndex, EventCookie.getInstance().getRoomsSortBy()); recenter(); } }); expandOrCollapseAll.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(expandOrCollapseAll); menu.setVisible(true); menu.setFocusOnHoverEnabled(true); popup.add(menu); popup.showRelativeTo((UIObject) event.getSource()); if (event.getSource() instanceof Focusable) { final Focusable focusable = (Focusable) event.getSource(); popup.addCloseHandler(new CloseHandler<PopupPanel>() { @Override public void onClose(CloseEvent<PopupPanel> event) { focusable.setFocus(true); } }); } menu.focus(); } }); iAvailabilityHeader.addButton("select", MESSAGES.buttonSelect(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { hide(); List<MeetingInterface> meetings = new ArrayList<MeetingInterface>(); for (Integer date : getDates()) { for (Entity room : getRooms()) { if (isSelected(date, room)) { MeetingInterface meeting = new MeetingInterface(); meeting.setDayOfYear(date); meeting.setStartSlot(getStartSlot()); meeting.setEndSlot(getEndSlot()); meeting.setStartOffset(0); meeting.setEndOffset(-Integer.parseInt(room.getProperty("breakTime", "0"))); meeting.setLocation(new ResourceInterface(room)); meeting.setConflicts(getConflicts(date, room)); meetings.add(meeting); } } } iCallback.onSuccess(meetings); } }); iAvailabilityForm.addHeaderRow(iAvailabilityHeader); iRoomAvailability = new P("unitime-MeetingSelection"); iText = new AriaTextBox(); iText.setStyleName("text"); iScrollRooms = new ScrollPanel(iRoomAvailability); iAvailabilityForm.addRow(iScrollRooms); iAvailabilityForm.addNotPrintableBottomRow(iAvailabilityHeader.clonePanel()); setWidget(iDatesForm); addCloseHandler(new CloseHandler<PopupPanel>() { @Override public void onClose(CloseEvent<PopupPanel> event) { RootPanel.getBodyElement().getStyle().setOverflow(Overflow.AUTO); } }); iText.addKeyUpHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { if (iResponse == null) return; if (EventCookie.getInstance().areRoomsHorizontal()) { int min = iIndex, max = Math.min(iIndex + iStep, getRooms().size()) - 1; switch (event.getNativeKeyCode()) { case KeyCodes.KEY_DOWN: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(0, getDates().indexOf(iHoverDate) + 1), getDates().size() - 1); iHoverDate = getDates().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(0); iHoverLoc = getRooms().get(min); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } iScrollRooms.ensureVisible(iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId())); break; case KeyCodes.KEY_UP: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(0, getDates().indexOf(iHoverDate) - 1), getDates().size() - 1); iHoverDate = getDates().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(getDates().size() - 1); iHoverLoc = getRooms().get(min); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } iScrollDates.ensureVisible(iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId())); break; case KeyCodes.KEY_RIGHT: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(min, getRooms().indexOf(iHoverLoc) + 1), max); iHoverLoc = getRooms().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(0); iHoverLoc = getRooms().get(min); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } break; case KeyCodes.KEY_LEFT: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(min, getRooms().indexOf(iHoverLoc) - 1), max); iHoverLoc = getRooms().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(0); iHoverLoc = getRooms().get(max); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } break; case KeyCodes.KEY_PAGEDOWN: if (iIndex + iStep < getRooms().size()) populate(iIndex + iStep, null); break; case KeyCodes.KEY_PAGEUP: if (iIndex > 0) populate(iIndex - iStep, null); break; case 32: case KeyCodes.KEY_ENTER: if (iHoverDate != null && iHoverLoc != null) { setSelected(iHoverDate, iHoverLoc, !isSelected(iHoverDate, iHoverLoc)); } break; } } else { int min = iIndex, max = Math.min(iIndex + iStep, getDates().size()) - 1; switch (event.getNativeKeyCode()) { case KeyCodes.KEY_RIGHT: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(min, getDates().indexOf(iHoverDate) + 1), max); iHoverDate = getDates().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(min); iHoverLoc = getRooms().get(0); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } iScrollRooms.ensureVisible(iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId())); break; case KeyCodes.KEY_LEFT: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(min, getDates().indexOf(iHoverDate) - 1), max); iHoverDate = getDates().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(max); iHoverLoc = getRooms().get(0); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } iScrollDates.ensureVisible(iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId())); break; case KeyCodes.KEY_DOWN: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(0, getRooms().indexOf(iHoverLoc) + 1), getRooms().size() - 1); iHoverLoc = getRooms().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(min); iHoverLoc = getRooms().get(0); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } break; case KeyCodes.KEY_UP: if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); int idx = Math.min(Math.max(0, getRooms().indexOf(iHoverLoc) - 1), getRooms().size() - 1); iHoverLoc = getRooms().get(idx); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } else { iHoverDate = getDates().get(min); iHoverLoc = getRooms().get(getRooms().size() - 1); iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); } break; case KeyCodes.KEY_PAGEDOWN: if (iIndex + iStep < getDates().size()) populate(iIndex + iStep, null); break; case KeyCodes.KEY_PAGEUP: if (iIndex > 0) populate(iIndex - iStep, null); break; case 32: case KeyCodes.KEY_ENTER: if (iHoverDate != null && iHoverLoc != null) { setSelected(iHoverDate, iHoverLoc, !isSelected(iHoverDate, iHoverLoc)); } break; } } iText.setAriaLabel(toAriaLabel(true, true, false)); } }); iText.addKeyDownHandler(new KeyDownHandler() { @Override public void onKeyDown(KeyDownEvent event) { switch (event.getNativeEvent().getKeyCode()) { case KeyCodes.KEY_RIGHT: case KeyCodes.KEY_LEFT: case KeyCodes.KEY_UP: case KeyCodes.KEY_DOWN: case KeyCodes.KEY_PAGEDOWN: case KeyCodes.KEY_PAGEUP: event.preventDefault(); } } }); iText.addKeyPressHandler(new KeyPressHandler() { @Override public void onKeyPress(KeyPressEvent event) { switch (event.getNativeEvent().getKeyCode()) { case 32: if (iText.getValue().isEmpty()) event.preventDefault(); return; case KeyCodes.KEY_ENTER: event.preventDefault(); return; } } }); iText.addFocusHandler(new FocusHandler() { @Override public void onFocus(FocusEvent event) { if (iHoverDate != null && iHoverLoc != null) iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).addStyleName("hover"); iText.setAriaLabel(toAriaLabel(true, true, false)); } }); iText.addBlurHandler(new BlurHandler() { @Override public void onBlur(BlurEvent event) { if (iHoverDate != null && iHoverLoc != null) { iPanels.get(iHoverDate + ":" + iHoverLoc.getUniqueId()).removeStyleName("hover"); } } }); }
From source file:org.unitime.timetable.gwt.client.events.EventResourceTimetable.java
License:Apache License
public EventResourceTimetable(PageType type) { iHistoryToken = new HistoryToken(type); iType = type;//from w w w . j a v a 2 s .com iFilter = new SimpleForm(2); iFilter.removeStyleName("unitime-NotPrintableBottomLine"); iFilter.getColumnFormatter().setWidth(0, "120px"); iFilterHeader = new UniTimeHeaderPanel(MESSAGES.sectFilter()); iLookup = new Lookup(); iLookup.setOptions("mustHaveExternalId"); iLookup.addValueChangeHandler(new ValueChangeHandler<PersonInterface>() { @Override public void onValueChange(ValueChangeEvent<PersonInterface> event) { if (event.getValue() != null) { iResources.setText(event.getValue().getId()); resourceTypeChanged(true); } } }); iFilterHeader.addButton("lookup", MESSAGES.buttonLookup(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { iLookup.center(); } }); iFilterHeader.setEnabled("lookup", false); iFilterHeader.addButton("add", MESSAGES.buttonAddEvent(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { iEventAdd.setEvent(null); iEventAdd.show(); } }); iFilterHeader.setEnabled("add", false); iFilter.addHeaderRow(iFilterHeader); iFilterHeader.addButton("clear", MESSAGES.buttonClear(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { // Event filter iEvents.setValue(iHistoryToken.getDefaultParameter("events", ""), true); // Room filter iRooms.setValue(iHistoryToken.getDefaultParameter("rooms", ""), true); // Resource type if (!"true".equals(iHistoryToken.getParameter("fixedType", "false"))) { String typeString = iHistoryToken.getDefaultParameter("type", "room"); if (typeString != null) for (int idx = 0; idx < iResourceTypes.getItemCount(); idx++) { if (iResourceTypes.getValue(idx).equalsIgnoreCase(typeString)) { iResourceTypes.setSelectedIndex(idx); } } } // Subject, curriculum, department, etc. iResources.setValue(iHistoryToken.getDefaultParameter("name", "")); // Room selection iLocRoom = iHistoryToken.getDefaultParameter("room", ""); // Week selection iLocDate = iHistoryToken.getDefaultParameter("date", ""); hideResults(); changeUrl(); UniTimePageLabel.getInstance().setPageName(getPageName()); resourceTypeChanged(false); } }); iFilterHeader.setEnabled("clear", "true".equals(iHistoryToken.getParameter("showClear", "true"))); iFilterHeader.addButton("search", MESSAGES.buttonSearch(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { resourceTypeChanged(true); } }); iSession = new AcademicSessionSelectionBox(iHistoryToken.getParameter("term"), "Events") { @Override protected void onInitializationSuccess(List<AcademicSession> sessions) { iFilter.setVisible(sessions != null && !sessions.isEmpty()); UniTimePageHeader.getInstance().getRight().setVisible(false); UniTimePageHeader.getInstance().getRight().setPreventDefault(true); } @Override protected void onInitializationFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedLoadSessions(caught.getMessage()), caught); } }; iSession.setFilter(this); iSessionRow = iFilter.addRow(MESSAGES.propAcademicSession(), iSession); iEvents = new EventFilterBox(iSession); if ("true".equals(iHistoryToken.getParameter("showFilter", "true"))) iFilter.addRow(MESSAGES.propEventFilter(), iEvents); iRooms = new RoomFilterBox(iSession); if ("true".equals(iHistoryToken.getParameter("showFilter", "true"))) iFilter.addRow(MESSAGES.propRoomFilter(), iRooms); iResourceTypes = new ListBox(); for (ResourceType resource : ResourceType.values()) { if (resource.isVisible()) iResourceTypes.addItem(resource.getResourceType(CONSTANTS), resource.name()); } iResourceTypes.addChangeHandler(new ChangeHandler() { @Override public void onChange(ChangeEvent event) { iResources.setText(""); UniTimePageLabel.getInstance().setPageName(getPageName()); hideResults(); if (iProperties != null) resourceTypeChanged(isShowingResults()); } }); int row = iFilter.addRow(MESSAGES.propResourceType(), iResourceTypes); if ("true".equals(iHistoryToken.getParameter("fixedType", "false"))) iFilter.getRowFormatter().setVisible(row, false); iResources = new SuggestBox(new SuggestOracle() { @Override public void requestDefaultSuggestions(Request request, Callback callback) { requestSuggestions(request, callback); } @Override public void requestSuggestions(final Request request, final Callback callback) { if (iSession.getAcademicSessionId() != null) { RPC.execute( ResourceLookupRpcRequest.findResources(iSession.getAcademicSessionId(), ResourceType .valueOf(iResourceTypes.getValue(iResourceTypes.getSelectedIndex())), request.getQuery(), request.getLimit()), new AsyncCallback<GwtRpcResponseList<ResourceInterface>>() { @Override public void onFailure(final Throwable caught) { ArrayList<Suggestion> suggestions = new ArrayList<Suggestion>(); suggestions.add(new Suggestion() { @Override public String getDisplayString() { return "<font color='red'>" + caught.getMessage() + "</font>"; } @Override public String getReplacementString() { return ""; } }); callback.onSuggestionsReady(request, new Response(suggestions)); ToolBox.checkAccess(caught); } @Override public void onSuccess(GwtRpcResponseList<ResourceInterface> result) { ArrayList<Suggestion> suggestions = new ArrayList<Suggestion>(); for (ResourceInterface resource : result) { suggestions.add(new ResourceSuggestion(resource)); } callback.onSuggestionsReady(request, new Response(suggestions)); } }); } } @Override public boolean isDisplayStringHTML() { return true; } }); iResources.getValueBox().addFocusHandler(new FocusHandler() { @Override public void onFocus(FocusEvent event) { iResources.showSuggestionList(); } }); iResourcesRow = iFilter.addRow(MESSAGES.propResource(), iResources); iResources.addSelectionHandler(new SelectionHandler<Suggestion>() { public void onSelection(SelectionEvent<Suggestion> event) { if (event.getSelectedItem() instanceof ResourceSuggestion) { resourceChanged(((ResourceSuggestion) event.getSelectedItem()).getResource()); } } }); iFilter.getRowFormatter().setVisible(iResourcesRow, false); iResourceTypes.setSelectedIndex(ResourceType.ROOM.ordinal()); iPanel = new SimpleForm(2); iPanel.removeStyleName("unitime-NotPrintableBottomLine"); iPanel.addRow(iFilter); iHeader = new UniTimeHeaderPanel(); iPanel.addHeaderRow(iHeader); iWeekPanel = new WeekSelector(iSession); iWeekPanel.addValueChangeHandler(new ValueChangeHandler<WeekSelector.Interval>() { @Override public void onValueChange(ValueChangeEvent<WeekSelector.Interval> e) { iLocDate = iWeekPanel.getSelection(); tabOrDataChanged(true); } }); iWeekPanel.setFilter(new WeekSelector.Filter<WeekInterface>() { @Override public boolean filter(WeekInterface week) { return !iMatchingWeeks.contains(week.getDayOfYear()); } @Override public boolean isEmpty() { return iMatchingRooms.isEmpty(); } }); iRoomPanel = new RoomSelector(); iRoomPanel.setFilter(new WeekSelector.Filter<ResourceInterface>() { @Override public boolean filter(ResourceInterface room) { return !iMatchingRooms.contains(room.getId()); } @Override public boolean isEmpty() { return iMatchingRooms.isEmpty(); } }); iTabBar = new AriaTabBar(); iTabBar.addTab(MESSAGES.tabGrid(), true); iTabBar.addTab(MESSAGES.tabEventTable(), true); iTabBar.addTab(MESSAGES.tabMeetingTable(), true); iTabBar.addSelectionHandler(new SelectionHandler<Integer>() { @Override public void onSelection(SelectionEvent<Integer> event) { tabOrDataChanged(true); } }); iGridOrTablePanel = new SimplePanel(); iGridOrTablePanel.setStyleName("unitime-TabPanel"); final Character gridAccessKey = UniTimeHeaderPanel.guessAccessKey(MESSAGES.tabGrid()); final Character eventsAccessKey = UniTimeHeaderPanel.guessAccessKey(MESSAGES.tabEventTable()); final Character meetingsAccessKey = UniTimeHeaderPanel.guessAccessKey(MESSAGES.tabMeetingTable()); if (gridAccessKey != null || eventsAccessKey != null || meetingsAccessKey != null) { RootPanel.get().addDomHandler(new KeyUpHandler() { @Override public void onKeyUp(KeyUpEvent event) { if (!iRootPanel.getWidget().equals(iPanel)) return; int tab = -1; if (gridAccessKey != null && event.getNativeEvent().getCtrlKey() && (event.getNativeKeyCode() == gridAccessKey || event.getNativeKeyCode() == Character.toUpperCase(gridAccessKey))) { tab = 0; } if (eventsAccessKey != null && event.getNativeEvent().getCtrlKey() && (event.getNativeKeyCode() == eventsAccessKey || event.getNativeKeyCode() == Character.toUpperCase(eventsAccessKey))) { tab = 1; } if (meetingsAccessKey != null && event.getNativeEvent().getCtrlKey() && (event.getNativeKeyCode() == meetingsAccessKey || event.getNativeKeyCode() == Character.toUpperCase(meetingsAccessKey))) { tab = 2; } if (tab >= 0) { iTabBar.selectTab(tab); event.preventDefault(); } } }, KeyUpEvent.getType()); } iDockPanel = new DockPanel(); iDockPanel.setStyleName("unitime-EventResults"); iDockPanel.setSpacing(0); iDockPanel.add(iGridOrTablePanel, DockPanel.SOUTH); iDockPanel.add(iRoomPanel, DockPanel.WEST); iDockPanel.setCellHorizontalAlignment(iRoomPanel, HasHorizontalAlignment.ALIGN_LEFT); iDockPanel.add(iTabBar, DockPanel.CENTER); iDockPanel.setCellVerticalAlignment(iTabBar, HasVerticalAlignment.ALIGN_BOTTOM); iDockPanel.setCellHorizontalAlignment(iTabBar, HasHorizontalAlignment.ALIGN_CENTER); iDockPanel.add(iWeekPanel, DockPanel.EAST); iDockPanel.setCellHorizontalAlignment(iWeekPanel, HasHorizontalAlignment.ALIGN_RIGHT); Roles.getTabpanelRole().set(iDockPanel.getElement()); Roles.getTabpanelRole().setAriaOwnsProperty(iDockPanel.getElement(), Id.of(iTabBar.getElement())); iPanel.addRow(iDockPanel); hideResults(); iFooter = iHeader.clonePanel(); iPanel.addRow(iFooter); iRootPanel = new SimplePanel(iPanel); initWidget(iRootPanel); iRoomPanel.addValueChangeHandler(new ValueChangeHandler<IntervalSelector<ResourceInterface>.Interval>() { @Override public void onValueChange(ValueChangeEvent<IntervalSelector<ResourceInterface>.Interval> e) { iLocRoom = iRoomPanel.getSelection(); tabOrDataChanged(true); } }); for (int i = 1; i < iPanel.getRowCount(); i++) iPanel.getRowFormatter().setVisible(i, false); iHeader.addButton("add", MESSAGES.buttonAddEvent(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { iEventAdd.setEvent(null); iEventAdd.show(); } }); iHeader.setEnabled("add", false); iHeader.addButton("print", MESSAGES.buttonPrint(), 75, new ClickHandler() { @Override public void onClick(ClickEvent clickEvent) { final EventMeetingTable table = new EventMeetingTable( getSelectedTab() <= 1 ? EventMeetingTable.Mode.ListOfEvents : EventMeetingTable.Mode.ListOfMeetings, false, EventResourceTimetable.this); table.setMeetingFilter(EventResourceTimetable.this); table.setShowMainContact(iProperties != null && iProperties.isCanLookupMainContact()); table.setEvents(iData); table.setSortBy(iTable.getSortBy()); table.getElement().getStyle().setWidth(1040, Unit.PX); int firstSlot = 84, lastSlot = 216; boolean skipDays = iEvents.hasChip(new FilterBox.Chip("day", null)); boolean hasDay[] = new boolean[] { !skipDays || iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[0])), !skipDays || iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[1])), !skipDays || iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[2])), !skipDays || iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[3])), !skipDays || iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[4])), iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[5])), iEvents.hasChip(new FilterBox.Chip("day", CONSTANTS.longDays()[6])) }; for (EventInterface event : iData) { if (event.getType() == EventType.Unavailabile && !iEvents.hasChip(new Chip("type", "Not Available"))) continue; for (MeetingInterface meeting : event.getMeetings()) { if (filterEvent(event, meeting)) continue; if (meeting.getApprovalStatus() != ApprovalStatus.Pending && meeting.getApprovalStatus() != ApprovalStatus.Approved) continue; if (firstSlot > meeting.getStartSlot()) firstSlot = meeting.getStartSlot(); if (lastSlot < meeting.getEndSlot()) lastSlot = meeting.getEndSlot(); hasDay[meeting.getDayOfWeek()] = true; } } Chip after = iEvents.getChip("after"); if (after != null) { Integer slot = TimeUtils.parseTime(CONSTANTS, after.getValue(), null); if (slot != null && firstSlot > slot) firstSlot = slot; } Chip before = iEvents.getChip("before"); if (before != null) { Integer slot = TimeUtils.parseTime(CONSTANTS, before.getValue(), firstSlot); if (slot != null && lastSlot < slot) lastSlot = slot; } int nrDays = 0; for (boolean d : hasDay) if (d) nrDays++; int days[] = new int[nrDays]; int d = 0; for (int i = 0; i < 7; i++) if (hasDay[i]) days[d++] = i; int firstHour = firstSlot / 12; int lastHour = 1 + (lastSlot - 1) / 12; if (firstHour <= 7 && firstHour > 0 && ((firstSlot % 12) <= 6)) firstHour--; HashMap<Long, String> colors = new HashMap<Long, String>(); final TimeGrid tg = new TimeGrid(colors, days, (int) (1000 / nrDays), 55, true, false, (firstHour < 7 ? firstHour : 7), (lastHour > 18 ? lastHour : 18), EventResourceTimetable.this); tg.setResourceType(getResourceType()); tg.setSelectedWeeks(iWeekPanel.getSelected()); tg.setRoomResources(iRoomPanel.getSelected()); tg.setMode(gridMode()); tg.showVerticalSplit(); for (EventInterface event : sortedEvents()) { List<MeetingInterface> meetings = new ArrayList<MeetingInterface>(); for (MeetingInterface meeting : event.getMeetings()) { if (meeting.getApprovalStatus() != ApprovalStatus.Pending && meeting.getApprovalStatus() != ApprovalStatus.Approved) continue; if (meeting.getMeetingDate() != null && !filterEvent(event, meeting)) meetings.add(meeting); } if (!meetings.isEmpty()) tg.addEvent(event, meetings); } if (iWeekPanel.getValue() != null) tg.labelDays(iWeekPanel.getValue().getFirst(), iWeekPanel.getValue().getLast()); // Move header row to thead Element headerRow = table.getRowFormatter().getElement(0); Element tableElement = table.getElement(); Element thead = DOM.createTHead(); tableElement.insertFirst(thead); headerRow.getParentElement().removeChild(headerRow); thead.appendChild(headerRow); ToolBox.print(new ToolBox.Page() { @Override public String getName() { return iHeader.getHeaderTitle(); } @Override public String getUser() { return iRoomPanel.getValue().toString(); } @Override public String getSession() { return iWeekPanel.getValue().toString(); } @Override public Element getBody() { return tg.getElement(); } }, new ToolBox.Page() { @Override public String getName() { return iHeader.getHeaderTitle(); } @Override public String getUser() { return iRoomPanel.getValue().toString(); } @Override public String getSession() { return iWeekPanel.getValue().toString(); } @Override public Element getBody() { return table.getElement(); } }); } }); iHeader.addButton("export", MESSAGES.buttonExport(), 75, new ClickHandler() { @Override public void onClick(ClickEvent clickEvent) { if (iProperties != null && iProperties.isCanExportCSV()) { final PopupPanel popup = new PopupPanel(true); MenuBar menu = new MenuBar(true); MenuItem exportPdf = new MenuItem(MESSAGES.opExportPDF(), true, new Command() { @Override public void execute() { popup.hide(); export("output=" + (getSelectedTab() <= 1 ? "events" : "meetings") + ".pdf&flags=" + EventCookie.getInstance().getFlags(), true); } }); exportPdf.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(exportPdf); MenuItem exportCsv = new MenuItem(MESSAGES.opExportCSV(), true, new Command() { @Override public void execute() { popup.hide(); export("output=" + (getSelectedTab() <= 1 ? "events" : "meetings") + ".csv&flags=" + EventCookie.getInstance().getFlags(), true); } }); exportCsv.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(exportCsv); MenuItem exportIcs = new MenuItem(MESSAGES.opExportICalendar(), true, new Command() { @Override public void execute() { popup.hide(); copyToClipboard( "output=events.ics" + (iType == PageType.Personal ? "&e:flag=All+Sessions" : ""), iType == PageType.Personal); } }); exportIcs.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(exportIcs); popup.add(menu); popup.showRelativeTo((UIObject) clickEvent.getSource()); menu.focus(); } else { export("output=events.ics", false); } } }); iHeader.addButton("operations", MESSAGES.buttonMoreOperations(), 75, new ClickHandler() { @Override public void onClick(ClickEvent event) { final PopupPanel popup = new PopupPanel(true); iTable.getHeader(0).setMenu(popup); popup.showRelativeTo((UIObject) event.getSource()); ((MenuBar) popup.getWidget()).focus(); } }); iHeader.setEnabled("print", false); iHeader.setEnabled("export", false); iHeader.setEnabled("operations", false); iSession.addAcademicSessionChangeHandler(new AcademicSessionChangeHandler() { @Override public void onAcademicSessionChange(AcademicSessionChangeEvent event) { loadProperties(new AsyncCallback<EventPropertiesRpcResponse>() { @Override public void onFailure(Throwable caught) { } @Override public void onSuccess(EventPropertiesRpcResponse result) { if (!iInitialized) setup(true); else resourceTypeChanged(isShowingResults()); } }); } }); iEventDetail = new EventDetail(this) { @Override protected void onHide() { iRootPanel.setWidget(iPanel); UniTimePageLabel.getInstance().setPageName(getPageName()); if (!isShowingResults()) resourceTypeChanged(true); changeUrl(); } @Override protected void onShow() { iBack.clear(); if (iTable != null) iTable.clearHover(); iRootPanel.setWidget(iEventDetail); changeUrl(); } @Override protected void edit() { super.hide(); iEventAdd.setEvent(getEvent()); iEventAdd.show(); } @Override protected EventInterface getPrevious(Long eventId) { return iTable.previous(eventId); } @Override protected EventInterface getNext(Long eventId) { return iTable.next(eventId); } @Override protected void previous(final EventInterface event) { iBack.add(getEvent()); LoadingWidget.execute( EventDetailRpcRequest.requestEventDetails(iSession.getAcademicSessionId(), event.getId()), new AsyncCallback<EventInterface>() { @Override public void onFailure(Throwable caught) { UniTimeNotifications .error(MESSAGES.failedLoad(event.getName(), caught.getMessage()), caught); } @Override public void onSuccess(EventInterface result) { LoadingWidget.getInstance().hide(); setEvent(result); changeUrl(); } }, MESSAGES.waitLoading(event.getName())); } @Override protected void next(final EventInterface event) { previous(event); } @Override public void hide() { if (!iBack.isEmpty()) { EventInterface last = iBack.remove(iBack.size() - 1); setEvent(last); } else { super.hide(); } } @Override protected void onApprovalOrReject(Long eventId, EventInterface event) { if (iData != null) populate(tinker(new GwtRpcResponseList<EventInterface>(iData), eventId, event)); } }; iEventAdd = new EventAdd(iSession, this) { @Override protected void onHide() { iSession.setFilter(EventResourceTimetable.this); iFilter.setWidget(iSessionRow, 1, iSession); final EventInterface modified = iEventAdd.getEvent(), detail = iEventDetail.getEvent(), saved = iEventAdd.getSavedEvent(); if (saved != null) { if (iData != null) populate(tinker(new GwtRpcResponseList<EventInterface>(iData), (saved.getId() == null ? modified.getId() : saved.getId()), saved)); if (saved.getId() != null) { iEventDetail.setEvent(saved); iEventDetail.show(); } else { iRootPanel.setWidget(iPanel); UniTimePageLabel.getInstance().setPageName(getPageName()); } } else if (modified != null && detail != null && detail.getId().equals(modified.getId())) { LoadingWidget.execute(EventDetailRpcRequest.requestEventDetails(iSession.getAcademicSessionId(), modified.getId()), new AsyncCallback<EventInterface>() { @Override public void onFailure(Throwable caught) { UniTimeNotifications.error( MESSAGES.failedLoad(detail.getName(), caught.getMessage()), caught); } @Override public void onSuccess(EventInterface result) { LoadingWidget.getInstance().hide(); if (result == null) { iRootPanel.setWidget(iPanel); UniTimePageLabel.getInstance().setPageName(getPageName()); } else { iEventDetail.setEvent(result); iEventDetail.show(); } } }, MESSAGES.waitLoading(detail.getName())); } else { iRootPanel.setWidget(iPanel); UniTimePageLabel.getInstance().setPageName(getPageName()); } changeUrl(); } @Override protected void onShow() { if (iTable != null) iTable.clearHover(); iRootPanel.setWidget(iEventAdd); changeUrl(); } }; iMeetingClickHandler = new MeetingClickHandler() { @Override public void onMeetingClick(final MeetingClickEvent event) { if (!event.getEvent().isCanView()) return; LoadingWidget.execute(EventDetailRpcRequest.requestEventDetails(iSession.getAcademicSessionId(), event.getEvent().getId()), new AsyncCallback<EventInterface>() { @Override public void onFailure(Throwable caught) { UniTimeNotifications.error( MESSAGES.failedLoad(event.getEvent().getName(), caught.getMessage()), caught); } @Override public void onSuccess(EventInterface result) { LoadingWidget.getInstance().hide(); iEventDetail.setEvent(result); iEventDetail.show(); } }, MESSAGES.waitLoading(event.getEvent().getName())); } }; iTable = new EventMeetingTable(EventMeetingTable.Mode.ListOfEvents, true, this) { @Override protected void onSortByChanded(EventComparator.EventMeetingSortBy sortBy, boolean asc) { changeUrl(); } @Override protected void onColumnShownOrHid(int eventCookieFlags) { changeUrl(); } }; iTable.setMeetingFilter(this); iTable.addMouseClickListener(new MouseClickListener<EventMeetingRow>() { @Override public void onMouseClick(final TableEvent<EventMeetingRow> event) { if (event.getData() == null) return; final EventInterface e = event.getData().getEvent(); if (e == null || !e.isCanView()) return; LoadingWidget.execute( EventDetailRpcRequest.requestEventDetails(iSession.getAcademicSessionId(), e.getId()), new AsyncCallback<EventInterface>() { @Override public void onFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedLoad(e.getName(), caught.getMessage()), caught); } @Override public void onSuccess(EventInterface result) { LoadingWidget.getInstance().hide(); iEventDetail.setEvent(result); iEventDetail.show(); } }, MESSAGES.waitLoading(e.getName())); } }); iApproveDialog = new ApproveDialog(this) { @Override protected void onSubmit(ApproveEventRpcRequest.Operation operation, List<EventMeetingRow> data, String message, boolean emailConfirmation) { Map<EventInterface, List<MeetingInterface>> event2meetings = new HashMap<EventInterface, List<MeetingInterface>>(); List<EventInterface> events = new ArrayList<EventInterface>(); for (EventMeetingRow row : data) { if (row.getMeeting() != null) { List<MeetingInterface> meetings = event2meetings.get(row.getEvent()); if (meetings == null) { meetings = new ArrayList<EventInterface.MeetingInterface>(); event2meetings.put(row.getEvent(), meetings); events.add(row.getEvent()); } meetings.add(row.getMeeting()); } else { events.add(row.getEvent()); } } onSubmit(operation, events.iterator(), event2meetings, message, emailConfirmation, new GwtRpcResponseList<EventInterface>(iData)); } protected void onSubmit(final ApproveEventRpcRequest.Operation operation, final Iterator<EventInterface> events, final Map<EventInterface, List<MeetingInterface>> event2meetings, final String message, final boolean emailConfirmation, final GwtRpcResponseList<EventInterface> data) { if (events.hasNext()) { final EventInterface event = events.next(); List<MeetingInterface> meetings = event2meetings.get(event); if (meetings == null) { meetings = new ArrayList<MeetingInterface>(); for (MeetingInterface meeting : event.getMeetings()) { switch (operation) { case APPROVE: case REJECT: if (meeting.isCanApprove() && !filter(event, meeting)) meetings.add(meeting); break; case CANCEL: if (meeting.isCanCancel() && !filter(event, meeting)) meetings.add(meeting); break; case INQUIRE: if (meeting.isCanInquire() && !filter(event, meeting)) meetings.add(meeting); break; } } } if (meetings.isEmpty()) { onSubmit(operation, events, event2meetings, message, emailConfirmation, data); } else { switch (operation) { case APPROVE: LoadingWidget.getInstance().show(MESSAGES.waitForApproval(event.getName())); break; case INQUIRE: LoadingWidget.getInstance().show(MESSAGES.waitForInquiry(event.getName())); break; case REJECT: LoadingWidget.getInstance().show(MESSAGES.waitForRejection(event.getName())); break; case CANCEL: LoadingWidget.getInstance().show(MESSAGES.waitForCancellation(event.getName())); break; } RPC.execute( ApproveEventRpcRequest.createRequest(operation, iSession.getAcademicSessionId(), event, meetings, message, emailConfirmation), new AsyncCallback<SaveOrApproveEventRpcResponse>() { @Override public void onFailure(Throwable caught) { LoadingWidget.getInstance().hide(); UniTimeNotifications.error(caught); onSubmit(operation, events, event2meetings, message, emailConfirmation, data); } @Override public void onSuccess(SaveOrApproveEventRpcResponse result) { LoadingWidget.getInstance().hide(); if (result.hasMessages()) for (MessageInterface m : result.getMessages()) { if (m.isError()) UniTimeNotifications.warn(m.getMessage()); else if (m.isWarning()) UniTimeNotifications.error(m.getMessage()); else UniTimeNotifications.info(m.getMessage()); } switch (operation) { case APPROVE: case REJECT: case CANCEL: tinker(data, event.getId(), result.getEvent()); } onSubmit(operation, events, event2meetings, message, emailConfirmation, data); } }); } } else { LoadingWidget.getInstance().hide(); populate(data); } } }; iTable.setOperation(EventMeetingTable.OperationType.Approve, iApproveDialog); iTable.setOperation(EventMeetingTable.OperationType.Reject, iApproveDialog); iTable.setOperation(EventMeetingTable.OperationType.Inquire, iApproveDialog); iTable.setOperation(EventMeetingTable.OperationType.Cancel, iApproveDialog); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { if (iInitialized) { if ("event=add".equals(event.getValue())) iHistoryToken.parse(event.getValue()); else iHistoryToken.reset(event.getValue()); setup(false); if (LoadingWidget.getInstance().isShowing()) LoadingWidget.getInstance().hide(); } } }); }
From source file:org.unitime.timetable.gwt.client.rooms.RoomFeaturesPage.java
License:Apache License
public RoomFeaturesPage() { if (Location.getParameter("mode") != null) iMode = RoomsPageMode.valueOf(Location.getParameter("mode").toUpperCase()); iHistoryToken = new HistoryToken(iMode); iPanel = new SimplePanel(); iFeaturesPanel = new SimpleForm(); iFeaturesPanel.setWidth("100%"); ClickHandler clickSearch = new ClickHandler() { @Override//from www . j a v a2s . c o m public void onClick(ClickEvent event) { changeUrl(); search(null); } }; ClickHandler clickMore = new ClickHandler() { @Override public void onClick(ClickEvent event) { final PopupPanel popup = new PopupPanel(true); MenuBar menu = new UniTimeTableHeader.MenuBarWithAccessKeys(); if (iProperties != null && iProperties.isCanSaveFilterDefaults()) { MenuItem item = new MenuItem(MESSAGES.buttonClear(), true, new Command() { @Override public void execute() { popup.hide(); iFilter.setValue(iHistoryToken.getDefaultParameter("q", ""), true); hideResults(); changeUrl(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(MESSAGES.buttonClear())); menu.addItem(item); menu.addSeparator(); } MenuBar sortItems = new MenuBar(true); for (final RoomFeaturesColumn column : RoomFeaturesColumn.values()) { if (RoomFeaturesComparator.isApplicable(column)) { if ((iGlobalFeaturesTable.getRowCount() <= 1 || iGlobalFeaturesTable.getNbrCells(column) == 0) && (iDepartmentalFeaturesTable.getRowCount() <= 1 || iDepartmentalFeaturesTable.getNbrCells(column) == 0)) continue; String name = iGlobalFeaturesTable.getColumnName(column, 0).replace("<br>", " "); MenuItem item = new MenuItem(name, true, new Command() { @Override public void execute() { popup.hide(); int sortBy = RoomCookie.getInstance().getRoomFeaturesSortBy(); if (sortBy == (1 + column.ordinal()) || sortBy == (-1 - column.ordinal())) { sortBy = -sortBy; } else { sortBy = 1 + column.ordinal(); } RoomCookie.getInstance().setSortRoomFeaturesBy(sortBy); iGlobalFeaturesTable.setSortBy(sortBy); iDepartmentalFeaturesTable.setSortBy(sortBy); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(MESSAGES.opSortBy(name))); sortItems.addItem(item); } } MenuItem sortMenu = new MenuItem(MESSAGES.opSort(), sortItems); sortMenu.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(sortMenu); MenuBar deptItems = new MenuBar(true); for (final DeptMode d : DeptMode.values()) { String name = (RoomCookie.getInstance().getDeptMode() == d.ordinal() ? MESSAGES.opUncheck(d.getName()) : MESSAGES.opCheck(d.getName())); MenuItem item = new MenuItem(name, true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setDeptMode(d.ordinal()); iGlobalFeaturesTable.refreshTable(); iDepartmentalFeaturesTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), d.getName()); deptItems.addItem(item); } MenuItem deptMenu = new MenuItem(MESSAGES.opDepartmentFormat(), deptItems); deptMenu.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(deptMenu); if (iProperties.isCanExportRoomFeatures()) { menu.addSeparator(); MenuItem exportPdf = new MenuItem(MESSAGES.opExportPDF(), true, new Command() { @Override public void execute() { popup.hide(); export("roomfeatures.pdf"); } }); Roles.getMenuitemRole().setAriaLabelProperty(exportPdf.getElement(), MESSAGES.opExportPDF()); menu.addItem(exportPdf); MenuItem exportCsv = new MenuItem(MESSAGES.opExportCSV(), true, new Command() { @Override public void execute() { popup.hide(); export("roomfeatures.csv"); } }); Roles.getMenuitemRole().setAriaLabelProperty(exportCsv.getElement(), MESSAGES.opExportCSV()); menu.addItem(exportCsv); } popup.add(menu); popup.showRelativeTo((UIObject) event.getSource()); menu.focus(); } }; ClickHandler clickNew = new ClickHandler() { @Override public void onClick(ClickEvent event) { edit(null); } }; iRoomFeatureEdit = new RoomFeatureEdit(iMode) { @Override protected void onShow() { RoomHint.hideHint(); iRootPanel.setWidget(iRoomFeatureEdit); changeUrl(); } @Override protected void onHide(boolean refresh, FeatureInterface feature) { iRootPanel.setWidget(iFeaturesPanel); UniTimePageLabel.getInstance().setPageName(MESSAGES.pageRoomFeatures()); changeUrl(); if (refresh && (iFeaturesPanel.getRowFormatter().isVisible(iGlobalFeaturesRow) || iFeaturesPanel.getRowFormatter().isVisible(iDepartmentalFeaturesRow))) search(feature == null ? null : feature.getId()); } }; if (iMode.hasSessionSelection()) { iHeaderPanel = new UniTimeHeaderPanel(MESSAGES.sectFilter()); iFeaturesPanel.addHeaderRow(iHeaderPanel); iSession = new AcademicSessionSelectionBox(iHistoryToken.getParameter("term"), "RoomFeatures") { @Override protected void onInitializationSuccess(List<AcademicSession> sessions) { UniTimePageHeader.getInstance().getRight().setVisible(false); UniTimePageHeader.getInstance().getRight().setPreventDefault(true); setup(getAcademicSessionId(), CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } @Override protected void onInitializationFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedLoadSessions(caught.getMessage()), caught); } }; iSession.addAcademicSessionChangeHandler(new AcademicSessionChangeHandler() { @Override public void onAcademicSessionChange(AcademicSessionChangeEvent event) { setup(event.getNewAcademicSessionId(), iDepartmentalFeaturesTable.getRowCount() > 1 || iGlobalFeaturesTable.getRowCount() > 1); } }); ; iFeaturesPanel.addRow(MESSAGES.propAcademicSession(), (Widget) iSession); iFilter = new RoomFilterBox(iSession); iFeaturesPanel.addRow(MESSAGES.propRoomFilter(), iFilter); iHeaderPanel.addButton("search", MESSAGES.buttonSearch(), clickSearch); iHeaderPanel.addButton("more", MESSAGES.buttonMoreOperations(), clickMore); iHeaderPanel.addButton("new", MESSAGES.buttonAddNewRoom(), clickNew); iHeaderPanel.setEnabled("more", false); iHeaderPanel.setEnabled("new", false); } else { iFilterPanel = new HorizontalPanel(); iFilterPanel.setSpacing(3); Label filterLabel = new Label(MESSAGES.propFilter()); iFilterPanel.add(filterLabel); iFilterPanel.setCellVerticalAlignment(filterLabel, HasVerticalAlignment.ALIGN_MIDDLE); iSession = new Session(); iFilter = new RoomFilterBox(iSession); iFilterPanel.add(iFilter); iSearch = new AriaButton(MESSAGES.buttonSearch()); iSearch.addStyleName("unitime-NoPrint"); iSearch.addClickHandler(clickSearch); iFilterPanel.add(iSearch); iMore = new AriaButton(MESSAGES.buttonMoreOperations()); iMore.setEnabled(false); iMore.addStyleName("unitime-NoPrint"); iMore.addClickHandler(clickMore); iFilterPanel.add(iMore); iNew = new AriaButton(MESSAGES.buttonAddNewRoomFeature()); iNew.setEnabled(false); iNew.addStyleName("unitime-NoPrint"); iNew.addClickHandler(clickNew); iFilterPanel.add(iNew); int filterRow = iFeaturesPanel.addRow(iFilterPanel); iFeaturesPanel.getCellFormatter().setHorizontalAlignment(filterRow, 0, HasHorizontalAlignment.ALIGN_CENTER); setup(null, CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } iGlobalFeaturesHeader = new UniTimeHeaderPanel(MESSAGES.headerGlobalRoomFeatures()); iGlobalFeaturesRow = iFeaturesPanel.addHeaderRow(iGlobalFeaturesHeader); iGlobalFeaturesTable = new RoomFeaturesTable(true) { protected void doSort(RoomFeaturesColumn column) { super.doSort(column); iDepartmentalFeaturesTable.setSortBy(RoomCookie.getInstance().getRoomFeaturesSortBy()); } }; iFeaturesPanel.addRow(iGlobalFeaturesTable); iFeaturesPanel.getRowFormatter().setVisible(iGlobalFeaturesRow, false); iFeaturesPanel.getRowFormatter().setVisible(iGlobalFeaturesRow + 1, false); iDepartmentalFeaturesHeader = new UniTimeHeaderPanel(MESSAGES.headerDepartmentalRoomFeatures()); iDepartmentalFeaturesRow = iFeaturesPanel.addHeaderRow(iDepartmentalFeaturesHeader); iDepartmentalFeaturesTable = new RoomFeaturesTable(false) { protected void doSort(RoomFeaturesColumn column) { super.doSort(column); iGlobalFeaturesTable.setSortBy(RoomCookie.getInstance().getRoomFeaturesSortBy()); } }; iFeaturesPanel.addRow(iDepartmentalFeaturesTable); iFeaturesPanel.getRowFormatter().setVisible(iDepartmentalFeaturesRow, false); iFeaturesPanel.getRowFormatter().setVisible(iDepartmentalFeaturesRow + 1, false); iRootPanel = new SimplePanel(iFeaturesPanel); iPanel.setWidget(iRootPanel); iGlobalFeaturesTable.addMouseClickListener(new MouseClickListener<FeatureInterface>() { @Override public void onMouseClick(final TableEvent<FeatureInterface> event) { if (event.getData() != null && (event.getData().canEdit() || event.getData().canDelete())) edit(event.getData()); } }); iDepartmentalFeaturesTable.addMouseClickListener(new MouseClickListener<FeatureInterface>() { @Override public void onMouseClick(final TableEvent<FeatureInterface> event) { if (event.getData() != null && (event.getData().canEdit() || event.getData().canDelete())) edit(event.getData()); } }); initWidget(iPanel); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { if (!iInitialized) return; iHistoryToken.reset(event.getValue()); updateFilter(iFeaturesPanel.getRowFormatter().isVisible(iGlobalFeaturesRow) || iFeaturesPanel.getRowFormatter().isVisible(iDepartmentalFeaturesRow)); } }); }
From source file:org.unitime.timetable.gwt.client.rooms.RoomGroupsPage.java
License:Apache License
public RoomGroupsPage() { if (Location.getParameter("mode") != null) iMode = RoomsPageMode.valueOf(Location.getParameter("mode").toUpperCase()); iHistoryToken = new HistoryToken(iMode); iPanel = new SimplePanel(); iGroupsPanel = new SimpleForm(); iGroupsPanel.setWidth("100%"); ClickHandler clickSearch = new ClickHandler() { @Override/* www .jav a2 s . co m*/ public void onClick(ClickEvent event) { changeUrl(); search(null); } }; ClickHandler clickMore = new ClickHandler() { @Override public void onClick(ClickEvent event) { final PopupPanel popup = new PopupPanel(true); MenuBar menu = new UniTimeTableHeader.MenuBarWithAccessKeys(); if (iProperties != null && iProperties.isCanSaveFilterDefaults()) { MenuItem item = new MenuItem(MESSAGES.buttonClear(), true, new Command() { @Override public void execute() { popup.hide(); iFilter.setValue(iHistoryToken.getDefaultParameter("q", ""), true); hideResults(); changeUrl(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(MESSAGES.buttonClear())); menu.addItem(item); menu.addSeparator(); } MenuBar sortItems = new MenuBar(true); for (final RoomGroupsColumn column : RoomGroupsColumn.values()) { if (RoomGroupsComparator.isApplicable(column)) { if ((iGlobalGroupsTable.getRowCount() <= 1 || iGlobalGroupsTable.getNbrCells(column) == 0) && (iDepartmentalGroupsTable.getRowCount() <= 1 || iDepartmentalGroupsTable.getNbrCells(column) == 0)) continue; String name = iGlobalGroupsTable.getColumnName(column, 0).replace("<br>", " "); MenuItem item = new MenuItem(name, true, new Command() { @Override public void execute() { popup.hide(); int sortBy = RoomCookie.getInstance().getRoomGroupsSortBy(); if (sortBy == (1 + column.ordinal()) || sortBy == (-1 - column.ordinal())) { sortBy = -sortBy; } else { sortBy = 1 + column.ordinal(); } RoomCookie.getInstance().setSortRoomGroupsBy(sortBy); iGlobalGroupsTable.setSortBy(sortBy); iDepartmentalGroupsTable.setSortBy(sortBy); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(MESSAGES.opSortBy(name))); sortItems.addItem(item); } } MenuItem sortMenu = new MenuItem(MESSAGES.opSort(), sortItems); sortMenu.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(sortMenu); MenuBar deptItems = new MenuBar(true); for (final DeptMode d : DeptMode.values()) { String name = (RoomCookie.getInstance().getDeptMode() == d.ordinal() ? MESSAGES.opUncheck(d.getName()) : MESSAGES.opCheck(d.getName())); MenuItem item = new MenuItem(name, true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setDeptMode(d.ordinal()); iGlobalGroupsTable.refreshTable(); iDepartmentalGroupsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), d.getName()); deptItems.addItem(item); } MenuItem deptMenu = new MenuItem(MESSAGES.opDepartmentFormat(), deptItems); deptMenu.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(deptMenu); if (iProperties.isCanExportRoomGroups()) { menu.addSeparator(); MenuItem exportPdf = new MenuItem(MESSAGES.opExportPDF(), true, new Command() { @Override public void execute() { popup.hide(); export("roomgroups.pdf"); } }); Roles.getMenuitemRole().setAriaLabelProperty(exportPdf.getElement(), MESSAGES.opExportPDF()); menu.addItem(exportPdf); MenuItem exportCsv = new MenuItem(MESSAGES.opExportCSV(), true, new Command() { @Override public void execute() { popup.hide(); export("roomgroups.csv"); } }); Roles.getMenuitemRole().setAriaLabelProperty(exportCsv.getElement(), MESSAGES.opExportCSV()); menu.addItem(exportCsv); } popup.add(menu); popup.showRelativeTo((UIObject) event.getSource()); menu.focus(); } }; ClickHandler clickNew = new ClickHandler() { @Override public void onClick(ClickEvent event) { edit(null); } }; iRoomGroupEdit = new RoomGroupEdit(iMode) { @Override protected void onShow() { RoomHint.hideHint(); iRootPanel.setWidget(iRoomGroupEdit); changeUrl(); } @Override protected void onHide(boolean refresh, GroupInterface group) { iRootPanel.setWidget(iGroupsPanel); UniTimePageLabel.getInstance().setPageName(MESSAGES.pageRoomGroups()); changeUrl(); if (refresh && (iGroupsPanel.getRowFormatter().isVisible(iGlobalGroupsRow) || iGroupsPanel.getRowFormatter().isVisible(iDepartmentalGroupsRow))) search(group == null ? null : group.getId()); } }; if (iMode.hasSessionSelection()) { iHeaderPanel = new UniTimeHeaderPanel(MESSAGES.sectFilter()); iGroupsPanel.addHeaderRow(iHeaderPanel); iSession = new AcademicSessionSelectionBox(iHistoryToken.getParameter("term"), "RoomGroups") { @Override protected void onInitializationSuccess(List<AcademicSession> sessions) { UniTimePageHeader.getInstance().getRight().setVisible(false); UniTimePageHeader.getInstance().getRight().setPreventDefault(true); setup(getAcademicSessionId(), CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } @Override protected void onInitializationFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedLoadSessions(caught.getMessage()), caught); } }; iSession.addAcademicSessionChangeHandler(new AcademicSessionChangeHandler() { @Override public void onAcademicSessionChange(AcademicSessionChangeEvent event) { setup(event.getNewAcademicSessionId(), iDepartmentalGroupsTable.getRowCount() > 1 || iGlobalGroupsTable.getRowCount() > 1); } }); ; iGroupsPanel.addRow(MESSAGES.propAcademicSession(), (Widget) iSession); iFilter = new RoomFilterBox(iSession); iGroupsPanel.addRow(MESSAGES.propRoomFilter(), iFilter); iHeaderPanel.addButton("search", MESSAGES.buttonSearch(), clickSearch); iHeaderPanel.addButton("more", MESSAGES.buttonMoreOperations(), clickMore); iHeaderPanel.addButton("new", MESSAGES.buttonAddNewRoom(), clickNew); iHeaderPanel.setEnabled("more", false); iHeaderPanel.setEnabled("new", false); } else { iFilterPanel = new HorizontalPanel(); iFilterPanel.setSpacing(3); Label filterLabel = new Label(MESSAGES.propFilter()); iFilterPanel.add(filterLabel); iFilterPanel.setCellVerticalAlignment(filterLabel, HasVerticalAlignment.ALIGN_MIDDLE); iSession = new Session(); iFilter = new RoomFilterBox(iSession); iFilterPanel.add(iFilter); iSearch = new AriaButton(MESSAGES.buttonSearch()); iSearch.addStyleName("unitime-NoPrint"); iSearch.addClickHandler(clickSearch); iFilterPanel.add(iSearch); iMore = new AriaButton(MESSAGES.buttonMoreOperations()); iMore.setEnabled(false); iMore.addStyleName("unitime-NoPrint"); iMore.addClickHandler(clickMore); iFilterPanel.add(iMore); iNew = new AriaButton(MESSAGES.buttonAddNewRoomGroup()); iNew.setEnabled(false); iNew.addStyleName("unitime-NoPrint"); iNew.addClickHandler(clickNew); iFilterPanel.add(iNew); int filterRow = iGroupsPanel.addRow(iFilterPanel); iGroupsPanel.getCellFormatter().setHorizontalAlignment(filterRow, 0, HasHorizontalAlignment.ALIGN_CENTER); setup(null, CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } iGlobalGroupsHeader = new UniTimeHeaderPanel(MESSAGES.headerGlobalRoomGroups()); iGlobalGroupsRow = iGroupsPanel.addHeaderRow(iGlobalGroupsHeader); iGlobalGroupsTable = new RoomGroupsTable(true) { protected void doSort(RoomGroupsColumn column) { super.doSort(column); iDepartmentalGroupsTable.setSortBy(RoomCookie.getInstance().getRoomGroupsSortBy()); } }; iGroupsPanel.addRow(iGlobalGroupsTable); iGroupsPanel.getRowFormatter().setVisible(iGlobalGroupsRow, false); iGroupsPanel.getRowFormatter().setVisible(iGlobalGroupsRow + 1, false); iDepartmentalGroupsHeader = new UniTimeHeaderPanel(MESSAGES.headerDepartmentalRoomGroups()); iDepartmentalGroupsRow = iGroupsPanel.addHeaderRow(iDepartmentalGroupsHeader); iDepartmentalGroupsTable = new RoomGroupsTable(false) { protected void doSort(RoomGroupsColumn column) { super.doSort(column); iGlobalGroupsTable.setSortBy(RoomCookie.getInstance().getRoomGroupsSortBy()); } }; iGroupsPanel.addRow(iDepartmentalGroupsTable); iGroupsPanel.getRowFormatter().setVisible(iDepartmentalGroupsRow, false); iGroupsPanel.getRowFormatter().setVisible(iDepartmentalGroupsRow + 1, false); iRootPanel = new SimplePanel(iGroupsPanel); iPanel.setWidget(iRootPanel); iGlobalGroupsTable.addMouseClickListener(new MouseClickListener<GroupInterface>() { @Override public void onMouseClick(final TableEvent<GroupInterface> event) { if (event.getData() != null && (event.getData().canDelete() || event.getData().canEdit())) edit(event.getData()); } }); iDepartmentalGroupsTable.addMouseClickListener(new MouseClickListener<GroupInterface>() { @Override public void onMouseClick(final TableEvent<GroupInterface> event) { if (event.getData() != null && (event.getData().canDelete() || event.getData().canEdit())) edit(event.getData()); } }); initWidget(iPanel); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { if (!iInitialized) return; iHistoryToken.reset(event.getValue()); updateFilter(iGroupsPanel.getRowFormatter().isVisible(iGlobalGroupsRow) || iGroupsPanel.getRowFormatter().isVisible(iDepartmentalGroupsRow)); } }); }
From source file:org.unitime.timetable.gwt.client.rooms.RoomsPage.java
License:Apache License
public RoomsPage() { if (Location.getParameter("mode") != null) iMode = RoomsPageMode.valueOf(Location.getParameter("mode").toUpperCase()); iHistoryToken = new HistoryToken(iMode); iPanel = new SimplePanel(); iRoomsPanel = new VerticalPanel(); iRoomsPanel.setWidth("100%"); ClickHandler clickSearch = new ClickHandler() { @Override//from w w w. ja v a 2 s. c om public void onClick(ClickEvent event) { changeUrl(); search(null); } }; ClickHandler clickNew = new ClickHandler() { @Override public void onClick(ClickEvent event) { iRoomEdit.setRoom(null); iRoomEdit.show(); } }; ClickHandler clickMore = new ClickHandler() { @Override public void onClick(ClickEvent event) { if (iRoomsTable == null) return; final PopupPanel popup = new PopupPanel(true); MenuBar menu = new UniTimeTableHeader.MenuBarWithAccessKeys(); if (iProperties != null && iProperties.isCanSaveFilterDefaults()) { MenuItem item = new MenuItem(MESSAGES.buttonClear(), true, new Command() { @Override public void execute() { popup.hide(); iFilter.setValue(iHistoryToken.getDefaultParameter("q", ""), true); hideResults(); changeUrl(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(MESSAGES.buttonClear())); menu.addItem(item); menu.addSeparator(); } boolean first = true; List<Operation> showHide = iRoomsTable.getShowHideOperations(); if (!showHide.isEmpty()) { MenuBar submenu = new MenuBar(true); for (final Operation op : showHide) { MenuItem item = new MenuItem(op.getName(), true, new Command() { @Override public void execute() { popup.hide(); op.execute(); } }); if (op instanceof AriaOperation) Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), ((AriaOperation) op).getAriaLabel()); else Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(op.getName())); submenu.addItem(item); } MenuItem columns = new MenuItem(MESSAGES.opColumns(), submenu); columns.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(columns); first = false; } List<Operation> sorts = iRoomsTable.getSortOperations(); if (!sorts.isEmpty()) { MenuBar submenu = new MenuBar(true); for (final Operation op : sorts) { String name = op.getName(); if (op instanceof HasColumnName) name = ((HasColumnName) op).getColumnName(); MenuItem item = new MenuItem(name, true, new Command() { @Override public void execute() { popup.hide(); op.execute(); } }); if (op instanceof AriaOperation) Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), ((AriaOperation) op).getAriaLabel()); else Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(op.getName())); submenu.addItem(item); } MenuItem columns = new MenuItem(MESSAGES.opSort(), submenu); columns.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(columns); first = false; } if (iRoomsTable.hasDepartmentOperations()) { List<Operation> depts = iRoomsTable.getDepartmentOperations(); if (!depts.isEmpty()) { MenuBar submenu = new MenuBar(true); for (final Operation op : depts) { MenuItem item = new MenuItem(op.getName(), true, new Command() { @Override public void execute() { popup.hide(); op.execute(); } }); if (op instanceof AriaOperation) Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), ((AriaOperation) op).getAriaLabel()); else Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(op.getName())); submenu.addItem(item); } MenuItem columns = new MenuItem(MESSAGES.opDepartmentFormat(), submenu); columns.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(columns); first = false; } } if (iRoomsTable.hasOrientationOperations()) { MenuBar orientation = null; if (!RoomCookie.getInstance().isGridAsText()) { if (orientation == null) orientation = new MenuBar(true); MenuItem item = new MenuItem(MESSAGES.opOrientationAsText(), true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setOrientation(true, RoomCookie.getInstance().areRoomsHorizontal()); iRoomsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), MESSAGES.opOrientationAsText()); orientation.addItem(item); } if (RoomCookie.getInstance().isGridAsText()) { if (orientation == null) orientation = new MenuBar(true); MenuItem item = new MenuItem(MESSAGES.opOrientationAsGrid(), true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setOrientation(false, RoomCookie.getInstance().areRoomsHorizontal()); iRoomsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), MESSAGES.opOrientationAsGrid()); orientation.addItem(item); } if (!RoomCookie.getInstance().isGridAsText() && RoomCookie.getInstance().areRoomsHorizontal()) { if (orientation == null) orientation = new MenuBar(true); MenuItem item = new MenuItem(MESSAGES.opOrientationVertical(), true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setOrientation(false, false); iRoomsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), MESSAGES.opOrientationVertical()); orientation.addItem(item); } if (!RoomCookie.getInstance().isGridAsText() && !RoomCookie.getInstance().areRoomsHorizontal()) { if (orientation == null) orientation = new MenuBar(true); MenuItem item = new MenuItem(MESSAGES.opOrientationHorizontal(), true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setOrientation(false, true); iRoomsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), MESSAGES.opOrientationHorizontal()); orientation.addItem(item); } if (iProperties != null && iProperties.hasModes() && !RoomCookie.getInstance().isGridAsText()) { boolean firstMode = true; for (final RoomSharingDisplayMode mode : iProperties.getModes()) { if (!mode.toHex().equals(RoomCookie.getInstance().getMode())) { if (orientation == null) orientation = new MenuBar(true); else if (firstMode) orientation.addSeparator(); firstMode = false; MenuItem item = new MenuItem(mode.getName(), true, new Command() { @Override public void execute() { popup.hide(); RoomCookie.getInstance().setMode( RoomCookie.getInstance().areRoomsHorizontal(), mode.toHex()); iRoomsTable.refreshTable(); } }); Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), mode.getName()); orientation.addItem(item); } } } if (orientation != null) { MenuItem columns = new MenuItem(MESSAGES.opOrientation(), orientation); columns.getElement().getStyle().setCursor(Cursor.POINTER); menu.addItem(columns); first = false; } ; } for (final Operation op : iRoomsTable.getOtherOperations()) { MenuItem item = new MenuItem(op.getName(), true, new Command() { @Override public void execute() { popup.hide(); op.execute(); } }); if (op instanceof AriaOperation) Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), ((AriaOperation) op).getAriaLabel()); else Roles.getMenuitemRole().setAriaLabelProperty(item.getElement(), UniTimeHeaderPanel.stripAccessKey(op.getName())); if (op.hasSeparator() && !first) menu.addSeparator(); menu.addItem(item); first = false; } popup.add(menu); popup.showRelativeTo((UIObject) event.getSource()); menu.focus(); } }; ClickHandler clickEditRoomSharing = new ClickHandler() { @Override public void onClick(ClickEvent event) { RoomFilterRpcRequest request = iFilter.getElementsRequest(); request.getOptions().remove("department"); LoadingWidget.execute(request, new AsyncCallback<FilterRpcResponse>() { @Override public void onFailure(Throwable caught) { iFilter.setErrorHint(MESSAGES.failedToLoadRooms(caught.getMessage())); UniTimeNotifications.error(MESSAGES.failedToLoadRooms(caught.getMessage()), caught); } @Override public void onSuccess(FilterRpcResponse result) { iFilter.clearHint(); if (result == null || result.getResults() == null || result.getResults().isEmpty()) { iFilter.setErrorHint(MESSAGES.errorNoRoomsMatchingFilter()); UniTimeNotifications.error(MESSAGES.errorNoRoomsMatchingFilter()); } else { iRoomDepartmentsEdit.setRooms(result.getResults(), iRoomsTable.hasSortBy() ? new Integer(iRoomsTable.getSortBy()) : null); iRoomDepartmentsEdit.show(); } } }, MESSAGES.waitLoadingRooms()); } }; if (iMode.hasSessionSelection()) { iFilterForm = new SimpleForm(); iHeaderPanel = new UniTimeHeaderPanel(MESSAGES.sectFilter()); iFilterForm.addHeaderRow(iHeaderPanel); iSession = new AcademicSessionSelectionBox(iHistoryToken.getParameter("term"), "Rooms") { @Override protected void onInitializationSuccess(List<AcademicSession> sessions) { iFilterForm.setVisible(sessions != null && !sessions.isEmpty()); UniTimePageHeader.getInstance().getRight().setVisible(false); UniTimePageHeader.getInstance().getRight().setPreventDefault(true); setup(getAcademicSessionId(), CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } @Override protected void onInitializationFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedLoadSessions(caught.getMessage()), caught); } }; iSession.addAcademicSessionChangeHandler(new AcademicSessionChangeHandler() { @Override public void onAcademicSessionChange(AcademicSessionChangeEvent event) { setup(event.getNewAcademicSessionId(), iRoomsTable != null && iRoomsTable.isVisible() && iRoomsTable.getRowCount() > 1); } }); ; iFilterForm.addRow(MESSAGES.propAcademicSession(), (Widget) iSession); iFilter = new RoomFilterBox(iSession); iFilterForm.addRow(MESSAGES.propRoomFilter(), iFilter); iRoomsPanel.add(iFilterForm); iHeaderPanel.addButton("search", MESSAGES.buttonSearch(), clickSearch); iHeaderPanel.addButton("more", MESSAGES.buttonMoreOperations(), clickMore); iHeaderPanel.addButton("new", MESSAGES.buttonAddNewRoom(), clickNew); iHeaderPanel.addButton("sharing", MESSAGES.buttonEditRoomSharing(), clickEditRoomSharing); iHeaderPanel.setEnabled("more", false); iHeaderPanel.setEnabled("new", false); iHeaderPanel.setEnabled("sharing", false); } else { iFilterPanel = new HorizontalPanel(); iFilterPanel.setSpacing(3); Label filterLabel = new Label(MESSAGES.propFilter()); iFilterPanel.add(filterLabel); iFilterPanel.setCellVerticalAlignment(filterLabel, HasVerticalAlignment.ALIGN_MIDDLE); iSession = new Session(); iFilter = new RoomFilterBox(iSession); iFilterPanel.add(iFilter); iSearch = new AriaButton(MESSAGES.buttonSearch()); iSearch.addStyleName("unitime-NoPrint"); iSearch.addClickHandler(clickSearch); iFilterPanel.add(iSearch); iMore = new AriaButton(MESSAGES.buttonMoreOperations()); iMore.setEnabled(false); iMore.addStyleName("unitime-NoPrint"); iMore.addClickHandler(clickMore); iFilterPanel.add(iMore); iNew = new AriaButton(MESSAGES.buttonAddNewRoom()); iNew.setEnabled(false); iNew.addStyleName("unitime-NoPrint"); iNew.addClickHandler(clickNew); iFilterPanel.add(iNew); iEditRoomSharing = new AriaButton(MESSAGES.buttonEditRoomSharing()); iEditRoomSharing.setEnabled(false); iEditRoomSharing.setVisible(false); iEditRoomSharing.addStyleName("unitime-NoPrint"); iEditRoomSharing.addClickHandler(clickEditRoomSharing); iFilterPanel.add(iEditRoomSharing); iRoomsPanel.add(iFilterPanel); iRoomsPanel.setCellHorizontalAlignment(iFilterPanel, HasHorizontalAlignment.ALIGN_CENTER); setup(null, CONSTANTS.searchWhenPageIsLoaded() && (iHistoryToken.hasParameter("id") || iHistoryToken.hasParameter("q"))); } iRoomsTable = new RoomsTable(iMode); iRoomsTable.getElement().getStyle().setMarginTop(10, Unit.PX); iRoomsPanel.add(iRoomsTable); iRootPanel = new SimplePanel(iRoomsPanel); iPanel.setWidget(iRootPanel); initWidget(iPanel); History.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { if (!iInitialized) return; if ("id=add".equals(event.getValue())) iHistoryToken.parse(event.getValue()); else iHistoryToken.reset(event.getValue()); updateFilter(iRoomsTable.isVisible()); } }); iRoomsTable.addOperation(new Operation() { @Override public void execute() { export("rooms.pdf"); } @Override public boolean isApplicable() { return iRoomsTable.getRowCount() > 0 && (iProperties != null && iProperties.isCanExportPdf()); } @Override public boolean hasSeparator() { return false; } @Override public String getName() { return MESSAGES.opExportPDF(); } }); iRoomsTable.addOperation(new Operation() { @Override public void execute() { export("rooms.csv"); } @Override public boolean isApplicable() { return iRoomsTable.getRowCount() > 0 && (iProperties != null && iProperties.isCanExportCsv()); } @Override public boolean hasSeparator() { return false; } @Override public String getName() { return MESSAGES.opExportCSV(); } }); iRoomsTable.addMouseClickListener(new MouseClickListener<RoomDetailInterface>() { @Override public void onMouseClick(final TableEvent<RoomDetailInterface> event) { if (event.getData() == null || !event.getData().isCanShowDetail()) return; iRoomDetail.setRoom(event.getData()); iRoomDetail.show(); } }); iRoomDetail = new RoomDetail(iMode) { @Override protected void onHide() { iRootPanel.setWidget(iRoomsPanel); UniTimePageLabel.getInstance().setPageName(MESSAGES.pageRooms()); if (iRoomsTable != null && iRoomsTable.isVisible()) search(getRoom() == null ? null : getRoom().getUniqueId()); changeUrl(); } @Override protected void onShow() { iRootPanel.setWidget(iRoomDetail); changeUrl(); } @Override protected void edit() { final Long roomId = (getRoom() == null ? null : getRoom().getUniqueId()); if (roomId != null) { FilterRpcRequest rooms = iFilter.createRpcRequest(); rooms.setCommand(FilterRpcRequest.Command.ENUMERATE); rooms.addOption("id", getRoom().getUniqueId().toString()); rooms.setSessionId(iProperties.getAcademicSessionId()); LoadingWidget.execute(rooms, new AsyncCallback<FilterRpcResponse>() { @Override public void onFailure(Throwable caught) { UniTimeNotifications.error(MESSAGES.failedToLoadRoomDetails(caught.getMessage()), caught); } @Override public void onSuccess(FilterRpcResponse result) { if (result == null || result.getResults() == null || result.getResults().isEmpty()) { UniTimeNotifications.error(MESSAGES.errorRoomDoesNotExist(roomId.toString())); } else { iRoomEdit.setRoom((RoomDetailInterface) result.getResults().get(0)); iRoomEdit.show(); } } }, MESSAGES.waitLoadingRoomDetails()); } else { hide(); } } @Override protected RoomDetailInterface getPrevious(Long roomId) { return iRoomsTable == null ? null : iRoomsTable.getPrevious(roomId); } @Override protected RoomDetailInterface getNext(Long roomId) { return iRoomsTable == null ? null : iRoomsTable.getNext(roomId); } @Override protected void previous(final RoomDetailInterface room) { setRoom(room); changeUrl(); } @Override protected void next(final RoomDetailInterface room) { setRoom(room); changeUrl(); } @Override public void hide() { super.hide(); } }; iRoomEdit = new RoomEdit(iMode) { @Override protected void onShow() { iRootPanel.setWidget(iRoomEdit); changeUrl(); } @Override protected void onHide(RoomDetailInterface detail, boolean canShowDetail, String message) { if (!canShowDetail || (detail == null && getRoom().getUniqueId() == null)) { iRootPanel.setWidget(iRoomsPanel); UniTimePageLabel.getInstance().setPageName(MESSAGES.pageRooms()); if (iRoomsTable.isVisible()) search(detail == null ? null : detail.getUniqueId()); } else { if (detail != null) iRoomDetail.setRoom(detail); iRoomDetail.show(message); } changeUrl(); } }; iRoomDepartmentsEdit = new RoomDepartmentsEdit() { @Override protected void onShow() { iRootPanel.setWidget(iRoomDepartmentsEdit); } @Override protected void onHide(boolean refresh) { iRootPanel.setWidget(iRoomsPanel); UniTimePageLabel.getInstance().setPageName(MESSAGES.pageRooms()); if (refresh && iRoomsTable.isVisible()) search(null); } }; iFilter.addValueChangeHandler(new ValueChangeHandler<String>() { @Override public void onValueChange(ValueChangeEvent<String> event) { if (iEditRoomSharing != null) iEditRoomSharing.setEnabled(iRoomDepartmentsEdit.setDepartmentOrExamType(iFilter) && iRoomDepartmentsEdit.canEdit()); if (iHeaderPanel != null) iHeaderPanel.setEnabled("sharing", iProperties != null && (iProperties.isCanEditRoomExams() || iProperties.isCanEditDepartments()) && iRoomDepartmentsEdit.setDepartmentOrExamType(iFilter) && iRoomDepartmentsEdit.canEdit()); } }); }