package kornell.gui.client.presentation.bar.generic; import com.github.gwtbootstrap.client.ui.Button; import com.github.gwtbootstrap.client.ui.Icon; import com.github.gwtbootstrap.client.ui.constants.IconType; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.place.shared.Place; import com.google.gwt.place.shared.PlaceChangeEvent; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.ui.Composite; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; import kornell.gui.client.ClientFactory; import kornell.gui.client.KornellConstants; import kornell.gui.client.presentation.admin.course.CoursePlace; import kornell.gui.client.presentation.admin.course.courses.AdminCoursesPlace; import kornell.gui.client.presentation.admin.courseclass.courseclasses.AdminCourseClassesPlace; import kornell.gui.client.presentation.admin.courseversion.CourseVersionPlace; import kornell.gui.client.presentation.admin.courseversion.courseversions.AdminCourseVersionsPlace; import kornell.gui.client.presentation.admin.institution.AdminInstitutionPlace; import kornell.gui.client.presentation.bar.AdminBarView; public class GenericAdminBarView extends Composite implements AdminBarView { interface MyUiBinder extends UiBinder<Widget, GenericAdminBarView> { } private static MyUiBinder uiBinder = GWT.create(MyUiBinder.class); private static KornellConstants constants = GWT.create(KornellConstants.class); private static String BUTTON_INSTITUTION = constants.institution(); private static String BUTTON_COURSE = constants.courses(); private static String BUTTON_COURSE_VERSION = constants.versions(); private static String BUTTON_COURSE_CLASS = constants.classes(); @UiField Button btnInstitution; @UiField Button btnCourse; @UiField Button btnCourseVersion; @UiField Button btnCourseClass; @UiField FlowPanel activityBar; private ClientFactory clientFactory; public GenericAdminBarView(ClientFactory clientFactory) { this.clientFactory = clientFactory; initWidget(uiBinder.createAndBindUi(this)); display(); updateButtonByPlace(clientFactory.getPlaceController().getWhere()); clientFactory.getEventBus().addHandler(PlaceChangeEvent.TYPE, new PlaceChangeEvent.Handler() { @Override public void onPlaceChange(PlaceChangeEvent event) { updateButtonByPlace(event.getNewPlace()); } }); } private void updateButtonByPlace(Place place){ if(place instanceof AdminInstitutionPlace) updateSelection(BUTTON_INSTITUTION); else if(place instanceof CoursePlace) updateSelection(BUTTON_COURSE); else if(place instanceof CourseVersionPlace) updateSelection(BUTTON_COURSE_VERSION); else updateSelection(BUTTON_COURSE_CLASS); } private void display(){ displayButton(btnInstitution, BUTTON_INSTITUTION, new Icon(IconType.BUILDING)); displayButton(btnCourse, BUTTON_COURSE, new Icon(IconType.FOLDER_OPEN)); displayButton(btnCourseVersion, BUTTON_COURSE_VERSION, new Icon(IconType.TAGS)); displayButton(btnCourseClass, BUTTON_COURSE_CLASS, new Icon(IconType.BOOK)); updateSelection(BUTTON_COURSE_CLASS); } private void displayButton(final Button btn, final String buttonType, Icon icon) { FlowPanel buttonPanel = new FlowPanel(); buttonPanel.addStyleName("btnPanel"); buttonPanel.addStyleName(getItemName(buttonType)); icon.addStyleName("activityBarButtonItem font16"); Label label = new Label(buttonType.toUpperCase()); label.addStyleName("activityBarButtonItem label"); buttonPanel.add(icon); buttonPanel.add(label); btn.add(buttonPanel); btn.removeStyleName("btn"); btn.removeStyleName("btn-link"); } private String getItemName(String constant){ if(constant.equals(BUTTON_COURSE)){ return "course"; } else if(constant.equals(BUTTON_COURSE_VERSION)){ return "courseVersion"; } else if(constant.equals(BUTTON_COURSE_CLASS)){ return "courseClass"; } else if(constant.equals(BUTTON_INSTITUTION)){ return "institution"; } return ""; } private void updateSelection(String button){ btnInstitution.removeStyleName("btnAction"); btnCourse.removeStyleName("btnAction"); btnCourseVersion.removeStyleName("btnAction"); btnCourseClass.removeStyleName("btnAction"); if(button.equals(BUTTON_COURSE)){ btnCourse.addStyleName("btnAction"); } else if(button.equals(BUTTON_COURSE_VERSION)){ btnCourseVersion.addStyleName("btnAction"); } else if(button.equals(BUTTON_COURSE_CLASS)){ btnCourseClass.addStyleName("btnAction"); } else if(button.equals(BUTTON_INSTITUTION)){ btnInstitution.addStyleName("btnAction"); } } @UiHandler("btnCourse") void handleClickBtnCourse(ClickEvent e) { updateSelection(BUTTON_COURSE); clientFactory.getPlaceController().goTo(new AdminCoursesPlace()); } @UiHandler("btnCourseVersion") void handleClickBtnCourseVersion(ClickEvent e) { updateSelection(BUTTON_COURSE_VERSION); clientFactory.getPlaceController().goTo(new AdminCourseVersionsPlace()); } @UiHandler("btnCourseClass") void handleClickBtnCourseClass(ClickEvent e) { updateSelection(BUTTON_COURSE_CLASS); clientFactory.getPlaceController().goTo(new AdminCourseClassesPlace()); } @UiHandler("btnInstitution") void handleClickBtnInstitution(ClickEvent e) { updateSelection(BUTTON_INSTITUTION); clientFactory.getPlaceController().goTo(new AdminInstitutionPlace()); } @Override public void setPresenter(Presenter presenter) { } }