package org.korsakow.ide.ui.controller.helper; import java.util.ArrayList; import java.util.List; import org.dsrg.soenea.domain.MapperException; import org.korsakow.domain.Settings; import org.korsakow.domain.command.Request; import org.korsakow.domain.command.UpdateInterfaceCommand; import org.korsakow.domain.interf.IImage; import org.korsakow.domain.interf.IInterface; import org.korsakow.domain.interf.IProject; import org.korsakow.domain.interf.ISettings; import org.korsakow.domain.interf.ISound; import org.korsakow.domain.interf.IWidget; import org.korsakow.domain.mapper.input.ImageInputMapper; import org.korsakow.domain.mapper.input.ProjectInputMapper; import org.korsakow.domain.mapper.input.SettingsInputMapper; import org.korsakow.domain.mapper.input.SoundInputMapper; import org.korsakow.ide.resources.WidgetType; import org.korsakow.ide.resources.widget.WidgetModel; import org.korsakow.ide.ui.interfacebuilder.InterfaceBuilderMainPanel; import org.korsakow.ide.ui.interfacebuilder.WidgetCanvasModel; public class InterfaceHelper { public static void initView(InterfaceBuilderMainPanel view, String name) throws MapperException { ISettings settings = SettingsInputMapper.find(); IProject project = ProjectInputMapper.find(); final int gridWidth = 20; final int gridHeight = 20; view.setNameFieldText(name); view.getCanvas().getModel().setGridSize(gridWidth, gridHeight); view.getGridInfoPanel().setGridWidthValue(gridWidth); view.getGridInfoPanel().setGridHeightValue(gridHeight); view.getCanvas().getModel().notifyInitialState(); view.setShowBackground(settings.getBoolean(Settings.ShowBackgroundPreview)); view.getCanvas().setBackgroundImage(project.getBackgroundImage()); view.getCanvas().setBackgroundColor(project.getBackgroundColor()); view.setClickSoundChoices(ViewHelper.sort(SoundInputMapper.findAll(), ISound.class, name)); view.setBackgroundImageChoices(ViewHelper.sort(ImageInputMapper.findAll(), IImage.class, name)); view.revalidate(); } public static void initView(InterfaceBuilderMainPanel view, IInterface interf) throws MapperException { ISettings settings = SettingsInputMapper.find(); IProject project = ProjectInputMapper.find(); final String similarName = settings.getBoolean(Settings.PutSimilarResourcesAtTop)?interf.getName():null; view.setResourceId(interf.getId()); view.setNameFieldText(similarName); final WidgetCanvasModel canvasModel = view.getCanvas().getModel(); canvasModel.setGridSize(interf.getGridWidth(), interf.getGridHeight()); canvasModel.clearWidgets(); view.getGridInfoPanel().setGridWidthValue(interf.getGridWidth()); view.getGridInfoPanel().setGridHeightValue(interf.getGridHeight()); view.setClickSoundChoices(ViewHelper.sort(SoundInputMapper.findAll(), ISound.class, similarName)); view.setClickSound(interf.getClickSound()); view.setClickSoundVolume(interf.getClickSoundVolume()); canvasModel.notifyInitialState(); view.setBackgroundImageChoices(ViewHelper.sort(ImageInputMapper.findAll(), IImage.class, similarName)); view.setBackgroundImage(interf.getBackgroundImage()); view.setBackgroundColorModel(interf.getBackgroundColor()); view.getCanvas().setBackgroundImage(interf.getBackgroundImage()!=null?interf.getBackgroundImage():project.getBackgroundImage()); view.getCanvas().setBackgroundColor(interf.getBackgroundColor()!=null?interf.getBackgroundColor():project.getBackgroundColor()); view.setShowBackground(settings.getBoolean(Settings.ShowBackgroundPreview)); List<IWidget> widgets = new ArrayList<IWidget>(interf.getWidgets()); List<WidgetModel> models = createViewModels( canvasModel.getMovieOffsetX(), canvasModel.getMovieOffsetY(), widgets); for (WidgetModel model : models) canvasModel.addWidget(model); view.repaint(); view.revalidate(); } public static Request createRequest(InterfaceBuilderMainPanel view, Long id) throws MapperException { ISettings settings = SettingsInputMapper.find(); Request request = new Request(); request.set(UpdateInterfaceCommand.ID, id); request.set(UpdateInterfaceCommand.NAME, view.getNameFieldText().trim()); request.set(UpdateInterfaceCommand.KEYWORDS, view.getKeywords()); request.set(UpdateInterfaceCommand.GRID_WIDTH, view.getCanvas().getModel().getGridWidth()); request.set(UpdateInterfaceCommand.GRID_HEIGHT, view.getCanvas().getModel().getGridHeight()); request.set(UpdateInterfaceCommand.CLICK_SOUND_ID, view.getClickSoundId()); request.set(UpdateInterfaceCommand.CLICK_SOUND_VOLUME, view.getClickSoundVolume()); request.set(UpdateInterfaceCommand.BACKGROUND_IMAGE_ID, view.getBackgroundImageId()); request.set(UpdateInterfaceCommand.BACKGROUND_COLOR, view.getBackgroundColor()); // settings.setBoolean(Settings.ShowBackgroundColorPreview, view.getShowBackgroundColor()); // settings.setBoolean(Settings.ShowBackgroundImagePreview, view.getShowBackgroundImage()); ViewHelper.addWidgetsToRequest( -view.getCanvas().getModel().getMovieOffsetX(), -view.getCanvas().getModel().getMovieOffsetY(), request, view.getCanvas().getModel().getWidgets()); return request; } private static WidgetModel createViewModel(int offsetX, int offsetY, IWidget widget) { WidgetModel copy = WidgetType.forId(widget.getWidgetId()).newInstance(); copy.setName(widget.getName()); copy.setKeywords(widget.getKeywords()); copy.setPersistCondition(widget.getPersistCondition()); copy.setPersistAction(widget.getPersistAction()); copy.setX(widget.getX() + offsetX); copy.setY(widget.getY() + offsetY); copy.setWidth(widget.getWidth()); copy.setHeight(widget.getHeight()); for (String prop : copy.getDynamicPropertyIds()) copy.setDynamicProperty(prop, widget.getDynamicProperty(prop)); return copy; } private static List<WidgetModel> createViewModels(int offsetX, int offsetY, List<IWidget> widgets) { List<WidgetModel> copy = new ArrayList<WidgetModel>(); for (IWidget widget : widgets) copy.add(createViewModel(offsetX, offsetY, widget)); return copy; } }