package com.iambookmaster.client; import java.util.Collections; import java.util.Comparator; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Event; import com.google.gwt.user.client.EventListener; import com.google.gwt.user.client.ui.HTML; import com.google.gwt.user.client.ui.MenuBar; import com.google.gwt.user.client.ui.PopupPanel; import com.google.gwt.user.client.ui.VerticalPanel; import com.google.gwt.user.client.ui.Widget; import com.iambookmaster.client.beans.AbstractParameter; import com.iambookmaster.client.beans.Alchemy; import com.iambookmaster.client.beans.Battle; import com.iambookmaster.client.beans.Modificator; import com.iambookmaster.client.beans.NPC; import com.iambookmaster.client.beans.ObjectBean; import com.iambookmaster.client.beans.Paragraph; import com.iambookmaster.client.beans.ParagraphConnection; import com.iambookmaster.client.beans.Parameter; import com.iambookmaster.client.beans.Picture; import com.iambookmaster.client.beans.Sound; import com.iambookmaster.client.common.ResizeListener; import com.iambookmaster.client.common.TrueStackPanelListener; import com.iambookmaster.client.common.TrueVerticalSplitPanel; import com.iambookmaster.client.locale.AppConstants; import com.iambookmaster.client.locale.AppLocale; import com.iambookmaster.client.model.ContentListener; import com.iambookmaster.client.model.Model; import com.iambookmaster.client.model.ObjectListener; import com.iambookmaster.client.model.ParagraphConnectionListener; import com.iambookmaster.client.model.ParagraphListener; import com.iambookmaster.client.model.ParameterListener; import com.iambookmaster.client.model.SettingsListener; import com.iambookmaster.client.paragraph.ParagraphsListView; import com.iambookmaster.client.quick.ModelsTree; import com.iambookmaster.client.quick.ObjectsList; import com.iambookmaster.client.quick.PictiresList; import com.iambookmaster.client.quick.QuickAbstractParameterEditor; import com.iambookmaster.client.quick.QuickAlchemyEditor; import com.iambookmaster.client.quick.QuickBattleEditor; import com.iambookmaster.client.quick.QuickModificatorEditor; import com.iambookmaster.client.quick.QuickNPCEditor; import com.iambookmaster.client.quick.QuickParameterEditor; import com.iambookmaster.client.quick.QuickViewObjectEditor; import com.iambookmaster.client.quick.QuickViewParagraphConnectionEditor; import com.iambookmaster.client.quick.QuickViewParagraphEditor; import com.iambookmaster.client.quick.QuickViewPictureEditor; import com.iambookmaster.client.quick.QuickViewSoundEditor; import com.iambookmaster.client.quick.QuickViewWidget; import com.iambookmaster.client.quick.SettingsList; import com.iambookmaster.client.quick.SoundsList; public class QuickPanel extends VerticalPanel { private AppConstants appConstants = AppLocale.getAppConstants(); public static final int LOCATIONS = 0; public static final int OBJECTS = 1; public static final int PARAMETERS = 2; public static final int PICTURES = 3; public static final int SOUNDS = 4; public static final int SETTINGS = 5; private TrueStackPanel stackPanel; private TrueVerticalSplitPanel splitPanel; // private ScrollContainer quickViewScroll; private VerticalPanel quickView; private ParagraphsListView locationsList; private ObjectsList objectsList; private SettingsList settings; private SoundsList sounds; private PictiresList pictures; private Model model; private ParagraphListener locationListener; private ContentListener contentListener; private ParagraphConnectionListener locationConnectionListener; private ObjectListener objectListener; private QuickViewWidget quickViewWidget; private SettingsListener settingsListener; private ModelsTree parameters; private ParameterListener paramtersListener; private TrueStackPanelListener stackPanelListener; public QuickPanel(Model md, Widget menu) { this.model = md; settingsListener = new SettingsListener() { public void settingsWereUpated() { } }; locationListener = new ParagraphListener() { public void addNewParagraph(Paragraph location) { quickViewLocation(location); } public void edit(Paragraph location) { } public void refreshAll() { quickViewNothing(); } public void select(Paragraph location) { quickViewLocation(location); } public void unselect(Paragraph location) { } public void update(Paragraph location) { } public void remove(Paragraph location) { quickViewNothing(); } }; locationConnectionListener = new ParagraphConnectionListener() { public void refreshAll() { } public void select(ParagraphConnection connection) { quickViewLocationConnection(connection); } public void unselect(ParagraphConnection connection) { } public void update(ParagraphConnection connection) { } public void remove(ParagraphConnection connection) { quickViewNothing(); } public void addNew(ParagraphConnection connection) { quickViewLocationConnection(connection); } }; objectListener = new ObjectListener() { public void addNewObject(ObjectBean object) { } public void refreshAll() { } public void select(ObjectBean object) { quickViewObject(object); } public void unselect(ObjectBean object) { } public void update(ObjectBean object) { } public void remove(ObjectBean object) { quickViewNothing(); } public void showInfo(ObjectBean object) { } }; contentListener = new ContentListener() { public void addNew(Picture picture) { } public void addNew(Sound sound) { } public void refreshAll() { } public void remove(Picture picture) { quickViewNothing(); } public void remove(Sound sound) { quickViewNothing(); } public void select(Sound sound) { quickViewSound(sound); } public void select(Picture picture) { quickViewPicture(picture); } public void unselect(Sound sound) { } public void unselect(Picture picture) { } public void update(Picture picture) { } public void update(Sound sound) { } public void showInfo(Picture picture) { } public void showInfo(Sound sound) { } }; paramtersListener = new ParameterListener() { public void addNewParameter(AbstractParameter parameter) { } public void refreshAll() { } public void remove(AbstractParameter parameter) { quickViewNothing(); } public void select(AbstractParameter parameter) { if (parameters.getSelected() != null) { quickViewParameter(parameters.getSelected()); } else { quickViewNothing(); } } public void update(AbstractParameter parameter) { } public void showInfo(AbstractParameter parameter) { } }; model.addParamaterListener(paramtersListener); model.addParagraphListener(locationListener); model.addParagraphConnectionListener(locationConnectionListener); model.addObjectsListener(objectListener); model.addContentListener(contentListener); model.addSettingsListener(settingsListener); setSize("100%", "100%"); setStyleName("quick_panel"); add(menu); setCellHeight(menu, "1%"); setCellWidth(menu, "100%"); splitPanel = new TrueVerticalSplitPanel(false,true); stackPanel = new TrueStackPanel(); locationsList = new ParagraphsListView(model); stackPanel.add(locationsList); stackPanel.setStackHeader(LOCATIONS,appConstants.quickParagraphs(),Images.LOCATIONS_LIST,appConstants.quickParagraphsTitle(),new EventListener() { private ParagraphOrderMenu menu = new ParagraphOrderMenu(); public void onBrowserEvent(Event event) { menu.setPopupPosition(event.getClientX(),event.getClientY()); menu.show(); } }); stackPanel.showStack(LOCATIONS); objectsList = new ObjectsList(model); stackPanel.add(objectsList); stackPanel.setStackHeader(OBJECTS,appConstants.quickObjects(),Images.OBJECTS_LIST,appConstants.quickObjectsTitle(),new EventListener() { public void onBrowserEvent(Event event) { Collections.sort(model.getObjects(),new Comparator<ObjectBean>() { public int compare(ObjectBean o1, ObjectBean o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }); model.refreshObjects(); } }); parameters = new ModelsTree(model); stackPanel.add(parameters); stackPanel.setStackHeader(PARAMETERS,appConstants.quickModels(),Images.MODELS_TREE,appConstants.quickModelsTitle()); pictures = new PictiresList(model); stackPanel.add(pictures); stackPanel.setStackHeader(PICTURES,appConstants.quickImages(),Images.IMAGES_LIST,appConstants.quickImagesTitle(),new EventListener() { public void onBrowserEvent(Event event) { Collections.sort(model.getPictures(),new Comparator<Picture>() { public int compare(Picture o1, Picture o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }); model.refreshPictures(); } }); sounds = new SoundsList(model); stackPanel.add(sounds); stackPanel.setStackHeader(SOUNDS,appConstants.quickSounds(),Images.SOUNDS_LIST,appConstants.quickSoundsTitle(),new EventListener() { public void onBrowserEvent(Event event) { Collections.sort(model.getSounds(),new Comparator<Sound>() { public int compare(Sound o1, Sound o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }); model.refreshSounds(); } }); settings = new SettingsList(model) { public void onSelected() { updateSettingsWidget(); } }; stackPanel.add(settings); stackPanel.setStackHeader(SETTINGS,appConstants.quickSettings(),Images.SETTINGS,appConstants.quickSettingsTitle()); stackPanel.selectHeader(LOCATIONS, true); stackPanelListener = new TrueStackPanelListener() { public void activate(int index) { switch (index) { case LOCATIONS: locationsList.activate(); if (locationsList.getSelected() != null) { quickViewLocation(locationsList.getSelected()); } else { quickViewNothing(); } break; case OBJECTS: locationsList.deactivate(); objectsList.activate(); if (objectsList.getSelected() != null) { quickViewObject(objectsList.getSelected()); } else { quickViewNothing(); } break; case PARAMETERS: locationsList.deactivate(); parameters.activate(); if (parameters.getSelected() != null) { quickViewParameter(parameters.getSelected()); } else { quickViewNothing(); } break; case PICTURES: locationsList.deactivate(); pictures.activate(); if (pictures.getSelected() != null) { quickViewPicture(pictures.getSelected()); } else { quickViewNothing(); } break; case SOUNDS: locationsList.deactivate(); sounds.activate(); if (sounds.getSelected() != null) { quickViewSound(sounds.getSelected()); } else { quickViewNothing(); } break; case SETTINGS: locationsList.deactivate(); settings.activate(); updateSettingsWidget(); break; } } }; stackPanel.setListener(stackPanelListener); splitPanel.setTopWidget(stackPanel); //quick view-edit quickView = new VerticalPanel(); quickView.setSize("100%", "100%"); quickView.setStyleName("editor_panel"); // quickViewScroll = new ScrollContainer(); // quickViewScroll.setScrollWidget(quickView); // DOM.setStyleAttribute(quickViewScroll.getElement(), "border", "1px solid green"); splitPanel.setBottomWidget(quickView); splitPanel.setSize("100%", "100%"); splitPanel.setSplitPosition("50%"); splitPanel.setSplitEnabled(true); splitPanel.addResizeListener(new ResizeListener() { public void onResize(Widget panel) { // quickViewScroll.resetHeight(); } }); add(splitPanel); setCellHeight(splitPanel, "100%"); setCellWidth(splitPanel, "100%"); splitPanel.addResizeListener(new ResizeListener() { public void onResize(Widget panel) { QuickPanel.this.onResize(); } }); locationsList.activate(); } private void updateSettingsWidget() { QuickViewWidget widget = settings.getSelectedWidget(); if (widget==null) { quickViewNothing(); } else { quickViewSettings(widget); } } public void quickViewSettings(QuickViewWidget widget) { addEditor((Widget)widget); } public void quickViewNothing() { clearQuickView(); quickView.add(new HTML(" ")); quickViewWidget = null; } public void quickViewLocation(Paragraph location) { if (quickViewWidget instanceof QuickViewParagraphEditor) { QuickViewParagraphEditor editor = (QuickViewParagraphEditor) quickViewWidget; editor.open(location); } else { clearQuickView(); QuickViewParagraphEditor editor = new QuickViewParagraphEditor(model,location); addEditor(editor); } } private void clearQuickView() { if (quickViewWidget != null) { quickViewWidget.close(); } quickView.clear(); } public void quickViewObject(ObjectBean object) { if (quickViewWidget instanceof QuickViewObjectEditor) { QuickViewObjectEditor editor = (QuickViewObjectEditor) quickViewWidget; editor.open(object); } else { clearQuickView(); QuickViewObjectEditor editor = new QuickViewObjectEditor(model,object); addEditor(editor); } } protected void quickViewParameter(AbstractParameter selected) { if (selected instanceof Parameter) { QuickAbstractParameterEditor editor; if (quickViewWidget instanceof QuickParameterEditor) { editor = (QuickParameterEditor) quickViewWidget; } else { clearQuickView(); editor = new QuickParameterEditor(model); addEditor(editor); } editor.open((Parameter)selected); } else if (selected instanceof NPC) { QuickNPCEditor editor; if (quickViewWidget instanceof QuickNPCEditor) { editor = (QuickNPCEditor) quickViewWidget; } else { clearQuickView(); editor = new QuickNPCEditor(model); addEditor(editor); } editor.open((NPC)selected); } else if (selected instanceof Battle) { QuickAbstractParameterEditor editor; if (quickViewWidget instanceof QuickBattleEditor) { editor = (QuickBattleEditor) quickViewWidget; } else { clearQuickView(); editor = new QuickBattleEditor(model); addEditor(editor); } editor.open((Battle)selected); } else if (selected instanceof Modificator) { QuickAbstractParameterEditor editor; if (quickViewWidget instanceof QuickModificatorEditor) { editor = (QuickModificatorEditor) quickViewWidget; } else { clearQuickView(); editor = new QuickModificatorEditor(model); addEditor(editor); } editor.open((Modificator)selected); } else if (selected instanceof Alchemy) { QuickAbstractParameterEditor editor; if (quickViewWidget instanceof QuickAlchemyEditor) { editor = (QuickAlchemyEditor) quickViewWidget; } else { clearQuickView(); editor = new QuickAlchemyEditor(model); addEditor(editor); } editor.open((Alchemy)selected); } else { quickViewNothing(); } } public void quickViewSound(Sound object) { if (quickViewWidget instanceof QuickViewSoundEditor) { QuickViewSoundEditor editor = (QuickViewSoundEditor) quickViewWidget; editor.open(object); } else { clearQuickView(); QuickViewSoundEditor editor = new QuickViewSoundEditor(model,object); addEditor(editor); } } public void quickViewPicture(Picture object) { if (quickViewWidget instanceof QuickViewPictureEditor) { QuickViewPictureEditor editor = (QuickViewPictureEditor) quickViewWidget; editor.open(object); } else { clearQuickView(); QuickViewPictureEditor editor = new QuickViewPictureEditor(model,object); addEditor(editor); } } private void addEditor(Widget editor) { quickView.clear(); quickView.add(editor); quickView.setCellWidth(editor,"100%"); quickView.setCellHeight(editor,"100%"); quickViewWidget = (QuickViewWidget)editor; } public void quickViewLocationConnection(ParagraphConnection connection) { if (quickViewWidget instanceof QuickViewParagraphConnectionEditor) { QuickViewParagraphConnectionEditor editor = (QuickViewParagraphConnectionEditor) quickViewWidget; editor.open(connection); } else { clearQuickView(); QuickViewParagraphConnectionEditor editor = new QuickViewParagraphConnectionEditor(model,connection); addEditor(editor); } } public void onResize() { // quickViewScroll.resetHeight(); locationsList.activateLater(); objectsList.activateLater(); pictures.activateLater(); sounds.activateLater(); settings.activateLater(); parameters.activateLater(); switch (stackPanel.getSelectedIndex()) { case LOCATIONS: locationsList.activate(); break; case OBJECTS: objectsList.activate(); break; case PICTURES: pictures.activate(); break; case SOUNDS: sounds.activate(); break; case PARAMETERS: parameters.activate(); break; case SETTINGS: settings.activate(); break; } } public void activate(int widget) { stackPanel.showStack(widget); stackPanel.selectHeader(widget, true); stackPanelListener.activate(widget); } public class ParagraphOrderMenu extends PopupPanel { private MenuBar newConnectionMenu; public ParagraphOrderMenu() { super(true,true); newConnectionMenu = new MenuBar(true); newConnectionMenu.addItem(appConstants.sortByName(),new Command() { public void execute() { ParagraphOrderMenu.this.hide(); Collections.sort(model.getParagraphs(),new Comparator<Paragraph>() { public int compare(Paragraph o1, Paragraph o2) { return o1.getName().compareToIgnoreCase(o2.getName()); } }); model.refreshParagraphs(); } }); newConnectionMenu.addItem(appConstants.sortByNumber(),new Command() { public void execute() { ParagraphOrderMenu.this.hide(); Collections.sort(model.getParagraphs(),new Comparator<Paragraph>() { public int compare(Paragraph o1, Paragraph o2) { return o1.getNumber()-o2.getNumber(); } }); model.refreshParagraphs(); } }); add(newConnectionMenu); } } }