/******************************************************************************* * 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.nutrition; import com.google.gwt.user.client.ui.Widget; import com.delect.motiver.client.AppController; import com.delect.motiver.client.presenter.nutrition.MealsListPresenter; import com.delect.motiver.client.presenter.nutrition.MealsListPresenter.MealsListHandler; import com.delect.motiver.client.view.widget.ButtonsPanel; import com.delect.motiver.client.view.widget.ButtonsPanel.ButtonTarget; import com.delect.motiver.client.view.widget.MyButton; import com.delect.motiver.client.view.widget.MyButton.Style; import com.delect.motiver.shared.Constants; import com.delect.motiver.shared.TimeModel; 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.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.MessageBox; import com.extjs.gxt.ui.client.widget.Text; import com.extjs.gxt.ui.client.widget.form.TextField; import com.extjs.gxt.ui.client.widget.layout.HBoxLayout; import com.extjs.gxt.ui.client.widget.layout.HBoxLayout.HBoxLayoutAlign; import com.extjs.gxt.ui.client.widget.layout.HBoxLayoutData; import com.extjs.gxt.ui.client.widget.layout.RowData; import com.extjs.gxt.ui.client.widget.layout.RowLayout; public class MealsListView extends MealsListPresenter.MealsListDisplay { private MessageBox box = null; private MealsListHandler handler; private Text labelTitle = new Text(); private String lastQuery = ""; private ButtonsPanel panelButtons = new ButtonsPanel(); private LayoutContainer panelData = new LayoutContainer(); private TextField<String> tfSearch = new TextField<String>(); public MealsListView() { this.setLayout(new RowLayout()); this.setStyleName("panel-meals-list"); //search panel LayoutContainer panelSearch = new LayoutContainer(); panelSearch.setHeight(89); panelSearch.setStyleName("panel-search"); panelSearch.setLayout(new RowLayout()); //title labelTitle.setText(AppController.Lang.MyMeals()); labelTitle.setStyleName("label-title-medium"); panelSearch.add(labelTitle, new RowData(-1, -1, new Margins(10, 0, 15, 0))); //search & cancel LayoutContainer panelSearchSub = new LayoutContainer(); panelSearchSub.setLayoutOnChange(true); HBoxLayout layout = new HBoxLayout(); layout.setHBoxLayoutAlign(HBoxLayoutAlign.MIDDLE); panelSearchSub.setLayout(layout); panelSearchSub.setHeight(28); tfSearch.setEmptyText(AppController.Lang.EnterKeywordToSearchForMeals()); tfSearch.setMinLength(Constants.LIMIT_MIN_QUERY_WORD); CommonUtils.setWarningMessages(tfSearch); tfSearch.setAutoValidate(true); tfSearch.setValidationDelay(Constants.DELAY_SEARCH); tfSearch.addListener(Events.Valid, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { if(handler != null && tfSearch.getValue() != null && !lastQuery.equals(tfSearch.getValue())) { lastQuery = tfSearch.getValue(); handler.search(tfSearch.getValue()); } } }); HBoxLayoutData data = new HBoxLayoutData(new Margins(0)); data.setFlex(1); panelSearchSub.add(tfSearch, data); //search button MyButton btnSearch = new MyButton(AppController.Lang.Search()); btnSearch.setScale(ButtonScale.MEDIUM); panelSearchSub.add(btnSearch, new HBoxLayoutData(new Margins(0, 0, 0, 10))); panelSearch.add(panelSearchSub); this.add(panelSearch, new RowData(1, -1, new Margins(0, 0, 10, 0))); //buttons (cancel, back, move/add) this.add(panelButtons, new RowData(-1, -1, new Margins(0, 0, 10, 0))); this.add(panelData, new RowData(1, -1, new Margins(0))); } @Override public Widget asWidget() { // showView(0); return this; } @Override public LayoutContainer getDataContainer() { return panelData; } @Override public void onStop() { if(box != null && box.isVisible()) { box.close(); } } @Override public void setBackButtonVisible(boolean visible) { if(visible) { MyButton btn = panelButtons.addButton(ButtonTarget.Back, Style.DEFAULT, AppController.Lang.Back()); btn.addListener(Events.OnClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { handler.onBackButtonClicked(); } }); } else { panelButtons.removeButton(ButtonTarget.Back); } } @Override public void setCancelButtonVisible(boolean visible) { if(visible) { MyButton btn = panelButtons.addButton(ButtonTarget.Cancel, Style.RED, AppController.Lang.CancelSelection()); btn.addListener(Events.OnClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { handler.onCancelButtonClicked(); } }); } else { panelButtons.removeButton(ButtonTarget.Cancel); } } @Override public void setCopyButtonVisible(boolean visible) { if(visible) { MyButton btn = panelButtons.addButton(ButtonTarget.Copy, Style.GREEN, AppController.Lang.CopyTo(AppController.Lang.MyMeals())); btn.addListener(Events.OnClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { handler.onCopyButtonClicked(); } }); } else { panelButtons.removeButton(ButtonTarget.Copy); } } @Override public void setHandler(MealsListHandler handler) { this.handler = handler; } @Override public void setMoveToTimeButtonVisible(boolean visible, TimeModel time) { if(visible) { String text = (time != null)? AppController.Lang.MoveTo(CommonUtils.getTimeToString(time.getTime())) : ""; MyButton btn = panelButtons.addButton(ButtonTarget.MoveToTarget, Style.GREEN, text); btn.addListener(Events.OnClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { handler.onMoveToTimeButtonClicked(); } }); } else { panelButtons.removeButton(ButtonTarget.MoveToTarget); } } @Override public void setQuickSelectionButtonVisible(boolean visible, TimeModel time) { if(visible) { String text = (time != null)? AppController.Lang.MoveSelectedTo(CommonUtils.getTimeToString(time.getTime())) : ""; MyButton btn = panelButtons.addButton(ButtonTarget.QuickSelection, Style.GREEN, text); btn.addListener(Events.OnClick, new Listener<BaseEvent>() { @Override public void handleEvent(BaseEvent be) { handler.onQuickSelectionButtonClicked(); } }); } else { panelButtons.removeButton(ButtonTarget.QuickSelection); } } /** * Sets title * @param btnText * @param handler */ @Override public void setTitle(String text) { labelTitle.setText(text); } }