/******************************************************************************* * Copyright 2011 Antti Havanko * * This file is part of Motiver.fi. * Motiver.fi is licensed under one open source license and one commercial license. * * Commercial license: This is the appropriate option if you want to use Motiver.fi in * commercial purposes. Contact license@motiver.fi for licensing options. * * Open source license: This is the appropriate option if you are creating an open source * application with a license compatible with the GNU GPL license v3. Although the GPLv3 has * many terms, the most important is that you must provide the source code of your application * to your users so they can be free to modify your application for their own needs. ******************************************************************************/ package com.delect.motiver.client.view.profile; import com.delect.motiver.client.AppController; import com.delect.motiver.client.presenter.profile.PermissionsCirclePresenter; import com.delect.motiver.client.presenter.profile.PermissionsCirclePresenter.PermissionsCircleHandler; import com.delect.motiver.shared.Constants; import com.delect.motiver.shared.Permission; import com.delect.motiver.shared.UserModel; import com.extjs.gxt.ui.client.core.El; import com.extjs.gxt.ui.client.dnd.DropTarget; import com.extjs.gxt.ui.client.event.BaseEvent; import com.extjs.gxt.ui.client.event.DNDEvent; import com.extjs.gxt.ui.client.event.Events; import com.extjs.gxt.ui.client.event.Listener; import com.extjs.gxt.ui.client.util.Margins; import com.extjs.gxt.ui.client.widget.LayoutContainer; import com.extjs.gxt.ui.client.widget.Text; import com.extjs.gxt.ui.client.widget.form.CheckBox; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.Widget; public class PermissionsCircleView extends PermissionsCirclePresenter.PermissionsCircleDisplay { LayoutContainer panelBody = new LayoutContainer(); CheckBox cbAllUsers = new CheckBox(); private int target; private PermissionsCircleHandler handler; public PermissionsCircleView() { this.setStyleName("panel-circle"); //drag target for users DropTarget dt = new DropTarget(this) { @Override protected void onDragEnter(DNDEvent event) { //if all users if(cbAllUsers.getValue()) { return; } UserModel user = event.getData(); //show user's email when dragging HTML html = new HTML(); html.setHTML(AppController.Lang.DropToGiveThesePermissionTo(user.getEmail())); event.setData(user); event.getStatus().update(El.fly(html.getElement()).cloneNode(true)); } @Override protected void onDragLeave(DNDEvent event) { super.onDragLeave(event); UserModel user = event.getData(); //show user's email when dragging HTML html = new HTML(); html.setHTML(user.getEmail()); event.setData(user); event.getStatus().update(El.fly(html.getElement()).cloneNode(true)); } @Override protected void onDragFail(DNDEvent event) { super.onDragFail(event); onDragLeave(event); } @Override protected void onDragCancelled(DNDEvent event) { super.onDragCancelled(event); onDragLeave(event); } @Override protected void onDragDrop(DNDEvent event) { super.onDragDrop(event); //if all users if(cbAllUsers.getValue()) { return; } UserModel user = event.getData(); handler.newUser(user); } }; dt.setGroup(Constants.DRAG_GROUP_USER); dt.setOverStyle("panel-drag-ok"); } @Override public Widget asWidget() { //title Text textTitle = new Text(); textTitle.setStyleName("label-title-medium"); this.add(textTitle, new RowData(-1, -1, new Margins(5))); //desc Text textDesc = new Text(); textDesc.setStyleName("label-info"); this.add(textDesc, new RowData(-1, -1, new Margins(5,5,10,5))); //strings switch(target) { case Permission.READ_TRAINING: textTitle.setText(AppController.Lang.Training()); textDesc.setText(AppController.Lang.PermissionDescTraining()); break; case Permission.READ_NUTRITION: textTitle.setText(AppController.Lang.Nutrition()); textDesc.setText(AppController.Lang.PermissionDescNutrition()); break; case Permission.READ_NUTRITION_FOODS: textTitle.setText(AppController.Lang.NutritionFoods()); textDesc.setText(AppController.Lang.PermissionDescNutritionFoods()); break; case Permission.READ_CARDIO: textTitle.setText(AppController.Lang.Cardio()); textDesc.setText(AppController.Lang.PermissionDescCardio()); break; case Permission.READ_MEASUREMENTS: textTitle.setText(AppController.Lang.Measurements()); textDesc.setText(AppController.Lang.PermissionDescMeasurements()); break; case Permission.COACH: textTitle.setText(AppController.Lang.Coach()); textDesc.setText(AppController.Lang.PermissionDescCoach()); break; } //enable all (not coach) if(target != 9) { cbAllUsers.setBoxLabel(AppController.Lang.IncludeAllUsers()); cbAllUsers.addListener(Events.OnChange, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent arg0) { handler.setEnableAll(cbAllUsers.getValue()); panelBody.setEnabled(!cbAllUsers.getValue()); panelBody.layout(); } }); this.add(cbAllUsers, new RowData(-1, -1, new Margins(5,5,10,5))); } //users this.add(panelBody); return this; } @Override public LayoutContainer getBodyContainer() { return panelBody; } @Override public void setTarget(int target) { this.target = target; } @Override public void setHandler(PermissionsCircleHandler handler) { this.handler = handler; } @Override public void setAllUsersEnabled(boolean enabled) { cbAllUsers.disableEvents(true); cbAllUsers.setValue(enabled); cbAllUsers.enableEvents(true); panelBody.setEnabled(!cbAllUsers.getValue()); panelBody.layout(); } }