/* * Copyright 2010 JBoss Inc * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package org.drools.guvnor.client.factmodel; import org.drools.guvnor.client.messages.Constants; import org.drools.guvnor.client.resources.Images; import org.drools.guvnor.client.util.AbstractLazyStackPanelHeader; import com.google.gwt.core.client.GWT; import com.google.gwt.event.dom.client.ClickEvent; import com.google.gwt.event.dom.client.ClickHandler; import com.google.gwt.event.logical.shared.CloseEvent; import com.google.gwt.event.logical.shared.CloseHandler; import com.google.gwt.event.logical.shared.OpenEvent; import com.google.gwt.event.logical.shared.OpenHandler; import com.google.gwt.uibinder.client.UiBinder; import com.google.gwt.uibinder.client.UiField; import com.google.gwt.uibinder.client.UiHandler; import com.google.gwt.user.client.Command; import com.google.gwt.user.client.Window; import com.google.gwt.user.client.ui.Image; import com.google.gwt.user.client.ui.Label; import com.google.gwt.user.client.ui.Widget; /** * * @author rikkola * */ public class FactModelEditor extends AbstractLazyStackPanelHeader { private static Constants constants = ((Constants) GWT.create( Constants.class )); private static Images images = (Images) GWT.create( Images.class ); interface FactModelEditorBinder extends UiBinder<Widget, FactModelEditor> { } private static FactModelEditorBinder uiBinder = GWT.create( FactModelEditorBinder.class ); @UiField Image icon; @UiField Label titleLabel; @UiField Image editIcon; @UiField Image moveUpIcon; @UiField Image moveDownIcon; @UiField Image deleteIcon; private ClickHandler expandClickHandler = new ClickHandler() { public void onClick(ClickEvent event) { onTitleClicked(); } }; private final FactMetaModel factMetaModel; private Command deleteEvent; private Command moveUpCommand; private Command moveDownCommand; private ModelNameHelper modelNameHelper; public void setDeleteEvent(Command deleteEvent) { this.deleteEvent = deleteEvent; } public FactModelEditor(FactMetaModel factMetaModel) { this.factMetaModel = factMetaModel; add( uiBinder.createAndBindUi( this ) ); titleLabel.setText( factMetaModel.name ); icon.addClickHandler( expandClickHandler ); titleLabel.addClickHandler( expandClickHandler ); setIconImage(); moveUpIcon.setTitle( constants.MoveUp() ); moveDownIcon.setTitle( constants.MoveDown() ); deleteIcon.setTitle( constants.RemoveThisFactType() ); addOpenHandler( new OpenHandler<AbstractLazyStackPanelHeader>() { public void onOpen(OpenEvent<AbstractLazyStackPanelHeader> event) { expanded = true; setIconImage(); } } ); addCloseHandler( new CloseHandler<AbstractLazyStackPanelHeader>() { public void onClose(CloseEvent<AbstractLazyStackPanelHeader> event) { expanded = false; setIconImage(); } } ); } @UiHandler("editIcon") void editIconClick(ClickEvent event) { final FactEditorPopup popup = new FactEditorPopup( factMetaModel, modelNameHelper ); popup.setOkCommand( new Command() { public void execute() { titleLabel.setText( factMetaModel.name ); } } ); popup.show(); } @UiHandler("moveUpIcon") void moveUpClick(ClickEvent event) { moveUpCommand.execute(); } @UiHandler("moveDownIcon") void moveDownClick(ClickEvent event) { moveDownCommand.execute(); } @UiHandler("deleteIcon") void deleteClick(ClickEvent event) { if ( Window.confirm( constants.AreYouSureYouWantToRemoveThisFact() ) ) { deleteEvent.execute(); } } public void setModelNameHelper(ModelNameHelper modelNameHelper) { this.modelNameHelper = modelNameHelper; } private void setIconImage() { if ( expanded ) { icon.setResource( images.collapse() ); } else { icon.setResource( images.expand() ); } } public void setMoveDownCommand(Command moveDownCommand) { this.moveDownCommand = moveDownCommand; } public void setMoveUpCommand(Command moveUpCommand) { this.moveUpCommand = moveUpCommand; } public void setUpVisible(boolean visible) { moveUpIcon.setVisible( visible ); } public void setDownVisible(boolean visible) { moveDownIcon.setVisible( visible ); } public void expand() { if ( !expanded ) { onTitleClicked(); } } public void collapse() { if ( expanded ) { onTitleClicked(); } } private void onTitleClicked() { if ( expanded ) { CloseEvent.fire( this, this ); } else { OpenEvent.fire( this, this ); } } public FactMetaModel getFactModel() { return factMetaModel; } public Widget getContent() { return new FactFieldsEditor( factMetaModel.fields, modelNameHelper ); } }