package com.iambookmaster.client.quick; import java.util.ArrayList; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.ChangeListener; import com.google.gwt.user.client.ui.ClickListener; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.HasHorizontalAlignment; import com.google.gwt.user.client.ui.HorizontalPanel; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.iambookmaster.client.Images; import com.iambookmaster.client.Styles; import com.iambookmaster.client.beans.Greeting; import com.iambookmaster.client.common.CompactHorizontalPanel; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppLocale; import com.iambookmaster.client.model.Model; import com.iambookmaster.client.model.SettingsListener; import com.iambookmaster.client.viewer.GreetingWidgetFactory; public class QuickSettingsGreetingsEditor extends VerticalPanel implements QuickViewWidget { private static final AppConstants appConstants = AppLocale.getAppConstants(); private Model model; private SettingsListener settingsListener; private Image addNewGreeting; private Image preview; private VerticalPanel list; private PreviewPopup previewPopup; public QuickSettingsGreetingsEditor(Model mod) { this.model = mod; setSize("100%", "100%"); Label label = new Label(appConstants.quickGreetingsTitle()); add(label); setCellHeight(label,"1%"); setCellWidth(label,"100%"); ClickListener clickListener = new ClickListener() { public void onClick(Widget sender) { if (sender==addNewGreeting) { Greeting greeting = new Greeting(); model.getSettings().getGreetings().add(greeting); new GreetingWidget(greeting); model.updateSettings(settingsListener); } else if (sender==preview) { if (previewPopup==null) { previewPopup = new PreviewPopup(); } previewPopup.preview(model.getSettings().getGreetings()); } } }; CompactHorizontalPanel horizontalPanel = new CompactHorizontalPanel(); addNewGreeting = new Image(Images.ADD_CONNECTION); addNewGreeting.setStyleName(Styles.CLICKABLE); addNewGreeting.setTitle(appConstants.quickGreetingsAddTitle()); addNewGreeting.addClickListener(clickListener); horizontalPanel.addCompactWidget(addNewGreeting); preview = new Image(Images.PREVIEW); preview.setStyleName(Styles.CLICKABLE); preview.setTitle(appConstants.quickGreetingsPreviewAll()); preview.addClickListener(clickListener); horizontalPanel.addCompactWidget(preview); horizontalPanel.addFullText(""); add(horizontalPanel); setCellHeight(horizontalPanel,"1%"); setCellWidth(horizontalPanel,"100%"); //list of greetings list = new VerticalPanel(); list.setSize("100%", "100%"); add(list); setCellHeight(list,"1%"); setCellWidth(list,"100%"); //filler HTML html = new HTML(" "); html.setStyleName(Styles.FILLER); add(html); setCellHeight(html,"99%"); setCellWidth(html,"100%"); settingsListener = new SettingsListener(){ public void settingsWereUpated() { update(); } }; model.addSettingsListener(settingsListener); update(); } public void update() { list.clear(); ArrayList<Greeting> greetings = model.getSettings().getGreetings(); for (int i = 0; i < greetings.size(); i++) { new GreetingWidget(greetings.get(i)); } } public void close() { model.removeSettingsListener(settingsListener); } private void removeGreeting(Greeting greeting, GreetingWidget widget) { if (Window.confirm(appConstants.quickGreetingsRemoveConfirm())) { model.getSettings().getGreetings().remove(greeting); list.remove(widget); model.updateSettings(settingsListener); } } private void previewGreeting(Greeting greeting) { if (previewPopup==null) { previewPopup = new PreviewPopup(); } previewPopup.preview(greeting); } public class PreviewPopup extends PopupPanel implements ClickListener{ public PreviewPopup() { super(true,true); setStyleName(Styles.POPUP); } public void preview(Greeting greeting) { clear(); VerticalPanel panel = new VerticalPanel(); panel.setSize("100%", "100%"); Widget widget = GreetingWidgetFactory.create(greeting); panel.add(widget); panel.setCellHeight(widget,"99%"); panel.setCellWidth(widget,"100%"); Button button = new Button("Close"); button.addClickListener(this); panel.add(button); panel.setCellHeight(button,"1%"); panel.setCellWidth(button,"100%"); panel.setCellHorizontalAlignment(button,HasHorizontalAlignment.ALIGN_CENTER); setWidget(panel); center(); } public void preview(ArrayList<Greeting> greetings) { clear(); VerticalPanel panel = new VerticalPanel(); panel.setSize("100%", "100%"); for (int i = 0; i < greetings.size(); i++) { Greeting greeting = greetings.get(i); Widget widget = GreetingWidgetFactory.create(greeting); panel.add(widget); panel.setCellHeight(widget,"10%"); panel.setCellWidth(widget,"100%"); } Button button = new Button(appConstants.buttonClose()); button.addClickListener(this); panel.add(button); panel.setCellHeight(button,"1%"); panel.setCellWidth(button,"100%"); panel.setCellHorizontalAlignment(button,HasHorizontalAlignment.ALIGN_CENTER); setWidget(panel); center(); } public void onClick(Widget sender) { hide(); } } public class GreetingWidget extends Grid implements ClickListener,ChangeListener{ private TextBox name; private TextBox url; private TextBox text; private TextBox urlIcon; private Image remove; private Image preview; private Greeting greeting; public GreetingWidget(Greeting greeting) { super(4,2); setStyleName(Styles.GREETING); getColumnFormatter().setWidth(0, "1%"); getColumnFormatter().setWidth(1, "99%"); setSize("100%", "100%"); setSpacing(2); //name setWidget(0,0,new Label(appConstants.quickGreetingsName())); name = new TextBox(); name.addChangeListener(this); // name.setWidth("100%"); setWidget(0,1,name); //url setWidget(1,0,new Label(appConstants.quickGreetingsURL(),false)); url = new TextBox(); url.addChangeListener(this); // url.setWidth("100%"); setWidget(1,1,url); //icon url setWidget(2,0,new Label(appConstants.quickGreetingsIcon())); urlIcon = new TextBox(); urlIcon.addChangeListener(this); // urlIcon.setWidth("100%"); setWidget(2,1,urlIcon); //text HorizontalPanel horizontalPanel = new HorizontalPanel(); preview = new Image(Images.PREVIEW); preview.addClickListener(this); preview.setTitle(appConstants.quickGreetingsPreview()); horizontalPanel.add(preview); remove = new Image(Images.REMOVE); remove.addClickListener(this); remove.setTitle(appConstants.titleRemove()); horizontalPanel.add(remove); setWidget(3,0,horizontalPanel); text = new TextBox(); text.addChangeListener(this); // text.setWidth("100%"); text.setTitle(appConstants.quickGreetingsText()); setWidget(3,1,text); list.add(this); list.setCellHeight(this,"1%"); list.setCellWidth(this,"100%"); //fill data apply(greeting); } private void apply(Greeting greeting) { this.greeting = greeting; name.setText(greeting.getName()); url.setText(greeting.getUrl()); urlIcon.setText(greeting.getImageUrl()); text.setText(greeting.getText()); } public void onClick(Widget sender) { if (sender==remove) { removeGreeting(greeting,this); } else if (sender==preview) { previewGreeting(greeting); } } public void onChange(Widget sender) { if (sender==name) { greeting.setName(name.getText().trim()); } else if (sender==url) { greeting.setUrl(url.getText().trim()); } else if (sender==urlIcon) { greeting.setImageUrl(urlIcon.getText().trim()); } else if (sender==text) { greeting.setText(text.getText().trim()); } model.updateSettings(settingsListener); } } }