/******************************************************************************* * 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. ******************************************************************************/ /* * Shows dialog where user can add new measurement * Callbacks: ?? */ package com.delect.motiver.client.view.profile; import java.util.Date; import com.google.gwt.i18n.client.DateTimeFormat; 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.StringConstants; import com.delect.motiver.client.presenter.profile.AddNewMeasurementValuePresenter; import com.delect.motiver.client.presenter.profile.AddNewMeasurementValuePresenter.AddNewMeasurementValueHandler; import com.delect.motiver.client.view.MySpinnerField; import com.delect.motiver.shared.MeasurementModel; import com.delect.motiver.shared.MeasurementValueModel; import com.delect.motiver.shared.util.CommonUtils; import com.extjs.gxt.ui.client.Style.ButtonScale; import com.extjs.gxt.ui.client.Style.HorizontalAlignment; import com.extjs.gxt.ui.client.event.ButtonEvent; import com.extjs.gxt.ui.client.event.SelectionListener; import com.extjs.gxt.ui.client.widget.Window; import com.extjs.gxt.ui.client.widget.button.Button; import com.extjs.gxt.ui.client.widget.form.DateField; import com.extjs.gxt.ui.client.widget.form.DateTimePropertyEditor; import com.extjs.gxt.ui.client.widget.form.FormButtonBinding; import com.extjs.gxt.ui.client.widget.form.FormPanel; import com.extjs.gxt.ui.client.widget.layout.FitLayout; import com.extjs.gxt.ui.client.widget.layout.FormData; public class AddNewMeasurementValueView extends AddNewMeasurementValuePresenter.AddNewMeasurementValueDisplay { private AddNewMeasurementValueHandler handler; private MeasurementModel measurement; Window window = new Window(); @Override public Widget asWidget() { //show window window.setSize(400, 150); window.setPlain(true); window.setModal(true); window.setClosable(false); window.setResizable(false); window.setHeading(AppController.Lang.AddNew(AppController.Lang.MeasurementValue().toLowerCase())); window.setLayout(new FitLayout()); //form final FormData formData = new FormData("-20"); FormPanel simple = new FormPanel(); simple.setHeaderVisible(false); simple.setFrame(true); simple.setAutoWidth(true); simple.setLabelWidth(100); //date Date date1 = new Date(); final DateField dfMeas = new DateField(); final DateTimeFormat fmt = DateTimeFormat.getFormat(StringConstants.DATEFORMATS[AppController.User.getDateFormat()]); DateTimePropertyEditor pr = new DateTimePropertyEditor(fmt); dfMeas.setPropertyEditor(pr); dfMeas.setValue(date1); dfMeas.setFieldLabel(AppController.Lang.Date()); simple.add(dfMeas, formData); //value final MySpinnerField textValue = new MySpinnerField(); textValue.setFieldLabel(AppController.Lang.Value()); textValue.setAllowBlank(false); textValue.setEditable(true); textValue.setMinValue(0); textValue.setMaxValue(10000); textValue.setValue(0D); textValue.setPropertyEditorType(Double.class); textValue.setFormat(NumberFormat.getFormat("0.0 " + measurement.getUnit())); simple.add(textValue, formData); //buttons eventhandler Button btnAdd = new Button(AppController.Lang.Add()); btnAdd.setScale(ButtonScale.MEDIUM); btnAdd.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { try { if(handler != null) { final double val = textValue.getValue().doubleValue(); Date date = dfMeas.getValue(); date = CommonUtils.trimDateToDatabase(date, true); MeasurementValueModel value = new MeasurementValueModel(); value.setDate(date); value.setValue(val); handler.newValue(value); } } catch (Exception e) { Motiver.showException(e); } } }); simple.addButton(btnAdd); Button btnCancel = new Button(AppController.Lang.Cancel()); btnCancel.setScale(ButtonScale.MEDIUM); //hide window btnCancel.addSelectionListener(new SelectionListener<ButtonEvent>() { @Override public void componentSelected(ButtonEvent ce) { handler.cancel(); } }); simple.addButton(btnCancel); simple.setButtonAlign(HorizontalAlignment.CENTER); FormButtonBinding binding = new FormButtonBinding(simple); binding.addButton(btnAdd); window.add(simple); window.show(); return this; } @Override public void onStop() { if(window != null && window.isVisible()) { window.hide(); } } @Override public void setContentEnabled(boolean enabled) { if(window != null) { window.setEnabled(enabled); } } @Override public void setHandler(AddNewMeasurementValueHandler handler) { this.handler = handler; } @Override public void setMeasurement(MeasurementModel measurement) { this.measurement = measurement; } }