/*
* Copyright 2011 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.jbpm.formbuilder.client.effect.view;
import org.jbpm.formapi.shared.api.FBScriptHelper;
import org.jbpm.formbuilder.client.FormBuilderGlobals;
import org.jbpm.formbuilder.client.messages.I18NConstants;
import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.VerticalPanel;
import com.google.gwt.user.client.ui.Widget;
public class ScriptHelperListPanel extends VerticalPanel {
private final I18NConstants i18n = FormBuilderGlobals.getInstance().getI18n();
public interface ScriptOrderHandler {
void onRemove(int index);
void onMoveUp(int index);
void onMoveDown(int index);
}
public void addScriptHelper(FBScriptHelper helper, ScriptOrderHandler handler) {
Widget editor = helper.draw();
if (editor == null) {
editor = new Label(i18n.ScriptHelperNullEditor());
}
final HorizontalPanel panel = new HorizontalPanel();
String number = String.valueOf(getWidgetCount() + 1);
panel.add(new Label(number));
panel.add(editor);
VerticalPanel buttons = new VerticalPanel();
panel.add(buttons);
buttons.add(createRemoveButton(panel, handler));
buttons.add(createMoveUpButton(panel, handler));
buttons.add(createMoveDownButton(panel, handler));
add(panel);
}
private Button createMoveDownButton(final HorizontalPanel panel, final ScriptOrderHandler handler) {
return new Button(i18n.MoveDownButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int index = getWidgetIndex(panel);
if (index + 1 < getWidgetCount()) {
remove(panel);
insert(panel, index + 1);
handler.onMoveDown(index);
renumber();
}
}
});
}
private Button createMoveUpButton(final HorizontalPanel panel, final ScriptOrderHandler handler) {
return new Button(i18n.MoveUpButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int index = getWidgetIndex(panel);
if (index -1 >= 0) {
remove(panel);
insert(panel, index - 1);
handler.onMoveUp(index);
renumber();
}
}
});
}
private Button createRemoveButton(final HorizontalPanel panel, final ScriptOrderHandler handler) {
return new Button(i18n.RemoveButton(), new ClickHandler() {
@Override
public void onClick(ClickEvent event) {
int index = getWidgetIndex(panel);
remove(panel);
handler.onRemove(index);
renumber();
}
});
}
private void renumber() {
for (Widget widget : this) {
HorizontalPanel panel = (HorizontalPanel) widget;
int index = getWidgetIndex(panel) + 1;
String number = String.valueOf(index);
panel.remove(0);
panel.insert(new Label(number), 0);
}
}
}