package com.iambookmaster.client.quick; import com.google.gwt.dom.client.Style.Overflow; import com.google.gwt.event.dom.client.ChangeEvent; import com.google.gwt.event.dom.client.ChangeHandler; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.dom.client.ErrorEvent; import com.google.gwt.event.dom.client.ErrorHandler; import com.google.gwt.event.dom.client.KeyCodes; import com.google.gwt.event.dom.client.KeyDownEvent; import com.google.gwt.event.dom.client.KeyDownHandler; import com.google.gwt.event.dom.client.LoadEvent; import com.google.gwt.event.dom.client.LoadHandler; import com.google.gwt.user.client.ui.Button; import com.google.gwt.user.client.ui.CheckBox; import com.google.gwt.user.client.ui.FlowPanel; import com.google.gwt.user.client.ui.Grid; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.TextBox; import com.google.gwt.user.client.ui.VerticalPanel; import com.iambookmaster.client.beans.Picture; import com.iambookmaster.client.beans.Sound; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppLocale; import com.iambookmaster.client.locale.AppMessages; import com.iambookmaster.client.model.ContentListener; import com.iambookmaster.client.model.Model; public class QuickViewPictureEditor extends VerticalPanel implements QuickViewWidget { private static final AppConstants appConstants = AppLocale.getAppConstants(); private static final AppMessages appMessages = AppLocale.getAppMessages(); private Picture object; private Model model; private ContentListener objectListener; private TextBox name; private TextBox url; private CheckBox noRepeat; private CheckBox filler; private CheckBox icon; private TextBox bigUrl; private TextBox urlSize; private TextBox bigUrlSize; private Image testImage; protected boolean testBigImage; public QuickViewPictureEditor(Model mod, Picture obj) { this.model = mod; setSize("100%", "100%"); Label label = new Label(appConstants.quickImageEditTitle()); add(label); setCellHeight(label,"1%"); setCellWidth(label,"100%"); Grid grid = new Grid(5,2); grid.setSize("100%", "100%"); ClickHandler clickListener = new ClickHandler() { public void onClick(ClickEvent event) { updateLocation(event.getSource()); } }; ChangeHandler changeListener = new ChangeHandler() { public void onChange(ChangeEvent event) { updateLocation(event.getSource()); } }; KeyDownHandler keyboardListener = new KeyDownHandler() { public void onKeyDown(KeyDownEvent event) { if (event.getNativeKeyCode()==KeyCodes.KEY_ENTER) { updateLocation(event.getSource()); } else if (event.getNativeKeyCode()==KeyCodes.KEY_ESCAPE) { open(object); } } }; int row=0; name = new TextBox(); name.addChangeHandler(changeListener); name.addKeyDownHandler(keyboardListener); grid.setWidget(row,0,new Label(appConstants.quickImageEditName())); grid.setWidget(row,1,name); row++; url = new TextBox(); url.addChangeHandler(changeListener); url.addKeyDownHandler(keyboardListener); grid.setWidget(row,0,new Label(appConstants.quickImageEditURL())); grid.setWidget(row,1,url); row++; urlSize = new TextBox(); urlSize.setReadOnly(true); grid.setWidget(row,0,new Label(appConstants.quickImageEditSize())); grid.setWidget(row,1,urlSize); row++; bigUrl = new TextBox(); bigUrl.addChangeHandler(changeListener); bigUrl.addKeyDownHandler(keyboardListener); grid.setWidget(row,0,new Label(appConstants.quickImageEditBigURL())); grid.setWidget(row,1,bigUrl); row++; bigUrlSize = new TextBox(); bigUrlSize.setReadOnly(true); grid.setWidget(row,0,new Label(appConstants.quickImageEditSize())); grid.setWidget(row,1,bigUrlSize); add(grid); setCellHeight(grid,"1%"); setCellWidth(grid,"100%"); noRepeat= new CheckBox(appConstants.quickImageEditNoRepeat()); noRepeat.addClickHandler(clickListener); add(noRepeat); setCellHeight(noRepeat,"1%"); setCellWidth(noRepeat,"100%"); filler = new CheckBox(appConstants.quickImageEditFiller()); filler.addClickHandler(clickListener); filler.setTitle(appConstants.quickImageEditFillerTitle()); add(filler); setCellHeight(filler,"1%"); setCellWidth(filler,"100%"); icon = new CheckBox(appConstants.quickImageEditRoleIcon()); icon.addClickHandler(clickListener); icon.setTitle(appConstants.quickImageEditRoleIconTitle()); add(icon); setCellHeight(icon,"1%"); setCellWidth(icon,"100%"); Button preview = new Button(appConstants.buttonPreview(),new ClickHandler() { public void onClick(ClickEvent event) { model.previewURL(url.getText().trim()); } }); add(preview); setCellHeight(preview,"1%"); setCellWidth(preview,"100%"); FlowPanel panel = new FlowPanel(); panel.setSize("1px", "1px"); panel.getElement().getStyle().setOverflow(Overflow.HIDDEN); panel.getElement().getStyle().setOpacity(0); testImage = new Image(); testImage.addLoadHandler(new LoadHandler() { public void onLoad(LoadEvent event) { if (testBigImage) { object.setBigHeight(testImage.getHeight()); object.setBigWidht(testImage.getWidth()); bigUrlSize.setValue(appMessages.imageSize(object.getBigWidht(), object.getBigHeight())); } else { object.setHeight(testImage.getHeight()); object.setWidht(testImage.getWidth()); urlSize.setValue(appMessages.imageSize(object.getWidht(), object.getHeight())); } } }); testImage.addErrorHandler(new ErrorHandler() { public void onError(ErrorEvent event) { if (testBigImage) { bigUrlSize.setValue(appConstants.quickImageEditWrongURL()); } else { urlSize.setValue(appConstants.quickImageEditWrongURL()); } } }); panel.add(testImage); add(panel); setCellHeight(panel,"99%"); setCellWidth(panel,"100%"); objectListener = new ContentListener(){ public void refreshAll() { open(QuickViewPictureEditor.this.object); } public void select(Picture object) { } public void unselect(Picture object) { } public void update(Picture object) { if (object==QuickViewPictureEditor.this.object) { open(QuickViewPictureEditor.this.object); } } public void remove(Picture object) { } public void addNew(Picture picture) { } public void addNew(Sound sound) { } public void remove(Sound sound) { } public void select(Sound sound) { } public void unselect(Sound sound) { } public void update(Sound sound) { } public void showInfo(Picture picture) { } public void showInfo(Sound sound) { } }; model.addContentListener(objectListener); open(obj); } private void updateLocation(Object sender) { if (sender==name) { object.setName(name.getText().trim()); } else if (sender==url) { object.setUrl(url.getText().trim()); testBigImage=false; testImage.setUrl(object.getUrl()); } else if (sender==bigUrl) { object.setBigUrl(bigUrl.getText().trim()); testBigImage=true; testImage.setUrl(object.getBigUrl()); } else if (sender==noRepeat) { object.setNoRepeat(noRepeat.getValue()); } else if (sender==filler) { object.setRole(getRoles()); } else if (sender==icon) { object.setRole(getRoles()); } model.updatePicture(object, objectListener); } private int getRoles() { return (filler.getValue() ? Picture.ROLE_FILLER : 0) + (icon.getValue() ? Picture.ROLE_ICON : 0); } public void open(Picture object) { this.object = object; name.setText(object.getName()); url.setText(object.getUrl()); bigUrl.setText(object.getBigUrl()); noRepeat.setValue(object.isNoRepeat()); urlSize.setText(appMessages.imageSize(object.getWidht(),object.getHeight())); bigUrlSize.setText(appMessages.imageSize(object.getBigWidht(),object.getBigHeight())); filler.setValue((object.getRole() & Picture.ROLE_FILLER) > 0); icon.setValue((object.getRole() & Picture.ROLE_ICON) > 0); } public void close() { model.removeContentListener(objectListener); } }