@Override public String getValue() { if (iCourses.getSelectedRow() < 0) { return null; } else { WebTable.Row row = iCourses.getRows()[iCourses.getSelectedRow()]; String courseName = MESSAGES.courseName(row.getCell(0).getValue(), row.getCell(1).getValue()); if ("false".equals(row.getId())) courseName = MESSAGES.courseNameWithTitle( row.getCell(0).getValue(), row.getCell(1).getValue(), row.getCell(2).getValue()); return courseName; } }
protected void scrollToSelectedRow() { if (iCourses.getSelectedRow() < 0) return; Element scroll = iCoursesPanel.getElement(); com.google.gwt.dom.client.Element item = iCourses.getTable().getRowFormatter().getElement(iCourses.getSelectedRow()); if (item == null) return; int realOffset = 0; while (item != null && !item.equals(scroll)) { realOffset += item.getOffsetTop(); item = item.getOffsetParent(); } scroll.setScrollTop(realOffset - scroll.getOffsetHeight() / 2); }
@Override public void onKeyUp(KeyUpEvent event) { if (event.getNativeKeyCode() == KeyCodes.KEY_DOWN) { iCourses.setSelectedRow(iCourses.getSelectedRow() + 1); scrollToSelectedRow(); updateCourseDetails(); } else if (event.getNativeKeyCode() == KeyCodes.KEY_UP) { iCourses.setSelectedRow( iCourses.getSelectedRow() == 0 ? iCourses.getRowsCount() - 1 : iCourses.getSelectedRow() - 1); scrollToSelectedRow(); updateCourseDetails(); } else if (event.isControlKeyDown() || event.isAltKeyDown()) { for (Map.Entry<Character, Integer> entry : iTabAccessKeys.entrySet()) if (event.getNativeKeyCode() == Character.toLowerCase(entry.getKey()) || event.getNativeKeyCode() == Character.toUpperCase(entry.getKey())) { iCourseDetailsTabPanel.selectTab(entry.getValue()); event.preventDefault(); event.stopPropagation(); } } }
public CourseFinderCourses() { super(); iCourses = new WebTable(); iCourses.setHeader( new WebTable.Row( new WebTable.Cell(MESSAGES.colSubject(), 1, "80px"), new WebTable.Cell(MESSAGES.colCourse(), 1, "80px"), new WebTable.Cell(MESSAGES.colLimit(), 1, "60px"), new WebTable.Cell(MESSAGES.colTitle(), 1, "300px"), new WebTable.Cell(MESSAGES.colCredit(), 1, "60px"), new WebTable.Cell(MESSAGES.colNote(), 1, "300px"))); iCourses.addRowDoubleClickHandler( new WebTable.RowDoubleClickHandler() { public void onRowDoubleClick(WebTable.RowDoubleClickEvent event) { iCourses.setSelectedRow(event.getRowIdx()); updateCourseDetails(); SelectionEvent.fire(CourseFinderCourses.this, getValue()); } }); iCourses.addRowClickHandler( new WebTable.RowClickHandler() { public void onRowClick(WebTable.RowClickEvent event) { iCourses.setSelectedRow(event.getRowIdx()); updateCourseDetails(); } }); iCoursesPanel = new ScrollPanel(iCourses); iCoursesPanel.getElement().getStyle().setWidth(780, Unit.PX); iCoursesPanel.getElement().getStyle().setHeight(200, Unit.PX); iCoursesPanel.setStyleName("unitime-ScrollPanel"); iCoursesTip = new Label(CONSTANTS.courseTips()[(int) (Math.random() * CONSTANTS.courseTips().length)]); iCoursesTip.setStyleName("unitime-Hint"); ToolBox.disableTextSelectInternal(iCoursesTip.getElement()); iCoursesTip.addClickHandler( new ClickHandler() { public void onClick(ClickEvent event) { String oldText = iCoursesTip.getText(); do { iCoursesTip.setText( CONSTANTS.courseTips()[(int) (Math.random() * CONSTANTS.courseTips().length)]); } while (oldText.equals(iCoursesTip.getText())); } }); iCourseDetailsTabPanel = new UniTimeTabPanel(); iCourseDetailsTabPanel.setDeckStyleName("unitime-TabPanel"); iCourseDetailsTabPanel.addSelectionHandler( new SelectionHandler<Integer>() { @Override public void onSelection(SelectionEvent<Integer> event) { Cookies.setCookie( "UniTime:CourseFinderCourses", String.valueOf(event.getSelectedItem())); } }); setSpacing(10); add(iCoursesPanel); add(iCourseDetailsTabPanel); add(iCoursesTip); }
protected void updateCourseDetails() { if (iCourses.getSelectedRow() < 0 || iCourses.getRows() == null || iCourses.getRows().length == 0) { if (iDetails != null) for (CourseFinderCourseDetails detail : iDetails) { detail.setValue(null); } AriaStatus.getInstance().setHTML(ARIA.courseFinderNoCourse()); } else { WebTable.Row row = iCourses.getRows()[iCourses.getSelectedRow()]; String courseName = MESSAGES.courseName(row.getCell(0).getValue(), row.getCell(1).getValue()); if ("false".equals(row.getId())) courseName = MESSAGES.courseNameWithTitle( row.getCell(0).getValue(), row.getCell(1).getValue(), row.getCell(2).getValue()); for (CourseFinderCourseDetails detail : iDetails) detail.setValue(courseName); String title = row.getCell(3).getValue(); String note = row.getCell(4).getValue(); if (title.isEmpty()) { if (note.isEmpty()) { AriaStatus.getInstance() .setHTML( ARIA.courseFinderSelected( 1 + iCourses.getSelectedRow(), iCourses.getRowsCount(), row.getCell(0).getValue(), row.getCell(1).getValue())); } else { AriaStatus.getInstance() .setHTML( ARIA.courseFinderSelectedWithNote( 1 + iCourses.getSelectedRow(), iCourses.getRowsCount(), row.getCell(0).getValue(), row.getCell(1).getValue(), note)); } } else { if (note.isEmpty()) { AriaStatus.getInstance() .setHTML( ARIA.courseFinderSelectedWithTitle( 1 + iCourses.getSelectedRow(), iCourses.getRowsCount(), row.getCell(0).getValue(), row.getCell(1).getValue(), title)); } else { AriaStatus.getInstance() .setHTML( ARIA.courseFinderSelectedWithTitleAndNote( 1 + iCourses.getSelectedRow(), iCourses.getRowsCount(), row.getCell(0).getValue(), row.getCell(1).getValue(), title, note)); } } } }
@Override public void setValue(String value, final boolean fireEvents) { if (value == null || value.isEmpty()) { iLastQuery = null; iCourses.clearData(true); iCourses.setEmptyMessage(MESSAGES.courseSelectionNoCourseFilter()); updateCourseDetails(); } else if (!value.equals(iLastQuery)) { iLastQuery = value; iDataProvider.getData( value, new AsyncCallback<Collection<ClassAssignmentInterface.CourseAssignment>>() { public void onFailure(Throwable caught) { iCourses.clearData(true); iCourses.setEmptyMessage(caught.getMessage()); if (isVisible()) AriaStatus.getInstance().setText(caught.getMessage()); updateCourseDetails(); ResponseEvent.fire(CourseFinderCourses.this, false); } public void onSuccess(Collection<ClassAssignmentInterface.CourseAssignment> result) { WebTable.Row[] records = new WebTable.Row[result.size()]; int idx = 0; int selectRow = -1; for (ClassAssignmentInterface.CourseAssignment record : result) { records[idx] = new WebTable.Row( record.getSubject(), record.getCourseNbr(), (record.getLimit() == null || record.getLimit() == 0 || record.getEnrollment() == null ? "" : record.getLimit() < 0 ? "∞" : (record.getLimit() - record.getEnrollment()) + " / " + record.getLimit()), (record.getTitle() == null ? "" : record.getTitle()), (record.hasCredit() ? record.getCreditAbbv() : ""), (record.getNote() == null ? "" : record.getNote())); if (record.hasCredit()) records[idx].getCell(4).setTitle(record.getCreditText()); records[idx].setId(record.hasUniqueName() ? "true" : "false"); if (iLastQuery.equalsIgnoreCase( MESSAGES.courseName(record.getSubject(), record.getCourseNbr())) || (record.getTitle() != null && iLastQuery.equalsIgnoreCase( MESSAGES.courseNameWithTitle( record.getSubject(), record.getCourseNbr(), record.getTitle())))) selectRow = idx; if (record.getTitle() == null || record.getTitle().isEmpty()) { if (record.getNote() == null || record.getNote().isEmpty()) { records[idx].setAriaLabel( ARIA.courseFinderCourse(record.getSubject(), record.getCourseNbr())); } else { records[idx].setAriaLabel( ARIA.courseFinderCourseWithNote( record.getSubject(), record.getCourseNbr(), record.getNote())); } } else { if (record.getNote() == null || record.getNote().isEmpty()) { records[idx].setAriaLabel( ARIA.courseFinderCourseWithTitle( record.getSubject(), record.getCourseNbr(), record.getTitle())); } else { records[idx].setAriaLabel( ARIA.courseFinderCourseWithTitleAndNote( record.getSubject(), record.getCourseNbr(), record.getTitle(), record.getNote())); } } idx++; } iCourses.setData(records); if (records.length == 1) selectRow = 0; if (selectRow >= 0) { iCourses.setSelectedRow(selectRow); scrollToSelectedRow(); if (fireEvents) ValueChangeEvent.fire(CourseFinderCourses.this, getValue()); } updateCourseDetails(); ResponseEvent.fire(CourseFinderCourses.this, !result.isEmpty()); } }); } }