/*******************************************************************************
* 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.training;
import com.google.gwt.i18n.client.NumberFormat;
import com.google.gwt.user.client.ui.Widget;
import com.delect.motiver.client.AppController;
import com.delect.motiver.client.Motiver;
import com.delect.motiver.client.presenter.training.RoutineWizardPresenter;
import com.delect.motiver.client.presenter.training.RoutineWizardPresenter.RoutineWizardHandler;
import com.delect.motiver.shared.util.CommonUtils;
import com.extjs.gxt.ui.client.Style.ButtonScale;
import com.extjs.gxt.ui.client.event.BaseEvent;
import com.extjs.gxt.ui.client.event.ButtonEvent;
import com.extjs.gxt.ui.client.event.Events;
import com.extjs.gxt.ui.client.event.Listener;
import com.extjs.gxt.ui.client.event.SelectionListener;
import com.extjs.gxt.ui.client.widget.LayoutContainer;
import com.extjs.gxt.ui.client.widget.TabItem;
import com.extjs.gxt.ui.client.widget.TabPanel;
import com.extjs.gxt.ui.client.widget.Text;
import com.extjs.gxt.ui.client.widget.button.Button;
import com.extjs.gxt.ui.client.widget.form.ComboBox.TriggerAction;
import com.extjs.gxt.ui.client.widget.form.FieldSet;
import com.extjs.gxt.ui.client.widget.form.FormPanel;
import com.extjs.gxt.ui.client.widget.form.SimpleComboBox;
import com.extjs.gxt.ui.client.widget.form.SpinnerField;
import com.extjs.gxt.ui.client.widget.layout.FormData;
import com.extjs.gxt.ui.client.widget.layout.FormLayout;
/**
* Show users friends in list
*/
public class RoutineWizardView extends RoutineWizardPresenter.RoutineWizardDisplay {
private Button btnCreateBB = new Button();
private Button btnCreatePL = new Button();
private RoutineWizardHandler handler;
public RoutineWizardView() {
//two tabs: bodybuilding and powerlifting
TabPanel panel = new TabPanel();
panel.setPlain(true);
panel.setAutoHeight(true);
//bodybuilding
TabItem tabBB = new TabItem(RoutineWizardPresenter.Lang.Bodybuilding());
tabBB.addStyleName("pad-text");
tabBB.add(initBodybuildingTab());
panel.add(tabBB);
//powerlifting
TabItem tabPL = new TabItem(RoutineWizardPresenter.Lang.Powerlifting());
tabPL.addStyleName("pad-text");
tabPL.add(initPowerliftingTab());
panel.add(tabPL);
this.add(panel);
}
@Override
public Widget asWidget() {
return this;
}
@Override
public void setHandler(RoutineWizardHandler handler) {
this.handler = handler;
}
@Override
public void setMessageBodybuilding(String msg) {
if(msg == null) {
btnCreateBB.setEnabled(true);
btnCreateBB.setText(AppController.Lang.Create());
}
else {
btnCreateBB.setEnabled(false);
btnCreateBB.setText(msg);
}
}
@Override
public void setMessagePowerlifting(String msg) {
if(msg == null) {
btnCreatePL.setEnabled(true);
btnCreatePL.setText(AppController.Lang.Create());
}
else {
btnCreatePL.setEnabled(false);
btnCreatePL.setText(msg);
}
}
/**
* Initializes the bodybuilding tab
* @return tab's content
*/
private LayoutContainer initBodybuildingTab() {
LayoutContainer panel = new LayoutContainer();
//form
FormPanel simple = new FormPanel();
simple.setHeaderVisible(false);
simple.setFrame(true);
simple.setWidth(600);
simple.setFieldWidth(200);
FormData formData = new FormData("-20");
//desc
Text textDesc = new Text(RoutineWizardPresenter.Lang.CreateDesc());
textDesc.setStyleName("label-form-desc");
simple.add(textDesc, formData);
//fieldset: split
FieldSet fieldSet = new FieldSet();
fieldSet.setLayout(new FormLayout());
fieldSet.setHeading(RoutineWizardPresenter.Lang.Split());
Text textSplitDesc = new Text(RoutineWizardPresenter.Lang.SplitDesc());
textSplitDesc.setStyleName("label-form-desc");
fieldSet.add(textSplitDesc, formData);
//split
final SimpleComboBox<String> cbSplit = new SimpleComboBox<String>();
cbSplit.setTriggerAction(TriggerAction.ALL);
cbSplit.setEditable(false);
cbSplit.setFieldLabel(RoutineWizardPresenter.Lang.Split());
cbSplit.setData("text", "split desc");
for(int i=0; i < RoutineWizardPresenter.LangConstants.Split().length; i++) {
cbSplit.add(RoutineWizardPresenter.LangConstants.Split()[i]);
}
fieldSet.add(cbSplit, formData);
//muscle groups
final SimpleComboBox<String> cbMuscleGroupDiv = new SimpleComboBox<String>();
cbMuscleGroupDiv.setTriggerAction(TriggerAction.ALL);
cbMuscleGroupDiv.setEditable(false);
cbMuscleGroupDiv.setFieldLabel(RoutineWizardPresenter.Lang.MuscleGroupDivisions());
cbMuscleGroupDiv.setVisible(false);
fieldSet.add(cbMuscleGroupDiv, formData);
simple.add(fieldSet);
//fieldset: split
FieldSet fieldSet2 = new FieldSet();
fieldSet2.setLayout(new FormLayout());
fieldSet2.setHeading(RoutineWizardPresenter.Lang.HowOften());
Text textHowOften = new Text(RoutineWizardPresenter.Lang.HowOftenDesc());
textHowOften.setStyleName("label-form-desc");
fieldSet2.add(textHowOften, formData);
//how often
final SimpleComboBox<String> cbHowOften = new SimpleComboBox<String>();
cbHowOften.setTriggerAction(TriggerAction.ALL);
cbHowOften.setEditable(false);
cbHowOften.setFieldLabel(RoutineWizardPresenter.Lang.HowOften());
for(int i=0; i < RoutineWizardPresenter.LangConstants.HowOften().length; i++) {
cbHowOften.add(RoutineWizardPresenter.LangConstants.HowOften()[i]);
}
fieldSet2.add(cbHowOften, formData);
//training days
final SimpleComboBox<String> cbTrainingDays = new SimpleComboBox<String>();
cbTrainingDays.setTriggerAction(TriggerAction.ALL);
cbTrainingDays.setEditable(false);
cbTrainingDays.setFieldLabel(AppController.Lang.TrainingDays());
for(int i=0; i < RoutineWizardPresenter.LangConstants.TrainingDays1().length; i++) {
cbTrainingDays.add(RoutineWizardPresenter.LangConstants.TrainingDays1()[i]);
}
cbTrainingDays.setValue( cbTrainingDays.getStore().getAt( 0 ));
fieldSet2.add(cbTrainingDays, formData);
simple.add(fieldSet2);
//fieldset: split
FieldSet fieldSet3 = new FieldSet();
fieldSet3.setLayout(new FormLayout());
fieldSet3.setHeading(RoutineWizardPresenter.Lang.WeakMuscle());
Text textWeakMuscle = new Text(RoutineWizardPresenter.Lang.WeakMuscleDesc());
textWeakMuscle.setStyleName("label-form-desc");
fieldSet3.add(textWeakMuscle, formData);
//weak muscle
final SimpleComboBox<String> cbWeakMuscle = new SimpleComboBox<String>();
cbWeakMuscle.setTriggerAction(TriggerAction.ALL);
cbWeakMuscle.setEditable(false);
cbWeakMuscle.setFieldLabel(RoutineWizardPresenter.Lang.WeakMuscle());
for(int i=0; i < RoutineWizardPresenter.LangConstants.MuscleGroups().length; i++) {
cbWeakMuscle.add(RoutineWizardPresenter.LangConstants.MuscleGroups()[i]);
}
fieldSet3.add(cbWeakMuscle, formData);
simple.add(fieldSet3);
//select first item
Listener<BaseEvent> listenerSelectFirst = new Listener<BaseEvent>() {
@SuppressWarnings("unchecked")
@Override
public void handleEvent(BaseEvent be) {
SimpleComboBox<String> cb = (SimpleComboBox<String>) be.getSource();
cb.setValue(cb.getStore().getAt(0));
}
};
cbSplit.addListener(Events.Render, listenerSelectFirst);
cbHowOften.addListener(Events.Render, listenerSelectFirst);
cbTrainingDays.addListener(Events.Render, listenerSelectFirst);
cbWeakMuscle.addListener(Events.Render, listenerSelectFirst);
//eventhandler for split combo
cbSplit.addListener(Events.Select, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
//2-split
if(cbSplit.getSelectedIndex() == 1) {
cbMuscleGroupDiv.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.SplitDivision2().length; i++) {
cbMuscleGroupDiv.add(RoutineWizardPresenter.LangConstants.SplitDivision2()[i]);
}
//show
cbMuscleGroupDiv.setVisible(true);
}
//3-split
else if(cbSplit.getSelectedIndex() == 2) {
cbMuscleGroupDiv.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.SplitDivision3().length; i++) {
cbMuscleGroupDiv.add(RoutineWizardPresenter.LangConstants.SplitDivision3()[i]);
}
//show
cbMuscleGroupDiv.setVisible(true);
}
//4-split
else if(cbSplit.getSelectedIndex() == 3) {
cbMuscleGroupDiv.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.SplitDivision4().length; i++) {
cbMuscleGroupDiv.add(RoutineWizardPresenter.LangConstants.SplitDivision4()[i]);
}
//show
cbMuscleGroupDiv.setVisible(true);
}
//fullbody
else {
cbMuscleGroupDiv.setVisible(false);
}
cbMuscleGroupDiv.setValue( cbMuscleGroupDiv.getStore().getAt( 0 ));
}
});
//eventhandler for how often combo
cbHowOften.addListener(Events.Select, new Listener<BaseEvent>() {
@Override
public void handleEvent(BaseEvent be) {
//3-4
if(cbHowOften.getSelectedIndex() == 1) {
cbTrainingDays.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.TrainingDays2().length; i++) {
cbTrainingDays.add(RoutineWizardPresenter.LangConstants.TrainingDays2()[i]);
}
}
//5-6
else if(cbHowOften.getSelectedIndex() == 2) {
cbTrainingDays.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.TrainingDays3().length; i++) {
cbTrainingDays.add(RoutineWizardPresenter.LangConstants.TrainingDays3()[i]);
}
}
//1-2
else {
cbTrainingDays.removeAll();
for(int i=0; i < RoutineWizardPresenter.LangConstants.TrainingDays1().length; i++) {
cbTrainingDays.add(RoutineWizardPresenter.LangConstants.TrainingDays1()[i]);
}
}
cbTrainingDays.setValue( cbTrainingDays.getStore().getAt( 0 ));
}
});
//buttons eventhandler
btnCreateBB.setText(AppController.Lang.Create());
btnCreateBB.setScale(ButtonScale.MEDIUM);
btnCreateBB.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
try {
//return model
if(handler != null) {
int split = cbSplit.getSelectedIndex();
int muscleGroupDiv = cbMuscleGroupDiv.getSelectedIndex();
int howOften = cbHowOften.getSelectedIndex();
int trainingDays = cbTrainingDays.getSelectedIndex();
int weakMuscle = cbWeakMuscle.getSelectedIndex();
handler.newBodybuildingRoutine(split, muscleGroupDiv, howOften, trainingDays, weakMuscle);
}
} catch (Exception e) {
Motiver.showException(e);
}
}
});
simple.addButton(btnCreateBB);
panel.add(simple);
return panel;
}
/**
* Initializes the bodybuilding tab
* @return tab's content
*/
private LayoutContainer initPowerliftingTab() {
LayoutContainer panel = new LayoutContainer();
//form
FormPanel simple = new FormPanel();
simple.setHeaderVisible(false);
simple.setFrame(true);
simple.setWidth(600);
simple.setFieldWidth(200);
FormData formData = new FormData("-20");
//desc
Text textDesc = new Text(RoutineWizardPresenter.Lang.CreateStrengthDesc());
textDesc.setStyleName("label-form-desc");
simple.add(textDesc, formData);
//fieldset: priority
FieldSet fieldSet = new FieldSet();
fieldSet.setLayout(new FormLayout());
fieldSet.setHeading(RoutineWizardPresenter.Lang.Priority());
Text textSplitDesc = new Text(RoutineWizardPresenter.Lang.PriorityDesc());
textSplitDesc.setStyleName("label-form-desc");
fieldSet.add(textSplitDesc, formData);
//priority
final SimpleComboBox<String> cbPriority = new SimpleComboBox<String>();
cbPriority.setTriggerAction(TriggerAction.ALL);
cbPriority.setEditable(false);
cbPriority.setFieldLabel(RoutineWizardPresenter.Lang.Priority());
for(int i=0; i < RoutineWizardPresenter.LangConstants.Priority().length; i++) {
cbPriority.add(RoutineWizardPresenter.LangConstants.Priority()[i]);
}
fieldSet.add(cbPriority, formData);
simple.add(fieldSet);
//fieldset: split
FieldSet fieldSet2 = new FieldSet();
fieldSet2.setLayout(new FormLayout());
fieldSet2.setHeading(RoutineWizardPresenter.Lang.HowOften());
Text textHowOften = new Text(RoutineWizardPresenter.Lang.HowOftenStrengthDesc());
textHowOften.setStyleName("label-form-desc");
fieldSet2.add(textHowOften, formData);
//how often
final SimpleComboBox<String> cbHowOften = new SimpleComboBox<String>();
cbHowOften.setTriggerAction(TriggerAction.ALL);
cbHowOften.setEditable(false);
cbHowOften.setFieldLabel(RoutineWizardPresenter.Lang.HowOften());
for(int i=0; i < RoutineWizardPresenter.LangConstants.HowOftenStrength().length; i++) {
cbHowOften.add(RoutineWizardPresenter.LangConstants.HowOftenStrength()[i]);
}
fieldSet2.add(cbHowOften, formData);
simple.add(fieldSet2);
//fieldset: exercise max
FieldSet fieldSet3 = new FieldSet();
fieldSet3.setLayout(new FormLayout());
fieldSet3.setHeading(RoutineWizardPresenter.Lang.ExerciseMax());
Text textExerciseMax = new Text(RoutineWizardPresenter.Lang.ExerciseMaxDesc());
textExerciseMax.setStyleName("label-form-desc");
fieldSet3.add(textExerciseMax, formData);
//squat
final SpinnerField textSquat = new SpinnerField();
textSquat.setFormat(NumberFormat.getFormat("0"));
textSquat.setValue(100);
textSquat.setMinValue(40);
textSquat.setMaxValue(1000);
textSquat.setIncrement(5);
textSquat.setAllowBlank(false);
CommonUtils.setWarningMessages(textSquat);
textSquat.setFieldLabel(RoutineWizardPresenter.Lang.Squat());
fieldSet3.add(textSquat, formData);
//deadlift
final SpinnerField textDeadlift = new SpinnerField();
textDeadlift.setFormat(NumberFormat.getFormat("0"));
textDeadlift.setValue(100);
textDeadlift.setMinValue(40);
textDeadlift.setMaxValue(1000);
textDeadlift.setIncrement(5);
textDeadlift.setAllowBlank(false);
CommonUtils.setWarningMessages(textDeadlift);
textDeadlift.setFieldLabel(RoutineWizardPresenter.Lang.Deadlift());
fieldSet3.add(textDeadlift, formData);
//bench
final SpinnerField textBench = new SpinnerField();
textBench.setFormat(NumberFormat.getFormat("0"));
textBench.setValue(100);
textBench.setMinValue(40);
textBench.setMaxValue(1000);
textBench.setIncrement(5);
textBench.setAllowBlank(false);
CommonUtils.setWarningMessages(textBench);
textBench.setFieldLabel(RoutineWizardPresenter.Lang.Bench());
fieldSet3.add(textBench, formData);
//military
final SpinnerField textMilitary = new SpinnerField();
textMilitary.setFormat(NumberFormat.getFormat("0"));
textMilitary.setValue(100);
textMilitary.setMinValue(40);
textMilitary.setMaxValue(1000);
textMilitary.setIncrement(5);
textMilitary.setAllowBlank(false);
CommonUtils.setWarningMessages(textMilitary);
textMilitary.setFieldLabel(RoutineWizardPresenter.Lang.Military());
fieldSet3.add(textMilitary, formData);
simple.add(fieldSet3);
//select first item
Listener<BaseEvent> listenerSelectFirst = new Listener<BaseEvent>() {
@SuppressWarnings("unchecked")
@Override
public void handleEvent(BaseEvent be) {
SimpleComboBox<String> cb = (SimpleComboBox<String>) be.getSource();
cb.setValue(cb.getStore().getAt(0));
}
};
cbPriority.addListener(Events.Render, listenerSelectFirst);
cbHowOften.addListener(Events.Render, listenerSelectFirst);
//buttons eventhandler
btnCreatePL.setText(AppController.Lang.Create());
btnCreatePL.setScale(ButtonScale.MEDIUM);
btnCreatePL.addSelectionListener(new SelectionListener<ButtonEvent>() {
@Override
public void componentSelected(ButtonEvent ce) {
try {
//return model
if(handler != null) {
int priority = cbPriority.getSelectedIndex();
int howOften = cbHowOften.getSelectedIndex();
int squat = textSquat.getValue().intValue();
int deadlift = textDeadlift.getValue().intValue();
int bench = textBench.getValue().intValue();
int military = textMilitary.getValue().intValue();
handler.newPowerliftingRoutine(priority, howOften, squat, deadlift, bench, military);
}
} catch (Exception e) {
Motiver.showException(e);
}
}
});
simple.addButton(btnCreatePL);
panel.add(simple);
return panel;
}
}