use of com.scriptographer.adm.PopupList in project scriptographer by scriptographer.
the class AdmComponentProxy method createItem.
protected Item createItem(Dialog dialog) {
// Item:
item = null;
ComponentType type = component.getType();
switch(type) {
case NUMBER:
{
Boolean steppers = component.getSteppers();
if (steppers != null && steppers) {
item = new SpinEdit(dialog) {
protected void onChange() {
AdmComponentProxy.this.onChange(true);
}
};
} else {
TextEditItem textItem = new TextEdit(dialog) {
protected void onChange() {
AdmComponentProxy.this.onChange(true);
}
};
textItem.setAllowMath(true);
textItem.setAllowUnits(true);
item = textItem;
}
}
break;
case STRING:
{
Boolean multiline = component.getMultiline();
TextOption[] options = multiline != null && multiline ? new TextOption[] { TextOption.MULTILINE } : null;
item = new TextEdit(dialog, options) {
protected void onChange() {
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case TEXT:
{
item = new TextPane(dialog);
// Space a bit more to the top, to compensate the descender space.
item.setMargin(new Border(1, 0, 0, 0));
}
break;
case RULER:
{
// If the ruler has a label, add it to the left of it, using an
// ItemGroup and a TableLayout. The ItemGroup needs to be created
// before the frame, otherwise layouting issues arise...
// Ideally this should be resolved, but as ADM is on its way out,
// just work around it for now.
ItemGroup group;
String label = component.getLabel();
if (label != null && !label.equals("")) {
group = new ItemGroup(dialog);
TextPane labelItem = new TextPane(dialog);
labelItem.setText(label);
// Use 3 rows, so the center one with the ruler gets centered,
// then span the label across all three.
double[][] sizes = { new double[] { TableLayout.PREFERRED, TableLayout.FILL }, new double[] { TableLayout.FILL, TableLayout.PREFERRED, TableLayout.FILL } };
group.setLayout(new TableLayout(sizes));
group.add(labelItem, "0, 0, 0, 2");
group.setMarginTop(2);
} else {
group = null;
}
Frame frame = new Frame(dialog);
frame.setStyle(FrameStyle.SUNKEN);
// Margin needs to be set before changing size...
// TODO: Fix this in UI package?
int top = label != null ? 2 : 4, bottom = 4;
frame.setMargin(top, 0, bottom, 0);
// Margin is included inside size, not added. This is different
// to how things works with CSS...
// TODO: Fix this in UI package?
frame.setHeight(2 + top + bottom);
// Now finish setting up the layout group and label
if (group != null) {
group.add(frame, "1, 1, full, center");
item = group;
} else {
item = frame;
}
}
break;
case SLIDER:
{
item = new Slider(dialog) {
protected void onChange() {
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case BOOLEAN:
{
item = new CheckBox(dialog) {
protected void onClick() {
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case LIST:
{
item = new PopupList(dialog, true) {
protected void onChange() {
selectedIndex = this.getSelectedEntry().getIndex();
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case BUTTON:
{
item = new Button(dialog) {
protected void onClick() {
AdmComponentProxy.this.onClick();
}
};
}
break;
case COLOR:
{
item = new ColorButton(dialog) {
protected void onClick() {
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case FONT:
{
item = new FontPopupList(dialog, new FontPopupListOption[] { FontPopupListOption.EDITABLE, FontPopupListOption.VERTICAL }) {
protected void onChange() {
AdmComponentProxy.this.onChange(true);
}
};
}
break;
case MENU_ENTRY:
case MENU_SEPARATOR:
{
PopupMenu menu = dialog.getPopupMenu();
if (menu != null) {
entry = new ListEntry(menu) {
protected void onSelect() {
AdmComponentProxy.this.onSelect();
}
};
if (type == ComponentType.MENU_SEPARATOR)
entry.setSeparator(true);
}
}
break;
}
initialize();
return item;
}
use of com.scriptographer.adm.PopupList in project scriptographer by scriptographer.
the class AdmComponentProxy method getValue.
public Object getValue() {
if (item == null)
return component.getDefaultValue();
switch(component.getType()) {
case STRING:
case TEXT:
return ((TextValueItem) item).getText();
case BUTTON:
return ((Button) item).getText();
case NUMBER:
return ((ValueItem) item).getValue();
case SLIDER:
double value = ((ValueItem) item).getValue() / factor;
Double inc = component.getIncrement();
if (inc != null) {
double pre = value;
value = Math.round(value / inc) * inc;
if (pre != value)
((ValueItem) item).setValue((float) (value * factor));
}
return value;
case BOOLEAN:
return ((ToggleItem) item).isChecked();
case LIST:
ListEntry selected = ((PopupList) item).getSelectedEntry();
if (selected != null)
return component.getOption(selected.getIndex());
break;
case COLOR:
return ((ColorButton) item).getColor();
case FONT:
return ((FontPopupList) item).getFontWeight();
}
return null;
}
use of com.scriptographer.adm.PopupList in project scriptographer by scriptographer.
the class AdmComponentProxy method setSelectedIndex.
public boolean setSelectedIndex(Integer index, boolean callback) {
selectedIndex = index;
if (item == null)
return false;
// TODO: Handle index == null ?
PopupList list = (PopupList) item;
list.setSelectedEntry(list.get(index));
return true;
}
use of com.scriptographer.adm.PopupList in project scriptographer by scriptographer.
the class AdmComponentProxy method setOptions.
public void setOptions(Object[] options, Object current) {
if (item == null)
return;
PopupList list = (PopupList) item;
list.removeAll();
if (options != null && options.length > 0) {
int index = selectedIndex != null ? selectedIndex : 0;
for (int i = 0; i < options.length; i++) {
Object option = options[i];
if (option.equals(current))
index = i;
ListEntry entry = null;
if (option instanceof ListEntry) {
entry = (ListEntry) option;
entry = list.add(entry);
} else {
entry = new ListEntry(list);
// Simplify names for art items
String name = option instanceof com.scriptographer.ai.Item ? ((com.scriptographer.ai.Item) option).getName() : null;
entry.setText(name != null ? name : option.toString());
}
}
if (index < 0)
index = 0;
else if (index >= options.length)
index = options.length - 1;
// We're changing options, not value, so cause onChange
// callback for value
setSelectedIndex(index, true);
updateSize();
}
}
Aggregations