From 03ddc5a424fecb70ee0f9978c02a6be8e6ff414f Mon Sep 17 00:00:00 2001 From: ShaRose Date: Thu, 25 Aug 2011 21:39:52 -0230 Subject: [PATCH 01/49] Added GuiApiHelper Contains helper methods to create buttons with ModActions Contains a helper system to create prompts Modified WidgetClassicTwocolumn and WidgetSinglecolumn removed overridewidth: Was broken and nobody used it anyways Fixed overrideheight Added heightOverrideExceptions so you can unable height overrides on specific widgets Assorted Formatting --- src/GuiApiHelper.java | 128 ++++++++++++++++++++++++++++++++ src/WidgetClassicTwocolumn.java | 112 ++++++++++++++++++---------- src/WidgetSinglecolumn.java | 47 +++++++----- 3 files changed, 230 insertions(+), 57 deletions(-) create mode 100644 src/GuiApiHelper.java diff --git a/src/GuiApiHelper.java b/src/GuiApiHelper.java new file mode 100644 index 0000000..aac5e9d --- /dev/null +++ b/src/GuiApiHelper.java @@ -0,0 +1,128 @@ +import java.util.AbstractMap; +import java.util.ArrayList; + +import de.matthiasmann.twl.Button; +import de.matthiasmann.twl.ScrollPane; +import de.matthiasmann.twl.TextArea; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.model.SimpleButtonModel; +import de.matthiasmann.twl.textarea.SimpleTextAreaModel; + + +public class GuiApiHelper +{ + public static GuiApiHelper createChoiceMenu(String displayText) + { + return new GuiApiHelper(displayText); + } + + public static Widget createChoiceMenu(String displayText, Object... args) + { + if (args.length % 2 == 1) + { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + try + { + for (int i = 0; i < args.length; i += 2) + { + helper.addButton((String) args[i], (ModAction) args[i + 1]); + } + } + catch (Throwable e) + { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button.", + e); + } + return helper.genWidget(); + } + + public static Widget createChoiceMenu(String displayText, + String[] buttonTexts, ModAction[] buttonActions) + { + if (buttonTexts.length != buttonActions.length) + { + throw new IllegalArgumentException( + "Arguments not in correct format. buttonTexts needs to be the same size as buttonActions."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + for (int i = 0; i < buttonTexts.length; i += 2) + { + helper.addButton(buttonTexts[i], buttonActions[i]); + } + return helper.genWidget(); + } + + public static Button makeButton(String displayText, ModAction action) + { + SimpleButtonModel simplebuttonmodel = new SimpleButtonModel(); + simplebuttonmodel.addActionCallback(action); + Button button = new Button(simplebuttonmodel); + button.setText(displayText); + return button; + } + + public static Button makeButton(String displayText, String methodName, + Object me) + { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName, new Class[0])); + } + + @SuppressWarnings("rawtypes") + public static Button makeButton(String displayText, String methodName, + Object me, Class[] types, Object... arguments) + { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName, types).setDefaultArguments(arguments)); + } + + private ArrayList> buttonInfo_; + private String displayText_; + + private GuiApiHelper(String displayText) + { + displayText_ = displayText; + buttonInfo_ = new ArrayList>(); + } + + public void addButton(String text, ModAction action) + { + buttonInfo_.add(new AbstractMap.SimpleEntry(text, + action)); + } + + public void addButton(String text, String methodName, Object me) + { + buttonInfo_.add(new AbstractMap.SimpleEntry(text, + new ModAction(me, methodName, new Class[0]))); + } + + @SuppressWarnings("rawtypes") + public void addButton(String text, String methodName, Object me, + Class[] types, Object... arguments) + { + buttonInfo_.add(new AbstractMap.SimpleEntry(text, + (new ModAction(me, methodName, types) + .setDefaultArguments(arguments)))); + } + + public Widget genWidget() + { + WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); + SimpleTextAreaModel model = new SimpleTextAreaModel(); + model.setText(displayText_, false); + TextArea textarea = new TextArea(model); + widget.add(textarea); + for (AbstractMap.SimpleEntry entry : buttonInfo_) + { + GuiApiHelper.makeButton(entry.getKey(), entry.getValue()); + } + ScrollPane pane = new ScrollPane(widget); + pane.setFixed(ScrollPane.Fixed.HORIZONTAL); + return pane; + } +} diff --git a/src/WidgetClassicTwocolumn.java b/src/WidgetClassicTwocolumn.java index 78676ac..02ea255 100644 --- a/src/WidgetClassicTwocolumn.java +++ b/src/WidgetClassicTwocolumn.java @@ -1,71 +1,105 @@ -import de.matthiasmann.twl.Button; +import java.util.ArrayList; + import de.matthiasmann.twl.Widget; -public class WidgetClassicTwocolumn extends Widget { + +public class WidgetClassicTwocolumn extends Widget +{ public int defaultwidth = 150; public int defaultheight = 20; public int defaultpad = 4; - public boolean overridewidth = true; public boolean overrideheight = true; + public int split = 10; + public int vpad = 0; + public ArrayList heightOverrideExceptions = new ArrayList(); public WidgetClassicTwocolumn(Widget... ws) { - for(int i=0; i> 1) + vpad); + if (!this.overrideheight + || heightOverrideExceptions.contains(w2)) + { + int temp = w2.getPreferredHeight(); + if (temp > height) + height = temp; + } } - else + w.setSize(defaultwidth, height); + w.setPosition(this.getX() + this.getWidth() / 2 + - (150 + this.split / 2), this.getY() + totalheight); + if (w2 != null) { - w.setPosition( getX()+getWidth()/2 + (split/2), getY() + (defaultheight+defaultpad) * (i >> 1) + vpad); + w2.setSize(defaultwidth, height); + w2.setPosition(this.getX() + this.getWidth() / 2 + this.split + / 2, this.getY() + totalheight); } - + totalheight += height + defaultpad; } } public int getPreferredWidth() { - return getParent().getWidth(); + return this.getParent().getWidth(); } public int getPreferredHeight() { - return (defaultheight+defaultpad) * (1 * (getNumChildren() + 1)>>1) + vpad*2; + int totalheight = vpad; + for (int i = 0; i < this.getNumChildren(); i += 2) + { + Widget w = this.getChild(i); + Widget w2 = null; + if (i + 1 != getNumChildren()) + w2 = this.getChild(i + 1); + int height = this.defaultheight; + if (!this.overrideheight || heightOverrideExceptions.contains(w)) + { + height = w.getPreferredHeight(); + } + if (w2 != null) + { + if (!this.overrideheight + || heightOverrideExceptions.contains(w2)) + { + int temp = w2.getPreferredHeight(); + if (temp > height) + height = temp; + } + } + totalheight += height + defaultpad; + } + return totalheight; } } diff --git a/src/WidgetSinglecolumn.java b/src/WidgetSinglecolumn.java index 95675d5..8286d60 100644 --- a/src/WidgetSinglecolumn.java +++ b/src/WidgetSinglecolumn.java @@ -1,42 +1,53 @@ import de.matthiasmann.twl.Widget; +import net.minecraft.src.WidgetClassicTwocolumn; -public class WidgetSinglecolumn extends WidgetClassicTwocolumn { - +public class WidgetSinglecolumn extends WidgetClassicTwocolumn +{ public WidgetSinglecolumn(Widget... w) { super(w); - defaultwidth = 200; + this.defaultwidth = 200; } - @Override public void layout() { - for(int i=0; i Date: Fri, 2 Sep 2011 23:24:45 -0230 Subject: [PATCH 02/49] Major cleanup of GuiApi, moved to mcp, added javadoc for pretty much everything. Added examples. --- doc/allclasses-frame.html | 87 + doc/allclasses-noframe.html | 87 + doc/constant-values.html | 172 ++ doc/deprecated-list.html | 144 ++ doc/help-doc.html | 215 ++ doc/index-files/index-1.html | 251 +++ doc/index-files/index-10.html | 143 ++ doc/index-files/index-11.html | 173 ++ doc/index-files/index-12.html | 239 +++ doc/index-files/index-13.html | 159 ++ doc/index-files/index-14.html | 146 ++ doc/index-files/index-15.html | 152 ++ doc/index-files/index-16.html | 212 ++ doc/index-files/index-17.html | 327 +++ doc/index-files/index-18.html | 176 ++ doc/index-files/index-19.html | 186 ++ doc/index-files/index-2.html | 174 ++ doc/index-files/index-20.html | 161 ++ doc/index-files/index-21.html | 208 ++ doc/index-files/index-22.html | 143 ++ doc/index-files/index-3.html | 193 ++ doc/index-files/index-4.html | 181 ++ doc/index-files/index-5.html | 143 ++ doc/index-files/index-6.html | 164 ++ doc/index-files/index-7.html | 308 +++ doc/index-files/index-8.html | 155 ++ doc/index-files/index-9.html | 155 ++ doc/index.html | 36 + doc/net/minecraft/src/GuiApiHelper.html | 652 ++++++ doc/net/minecraft/src/GuiModScreen.html | 509 +++++ doc/net/minecraft/src/GuiModSelect.html | 262 +++ doc/net/minecraft/src/GuiOptions.html | 331 +++ doc/net/minecraft/src/GuiWidgetScreen.html | 528 +++++ doc/net/minecraft/src/ModAction.html | 742 +++++++ doc/net/minecraft/src/ModSettingScreen.html | 494 +++++ doc/net/minecraft/src/ModSettings.html | 1846 +++++++++++++++++ doc/net/minecraft/src/Setting.html | 566 +++++ doc/net/minecraft/src/SettingBoolean.html | 398 ++++ doc/net/minecraft/src/SettingFloat.html | 518 +++++ doc/net/minecraft/src/SettingInt.html | 518 +++++ doc/net/minecraft/src/SettingKey.html | 488 +++++ doc/net/minecraft/src/SettingMulti.html | 563 +++++ doc/net/minecraft/src/SettingText.html | 379 ++++ doc/net/minecraft/src/WidgetBoolean.html | 524 +++++ .../minecraft/src/WidgetClassicTwocolumn.html | 468 +++++ doc/net/minecraft/src/WidgetFloat.html | 496 +++++ doc/net/minecraft/src/WidgetInt.html | 454 ++++ doc/net/minecraft/src/WidgetKeybinding.html | 560 +++++ doc/net/minecraft/src/WidgetMulti.html | 457 ++++ doc/net/minecraft/src/WidgetSetting.html | 455 ++++ doc/net/minecraft/src/WidgetSimplewindow.html | 515 +++++ doc/net/minecraft/src/WidgetSingleRow.html | 524 +++++ doc/net/minecraft/src/WidgetSinglecolumn.html | 329 +++ doc/net/minecraft/src/WidgetSlider.html | 265 +++ doc/net/minecraft/src/WidgetText.html | 536 +++++ .../minecraft/src/class-use/GuiApiHelper.html | 166 ++ .../minecraft/src/class-use/GuiModScreen.html | 198 ++ .../minecraft/src/class-use/GuiModSelect.html | 142 ++ .../minecraft/src/class-use/GuiOptions.html | 142 ++ .../src/class-use/GuiWidgetScreen.html | 181 ++ .../minecraft/src/class-use/ModAction.html | 263 +++ .../src/class-use/ModSettingScreen.html | 307 +++ .../minecraft/src/class-use/ModSettings.html | 197 ++ doc/net/minecraft/src/class-use/Setting.html | 189 ++ .../src/class-use/SettingBoolean.html | 271 +++ .../minecraft/src/class-use/SettingFloat.html | 270 +++ .../minecraft/src/class-use/SettingInt.html | 266 +++ .../minecraft/src/class-use/SettingKey.html | 235 +++ .../minecraft/src/class-use/SettingMulti.html | 237 +++ .../minecraft/src/class-use/SettingText.html | 234 +++ .../src/class-use/WidgetBoolean.html | 142 ++ .../src/class-use/WidgetClassicTwocolumn.html | 165 ++ .../minecraft/src/class-use/WidgetFloat.html | 142 ++ .../minecraft/src/class-use/WidgetInt.html | 142 ++ .../src/class-use/WidgetKeybinding.html | 142 ++ .../minecraft/src/class-use/WidgetMulti.html | 142 ++ .../src/class-use/WidgetSetting.html | 181 ++ .../src/class-use/WidgetSimplewindow.html | 181 ++ .../src/class-use/WidgetSingleRow.html | 166 ++ .../src/class-use/WidgetSinglecolumn.html | 142 ++ .../minecraft/src/class-use/WidgetSlider.html | 173 ++ .../minecraft/src/class-use/WidgetText.html | 142 ++ .../src/class-use/mod_GuiApiBasicExample.html | 142 ++ .../mod_GuiApiIntermediateExample.html | 142 ++ .../minecraft/src/mod_GuiApiBasicExample.html | 337 +++ .../src/mod_GuiApiIntermediateExample.html | 372 ++++ doc/net/minecraft/src/package-frame.html | 88 + doc/net/minecraft/src/package-summary.html | 271 +++ doc/net/minecraft/src/package-tree.html | 184 ++ doc/net/minecraft/src/package-use.html | 260 +++ doc/overview-tree.html | 186 ++ doc/package-list | 1 + doc/resources/inherit.gif | Bin 0 -> 57 bytes doc/stylesheet.css | 29 + javadoc.xml | 6 + mcp/GuiApiHelper.java | 392 ++++ mcp/GuiModScreen.java | 173 ++ mcp/GuiModSelect.java | 36 + mcp/GuiOptions.java | 91 + mcp/GuiWidgetScreen.java | 159 ++ mcp/ModAction.java | 333 +++ mcp/ModSettingScreen.java | 150 ++ mcp/ModSettings.java | 1090 ++++++++++ mcp/Setting.java | 126 ++ mcp/SettingBoolean.java | 84 + mcp/SettingFloat.java | 152 ++ mcp/SettingInt.java | 155 ++ mcp/SettingKey.java | 146 ++ mcp/SettingMulti.java | 197 ++ mcp/SettingText.java | 72 + mcp/WidgetBoolean.java | 137 ++ mcp/WidgetClassicTwocolumn.java | 203 ++ mcp/WidgetFloat.java | 98 + mcp/WidgetInt.java | 86 + mcp/WidgetKeybinding.java | 123 ++ mcp/WidgetMulti.java | 87 + mcp/WidgetSetting.java | 106 + mcp/WidgetSimplewindow.java | 163 ++ mcp/WidgetSingleRow.java | 160 ++ mcp/WidgetSinglecolumn.java | 89 + mcp/WidgetSlider.java | 32 + mcp/WidgetText.java | 148 ++ mcp/mod_GuiApiBasicExample.java | 133 ++ mcp/mod_GuiApiIntermediateExample.java | 226 ++ 124 files changed, 31590 insertions(+) create mode 100644 doc/allclasses-frame.html create mode 100644 doc/allclasses-noframe.html create mode 100644 doc/constant-values.html create mode 100644 doc/deprecated-list.html create mode 100644 doc/help-doc.html create mode 100644 doc/index-files/index-1.html create mode 100644 doc/index-files/index-10.html create mode 100644 doc/index-files/index-11.html create mode 100644 doc/index-files/index-12.html create mode 100644 doc/index-files/index-13.html create mode 100644 doc/index-files/index-14.html create mode 100644 doc/index-files/index-15.html create mode 100644 doc/index-files/index-16.html create mode 100644 doc/index-files/index-17.html create mode 100644 doc/index-files/index-18.html create mode 100644 doc/index-files/index-19.html create mode 100644 doc/index-files/index-2.html create mode 100644 doc/index-files/index-20.html create mode 100644 doc/index-files/index-21.html create mode 100644 doc/index-files/index-22.html create mode 100644 doc/index-files/index-3.html create mode 100644 doc/index-files/index-4.html create mode 100644 doc/index-files/index-5.html create mode 100644 doc/index-files/index-6.html create mode 100644 doc/index-files/index-7.html create mode 100644 doc/index-files/index-8.html create mode 100644 doc/index-files/index-9.html create mode 100644 doc/index.html create mode 100644 doc/net/minecraft/src/GuiApiHelper.html create mode 100644 doc/net/minecraft/src/GuiModScreen.html create mode 100644 doc/net/minecraft/src/GuiModSelect.html create mode 100644 doc/net/minecraft/src/GuiOptions.html create mode 100644 doc/net/minecraft/src/GuiWidgetScreen.html create mode 100644 doc/net/minecraft/src/ModAction.html create mode 100644 doc/net/minecraft/src/ModSettingScreen.html create mode 100644 doc/net/minecraft/src/ModSettings.html create mode 100644 doc/net/minecraft/src/Setting.html create mode 100644 doc/net/minecraft/src/SettingBoolean.html create mode 100644 doc/net/minecraft/src/SettingFloat.html create mode 100644 doc/net/minecraft/src/SettingInt.html create mode 100644 doc/net/minecraft/src/SettingKey.html create mode 100644 doc/net/minecraft/src/SettingMulti.html create mode 100644 doc/net/minecraft/src/SettingText.html create mode 100644 doc/net/minecraft/src/WidgetBoolean.html create mode 100644 doc/net/minecraft/src/WidgetClassicTwocolumn.html create mode 100644 doc/net/minecraft/src/WidgetFloat.html create mode 100644 doc/net/minecraft/src/WidgetInt.html create mode 100644 doc/net/minecraft/src/WidgetKeybinding.html create mode 100644 doc/net/minecraft/src/WidgetMulti.html create mode 100644 doc/net/minecraft/src/WidgetSetting.html create mode 100644 doc/net/minecraft/src/WidgetSimplewindow.html create mode 100644 doc/net/minecraft/src/WidgetSingleRow.html create mode 100644 doc/net/minecraft/src/WidgetSinglecolumn.html create mode 100644 doc/net/minecraft/src/WidgetSlider.html create mode 100644 doc/net/minecraft/src/WidgetText.html create mode 100644 doc/net/minecraft/src/class-use/GuiApiHelper.html create mode 100644 doc/net/minecraft/src/class-use/GuiModScreen.html create mode 100644 doc/net/minecraft/src/class-use/GuiModSelect.html create mode 100644 doc/net/minecraft/src/class-use/GuiOptions.html create mode 100644 doc/net/minecraft/src/class-use/GuiWidgetScreen.html create mode 100644 doc/net/minecraft/src/class-use/ModAction.html create mode 100644 doc/net/minecraft/src/class-use/ModSettingScreen.html create mode 100644 doc/net/minecraft/src/class-use/ModSettings.html create mode 100644 doc/net/minecraft/src/class-use/Setting.html create mode 100644 doc/net/minecraft/src/class-use/SettingBoolean.html create mode 100644 doc/net/minecraft/src/class-use/SettingFloat.html create mode 100644 doc/net/minecraft/src/class-use/SettingInt.html create mode 100644 doc/net/minecraft/src/class-use/SettingKey.html create mode 100644 doc/net/minecraft/src/class-use/SettingMulti.html create mode 100644 doc/net/minecraft/src/class-use/SettingText.html create mode 100644 doc/net/minecraft/src/class-use/WidgetBoolean.html create mode 100644 doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html create mode 100644 doc/net/minecraft/src/class-use/WidgetFloat.html create mode 100644 doc/net/minecraft/src/class-use/WidgetInt.html create mode 100644 doc/net/minecraft/src/class-use/WidgetKeybinding.html create mode 100644 doc/net/minecraft/src/class-use/WidgetMulti.html create mode 100644 doc/net/minecraft/src/class-use/WidgetSetting.html create mode 100644 doc/net/minecraft/src/class-use/WidgetSimplewindow.html create mode 100644 doc/net/minecraft/src/class-use/WidgetSingleRow.html create mode 100644 doc/net/minecraft/src/class-use/WidgetSinglecolumn.html create mode 100644 doc/net/minecraft/src/class-use/WidgetSlider.html create mode 100644 doc/net/minecraft/src/class-use/WidgetText.html create mode 100644 doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html create mode 100644 doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html create mode 100644 doc/net/minecraft/src/mod_GuiApiBasicExample.html create mode 100644 doc/net/minecraft/src/mod_GuiApiIntermediateExample.html create mode 100644 doc/net/minecraft/src/package-frame.html create mode 100644 doc/net/minecraft/src/package-summary.html create mode 100644 doc/net/minecraft/src/package-tree.html create mode 100644 doc/net/minecraft/src/package-use.html create mode 100644 doc/overview-tree.html create mode 100644 doc/package-list create mode 100644 doc/resources/inherit.gif create mode 100644 doc/stylesheet.css create mode 100644 javadoc.xml create mode 100644 mcp/GuiApiHelper.java create mode 100644 mcp/GuiModScreen.java create mode 100644 mcp/GuiModSelect.java create mode 100644 mcp/GuiOptions.java create mode 100644 mcp/GuiWidgetScreen.java create mode 100644 mcp/ModAction.java create mode 100644 mcp/ModSettingScreen.java create mode 100644 mcp/ModSettings.java create mode 100644 mcp/Setting.java create mode 100644 mcp/SettingBoolean.java create mode 100644 mcp/SettingFloat.java create mode 100644 mcp/SettingInt.java create mode 100644 mcp/SettingKey.java create mode 100644 mcp/SettingMulti.java create mode 100644 mcp/SettingText.java create mode 100644 mcp/WidgetBoolean.java create mode 100644 mcp/WidgetClassicTwocolumn.java create mode 100644 mcp/WidgetFloat.java create mode 100644 mcp/WidgetInt.java create mode 100644 mcp/WidgetKeybinding.java create mode 100644 mcp/WidgetMulti.java create mode 100644 mcp/WidgetSetting.java create mode 100644 mcp/WidgetSimplewindow.java create mode 100644 mcp/WidgetSingleRow.java create mode 100644 mcp/WidgetSinglecolumn.java create mode 100644 mcp/WidgetSlider.java create mode 100644 mcp/WidgetText.java create mode 100644 mcp/mod_GuiApiBasicExample.java create mode 100644 mcp/mod_GuiApiIntermediateExample.java diff --git a/doc/allclasses-frame.html b/doc/allclasses-frame.html new file mode 100644 index 0000000..797bfb6 --- /dev/null +++ b/doc/allclasses-frame.html @@ -0,0 +1,87 @@ + + + + + + +All Classes + + + + + + + + + + + +All Classes +
+ + + + + +
GuiApiHelper +
+GuiModScreen +
+GuiModSelect +
+GuiOptions +
+GuiWidgetScreen +
+mod_GuiApiBasicExample +
+mod_GuiApiIntermediateExample +
+ModAction +
+ModSettings +
+ModSettingScreen +
+Setting +
+SettingBoolean +
+SettingFloat +
+SettingInt +
+SettingKey +
+SettingMulti +
+SettingText +
+WidgetBoolean +
+WidgetClassicTwocolumn +
+WidgetFloat +
+WidgetInt +
+WidgetKeybinding +
+WidgetMulti +
+WidgetSetting +
+WidgetSimplewindow +
+WidgetSinglecolumn +
+WidgetSingleRow +
+WidgetSlider +
+WidgetText +
+
+ + + diff --git a/doc/allclasses-noframe.html b/doc/allclasses-noframe.html new file mode 100644 index 0000000..cc90ab7 --- /dev/null +++ b/doc/allclasses-noframe.html @@ -0,0 +1,87 @@ + + + + + + +All Classes + + + + + + + + + + + +All Classes +
+ + + + + +
GuiApiHelper +
+GuiModScreen +
+GuiModSelect +
+GuiOptions +
+GuiWidgetScreen +
+mod_GuiApiBasicExample +
+mod_GuiApiIntermediateExample +
+ModAction +
+ModSettings +
+ModSettingScreen +
+Setting +
+SettingBoolean +
+SettingFloat +
+SettingInt +
+SettingKey +
+SettingMulti +
+SettingText +
+WidgetBoolean +
+WidgetClassicTwocolumn +
+WidgetFloat +
+WidgetInt +
+WidgetKeybinding +
+WidgetMulti +
+WidgetSetting +
+WidgetSimplewindow +
+WidgetSinglecolumn +
+WidgetSingleRow +
+WidgetSlider +
+WidgetText +
+
+ + + diff --git a/doc/constant-values.html b/doc/constant-values.html new file mode 100644 index 0000000..e42c779 --- /dev/null +++ b/doc/constant-values.html @@ -0,0 +1,172 @@ + + + + + + +Constant Field Values + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Constant Field Values

+
+
+Contents + + + + + + +
+net.minecraft.*
+ +

+ + + + + + + + + + + + +
net.minecraft.src.ModSettings
+public static final booleandebugfalse
+ +

+ +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html new file mode 100644 index 0000000..b490fb0 --- /dev/null +++ b/doc/deprecated-list.html @@ -0,0 +1,144 @@ + + + + + + +Deprecated List + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Deprecated API

+
+
+Contents
    +
+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/help-doc.html b/doc/help-doc.html new file mode 100644 index 0000000..16183f5 --- /dev/null +++ b/doc/help-doc.html @@ -0,0 +1,215 @@ + + + + + + +API Help + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+How This API Document Is Organized

+
+This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

+Package

+
+ +

+Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

    +
  • Interfaces (italic)
  • Classes
  • Enums
  • Exceptions
  • Errors
  • Annotation Types
+
+

+Class/Interface

+
+ +

+Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

    +
  • Class inheritance diagram
  • Direct Subclasses
  • All Known Subinterfaces
  • All Known Implementing Classes
  • Class/interface declaration
  • Class/interface description +

    +

  • Nested Class Summary
  • Field Summary
  • Constructor Summary
  • Method Summary +

    +

  • Field Detail
  • Constructor Detail
  • Method Detail
+Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
+ +

+Annotation Type

+
+ +

+Each annotation type has its own separate page with the following sections:

    +
  • Annotation Type declaration
  • Annotation Type description
  • Required Element Summary
  • Optional Element Summary
  • Element Detail
+
+ +

+Enum

+
+ +

+Each enum has its own separate page with the following sections:

    +
  • Enum declaration
  • Enum description
  • Enum Constant Summary
  • Enum Constant Detail
+
+

+Use

+
+Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
+

+Tree (Class Hierarchy)

+
+There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
    +
  • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
  • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
+
+

+Deprecated API

+
+The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
+

+Index

+
+The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
+

+Prev/Next

+These links take you to the next or previous class, interface, package, or related page.

+Frames/No Frames

+These links show and hide the HTML frames. All pages are available with or without frames. +

+

+Serialized Form

+Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. +

+

+Constant Field Values

+The Constant Field Values page lists the static final fields and their values. +

+ + +This help file applies to API documentation generated using the standard doclet. + +
+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/index-files/index-1.html b/doc/index-files/index-1.html new file mode 100644 index 0000000..b861e35 --- /dev/null +++ b/doc/index-files/index-1.html @@ -0,0 +1,251 @@ + + + + + + +A-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+A

+
+
actionPerformed(GuiButton) - +Method in class net.minecraft.src.GuiOptions +
  +
add(Widget) - +Method in class net.minecraft.src.WidgetSetting +
  +
add(Widget) - +Method in class net.minecraft.src.WidgetSingleRow +
  +
add(Widget, int, int) - +Method in class net.minecraft.src.WidgetSingleRow +
This adds a new Widget with specified width and height. +
addButton(String, ModAction, Boolean) - +Method in class net.minecraft.src.GuiApiHelper +
This method adds a button to the choice menu. +
addButton(String, String, Object, Boolean) - +Method in class net.minecraft.src.GuiApiHelper +
This method adds a button to the choice menu. +
addButton(String, String, Object, Class[], Boolean, Object...) - +Method in class net.minecraft.src.GuiApiHelper +
This method adds a button to the choice menu. +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetBoolean +
  +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetFloat +
  +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetInt +
  +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetKeybinding +
  +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetMulti +
  +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetSetting +
This adds a callback to the displayed widget (Button, Slider, etc) +
addCallback(Runnable) - +Method in class net.minecraft.src.WidgetText +
  +
addSetting(ModSettingScreen, String, String, boolean) - +Method in class net.minecraft.src.ModSettings +
convenience boolean setting adder +
addSetting(ModSettingScreen, String, String, boolean, String, String) - +Method in class net.minecraft.src.ModSettings +
convenience boolean setting adder +
addSetting(ModSettingScreen, String, String, float) - +Method in class net.minecraft.src.ModSettings +
convenience float setting adder +
addSetting(ModSettingScreen, String, String, float, float, float, float) - +Method in class net.minecraft.src.ModSettings +
convenience float setting adder +
addSetting(ModSettingScreen, String, String, int) - +Method in class net.minecraft.src.ModSettings +
convenience key setting adder +
addSetting(ModSettingScreen, String, String, int, int, int) - +Method in class net.minecraft.src.ModSettings +
convenience int setting adder +
addSetting(ModSettingScreen, String, String, int, int, int, int) - +Method in class net.minecraft.src.ModSettings +
convenience int setting adder +
addSetting(ModSettingScreen, String, String, int, String...) - +Method in class net.minecraft.src.ModSettings +
convenience multi setting adder +
addSetting(ModSettingScreen, String, String, String) - +Method in class net.minecraft.src.ModSettings +
convenience text setting adder +
addSetting(Widget, String, String, boolean) - +Method in class net.minecraft.src.ModSettings +
convenience boolean setting adder +
addSetting(Widget, String, String, boolean, String, String) - +Method in class net.minecraft.src.ModSettings +
convenience boolean setting adder +
addSetting(Widget, String, String, float) - +Method in class net.minecraft.src.ModSettings +
convenience float setting adder +
addSetting(Widget, String, String, float, float, float, float) - +Method in class net.minecraft.src.ModSettings +
convenience float setting adder +
addSetting(Widget, String, String, int) - +Method in class net.minecraft.src.ModSettings +
convenience key setting adder +
addSetting(Widget, String, String, int, int, int) - +Method in class net.minecraft.src.ModSettings +
convenience int setting adder +
addSetting(Widget, String, String, int, int, int, int) - +Method in class net.minecraft.src.ModSettings +
convenience int setting adder +
addSetting(Widget, String, String, int, String...) - +Method in class net.minecraft.src.ModSettings +
convenience multi setting adder +
addSetting(Widget, String, String, String) - +Method in class net.minecraft.src.ModSettings +
convenience text setting adder +
all - +Static variable in class net.minecraft.src.ModSettings +
A list of all ModSettings instances. +
all - +Static variable in class net.minecraft.src.WidgetSetting +
This is a list of all WidgetSetting instances. +
append(Setting) - +Method in class net.minecraft.src.ModSettings +
add a setting to be saved. +
append(Widget) - +Method in class net.minecraft.src.ModSettingScreen +
Add a widget +
argsMatch(Class[], Object[]) - +Method in class net.minecraft.src.ModAction +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-10.html b/doc/index-files/index-10.html new file mode 100644 index 0000000..1c29ab9 --- /dev/null +++ b/doc/index-files/index-10.html @@ -0,0 +1,143 @@ + + + + + + +K-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+K

+
+
keyboardFocusLost() - +Method in class net.minecraft.src.WidgetKeybinding +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-11.html b/doc/index-files/index-11.html new file mode 100644 index 0000000..5ab4234 --- /dev/null +++ b/doc/index-files/index-11.html @@ -0,0 +1,173 @@ + + + + + + +L-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+L

+
+
labelValues - +Variable in class net.minecraft.src.SettingMulti +
A string array of labels for the button. +
layout() - +Method in class net.minecraft.src.GuiWidgetScreen +
  +
layout() - +Method in class net.minecraft.src.WidgetClassicTwocolumn +
  +
layout() - +Method in class net.minecraft.src.WidgetSetting +
  +
layout() - +Method in class net.minecraft.src.WidgetSimplewindow +
  +
layout() - +Method in class net.minecraft.src.WidgetSinglecolumn +
  +
layout() - +Method in class net.minecraft.src.WidgetSingleRow +
  +
layout() - +Method in class net.minecraft.src.WidgetText +
  +
load() - +Method in class net.minecraft.src.ModSettings +
Loads the settings for the default context. +
load(String) - +Method in class net.minecraft.src.ModSettings +
must be called after all settings are added for loading/saving to work. +
loadAll(String) - +Static method in class net.minecraft.src.ModSettings +
Loads all saved settings for a specific context. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-12.html b/doc/index-files/index-12.html new file mode 100644 index 0000000..6256c80 --- /dev/null +++ b/doc/index-files/index-12.html @@ -0,0 +1,239 @@ + + + + + + +M-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+M

+
+
mainwidget - +Variable in class net.minecraft.src.GuiModScreen +
Actual main widget of this GuiModScreen +
mainWidget - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is a reference to the main widget in the center. +
makeButton(String, ModAction, Boolean) - +Static method in class net.minecraft.src.GuiApiHelper +
This method creates a button widget for you. +
makeButton(String, String, Object, Boolean) - +Static method in class net.minecraft.src.GuiApiHelper +
This method creates a button widget for you. +
makeButton(String, String, Object, Boolean, Class[], Object...) - +Static method in class net.minecraft.src.GuiApiHelper +
This method creates a button widget for you. +
makeTextArea(String, Boolean) - +Static method in class net.minecraft.src.GuiApiHelper +
This is a small helper to create TextAreas, which is basically a label + that wraps text. +
makeTextDisplayAndGoBack(String, String, String, Boolean) - +Static method in class net.minecraft.src.GuiApiHelper +
This method is designed to provide an easy way to make popups or + information notices. +
maximumValue - +Variable in class net.minecraft.src.SettingFloat +
The maximum value. +
maximumValue - +Variable in class net.minecraft.src.SettingInt +
The maximum value. +
mergeAction(ModAction) - +Method in class net.minecraft.src.ModAction +
This method merges ModActions together into one. +
mergedActions - +Variable in class net.minecraft.src.ModAction +
  +
methodName - +Variable in class net.minecraft.src.ModAction +
  +
methodParams - +Variable in class net.minecraft.src.ModAction +
  +
minecraftInstance - +Variable in class net.minecraft.src.GuiWidgetScreen +
This is a reference to Minecraft. +
minimumValue - +Variable in class net.minecraft.src.SettingFloat +
The minimum value. +
minimumValue - +Variable in class net.minecraft.src.SettingInt +
The minimum value. +
mod_GuiApiBasicExample - Class in net.minecraft.src
This is the BASIC example of GuiAPI usage.
mod_GuiApiBasicExample() - +Constructor for class net.minecraft.src.mod_GuiApiBasicExample +
  +
mod_GuiApiIntermediateExample - Class in net.minecraft.src
This is the INTERMEDIATE example of GuiAPI usage.
mod_GuiApiIntermediateExample() - +Constructor for class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
ModAction - Class in net.minecraft.src
This class is a helper designed to make it easier to use callbacks.
ModAction(Object, String, Class...) - +Constructor for class net.minecraft.src.ModAction +
This is the most common ModAction constructor. +
ModAction(Object, String, Object, Class...) - +Constructor for class net.minecraft.src.ModAction +
This is an overload to allow the dataRef object. +
ModAction(Object, String, String, Class...) - +Constructor for class net.minecraft.src.ModAction +
This is an overload to allow the nameRef string. +
ModAction(Object, String, String, Object, Class...) - +Constructor for class net.minecraft.src.ModAction +
This is an overload to allow the nameRef string and dataRef object. +
ModAction(String) - +Constructor for class net.minecraft.src.ModAction +
This is a constructor that is only supposed to be used internally. +
modScreens - +Static variable in class net.minecraft.src.ModSettingScreen +
The list of currently registered ModScreens. +
ModSettings - Class in net.minecraft.src
Main interface class for Settings API
ModSettings(String) - +Constructor for class net.minecraft.src.ModSettings +
  +
ModSettingScreen - Class in net.minecraft.src
This is the class that GuiModSelect uses to show Subscreens.
ModSettingScreen(String) - +Constructor for class net.minecraft.src.ModSettingScreen +
convenience constructor for when you want to show the same name on the + button and screen title +
ModSettingScreen(String, String) - +Constructor for class net.minecraft.src.ModSettingScreen +
The main Constructor for ModSettingScreen. +
ModSettingScreen(Widget, String) - +Constructor for class net.minecraft.src.ModSettingScreen +
An alternate Constructor for ModSettingScreen. +
myModScreen - +Variable in class net.minecraft.src.mod_GuiApiBasicExample +
  +
myModScreen - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
mySettings - +Variable in class net.minecraft.src.mod_GuiApiBasicExample +
  +
mySettings - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-13.html b/doc/index-files/index-13.html new file mode 100644 index 0000000..982adb1 --- /dev/null +++ b/doc/index-files/index-13.html @@ -0,0 +1,159 @@ + + + + + + +N-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+N

+
+
nameRef - +Variable in class net.minecraft.src.ModAction +
The 'nameRef' field is also something you can use to track your + ModActions. +
net.minecraft.src - package net.minecraft.src
 
NEVERMINDKEY - +Variable in class net.minecraft.src.WidgetKeybinding +
The constant for exiting and keeping the existing key. +
next() - +Method in class net.minecraft.src.SettingMulti +
Shifts the value forward for the current context. +
next(String) - +Method in class net.minecraft.src.SettingMulti +
Shifts the value forward for the specified context. +
niceName - +Variable in class net.minecraft.src.ModSettingScreen +
name to show at top of screen +
niceName - +Variable in class net.minecraft.src.WidgetSetting +
The name that will be shown on the widget. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-14.html b/doc/index-files/index-14.html new file mode 100644 index 0000000..a77e2ff --- /dev/null +++ b/doc/index-files/index-14.html @@ -0,0 +1,146 @@ + + + + + + +O-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+O

+
+
objectRef - +Variable in class net.minecraft.src.ModAction +
  +
overrideHeight - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This says whether it should override the height for all widgets. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-15.html b/doc/index-files/index-15.html new file mode 100644 index 0000000..0fb4431 --- /dev/null +++ b/doc/index-files/index-15.html @@ -0,0 +1,152 @@ + + + + + + +P-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+P

+
+
parent - +Variable in class net.minecraft.src.Setting +
Reference to the ModSettings this Setting is a child of. +
parentScreen - +Variable in class net.minecraft.src.GuiModScreen +
Reference to parent screen, is used to go back() +
presetMcint(Minecraft) - +Static method in class net.minecraft.src.ModSettings +
Set the Minecraft instance that getMcinst returns. +
propertyChange(PropertyChangeEvent) - +Method in class net.minecraft.src.ModAction +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-16.html b/doc/index-files/index-16.html new file mode 100644 index 0000000..b6354fa --- /dev/null +++ b/doc/index-files/index-16.html @@ -0,0 +1,212 @@ + + + + + + +R-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+R

+
+
remove(Setting) - +Method in class net.minecraft.src.ModSettings +
removes a setting using ArrayList.remove +
remove(Widget) - +Method in class net.minecraft.src.ModSettingScreen +
Remove a widget +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetBoolean +
  +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetFloat +
  +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetInt +
  +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetKeybinding +
  +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetMulti +
  +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetSetting +
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +
removeCallback(Runnable) - +Method in class net.minecraft.src.WidgetText +
  +
removeChild(int) - +Method in class net.minecraft.src.WidgetSingleRow +
  +
removeChild(Widget) - +Method in class net.minecraft.src.WidgetSingleRow +
  +
renderer - +Variable in class net.minecraft.src.GuiWidgetScreen +
This is the rendered used by TWL. +
reset() - +Method in class net.minecraft.src.Setting +
Resets this setting for the current context, saving the default and + updating the display. +
reset(String) - +Method in class net.minecraft.src.Setting +
Resets this setting for the specified context, saving the default and + updating the display. +
resetAll() - +Method in class net.minecraft.src.ModSettings +
Resets all settings for the current context. +
resetAll(String) - +Method in class net.minecraft.src.ModSettings +
Resets all settings for the specified context. +
resetScreen() - +Method in class net.minecraft.src.GuiWidgetScreen +
Removes all children and clears the current widget. +
run() - +Method in class net.minecraft.src.ModAction +
  +
run() - +Method in class net.minecraft.src.WidgetBoolean +
  +
run() - +Method in class net.minecraft.src.WidgetFloat +
  +
run() - +Method in class net.minecraft.src.WidgetInt +
  +
run() - +Method in class net.minecraft.src.WidgetKeybinding +
  +
run() - +Method in class net.minecraft.src.WidgetMulti +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-17.html b/doc/index-files/index-17.html new file mode 100644 index 0000000..3ca15fd --- /dev/null +++ b/doc/index-files/index-17.html @@ -0,0 +1,327 @@ + + + + + + +S-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+S

+
+
save(String) - +Method in class net.minecraft.src.ModSettings +
called every time a setting is changed saves settings file to + .minecraft/mods/$backendname/guiconfig.properties coming soon: set name + of config file +
screenheight - +Static variable in class net.minecraft.src.GuiWidgetScreen +
The height of the screen that the widget will render on. +
screenSize - +Variable in class net.minecraft.src.GuiWidgetScreen +
This is the ScaledResolution class that is used to scale all of the + widgets. +
screenTitle - +Variable in class net.minecraft.src.GuiOptions +
  +
screenwidth - +Static variable in class net.minecraft.src.GuiWidgetScreen +
The width of the screen that the widget will render on. +
set(T) - +Method in class net.minecraft.src.Setting +
Sets the value for this setting to the current context. +
set(T, String) - +Method in class net.minecraft.src.Setting +
Sets the value for this setting to the specified context. +
set(Boolean, String) - +Method in class net.minecraft.src.SettingBoolean +
  +
set(Float, String) - +Method in class net.minecraft.src.SettingFloat +
  +
set(Integer, String) - +Method in class net.minecraft.src.SettingInt +
  +
set(Integer, String) - +Method in class net.minecraft.src.SettingKey +
  +
set(String) - +Method in class net.minecraft.src.SettingKey +
Sets the value for this setting to the current context. +
set(String, String) - +Method in class net.minecraft.src.SettingKey +
Sets the value for this setting to the specified context. +
set(Integer, String) - +Method in class net.minecraft.src.SettingMulti +
  +
set(String) - +Method in class net.minecraft.src.SettingMulti +
Sets the value for this setting to the current context. +
set(String, String) - +Method in class net.minecraft.src.SettingMulti +
Sets the value for this setting to the specified context. +
set(String, String) - +Method in class net.minecraft.src.SettingText +
  +
setContext(String, String) - +Static method in class net.minecraft.src.ModSettings +
Sets the context for mods. +
setDefaultArguments(Object...) - +Method in class net.minecraft.src.ModAction +
This sets the arguments to use if no or invalid arguments are provided. +
setmode - +Variable in class net.minecraft.src.WidgetText +
This is a control number to who and what can edit this setting. +
setScreen(Widget) - +Method in class net.minecraft.src.GuiWidgetScreen +
to be called only from GuiModScreen, sets the widget to display. +
setSingleColumn(Boolean) - +Method in class net.minecraft.src.ModSettingScreen +
Changes the widgetColumn to or from WidgetClassicTwocolumn or + WidgetSinglecolumn. +
setTextAreaText(TextArea, String) - +Static method in class net.minecraft.src.GuiApiHelper +
This is a small helper method to set the text of a TextArea. +
Setting<T> - Class in net.minecraft.src
This is the base class for Settings.
Setting() - +Constructor for class net.minecraft.src.Setting +
This is the basic constructor for Setting. +
SettingBoolean - Class in net.minecraft.src
This is the Setting type for Booleans.
SettingBoolean(String) - +Constructor for class net.minecraft.src.SettingBoolean +
This is the constructor for SettingBoolean. +
SettingBoolean(String, Boolean) - +Constructor for class net.minecraft.src.SettingBoolean +
This is the constructor for SettingBoolean. +
SettingFloat - Class in net.minecraft.src
This is the Setting type for Floats.
SettingFloat(String) - +Constructor for class net.minecraft.src.SettingFloat +
A constructor for SettingFloat. +
SettingFloat(String, float) - +Constructor for class net.minecraft.src.SettingFloat +
A constructor for SettingFloat. +
SettingFloat(String, float, float, float) - +Constructor for class net.minecraft.src.SettingFloat +
A constructor for SettingFloat. +
SettingFloat(String, float, float, float, float) - +Constructor for class net.minecraft.src.SettingFloat +
A constructor for SettingFloat. +
SettingInt - Class in net.minecraft.src
This is the Setting type for Ints.
SettingInt(String) - +Constructor for class net.minecraft.src.SettingInt +
A constructor for SettingInt. +
SettingInt(String, int) - +Constructor for class net.minecraft.src.SettingInt +
A constructor for SettingInt. +
SettingInt(String, int, int, int) - +Constructor for class net.minecraft.src.SettingInt +
A constructor for SettingInt. +
SettingInt(String, int, int, int, int) - +Constructor for class net.minecraft.src.SettingInt +
A constructor for SettingInt. +
SettingKey - Class in net.minecraft.src
This is the Setting type for Keys.
SettingKey(String, int) - +Constructor for class net.minecraft.src.SettingKey +
Constructor for SettingKey. +
SettingKey(String, String) - +Constructor for class net.minecraft.src.SettingKey +
Constructor for SettingKey. +
SettingMulti - Class in net.minecraft.src
This is the Setting type for Multis.
SettingMulti(String, int, String...) - +Constructor for class net.minecraft.src.SettingMulti +
A constructor for SettingMulti. +
SettingMulti(String, String...) - +Constructor for class net.minecraft.src.SettingMulti +
A constructor for SettingMulti. +
settingReference - +Variable in class net.minecraft.src.WidgetBoolean +
The reference to the SettingBoolean that this WidgetBoolean uses. +
settingReference - +Variable in class net.minecraft.src.WidgetFloat +
The reference to the SettingInt that this WidgetInt uses. +
settingReference - +Variable in class net.minecraft.src.WidgetInt +
The reference to the SettingInt that this WidgetInt uses. +
settingReference - +Variable in class net.minecraft.src.WidgetKeybinding +
The reference to the SettingKey that this WidgetKeybinding uses. +
settingReference - +Variable in class net.minecraft.src.WidgetText +
The reference to the SettingText that this WidgetText uses. +
Settings - +Variable in class net.minecraft.src.ModSettings +
all registered settings for this mod +
settingsLoaded - +Variable in class net.minecraft.src.ModSettings +
Whether or not Settings have been loaded for this mod. +
SettingText - Class in net.minecraft.src
This is the Setting type for Text.
SettingText(String, String) - +Constructor for class net.minecraft.src.SettingText +
A constructor for SettingText. +
setupHandler(Object, String) - +Method in class net.minecraft.src.ModAction +
  +
setValue(String) - +Method in class net.minecraft.src.WidgetText +
  +
show(GuiModScreen) - +Static method in class net.minecraft.src.GuiModScreen +
Show a screen - GuiModScreen version. +
show(Widget) - +Static method in class net.minecraft.src.GuiModScreen +
Show a screen - TWL widget version. +
ShowAllTheSettings() - +Method in class net.minecraft.src.mod_GuiApiBasicExample +
  +
size() - +Method in class net.minecraft.src.ModSettings +
  +
slider - +Variable in class net.minecraft.src.WidgetFloat +
The reference to the underlying WidgetSlider. +
slider - +Variable in class net.minecraft.src.WidgetInt +
The reference to the underlying WidgetSlider. +
splitDistance - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This is the amount of room between the two columns. +
startEdit() - +Method in class net.minecraft.src.WidgetSlider +
  +
stepValue - +Variable in class net.minecraft.src.SettingFloat +
The step value. +
stepValue - +Variable in class net.minecraft.src.SettingInt +
The step value. +
subscreenBooleans - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
subscreenNumberics - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
subscreenOthers - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-18.html b/doc/index-files/index-18.html new file mode 100644 index 0000000..d8bdf7c --- /dev/null +++ b/doc/index-files/index-18.html @@ -0,0 +1,176 @@ + + + + + + +T-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+T

+
+
theme - +Variable in class net.minecraft.src.GuiWidgetScreen +
This the the ThemeManager for GuiAPI. +
theWidget - +Variable in class net.minecraft.src.ModSettingScreen +
the main widget to pass into GuiModScreen.show() +
titleWidget - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is a reference to the Label that acts as the title on top. +
toggleButton - +Variable in class net.minecraft.src.WidgetKeybinding +
The reference to the underlying ToggleButton. +
toString(String) - +Method in class net.minecraft.src.Setting +
return string to save, called from ModSettings.save() +
toString(String) - +Method in class net.minecraft.src.SettingBoolean +
  +
toString(String) - +Method in class net.minecraft.src.SettingFloat +
  +
toString(String) - +Method in class net.minecraft.src.SettingInt +
  +
toString(String) - +Method in class net.minecraft.src.SettingKey +
  +
toString(String) - +Method in class net.minecraft.src.SettingMulti +
  +
toString(String) - +Method in class net.minecraft.src.SettingText +
  +
trueText - +Variable in class net.minecraft.src.WidgetBoolean +
The text to display on the button when the setting is true. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-19.html b/doc/index-files/index-19.html new file mode 100644 index 0000000..8d3415f --- /dev/null +++ b/doc/index-files/index-19.html @@ -0,0 +1,186 @@ + + + + + + +U-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+U

+
+
update() - +Method in class net.minecraft.src.WidgetBoolean +
  +
update() - +Method in class net.minecraft.src.WidgetFloat +
  +
update() - +Method in class net.minecraft.src.WidgetInt +
  +
update() - +Method in class net.minecraft.src.WidgetKeybinding +
  +
update() - +Method in class net.minecraft.src.WidgetMulti +
  +
update() - +Method in class net.minecraft.src.WidgetSetting +
This method updates the widget with the backing setting store. +
update() - +Method in class net.minecraft.src.WidgetText +
  +
updateAll() - +Static method in class net.minecraft.src.WidgetSetting +
This updates all Widgets with the backing setting's current values. +
userString() - +Method in class net.minecraft.src.WidgetBoolean +
  +
userString() - +Method in class net.minecraft.src.WidgetFloat +
  +
userString() - +Method in class net.minecraft.src.WidgetInt +
  +
userString() - +Method in class net.minecraft.src.WidgetKeybinding +
  +
userString() - +Method in class net.minecraft.src.WidgetMulti +
  +
userString() - +Method in class net.minecraft.src.WidgetSetting +
This returns a clean string that shows the Nice Name and the current + value. +
userString() - +Method in class net.minecraft.src.WidgetText +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-2.html b/doc/index-files/index-2.html new file mode 100644 index 0000000..c393868 --- /dev/null +++ b/doc/index-files/index-2.html @@ -0,0 +1,174 @@ + + + + + + +B-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+B

+
+
back() - +Static method in class net.minecraft.src.GuiModScreen +
Hide current screen and show parent screen. +
backButton - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is a reference to the back button, if created. +
backendname - +Variable in class net.minecraft.src.ModSettings +
Mod name as used in .minecraft/mods/${modbackendname}/ +
backendName - +Variable in class net.minecraft.src.Setting +
The name used by ModSettings to save and load the setting. +
backgroundType - +Variable in class net.minecraft.src.GuiModScreen +
The type of background to draw. +
backModAction - +Static variable in class net.minecraft.src.GuiApiHelper +
This is a static ModAction to go back to the previous menu. +
booleanModel - +Variable in class net.minecraft.src.WidgetKeybinding +
The reference to the underlying SimpleBooleanModel. +
button - +Variable in class net.minecraft.src.WidgetBoolean +
The reference to the underlying Button. +
button - +Variable in class net.minecraft.src.WidgetMulti +
The reference to the underlying Button. +
buttonBar - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is a reference to the row at the bottom that contains the back + button. +
buttonTitle - +Variable in class net.minecraft.src.ModSettingScreen +
title to show on button to this modscreen +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-20.html b/doc/index-files/index-20.html new file mode 100644 index 0000000..b12704b --- /dev/null +++ b/doc/index-files/index-20.html @@ -0,0 +1,161 @@ + + + + + + +V-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+V

+
+
value - +Variable in class net.minecraft.src.WidgetMulti +
The reference to the SettingMulti that this WidgetMulti uses. +
values - +Variable in class net.minecraft.src.Setting +
value. +
vBottomPadding - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is the padding on the bottom. +
Version() - +Method in class net.minecraft.src.mod_GuiApiBasicExample +
  +
Version() - +Method in class net.minecraft.src.mod_GuiApiIntermediateExample +
  +
verticalPadding - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This is the amount of padding to have before any widgets are positioned. +
vTopPadding - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is the padding on the top. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-21.html b/doc/index-files/index-21.html new file mode 100644 index 0000000..0dade8f --- /dev/null +++ b/doc/index-files/index-21.html @@ -0,0 +1,208 @@ + + + + + + +W-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+W

+
+
WidgetBoolean - Class in net.minecraft.src
This is the Widget for boolean settings.
WidgetBoolean(SettingBoolean, String) - +Constructor for class net.minecraft.src.WidgetBoolean +
This creates a new WidgetBoolean using the SettingBoolean and String + provided. +
WidgetBoolean(SettingBoolean, String, String, String) - +Constructor for class net.minecraft.src.WidgetBoolean +
This creates a new WidgetBoolean using the WidgetBoolean and String + provided, as well as setting the true and false text. +
WidgetClassicTwocolumn - Class in net.minecraft.src
This widget is designed to arrange widgets into two columns.
WidgetClassicTwocolumn(Widget...) - +Constructor for class net.minecraft.src.WidgetClassicTwocolumn +
This creates the WidgetClassicTwocolumn and adds the requested widgets. +
widgetColumn - +Variable in class net.minecraft.src.ModSettingScreen +
the column widget to show the child widgets in +
WidgetFloat - Class in net.minecraft.src
This is the Widget for Float settings.
WidgetFloat(SettingFloat, String) - +Constructor for class net.minecraft.src.WidgetFloat +
This creates a new WidgetInt using the SettingInt and String provided. +
WidgetFloat(SettingFloat, String, int) - +Constructor for class net.minecraft.src.WidgetFloat +
This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. +
WidgetInt - Class in net.minecraft.src
This is the Widget for Integer settings.
WidgetInt(SettingInt, String) - +Constructor for class net.minecraft.src.WidgetInt +
This creates a new WidgetInt using the SettingInt and String provided. +
WidgetKeybinding - Class in net.minecraft.src
This is the Widget for Key binding settings.
WidgetKeybinding(SettingKey, String) - +Constructor for class net.minecraft.src.WidgetKeybinding +
This creates a new WidgetKeybinding using the WidgetKeybinding and String + provided. +
WidgetMulti - Class in net.minecraft.src
This is the Widget for Multi settings.
WidgetMulti(SettingMulti, String) - +Constructor for class net.minecraft.src.WidgetMulti +
This creates a new WidgetMulti using the SettingMulti and String + provided. +
widgets - +Variable in class net.minecraft.src.WidgetSingleRow +
  +
WidgetSetting - Class in net.minecraft.src
This is the base class for Widgets that are supposed to be front ends for + Settings.
WidgetSetting(String) - +Constructor for class net.minecraft.src.WidgetSetting +
This sets the Nice Name and adds itself to the list of instances. +
WidgetSimplewindow - Class in net.minecraft.src
This widget is designed to make an easy base for menus.
WidgetSimplewindow() - +Constructor for class net.minecraft.src.WidgetSimplewindow +
This is a basic constructor. +
WidgetSimplewindow(Widget) - +Constructor for class net.minecraft.src.WidgetSimplewindow +
This is a basic constructor. +
WidgetSimplewindow(Widget, String) - +Constructor for class net.minecraft.src.WidgetSimplewindow +
This is the most common constructor. +
WidgetSimplewindow(Widget, String, Boolean) - +Constructor for class net.minecraft.src.WidgetSimplewindow +
This is the more advanced constructor. +
WidgetSinglecolumn - Class in net.minecraft.src
This is a widget designed to arrange other widgets into a single column.
WidgetSinglecolumn(Widget...) - +Constructor for class net.minecraft.src.WidgetSinglecolumn +
This creates the WidgetSinglecolumn with the specified Widgets. +
WidgetSingleRow - Class in net.minecraft.src
This is a layout widget designed to arrange your widgets in a row.
WidgetSingleRow(int, int, Widget...) - +Constructor for class net.minecraft.src.WidgetSingleRow +
This creates a new WidgetSingleRow, specifying the default width and + height for any new widgets, as well as adding any widgets you would like + to add. +
WidgetSlider - Class in net.minecraft.src
This is a simple extension of ValueAdjusterFloat so that it always updates + the setting.
WidgetSlider(FloatModel) - +Constructor for class net.minecraft.src.WidgetSlider +
This is the basic constructor. +
WidgetText - Class in net.minecraft.src
This is the Widget for Text settings.
WidgetText(SettingText, String) - +Constructor for class net.minecraft.src.WidgetText +
This creates a new WidgetText using the SettingText and String provided. +
widths - +Variable in class net.minecraft.src.WidgetSingleRow +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-22.html b/doc/index-files/index-22.html new file mode 100644 index 0000000..ac8c321 --- /dev/null +++ b/doc/index-files/index-22.html @@ -0,0 +1,143 @@ + + + + + + +X-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+X

+
+
xSpacing - +Variable in class net.minecraft.src.WidgetSingleRow +
This defines the space between child widgets. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-3.html b/doc/index-files/index-3.html new file mode 100644 index 0000000..8425962 --- /dev/null +++ b/doc/index-files/index-3.html @@ -0,0 +1,193 @@ + + + + + + +C-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+C

+
+
call(Object...) - +Method in class net.minecraft.src.ModAction +
This calls this ModAction and any Merged actions with the provided + arguments. +
callInt(Object...) - +Method in class net.minecraft.src.ModAction +
  +
childDefaultHeight - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This is the default height to enforce for widgets. +
childWidth - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This dictates the width to set each of the widgets to. +
CLEARKEY - +Variable in class net.minecraft.src.WidgetKeybinding +
The constant for clearing the existing key. +
clickModAction - +Static variable in class net.minecraft.src.GuiApiHelper +
This is a static ModAction to play the 'click' sound you usually hear + when pressing a button in minecraft. +
clicksound() - +Static method in class net.minecraft.src.GuiModScreen +
Play a click sound. +
contextDatadirs - +Static variable in class net.minecraft.src.ModSettings +
A map of context names and the directories they save to. +
copyContext(String, String) - +Method in class net.minecraft.src.Setting +
Copies a setting from the source context to the destination context. +
copyContextAll(String, String) - +Method in class net.minecraft.src.ModSettings +
Copies the saved settings from one context to another. +
createChoiceMenu(String) - +Static method in class net.minecraft.src.GuiApiHelper +
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. +
createChoiceMenu(String, Boolean, Boolean, Object...) - +Static method in class net.minecraft.src.GuiApiHelper +
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. +
createChoiceMenu(String, Boolean, Boolean, String[], ModAction[]) - +Static method in class net.minecraft.src.GuiApiHelper +
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. +
currentContext - +Static variable in class net.minecraft.src.ModSettings +
The current context. +
currentScreen - +Static variable in class net.minecraft.src.GuiModScreen +
Used by static methods. +
currentWidget - +Variable in class net.minecraft.src.GuiWidgetScreen +
The widget that is currently displayed. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-4.html b/doc/index-files/index-4.html new file mode 100644 index 0000000..25ddd4e --- /dev/null +++ b/doc/index-files/index-4.html @@ -0,0 +1,181 @@ + + + + + + +D-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+D

+
+
dataRef - +Variable in class net.minecraft.src.ModAction +
The 'dataRef' field is an extra, unused field you can use as a key, or + something specific to track. +
dbgout(String) - +Static method in class net.minecraft.src.ModSettings +
Debug printer. +
debug - +Static variable in class net.minecraft.src.ModSettings +
Debug mode flag. +
decimalPlaces - +Variable in class net.minecraft.src.WidgetFloat +
The number of decimal places to display to the user. +
defaultArguments - +Variable in class net.minecraft.src.ModAction +
  +
defaultHeight - +Variable in class net.minecraft.src.WidgetSingleRow +
This is the default height of any new widgets. +
defaultPadding - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This is the amount of padding to use between widgets vertically. +
defaultValue - +Variable in class net.minecraft.src.Setting +
The default value for this setting. +
defaultWidth - +Variable in class net.minecraft.src.WidgetSingleRow +
This is the default width of any new widgets. +
displayLabel - +Variable in class net.minecraft.src.WidgetText +
The label that displays to the user what the nice name of this setting + is. +
displayWidget - +Variable in class net.minecraft.src.Setting +
A reference to the Widget that displays this setting. +
drawScreen(int, int, float) - +Method in class net.minecraft.src.GuiModScreen +
  +
drawScreen(int, int, float) - +Method in class net.minecraft.src.GuiOptions +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-5.html b/doc/index-files/index-5.html new file mode 100644 index 0000000..0ea1c12 --- /dev/null +++ b/doc/index-files/index-5.html @@ -0,0 +1,143 @@ + + + + + + +E-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+E

+
+
editField - +Variable in class net.minecraft.src.WidgetText +
The EditField that the user actually changes the setting with. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-6.html b/doc/index-files/index-6.html new file mode 100644 index 0000000..7808704 --- /dev/null +++ b/doc/index-files/index-6.html @@ -0,0 +1,164 @@ + + + + + + +F-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+F

+
+
falseText - +Variable in class net.minecraft.src.WidgetBoolean +
The text to display on the button when the setting is false. +
fromString(String, String) - +Method in class net.minecraft.src.Setting +
load back a string from toString() +
fromString(String, String) - +Method in class net.minecraft.src.SettingBoolean +
  +
fromString(String, String) - +Method in class net.minecraft.src.SettingFloat +
  +
fromString(String, String) - +Method in class net.minecraft.src.SettingInt +
  +
fromString(String, String) - +Method in class net.minecraft.src.SettingKey +
  +
fromString(String, String) - +Method in class net.minecraft.src.SettingMulti +
  +
fromString(String, String) - +Method in class net.minecraft.src.SettingText +
  +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-7.html b/doc/index-files/index-7.html new file mode 100644 index 0000000..3fcdba1 --- /dev/null +++ b/doc/index-files/index-7.html @@ -0,0 +1,308 @@ + + + + + + +G-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+G

+
+
genWidget(Boolean) - +Method in class net.minecraft.src.GuiApiHelper +
This creates the Choice Menu from the Display Text entered earlier and + the buttons you have added. +
get() - +Method in class net.minecraft.src.Setting +
Returns the setting for the current context. +
get(String) - +Method in class net.minecraft.src.Setting +
Returns the setting for the specified context. +
get(String) - +Method in class net.minecraft.src.SettingBoolean +
  +
get(String) - +Method in class net.minecraft.src.SettingFloat +
  +
get(String) - +Method in class net.minecraft.src.SettingInt +
  +
get(String) - +Method in class net.minecraft.src.SettingKey +
  +
get(String) - +Method in class net.minecraft.src.SettingMulti +
  +
get(String) - +Method in class net.minecraft.src.SettingText +
  +
getAllBooleanSettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Boolean settings for the current context. +
getAllBooleanSettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Boolean settings for the specified context. +
getAllFloatSettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Float settings for the current context. +
getAllFloatSettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Float settings for the specified context. +
getAllIntSettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Int settings for the current context. +
getAllIntSettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Int settings for the specified context. +
getAllKeySettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Key settings for the current context. +
getAllKeySettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Key settings for the specified context. +
getAllMultiSettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Multi settings for the current context. +
getAllMultiSettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Multi settings for the specified context. +
getAllTextSettings() - +Method in class net.minecraft.src.ModSettings +
Get a list of all Text settings for the current context. +
getAllTextSettings(String) - +Method in class net.minecraft.src.ModSettings +
Get a list of all Text settings for the specified context. +
getAppDir(String) - +Static method in class net.minecraft.src.ModSettings +
Returns, and creates if needed, an application directory. +
getBooleanSetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getBooleanSetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getFloatSetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getFloatSetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getInstance() - +Static method in class net.minecraft.src.GuiWidgetScreen +
get the instance of GuiWidget, creating it if needed +
getIntSetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getIntSetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getKeySetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getKeySetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getLabel() - +Method in class net.minecraft.src.SettingMulti +
Helper to get the text label for the current context and value. +
getLabel(String) - +Method in class net.minecraft.src.SettingMulti +
Helper to get the text label for the specified context and value. +
getMcinst() - +Static method in class net.minecraft.src.ModSettings +
This finds and returns a Minecraft instance. +
GetMethodRecursively(Object, String) - +Method in class net.minecraft.src.ModAction +
  +
getMultiSetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getMultiSetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getMultiSettingLabel(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getMultiSettingLabel(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getPreferredHeight() - +Method in class net.minecraft.src.WidgetClassicTwocolumn +
  +
getPreferredHeight() - +Method in class net.minecraft.src.WidgetSinglecolumn +
  +
getPreferredHeight() - +Method in class net.minecraft.src.WidgetSingleRow +
  +
getPreferredWidth() - +Method in class net.minecraft.src.WidgetClassicTwocolumn +
  +
getPreferredWidth() - +Method in class net.minecraft.src.WidgetSinglecolumn +
  +
getPreferredWidth() - +Method in class net.minecraft.src.WidgetSingleRow +
  +
getTextSetting(String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the current context. +
getTextSetting(String, String) - +Method in class net.minecraft.src.ModSettings +
Gets the value of a setting by backend name from the specified context. +
getValue() - +Method in class net.minecraft.src.WidgetText +
  +
gui - +Variable in class net.minecraft.src.GuiWidgetScreen +
This is a reference to a TWL class that is used to render the widgets. +
GuiApiHelper - Class in net.minecraft.src
This is just a class for helping ease common and somewhat long operations + with GuiAPI.
guiContext - +Static variable in class net.minecraft.src.ModSettingScreen +
The current context. +
GuiModScreen - Class in net.minecraft.src
GuiModScreen is the minecraft screen subclass that controls and renders TWL.
GuiModScreen(GuiScreen) - +Constructor for class net.minecraft.src.GuiModScreen +
Only use this constructor from subclasses. +
GuiModScreen(GuiScreen, Widget) - +Constructor for class net.minecraft.src.GuiModScreen +
main constructor, to be used if you are instantiating this class. +
GuiModSelect - Class in net.minecraft.src
This is a Subclass of GuiModScreen, and acts as the entry point from the + button in the options menu.
GuiModSelect(GuiScreen) - +Constructor for class net.minecraft.src.GuiModSelect +
  +
GuiOptions - Class in net.minecraft.src
 
GuiOptions(GuiScreen, GameSettings) - +Constructor for class net.minecraft.src.GuiOptions +
  +
GuiWidgetScreen - Class in net.minecraft.src
TWL Widget that switches out child widgets.
GuiWidgetScreen() - +Constructor for class net.minecraft.src.GuiWidgetScreen +
This creates a new instance of GuiWidgetScreen. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-8.html b/doc/index-files/index-8.html new file mode 100644 index 0000000..b26b10b --- /dev/null +++ b/doc/index-files/index-8.html @@ -0,0 +1,155 @@ + + + + + + +H-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+H

+
+
handleEvent(Event) - +Method in class net.minecraft.src.WidgetKeybinding +
  +
handleInput() - +Method in class net.minecraft.src.GuiModScreen +
  +
heightOverrideExceptions - +Variable in class net.minecraft.src.WidgetClassicTwocolumn +
This is a map to override the heights of specific widgets. +
heights - +Variable in class net.minecraft.src.WidgetSingleRow +
  +
hPadding - +Variable in class net.minecraft.src.WidgetSimplewindow +
This is the padding to use on each side of the main widget. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index-files/index-9.html b/doc/index-files/index-9.html new file mode 100644 index 0000000..b446a67 --- /dev/null +++ b/doc/index-files/index-9.html @@ -0,0 +1,155 @@ + + + + + + +I-Index + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+

+I

+
+
init(Boolean, String) - +Method in class net.minecraft.src.WidgetSimplewindow +
Initializes the WidgetSimplewindow's widgets. +
initGui() - +Method in class net.minecraft.src.GuiOptions +
  +
instance - +Static variable in class net.minecraft.src.GuiWidgetScreen +
The initialized instance of GuiWidgetScreen. +
isKeyDown() - +Method in class net.minecraft.src.SettingKey +
An easy helper to see if the current key is down. +
isKeyDown(String) - +Method in class net.minecraft.src.SettingKey +
An easy helper to see if the current key is down. +
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +A B C D E F G H I K L M N O P R S T U V W X
+ + + diff --git a/doc/index.html b/doc/index.html new file mode 100644 index 0000000..291597c --- /dev/null +++ b/doc/index.html @@ -0,0 +1,36 @@ + + + + + + +Generated Documentation (Untitled) + + + + + + + + +<H2> +Frame Alert</H2> + +<P> +This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. +<BR> +Link to<A HREF="net/minecraft/src/package-summary.html">Non-frame version.</A> + + + diff --git a/doc/net/minecraft/src/GuiApiHelper.html b/doc/net/minecraft/src/GuiApiHelper.html new file mode 100644 index 0000000..8d3835b --- /dev/null +++ b/doc/net/minecraft/src/GuiApiHelper.html @@ -0,0 +1,652 @@ + + + + + + +GuiApiHelper + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class GuiApiHelper

+
+java.lang.Object
+  extended by net.minecraft.src.GuiApiHelper
+
+
+
+
public class GuiApiHelper
extends java.lang.Object
+ + +

+This is just a class for helping ease common and somewhat long operations + with GuiAPI. +

+ +

+

+
Author:
+
ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static ModActionbackModAction + +
+          This is a static ModAction to go back to the previous menu.
+static ModActionclickModAction + +
+          This is a static ModAction to play the 'click' sound you usually hear + when pressing a button in minecraft.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddButton(java.lang.String text, + ModAction action, + java.lang.Boolean mergeBack) + +
+          This method adds a button to the choice menu.
+ voidaddButton(java.lang.String text, + java.lang.String methodName, + java.lang.Object me, + java.lang.Boolean mergeBack) + +
+          This method adds a button to the choice menu.
+ voidaddButton(java.lang.String text, + java.lang.String methodName, + java.lang.Object me, + java.lang.Class[] types, + java.lang.Boolean mergeBack, + java.lang.Object... arguments) + +
+          This method adds a button to the choice menu.
+static GuiApiHelpercreateChoiceMenu(java.lang.String displayText) + +
+          This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it.
+static WidgetcreateChoiceMenu(java.lang.String displayText, + java.lang.Boolean showBackButton, + java.lang.Boolean autoBack, + java.lang.Object... args) + +
+          This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it.
+static WidgetcreateChoiceMenu(java.lang.String displayText, + java.lang.Boolean showBackButton, + java.lang.Boolean autoBack, + java.lang.String[] buttonTexts, + ModAction[] buttonActions) + +
+          This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it.
+ WidgetgenWidget(java.lang.Boolean showBackButton) + +
+          This creates the Choice Menu from the Display Text entered earlier and + the buttons you have added.
+static ButtonmakeButton(java.lang.String displayText, + ModAction action, + java.lang.Boolean addClick) + +
+          This method creates a button widget for you.
+static ButtonmakeButton(java.lang.String displayText, + java.lang.String methodName, + java.lang.Object me, + java.lang.Boolean addClick) + +
+          This method creates a button widget for you.
+static ButtonmakeButton(java.lang.String displayText, + java.lang.String methodName, + java.lang.Object me, + java.lang.Boolean addClick, + java.lang.Class[] classes, + java.lang.Object... arguments) + +
+          This method creates a button widget for you.
+static TextAreamakeTextArea(java.lang.String text, + java.lang.Boolean htmlMode) + +
+          This is a small helper to create TextAreas, which is basically a label + that wraps text.
+static WidgetmakeTextDisplayAndGoBack(java.lang.String titleText, + java.lang.String displayText, + java.lang.String buttonText, + java.lang.Boolean htmlMode) + +
+          This method is designed to provide an easy way to make popups or + information notices.
+static voidsetTextAreaText(TextArea textArea, + java.lang.String text) + +
+          This is a small helper method to set the text of a TextArea.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+backModAction

+
+public static final ModAction backModAction
+
+
This is a static ModAction to go back to the previous menu. +

+

+
+
+
+ +

+clickModAction

+
+public static final ModAction clickModAction
+
+
This is a static ModAction to play the 'click' sound you usually hear + when pressing a button in minecraft. +

+

+
+
+ + + + + + + + +
+Method Detail
+ +

+createChoiceMenu

+
+public static GuiApiHelper createChoiceMenu(java.lang.String displayText)
+
+
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. This + overload is the most advanced option, though uses more code. Call this + method, use the returned GuiApiHelper instance to add the buttons you + want, then generate the widget. +

+

+
Parameters:
displayText - The text to be displayed to the user. +
Returns:
An instance of GuiApiHelper. Use the addButton methods to add + buttons to the menu, and then when you are done use genWidget to + create the choice menu.
+
+
+
+ +

+createChoiceMenu

+
+public static Widget createChoiceMenu(java.lang.String displayText,
+                                      java.lang.Boolean showBackButton,
+                                      java.lang.Boolean autoBack,
+                                      java.lang.Object... args)
+
+
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. This + overload uses variable arguments to choose it. +

+

+
Parameters:
displayText - The text to display.
showBackButton - Whether to automatically show a 'back' button or not.
autoBack - Whether to automatically merge a 'back' ModAction with the + buttons.
args - The button information. Enter it in the form of String (Name + on the button), ModAction (The ModAction to call when the + button is pressed). +
Returns:
The generated widget. Use GuiModScreen.show to display it.
+
+
+
+ +

+createChoiceMenu

+
+public static Widget createChoiceMenu(java.lang.String displayText,
+                                      java.lang.Boolean showBackButton,
+                                      java.lang.Boolean autoBack,
+                                      java.lang.String[] buttonTexts,
+                                      ModAction[] buttonActions)
+
+
This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it. This + overload uses two tables that match up to create the buttons. +

+

+
Parameters:
displayText - The text to display.
showBackButton - Whether to automatically show a 'back' button or not.
autoBack - Whether to automatically merge a 'back' ModAction with the + buttons.
buttonTexts - The text for the buttons you want to show.
buttonActions - The corresponding ModActions for the buttons. +
Returns:
The generated widget. Use GuiModScreen.show to display it.
+
+
+
+ +

+makeButton

+
+public static Button makeButton(java.lang.String displayText,
+                                ModAction action,
+                                java.lang.Boolean addClick)
+
+
This method creates a button widget for you. +

+

+
Parameters:
displayText - The text to display on the button.
action - The ModAction to call when clicked.
addClick - Set this to true and it will automatically play the Click + sound. +
Returns:
The new Button widget.
+
+
+
+ +

+makeButton

+
+public static Button makeButton(java.lang.String displayText,
+                                java.lang.String methodName,
+                                java.lang.Object me,
+                                java.lang.Boolean addClick)
+
+
This method creates a button widget for you. +

+

+
Parameters:
displayText - The text to display on the button.
methodName - The name of the method to call when clicked.
me - The Object or Class that has the method you want to call.
addClick - Set this to true and it will automatically play the Click + sound. +
Returns:
The new Button widget.
+
+
+
+ +

+makeButton

+
+public static Button makeButton(java.lang.String displayText,
+                                java.lang.String methodName,
+                                java.lang.Object me,
+                                java.lang.Boolean addClick,
+                                java.lang.Class[] classes,
+                                java.lang.Object... arguments)
+
+
This method creates a button widget for you. +

+

+
Parameters:
displayText - The text to display on the button.
methodName - The name of the method to call when clicked.
me - The Object or Class that has the method you want to call.
addClick - Set this to true and it will automatically play the Click + sound.
classes - The argument classes for the method you want to call.
arguments - The defaulted arguments you want to use. +
Returns:
The new Button widget.
+
+
+
+ +

+makeTextArea

+
+public static TextArea makeTextArea(java.lang.String text,
+                                    java.lang.Boolean htmlMode)
+
+
This is a small helper to create TextAreas, which is basically a label + that wraps text. +

+

+
Parameters:
text - The text to show.
htmlMode - Whether to create the Textbox to render HTML, or standard + text. +
Returns:
The TextArea widget.
+
+
+
+ +

+setTextAreaText

+
+public static void setTextAreaText(TextArea textArea,
+                                   java.lang.String text)
+
+
This is a small helper method to set the text of a TextArea. It supposed + Simple and HTML TextAreas. +

+

+
Parameters:
textArea - The TextArea you wish to set the text of.
text - The text to set.
+
+
+
+ +

+makeTextDisplayAndGoBack

+
+public static Widget makeTextDisplayAndGoBack(java.lang.String titleText,
+                                              java.lang.String displayText,
+                                              java.lang.String buttonText,
+                                              java.lang.Boolean htmlMode)
+
+
This method is designed to provide an easy way to make popups or + information notices. +

+

+
Parameters:
titleText - This is the text for the title on top of the display. If you + set this to null, it will simply not have a top bar.
displayText - This is the text to be displayed below the title bar (If there + is one).
buttonText - This is the text you want the back button to have. Something + like 'OK' or 'Back' is what you usually use.
htmlMode - This is if you want the text to be rendered as if it were + HTML. +
Returns:
The generated widget. Use GuiModScreen.show to display it.
+
+
+
+ +

+addButton

+
+public void addButton(java.lang.String text,
+                      ModAction action,
+                      java.lang.Boolean mergeBack)
+
+
This method adds a button to the choice menu. The arguments are the same + as the related makeButton method. +

+

+
Parameters:
text - The text for the button.
action - The action to use when pressed.
mergeBack - Whether or not to automatically to back after the button is + pressed.
+
+
+
+ +

+addButton

+
+public void addButton(java.lang.String text,
+                      java.lang.String methodName,
+                      java.lang.Object me,
+                      java.lang.Boolean mergeBack)
+
+
This method adds a button to the choice menu. The arguments are the same + as the related makeButton method. +

+

+
Parameters:
text - The text for the button.
methodName - The method to call.
me - The object or class with the method you wish to call.
mergeBack - Whether or not to automatically to back after the button is + pressed.
+
+
+
+ +

+addButton

+
+public void addButton(java.lang.String text,
+                      java.lang.String methodName,
+                      java.lang.Object me,
+                      java.lang.Class[] types,
+                      java.lang.Boolean mergeBack,
+                      java.lang.Object... arguments)
+
+
This method adds a button to the choice menu. The arguments are the same + as the related makeButton method. +

+

+
Parameters:
text - The text for the button.
methodName - The method to call.
me - The object or class with the method you wish to call.
types - The types of the arguments required for the method.
mergeBack - Whether or not to automatically to back after the button is + pressed.
arguments - The arguments you wish to use when this button is pressed.
+
+
+
+ +

+genWidget

+
+public Widget genWidget(java.lang.Boolean showBackButton)
+
+
This creates the Choice Menu from the Display Text entered earlier and + the buttons you have added. +

+

+
Parameters:
showBackButton - If true, show a bar on the bottom with a button to go back to + the previous menu. If false, don't. +
Returns:
The generated widget. Use GuiModScreen.show to display it.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/GuiModScreen.html b/doc/net/minecraft/src/GuiModScreen.html new file mode 100644 index 0000000..9f73b6b --- /dev/null +++ b/doc/net/minecraft/src/GuiModScreen.html @@ -0,0 +1,509 @@ + + + + + + +GuiModScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class GuiModScreen

+
+java.lang.Object
+  extended by GuiScreen
+      extended by net.minecraft.src.GuiModScreen
+
+
+
Direct Known Subclasses:
GuiModSelect
+
+
+
+
public class GuiModScreen
extends GuiScreen
+ + +

+GuiModScreen is the minecraft screen subclass that controls and renders TWL. + normally you will want to call it's static methods to use it, though + subclassing it and/or instantiating it are also possible. however, to do so + would use unsafe api (I still might change things.) +

+ +

+

+
Author:
+
lahwran
+
See Also:
show
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intbackgroundType + +
+          The type of background to draw.
+static GuiModScreencurrentScreen + +
+          Used by static methods.
+ Widgetmainwidget + +
+          Actual main widget of this GuiModScreen
+ GuiScreenparentScreen + +
+          Reference to parent screen, is used to go back()
+  + + + + + + + + + + + + + + + +
+Constructor Summary
+protected GuiModScreen(GuiScreen screen) + +
+          Only use this constructor from subclasses.
+ GuiModScreen(GuiScreen screen, + Widget widget) + +
+          main constructor, to be used if you are instantiating this class.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static voidback() + +
+          Hide current screen and show parent screen.
+static voidclicksound() + +
+          Play a click sound.
+ voiddrawScreen(int var1, + int var2, + float var3) + +
+           
+ voidhandleInput() + +
+           
+static voidshow(GuiModScreen screen) + +
+          Show a screen - GuiModScreen version.
+static voidshow(Widget screen) + +
+          Show a screen - TWL widget version.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+currentScreen

+
+public static GuiModScreen currentScreen
+
+
Used by static methods. Is the currently displayed screen. +

+

+
+
+
+ +

+backgroundType

+
+public int backgroundType
+
+
The type of background to draw. 0 is the default background. If you are + in game, it will shade the screen grey before it draws your widget, like + when you pause the game normally. If you are not in game, it will show + the dirt background, like on the main menu. 1 is force the main menu + (dirt) background. Anything else is no background, completely clear. +

+

+
+
+
+ +

+mainwidget

+
+public Widget mainwidget
+
+
Actual main widget of this GuiModScreen +

+

+
+
+
+ +

+parentScreen

+
+public GuiScreen parentScreen
+
+
Reference to parent screen, is used to go back() +

+

+
See Also:
back()
+
+ + + + + + + + +
+Constructor Detail
+ +

+GuiModScreen

+
+protected GuiModScreen(GuiScreen screen)
+
+
Only use this constructor from subclasses. does not take a widget, so + that the subclass can build the widget before storing it. put your main + widget in mainwidget, of course. +

+

+
Parameters:
screen - parent screen
+
+
+ +

+GuiModScreen

+
+public GuiModScreen(GuiScreen screen,
+                    Widget widget)
+
+
main constructor, to be used if you are instantiating this class. +

+

+
Parameters:
screen - parent screen - make sure this is right!
widget - main widget to display
+
+ + + + + + + + +
+Method Detail
+ +

+back

+
+public static void back()
+
+
Hide current screen and show parent screen. +

+

+
+
+
+
+ +

+clicksound

+
+public static void clicksound()
+
+
Play a click sound. Call after the user performs an action. Already + called from setting widgets. +

+

+
+
+
+
+ +

+show

+
+public static void show(GuiModScreen screen)
+
+
Show a screen - GuiModScreen version. Show an instance of GuiModScreen - + Does not set the parent screen, you have to deal with that yourself! +

+

+
Parameters:
screen - GuiModScreen instance or subclass to show with parent screen + already set to current screen.
+
+
+
+ +

+show

+
+public static void show(Widget screen)
+
+
Show a screen - TWL widget version. This is the recommended way to show a + TWL widget as a screen. +

+

+
Parameters:
screen - widget to show - will be sized to size of screen when twl was + started.
+
+
+
+ +

+drawScreen

+
+public void drawScreen(int var1,
+                       int var2,
+                       float var3)
+
+
+
+
+
+
+ +

+handleInput

+
+public void handleInput()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/GuiModSelect.html b/doc/net/minecraft/src/GuiModSelect.html new file mode 100644 index 0000000..dedad50 --- /dev/null +++ b/doc/net/minecraft/src/GuiModSelect.html @@ -0,0 +1,262 @@ + + + + + + +GuiModSelect + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class GuiModSelect

+
+java.lang.Object
+  extended by GuiScreen
+      extended by net.minecraft.src.GuiModScreen
+          extended by net.minecraft.src.GuiModSelect
+
+
+
+
public class GuiModSelect
extends GuiModScreen
+ + +

+This is a Subclass of GuiModScreen, and acts as the entry point from the + button in the options menu. This is just used internally. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class net.minecraft.src.GuiModScreen
backgroundType, currentScreen, mainwidget, parentScreen
+  + + + + + + + + + + + +
+Constructor Summary
+protected GuiModSelect(GuiScreen screen) + +
+           
+  + + + + + + + +
+Method Summary
+ + + + + + + +
Methods inherited from class net.minecraft.src.GuiModScreen
back, clicksound, drawScreen, handleInput, show, show
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+GuiModSelect

+
+protected GuiModSelect(GuiScreen screen)
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/GuiOptions.html b/doc/net/minecraft/src/GuiOptions.html new file mode 100644 index 0000000..c55fce5 --- /dev/null +++ b/doc/net/minecraft/src/GuiOptions.html @@ -0,0 +1,331 @@ + + + + + + +GuiOptions + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class GuiOptions

+
+java.lang.Object
+  extended by GuiScreen
+      extended by net.minecraft.src.GuiOptions
+
+
+
+
public class GuiOptions
extends GuiScreen
+ + +

+


+ +

+ + + + + + + + + + + +
+Field Summary
+protected  java.lang.StringscreenTitle + +
+           
+  + + + + + + + + + + +
+Constructor Summary
GuiOptions(GuiScreen var1, + GameSettings var2) + +
+           
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidactionPerformed(GuiButton var1) + +
+           
+ voiddrawScreen(int var1, + int var2, + float var3) + +
+           
+ voidinitGui() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+screenTitle

+
+protected java.lang.String screenTitle
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+GuiOptions

+
+public GuiOptions(GuiScreen var1,
+                  GameSettings var2)
+
+
+ + + + + + + + +
+Method Detail
+ +

+initGui

+
+public void initGui()
+
+
+
+
+
+
+ +

+actionPerformed

+
+protected void actionPerformed(GuiButton var1)
+
+
+
+
+
+
+ +

+drawScreen

+
+public void drawScreen(int var1,
+                       int var2,
+                       float var3)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/GuiWidgetScreen.html b/doc/net/minecraft/src/GuiWidgetScreen.html new file mode 100644 index 0000000..739b6d9 --- /dev/null +++ b/doc/net/minecraft/src/GuiWidgetScreen.html @@ -0,0 +1,528 @@ + + + + + + +GuiWidgetScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class GuiWidgetScreen

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.GuiWidgetScreen
+
+
+
+
public class GuiWidgetScreen
extends Widget
+ + +

+TWL Widget that switches out child widgets. the Minecraft gui end and twl + rendering is managed from GuiModScreen. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ WidgetcurrentWidget + +
+          The widget that is currently displayed.
+ GUIgui + +
+          This is a reference to a TWL class that is used to render the widgets.
+static GuiWidgetScreeninstance + +
+          The initialized instance of GuiWidgetScreen.
+ MinecraftminecraftInstance + +
+          This is a reference to Minecraft.
+ LWJGLRendererrenderer + +
+          This is the rendered used by TWL.
+static intscreenheight + +
+          The height of the screen that the widget will render on.
+ ScaledResolutionscreenSize + +
+          This is the ScaledResolution class that is used to scale all of the + widgets.
+static intscreenwidth + +
+          The width of the screen that the widget will render on.
+ ThemeManagertheme + +
+          This the the ThemeManager for GuiAPI.
+  + + + + + + + + + + +
+Constructor Summary
GuiWidgetScreen() + +
+          This creates a new instance of GuiWidgetScreen.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+static GuiWidgetScreengetInstance() + +
+          get the instance of GuiWidget, creating it if needed
+ voidlayout() + +
+           
+ voidresetScreen() + +
+          Removes all children and clears the current widget.
+ voidsetScreen(Widget widget) + +
+          to be called only from GuiModScreen, sets the widget to display.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+instance

+
+public static GuiWidgetScreen instance
+
+
The initialized instance of GuiWidgetScreen. +

+

+
+
+
+ +

+screenheight

+
+public static int screenheight
+
+
The height of the screen that the widget will render on. +

+

+
+
+
+ +

+screenwidth

+
+public static int screenwidth
+
+
The width of the screen that the widget will render on. +

+

+
+
+
+ +

+currentWidget

+
+public Widget currentWidget
+
+
The widget that is currently displayed. +

+

+
+
+
+ +

+gui

+
+public GUI gui
+
+
This is a reference to a TWL class that is used to render the widgets. +

+

+
+
+
+ +

+minecraftInstance

+
+public Minecraft minecraftInstance
+
+
This is a reference to Minecraft. +

+

+
+
+
+ +

+renderer

+
+public LWJGLRenderer renderer
+
+
This is the rendered used by TWL. +

+

+
+
+
+ +

+screenSize

+
+public ScaledResolution screenSize
+
+
This is the ScaledResolution class that is used to scale all of the + widgets. +

+

+
+
+
+ +

+theme

+
+public ThemeManager theme
+
+
This the the ThemeManager for GuiAPI. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+GuiWidgetScreen

+
+public GuiWidgetScreen()
+
+
This creates a new instance of GuiWidgetScreen. It should only be used + internally. Please use the static method getInstance() instead. +

+

+ + + + + + + + +
+Method Detail
+ +

+getInstance

+
+public static GuiWidgetScreen getInstance()
+
+
get the instance of GuiWidget, creating it if needed +

+

+ +
Returns:
GuiWidgetScreen singleton
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
+
+
+
+ +

+resetScreen

+
+public void resetScreen()
+
+
Removes all children and clears the current widget. +

+

+
+
+
+
+ +

+setScreen

+
+public void setScreen(Widget widget)
+
+
to be called only from GuiModScreen, sets the widget to display. + GuiModScreen manages this. +

+

+
Parameters:
w - widget to display
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/ModAction.html b/doc/net/minecraft/src/ModAction.html new file mode 100644 index 0000000..3370ca6 --- /dev/null +++ b/doc/net/minecraft/src/ModAction.html @@ -0,0 +1,742 @@ + + + + + + +ModAction + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class ModAction

+
+java.lang.Object
+  extended by net.minecraft.src.ModAction
+
+
+
All Implemented Interfaces:
java.beans.PropertyChangeListener, java.lang.Runnable, java.util.EventListener
+
+
+
+
public class ModAction
extends java.lang.Object
implements java.lang.Runnable, java.beans.PropertyChangeListener
+ + +

+This class is a helper designed to make it easier to use callbacks. It + implements Runnable and PropertyChangeListener, and you can use it in several + ways. +

+ +

+

+
Author:
+
_303, ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ java.lang.ObjectdataRef + +
+          The 'dataRef' field is an extra, unused field you can use as a key, or + something specific to track.
+protected  java.lang.Object[]defaultArguments + +
+           
+protected  java.util.ArrayList<ModAction>mergedActions + +
+           
+protected  java.lang.StringmethodName + +
+           
+protected  java.lang.Class[]methodParams + +
+           
+ java.lang.StringnameRef + +
+          The 'nameRef' field is also something you can use to track your + ModActions.
+protected  java.lang.ObjectobjectRef + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
+ ModAction(java.lang.Object o, + java.lang.String method, + java.lang.Class... params) + +
+          This is the most common ModAction constructor.
+ ModAction(java.lang.Object o, + java.lang.String method, + java.lang.Object data, + java.lang.Class... params) + +
+          This is an overload to allow the dataRef object.
+ ModAction(java.lang.Object o, + java.lang.String method, + java.lang.String name, + java.lang.Class... params) + +
+          This is an overload to allow the nameRef string.
+ ModAction(java.lang.Object o, + java.lang.String method, + java.lang.String name, + java.lang.Object data, + java.lang.Class... params) + +
+          This is an overload to allow the nameRef string and dataRef object.
+protected ModAction(java.lang.String name) + +
+          This is a constructor that is only supposed to be used internally.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+protected  java.lang.BooleanargsMatch(java.lang.Class[] classTypes, + java.lang.Object[] arguments) + +
+           
+ java.lang.Object[]call(java.lang.Object... args) + +
+          This calls this ModAction and any Merged actions with the provided + arguments.
+protected  java.lang.ObjectcallInt(java.lang.Object... args) + +
+           
+protected  java.lang.reflect.MethodGetMethodRecursively(java.lang.Object o, + java.lang.String method) + +
+           
+ ModActionmergeAction(ModAction newAction) + +
+          This method merges ModActions together into one.
+ voidpropertyChange(java.beans.PropertyChangeEvent paramPropertyChangeEvent) + +
+           
+ voidrun() + +
+           
+ ModActionsetDefaultArguments(java.lang.Object... Arguments) + +
+          This sets the arguments to use if no or invalid arguments are provided.
+protected  voidsetupHandler(java.lang.Object o, + java.lang.String method) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+dataRef

+
+public java.lang.Object dataRef
+
+
The 'dataRef' field is an extra, unused field you can use as a key, or + something specific to track. +

+

+
+
+
+ +

+defaultArguments

+
+protected java.lang.Object[] defaultArguments
+
+
+
+
+
+ +

+mergedActions

+
+protected java.util.ArrayList<ModAction> mergedActions
+
+
+
+
+
+ +

+methodName

+
+protected java.lang.String methodName
+
+
+
+
+
+ +

+methodParams

+
+protected java.lang.Class[] methodParams
+
+
+
+
+
+ +

+nameRef

+
+public java.lang.String nameRef
+
+
The 'nameRef' field is also something you can use to track your + ModActions. +

+

+
+
+
+ +

+objectRef

+
+protected java.lang.Object objectRef
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ModAction

+
+public ModAction(java.lang.Object o,
+                 java.lang.String method,
+                 java.lang.Class... params)
+
+
This is the most common ModAction constructor. You simply specify what + has the method you want, and the method's name and (Optionally) the + parameters. +

+

+
Parameters:
o - The object reference or class that contains the method you + wish to call.
method - The name of the method you wish to call.
params - The parameters of the method you wish to call.
+
+
+ +

+ModAction

+
+public ModAction(java.lang.Object o,
+                 java.lang.String method,
+                 java.lang.Object data,
+                 java.lang.Class... params)
+
+
This is an overload to allow the dataRef object. +

+

+
Parameters:
o - The object reference or class that contains the method you + wish to call.
method - The name of the method you wish to call.
data - A specific key for identifying this ModAction. Basically + something you can use to track it.
params - The parameters of the method you wish to call.
+
+
+ +

+ModAction

+
+public ModAction(java.lang.Object o,
+                 java.lang.String method,
+                 java.lang.String name,
+                 java.lang.Class... params)
+
+
This is an overload to allow the nameRef string. +

+

+
Parameters:
o - The object reference or class that contains the method you + wish to call.
method - The name of the method you wish to call.
name - The name of this ModAction. Something else you can use to keep + track, and this is included within exceptions.
params - The parameters of the method you wish to call.
+
+
+ +

+ModAction

+
+public ModAction(java.lang.Object o,
+                 java.lang.String method,
+                 java.lang.String name,
+                 java.lang.Object data,
+                 java.lang.Class... params)
+
+
This is an overload to allow the nameRef string and dataRef object. +

+

+
Parameters:
o - The object reference or class that contains the method you + wish to call.
method - The name of the method you wish to call.
name - The name of this ModAction. Something else you can use to keep + track, and this is included within exceptions.
data - A specific key for identifying this ModAction. Basically + something you can use to track it.
params - The parameters of the method you wish to call.
+
+
+ +

+ModAction

+
+protected ModAction(java.lang.String name)
+
+
This is a constructor that is only supposed to be used internally. It + sets no actual handler, only a name. +

+

+
Parameters:
name - The name to use for this ModAction.
+
+ + + + + + + + +
+Method Detail
+ +

+argsMatch

+
+protected java.lang.Boolean argsMatch(java.lang.Class[] classTypes,
+                                      java.lang.Object[] arguments)
+
+
+
+
+
+
+
+
+
+ +

+call

+
+public java.lang.Object[] call(java.lang.Object... args)
+                        throws java.lang.Exception
+
+
This calls this ModAction and any Merged actions with the provided + arguments. If the arguments do not match it will try using the default + arguments, if they exist. If not, it will throw an exception. +

+

+
+
+
+
Parameters:
args - The arguments to try and call for the ModAction (And any + merged ModActions) +
Returns:
The return values for each ModAction. +
Throws: +
java.lang.Exception - Any exception thrown when the ModAction attempts to run.
+
+
+
+ +

+callInt

+
+protected java.lang.Object callInt(java.lang.Object... args)
+                            throws java.lang.Exception
+
+
+
+
+
+ +
Throws: +
java.lang.Exception
+
+
+
+ +

+GetMethodRecursively

+
+protected java.lang.reflect.Method GetMethodRecursively(java.lang.Object o,
+                                                        java.lang.String method)
+
+
+
+
+
+
+
+
+
+ +

+mergeAction

+
+public ModAction mergeAction(ModAction newAction)
+
+
This method merges ModActions together into one. +

+

+
+
+
+
Parameters:
newAction - The new Action to merge with. +
Returns:
The Merged ModAction.
+
+
+
+ +

+propertyChange

+
+public void propertyChange(java.beans.PropertyChangeEvent paramPropertyChangeEvent)
+
+
+
Specified by:
propertyChange in interface java.beans.PropertyChangeListener
+
+
+
+
+
+
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+setDefaultArguments

+
+public ModAction setDefaultArguments(java.lang.Object... Arguments)
+
+
This sets the arguments to use if no or invalid arguments are provided. + Throws InvalidParameterException if the arguments provided do not match + the method parameters, or are not assignable to those types. +

+

+
+
+
+
Parameters:
Arguments - The arguments to try and call. +
Returns:
this
+
+
+
+ +

+setupHandler

+
+protected void setupHandler(java.lang.Object o,
+                            java.lang.String method)
+
+
+
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/ModSettingScreen.html b/doc/net/minecraft/src/ModSettingScreen.html new file mode 100644 index 0000000..14da868 --- /dev/null +++ b/doc/net/minecraft/src/ModSettingScreen.html @@ -0,0 +1,494 @@ + + + + + + +ModSettingScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class ModSettingScreen

+
+java.lang.Object
+  extended by net.minecraft.src.ModSettingScreen
+
+
+
+
public class ModSettingScreen
extends java.lang.Object
+ + +

+This is the class that GuiModSelect uses to show Subscreens. Create one of + these to create your own subscreen, from which you can add widgets to. This + automatically registers the button on the Mod Setting Screen. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ java.lang.StringbuttonTitle + +
+          title to show on button to this modscreen
+static java.lang.StringguiContext + +
+          The current context.
+static java.util.ArrayList<ModSettingScreen>modScreens + +
+          The list of currently registered ModScreens.
+ java.lang.StringniceName + +
+          name to show at top of screen
+ WidgettheWidget + +
+          the main widget to pass into GuiModScreen.show()
+ WidgetClassicTwocolumnwidgetColumn + +
+          the column widget to show the child widgets in
+  + + + + + + + + + + + + + + + + +
+Constructor Summary
ModSettingScreen(java.lang.String name) + +
+          convenience constructor for when you want to show the same name on the + button and screen title
ModSettingScreen(java.lang.String nicename, + java.lang.String buttontitle) + +
+          The main Constructor for ModSettingScreen.
ModSettingScreen(Widget widget, + java.lang.String buttontitle) + +
+          An alternate Constructor for ModSettingScreen.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidappend(Widget newwidget) + +
+          Add a widget
+ voidremove(Widget child) + +
+          Remove a widget
+ voidsetSingleColumn(java.lang.Boolean value) + +
+          Changes the widgetColumn to or from WidgetClassicTwocolumn or + WidgetSinglecolumn.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+guiContext

+
+public static java.lang.String guiContext
+
+
The current context. +

+

+
+
+
+ +

+modScreens

+
+public static java.util.ArrayList<ModSettingScreen> modScreens
+
+
The list of currently registered ModScreens. +

+

+
+
+
+ +

+buttonTitle

+
+public java.lang.String buttonTitle
+
+
title to show on button to this modscreen +

+

+
+
+
+ +

+niceName

+
+public java.lang.String niceName
+
+
name to show at top of screen +

+

+
+
+
+ +

+theWidget

+
+public Widget theWidget
+
+
the main widget to pass into GuiModScreen.show() +

+

+
+
+
+ +

+widgetColumn

+
+public WidgetClassicTwocolumn widgetColumn
+
+
the column widget to show the child widgets in +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ModSettingScreen

+
+public ModSettingScreen(java.lang.String name)
+
+
convenience constructor for when you want to show the same name on the + button and screen title +

+

+
Parameters:
name - mod nice name
+
+
+ +

+ModSettingScreen

+
+public ModSettingScreen(java.lang.String nicename,
+                        java.lang.String buttontitle)
+
+
The main Constructor for ModSettingScreen. Creates a WidgetSimplewindow + as the main Widget, sets the title for said WidgetSimplewindow, and + registers this ModSettingScreen on the settings screen. +

+

+
Parameters:
nicename - The title that will be on the WidgetSimplewindow.
buttontitle - button-to-screen title
+
+
+ +

+ModSettingScreen

+
+public ModSettingScreen(Widget widget,
+                        java.lang.String buttontitle)
+
+
An alternate Constructor for ModSettingScreen. Instead of creating a + WidgetSimplewindow, this simply lets you pass a widget of your choosing. +

+

+
Parameters:
widget - The main widget you want to use for this ModSettingScreen.
buttontitle - button-to-screen title
+
+ + + + + + + + +
+Method Detail
+ +

+append

+
+public void append(Widget newwidget)
+
+
Add a widget +

+

+
Parameters:
newwidget - the widget to add
+
+
+
+ +

+remove

+
+public void remove(Widget child)
+
+
Remove a widget +

+

+
Parameters:
child - widget to remove
+
+
+
+ +

+setSingleColumn

+
+public void setSingleColumn(java.lang.Boolean value)
+
+
Changes the widgetColumn to or from WidgetClassicTwocolumn or + WidgetSinglecolumn. +

+

+
Parameters:
value - What to change it to. True for WidgetSinglecolumn, False for + WidgetClassicTwocolumn.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/ModSettings.html b/doc/net/minecraft/src/ModSettings.html new file mode 100644 index 0000000..8d33b3e --- /dev/null +++ b/doc/net/minecraft/src/ModSettings.html @@ -0,0 +1,1846 @@ + + + + + + +ModSettings + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class ModSettings

+
+java.lang.Object
+  extended by net.minecraft.src.ModSettings
+
+
+
+
public class ModSettings
extends java.lang.Object
+ + +

+Main interface class for Settings API +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+static java.util.ArrayList<ModSettings>all + +
+          A list of all ModSettings instances.
+ java.lang.Stringbackendname + +
+          Mod name as used in .minecraft/mods/${modbackendname}/
+static java.util.HashMap<java.lang.String,java.lang.String>contextDatadirs + +
+          A map of context names and the directories they save to.
+static java.lang.StringcurrentContext + +
+          The current context.
+static booleandebug + +
+          Debug mode flag.
+ java.util.ArrayList<Setting>Settings + +
+          all registered settings for this mod
+ booleansettingsLoaded + +
+          Whether or not Settings have been loaded for this mod.
+  + + + + + + + + + + +
+Constructor Summary
ModSettings(java.lang.String modbackendname) + +
+           
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ SettingBooleanaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value) + +
+          convenience boolean setting adder
+ SettingBooleanaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value, + java.lang.String truestring, + java.lang.String falsestring) + +
+          convenience boolean setting adder
+ SettingFloataddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value) + +
+          convenience float setting adder
+ SettingFloataddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value, + float min, + float step, + float max) + +
+          convenience float setting adder
+ SettingKeyaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value) + +
+          convenience key setting adder
+ SettingIntaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int max) + +
+          convenience int setting adder
+ SettingIntaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int step, + int max) + +
+          convenience int setting adder
+ SettingMultiaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + java.lang.String... labels) + +
+          convenience multi setting adder
+ SettingTextaddSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + java.lang.String value) + +
+          convenience text setting adder
+ SettingBooleanaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + boolean value) + +
+          convenience boolean setting adder
+ SettingBooleanaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + boolean value, + java.lang.String truestring, + java.lang.String falsestring) + +
+          convenience boolean setting adder
+ SettingFloataddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + float value) + +
+          convenience float setting adder
+ SettingFloataddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + float value, + float min, + float step, + float max) + +
+          convenience float setting adder
+ SettingKeyaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value) + +
+          convenience key setting adder
+ SettingIntaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int max) + +
+          convenience int setting adder
+ SettingIntaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int step, + int max) + +
+          convenience int setting adder
+ SettingMultiaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + java.lang.String... labels) + +
+          convenience multi setting adder
+ SettingTextaddSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + java.lang.String value) + +
+          convenience text setting adder
+ voidappend(Setting s) + +
+          add a setting to be saved.
+ voidcopyContextAll(java.lang.String src, + java.lang.String dest) + +
+          Copies the saved settings from one context to another.
+static voiddbgout(java.lang.String s) + +
+          Debug printer.
+ java.util.ArrayList<SettingBoolean>getAllBooleanSettings() + +
+          Get a list of all Boolean settings for the current context.
+ java.util.ArrayList<SettingBoolean>getAllBooleanSettings(java.lang.String context) + +
+          Get a list of all Boolean settings for the specified context.
+ java.util.ArrayList<SettingFloat>getAllFloatSettings() + +
+          Get a list of all Float settings for the current context.
+ java.util.ArrayList<SettingFloat>getAllFloatSettings(java.lang.String context) + +
+          Get a list of all Float settings for the specified context.
+ java.util.ArrayList<SettingInt>getAllIntSettings() + +
+          Get a list of all Int settings for the current context.
+ java.util.ArrayList<SettingInt>getAllIntSettings(java.lang.String context) + +
+          Get a list of all Int settings for the specified context.
+ java.util.ArrayList<SettingKey>getAllKeySettings() + +
+          Get a list of all Key settings for the current context.
+ java.util.ArrayList<SettingKey>getAllKeySettings(java.lang.String context) + +
+          Get a list of all Key settings for the specified context.
+ java.util.ArrayList<SettingMulti>getAllMultiSettings() + +
+          Get a list of all Multi settings for the current context.
+ java.util.ArrayList<SettingMulti>getAllMultiSettings(java.lang.String context) + +
+          Get a list of all Multi settings for the specified context.
+ java.util.ArrayList<SettingText>getAllTextSettings() + +
+          Get a list of all Text settings for the current context.
+ java.util.ArrayList<SettingText>getAllTextSettings(java.lang.String context) + +
+          Get a list of all Text settings for the specified context.
+static java.io.FilegetAppDir(java.lang.String app) + +
+          Returns, and creates if needed, an application directory.
+ java.lang.BooleangetBooleanSetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.BooleangetBooleanSetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ java.lang.FloatgetFloatSetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.FloatgetFloatSetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ java.lang.IntegergetIntSetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.IntegergetIntSetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ java.lang.IntegergetKeySetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.IntegergetKeySetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+static MinecraftgetMcinst() + +
+          This finds and returns a Minecraft instance.
+ java.lang.IntegergetMultiSetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.IntegergetMultiSetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ java.lang.StringgetMultiSettingLabel(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.StringgetMultiSettingLabel(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ java.lang.StringgetTextSetting(java.lang.String backendName) + +
+          Gets the value of a setting by backend name from the current context.
+ java.lang.StringgetTextSetting(java.lang.String backendName, + java.lang.String context) + +
+          Gets the value of a setting by backend name from the specified context.
+ voidload() + +
+          Loads the settings for the default context.
+ voidload(java.lang.String context) + +
+          must be called after all settings are added for loading/saving to work.
+static voidloadAll(java.lang.String context) + +
+          Loads all saved settings for a specific context.
+static voidpresetMcint(Minecraft m) + +
+          Set the Minecraft instance that getMcinst returns.
+ voidremove(Setting s) + +
+          removes a setting using ArrayList.remove
+ voidresetAll() + +
+          Resets all settings for the current context.
+ voidresetAll(java.lang.String context) + +
+          Resets all settings for the specified context.
+ voidsave(java.lang.String context) + +
+          called every time a setting is changed saves settings file to + .minecraft/mods/$backendname/guiconfig.properties coming soon: set name + of config file
+static voidsetContext(java.lang.String name, + java.lang.String location) + +
+          Sets the context for mods.
+ intsize() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+all

+
+public static java.util.ArrayList<ModSettings> all
+
+
A list of all ModSettings instances. +

+

+
+
+
+ +

+contextDatadirs

+
+public static java.util.HashMap<java.lang.String,java.lang.String> contextDatadirs
+
+
A map of context names and the directories they save to. +

+

+
+
+
+ +

+currentContext

+
+public static java.lang.String currentContext
+
+
The current context. +

+

+
+
+
+ +

+debug

+
+public static final boolean debug
+
+
Debug mode flag. Should always be false. +

+

+
See Also:
Constant Field Values
+
+
+ +

+backendname

+
+public java.lang.String backendname
+
+
Mod name as used in .minecraft/mods/${modbackendname}/ +

+

+
+
+
+ +

+Settings

+
+public java.util.ArrayList<Setting> Settings
+
+
all registered settings for this mod +

+

+
+
+
+ +

+settingsLoaded

+
+public boolean settingsLoaded
+
+
Whether or not Settings have been loaded for this mod. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+ModSettings

+
+public ModSettings(java.lang.String modbackendname)
+
+
+
Parameters:
modbackendname - used to initialize class modbackendname field
+
+ + + + + + + + +
+Method Detail
+ +

+dbgout

+
+public static void dbgout(java.lang.String s)
+
+
Debug printer. This prints to System.out, and only works when in debug + mode. +

+

+
Parameters:
s - The string to output.
+
+
+
+ +

+getAppDir

+
+public static java.io.File getAppDir(java.lang.String app)
+
+
Returns, and creates if needed, an application directory. +

+

+
Parameters:
app - The name of the application. +
Returns:
A File reference to the directory created.
+
+
+
+ +

+getMcinst

+
+public static Minecraft getMcinst()
+
+
This finds and returns a Minecraft instance. It caches it if it has + already been located. +

+

+ +
Returns:
The minecraft instance.
+
+
+
+ +

+loadAll

+
+public static void loadAll(java.lang.String context)
+
+
Loads all saved settings for a specific context. +

+

+
Parameters:
context - The context to load from.
+
+
+
+ +

+presetMcint

+
+public static void presetMcint(Minecraft m)
+
+
Set the Minecraft instance that getMcinst returns. +

+

+
Parameters:
m - The Minecraft Instance.
+
+
+
+ +

+setContext

+
+public static void setContext(java.lang.String name,
+                              java.lang.String location)
+
+
Sets the context for mods. This means you can specify a context on a per + world / per server basis, or anything else you would prefer. This will + carry thoughout all mods. +

+

+
Parameters:
name - The name reference of the context.
location - The location that this context stores and loads data from.
+
+
+
+ +

+addSetting

+
+public SettingBoolean addSetting(ModSettingScreen screen,
+                                 java.lang.String nicename,
+                                 java.lang.String backendname,
+                                 boolean value)
+
+
convenience boolean setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingBoolean addSetting(ModSettingScreen screen,
+                                 java.lang.String nicename,
+                                 java.lang.String backendname,
+                                 boolean value,
+                                 java.lang.String truestring,
+                                 java.lang.String falsestring)
+
+
convenience boolean setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingFloat addSetting(ModSettingScreen screen,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               float value)
+
+
convenience float setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingFloat addSetting(ModSettingScreen screen,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               float value,
+                               float min,
+                               float step,
+                               float max)
+
+
convenience float setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingKey addSetting(ModSettingScreen screen,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value)
+
+
convenience key setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingInt addSetting(ModSettingScreen screen,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value,
+                             int min,
+                             int max)
+
+
convenience int setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingInt addSetting(ModSettingScreen screen,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value,
+                             int min,
+                             int step,
+                             int max)
+
+
convenience int setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingMulti addSetting(ModSettingScreen screen,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               int value,
+                               java.lang.String... labels)
+
+
convenience multi setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingText addSetting(ModSettingScreen screen,
+                              java.lang.String nicename,
+                              java.lang.String backendname,
+                              java.lang.String value)
+
+
convenience text setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingBoolean addSetting(Widget w2,
+                                 java.lang.String nicename,
+                                 java.lang.String backendname,
+                                 boolean value)
+
+
convenience boolean setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingBoolean addSetting(Widget w2,
+                                 java.lang.String nicename,
+                                 java.lang.String backendname,
+                                 boolean value,
+                                 java.lang.String truestring,
+                                 java.lang.String falsestring)
+
+
convenience boolean setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingFloat addSetting(Widget w2,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               float value)
+
+
convenience float setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingFloat addSetting(Widget w2,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               float value,
+                               float min,
+                               float step,
+                               float max)
+
+
convenience float setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingKey addSetting(Widget w2,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value)
+
+
convenience key setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingInt addSetting(Widget w2,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value,
+                             int min,
+                             int max)
+
+
convenience int setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingInt addSetting(Widget w2,
+                             java.lang.String nicename,
+                             java.lang.String backendname,
+                             int value,
+                             int min,
+                             int step,
+                             int max)
+
+
convenience int setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingMulti addSetting(Widget w2,
+                               java.lang.String nicename,
+                               java.lang.String backendname,
+                               int value,
+                               java.lang.String... labels)
+
+
convenience multi setting adder +

+

+
+
+
+
+ +

+addSetting

+
+public SettingText addSetting(Widget w2,
+                              java.lang.String nicename,
+                              java.lang.String backendname,
+                              java.lang.String value)
+
+
convenience text setting adder +

+

+
+
+
+
+ +

+append

+
+public void append(Setting s)
+
+
add a setting to be saved. +

+

+
Parameters:
s - setting to add - sets s.parent as well, don't add a setting to + more than one modsettings
+
+
+
+ +

+copyContextAll

+
+public void copyContextAll(java.lang.String src,
+                           java.lang.String dest)
+
+
Copies the saved settings from one context to another. +

+

+
Parameters:
src - The source context from which to copy.
dest - The destination context to save to.
+
+
+
+ +

+getAllBooleanSettings

+
+public java.util.ArrayList<SettingBoolean> getAllBooleanSettings()
+
+
Get a list of all Boolean settings for the current context. +

+

+ +
Returns:
The list of settings.
+
+
+
+ +

+getAllBooleanSettings

+
+public java.util.ArrayList<SettingBoolean> getAllBooleanSettings(java.lang.String context)
+
+
Get a list of all Boolean settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllFloatSettings

+
+public java.util.ArrayList<SettingFloat> getAllFloatSettings()
+
+
Get a list of all Float settings for the current context. +

+

+ +
Returns:
The list of settings.
+
+
+
+ +

+getAllFloatSettings

+
+public java.util.ArrayList<SettingFloat> getAllFloatSettings(java.lang.String context)
+
+
Get a list of all Float settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllIntSettings

+
+public java.util.ArrayList<SettingInt> getAllIntSettings()
+
+
Get a list of all Int settings for the current context. +

+

+ +
Returns:
The list of settings.
+
+
+
+ +

+getAllIntSettings

+
+public java.util.ArrayList<SettingInt> getAllIntSettings(java.lang.String context)
+
+
Get a list of all Int settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllKeySettings

+
+public java.util.ArrayList<SettingKey> getAllKeySettings()
+
+
Get a list of all Key settings for the current context. +

+

+ +
Returns:
The list of settings.
+
+
+
+ +

+getAllKeySettings

+
+public java.util.ArrayList<SettingKey> getAllKeySettings(java.lang.String context)
+
+
Get a list of all Key settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllMultiSettings

+
+public java.util.ArrayList<SettingMulti> getAllMultiSettings()
+
+
Get a list of all Multi settings for the current context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllMultiSettings

+
+public java.util.ArrayList<SettingMulti> getAllMultiSettings(java.lang.String context)
+
+
Get a list of all Multi settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getAllTextSettings

+
+public java.util.ArrayList<SettingText> getAllTextSettings()
+
+
Get a list of all Text settings for the current context. +

+

+ +
Returns:
The list of settings.
+
+
+
+ +

+getAllTextSettings

+
+public java.util.ArrayList<SettingText> getAllTextSettings(java.lang.String context)
+
+
Get a list of all Text settings for the specified context. +

+

+
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
+
+
+
+ +

+getBooleanSetting

+
+public java.lang.Boolean getBooleanSetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The boolean value.
+
+
+
+ +

+getBooleanSetting

+
+public java.lang.Boolean getBooleanSetting(java.lang.String backendName,
+                                           java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The boolean value.
+
+
+
+ +

+getFloatSetting

+
+public java.lang.Float getFloatSetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The Float value.
+
+
+
+ +

+getFloatSetting

+
+public java.lang.Float getFloatSetting(java.lang.String backendName,
+                                       java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The Float value.
+
+
+
+ +

+getIntSetting

+
+public java.lang.Integer getIntSetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The Int value.
+
+
+
+ +

+getIntSetting

+
+public java.lang.Integer getIntSetting(java.lang.String backendName,
+                                       java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The Int value.
+
+
+
+ +

+getKeySetting

+
+public java.lang.Integer getKeySetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The Key value.
+
+
+
+ +

+getKeySetting

+
+public java.lang.Integer getKeySetting(java.lang.String backendName,
+                                       java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The Key value.
+
+
+
+ +

+getMultiSetting

+
+public java.lang.Integer getMultiSetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The Multi value.
+
+
+
+ +

+getMultiSetting

+
+public java.lang.Integer getMultiSetting(java.lang.String backendName,
+                                         java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The Multi value.
+
+
+
+ +

+getMultiSettingLabel

+
+public java.lang.String getMultiSettingLabel(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The text label for the value.
+
+
+
+ +

+getMultiSettingLabel

+
+public java.lang.String getMultiSettingLabel(java.lang.String backendName,
+                                             java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The text label for the value.
+
+
+
+ +

+getTextSetting

+
+public java.lang.String getTextSetting(java.lang.String backendName)
+
+
Gets the value of a setting by backend name from the current context. +

+

+
Parameters:
backendName - The backend name of the setting. +
Returns:
The Text value.
+
+
+
+ +

+getTextSetting

+
+public java.lang.String getTextSetting(java.lang.String backendName,
+                                       java.lang.String context)
+
+
Gets the value of a setting by backend name from the specified context. +

+

+
Parameters:
backendName - The backend name of the setting.
context - The context from which to copy from. +
Returns:
The Text value.
+
+
+
+ +

+load

+
+public void load()
+
+
Loads the settings for the default context. +

+

+
+
+
+
+ +

+load

+
+public void load(java.lang.String context)
+
+
must be called after all settings are added for loading/saving to work. + loads from .minecraft/mods/$backendname/guiconfig.properties if it + exists. coming soon: set name of config file +

+

+
Parameters:
context - The context to load from.
+
+
+
+ +

+remove

+
+public void remove(Setting s)
+
+
removes a setting using ArrayList.remove +

+

+
Parameters:
s - setting to remove
+
+
+
+ +

+resetAll

+
+public void resetAll()
+
+
Resets all settings for the current context. +

+

+
+
+
+
+ +

+resetAll

+
+public void resetAll(java.lang.String context)
+
+
Resets all settings for the specified context. +

+

+
Parameters:
context - The context to reset.
+
+
+
+ +

+save

+
+public void save(java.lang.String context)
+
+
called every time a setting is changed saves settings file to + .minecraft/mods/$backendname/guiconfig.properties coming soon: set name + of config file +

+

+
Parameters:
context - The context to save.
+
+
+
+ +

+size

+
+public int size()
+
+
+ +
Returns:
number of settings registered
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/Setting.html b/doc/net/minecraft/src/Setting.html new file mode 100644 index 0000000..1547633 --- /dev/null +++ b/doc/net/minecraft/src/Setting.html @@ -0,0 +1,566 @@ + + + + + + +Setting + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class Setting<T>

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<T>
+
+
+
Type Parameters:
T - The type that this Setting will use.
+
+
Direct Known Subclasses:
SettingBoolean, SettingFloat, SettingInt, SettingKey, SettingMulti, SettingText
+
+
+
+
public abstract class Setting<T>
extends Widget
+ + +

+This is the base class for Settings. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ java.lang.StringbackendName + +
+          The name used by ModSettings to save and load the setting.
+ TdefaultValue + +
+          The default value for this setting.
+ WidgetSettingdisplayWidget + +
+          A reference to the Widget that displays this setting.
+ ModSettingsparent + +
+          Reference to the ModSettings this Setting is a child of.
+ java.util.HashMap<java.lang.String,T>values + +
+          value.
+  + + + + + + + + + + +
+Constructor Summary
Setting() + +
+          This is the basic constructor for Setting.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidcopyContext(java.lang.String srccontext, + java.lang.String destcontext) + +
+          Copies a setting from the source context to the destination context.
+abstract  voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ Tget() + +
+          Returns the setting for the current context.
+abstract  Tget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ voidreset() + +
+          Resets this setting for the current context, saving the default and + updating the display.
+ voidreset(java.lang.String context) + +
+          Resets this setting for the specified context, saving the default and + updating the display.
+ voidset(T v) + +
+          Sets the value for this setting to the current context.
+abstract  voidset(T v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+abstract  java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+backendName

+
+public java.lang.String backendName
+
+
The name used by ModSettings to save and load the setting. +

+

+
+
+
+ +

+defaultValue

+
+public T defaultValue
+
+
The default value for this setting. +

+

+
+
+
+ +

+displayWidget

+
+public WidgetSetting displayWidget
+
+
A reference to the Widget that displays this setting. +

+

+
+
+
+ +

+parent

+
+public ModSettings parent
+
+
Reference to the ModSettings this Setting is a child of. +

+

+
+
+
+ +

+values

+
+public java.util.HashMap<java.lang.String,T> values
+
+
value. do not write directly if you want things to update! +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+Setting

+
+public Setting()
+
+
This is the basic constructor for Setting. Internal use only. +

+

+ + + + + + + + +
+Method Detail
+ +

+copyContext

+
+public void copyContext(java.lang.String srccontext,
+                        java.lang.String destcontext)
+
+
Copies a setting from the source context to the destination context. +

+

+
Parameters:
srccontext - The source context to copy data from.
destcontext - The destination context you would like to save the data to.
+
+
+
+ +

+fromString

+
+public abstract void fromString(java.lang.String s,
+                                java.lang.String context)
+
+
load back a string from toString() +

+

+
+
+
+
+ +

+get

+
+public T get()
+
+
Returns the setting for the current context. +

+

+ +
Returns:
The setting.
+
+
+
+ +

+get

+
+public abstract T get(java.lang.String context)
+
+
Returns the setting for the specified context. +

+

+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+reset

+
+public void reset()
+
+
Resets this setting for the current context, saving the default and + updating the display. +

+

+
+
+
+
+ +

+reset

+
+public void reset(java.lang.String context)
+
+
Resets this setting for the specified context, saving the default and + updating the display. +

+

+
Parameters:
context - The context to reset.
+
+
+
+ +

+set

+
+public void set(T v)
+
+
Sets the value for this setting to the current context. +

+

+
Parameters:
v - The value.
+
+
+
+ +

+set

+
+public abstract void set(T v,
+                         java.lang.String context)
+
+
Sets the value for this setting to the specified context. +

+

+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+toString

+
+public abstract java.lang.String toString(java.lang.String context)
+
+
return string to save, called from ModSettings.save() +

+

+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingBoolean.html b/doc/net/minecraft/src/SettingBoolean.html new file mode 100644 index 0000000..6a074d1 --- /dev/null +++ b/doc/net/minecraft/src/SettingBoolean.html @@ -0,0 +1,398 @@ + + + + + + +SettingBoolean + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingBoolean

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.Boolean>
+          extended by net.minecraft.src.SettingBoolean
+
+
+
+
public class SettingBoolean
extends Setting<java.lang.Boolean>
+ + +

+This is the Setting type for Booleans. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + + + + +
+Constructor Summary
SettingBoolean(java.lang.String name) + +
+          This is the constructor for SettingBoolean.
SettingBoolean(java.lang.String name, + java.lang.Boolean defValue) + +
+          This is the constructor for SettingBoolean.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Booleanget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ voidset(java.lang.Boolean v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SettingBoolean

+
+public SettingBoolean(java.lang.String name)
+
+
This is the constructor for SettingBoolean. It sets the default value as + false. +

+

+
Parameters:
name - The backend name for this setting.
+
+
+ +

+SettingBoolean

+
+public SettingBoolean(java.lang.String name,
+                      java.lang.Boolean defValue)
+
+
This is the constructor for SettingBoolean. +

+

+
Parameters:
name - The backend name for this setting.
defValue - The default value.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.Boolean>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.Boolean get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.Boolean>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+set

+
+public void set(java.lang.Boolean v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.Boolean>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.Boolean>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingFloat.html b/doc/net/minecraft/src/SettingFloat.html new file mode 100644 index 0000000..1b60eea --- /dev/null +++ b/doc/net/minecraft/src/SettingFloat.html @@ -0,0 +1,518 @@ + + + + + + +SettingFloat + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingFloat

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.Float>
+          extended by net.minecraft.src.SettingFloat
+
+
+
+
public class SettingFloat
extends Setting<java.lang.Float>
+ + +

+This is the Setting type for Floats. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+ floatmaximumValue + +
+          The maximum value.
+ floatminimumValue + +
+          The minimum value.
+ floatstepValue + +
+          The step value.
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
SettingFloat(java.lang.String title) + +
+          A constructor for SettingFloat.
SettingFloat(java.lang.String title, + float defValue) + +
+          A constructor for SettingFloat.
SettingFloat(java.lang.String title, + float defValue, + float minValue, + float maxValue) + +
+          A constructor for SettingFloat.
SettingFloat(java.lang.String title, + float defValue, + float minValue, + float stepValue, + float maxValue) + +
+          A constructor for SettingFloat.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Floatget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ voidset(java.lang.Float v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+maximumValue

+
+public float maximumValue
+
+
The maximum value. +

+

+
+
+
+ +

+minimumValue

+
+public float minimumValue
+
+
The minimum value. +

+

+
+
+
+ +

+stepValue

+
+public float stepValue
+
+
The step value. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+SettingFloat

+
+public SettingFloat(java.lang.String title)
+
+
A constructor for SettingFloat. Defaults settings to default value of 0, + range of 0.0-1.0, and a step of 0.1. +

+

+
Parameters:
title - The backend name for this setting.
+
+
+ +

+SettingFloat

+
+public SettingFloat(java.lang.String title,
+                    float defValue)
+
+
A constructor for SettingFloat. Defaults settings to range of 0.0-1.0 and + a step of 0.1. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
+
+
+ +

+SettingFloat

+
+public SettingFloat(java.lang.String title,
+                    float defValue,
+                    float minValue,
+                    float maxValue)
+
+
A constructor for SettingFloat. Defaults settings to a step of 0.1. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
minValue - The minimum value.
maxValue - The maximum value.
+
+
+ +

+SettingFloat

+
+public SettingFloat(java.lang.String title,
+                    float defValue,
+                    float minValue,
+                    float stepValue,
+                    float maxValue)
+
+
A constructor for SettingFloat. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
minValue - The minimum value.
stepValue - The step value.
maxValue - The maximum value.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.Float>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.Float get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.Float>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+set

+
+public void set(java.lang.Float v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.Float>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.Float>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingInt.html b/doc/net/minecraft/src/SettingInt.html new file mode 100644 index 0000000..0236d79 --- /dev/null +++ b/doc/net/minecraft/src/SettingInt.html @@ -0,0 +1,518 @@ + + + + + + +SettingInt + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingInt

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.Integer>
+          extended by net.minecraft.src.SettingInt
+
+
+
+
public class SettingInt
extends Setting<java.lang.Integer>
+ + +

+This is the Setting type for Ints. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intmaximumValue + +
+          The maximum value.
+ intminimumValue + +
+          The minimum value.
+ intstepValue + +
+          The step value.
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
SettingInt(java.lang.String title) + +
+          A constructor for SettingInt.
SettingInt(java.lang.String title, + int defValue) + +
+          A constructor for SettingInt.
SettingInt(java.lang.String title, + int defValue, + int minValue, + int maxValue) + +
+          A constructor for SettingInt.
SettingInt(java.lang.String title, + int defValue, + int minValue, + int stepValue, + int maxValue) + +
+          A constructor for SettingInt.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Integerget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ voidset(java.lang.Integer v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+maximumValue

+
+public int maximumValue
+
+
The maximum value. +

+

+
+
+
+ +

+minimumValue

+
+public int minimumValue
+
+
The minimum value. +

+

+
+
+
+ +

+stepValue

+
+public int stepValue
+
+
The step value. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+SettingInt

+
+public SettingInt(java.lang.String title)
+
+
A constructor for SettingInt. Defaults settings to default value of 0, + range of 1-100, and a step of 1. +

+

+
Parameters:
title - The backend name for this setting.
+
+
+ +

+SettingInt

+
+public SettingInt(java.lang.String title,
+                  int defValue)
+
+
A constructor for SettingInt. Defaults settings to range of 1-100, and a + step of 1. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
+
+
+ +

+SettingInt

+
+public SettingInt(java.lang.String title,
+                  int defValue,
+                  int minValue,
+                  int maxValue)
+
+
A constructor for SettingInt. Defaults settings to a step of 1. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
minValue - The minimum value.
maxValue - The maximum value.
+
+
+ +

+SettingInt

+
+public SettingInt(java.lang.String title,
+                  int defValue,
+                  int minValue,
+                  int stepValue,
+                  int maxValue)
+
+
A constructor for SettingInt. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value.
minValue - The minimum value.
stepValue - The step value.
maxValue - The maximum value.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.Integer>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.Integer get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.Integer>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+set

+
+public void set(java.lang.Integer v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.Integer>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.Integer>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingKey.html b/doc/net/minecraft/src/SettingKey.html new file mode 100644 index 0000000..634e072 --- /dev/null +++ b/doc/net/minecraft/src/SettingKey.html @@ -0,0 +1,488 @@ + + + + + + +SettingKey + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingKey

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.Integer>
+          extended by net.minecraft.src.SettingKey
+
+
+
+
public class SettingKey
extends Setting<java.lang.Integer>
+ + +

+This is the Setting type for Keys. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + + + + +
+Constructor Summary
SettingKey(java.lang.String title, + int key) + +
+          Constructor for SettingKey.
SettingKey(java.lang.String title, + java.lang.String key) + +
+          Constructor for SettingKey.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Integerget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ booleanisKeyDown() + +
+          An easy helper to see if the current key is down.
+ booleanisKeyDown(java.lang.String context) + +
+          An easy helper to see if the current key is down.
+ voidset(java.lang.Integer v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ voidset(java.lang.String v) + +
+          Sets the value for this setting to the current context.
+ voidset(java.lang.String v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SettingKey

+
+public SettingKey(java.lang.String title,
+                  int key)
+
+
Constructor for SettingKey. +

+

+
Parameters:
title - The backend name for this setting.
key - The key you want as default, as a int keycode.
+
+
+ +

+SettingKey

+
+public SettingKey(java.lang.String title,
+                  java.lang.String key)
+
+
Constructor for SettingKey. +

+

+
Parameters:
title - The backend name for this setting.
key - key The key you want as default, as a string.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.Integer>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.Integer get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.Integer>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+isKeyDown

+
+public boolean isKeyDown()
+
+
An easy helper to see if the current key is down. +

+

+ +
Returns:
true if the key specified to this setting (In the current + context) is down.
+
+
+
+ +

+isKeyDown

+
+public boolean isKeyDown(java.lang.String context)
+
+
An easy helper to see if the current key is down. +

+

+
Parameters:
context - The context to get the key from. +
Returns:
true if the key specified to this setting is down.
+
+
+
+ +

+set

+
+public void set(java.lang.Integer v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.Integer>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+set

+
+public void set(java.lang.String v)
+
+
Sets the value for this setting to the current context. +

+

+
Parameters:
v - The value, as a string.
+
+
+
+ +

+set

+
+public void set(java.lang.String v,
+                java.lang.String context)
+
+
Sets the value for this setting to the specified context. +

+

+
Parameters:
v - The value, as a string.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.Integer>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingMulti.html b/doc/net/minecraft/src/SettingMulti.html new file mode 100644 index 0000000..4903231 --- /dev/null +++ b/doc/net/minecraft/src/SettingMulti.html @@ -0,0 +1,563 @@ + + + + + + +SettingMulti + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingMulti

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.Integer>
+          extended by net.minecraft.src.SettingMulti
+
+
+
+
public class SettingMulti
extends Setting<java.lang.Integer>
+ + +

+This is the Setting type for Multis. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + +
+Field Summary
+ java.lang.String[]labelValues + +
+          A string array of labels for the button.
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + + + + +
+Constructor Summary
SettingMulti(java.lang.String title, + int defValue, + java.lang.String... labelValues) + +
+          A constructor for SettingMulti.
SettingMulti(java.lang.String title, + java.lang.String... labelValues) + +
+          A constructor for SettingMulti.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Integerget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ java.lang.StringgetLabel() + +
+          Helper to get the text label for the current context and value.
+ java.lang.StringgetLabel(java.lang.String context) + +
+          Helper to get the text label for the specified context and value.
+ voidnext() + +
+          Shifts the value forward for the current context.
+ voidnext(java.lang.String context) + +
+          Shifts the value forward for the specified context.
+ voidset(java.lang.Integer v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ voidset(java.lang.String v) + +
+          Sets the value for this setting to the current context.
+ voidset(java.lang.String v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+labelValues

+
+public java.lang.String[] labelValues
+
+
A string array of labels for the button. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+SettingMulti

+
+public SettingMulti(java.lang.String title,
+                    int defValue,
+                    java.lang.String... labelValues)
+
+
A constructor for SettingMulti. +

+

+
Parameters:
title - The backend name for this setting.
defValue - The default value for this Multi.
labelValues - The text labels you would like this multi to have. Must have + at least one.
+
+
+ +

+SettingMulti

+
+public SettingMulti(java.lang.String title,
+                    java.lang.String... labelValues)
+
+
A constructor for SettingMulti. Default value is 0, or the first label to + be defined. +

+

+
Parameters:
title - The backend name for this setting.
labelValues - The text labels you would like this multi to have. Must have + at least one.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.Integer>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.Integer get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.Integer>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+getLabel

+
+public java.lang.String getLabel()
+
+
Helper to get the text label for the current context and value. +

+

+ +
Returns:
The label.
+
+
+
+ +

+getLabel

+
+public java.lang.String getLabel(java.lang.String context)
+
+
Helper to get the text label for the specified context and value. +

+

+
Parameters:
context - The context to get the value from. +
Returns:
The label.
+
+
+
+ +

+next

+
+public void next()
+
+
Shifts the value forward for the current context. +

+

+
+
+
+
+ +

+next

+
+public void next(java.lang.String context)
+
+
Shifts the value forward for the specified context. +

+

+
Parameters:
context - The context to change.
+
+
+
+ +

+set

+
+public void set(java.lang.Integer v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.Integer>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+set

+
+public void set(java.lang.String v)
+
+
Sets the value for this setting to the current context. +

+

+
Parameters:
v - The value, in the label representation.
+
+
+
+ +

+set

+
+public void set(java.lang.String v,
+                java.lang.String context)
+
+
Sets the value for this setting to the specified context. +

+

+
Parameters:
v - The value, in the label representation.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.Integer>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/SettingText.html b/doc/net/minecraft/src/SettingText.html new file mode 100644 index 0000000..9589e1a --- /dev/null +++ b/doc/net/minecraft/src/SettingText.html @@ -0,0 +1,379 @@ + + + + + + +SettingText + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class SettingText

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.Setting<java.lang.String>
+          extended by net.minecraft.src.SettingText
+
+
+
+
public class SettingText
extends Setting<java.lang.String>
+ + +

+This is the Setting type for Text. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class net.minecraft.src.Setting
backendName, defaultValue, displayWidget, parent, values
+  + + + + + + + + + + +
+Constructor Summary
SettingText(java.lang.String title, + java.lang.String defaulttext) + +
+          A constructor for SettingText.
+  + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidfromString(java.lang.String s, + java.lang.String context) + +
+          load back a string from toString()
+ java.lang.Stringget(java.lang.String context) + +
+          Returns the setting for the specified context.
+ voidset(java.lang.String v, + java.lang.String context) + +
+          Sets the value for this setting to the specified context.
+ java.lang.StringtoString(java.lang.String context) + +
+          return string to save, called from ModSettings.save()
+ + + + + + + +
Methods inherited from class net.minecraft.src.Setting
copyContext, get, reset, reset, set
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+SettingText

+
+public SettingText(java.lang.String title,
+                   java.lang.String defaulttext)
+
+
A constructor for SettingText. +

+

+
Parameters:
title - The backend name for this setting.
defaulttext - The default text for this Setting.
+
+ + + + + + + + +
+Method Detail
+ +

+fromString

+
+public void fromString(java.lang.String s,
+                       java.lang.String context)
+
+
Description copied from class: Setting
+
load back a string from toString() +

+

+
Specified by:
fromString in class Setting<java.lang.String>
+
+
+
+
+
+
+ +

+get

+
+public java.lang.String get(java.lang.String context)
+
+
Description copied from class: Setting
+
Returns the setting for the specified context. +

+

+
Specified by:
get in class Setting<java.lang.String>
+
+
+
Parameters:
context - The context to retrieve from. +
Returns:
The setting.
+
+
+
+ +

+set

+
+public void set(java.lang.String v,
+                java.lang.String context)
+
+
Description copied from class: Setting
+
Sets the value for this setting to the specified context. +

+

+
Specified by:
set in class Setting<java.lang.String>
+
+
+
Parameters:
v - The value.
context - The context to set.
+
+
+
+ +

+toString

+
+public java.lang.String toString(java.lang.String context)
+
+
Description copied from class: Setting
+
return string to save, called from ModSettings.save() +

+

+
Specified by:
toString in class Setting<java.lang.String>
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetBoolean.html b/doc/net/minecraft/src/WidgetBoolean.html new file mode 100644 index 0000000..4e76a0b --- /dev/null +++ b/doc/net/minecraft/src/WidgetBoolean.html @@ -0,0 +1,524 @@ + + + + + + +WidgetBoolean + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetBoolean

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetBoolean
+
+
+
All Implemented Interfaces:
java.lang.Runnable
+
+
+
+
public class WidgetBoolean
extends WidgetSetting
implements java.lang.Runnable
+ + +

+This is the Widget for boolean settings. It uses a button to display to the + user. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ Buttonbutton + +
+          The reference to the underlying Button.
+ java.lang.StringfalseText + +
+          The text to display on the button when the setting is false.
+ SettingBooleansettingReference + +
+          The reference to the SettingBoolean that this WidgetBoolean uses.
+ java.lang.StringtrueText + +
+          The text to display on the button when the setting is true.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + + + + +
+Constructor Summary
WidgetBoolean(SettingBoolean setting, + java.lang.String title) + +
+          This creates a new WidgetBoolean using the SettingBoolean and String + provided.
WidgetBoolean(SettingBoolean setting, + java.lang.String title, + java.lang.String truetext, + java.lang.String falsetext) + +
+          This creates a new WidgetBoolean using the WidgetBoolean and String + provided, as well as setting the true and false text.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidrun() + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, layout, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+button

+
+public Button button
+
+
The reference to the underlying Button. +

+

+
+
+
+ +

+falseText

+
+public java.lang.String falseText
+
+
The text to display on the button when the setting is false. +

+

+
+
+
+ +

+settingReference

+
+public SettingBoolean settingReference
+
+
The reference to the SettingBoolean that this WidgetBoolean uses. +

+

+
+
+
+ +

+trueText

+
+public java.lang.String trueText
+
+
The text to display on the button when the setting is true. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetBoolean

+
+public WidgetBoolean(SettingBoolean setting,
+                     java.lang.String title)
+
+
This creates a new WidgetBoolean using the SettingBoolean and String + provided. It uses 'true' and 'false' for the text. +

+

+
Parameters:
setting - The backing setting.
title - The title for this Widget. It is what will show on the button, + asides from it's current value.
+
+
+ +

+WidgetBoolean

+
+public WidgetBoolean(SettingBoolean setting,
+                     java.lang.String title,
+                     java.lang.String truetext,
+                     java.lang.String falsetext)
+
+
This creates a new WidgetBoolean using the WidgetBoolean and String + provided, as well as setting the true and false text. +

+

+
Parameters:
setting - The backing setting.
title - The title for this Widget. It is what will show on the button, + asides from it's current value.
truetext - The text to display what the setting is true.
falsetext - The text to display what the setting is false.
+
+ + + + + + + + +
+Method Detail
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/WidgetClassicTwocolumn.html new file mode 100644 index 0000000..0066df1 --- /dev/null +++ b/doc/net/minecraft/src/WidgetClassicTwocolumn.html @@ -0,0 +1,468 @@ + + + + + + +WidgetClassicTwocolumn + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetClassicTwocolumn

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetClassicTwocolumn
+
+
+
Direct Known Subclasses:
WidgetSinglecolumn
+
+
+
+
public class WidgetClassicTwocolumn
extends Widget
+ + +

+This widget is designed to arrange widgets into two columns. The width and + height is enforced, but they can be configured by the programmer. +

+ +

+

+
Author:
+
lahwran, ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intchildDefaultHeight + +
+          This is the default height to enforce for widgets.
+ intchildWidth + +
+          This dictates the width to set each of the widgets to.
+ intdefaultPadding + +
+          This is the amount of padding to use between widgets vertically.
+ java.util.Map<Widget,java.lang.Integer>heightOverrideExceptions + +
+          This is a map to override the heights of specific widgets.
+ booleanoverrideHeight + +
+          This says whether it should override the height for all widgets.
+ intsplitDistance + +
+          This is the amount of room between the two columns.
+ intverticalPadding + +
+          This is the amount of padding to have before any widgets are positioned.
+  + + + + + + + + + + +
+Constructor Summary
WidgetClassicTwocolumn(Widget... widgets) + +
+          This creates the WidgetClassicTwocolumn and adds the requested widgets.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetPreferredHeight() + +
+           
+ intgetPreferredWidth() + +
+           
+ voidlayout() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+childDefaultHeight

+
+public int childDefaultHeight
+
+
This is the default height to enforce for widgets. +

+

+
+
+
+ +

+childWidth

+
+public int childWidth
+
+
This dictates the width to set each of the widgets to. +

+

+
+
+
+ +

+defaultPadding

+
+public int defaultPadding
+
+
This is the amount of padding to use between widgets vertically. +

+

+
+
+
+ +

+heightOverrideExceptions

+
+public java.util.Map<Widget,java.lang.Integer> heightOverrideExceptions
+
+
This is a map to override the heights of specific widgets. It is an + override to overrideHeight. If you set the Integer as below 1, it will + use what the widget wants as it's height. If you set anything else, it + will use that height. Note that with TwoColumn widgets it will try and + keep the height the same between two widgets opposite each other, so the + one with the biggest height will override the other. +

+

+
+
+
+ +

+overrideHeight

+
+public boolean overrideHeight
+
+
This says whether it should override the height for all widgets. +

+

+
+
+
+ +

+splitDistance

+
+public int splitDistance
+
+
This is the amount of room between the two columns. +

+

+
+
+
+ +

+verticalPadding

+
+public int verticalPadding
+
+
This is the amount of padding to have before any widgets are positioned. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetClassicTwocolumn

+
+public WidgetClassicTwocolumn(Widget... widgets)
+
+
This creates the WidgetClassicTwocolumn and adds the requested widgets. +

+

+
Parameters:
widgets -
+
+ + + + + + + + +
+Method Detail
+ +

+getPreferredHeight

+
+public int getPreferredHeight()
+
+
+
+
+
+
+ +

+getPreferredWidth

+
+public int getPreferredWidth()
+
+
+
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetFloat.html b/doc/net/minecraft/src/WidgetFloat.html new file mode 100644 index 0000000..6d03c78 --- /dev/null +++ b/doc/net/minecraft/src/WidgetFloat.html @@ -0,0 +1,496 @@ + + + + + + +WidgetFloat + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetFloat

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetFloat
+
+
+
All Implemented Interfaces:
java.lang.Runnable
+
+
+
+
public class WidgetFloat
extends WidgetSetting
implements java.lang.Runnable
+ + +

+This is the Widget for Float settings. It uses a WidgetSlider to display to + the user. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intdecimalPlaces + +
+          The number of decimal places to display to the user.
+ SettingFloatsettingReference + +
+          The reference to the SettingInt that this WidgetInt uses.
+ WidgetSliderslider + +
+          The reference to the underlying WidgetSlider.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + + + + +
+Constructor Summary
WidgetFloat(SettingFloat setting, + java.lang.String title) + +
+          This creates a new WidgetInt using the SettingInt and String provided.
WidgetFloat(SettingFloat setting, + java.lang.String title, + int _decimalPlaces) + +
+          This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidrun() + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, layout, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+decimalPlaces

+
+public int decimalPlaces
+
+
The number of decimal places to display to the user. +

+

+
+
+
+ +

+slider

+
+public WidgetSlider slider
+
+
The reference to the underlying WidgetSlider. +

+

+
+
+
+ +

+settingReference

+
+public SettingFloat settingReference
+
+
The reference to the SettingInt that this WidgetInt uses. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetFloat

+
+public WidgetFloat(SettingFloat setting,
+                   java.lang.String title)
+
+
This creates a new WidgetInt using the SettingInt and String provided. It defaults the decimal places to display at 2. +

+

+
Parameters:
setting - The backing setting.
title - The text that will show on the WidgetSlider.
+
+
+ +

+WidgetFloat

+
+public WidgetFloat(SettingFloat setting,
+                   java.lang.String title,
+                   int _decimalPlaces)
+
+
This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. +

+

+
Parameters:
setting - The backing setting.
title - The text that will show on the WidgetSlider.
+
+ + + + + + + + +
+Method Detail
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetInt.html b/doc/net/minecraft/src/WidgetInt.html new file mode 100644 index 0000000..7311790 --- /dev/null +++ b/doc/net/minecraft/src/WidgetInt.html @@ -0,0 +1,454 @@ + + + + + + +WidgetInt + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetInt

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetInt
+
+
+
All Implemented Interfaces:
java.lang.Runnable
+
+
+
+
public class WidgetInt
extends WidgetSetting
implements java.lang.Runnable
+ + +

+This is the Widget for Integer settings. It uses a WidgetSlider to display to + the user. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+ SettingIntsettingReference + +
+          The reference to the SettingInt that this WidgetInt uses.
+ WidgetSliderslider + +
+          The reference to the underlying WidgetSlider.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + +
+Constructor Summary
WidgetInt(SettingInt setting, + java.lang.String title) + +
+          This creates a new WidgetInt using the SettingInt and String provided.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidrun() + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, layout, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+settingReference

+
+public SettingInt settingReference
+
+
The reference to the SettingInt that this WidgetInt uses. +

+

+
+
+
+ +

+slider

+
+public WidgetSlider slider
+
+
The reference to the underlying WidgetSlider. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetInt

+
+public WidgetInt(SettingInt setting,
+                 java.lang.String title)
+
+
This creates a new WidgetInt using the SettingInt and String provided. +

+

+
Parameters:
setting - The backing setting.
title - The text that will show on the WidgetSlider.
+
+ + + + + + + + +
+Method Detail
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetKeybinding.html b/doc/net/minecraft/src/WidgetKeybinding.html new file mode 100644 index 0000000..5c36b04 --- /dev/null +++ b/doc/net/minecraft/src/WidgetKeybinding.html @@ -0,0 +1,560 @@ + + + + + + +WidgetKeybinding + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetKeybinding

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetKeybinding
+
+
+
All Implemented Interfaces:
java.lang.Runnable
+
+
+
+
public class WidgetKeybinding
extends WidgetSetting
implements java.lang.Runnable
+ + +

+This is the Widget for Key binding settings. It uses a ToggleButton to + display to the user. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ SimpleBooleanModelbooleanModel + +
+          The reference to the underlying SimpleBooleanModel.
+ intCLEARKEY + +
+          The constant for clearing the existing key.
+ intNEVERMINDKEY + +
+          The constant for exiting and keeping the existing key.
+ SettingKeysettingReference + +
+          The reference to the SettingKey that this WidgetKeybinding uses.
+ ToggleButtontoggleButton + +
+          The reference to the underlying ToggleButton.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + +
+Constructor Summary
WidgetKeybinding(SettingKey setting, + java.lang.String title) + +
+          This creates a new WidgetKeybinding using the WidgetKeybinding and String + provided.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ booleanhandleEvent(Event evt) + +
+           
+ voidkeyboardFocusLost() + +
+           
+ voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidrun() + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, layout, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+booleanModel

+
+public SimpleBooleanModel booleanModel
+
+
The reference to the underlying SimpleBooleanModel. +

+

+
+
+
+ +

+CLEARKEY

+
+public int CLEARKEY
+
+
The constant for clearing the existing key. +

+

+
+
+
+ +

+NEVERMINDKEY

+
+public int NEVERMINDKEY
+
+
The constant for exiting and keeping the existing key. +

+

+
+
+
+ +

+settingReference

+
+public SettingKey settingReference
+
+
The reference to the SettingKey that this WidgetKeybinding uses. +

+

+
+
+
+ +

+toggleButton

+
+public ToggleButton toggleButton
+
+
The reference to the underlying ToggleButton. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetKeybinding

+
+public WidgetKeybinding(SettingKey setting,
+                        java.lang.String title)
+
+
This creates a new WidgetKeybinding using the WidgetKeybinding and String + provided. +

+

+
Parameters:
setting - The backing setting.
title - The text that will show on the WidgetSlider.
+
+ + + + + + + + +
+Method Detail
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+handleEvent

+
+public boolean handleEvent(Event evt)
+
+
+
+
+
+
+
+
+
+ +

+keyboardFocusLost

+
+public void keyboardFocusLost()
+
+
+
+
+
+
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetMulti.html b/doc/net/minecraft/src/WidgetMulti.html new file mode 100644 index 0000000..d821241 --- /dev/null +++ b/doc/net/minecraft/src/WidgetMulti.html @@ -0,0 +1,457 @@ + + + + + + +WidgetMulti + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetMulti

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetMulti
+
+
+
All Implemented Interfaces:
java.lang.Runnable
+
+
+
+
public class WidgetMulti
extends WidgetSetting
implements java.lang.Runnable
+ + +

+This is the Widget for Multi settings. It uses a button to display to the + user, and cycles the values. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+ Buttonbutton + +
+          The reference to the underlying Button.
+ SettingMultivalue + +
+          The reference to the SettingMulti that this WidgetMulti uses.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + +
+Constructor Summary
WidgetMulti(SettingMulti setting, + java.lang.String title) + +
+          This creates a new WidgetMulti using the SettingMulti and String + provided.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidrun() + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, layout, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+button

+
+public Button button
+
+
The reference to the underlying Button. +

+

+
+
+
+ +

+value

+
+public SettingMulti value
+
+
The reference to the SettingMulti that this WidgetMulti uses. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetMulti

+
+public WidgetMulti(SettingMulti setting,
+                   java.lang.String title)
+
+
This creates a new WidgetMulti using the SettingMulti and String + provided. +

+

+
Parameters:
setting - The backing setting.
title - The title for this Widget. It is what will show on the button, + asides from it's current value.
+
+ + + + + + + + +
+Method Detail
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable paramRunnable)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+
+ +

+run

+
+public void run()
+
+
+
Specified by:
run in interface java.lang.Runnable
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetSetting.html b/doc/net/minecraft/src/WidgetSetting.html new file mode 100644 index 0000000..8463e7b --- /dev/null +++ b/doc/net/minecraft/src/WidgetSetting.html @@ -0,0 +1,455 @@ + + + + + + +WidgetSetting + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetSetting

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+
+
+
Direct Known Subclasses:
WidgetBoolean, WidgetFloat, WidgetInt, WidgetKeybinding, WidgetMulti, WidgetText
+
+
+
+
public abstract class WidgetSetting
extends Widget
+ + +

+This is the base class for Widgets that are supposed to be front ends for + Settings. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+static java.util.ArrayList<WidgetSetting>all + +
+          This is a list of all WidgetSetting instances.
+ java.lang.StringniceName + +
+          The name that will be shown on the widget.
+  + + + + + + + + + + +
+Constructor Summary
WidgetSetting(java.lang.String nicename) + +
+          This sets the Nice Name and adds itself to the list of instances.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd(Widget child) + +
+           
+abstract  voidaddCallback(java.lang.Runnable paramRunnable) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ voidlayout() + +
+           
+abstract  voidremoveCallback(java.lang.Runnable paramRunnable) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+abstract  voidupdate() + +
+          This method updates the widget with the backing setting store.
+static voidupdateAll() + +
+          This updates all Widgets with the backing setting's current values.
+abstract  java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+all

+
+public static java.util.ArrayList<WidgetSetting> all
+
+
This is a list of all WidgetSetting instances. +

+

+
+
+
+ +

+niceName

+
+public java.lang.String niceName
+
+
The name that will be shown on the widget. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetSetting

+
+public WidgetSetting(java.lang.String nicename)
+
+
This sets the Nice Name and adds itself to the list of instances. Note + this class is abstract, so you will not be using this constructor. +

+

+
Parameters:
nicename - The nice name for this WidgetSetting.
+
+ + + + + + + + +
+Method Detail
+ +

+updateAll

+
+public static void updateAll()
+
+
This updates all Widgets with the backing setting's current values. +

+

+
+
+
+
+ +

+add

+
+public void add(Widget child)
+
+
+
+
+
+
+ +

+addCallback

+
+public abstract void addCallback(java.lang.Runnable paramRunnable)
+
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Parameters:
paramRunnable - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
+
+
+
+ +

+removeCallback

+
+public abstract void removeCallback(java.lang.Runnable paramRunnable)
+
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Parameters:
paramRunnable - The Runnable callback you wish to remove.
+
+
+
+ +

+update

+
+public abstract void update()
+
+
This method updates the widget with the backing setting store. +

+

+
+
+
+
+ +

+userString

+
+public abstract java.lang.String userString()
+
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetSimplewindow.html b/doc/net/minecraft/src/WidgetSimplewindow.html new file mode 100644 index 0000000..53fa445 --- /dev/null +++ b/doc/net/minecraft/src/WidgetSimplewindow.html @@ -0,0 +1,515 @@ + + + + + + +WidgetSimplewindow + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetSimplewindow

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSimplewindow
+
+
+
+
public class WidgetSimplewindow
extends Widget
+ + +

+This widget is designed to make an easy base for menus. It include a + ScrollPane for the main widget, a title bar on top, and a button to go back + to the previous menu. +

+ +

+

+
Author:
+
lahwran, ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ ButtonbackButton + +
+          This is a reference to the back button, if created.
+ WidgetSingleRowbuttonBar + +
+          This is a reference to the row at the bottom that contains the back + button.
+ inthPadding + +
+          This is the padding to use on each side of the main widget.
+ WidgetmainWidget + +
+          This is a reference to the main widget in the center.
+ LabeltitleWidget + +
+          This is a reference to the Label that acts as the title on top.
+ intvBottomPadding + +
+          This is the padding on the bottom.
+ intvTopPadding + +
+          This is the padding on the top.
+  + + + + + + + + + + + + + + + + + + + +
+Constructor Summary
WidgetSimplewindow() + +
+          This is a basic constructor.
WidgetSimplewindow(Widget w) + +
+          This is a basic constructor.
WidgetSimplewindow(Widget w, + java.lang.String s) + +
+          This is the most common constructor.
WidgetSimplewindow(Widget w, + java.lang.String s, + java.lang.Boolean showbackButton) + +
+          This is the more advanced constructor.
+  + + + + + + + + + + + + + + + +
+Method Summary
+protected  voidinit(java.lang.Boolean showBack, + java.lang.String titleText) + +
+          Initializes the WidgetSimplewindow's widgets.
+ voidlayout() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+backButton

+
+public Button backButton
+
+
This is a reference to the back button, if created. +

+

+
+
+
+ +

+buttonBar

+
+public WidgetSingleRow buttonBar
+
+
This is a reference to the row at the bottom that contains the back + button. +

+

+
+
+
+ +

+hPadding

+
+public int hPadding
+
+
This is the padding to use on each side of the main widget. +

+

+
+
+
+ +

+mainWidget

+
+public Widget mainWidget
+
+
This is a reference to the main widget in the center. +

+

+
+
+
+ +

+titleWidget

+
+public Label titleWidget
+
+
This is a reference to the Label that acts as the title on top. +

+

+
+
+
+ +

+vBottomPadding

+
+public int vBottomPadding
+
+
This is the padding on the bottom. Generally, this is to keep room + between the bottom of the main widget's ScrollPane and the button bar. +

+

+
+
+
+ +

+vTopPadding

+
+public int vTopPadding
+
+
This is the padding on the top. Generally, this is to keep room between + the top of the main widget's ScrollPane and the Label. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetSimplewindow

+
+public WidgetSimplewindow()
+
+
This is a basic constructor. It sets the title as an empty string and it + creates a new WidgetClassicTwocolumn for the main widget. +

+

+
+ +

+WidgetSimplewindow

+
+public WidgetSimplewindow(Widget w)
+
+
This is a basic constructor. It uses the passed widget as the main widget + and sets the title as an empty string. +

+

+
Parameters:
w - The widget to use in the center.
+
+
+ +

+WidgetSimplewindow

+
+public WidgetSimplewindow(Widget w,
+                          java.lang.String s)
+
+
This is the most common constructor. This keeps everything default, + although you can pass null for the title and it will remove the title bar + for you. +

+

+
Parameters:
w - The widget to use in the center.
s - The title to show on top. If null, the title bar will not be + created.
+
+
+ +

+WidgetSimplewindow

+
+public WidgetSimplewindow(Widget w,
+                          java.lang.String s,
+                          java.lang.Boolean showbackButton)
+
+
This is the more advanced constructor. This can also skip the back button + creation. +

+

+
Parameters:
w - The widget to use in the center.
s - The title to show on top. If null, the title bar will not be + created.
showbackButton -
+
+ + + + + + + + +
+Method Detail
+ +

+init

+
+protected void init(java.lang.Boolean showBack,
+                    java.lang.String titleText)
+
+
Initializes the WidgetSimplewindow's widgets. This is used internally. +

+

+
Parameters:
showBack - Whether or not to show the back button.
titleText - What to set the label text to. If null, it will not have a label.
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetSingleRow.html b/doc/net/minecraft/src/WidgetSingleRow.html new file mode 100644 index 0000000..058f976 --- /dev/null +++ b/doc/net/minecraft/src/WidgetSingleRow.html @@ -0,0 +1,524 @@ + + + + + + +WidgetSingleRow + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetSingleRow

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSingleRow
+
+
+
+
public class WidgetSingleRow
extends Widget
+ + +

+This is a layout widget designed to arrange your widgets in a row. It + specifies height and width for each widget when you add them. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ intdefaultHeight + +
+          This is the default height of any new widgets.
+ intdefaultWidth + +
+          This is the default width of any new widgets.
+protected  java.util.ArrayList<java.lang.Integer>heights + +
+           
+protected  java.util.ArrayList<Widget>widgets + +
+           
+protected  java.util.ArrayList<java.lang.Integer>widths + +
+           
+ intxSpacing + +
+          This defines the space between child widgets.
+  + + + + + + + + + + +
+Constructor Summary
WidgetSingleRow(int defwidth, + int defheight, + Widget... widgets) + +
+          This creates a new WidgetSingleRow, specifying the default width and + height for any new widgets, as well as adding any widgets you would like + to add.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidadd(Widget widget) + +
+           
+ voidadd(Widget widget, + int width, + int height) + +
+          This adds a new Widget with specified width and height.
+ intgetPreferredHeight() + +
+           
+ intgetPreferredWidth() + +
+           
+ voidlayout() + +
+           
+ WidgetremoveChild(int idx) + +
+           
+ booleanremoveChild(Widget widget) + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+defaultHeight

+
+public int defaultHeight
+
+
This is the default height of any new widgets. +

+

+
+
+
+ +

+defaultWidth

+
+public int defaultWidth
+
+
This is the default width of any new widgets. +

+

+
+
+
+ +

+heights

+
+protected java.util.ArrayList<java.lang.Integer> heights
+
+
+
+
+
+ +

+widgets

+
+protected java.util.ArrayList<Widget> widgets
+
+
+
+
+
+ +

+widths

+
+protected java.util.ArrayList<java.lang.Integer> widths
+
+
+
+
+
+ +

+xSpacing

+
+public int xSpacing
+
+
This defines the space between child widgets. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetSingleRow

+
+public WidgetSingleRow(int defwidth,
+                       int defheight,
+                       Widget... widgets)
+
+
This creates a new WidgetSingleRow, specifying the default width and + height for any new widgets, as well as adding any widgets you would like + to add. +

+

+
Parameters:
defwidth - The default width to use for any new widgets.
defheight - The default height to use for any new widgets.
widgets - The widgets you are adding.
+
+ + + + + + + + +
+Method Detail
+ +

+add

+
+public void add(Widget widget)
+
+
+
+
+
+
+ +

+add

+
+public void add(Widget widget,
+                int width,
+                int height)
+
+
This adds a new Widget with specified width and height. +

+

+
Parameters:
widget - The widget you are adding.
width - The width of the widget you are adding.
height - The height of the widget you are adding.
+
+
+
+ +

+getPreferredHeight

+
+public int getPreferredHeight()
+
+
+
+
+
+
+ +

+getPreferredWidth

+
+public int getPreferredWidth()
+
+
+
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
+
+
+
+ +

+removeChild

+
+public Widget removeChild(int idx)
+
+
+
+
+
+
+ +

+removeChild

+
+public boolean removeChild(Widget widget)
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetSinglecolumn.html b/doc/net/minecraft/src/WidgetSinglecolumn.html new file mode 100644 index 0000000..a285ed7 --- /dev/null +++ b/doc/net/minecraft/src/WidgetSinglecolumn.html @@ -0,0 +1,329 @@ + + + + + + +WidgetSinglecolumn + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetSinglecolumn

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetClassicTwocolumn
+          extended by net.minecraft.src.WidgetSinglecolumn
+
+
+
+
public class WidgetSinglecolumn
extends WidgetClassicTwocolumn
+ + +

+This is a widget designed to arrange other widgets into a single column. +

+ +

+

+
Author:
+
lahwran, ShaRose
+
+
+ +

+ + + + + + + +
+Field Summary
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetClassicTwocolumn
childDefaultHeight, childWidth, defaultPadding, heightOverrideExceptions, overrideHeight, splitDistance, verticalPadding
+  + + + + + + + + + + +
+Constructor Summary
WidgetSinglecolumn(Widget... widgets) + +
+          This creates the WidgetSinglecolumn with the specified Widgets.
+  + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ intgetPreferredHeight() + +
+           
+ intgetPreferredWidth() + +
+           
+ voidlayout() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WidgetSinglecolumn

+
+public WidgetSinglecolumn(Widget... widgets)
+
+
This creates the WidgetSinglecolumn with the specified Widgets. It chooses a default Width of 200. +

+

+
Parameters:
w - The widgets to add.
+
+ + + + + + + + +
+Method Detail
+ +

+getPreferredHeight

+
+public int getPreferredHeight()
+
+
+
Overrides:
getPreferredHeight in class WidgetClassicTwocolumn
+
+
+
+
+
+
+ +

+getPreferredWidth

+
+public int getPreferredWidth()
+
+
+
Overrides:
getPreferredWidth in class WidgetClassicTwocolumn
+
+
+
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
Overrides:
layout in class WidgetClassicTwocolumn
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetSlider.html b/doc/net/minecraft/src/WidgetSlider.html new file mode 100644 index 0000000..f3cc593 --- /dev/null +++ b/doc/net/minecraft/src/WidgetSlider.html @@ -0,0 +1,265 @@ + + + + + + +WidgetSlider + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetSlider

+
+java.lang.Object
+  extended by ValueAdjusterFloat
+      extended by net.minecraft.src.WidgetSlider
+
+
+
+
public class WidgetSlider
extends ValueAdjusterFloat
+ + +

+This is a simple extension of ValueAdjusterFloat so that it always updates + the setting. Used internally. +

+ +

+

+
Author:
+
lahwran
+
+
+ +

+ + + + + + + + + + + +
+Constructor Summary
WidgetSlider(FloatModel f) + +
+          This is the basic constructor.
+  + + + + + + + + + + + +
+Method Summary
+ voidstartEdit() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Constructor Detail
+ +

+WidgetSlider

+
+public WidgetSlider(FloatModel f)
+
+
This is the basic constructor. It just calls the ValueAdjusterFloat + constructor. +

+

+
Parameters:
f - The FloatModel to use.
+
+ + + + + + + + +
+Method Detail
+ +

+startEdit

+
+public void startEdit()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/WidgetText.html b/doc/net/minecraft/src/WidgetText.html new file mode 100644 index 0000000..69b1180 --- /dev/null +++ b/doc/net/minecraft/src/WidgetText.html @@ -0,0 +1,536 @@ + + + + + + +WidgetText + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class WidgetText

+
+java.lang.Object
+  extended by Widget
+      extended by net.minecraft.src.WidgetSetting
+          extended by net.minecraft.src.WidgetText
+
+
+
+
public class WidgetText
extends WidgetSetting
+ + +

+This is the Widget for Text settings. It uses an EditField for the user to + edit, and a Label for the name. +

+ +

+

+
Author:
+
lahwran, ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ LabeldisplayLabel + +
+          The label that displays to the user what the nice name of this setting + is.
+ EditFieldeditField + +
+          The EditField that the user actually changes the setting with.
+ intsetmode + +
+          This is a control number to who and what can edit this setting.
+ SettingTextsettingReference + +
+          The reference to the SettingText that this WidgetText uses.
+ + + + + + + +
Fields inherited from class net.minecraft.src.WidgetSetting
all, niceName
+  + + + + + + + + + + +
+Constructor Summary
WidgetText(SettingText setting, + java.lang.String title) + +
+          This creates a new WidgetText using the SettingText and String provided.
+  + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Method Summary
+ voidaddCallback(java.lang.Runnable callback) + +
+          This adds a callback to the displayed widget (Button, Slider, etc)
+ java.lang.StringgetValue() + +
+           
+ voidlayout() + +
+           
+ voidremoveCallback(java.lang.Runnable callback) + +
+          This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up.
+ voidsetValue(java.lang.String _value) + +
+           
+ voidupdate() + +
+          This method updates the widget with the backing setting store.
+ java.lang.StringuserString() + +
+          This returns a clean string that shows the Nice Name and the current + value.
+ + + + + + + +
Methods inherited from class net.minecraft.src.WidgetSetting
add, updateAll
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+displayLabel

+
+public Label displayLabel
+
+
The label that displays to the user what the nice name of this setting + is. +

+

+
+
+
+ +

+editField

+
+public EditField editField
+
+
The EditField that the user actually changes the setting with. +

+

+
+
+
+ +

+setmode

+
+public int setmode
+
+
This is a control number to who and what can edit this setting. 0 means + that both the SettingText and the user can edit. Below 0 means that only + the user can edit: So resetting to default will not change the text the + user sees. Over 0 means that the user can't edit the field, but if the + SettingText updates, it will replace what the user sees. +

+

+
+
+
+ +

+settingReference

+
+public SettingText settingReference
+
+
The reference to the SettingText that this WidgetText uses. +

+

+
+
+ + + + + + + + +
+Constructor Detail
+ +

+WidgetText

+
+public WidgetText(SettingText setting,
+                  java.lang.String title)
+
+
This creates a new WidgetText using the SettingText and String provided. +

+

+
Parameters:
setting - The backing setting.
title - The text that will show on the Label. If null, it will not + have a label at all.
+
+ + + + + + + + +
+Method Detail
+ +

+addCallback

+
+public void addCallback(java.lang.Runnable callback)
+
+
Description copied from class: WidgetSetting
+
This adds a callback to the displayed widget (Button, Slider, etc) +

+

+
Specified by:
addCallback in class WidgetSetting
+
+
+
Parameters:
callback - The Runnable callback you wish to call if the value changes.
+
+
+
+ +

+getValue

+
+public java.lang.String getValue()
+
+
+
+
+
+
+ +

+layout

+
+public void layout()
+
+
+
Overrides:
layout in class WidgetSetting
+
+
+
+
+
+
+ +

+removeCallback

+
+public void removeCallback(java.lang.Runnable callback)
+
+
Description copied from class: WidgetSetting
+
This removes a callback to the displayed widget (Button, Slider, etc) if + you previously set one up. +

+

+
Specified by:
removeCallback in class WidgetSetting
+
+
+
Parameters:
callback - The Runnable callback you wish to remove.
+
+
+
+ +

+setValue

+
+public void setValue(java.lang.String _value)
+
+
+
+
+
+
+ +

+update

+
+public void update()
+
+
Description copied from class: WidgetSetting
+
This method updates the widget with the backing setting store. +

+

+
Specified by:
update in class WidgetSetting
+
+
+
+
+
+
+ +

+userString

+
+public java.lang.String userString()
+
+
Description copied from class: WidgetSetting
+
This returns a clean string that shows the Nice Name and the current + value. +

+

+
Specified by:
userString in class WidgetSetting
+
+
+ +
Returns:
A descriptor string.
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/GuiApiHelper.html b/doc/net/minecraft/src/class-use/GuiApiHelper.html new file mode 100644 index 0000000..c24559f --- /dev/null +++ b/doc/net/minecraft/src/class-use/GuiApiHelper.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Class net.minecraft.src.GuiApiHelper + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.GuiApiHelper

+
+ + + + + +
+Uses of GuiApiHelper in net.minecraft.src
+  +

+ + + + + + + + + +
Methods in net.minecraft.src that return GuiApiHelper
+static GuiApiHelperGuiApiHelper.createChoiceMenu(java.lang.String displayText) + +
+          This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/GuiModScreen.html b/doc/net/minecraft/src/class-use/GuiModScreen.html new file mode 100644 index 0000000..c78c813 --- /dev/null +++ b/doc/net/minecraft/src/class-use/GuiModScreen.html @@ -0,0 +1,198 @@ + + + + + + +Uses of Class net.minecraft.src.GuiModScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.GuiModScreen

+
+ + + + + +
+Uses of GuiModScreen in net.minecraft.src
+  +

+ + + + + + + + + +
Subclasses of GuiModScreen in net.minecraft.src
+ classGuiModSelect + +
+          This is a Subclass of GuiModScreen, and acts as the entry point from the + button in the options menu.
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as GuiModScreen
+static GuiModScreenGuiModScreen.currentScreen + +
+          Used by static methods.
+  +

+ + + + + + + + + +
Methods in net.minecraft.src with parameters of type GuiModScreen
+static voidGuiModScreen.show(GuiModScreen screen) + +
+          Show a screen - GuiModScreen version.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/GuiModSelect.html b/doc/net/minecraft/src/class-use/GuiModSelect.html new file mode 100644 index 0000000..0d4c0e9 --- /dev/null +++ b/doc/net/minecraft/src/class-use/GuiModSelect.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.GuiModSelect + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.GuiModSelect

+
+No usage of net.minecraft.src.GuiModSelect +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/GuiOptions.html b/doc/net/minecraft/src/class-use/GuiOptions.html new file mode 100644 index 0000000..096463f --- /dev/null +++ b/doc/net/minecraft/src/class-use/GuiOptions.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.GuiOptions + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.GuiOptions

+
+No usage of net.minecraft.src.GuiOptions +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/GuiWidgetScreen.html b/doc/net/minecraft/src/class-use/GuiWidgetScreen.html new file mode 100644 index 0000000..e309ddf --- /dev/null +++ b/doc/net/minecraft/src/class-use/GuiWidgetScreen.html @@ -0,0 +1,181 @@ + + + + + + +Uses of Class net.minecraft.src.GuiWidgetScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.GuiWidgetScreen

+
+ + + + + +
+Uses of GuiWidgetScreen in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as GuiWidgetScreen
+static GuiWidgetScreenGuiWidgetScreen.instance + +
+          The initialized instance of GuiWidgetScreen.
+  +

+ + + + + + + + + +
Methods in net.minecraft.src that return GuiWidgetScreen
+static GuiWidgetScreenGuiWidgetScreen.getInstance() + +
+          get the instance of GuiWidget, creating it if needed
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/ModAction.html b/doc/net/minecraft/src/class-use/ModAction.html new file mode 100644 index 0000000..60de6e4 --- /dev/null +++ b/doc/net/minecraft/src/class-use/ModAction.html @@ -0,0 +1,263 @@ + + + + + + +Uses of Class net.minecraft.src.ModAction + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.ModAction

+
+ + + + + +
+Uses of ModAction in net.minecraft.src
+  +

+ + + + + + + + + + + + + +
Fields in net.minecraft.src declared as ModAction
+static ModActionGuiApiHelper.backModAction + +
+          This is a static ModAction to go back to the previous menu.
+static ModActionGuiApiHelper.clickModAction + +
+          This is a static ModAction to play the 'click' sound you usually hear + when pressing a button in minecraft.
+  +

+ + + + + + + + + +
Fields in net.minecraft.src with type parameters of type ModAction
+protected  java.util.ArrayList<ModAction>ModAction.mergedActions + +
+           
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return ModAction
+ ModActionModAction.mergeAction(ModAction newAction) + +
+          This method merges ModActions together into one.
+ ModActionModAction.setDefaultArguments(java.lang.Object... Arguments) + +
+          This sets the arguments to use if no or invalid arguments are provided.
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in net.minecraft.src with parameters of type ModAction
+ voidGuiApiHelper.addButton(java.lang.String text, + ModAction action, + java.lang.Boolean mergeBack) + +
+          This method adds a button to the choice menu.
+static WidgetGuiApiHelper.createChoiceMenu(java.lang.String displayText, + java.lang.Boolean showBackButton, + java.lang.Boolean autoBack, + java.lang.String[] buttonTexts, + ModAction[] buttonActions) + +
+          This method is one of the overloads to create a choice menu, so the user + is presented a textbox and user configurable buttons beneath it.
+static ButtonGuiApiHelper.makeButton(java.lang.String displayText, + ModAction action, + java.lang.Boolean addClick) + +
+          This method creates a button widget for you.
+ ModActionModAction.mergeAction(ModAction newAction) + +
+          This method merges ModActions together into one.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/ModSettingScreen.html b/doc/net/minecraft/src/class-use/ModSettingScreen.html new file mode 100644 index 0000000..adbbf10 --- /dev/null +++ b/doc/net/minecraft/src/class-use/ModSettingScreen.html @@ -0,0 +1,307 @@ + + + + + + +Uses of Class net.minecraft.src.ModSettingScreen + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.ModSettingScreen

+
+ + + + + +
+Uses of ModSettingScreen in net.minecraft.src
+  +

+ + + + + + + + + + + + + +
Fields in net.minecraft.src declared as ModSettingScreen
+ ModSettingScreenmod_GuiApiBasicExample.myModScreen + +
+           
+ ModSettingScreenmod_GuiApiIntermediateExample.myModScreen + +
+           
+  +

+ + + + + + + + + +
Fields in net.minecraft.src with type parameters of type ModSettingScreen
+static java.util.ArrayList<ModSettingScreen>ModSettingScreen.modScreens + +
+          The list of currently registered ModScreens.
+  +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
Methods in net.minecraft.src with parameters of type ModSettingScreen
+ SettingBooleanModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value) + +
+          convenience boolean setting adder
+ SettingBooleanModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value, + java.lang.String truestring, + java.lang.String falsestring) + +
+          convenience boolean setting adder
+ SettingFloatModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value) + +
+          convenience float setting adder
+ SettingFloatModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value, + float min, + float step, + float max) + +
+          convenience float setting adder
+ SettingKeyModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value) + +
+          convenience key setting adder
+ SettingIntModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int max) + +
+          convenience int setting adder
+ SettingIntModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int step, + int max) + +
+          convenience int setting adder
+ SettingMultiModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + java.lang.String... labels) + +
+          convenience multi setting adder
+ SettingTextModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + java.lang.String value) + +
+          convenience text setting adder
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/ModSettings.html b/doc/net/minecraft/src/class-use/ModSettings.html new file mode 100644 index 0000000..bba74fd --- /dev/null +++ b/doc/net/minecraft/src/class-use/ModSettings.html @@ -0,0 +1,197 @@ + + + + + + +Uses of Class net.minecraft.src.ModSettings + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.ModSettings

+
+ + + + + +
+Uses of ModSettings in net.minecraft.src
+  +

+ + + + + + + + + + + + + + + + + +
Fields in net.minecraft.src declared as ModSettings
+ ModSettingsmod_GuiApiBasicExample.mySettings + +
+           
+ ModSettingsmod_GuiApiIntermediateExample.mySettings + +
+           
+ ModSettingsSetting.parent + +
+          Reference to the ModSettings this Setting is a child of.
+  +

+ + + + + + + + + +
Fields in net.minecraft.src with type parameters of type ModSettings
+static java.util.ArrayList<ModSettings>ModSettings.all + +
+          A list of all ModSettings instances.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/Setting.html b/doc/net/minecraft/src/class-use/Setting.html new file mode 100644 index 0000000..be88027 --- /dev/null +++ b/doc/net/minecraft/src/class-use/Setting.html @@ -0,0 +1,189 @@ + + + + + + +Uses of Class net.minecraft.src.Setting + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.Setting

+
+ + + + + +
+Uses of Setting in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src with type parameters of type Setting
+ java.util.ArrayList<Setting>ModSettings.Settings + +
+          all registered settings for this mod
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src with parameters of type Setting
+ voidModSettings.append(Setting s) + +
+          add a setting to be saved.
+ voidModSettings.remove(Setting s) + +
+          removes a setting using ArrayList.remove
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingBoolean.html b/doc/net/minecraft/src/class-use/SettingBoolean.html new file mode 100644 index 0000000..b781ebf --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingBoolean.html @@ -0,0 +1,271 @@ + + + + + + +Uses of Class net.minecraft.src.SettingBoolean + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingBoolean

+
+ + + + + +
+Uses of SettingBoolean in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingBoolean
+ SettingBooleanWidgetBoolean.settingReference + +
+          The reference to the SettingBoolean that this WidgetBoolean uses.
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingBoolean
+ SettingBooleanModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value) + +
+          convenience boolean setting adder
+ SettingBooleanModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + boolean value, + java.lang.String truestring, + java.lang.String falsestring) + +
+          convenience boolean setting adder
+ SettingBooleanModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + boolean value) + +
+          convenience boolean setting adder
+ SettingBooleanModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + boolean value, + java.lang.String truestring, + java.lang.String falsestring) + +
+          convenience boolean setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingBoolean
+ java.util.ArrayList<SettingBoolean>ModSettings.getAllBooleanSettings() + +
+          Get a list of all Boolean settings for the current context.
+ java.util.ArrayList<SettingBoolean>ModSettings.getAllBooleanSettings(java.lang.String context) + +
+          Get a list of all Boolean settings for the specified context.
+  +

+ + + + + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingBoolean
WidgetBoolean(SettingBoolean setting, + java.lang.String title) + +
+          This creates a new WidgetBoolean using the SettingBoolean and String + provided.
WidgetBoolean(SettingBoolean setting, + java.lang.String title, + java.lang.String truetext, + java.lang.String falsetext) + +
+          This creates a new WidgetBoolean using the WidgetBoolean and String + provided, as well as setting the true and false text.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingFloat.html b/doc/net/minecraft/src/class-use/SettingFloat.html new file mode 100644 index 0000000..83e66cb --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingFloat.html @@ -0,0 +1,270 @@ + + + + + + +Uses of Class net.minecraft.src.SettingFloat + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingFloat

+
+ + + + + +
+Uses of SettingFloat in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingFloat
+ SettingFloatWidgetFloat.settingReference + +
+          The reference to the SettingInt that this WidgetInt uses.
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingFloat
+ SettingFloatModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value) + +
+          convenience float setting adder
+ SettingFloatModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + float value, + float min, + float step, + float max) + +
+          convenience float setting adder
+ SettingFloatModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + float value) + +
+          convenience float setting adder
+ SettingFloatModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + float value, + float min, + float step, + float max) + +
+          convenience float setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingFloat
+ java.util.ArrayList<SettingFloat>ModSettings.getAllFloatSettings() + +
+          Get a list of all Float settings for the current context.
+ java.util.ArrayList<SettingFloat>ModSettings.getAllFloatSettings(java.lang.String context) + +
+          Get a list of all Float settings for the specified context.
+  +

+ + + + + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingFloat
WidgetFloat(SettingFloat setting, + java.lang.String title) + +
+          This creates a new WidgetInt using the SettingInt and String provided.
WidgetFloat(SettingFloat setting, + java.lang.String title, + int _decimalPlaces) + +
+          This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingInt.html b/doc/net/minecraft/src/class-use/SettingInt.html new file mode 100644 index 0000000..9bfb47e --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingInt.html @@ -0,0 +1,266 @@ + + + + + + +Uses of Class net.minecraft.src.SettingInt + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingInt

+
+ + + + + +
+Uses of SettingInt in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingInt
+ SettingIntWidgetInt.settingReference + +
+          The reference to the SettingInt that this WidgetInt uses.
+  +

+ + + + + + + + + + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingInt
+ SettingIntModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int max) + +
+          convenience int setting adder
+ SettingIntModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int step, + int max) + +
+          convenience int setting adder
+ SettingIntModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int max) + +
+          convenience int setting adder
+ SettingIntModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + int min, + int step, + int max) + +
+          convenience int setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingInt
+ java.util.ArrayList<SettingInt>ModSettings.getAllIntSettings() + +
+          Get a list of all Int settings for the current context.
+ java.util.ArrayList<SettingInt>ModSettings.getAllIntSettings(java.lang.String context) + +
+          Get a list of all Int settings for the specified context.
+  +

+ + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingInt
WidgetInt(SettingInt setting, + java.lang.String title) + +
+          This creates a new WidgetInt using the SettingInt and String provided.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingKey.html b/doc/net/minecraft/src/class-use/SettingKey.html new file mode 100644 index 0000000..c844474 --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingKey.html @@ -0,0 +1,235 @@ + + + + + + +Uses of Class net.minecraft.src.SettingKey + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingKey

+
+ + + + + +
+Uses of SettingKey in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingKey
+ SettingKeyWidgetKeybinding.settingReference + +
+          The reference to the SettingKey that this WidgetKeybinding uses.
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingKey
+ SettingKeyModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value) + +
+          convenience key setting adder
+ SettingKeyModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value) + +
+          convenience key setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingKey
+ java.util.ArrayList<SettingKey>ModSettings.getAllKeySettings() + +
+          Get a list of all Key settings for the current context.
+ java.util.ArrayList<SettingKey>ModSettings.getAllKeySettings(java.lang.String context) + +
+          Get a list of all Key settings for the specified context.
+  +

+ + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingKey
WidgetKeybinding(SettingKey setting, + java.lang.String title) + +
+          This creates a new WidgetKeybinding using the WidgetKeybinding and String + provided.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingMulti.html b/doc/net/minecraft/src/class-use/SettingMulti.html new file mode 100644 index 0000000..7ccffeb --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingMulti.html @@ -0,0 +1,237 @@ + + + + + + +Uses of Class net.minecraft.src.SettingMulti + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingMulti

+
+ + + + + +
+Uses of SettingMulti in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingMulti
+ SettingMultiWidgetMulti.value + +
+          The reference to the SettingMulti that this WidgetMulti uses.
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingMulti
+ SettingMultiModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + int value, + java.lang.String... labels) + +
+          convenience multi setting adder
+ SettingMultiModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + int value, + java.lang.String... labels) + +
+          convenience multi setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingMulti
+ java.util.ArrayList<SettingMulti>ModSettings.getAllMultiSettings() + +
+          Get a list of all Multi settings for the current context.
+ java.util.ArrayList<SettingMulti>ModSettings.getAllMultiSettings(java.lang.String context) + +
+          Get a list of all Multi settings for the specified context.
+  +

+ + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingMulti
WidgetMulti(SettingMulti setting, + java.lang.String title) + +
+          This creates a new WidgetMulti using the SettingMulti and String + provided.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/SettingText.html b/doc/net/minecraft/src/class-use/SettingText.html new file mode 100644 index 0000000..2c39747 --- /dev/null +++ b/doc/net/minecraft/src/class-use/SettingText.html @@ -0,0 +1,234 @@ + + + + + + +Uses of Class net.minecraft.src.SettingText + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.SettingText

+
+ + + + + +
+Uses of SettingText in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as SettingText
+ SettingTextWidgetText.settingReference + +
+          The reference to the SettingText that this WidgetText uses.
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return SettingText
+ SettingTextModSettings.addSetting(ModSettingScreen screen, + java.lang.String nicename, + java.lang.String backendname, + java.lang.String value) + +
+          convenience text setting adder
+ SettingTextModSettings.addSetting(Widget w2, + java.lang.String nicename, + java.lang.String backendname, + java.lang.String value) + +
+          convenience text setting adder
+  +

+ + + + + + + + + + + + + +
Methods in net.minecraft.src that return types with arguments of type SettingText
+ java.util.ArrayList<SettingText>ModSettings.getAllTextSettings() + +
+          Get a list of all Text settings for the current context.
+ java.util.ArrayList<SettingText>ModSettings.getAllTextSettings(java.lang.String context) + +
+          Get a list of all Text settings for the specified context.
+  +

+ + + + + + + + +
Constructors in net.minecraft.src with parameters of type SettingText
WidgetText(SettingText setting, + java.lang.String title) + +
+          This creates a new WidgetText using the SettingText and String provided.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetBoolean.html b/doc/net/minecraft/src/class-use/WidgetBoolean.html new file mode 100644 index 0000000..61a30c8 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetBoolean.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetBoolean + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetBoolean

+
+No usage of net.minecraft.src.WidgetBoolean +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html new file mode 100644 index 0000000..2bcaafa --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html @@ -0,0 +1,165 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetClassicTwocolumn + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetClassicTwocolumn

+
+ + + + + +
+Uses of WidgetClassicTwocolumn in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as WidgetClassicTwocolumn
+ WidgetClassicTwocolumnModSettingScreen.widgetColumn + +
+          the column widget to show the child widgets in
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetFloat.html b/doc/net/minecraft/src/class-use/WidgetFloat.html new file mode 100644 index 0000000..7550aa6 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetFloat.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetFloat + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetFloat

+
+No usage of net.minecraft.src.WidgetFloat +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetInt.html b/doc/net/minecraft/src/class-use/WidgetInt.html new file mode 100644 index 0000000..fb753e2 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetInt.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetInt + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetInt

+
+No usage of net.minecraft.src.WidgetInt +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetKeybinding.html b/doc/net/minecraft/src/class-use/WidgetKeybinding.html new file mode 100644 index 0000000..0ae091a --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetKeybinding.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetKeybinding + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetKeybinding

+
+No usage of net.minecraft.src.WidgetKeybinding +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetMulti.html b/doc/net/minecraft/src/class-use/WidgetMulti.html new file mode 100644 index 0000000..86dee62 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetMulti.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetMulti + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetMulti

+
+No usage of net.minecraft.src.WidgetMulti +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetSetting.html b/doc/net/minecraft/src/class-use/WidgetSetting.html new file mode 100644 index 0000000..3671c27 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetSetting.html @@ -0,0 +1,181 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetSetting + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetSetting

+
+ + + + + +
+Uses of WidgetSetting in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as WidgetSetting
+ WidgetSettingSetting.displayWidget + +
+          A reference to the Widget that displays this setting.
+  +

+ + + + + + + + + +
Fields in net.minecraft.src with type parameters of type WidgetSetting
+static java.util.ArrayList<WidgetSetting>WidgetSetting.all + +
+          This is a list of all WidgetSetting instances.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetSimplewindow.html b/doc/net/minecraft/src/class-use/WidgetSimplewindow.html new file mode 100644 index 0000000..976ecd2 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetSimplewindow.html @@ -0,0 +1,181 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetSimplewindow + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetSimplewindow

+
+ + + + + +
+Uses of WidgetSimplewindow in net.minecraft.src
+  +

+ + + + + + + + + + + + + + + + + +
Fields in net.minecraft.src declared as WidgetSimplewindow
+ WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenBooleans + +
+           
+ WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenNumberics + +
+           
+ WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenOthers + +
+           
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetSingleRow.html b/doc/net/minecraft/src/class-use/WidgetSingleRow.html new file mode 100644 index 0000000..6b95be5 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetSingleRow.html @@ -0,0 +1,166 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetSingleRow + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetSingleRow

+
+ + + + + +
+Uses of WidgetSingleRow in net.minecraft.src
+  +

+ + + + + + + + + +
Fields in net.minecraft.src declared as WidgetSingleRow
+ WidgetSingleRowWidgetSimplewindow.buttonBar + +
+          This is a reference to the row at the bottom that contains the back + button.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html b/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html new file mode 100644 index 0000000..53e0ad8 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetSinglecolumn + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetSinglecolumn

+
+No usage of net.minecraft.src.WidgetSinglecolumn +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetSlider.html b/doc/net/minecraft/src/class-use/WidgetSlider.html new file mode 100644 index 0000000..6145fc8 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetSlider.html @@ -0,0 +1,173 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetSlider + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetSlider

+
+ + + + + +
+Uses of WidgetSlider in net.minecraft.src
+  +

+ + + + + + + + + + + + + +
Fields in net.minecraft.src declared as WidgetSlider
+ WidgetSliderWidgetFloat.slider + +
+          The reference to the underlying WidgetSlider.
+ WidgetSliderWidgetInt.slider + +
+          The reference to the underlying WidgetSlider.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/WidgetText.html b/doc/net/minecraft/src/class-use/WidgetText.html new file mode 100644 index 0000000..d30b2b5 --- /dev/null +++ b/doc/net/minecraft/src/class-use/WidgetText.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.WidgetText + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.WidgetText

+
+No usage of net.minecraft.src.WidgetText +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html new file mode 100644 index 0000000..6a6ed51 --- /dev/null +++ b/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.mod_GuiApiBasicExample + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.mod_GuiApiBasicExample

+
+No usage of net.minecraft.src.mod_GuiApiBasicExample +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html new file mode 100644 index 0000000..b554854 --- /dev/null +++ b/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html @@ -0,0 +1,142 @@ + + + + + + +Uses of Class net.minecraft.src.mod_GuiApiIntermediateExample + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Class
net.minecraft.src.mod_GuiApiIntermediateExample

+
+No usage of net.minecraft.src.mod_GuiApiIntermediateExample +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/mod_GuiApiBasicExample.html new file mode 100644 index 0000000..cecb837 --- /dev/null +++ b/doc/net/minecraft/src/mod_GuiApiBasicExample.html @@ -0,0 +1,337 @@ + + + + + + +mod_GuiApiBasicExample + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class mod_GuiApiBasicExample

+
+java.lang.Object
+  extended by BaseMod
+      extended by net.minecraft.src.mod_GuiApiBasicExample
+
+
+
+
public class mod_GuiApiBasicExample
extends BaseMod
+ + +

+This is the BASIC example of GuiAPI usage. We are going to create a + ModSettings object, and use the 'easy' way of getting settings. Note, the + easy was is slower than the intermediate way of doing things, so if you are + getting your setting values several times a second you might want to read + that after this tutorial. As well, this tutorial will show you some usage of + the 'makeButton' and 'showTextDisplay' method in the GuiApiHelper class. +

+ +

+

+
Author:
+
ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + +
+Field Summary
+ ModSettingScreenmyModScreen + +
+           
+ ModSettingsmySettings + +
+           
+  + + + + + + + + + + +
+Constructor Summary
mod_GuiApiBasicExample() + +
+           
+  + + + + + + + + + + + + + + + +
+Method Summary
+ voidShowAllTheSettings() + +
+           
+ java.lang.StringVersion() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+myModScreen

+
+public ModSettingScreen myModScreen
+
+
+
+
+
+ +

+mySettings

+
+public ModSettings mySettings
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+mod_GuiApiBasicExample

+
+public mod_GuiApiBasicExample()
+
+
+ + + + + + + + +
+Method Detail
+ +

+ShowAllTheSettings

+
+public void ShowAllTheSettings()
+
+
+
+
+
+
+ +

+Version

+
+public java.lang.String Version()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html new file mode 100644 index 0000000..c537b4d --- /dev/null +++ b/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html @@ -0,0 +1,372 @@ + + + + + + +mod_GuiApiIntermediateExample + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ +

+ +net.minecraft.src +
+Class mod_GuiApiIntermediateExample

+
+java.lang.Object
+  extended by BaseMod
+      extended by net.minecraft.src.mod_GuiApiIntermediateExample
+
+
+
+
public class mod_GuiApiIntermediateExample
extends BaseMod
+ + +

+This is the INTERMEDIATE example of GuiAPI usage. We are going to do the more + correct, but slightly more complex, way of retrieving settings, learn about + Callback usage within GuiAPI, and some more interesting usages of ModAction + relating to that. We will also learn about subscreens and how to use them + within your mod. We'll also be looking at the createChoiceMenu method in + GuiApiHelper. +

+ +

+

+
Author:
+
ShaRose
+
+
+ +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Field Summary
+ ModSettingScreenmyModScreen + +
+           
+ ModSettingsmySettings + +
+           
+ WidgetSimplewindowsubscreenBooleans + +
+           
+ WidgetSimplewindowsubscreenNumberics + +
+           
+ WidgetSimplewindowsubscreenOthers + +
+           
+  + + + + + + + + + + +
+Constructor Summary
mod_GuiApiIntermediateExample() + +
+           
+  + + + + + + + + + + + +
+Method Summary
+ java.lang.StringVersion() + +
+           
+ + + + + + + +
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
+  +

+ + + + + + + + +
+Field Detail
+ +

+myModScreen

+
+public ModSettingScreen myModScreen
+
+
+
+
+
+ +

+mySettings

+
+public ModSettings mySettings
+
+
+
+
+
+ +

+subscreenBooleans

+
+public WidgetSimplewindow subscreenBooleans
+
+
+
+
+
+ +

+subscreenNumberics

+
+public WidgetSimplewindow subscreenNumberics
+
+
+
+
+
+ +

+subscreenOthers

+
+public WidgetSimplewindow subscreenOthers
+
+
+
+
+ + + + + + + + +
+Constructor Detail
+ +

+mod_GuiApiIntermediateExample

+
+public mod_GuiApiIntermediateExample()
+
+
+ + + + + + + + +
+Method Detail
+ +

+Version

+
+public java.lang.String Version()
+
+
+
+
+
+ +
+ + + + + + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/package-frame.html b/doc/net/minecraft/src/package-frame.html new file mode 100644 index 0000000..835cb27 --- /dev/null +++ b/doc/net/minecraft/src/package-frame.html @@ -0,0 +1,88 @@ + + + + + + +net.minecraft.src + + + + + + + + + + + +net.minecraft.src + + + + +
+Classes  + +
+GuiApiHelper +
+GuiModScreen +
+GuiModSelect +
+GuiOptions +
+GuiWidgetScreen +
+mod_GuiApiBasicExample +
+mod_GuiApiIntermediateExample +
+ModAction +
+ModSettings +
+ModSettingScreen +
+Setting +
+SettingBoolean +
+SettingFloat +
+SettingInt +
+SettingKey +
+SettingMulti +
+SettingText +
+WidgetBoolean +
+WidgetClassicTwocolumn +
+WidgetFloat +
+WidgetInt +
+WidgetKeybinding +
+WidgetMulti +
+WidgetSetting +
+WidgetSimplewindow +
+WidgetSinglecolumn +
+WidgetSingleRow +
+WidgetSlider +
+WidgetText
+ + + + diff --git a/doc/net/minecraft/src/package-summary.html b/doc/net/minecraft/src/package-summary.html new file mode 100644 index 0000000..944bc17 --- /dev/null +++ b/doc/net/minecraft/src/package-summary.html @@ -0,0 +1,271 @@ + + + + + + +net.minecraft.src + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+

+Package net.minecraft.src +

+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Class Summary
GuiApiHelperThis is just a class for helping ease common and somewhat long operations + with GuiAPI.
GuiModScreenGuiModScreen is the minecraft screen subclass that controls and renders TWL.
GuiModSelectThis is a Subclass of GuiModScreen, and acts as the entry point from the + button in the options menu.
GuiOptions 
GuiWidgetScreenTWL Widget that switches out child widgets.
mod_GuiApiBasicExampleThis is the BASIC example of GuiAPI usage.
mod_GuiApiIntermediateExampleThis is the INTERMEDIATE example of GuiAPI usage.
ModActionThis class is a helper designed to make it easier to use callbacks.
ModSettingsMain interface class for Settings API
ModSettingScreenThis is the class that GuiModSelect uses to show Subscreens.
Setting<T>This is the base class for Settings.
SettingBooleanThis is the Setting type for Booleans.
SettingFloatThis is the Setting type for Floats.
SettingIntThis is the Setting type for Ints.
SettingKeyThis is the Setting type for Keys.
SettingMultiThis is the Setting type for Multis.
SettingTextThis is the Setting type for Text.
WidgetBooleanThis is the Widget for boolean settings.
WidgetClassicTwocolumnThis widget is designed to arrange widgets into two columns.
WidgetFloatThis is the Widget for Float settings.
WidgetIntThis is the Widget for Integer settings.
WidgetKeybindingThis is the Widget for Key binding settings.
WidgetMultiThis is the Widget for Multi settings.
WidgetSettingThis is the base class for Widgets that are supposed to be front ends for + Settings.
WidgetSimplewindowThis widget is designed to make an easy base for menus.
WidgetSinglecolumnThis is a widget designed to arrange other widgets into a single column.
WidgetSingleRowThis is a layout widget designed to arrange your widgets in a row.
WidgetSliderThis is a simple extension of ValueAdjusterFloat so that it always updates + the setting.
WidgetTextThis is the Widget for Text settings.
+  + +

+

+
+
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/package-tree.html b/doc/net/minecraft/src/package-tree.html new file mode 100644 index 0000000..45b29d9 --- /dev/null +++ b/doc/net/minecraft/src/package-tree.html @@ -0,0 +1,184 @@ + + + + + + +net.minecraft.src Class Hierarchy + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For Package net.minecraft.src +

+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/net/minecraft/src/package-use.html b/doc/net/minecraft/src/package-use.html new file mode 100644 index 0000000..3639093 --- /dev/null +++ b/doc/net/minecraft/src/package-use.html @@ -0,0 +1,260 @@ + + + + + + +Uses of Package net.minecraft.src + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Uses of Package
net.minecraft.src

+
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
+Classes in net.minecraft.src used by net.minecraft.src
GuiApiHelper + +
+          This is just a class for helping ease common and somewhat long operations + with GuiAPI.
GuiModScreen + +
+          GuiModScreen is the minecraft screen subclass that controls and renders TWL.
GuiWidgetScreen + +
+          TWL Widget that switches out child widgets.
ModAction + +
+          This class is a helper designed to make it easier to use callbacks.
ModSettings + +
+          Main interface class for Settings API
ModSettingScreen + +
+          This is the class that GuiModSelect uses to show Subscreens.
Setting + +
+          This is the base class for Settings.
SettingBoolean + +
+          This is the Setting type for Booleans.
SettingFloat + +
+          This is the Setting type for Floats.
SettingInt + +
+          This is the Setting type for Ints.
SettingKey + +
+          This is the Setting type for Keys.
SettingMulti + +
+          This is the Setting type for Multis.
SettingText + +
+          This is the Setting type for Text.
WidgetClassicTwocolumn + +
+          This widget is designed to arrange widgets into two columns.
WidgetSetting + +
+          This is the base class for Widgets that are supposed to be front ends for + Settings.
WidgetSimplewindow + +
+          This widget is designed to make an easy base for menus.
WidgetSingleRow + +
+          This is a layout widget designed to arrange your widgets in a row.
WidgetSlider + +
+          This is a simple extension of ValueAdjusterFloat so that it always updates + the setting.
+  +

+


+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/overview-tree.html b/doc/overview-tree.html new file mode 100644 index 0000000..684cf66 --- /dev/null +++ b/doc/overview-tree.html @@ -0,0 +1,186 @@ + + + + + + +Class Hierarchy + + + + + + + + + + + + +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+
+

+Hierarchy For All Packages

+
+
+
Package Hierarchies:
net.minecraft.src
+
+

+Class Hierarchy +

+ +
+ + + + + + + + + + + + + + + +
+ +
+ + + +
+ + + diff --git a/doc/package-list b/doc/package-list new file mode 100644 index 0000000..66d9a78 --- /dev/null +++ b/doc/package-list @@ -0,0 +1 @@ +net.minecraft.src diff --git a/doc/resources/inherit.gif b/doc/resources/inherit.gif new file mode 100644 index 0000000000000000000000000000000000000000..c814867a13deb0ca7ea2156c6ca1d5a03372af7e GIT binary patch literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X literal 0 HcmV?d00001 diff --git a/doc/stylesheet.css b/doc/stylesheet.css new file mode 100644 index 0000000..6ea9e51 --- /dev/null +++ b/doc/stylesheet.css @@ -0,0 +1,29 @@ +/* Javadoc style sheet */ + +/* Define colors, fonts and other style attributes here to override the defaults */ + +/* Page background color */ +body { background-color: #FFFFFF; color:#000000 } + +/* Headings */ +h1 { font-size: 145% } + +/* Table colors */ +.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ +.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ +.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ + +/* Font used in left-hand frame lists */ +.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } +.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } +.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } + +/* Navigation bar fonts and colors */ +.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ +.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ +.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} +.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} + +.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} +.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} + diff --git a/javadoc.xml b/javadoc.xml new file mode 100644 index 0000000..f0445b6 --- /dev/null +++ b/javadoc.xml @@ -0,0 +1,6 @@ + + + + + + diff --git a/mcp/GuiApiHelper.java b/mcp/GuiApiHelper.java new file mode 100644 index 0000000..7233ba0 --- /dev/null +++ b/mcp/GuiApiHelper.java @@ -0,0 +1,392 @@ +package net.minecraft.src; + +import java.util.AbstractMap; +import java.util.ArrayList; + +import de.matthiasmann.twl.Button; +import de.matthiasmann.twl.TextArea; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.model.SimpleButtonModel; +import de.matthiasmann.twl.textarea.HTMLTextAreaModel; +import de.matthiasmann.twl.textarea.SimpleTextAreaModel; +import de.matthiasmann.twl.textarea.TextAreaModel; + + +/** + * This is just a class for helping ease common and somewhat long operations + * with GuiAPI. + * + * @author ShaRose + */ +public class GuiApiHelper +{ + /** + * This is a static ModAction to go back to the previous menu. + */ + public final static ModAction backModAction; + /** + * This is a static ModAction to play the 'click' sound you usually hear + * when pressing a button in minecraft. + */ + public final static ModAction clickModAction; + static + { + backModAction = new ModAction(GuiModScreen.class, "back"); + GuiApiHelper.backModAction.nameRef = "Helper Back ModAction"; + clickModAction = new ModAction(GuiModScreen.class, "clicksound"); + GuiApiHelper.clickModAction.nameRef = "Helper ClickSound ModAction"; + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload is the most advanced option, though uses more code. Call this + * method, use the returned GuiApiHelper instance to add the buttons you + * want, then generate the widget. + * + * @param displayText + * The text to be displayed to the user. + * @return An instance of GuiApiHelper. Use the addButton methods to add + * buttons to the menu, and then when you are done use genWidget to + * create the choice menu. + */ + public static GuiApiHelper createChoiceMenu(String displayText) + { + return new GuiApiHelper(displayText); + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload uses variable arguments to choose it. + * + * @param displayText + * The text to display. + * @param showBackButton + * Whether to automatically show a 'back' button or not. + * @param autoBack + * Whether to automatically merge a 'back' ModAction with the + * buttons. + * @param args + * The button information. Enter it in the form of String (Name + * on the button), ModAction (The ModAction to call when the + * button is pressed). + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget createChoiceMenu(String displayText, + Boolean showBackButton, Boolean autoBack, Object... args) + { + if (args.length % 2 == 1) + { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + try + { + for (int i = 0; i < args.length; i += 2) + { + helper.addButton((String) args[i], (ModAction) args[i + 1], + autoBack); + } + } + catch (Throwable e) + { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button.", + e); + } + return helper.genWidget(showBackButton); + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload uses two tables that match up to create the buttons. + * + * @param displayText + * The text to display. + * @param showBackButton + * Whether to automatically show a 'back' button or not. + * @param autoBack + * Whether to automatically merge a 'back' ModAction with the + * buttons. + * @param buttonTexts + * The text for the buttons you want to show. + * @param buttonActions + * The corresponding ModActions for the buttons. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget createChoiceMenu(String displayText, + Boolean showBackButton, Boolean autoBack, String[] buttonTexts, + ModAction[] buttonActions) + { + if (buttonTexts.length != buttonActions.length) + { + throw new IllegalArgumentException( + "Arguments not in correct format. buttonTexts needs to be the same size as buttonActions."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + for (int i = 0; i < buttonTexts.length; i += 2) + { + helper.addButton(buttonTexts[i], buttonActions[i], autoBack); + } + return helper.genWidget(showBackButton); + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param action + * The ModAction to call when clicked. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @return The new Button widget. + */ + public static Button makeButton(String displayText, ModAction action, + Boolean addClick) + { + SimpleButtonModel simplebuttonmodel = new SimpleButtonModel(); + if (addClick) + { + action = action.mergeAction(GuiApiHelper.clickModAction); + } + simplebuttonmodel.addActionCallback(action); + Button button = new Button(simplebuttonmodel); + button.setText(displayText); + return button; + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param methodName + * The name of the method to call when clicked. + * @param me + * The Object or Class that has the method you want to call. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @return The new Button widget. + */ + public static Button makeButton(String displayText, String methodName, + Object me, Boolean addClick) + { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName), addClick); + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param methodName + * The name of the method to call when clicked. + * @param me + * The Object or Class that has the method you want to call. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @param classes + * The argument classes for the method you want to call. + * @param arguments + * The defaulted arguments you want to use. + * @return The new Button widget. + */ + @SuppressWarnings("rawtypes") + public static Button makeButton(String displayText, String methodName, + Object me, Boolean addClick, Class[] classes, Object... arguments) + { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName, classes).setDefaultArguments(arguments), addClick); + } + + /** + * This is a small helper to create TextAreas, which is basically a label + * that wraps text. + * + * @param text + * The text to show. + * @param htmlMode + * Whether to create the Textbox to render HTML, or standard + * text. + * @return The TextArea widget. + */ + public static TextArea makeTextArea(String text, Boolean htmlMode) + { + if (!htmlMode) + { + SimpleTextAreaModel model = new SimpleTextAreaModel(); + model.setText(text, false); + return new TextArea(model); + } + else + { + HTMLTextAreaModel model = new HTMLTextAreaModel(); + model.setHtml(text); + return new TextArea(model); + } + } + + /** + * This is a small helper method to set the text of a TextArea. It supposed + * Simple and HTML TextAreas. + * + * @param textArea + * The TextArea you wish to set the text of. + * @param text + * The text to set. + */ + public static void setTextAreaText(TextArea textArea, String text) + { + TextAreaModel model = textArea.getModel(); + if (model instanceof SimpleTextAreaModel) + { + ((SimpleTextAreaModel) model).setText(text, false); + } + else + { + ((HTMLTextAreaModel) model).setHtml(text); + } + } + + /** + * This method is designed to provide an easy way to make popups or + * information notices. + * + * @param titleText + * This is the text for the title on top of the display. If you + * set this to null, it will simply not have a top bar. + * @param displayText + * This is the text to be displayed below the title bar (If there + * is one). + * @param buttonText + * This is the text you want the back button to have. Something + * like 'OK' or 'Back' is what you usually use. + * @param htmlMode + * This is if you want the text to be rendered as if it were + * HTML. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget makeTextDisplayAndGoBack(String titleText, + String displayText, String buttonText, Boolean htmlMode) + { + WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); + widget.add(GuiApiHelper.makeTextArea(displayText, htmlMode)); + widget.overrideHeight = false; + WidgetSimplewindow window = new WidgetSimplewindow(widget, titleText); + window.backButton.setText(buttonText); + return window; + } + + private ArrayList> buttonInfo_; + private String displayText_; + + private GuiApiHelper(String displayText) + { + displayText_ = displayText; + buttonInfo_ = new ArrayList>(); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param action + * The action to use when pressed. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + */ + public void addButton(String text, ModAction action, Boolean mergeBack) + { + ModAction buttonAction = action; + if (mergeBack) + { + buttonAction = buttonAction.mergeAction(GuiApiHelper.backModAction); + buttonAction.nameRef = "Button '" + text + "' with back."; + } + buttonInfo_.add(new AbstractMap.SimpleEntry(text, + buttonAction)); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param methodName + * The method to call. + * @param me + * The object or class with the method you wish to call. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + */ + public void addButton(String text, String methodName, Object me, + Boolean mergeBack) + { + addButton(text, new ModAction(me, methodName), mergeBack); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param methodName + * The method to call. + * @param me + * The object or class with the method you wish to call. + * @param types + * The types of the arguments required for the method. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + * @param arguments + * The arguments you wish to use when this button is pressed. + */ + @SuppressWarnings("rawtypes") + public void addButton(String text, String methodName, Object me, + Class[] types, Boolean mergeBack, Object... arguments) + { + addButton(text, + new ModAction(me, methodName, types) + .setDefaultArguments(arguments), mergeBack); + } + + /** + * This creates the Choice Menu from the Display Text entered earlier and + * the buttons you have added. + * + * @param showBackButton + * If true, show a bar on the bottom with a button to go back to + * the previous menu. If false, don't. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public Widget genWidget(Boolean showBackButton) + { + WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); + TextArea textarea = GuiApiHelper.makeTextArea(displayText_, false); + widget.add(textarea); + widget.heightOverrideExceptions.put(textarea, 0); + for (AbstractMap.SimpleEntry entry : buttonInfo_) + { + widget.add(GuiApiHelper.makeButton(entry.getKey(), + entry.getValue(), true)); + } + WidgetSimplewindow window = new WidgetSimplewindow(widget, null, + showBackButton); + return window; + } +} diff --git a/mcp/GuiModScreen.java b/mcp/GuiModScreen.java new file mode 100644 index 0000000..bf0d7dd --- /dev/null +++ b/mcp/GuiModScreen.java @@ -0,0 +1,173 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; +import de.matthiasmann.twl.renderer.lwjgl.RenderScale; + + +/** + * GuiModScreen is the minecraft screen subclass that controls and renders TWL. + * normally you will want to call it's static methods to use it, though + * subclassing it and/or instantiating it are also possible. however, to do so + * would use unsafe api (I still might change things.) + * + * @author lahwran + * @see show + */ +public class GuiModScreen extends GuiScreen +{ + /** + * Used by static methods. Is the currently displayed screen. + */ + public static GuiModScreen currentScreen; + + /** + * Hide current screen and show parent screen. + */ + public static void back() + { + if (GuiModScreen.currentScreen != null) + { + Minecraft m = ModSettings.getMcinst(); + m.displayGuiScreen(GuiModScreen.currentScreen.parentScreen); + if (GuiModScreen.currentScreen.parentScreen instanceof GuiModScreen) + { + GuiModScreen.currentScreen = (GuiModScreen) GuiModScreen.currentScreen.parentScreen; + GuiModScreen.currentScreen.setActive(); + } + else + { + GuiModScreen.currentScreen = null; + } + } + } + + /** + * Play a click sound. Call after the user performs an action. Already + * called from setting widgets. + */ + public static void clicksound() + { + Minecraft m = ModSettings.getMcinst(); + m.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + } + + /** + * Show a screen - GuiModScreen version. Show an instance of GuiModScreen - + * Does not set the parent screen, you have to deal with that yourself! + * + * @param screen + * GuiModScreen instance or subclass to show with parent screen + * already set to current screen. + */ + public static void show(GuiModScreen screen) + { + Minecraft m = ModSettings.getMcinst(); + m.displayGuiScreen(screen); + screen.setActive(); + } + + /** + * Show a screen - TWL widget version. This is the recommended way to show a + * TWL widget as a screen. + * + * @param screen + * widget to show - will be sized to size of screen when twl was + * started. + */ + public static void show(Widget screen) + { + GuiModScreen.show(new GuiModScreen(GuiModScreen.currentScreen, screen)); + } + + /** + * The type of background to draw. 0 is the default background. If you are + * in game, it will shade the screen grey before it draws your widget, like + * when you pause the game normally. If you are not in game, it will show + * the dirt background, like on the main menu. 1 is force the main menu + * (dirt) background. Anything else is no background, completely clear. + */ + public int backgroundType = 0; + /** + * Actual main widget of this GuiModScreen + */ + public Widget mainwidget; + /** + * Reference to parent screen, is used to go back() + * + * @see back() + */ + public GuiScreen parentScreen; + + /** + * Only use this constructor from subclasses. does not take a widget, so + * that the subclass can build the widget before storing it. put your main + * widget in mainwidget, of course. + * + * @param screen + * parent screen + */ + protected GuiModScreen(GuiScreen screen) + { + parentScreen = screen; + GuiModScreen.currentScreen = this; + field_948_f = false; + } + + /** + * main constructor, to be used if you are instantiating this class. + * + * @param screen + * parent screen - make sure this is right! + * @param widget + * main widget to display + */ + public GuiModScreen(GuiScreen screen, Widget widget) + { + mainwidget = widget; + parentScreen = screen; + GuiModScreen.currentScreen = this; + field_948_f = false; + } + + @Override + public void drawScreen(int var1, int var2, float var3) + { + switch (backgroundType) + { + case 0: + { + drawDefaultBackground(); + break; + } + case 1: + { + drawBackground(0); + break; + } + default: + { + break; + } + } + LWJGLRenderer var4 = (LWJGLRenderer) GuiWidgetScreen.getInstance().gui + .getRenderer(); + ScaledResolution var5 = new ScaledResolution( + GuiWidgetScreen.getInstance().minecraftInstance.gameSettings, + GuiWidgetScreen.getInstance().minecraftInstance.displayWidth, + GuiWidgetScreen.getInstance().minecraftInstance.displayHeight); + RenderScale.scale = var5.scaleFactor; + var4.syncViewportSize(); + GuiWidgetScreen.getInstance().gui.update(); + } + + @Override + public void handleInput() + {} + + private void setActive() + { + GuiWidgetScreen.getInstance().setScreen(mainwidget); + } +} diff --git a/mcp/GuiModSelect.java b/mcp/GuiModSelect.java new file mode 100644 index 0000000..6454880 --- /dev/null +++ b/mcp/GuiModSelect.java @@ -0,0 +1,36 @@ +package net.minecraft.src; + +/** + * This is a Subclass of GuiModScreen, and acts as the entry point from the + * button in the options menu. This is just used internally. + * + * @author lahwran + */ +public class GuiModSelect extends GuiModScreen +{ + @SuppressWarnings("unused") + private static void selectScreen(Integer i) + { + GuiModScreen.show(ModSettingScreen.modScreens.get(i).theWidget); + GuiModScreen.clicksound(); + } + + protected GuiModSelect(GuiScreen screen) + { + super(screen); + WidgetClassicTwocolumn w = new WidgetClassicTwocolumn(); + w.verticalPadding = 10; + for (int i = 0; i < ModSettingScreen.modScreens.size(); i++) + { + ModSettingScreen m = ModSettingScreen.modScreens.get(i); + w.add(GuiApiHelper.makeButton(m.buttonTitle, "selectScreen", + GuiModSelect.class, false, new Class[] + { Integer.class }, i)); + } + WidgetSimplewindow mainwidget = new WidgetSimplewindow(w, + "Select a Mod"); + mainwidget.hPadding = 0; + mainwidget.mainWidget.setTheme("scrollpane-notch"); + this.mainwidget = mainwidget; + } +} diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java new file mode 100644 index 0000000..8b93d89 --- /dev/null +++ b/mcp/GuiOptions.java @@ -0,0 +1,91 @@ +package net.minecraft.src; + +import net.minecraft.src.EnumOptions; +import net.minecraft.src.GameSettings; +import net.minecraft.src.GuiButton; +import net.minecraft.src.GuiControls; +import net.minecraft.src.GuiModScreen; +import net.minecraft.src.GuiModSelect; +import net.minecraft.src.GuiScreen; +import net.minecraft.src.GuiSlider; +import net.minecraft.src.GuiSmallButton; +import net.minecraft.src.GuiVideoSettings; +import net.minecraft.src.ModSettingScreen; +import net.minecraft.src.StringTranslate; +import net.minecraft.src.WidgetSetting; + +public class GuiOptions extends GuiScreen { + + private GuiScreen parentScreen; + protected String screenTitle = "Options"; + private GameSettings options; + private static EnumOptions[] field_22135_k = new EnumOptions[]{EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.DIFFICULTY}; + + + public GuiOptions(GuiScreen var1, GameSettings var2) { + this.parentScreen = var1; + this.options = var2; + } + + public void initGui() { + StringTranslate var1 = StringTranslate.getInstance(); + this.screenTitle = var1.translateKey("options.title"); + int var2 = 0; + EnumOptions[] var3 = field_22135_k; + int var4 = var3.length; + + for(int var5 = 0; var5 < var4; ++var5) { + EnumOptions var6 = var3[var5]; + if(!var6.getEnumFloat()) { + this.controlList.add(new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6))); + } else { + this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); + } + + ++var2; + } + + this.controlList.add(new GuiButton(101, this.width / 2 - 100, this.height / 6 + 96, var1.translateKey("options.video"))); + this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 120, var1.translateKey("options.controls"))); + this.controlList.add(new GuiButton(300, this.width / 2 - 100, this.height / 6 + 144, "Global Mod Settings")); + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + } + + protected void actionPerformed(GuiButton var1) { + if(var1.enabled) { + if(var1.id < 100 && var1 instanceof GuiSmallButton) { + this.options.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); + var1.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + } + + if(var1.id == 101) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); + } + + if(var1.id == 100) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiControls(this, this.options)); + } + + if(var1.id == 200) { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentScreen); + } + + if(var1.id == 300) { + this.mc.gameSettings.saveOptions(); + ModSettingScreen.guiContext = ""; + WidgetSetting.updateAll(); + GuiModScreen.show((GuiModScreen)(new GuiModSelect(this))); + } + + } + } + + public void drawScreen(int var1, int var2, float var3) { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } +} diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java new file mode 100644 index 0000000..0caa627 --- /dev/null +++ b/mcp/GuiWidgetScreen.java @@ -0,0 +1,159 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; +import de.matthiasmann.twl.GUI; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.input.lwjgl.LWJGLInput; +import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; +import de.matthiasmann.twl.theme.ThemeManager; + + +/** + * TWL Widget that switches out child widgets. the Minecraft gui end and twl + * rendering is managed from GuiModScreen. + * + * @author lahwran + */ +public class GuiWidgetScreen extends Widget +{ + /** + * The initialized instance of GuiWidgetScreen. + */ + public static GuiWidgetScreen instance; + /** + * The height of the screen that the widget will render on. + */ + public static int screenheight; + /** + * The width of the screen that the widget will render on. + */ + public static int screenwidth; + + /** + * get the instance of GuiWidget, creating it if needed + * + * @return GuiWidgetScreen singleton + */ + public static GuiWidgetScreen getInstance() + { + if (GuiWidgetScreen.instance != null) + { + return GuiWidgetScreen.instance; + } + else + { + try + { + GuiWidgetScreen.instance = new GuiWidgetScreen(); + GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); + String themename = "twlGuiTheme.xml"; + GuiWidgetScreen.instance.gui = new GUI( + GuiWidgetScreen.instance, + GuiWidgetScreen.instance.renderer, new LWJGLInput()); + ModSettings.dbgout(GuiWidgetScreen.class.getClassLoader() + .getResource(themename).toString()); + GuiWidgetScreen.instance.theme = ThemeManager + .createThemeManager(GuiWidgetScreen.class + .getClassLoader().getResource(themename), + GuiWidgetScreen.instance.renderer); + if (GuiWidgetScreen.instance.theme == null) + { + throw new RuntimeException( + "I don't think you installed the theme correctly ..."); + } + GuiWidgetScreen.instance.setTheme(""); + GuiWidgetScreen.instance.gui + .applyTheme(GuiWidgetScreen.instance.theme); + GuiWidgetScreen.instance.minecraftInstance = ModSettings + .getMcinst(); + GuiWidgetScreen.instance.screenSize = new ScaledResolution( + GuiWidgetScreen.instance.minecraftInstance.gameSettings, + GuiWidgetScreen.instance.minecraftInstance.displayWidth, + GuiWidgetScreen.instance.minecraftInstance.displayHeight); + } + catch (Throwable e) + { + e.printStackTrace(); + RuntimeException e2 = new RuntimeException( + "error loading theme"); + e2.initCause(e); + throw e2; + } + return GuiWidgetScreen.instance; + } + } + + /** + * The widget that is currently displayed. + */ + public Widget currentWidget = null; + /** + * This is a reference to a TWL class that is used to render the widgets. + */ + public GUI gui = null; + /** + * This is a reference to Minecraft. + */ + public Minecraft minecraftInstance; + /** + * This is the rendered used by TWL. + */ + public LWJGLRenderer renderer = null; + /** + * This is the ScaledResolution class that is used to scale all of the + * widgets. + */ + public ScaledResolution screenSize = null; + /** + * This the the ThemeManager for GuiAPI. + */ + public ThemeManager theme = null; + + /** + * This creates a new instance of GuiWidgetScreen. It should only be used + * internally. Please use the static method getInstance() instead. + */ + public GuiWidgetScreen() + {} + + @Override + public void layout() + { + screenSize = new ScaledResolution(minecraftInstance.gameSettings, + minecraftInstance.displayWidth, minecraftInstance.displayHeight); + if (currentWidget != null) + { + GuiWidgetScreen.screenwidth = screenSize.getScaledWidth(); + GuiWidgetScreen.screenheight = screenSize.getScaledHeight(); + currentWidget.setSize(GuiWidgetScreen.screenwidth, + GuiWidgetScreen.screenheight); + currentWidget.setPosition(0, 0); + } + } + + /** + * Removes all children and clears the current widget. + */ + public void resetScreen() + { + removeAllChildren(); + currentWidget = null; + } + + /** + * to be called only from GuiModScreen, sets the widget to display. + * GuiModScreen manages this. + * + * @param w + * widget to display + */ + public void setScreen(Widget widget) + { + gui.resyncTimerAfterPause(); + gui.clearKeyboardState(); + gui.clearMouseState(); + removeAllChildren(); + add(widget); + currentWidget = widget; + } +} diff --git a/mcp/ModAction.java b/mcp/ModAction.java new file mode 100644 index 0000000..a029eec --- /dev/null +++ b/mcp/ModAction.java @@ -0,0 +1,333 @@ +package net.minecraft.src; + +import java.beans.PropertyChangeEvent; +import java.beans.PropertyChangeListener; +import java.lang.reflect.Method; +import java.security.InvalidParameterException; +import java.util.ArrayList; + + +/** + * This class is a helper designed to make it easier to use callbacks. It + * implements Runnable and PropertyChangeListener, and you can use it in several + * ways. + * + * @author _303 + * @author ShaRose + */ +@SuppressWarnings("rawtypes") +public class ModAction implements Runnable, PropertyChangeListener +{ + /** + * The 'dataRef' field is an extra, unused field you can use as a key, or + * something specific to track. + */ + public Object dataRef; + protected Object[] defaultArguments; + protected ArrayList mergedActions = new ArrayList(); + protected String methodName; + protected Class[] methodParams = new Class[0]; + /** + * The 'nameRef' field is also something you can use to track your + * ModActions. + */ + public String nameRef; + protected Object objectRef; + + /** + * This is the most common ModAction constructor. You simply specify what + * has the method you want, and the method's name and (Optionally) the + * parameters. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, Class... params) + { + nameRef = method; + methodParams = params; + setupHandler(o, method); + } + + /** + * This is an overload to allow the dataRef object. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param data + * A specific key for identifying this ModAction. Basically + * something you can use to track it. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, Object data, Class... params) + { + this(o, method, params); + dataRef = data; + } + + /** + * This is an overload to allow the nameRef string. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param name + * The name of this ModAction. Something else you can use to keep + * track, and this is included within exceptions. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, String name, Class... params) + { + this(o, method, params); + nameRef = name; + } + + /** + * This is an overload to allow the nameRef string and dataRef object. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param name + * The name of this ModAction. Something else you can use to keep + * track, and this is included within exceptions. + * @param data + * A specific key for identifying this ModAction. Basically + * something you can use to track it. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, String name, Object data, + Class... params) + { + this(o, method, params); + nameRef = name; + dataRef = data; + } + + /** + * This is a constructor that is only supposed to be used internally. It + * sets no actual handler, only a name. + * + * @param name + * The name to use for this ModAction. + */ + protected ModAction(String name) + { + nameRef = name; + } + + @SuppressWarnings("unchecked") + protected Boolean argsMatch(Class[] classTypes, Object[] arguments) + { + if (classTypes.length != arguments.length) + { + return false; + } + for (int i = 0; i < classTypes.length; i++) + { + if (!classTypes[i].isAssignableFrom(arguments[i].getClass())) + { + return false; + } + } + return true; + } + + /** + * This calls this ModAction and any Merged actions with the provided + * arguments. If the arguments do not match it will try using the default + * arguments, if they exist. If not, it will throw an exception. + * + * @param args + * The arguments to try and call for the ModAction (And any + * merged ModActions) + * @return The return values for each ModAction. + * @throws Exception + * Any exception thrown when the ModAction attempts to run. + */ + public Object[] call(Object... args) throws Exception + { + try + { + if (mergedActions.isEmpty()) + { + return new Object[] + { callInt(args) }; + } + else + { + Object[] returnvals = new Object[mergedActions.size()]; + for (int i = 0; i < returnvals.length; i++) + { + returnvals[i] = mergedActions.get(i).callInt(args); + } + return returnvals; + } + } + catch (Exception e) + { + e.printStackTrace(); + throw new Exception("error calling callback '" + nameRef + "'.", e); + } + } + + protected Object callInt(Object... args) throws Exception + { + if (!argsMatch(methodParams, args)) + { + if (defaultArguments != null) + { + args = defaultArguments; + } + } + try + { + Method meth = GetMethodRecursively(objectRef, methodName); + return meth.invoke(objectRef instanceof Class ? null : objectRef, + args); + } + catch (Exception e) + { + throw new Exception("error calling callback '" + nameRef + "'.", e); + } + } + + protected Method GetMethodRecursively(Object o, String method) + { + Class currentclass = (o instanceof Class ? (Class) o : o + .getClass()); + while (true) + { + try + { + if (currentclass == null) + { + return null; + } + Method returnval = currentclass.getDeclaredMethod(method, + methodParams); + if (returnval != null) + { + returnval.setAccessible(true); + return returnval; + } + } + catch (Throwable x) + {} + currentclass = currentclass.getSuperclass(); + } + } + + /** + * This method merges ModActions together into one. + * + * @param newAction + * The new Action to merge with. + * @return The Merged ModAction. + */ + public ModAction mergeAction(ModAction newAction) + { + if (mergedActions.isEmpty()) + { + ModAction merged = new ModAction("Merged ModAction"); + merged.mergedActions.add(this); + merged.mergedActions.add(newAction); + return merged; + } + else + { + mergedActions.add(newAction); + return this; + } + } + + @Override + public void propertyChange(PropertyChangeEvent paramPropertyChangeEvent) + { + if ((methodParams.length != 1) + || (methodParams[0] != PropertyChangeEvent.class)) + { + throw new RuntimeException( + "invalid method parameters for a PropertyChangeListener callback. Modaction is '" + + nameRef + "'."); + } + try + { + call(paramPropertyChangeEvent); + } + catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling PropertyChangeListener callback. Modaction is '" + + nameRef + "'.", e); + } + } + + @Override + public void run() + { + try + { + call(); + } + catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling Runnable callback. Modaction is '" + + nameRef + "'.", e); + } + } + + /** + * This sets the arguments to use if no or invalid arguments are provided. + * Throws InvalidParameterException if the arguments provided do not match + * the method parameters, or are not assignable to those types. + * + * @param Arguments + * The arguments to try and call. + * @return this + */ + public ModAction setDefaultArguments(Object... Arguments) + { + if (!argsMatch(methodParams, Arguments)) + { + throw new InvalidParameterException( + "Arguments do not match the parameters."); + } + defaultArguments = Arguments; + return this; + } + + protected void setupHandler(Object o, String method) + { + try + { + GetMethodRecursively(o, method); + } + catch (Exception e) + { + e.printStackTrace(); + throw new RuntimeException( + "Could not locate Method with included information."); + } + methodName = method; + objectRef = o; + } +} \ No newline at end of file diff --git a/mcp/ModSettingScreen.java b/mcp/ModSettingScreen.java new file mode 100644 index 0000000..aed265c --- /dev/null +++ b/mcp/ModSettingScreen.java @@ -0,0 +1,150 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +import de.matthiasmann.twl.Widget; + + +/** + * This is the class that GuiModSelect uses to show Subscreens. Create one of + * these to create your own subscreen, from which you can add widgets to. This + * automatically registers the button on the Mod Setting Screen. + * + * @author lahwran + */ +public class ModSettingScreen +{ + /** + * The current context. + */ + public static String guiContext = ""; + /** + * The list of currently registered ModScreens. + */ + public static ArrayList modScreens = new ArrayList(); + /** + * title to show on button to this modscreen + */ + public String buttonTitle; + /** + * name to show at top of screen + */ + public String niceName; + /** + * the main widget to pass into GuiModScreen.show() + */ + public Widget theWidget; + /** + * the column widget to show the child widgets in + */ + public WidgetClassicTwocolumn widgetColumn; + + /** + * convenience constructor for when you want to show the same name on the + * button and screen title + * + * @param name + * mod nice name + */ + public ModSettingScreen(String name) + { + this(name, name); + } + + /** + * The main Constructor for ModSettingScreen. Creates a WidgetSimplewindow + * as the main Widget, sets the title for said WidgetSimplewindow, and + * registers this ModSettingScreen on the settings screen. + * + * @param nicename + * The title that will be on the WidgetSimplewindow. + * @param buttontitle + * button-to-screen title + */ + public ModSettingScreen(String nicename, String buttontitle) + { + ModSettingScreen.modScreens.add(this); + buttonTitle = buttontitle; + niceName = nicename; + widgetColumn = new WidgetClassicTwocolumn(); + theWidget = new WidgetSimplewindow(widgetColumn, niceName); + } + + /** + * An alternate Constructor for ModSettingScreen. Instead of creating a + * WidgetSimplewindow, this simply lets you pass a widget of your choosing. + * + * @param widget + * The main widget you want to use for this ModSettingScreen. + * @param buttontitle + * button-to-screen title + */ + public ModSettingScreen(Widget widget, String buttontitle) + { + ModSettingScreen.modScreens.add(this); + buttonTitle = buttontitle; + theWidget = widget; + } + + /** + * Add a widget + * + * @param newwidget + * the widget to add + */ + public void append(Widget newwidget) + { + if (widgetColumn != null) + { + widgetColumn.add(newwidget); + } + else + { + theWidget.add(newwidget); + } + } + + /** + * Remove a widget + * + * @param child + * widget to remove + */ + public void remove(Widget child) + { + if (widgetColumn != null) + { + widgetColumn.removeChild(child); + } + else + { + theWidget.removeChild(child); + } + } + + /** + * Changes the widgetColumn to or from WidgetClassicTwocolumn or + * WidgetSinglecolumn. + * + * @param value + * What to change it to. True for WidgetSinglecolumn, False for + * WidgetClassicTwocolumn. + */ + public void setSingleColumn(Boolean value) + { + Boolean isSingle = WidgetSinglecolumn.class.isInstance(widgetColumn); + if (isSingle == value) + { + return; + } + WidgetClassicTwocolumn w2 = (value ? new WidgetSinglecolumn() + : new WidgetClassicTwocolumn()); + for (int i = 0; i < widgetColumn.getNumChildren(); i++) + { + w2.add(widgetColumn.getChild(i)); + } + widgetColumn = w2; + theWidget = new WidgetSimplewindow(widgetColumn, + ((WidgetSimplewindow) theWidget).titleWidget.getText()); + } +} diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java new file mode 100644 index 0000000..332836d --- /dev/null +++ b/mcp/ModSettings.java @@ -0,0 +1,1090 @@ +package net.minecraft.src; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.lang.reflect.Field; +import java.security.InvalidParameterException; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Properties; + +import net.minecraft.client.Minecraft; +import de.matthiasmann.twl.Widget; + + +/** + * Main interface class for Settings API + * + * @author lahwran + */ +public class ModSettings +{ + /** + * A list of all ModSettings instances. + */ + public static ArrayList all = new ArrayList(); + /** + * A map of context names and the directories they save to. + */ + public static HashMap contextDatadirs; + /** + * The current context. + */ + public static String currentContext; + /** + * Debug mode flag. Should always be false. + */ + public static final boolean debug = false; + private static Minecraft minecraftInstance; + static + { + ModSettings.contextDatadirs = new HashMap(); + ModSettings.currentContext = ""; + ModSettings.contextDatadirs.put("", "mods"); + } + + /** + * Debug printer. This prints to System.out, and only works when in debug + * mode. + * + * @param s + * The string to output. + */ + public static void dbgout(String s) + { + if (ModSettings.debug) + { + System.out.println(s); + } + } + + /** + * Returns, and creates if needed, an application directory. + * + * @param app + * The name of the application. + * @return A File reference to the directory created. + */ + public static File getAppDir(String app) + { + return Minecraft.getAppDir(app); + } + + /** + * This finds and returns a Minecraft instance. It caches it if it has + * already been located. + * + * @return The minecraft instance. + */ + public static Minecraft getMcinst() + { + if (ModSettings.minecraftInstance != null) + { + return ModSettings.minecraftInstance; + } + Field f; + try + { + f = Minecraft.class.getDeclaredFields()[1]; + f.setAccessible(true); + Minecraft m = (Minecraft) f.get(null); + if (m != null) + { + ModSettings.minecraftInstance = m; + return m; + } + f = Thread.class.getDeclaredField("target"); + f.setAccessible(true); + ThreadGroup group = Thread.currentThread().getThreadGroup(); + int count = group.activeCount(); + Thread[] threads = new Thread[count]; + group.enumerate(threads); + for (int i = 0; i < threads.length; i++) + { + if (threads[i].getName().equals("Minecraft main thread")) + { + m = (Minecraft) f.get(threads[i]); + if (m != null) + { + ModSettings.minecraftInstance = m; + return m; + } + } + } + } + catch (Throwable t) + { + throw new RuntimeException(t); + } + throw new RuntimeException( + "You are a godless monkey! why are you doing weird things with the innards of minecraft?"); + } + + /** + * Loads all saved settings for a specific context. + * + * @param context + * The context to load from. + */ + public static void loadAll(String context) + { + for (int i = 0; i < ModSettings.all.size(); i++) + { + ModSettings.all.get(i).load(context); + } + } + + /** + * Set the Minecraft instance that getMcinst returns. + * + * @param m + * The Minecraft Instance. + */ + public static void presetMcint(Minecraft m) + { + ModSettings.minecraftInstance = m; + } + + /** + * Sets the context for mods. This means you can specify a context on a per + * world / per server basis, or anything else you would prefer. This will + * carry thoughout all mods. + * + * @param name + * The name reference of the context. + * @param location + * The location that this context stores and loads data from. + */ + public static void setContext(String name, String location) + { + if (name != null) + { + ModSettings.contextDatadirs.put(name, location); + ModSettings.currentContext = name; + if (!name.equals("")) + { + ModSettings.loadAll(ModSettings.currentContext); + } + } + else + { + ModSettings.currentContext = ""; + } + } + + /** + * Mod name as used in .minecraft/mods/${modbackendname}/ + */ + public String backendname; + /** + * all registered settings for this mod + */ + @SuppressWarnings("rawtypes") + public ArrayList Settings; + /** + * Whether or not Settings have been loaded for this mod. + */ + public boolean settingsLoaded = false; + + /** + * @param modbackendname + * used to initialize class modbackendname field + */ + @SuppressWarnings("rawtypes") + public ModSettings(String modbackendname) + { + backendname = modbackendname; + Settings = new ArrayList(); + ModSettings.all.add(this); + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(ModSettingScreen screen, String nicename, + String backendname, boolean value) + { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(ModSettingScreen screen, String nicename, + String backendname, boolean value, String truestring, + String falsestring) + { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, + falsestring); + screen.append(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(ModSettingScreen screen, String nicename, + String backendname, float value) + { + SettingFloat s = new SettingFloat(backendname, value); + WidgetFloat w = new WidgetFloat(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(ModSettingScreen screen, String nicename, + String backendname, float value, float min, float step, float max) + { + SettingFloat s = new SettingFloat(backendname, value, min, step, max); + WidgetFloat w = new WidgetFloat(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience key setting adder + */ + public SettingKey addSetting(ModSettingScreen screen, String nicename, + String backendname, int value) + { + SettingKey s = new SettingKey(backendname, value); + WidgetKeybinding w = new WidgetKeybinding(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, int min, int max) + { + SettingInt s = new SettingInt(backendname, value, min, 1, max); + WidgetInt w = new WidgetInt(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, int min, int step, int max) + { + SettingInt s = new SettingInt(backendname, value, min, step, max); + WidgetInt w = new WidgetInt(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience multi setting adder + */ + public SettingMulti addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, String... labels) + { + SettingMulti s = new SettingMulti(backendname, value, labels); + WidgetMulti w = new WidgetMulti(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience text setting adder + */ + public SettingText addSetting(ModSettingScreen screen, String nicename, + String backendname, String value) + { + SettingText s = new SettingText(backendname, value); + WidgetText w = new WidgetText(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(Widget w2, String nicename, + String backendname, boolean value) + { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(Widget w2, String nicename, + String backendname, boolean value, String truestring, + String falsestring) + { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, + falsestring); + w2.add(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(Widget w2, String nicename, + String backendname, float value) + { + SettingFloat s = new SettingFloat(backendname, value); + WidgetFloat w = new WidgetFloat(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(Widget w2, String nicename, + String backendname, float value, float min, float step, float max) + { + SettingFloat s = new SettingFloat(backendname, value, min, step, max); + WidgetFloat w = new WidgetFloat(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience key setting adder + */ + public SettingKey addSetting(Widget w2, String nicename, + String backendname, int value) + { + SettingKey s = new SettingKey(backendname, value); + WidgetKeybinding w = new WidgetKeybinding(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(Widget w2, String nicename, + String backendname, int value, int min, int max) + { + SettingInt s = new SettingInt(backendname, value, min, 1, max); + WidgetInt w = new WidgetInt(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(Widget w2, String nicename, + String backendname, int value, int min, int step, int max) + { + SettingInt s = new SettingInt(backendname, value, min, step, max); + WidgetInt w = new WidgetInt(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience multi setting adder + */ + public SettingMulti addSetting(Widget w2, String nicename, + String backendname, int value, String... labels) + { + SettingMulti s = new SettingMulti(backendname, value, labels); + WidgetMulti w = new WidgetMulti(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience text setting adder + */ + public SettingText addSetting(Widget w2, String nicename, + String backendname, String value) + { + SettingText s = new SettingText(backendname, value); + WidgetText w = new WidgetText(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * add a setting to be saved. + * + * @param s + * setting to add - sets s.parent as well, don't add a setting to + * more than one modsettings + */ + @SuppressWarnings( + { "unchecked", "rawtypes" }) + public void append(Setting s) + { + Settings.add(s); + s.parent = this; + } + + /** + * Copies the saved settings from one context to another. + * + * @param src + * The source context from which to copy. + * @param dest + * The destination context to save to. + */ + public void copyContextAll(String src, String dest) + { + for (int i = 0; i < Settings.size(); i++) + { + Settings.get(i).copyContext(src, dest); + } + } + + /** + * Get a list of all Boolean settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllBooleanSettings() + { + return getAllBooleanSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Boolean settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllBooleanSettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingBoolean) setting); + } + return settings; + } + + /** + * Get a list of all Float settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllFloatSettings() + { + return getAllFloatSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Float settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllFloatSettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingFloat.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingFloat) setting); + } + return settings; + } + + /** + * Get a list of all Int settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllIntSettings() + { + return getAllIntSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Int settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllIntSettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingInt.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingInt) setting); + } + return settings; + } + + /** + * Get a list of all Key settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllKeySettings() + { + return getAllKeySettings(ModSettings.currentContext); + } + + /** + * Get a list of all Key settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllKeySettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingKey.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingKey) setting); + } + return settings; + } + + /** + * Get a list of all Multi settings for the current context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + public ArrayList getAllMultiSettings() + { + return getAllMultiSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Multi settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllMultiSettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingMulti.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingMulti) setting); + } + return settings; + } + + /** + * Get a list of all Text settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllTextSettings() + { + return getAllTextSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Text settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllTextSettings(String context) + { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) + { + if (!SettingText.class.isAssignableFrom(setting.getClass())) + { + continue; + } + settings.add((SettingText) setting); + } + return settings; + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The boolean value. + */ + public Boolean getBooleanSetting(String backendName) + { + return getBooleanSetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The boolean value. + */ + @SuppressWarnings("rawtypes") + public Boolean getBooleanSetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingBoolean) setting).get(context)); + } + } + throw new InvalidParameterException("SettingBoolean '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Float value. + */ + public Float getFloatSetting(String backendName) + { + return getFloatSetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Float value. + */ + @SuppressWarnings("rawtypes") + public Float getFloatSetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingFloat.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingFloat) setting).get(context)); + } + } + throw new InvalidParameterException("SettingFloat '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Int value. + */ + public Integer getIntSetting(String backendName) + { + return getIntSetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Int value. + */ + @SuppressWarnings("rawtypes") + public Integer getIntSetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingInt.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingInt) setting).get(context)); + } + } + throw new InvalidParameterException("SettingInt '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Key value. + */ + public Integer getKeySetting(String backendName) + { + return getKeySetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Key value. + */ + @SuppressWarnings("rawtypes") + public Integer getKeySetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingKey.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingKey) setting).get(context)); + } + } + throw new InvalidParameterException("SettingKey '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Multi value. + */ + public Integer getMultiSetting(String backendName) + { + return getMultiSetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Multi value. + */ + @SuppressWarnings("rawtypes") + public Integer getMultiSetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingMulti.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingMulti) setting).get(context)); + } + } + throw new InvalidParameterException("SettingMulti '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The text label for the value. + */ + public String getMultiSettingLabel(String backendName) + { + return getMultiSettingLabel(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The text label for the value. + */ + @SuppressWarnings("rawtypes") + public String getMultiSettingLabel(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingMulti.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingMulti) setting).getLabel(context)); + } + } + throw new InvalidParameterException("SettingMulti '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Text value. + */ + public String getTextSetting(String backendName) + { + return getTextSetting(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Text value. + */ + @SuppressWarnings("rawtypes") + public String getTextSetting(String backendName, String context) + { + for (Setting setting : Settings) + { + if (!SettingText.class.isAssignableFrom(setting.getClass())) + { + continue; + } + if (setting.backendName.equals(backendName)) + { + return (((SettingText) setting).get(context)); + } + } + throw new InvalidParameterException("SettingText '" + backendName + + "' not found."); + } + + /** + * Loads the settings for the default context. + */ + public void load() + { + load(""); + settingsLoaded = true; + } + + /** + * must be called after all settings are added for loading/saving to work. + * loads from .minecraft/mods/$backendname/guiconfig.properties if it + * exists. coming soon: set name of config file + * + * @param context + * The context to load from. + */ + @SuppressWarnings("rawtypes") + public void load(String context) + { + for (;;) + { + try + { + if (ModSettings.contextDatadirs.get(context) == null) + { + break; + } + File path = ModSettings.getAppDir("minecraft/" + + ModSettings.contextDatadirs.get(context) + "/" + + backendname + "/"); + if (!path.exists()) + { + break; + } + File file = new File(path, "guiconfig.properties"); + if (!file.exists()) + { + break; + } + Properties p = new Properties(); + p.load(new FileInputStream(file)); + for (int i = 0; i < Settings.size(); i++) + { + if (Settings.get(i) instanceof Setting) + { + ModSettings.dbgout("setting load"); + Setting z = Settings.get(i); + if (p.containsKey(z.backendName)) + { + ModSettings.dbgout("setting " + + (String) p.get(z.backendName)); + z.fromString((String) p.get(z.backendName), context); + } + } + } + break; + } + catch (Exception e) + { + System.out.println(e); + break; + } + } + } + + /** + * removes a setting using ArrayList.remove + * + * @param s + * setting to remove + */ + @SuppressWarnings( + { "unchecked", "rawtypes" }) + public void remove(Setting s) + { + Settings.remove(s); + s.parent = null; + } + + /** + * Resets all settings for the current context. + */ + public void resetAll() + { + resetAll(ModSettings.currentContext); + } + + /** + * Resets all settings for the specified context. + * + * @param context + * The context to reset. + */ + public void resetAll(String context) + { + for (int i = 0; i < Settings.size(); i++) + { + Settings.get(i).reset(context); + } + } + + /** + * called every time a setting is changed saves settings file to + * .minecraft/mods/$backendname/guiconfig.properties coming soon: set name + * of config file + * + * @param context + * The context to save. + */ + @SuppressWarnings("rawtypes") + public void save(String context) + { + if (!settingsLoaded) + { + return; + } + try + { + File path = ModSettings.getAppDir("minecraft/" + + ModSettings.contextDatadirs.get(context) + "/" + + backendname + "/"); + ModSettings.dbgout("saving context " + context + " (" + + path.getAbsolutePath() + " [" + + ModSettings.contextDatadirs.get(context) + "])"); + if (!path.exists()) + { + path.mkdirs(); + } + File file = new File(path, "guiconfig.properties"); + Properties p = new Properties(); + for (int i = 0; i < Settings.size(); i++) + { + Setting z = Settings.get(i); + p.put(z.backendName, z.toString(context)); + } + FileOutputStream out = new FileOutputStream(file); + p.store(out, ""); + } + catch (Exception e) + { + e.printStackTrace(); + } + } + + /** + * @return number of settings registered + */ + public int size() + { + return Settings.size(); + } +} diff --git a/mcp/Setting.java b/mcp/Setting.java new file mode 100644 index 0000000..82f3364 --- /dev/null +++ b/mcp/Setting.java @@ -0,0 +1,126 @@ +package net.minecraft.src; + +import java.util.HashMap; + +import de.matthiasmann.twl.Widget; + + +/** + * This is the base class for Settings. + * + * @author lahwran + * @param The type that this Setting will use. + */ +public abstract class Setting extends Widget +{ + /** + * The name used by ModSettings to save and load the setting. + */ + public String backendName; + /** + * The default value for this setting. + */ + public T defaultValue; + /** + * A reference to the Widget that displays this setting. + */ + public WidgetSetting displayWidget = null; + /** + * Reference to the ModSettings this Setting is a child of. + */ + public ModSettings parent = null; + /** + * value. do not write directly if you want things to update! + */ + public HashMap values = new HashMap(); + + /** + * This is the basic constructor for Setting. Internal use only. + */ + public Setting() + {} + + /** + * Copies a setting from the source context to the destination context. + * + * @param srccontext + * The source context to copy data from. + * @param destcontext + * The destination context you would like to save the data to. + */ + public void copyContext(String srccontext, String destcontext) + { + values.put(destcontext, values.get(srccontext)); + } + + /** + * load back a string from toString() + */ + public abstract void fromString(String s, String context); + + /** + * Returns the setting for the current context. + * + * @return The setting. + */ + public T get() + { + return get(ModSettings.currentContext); + } + + /** + * Returns the setting for the specified context. + * + * @param context + * The context to retrieve from. + * @return The setting. + */ + public abstract T get(String context); + + /** + * Resets this setting for the current context, saving the default and + * updating the display. + */ + public void reset() + { + reset(ModSettings.currentContext); + } + + /** + * Resets this setting for the specified context, saving the default and + * updating the display. + * + * @param context + * The context to reset. + */ + public void reset(String context) + { + set(defaultValue, context); + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value. + */ + public void set(T v) + { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value. + * @param context + * The context to set. + */ + public abstract void set(T v, String context); + + /** + * return string to save, called from ModSettings.save() + */ + public abstract String toString(String context); +} \ No newline at end of file diff --git a/mcp/SettingBoolean.java b/mcp/SettingBoolean.java new file mode 100644 index 0000000..6643fe3 --- /dev/null +++ b/mcp/SettingBoolean.java @@ -0,0 +1,84 @@ +package net.minecraft.src; + +/** + * This is the Setting type for Booleans. + * + * @author lahwran + */ +public class SettingBoolean extends Setting +{ + /** + * This is the constructor for SettingBoolean. It sets the default value as + * false. + * + * @param name + * The backend name for this setting. + */ + public SettingBoolean(String name) + { + this(name, false); + } + + /** + * This is the constructor for SettingBoolean. + * + * @param name + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingBoolean(String name, Boolean defValue) + { + defaultValue = defValue; + values.put("", defaultValue); + backendName = name; + } + + @Override + public void fromString(String s, String context) + { + values.put(context, s.equals("true")); + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public Boolean get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + @Override + public void set(Boolean v, String context) + { + values.put(context, v); + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public String toString(String context) + { + return (get(context) ? "true" : "false"); + } +} \ No newline at end of file diff --git a/mcp/SettingFloat.java b/mcp/SettingFloat.java new file mode 100644 index 0000000..2bfff01 --- /dev/null +++ b/mcp/SettingFloat.java @@ -0,0 +1,152 @@ +package net.minecraft.src; + +/** + * This is the Setting type for Floats. + * + * @author lahwran + */ +public class SettingFloat extends Setting +{ + /** + * The maximum value. + */ + public float maximumValue; + /** + * The minimum value. + */ + public float minimumValue; + /** + * The step value. + */ + public float stepValue; + + /** + * A constructor for SettingFloat. Defaults settings to default value of 0, + * range of 0.0-1.0, and a step of 0.1. + * + * @param title + * The backend name for this setting. + */ + public SettingFloat(String title) + { + this(title, 0.0f, 0.0f, 0.1f, 1.0f); + } + + /** + * A constructor for SettingFloat. Defaults settings to range of 0.0-1.0 and + * a step of 0.1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingFloat(String title, float defValue) + { + this(title, defValue, 0.0f, 0.1f, 1.0f); + } + + /** + * A constructor for SettingFloat. Defaults settings to a step of 0.1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param maxValue + * The maximum value. + */ + public SettingFloat(String title, float defValue, float minValue, + float maxValue) + { + this(title, defValue, minValue, 0.1f, maxValue); + } + + /** + * A constructor for SettingFloat. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param stepValue + * The step value. + * @param maxValue + * The maximum value. + */ + public SettingFloat(String title, float defValue, float minValue, + float stepValue, float maxValue) + { + values.put("", defValue); + defaultValue = defValue; + minimumValue = minValue; + this.stepValue = stepValue; + maximumValue = maxValue; + backendName = title; + if (minimumValue > maximumValue) + { + float t = minimumValue; + minimumValue = maximumValue; + maximumValue = t; + } + } + + @Override + public void fromString(String s, String context) + { + values.put(context, new Float(s)); + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public Float get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + @Override + public void set(Float v, String context) + { + if (stepValue > 0) + { + values.put(context, Math.round(v / stepValue) * stepValue); + } + else + { + values.put(context, v); + } + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public String toString(String context) + { + return "" + get(context); + } +} \ No newline at end of file diff --git a/mcp/SettingInt.java b/mcp/SettingInt.java new file mode 100644 index 0000000..b1541c9 --- /dev/null +++ b/mcp/SettingInt.java @@ -0,0 +1,155 @@ +package net.minecraft.src; + +/** + * This is the Setting type for Ints. + * + * @author lahwran + */ +public class SettingInt extends Setting +{ + /** + * The maximum value. + */ + public int maximumValue; + /** + * The minimum value. + */ + public int minimumValue; + /** + * The step value. + */ + public int stepValue; + + /** + * A constructor for SettingInt. Defaults settings to default value of 0, + * range of 1-100, and a step of 1. + * + * @param title + * The backend name for this setting. + */ + public SettingInt(String title) + { + this(title, 0, 0, 1, 100); + } + + /** + * A constructor for SettingInt. Defaults settings to range of 1-100, and a + * step of 1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingInt(String title, int defValue) + { + this(title, defValue, 0, 1, 100); + } + + /** + * A constructor for SettingInt. Defaults settings to a step of 1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param maxValue + * The maximum value. + */ + public SettingInt(String title, int defValue, int minValue, int maxValue) + { + this(title, defValue, minValue, 1, maxValue); + } + + /** + * A constructor for SettingInt. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param stepValue + * The step value. + * @param maxValue + * The maximum value. + */ + public SettingInt(String title, int defValue, int minValue, int stepValue, + int maxValue) + { + values.put("", defValue); + defaultValue = defValue; + minimumValue = minValue; + this.stepValue = stepValue; + maximumValue = maxValue; + backendName = title; + if (minimumValue > maximumValue) + { + int t = minimumValue; + minimumValue = maximumValue; + maximumValue = t; + } + } + + @Override + public void fromString(String s, String context) + { + values.put(context, new Integer(s)); + if (displayWidget != null) + { + displayWidget.update(); + } + ModSettings.dbgout("fromstring " + s); + } + + @Override + public Integer get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + @Override + public void set(Integer v, String context) + { + ModSettings.dbgout("set " + v); + if (stepValue > 1) + { + values.put( + context, + (int) (Math.round((float) v / (float) stepValue) * (float) stepValue)); + } + else + { + values.put(context, v); + } + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public String toString(String context) + { + return "" + get(context); + } +} \ No newline at end of file diff --git a/mcp/SettingKey.java b/mcp/SettingKey.java new file mode 100644 index 0000000..7b03fb7 --- /dev/null +++ b/mcp/SettingKey.java @@ -0,0 +1,146 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + + +/** + * This is the Setting type for Keys. + * + * @author lahwran + */ +public class SettingKey extends Setting +{ + /** + * Constructor for SettingKey. + * + * @param title + * The backend name for this setting. + * @param key + * The key you want as default, as a int keycode. + */ + public SettingKey(String title, int key) + { + defaultValue = key; + values.put("", key); + backendName = title; + } + + /** + * Constructor for SettingKey. + * + * @param title + * The backend name for this setting. + * @param key + * key The key you want as default, as a string. + */ + public SettingKey(String title, String key) + { + this(title, Keyboard.getKeyIndex(key)); + } + + @Override + public void fromString(String s, String context) + { + if (s.equals("UNBOUND")) + { + values.put(context, Keyboard.KEY_NONE); + } + else + { + values.put(context, Keyboard.getKeyIndex(s)); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public Integer get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + /** + * An easy helper to see if the current key is down. + * + * @return true if the key specified to this setting (In the current + * context) is down. + */ + public boolean isKeyDown() + { + return isKeyDown(ModSettings.currentContext); + } + + /** + * An easy helper to see if the current key is down. + * + * @param context + * The context to get the key from. + * @return true if the key specified to this setting is down. + */ + public boolean isKeyDown(String context) + { + if (get(context) != -1) + { + return Keyboard.isKeyDown(get(context)); + } + return false; + } + + @Override + public void set(Integer v, String context) + { + values.put(context, v); + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value, as a string. + */ + public void set(String v) + { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value, as a string. + * @param context + * The context to set. + */ + public void set(String v, String context) + { + set(Keyboard.getKeyIndex(v), context); + } + + @Override + public String toString(String context) + { + return Keyboard.getKeyName(get(context)); + } +} \ No newline at end of file diff --git a/mcp/SettingMulti.java b/mcp/SettingMulti.java new file mode 100644 index 0000000..92e5ce0 --- /dev/null +++ b/mcp/SettingMulti.java @@ -0,0 +1,197 @@ +package net.minecraft.src; + +/** + * This is the Setting type for Multis. + * + * @author lahwran + */ +public class SettingMulti extends Setting +{ + /** + * A string array of labels for the button. + */ + public String[] labelValues; + + /** + * A constructor for SettingMulti. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value for this Multi. + * @param labelValues + * The text labels you would like this multi to have. Must have + * at least one. + */ + public SettingMulti(String title, int defValue, String... labelValues) + { + if (labelValues.length == 0) + { + return; + } + values.put("", defValue); + defaultValue = defValue; + this.labelValues = labelValues; + backendName = title; + } + + /** + * A constructor for SettingMulti. Default value is 0, or the first label to + * be defined. + * + * @param title + * The backend name for this setting. + * @param labelValues + * The text labels you would like this multi to have. Must have + * at least one. + */ + public SettingMulti(String title, String... labelValues) + { + this(title, 0, labelValues); + } + + @Override + public void fromString(String s, String context) + { + int x = -1; + for (int i = 0; i < labelValues.length; i++) + { + if (labelValues[i].equals(s)) + { + x = i; + } + } + if (x != -1) + { + values.put(context, x); + } + else + { + values.put(context, new Float(s).intValue()); + } + ModSettings.dbgout("fromstring multi " + s); + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public Integer get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + /** + * Helper to get the text label for the current context and value. + * + * @return The label. + */ + public String getLabel() + { + return labelValues[get()]; + } + + /** + * Helper to get the text label for the specified context and value. + * + * @param context + * The context to get the value from. + * @return The label. + */ + public String getLabel(String context) + { + return labelValues[get(context)]; + } + + /** + * Shifts the value forward for the current context. + */ + public void next() + { + next(ModSettings.currentContext); + } + + /** + * Shifts the value forward for the specified context. + * + * @param context + * The context to change. + */ + public void next(String context) + { + int tempvalue = get(context) + 1; + while (tempvalue >= labelValues.length) + { + tempvalue -= labelValues.length; + } + set(tempvalue, context); + } + + @Override + public void set(Integer v, String context) + { + values.put(context, v); + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value, in the label representation. + */ + public void set(String v) + { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value, in the label representation. + * @param context + * The context to set. + */ + public void set(String v, String context) + { + int x = -1; + for (int i = 0; i < labelValues.length; i++) + { + if (labelValues[i].equals(v)) + { + x = i; + } + } + if (x != -1) + { + set(x, context); + } + } + + @Override + public String toString(String context) + { + return labelValues[get(context)]; + } +} \ No newline at end of file diff --git a/mcp/SettingText.java b/mcp/SettingText.java new file mode 100644 index 0000000..d407cc2 --- /dev/null +++ b/mcp/SettingText.java @@ -0,0 +1,72 @@ +package net.minecraft.src; + +/** + * This is the Setting type for Text. + * + * @author lahwran + */ +public class SettingText extends Setting +{ + /** + * A constructor for SettingText. + * + * @param title + * The backend name for this setting. + * @param defaulttext + * The default text for this Setting. + */ + public SettingText(String title, String defaulttext) + { + values.put("", defaulttext); + defaultValue = defaulttext; + backendName = title; + } + + @Override + public void fromString(String s, String context) + { + values.put(context, s); + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public String get(String context) + { + if (values.get(context) != null) + { + return values.get(context); + } + else + if (values.get("") != null) + { + return values.get(""); + } + else + { + return defaultValue; + } + } + + @Override + public void set(String v, String context) + { + values.put(context, v); + if (parent != null) + { + parent.save(context); + } + if (displayWidget != null) + { + displayWidget.update(); + } + } + + @Override + public String toString(String context) + { + return get(context); + } +} \ No newline at end of file diff --git a/mcp/WidgetBoolean.java b/mcp/WidgetBoolean.java new file mode 100644 index 0000000..2df4540 --- /dev/null +++ b/mcp/WidgetBoolean.java @@ -0,0 +1,137 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.Button; +import de.matthiasmann.twl.model.SimpleButtonModel; + + +/** + * This is the Widget for boolean settings. It uses a button to display to the + * user. + * + * @author lahwran + */ +public class WidgetBoolean extends WidgetSetting implements Runnable +{ + /** + * The reference to the underlying Button. + */ + public Button button; + /** + * The text to display on the button when the setting is false. + */ + public String falseText; + /** + * The reference to the SettingBoolean that this WidgetBoolean uses. + */ + public SettingBoolean settingReference = null; + /** + * The text to display on the button when the setting is true. + */ + public String trueText; + + /** + * This creates a new WidgetBoolean using the SettingBoolean and String + * provided. It uses 'true' and 'false' for the text. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + */ + public WidgetBoolean(SettingBoolean setting, String title) + { + this(setting, title, "true", "false"); + } + + /** + * This creates a new WidgetBoolean using the WidgetBoolean and String + * provided, as well as setting the true and false text. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + * @param truetext + * The text to display what the setting is true. + * @param falsetext + * The text to display what the setting is false. + */ + public WidgetBoolean(SettingBoolean setting, String title, String truetext, + String falsetext) + { + super(title); + setTheme(""); + trueText = truetext; + falseText = falsetext; + SimpleButtonModel bmodel = new SimpleButtonModel(); + button = new Button(bmodel); + bmodel.addActionCallback(this); + add(button); + settingReference = setting; + settingReference.displayWidget = this; + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) + { + button.getModel().addActionCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) + { + button.getModel().removeActionCallback(paramRunnable); + } + + @Override + public void run() + { + if (settingReference != null) + { + settingReference.set( + !settingReference.get(ModSettingScreen.guiContext), + ModSettingScreen.guiContext); + } + update(); + GuiModScreen.clicksound(); + } + + @Override + public void update() + { + button.setText(userString()); + } + + @Override + public String userString() + { + if (settingReference != null) + { + if (niceName.length() > 0) + { + return String.format("%s: %s", niceName, settingReference + .get(ModSettingScreen.guiContext) ? trueText + : falseText); + } + else + { + return settingReference.get(ModSettingScreen.guiContext) ? trueText + : falseText; + } + } + else + { + if (niceName.length() > 0) + { + return String.format("%s: %s", niceName, "no value"); + } + else + { + return "no value or title"; + } + } + } +} diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/WidgetClassicTwocolumn.java new file mode 100644 index 0000000..69f1ea8 --- /dev/null +++ b/mcp/WidgetClassicTwocolumn.java @@ -0,0 +1,203 @@ +package net.minecraft.src; + +import java.util.HashMap; +import java.util.Map; + +import de.matthiasmann.twl.Widget; + + +/** + * This widget is designed to arrange widgets into two columns. The width and + * height is enforced, but they can be configured by the programmer. + * + * @author lahwran + * @author ShaRose + */ +public class WidgetClassicTwocolumn extends Widget +{ + /** + * This is the default height to enforce for widgets. + */ + public int childDefaultHeight = 20; + /** + * This dictates the width to set each of the widgets to. + */ + public int childWidth = 150; + /** + * This is the amount of padding to use between widgets vertically. + */ + public int defaultPadding = 4; + /** + * This is a map to override the heights of specific widgets. It is an + * override to overrideHeight. If you set the Integer as below 1, it will + * use what the widget wants as it's height. If you set anything else, it + * will use that height. Note that with TwoColumn widgets it will try and + * keep the height the same between two widgets opposite each other, so the + * one with the biggest height will override the other. + */ + public Map heightOverrideExceptions = new HashMap(); + /** + * This says whether it should override the height for all widgets. + */ + public boolean overrideHeight = true; + /** + * This is the amount of room between the two columns. + */ + public int splitDistance = 10; + /** + * This is the amount of padding to have before any widgets are positioned. + */ + public int verticalPadding = 0; + + /** + * This creates the WidgetClassicTwocolumn and adds the requested widgets. + * + * @param widgets + */ + public WidgetClassicTwocolumn(Widget... widgets) + { + for (int i = 0; i < widgets.length; ++i) + { + add(widgets[i]); + } + setTheme(""); + } + + @Override + public int getPreferredHeight() + { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); i += 2) + { + Widget w = getChild(i); + Widget w2 = null; + if (i + 1 != getNumChildren()) + { + w2 = getChild(i + 1); + } + int height = childDefaultHeight; + if (!overrideHeight) + { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) + { + Integer heightSet = heightOverrideExceptions.get(w); + if (heightSet == 0) + { + height = w.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + if (w2 != null) + { + int temp = height; + if (!overrideHeight) + { + temp = w2.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w2)) + { + Integer heightSet = heightOverrideExceptions.get(w2); + if (heightSet == 0) + { + height = w.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + if (temp > height) + { + height = temp; + } + } + totalheight += height + defaultPadding; + } + return totalheight; + } + + @Override + public int getPreferredWidth() + { + return getParent().getWidth(); + } + + @Override + public void layout() + { + if (getParent().getTheme().equals("scrollpane-notch")) + { + verticalPadding = 10; + } + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); i += 2) + { + Widget w = getChild(i); + Widget w2 = null; + try + { + w2 = getChild(i + 1); + } + catch (IndexOutOfBoundsException e) + { + // do nothing, just means it's uneven. + } + int height = childDefaultHeight; + if (!overrideHeight) + { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) + { + Integer heightSet = heightOverrideExceptions.get(w); + if (heightSet == 0) + { + height = w.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + if (w2 != null) + { + int temp = height; + if (!overrideHeight) + { + temp = w2.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w2)) + { + Integer heightSet = heightOverrideExceptions.get(w2); + if (heightSet == 0) + { + height = w.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + if (temp > height) + { + height = temp; + } + } + w.setSize(childWidth, height); + w.setPosition(getX() + getWidth() / 2 + - (childWidth + splitDistance / 2), getY() + totalheight); + if (w2 != null) + { + w2.setSize(childWidth, height); + w2.setPosition(getX() + getWidth() / 2 + splitDistance / 2, + getY() + totalheight); + } + totalheight += height + defaultPadding; + } + } +} diff --git a/mcp/WidgetFloat.java b/mcp/WidgetFloat.java new file mode 100644 index 0000000..9930565 --- /dev/null +++ b/mcp/WidgetFloat.java @@ -0,0 +1,98 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.model.SimpleFloatModel; + +/** + * This is the Widget for Float settings. It uses a WidgetSlider to display to + * the user. + * + * @author lahwran + */ +public class WidgetFloat extends WidgetSetting implements Runnable +{ + /** + * The number of decimal places to display to the user. + */ + public int decimalPlaces; + /** + * The reference to the underlying WidgetSlider. + */ + public WidgetSlider slider; + /** + * The reference to the SettingInt that this WidgetInt uses. + */ + public SettingFloat settingReference; + + /** + * This creates a new WidgetInt using the SettingInt and String provided. It defaults the decimal places to display at 2. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetFloat(SettingFloat setting, String title) + { + this(setting, title, 2); + } + + /** + * This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetFloat(SettingFloat setting, String title, int _decimalPlaces) + { + super(title); + setTheme(""); + decimalPlaces = _decimalPlaces; + settingReference = setting; + settingReference.displayWidget = this; + SimpleFloatModel smodel = new SimpleFloatModel(settingReference.minimumValue, settingReference.maximumValue, + settingReference.get()); + smodel.addCallback(this); + slider = new WidgetSlider(smodel); + if ((settingReference.stepValue > 0.0f) && (settingReference.stepValue <= settingReference.maximumValue)) + { + slider.setStepSize(settingReference.stepValue); + } + slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); + add(slider); + update(); + } + + @Override + public void run() + { + settingReference.set(slider.getValue(), ModSettingScreen.guiContext); + } + + @Override + public void update() + { + slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); + } + + @Override + public String userString() + { + String l = String.format("%02d", decimalPlaces); + return String.format("%s: %." + l + "f", niceName, settingReference); + } + + @Override + public void addCallback(Runnable paramRunnable) + { + slider.getModel().addCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) + { + slider.getModel().removeCallback(paramRunnable); + } +} diff --git a/mcp/WidgetInt.java b/mcp/WidgetInt.java new file mode 100644 index 0000000..e2ca812 --- /dev/null +++ b/mcp/WidgetInt.java @@ -0,0 +1,86 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.model.SimpleFloatModel; + + +/** + * This is the Widget for Integer settings. It uses a WidgetSlider to display to + * the user. + * + * @author lahwran + */ +public class WidgetInt extends WidgetSetting implements Runnable +{ + /** + * The reference to the SettingInt that this WidgetInt uses. + */ + public SettingInt settingReference; + /** + * The reference to the underlying WidgetSlider. + */ + public WidgetSlider slider; + + /** + * This creates a new WidgetInt using the SettingInt and String provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetInt(SettingInt setting, String title) + { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + SimpleFloatModel smodel = new SimpleFloatModel(settingReference.minimumValue, + settingReference.maximumValue, settingReference.get()); + slider = new WidgetSlider(smodel); + slider.setFormat(String.format("%s: %%.0f", niceName)); + if ((settingReference.stepValue > 1) + && (settingReference.stepValue <= settingReference.maximumValue)) + { + slider.setStepSize(settingReference.stepValue); + } + smodel.addCallback(this); + add(slider); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) + { + slider.getModel().addCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) + { + slider.getModel().removeCallback(paramRunnable); + } + + @Override + public void run() + { + ModSettings.dbgout("run " + (int) slider.getValue()); + settingReference.set((int) slider.getValue(), + ModSettingScreen.guiContext); + } + + @Override + public void update() + { + slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setFormat(String.format("%s: %%.0f", niceName)); + ModSettings.dbgout("update " + + settingReference.get(ModSettingScreen.guiContext) + " -> " + + (int) slider.getValue()); + } + @Override + public String userString() + { + return String.format("%s: %.0d", niceName, + settingReference.get(ModSettingScreen.guiContext)); + } +} \ No newline at end of file diff --git a/mcp/WidgetKeybinding.java b/mcp/WidgetKeybinding.java new file mode 100644 index 0000000..58b665f --- /dev/null +++ b/mcp/WidgetKeybinding.java @@ -0,0 +1,123 @@ +package net.minecraft.src; + +import org.lwjgl.input.Keyboard; + +import de.matthiasmann.twl.Event; +import de.matthiasmann.twl.ToggleButton; +import de.matthiasmann.twl.model.SimpleBooleanModel; + + +/** + * This is the Widget for Key binding settings. It uses a ToggleButton to + * display to the user. + * + * @author lahwran + */ +public class WidgetKeybinding extends WidgetSetting implements Runnable +{ + /** + * The reference to the underlying SimpleBooleanModel. + */ + public SimpleBooleanModel booleanModel; + /** + * The constant for clearing the existing key. + */ + public int CLEARKEY = Keyboard.KEY_DELETE; + /** + * The constant for exiting and keeping the existing key. + */ + public int NEVERMINDKEY = Keyboard.KEY_ESCAPE; + /** + * The reference to the SettingKey that this WidgetKeybinding uses. + */ + public SettingKey settingReference; + /** + * The reference to the underlying ToggleButton. + */ + public ToggleButton toggleButton; + + /** + * This creates a new WidgetKeybinding using the WidgetKeybinding and String + * provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetKeybinding(SettingKey setting, String title) + { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + booleanModel = new SimpleBooleanModel(false); + toggleButton = new ToggleButton(booleanModel); + add(toggleButton); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) + { + booleanModel.addCallback(paramRunnable); + } + + @Override + public boolean handleEvent(Event evt) + { + if ((evt.isKeyEvent() && !evt.isKeyPressedEvent()) + && booleanModel.getValue()) + { + System.out.println(Keyboard.getKeyName(evt.getKeyCode())); + int tmpvalue = evt.getKeyCode(); + if (tmpvalue == CLEARKEY) + { + settingReference.set(Keyboard.KEY_NONE, + ModSettingScreen.guiContext); + } + else + if (tmpvalue != NEVERMINDKEY) + { + settingReference.set(tmpvalue, ModSettingScreen.guiContext); + } + booleanModel.setValue(false); + update(); + GuiModScreen.clicksound(); + return true; + } + return false; + } + + @Override + public void keyboardFocusLost() + { + GuiModScreen.clicksound(); + booleanModel.setValue(false); + } + + @Override + public void removeCallback(Runnable paramRunnable) + { + booleanModel.removeCallback(paramRunnable); + } + + @Override + public void run() + { + GuiModScreen.clicksound(); + } + + @Override + public void update() + { + toggleButton.setText(userString()); + } + + @Override + public String userString() + { + return String.format("%s: %s", niceName, Keyboard + .getKeyName(settingReference.get(ModSettingScreen.guiContext))); + } +} diff --git a/mcp/WidgetMulti.java b/mcp/WidgetMulti.java new file mode 100644 index 0000000..8be631a --- /dev/null +++ b/mcp/WidgetMulti.java @@ -0,0 +1,87 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.Button; +import de.matthiasmann.twl.model.SimpleButtonModel; + + +/** + * This is the Widget for Multi settings. It uses a button to display to the + * user, and cycles the values. + * + * @author lahwran + */ +public class WidgetMulti extends WidgetSetting implements Runnable +{ + /** + * The reference to the underlying Button. + */ + public Button button; + /** + * The reference to the SettingMulti that this WidgetMulti uses. + */ + public SettingMulti value; + + /** + * This creates a new WidgetMulti using the SettingMulti and String + * provided. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + */ + public WidgetMulti(SettingMulti setting, String title) + { + super(title); + setTheme(""); + value = setting; + value.displayWidget = this; + SimpleButtonModel model = new SimpleButtonModel(); + button = new Button(model); + model.addActionCallback(this); + add(button); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) + { + button.getModel().addActionCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) + { + button.getModel().removeActionCallback(paramRunnable); + } + + @Override + public void run() + { + value.next(ModSettingScreen.guiContext); + update(); + GuiModScreen.clicksound(); + } + + @Override + public void update() + { + button.setText(userString()); + ModSettings.dbgout("multi update " + userString()); + } + + @Override + public String userString() + { + if (niceName.length() > 0) + { + return String.format("%s: %s", niceName, + value.getLabel(ModSettingScreen.guiContext)); + } + else + { + return value.getLabel(ModSettingScreen.guiContext); + } + } +} diff --git a/mcp/WidgetSetting.java b/mcp/WidgetSetting.java new file mode 100644 index 0000000..a948c56 --- /dev/null +++ b/mcp/WidgetSetting.java @@ -0,0 +1,106 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +import de.matthiasmann.twl.Widget; + + +/** + * This is the base class for Widgets that are supposed to be front ends for + * Settings. + * + * @author lahwran + */ +public abstract class WidgetSetting extends Widget +{ + /** + * This is a list of all WidgetSetting instances. + */ + public static ArrayList all = new ArrayList(); + + /** + * This updates all Widgets with the backing setting's current values. + */ + public static void updateAll() + { + for (int i = 0; i < WidgetSetting.all.size(); i++) + { + WidgetSetting.all.get(i).update(); + } + } + + /** + * The name that will be shown on the widget. + */ + public String niceName; + + /** + * This sets the Nice Name and adds itself to the list of instances. Note + * this class is abstract, so you will not be using this constructor. + * + * @param nicename + * The nice name for this WidgetSetting. + */ + public WidgetSetting(String nicename) + { + niceName = nicename; + WidgetSetting.all.add(this); + } + + @Override + public void add(Widget child) + { + String T = child.getTheme(); + if (T.length() == 0) + { + child.setTheme("/-defaults"); + } + else + if (!T.substring(0, 1).equals("/")) + { + child.setTheme("/" + T); + } + super.add(child); + } + + /** + * This adds a callback to the displayed widget (Button, Slider, etc) + * + * @param paramRunnable + * The Runnable callback you wish to call if the value changes. + */ + public abstract void addCallback(Runnable paramRunnable); + + @Override + public void layout() + { + for (int i = 0; i < getNumChildren(); i++) + { + Widget w = getChild(i); + w.setPosition(getX(), getY()); + w.setSize(getWidth(), getHeight()); + } + } + + /** + * This removes a callback to the displayed widget (Button, Slider, etc) if + * you previously set one up. + * + * @param paramRunnable + * The Runnable callback you wish to remove. + */ + public abstract void removeCallback(Runnable paramRunnable); + + /** + * This method updates the widget with the backing setting store. + */ + public abstract void update(); + + /** + * This returns a clean string that shows the Nice Name and the current + * value. + * + * @return A descriptor string. + */ + public abstract String userString(); +} diff --git a/mcp/WidgetSimplewindow.java b/mcp/WidgetSimplewindow.java new file mode 100644 index 0000000..7d70c6d --- /dev/null +++ b/mcp/WidgetSimplewindow.java @@ -0,0 +1,163 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.Button; +import de.matthiasmann.twl.Label; +import de.matthiasmann.twl.ScrollPane; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.model.SimpleButtonModel; + + +/** + * This widget is designed to make an easy base for menus. It include a + * ScrollPane for the main widget, a title bar on top, and a button to go back + * to the previous menu. + * + * @author lahwran + * @author ShaRose + */ +public class WidgetSimplewindow extends Widget +{ + /** + * This is a reference to the back button, if created. + */ + public Button backButton = new Button(); + /** + * This is a reference to the row at the bottom that contains the back + * button. + */ + public WidgetSingleRow buttonBar = new WidgetSingleRow(0, 0); + /** + * This is the padding to use on each side of the main widget. + */ + public int hPadding = 30; + /** + * This is a reference to the main widget in the center. + */ + public Widget mainWidget = new Widget(); + /** + * This is a reference to the Label that acts as the title on top. + */ + public Label titleWidget = new Label(); + /** + * This is the padding on the bottom. Generally, this is to keep room + * between the bottom of the main widget's ScrollPane and the button bar. + */ + public int vBottomPadding = 40; + /** + * This is the padding on the top. Generally, this is to keep room between + * the top of the main widget's ScrollPane and the Label. + */ + public int vTopPadding = 30; + + /** + * This is a basic constructor. It sets the title as an empty string and it + * creates a new WidgetClassicTwocolumn for the main widget. + */ + public WidgetSimplewindow() + { + this(new WidgetClassicTwocolumn(), "", true); + } + + /** + * This is a basic constructor. It uses the passed widget as the main widget + * and sets the title as an empty string. + * + * @param w + * The widget to use in the center. + */ + public WidgetSimplewindow(Widget w) + { + this(w, "", true); + } + + /** + * This is the most common constructor. This keeps everything default, + * although you can pass null for the title and it will remove the title bar + * for you. + * + * @param w + * The widget to use in the center. + * @param s + * The title to show on top. If null, the title bar will not be + * created. + */ + public WidgetSimplewindow(Widget w, String s) + { + this(w, s, true); + } + + /** + * This is the more advanced constructor. This can also skip the back button + * creation. + * + * @param w + * The widget to use in the center. + * @param s + * The title to show on top. If null, the title bar will not be + * created. + * @param showbackButton + */ + public WidgetSimplewindow(Widget w, String s, Boolean showbackButton) + { + ScrollPane mainWidget_ = new ScrollPane(w); + mainWidget_.setFixed(ScrollPane.Fixed.HORIZONTAL); + mainWidget = mainWidget_; + setTheme(""); + init(showbackButton, s); + } + + /** + * Initializes the WidgetSimplewindow's widgets. This is used internally. + * + * @param showBack Whether or not to show the back button. + * @param titleText What to set the label text to. If null, it will not have a label. + */ + protected void init(Boolean showBack, String titleText) + { + if (titleText != null) + { + titleWidget = new Label(titleText); + add(titleWidget); + } + else + { + vTopPadding = 10; + } + if (showBack) + { + backButton = new Button(new SimpleButtonModel()); + backButton.getModel().addActionCallback(GuiApiHelper.backModAction); + backButton.setText("Back"); + buttonBar = new WidgetSingleRow(200, 20, backButton); + add(buttonBar); + } + else + { + vBottomPadding = 0; + } + add(mainWidget); + } + + @Override + public void layout() + { + if (buttonBar != null) + { + buttonBar.setSize(buttonBar.getPreferredWidth(), + buttonBar.getPreferredHeight()); + buttonBar.setPosition( + (getWidth() / 2) - (buttonBar.getPreferredWidth() / 2), + getHeight() - (buttonBar.getPreferredHeight() + 4)); + } + if (titleWidget != null) + { + titleWidget.setPosition( + getWidth() / 2 - titleWidget.computeTextWidth() / 2, 10); + titleWidget.setSize(titleWidget.computeTextWidth(), + titleWidget.computeTextHeight()); + } + mainWidget.setPosition(hPadding, vTopPadding); + mainWidget.setSize(getWidth() - (hPadding * 2), getHeight() + - (vTopPadding + vBottomPadding)); + } +} diff --git a/mcp/WidgetSingleRow.java b/mcp/WidgetSingleRow.java new file mode 100644 index 0000000..e1eaf61 --- /dev/null +++ b/mcp/WidgetSingleRow.java @@ -0,0 +1,160 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +import de.matthiasmann.twl.Widget; + + +/** + * This is a layout widget designed to arrange your widgets in a row. It + * specifies height and width for each widget when you add them. + * + * @author lahwran + */ +public class WidgetSingleRow extends Widget +{ + /** + * This is the default height of any new widgets. + */ + public int defaultHeight = 20; + /** + * This is the default width of any new widgets. + */ + public int defaultWidth = 150; + protected ArrayList heights = new ArrayList(); + protected ArrayList widgets = new ArrayList(); + protected ArrayList widths = new ArrayList(); + /** + * This defines the space between child widgets. + */ + public int xSpacing = 3; + + /** + * This creates a new WidgetSingleRow, specifying the default width and + * height for any new widgets, as well as adding any widgets you would like + * to add. + * + * @param defwidth + * The default width to use for any new widgets. + * @param defheight + * The default height to use for any new widgets. + * @param widgets + * The widgets you are adding. + */ + public WidgetSingleRow(int defwidth, int defheight, Widget... widgets) + { + setTheme(""); + defaultWidth = defwidth; + defaultHeight = defheight; + for (int i = 0; i < widgets.length; i++) + { + add(widgets[i]); + } + } + + @Override + public void add(Widget widget) + { + add(widget, defaultWidth, defaultHeight); + } + + /** + * This adds a new Widget with specified width and height. + * + * @param widget + * The widget you are adding. + * @param width + * The width of the widget you are adding. + * @param height + * The height of the widget you are adding. + */ + public void add(Widget widget, int width, int height) + { + widgets.add(widget); + heights.add(height); + widths.add(width); + super.add(widget); + } + + private int getHeight(int idx) + { + if (heights.get(idx) >= 0) + { + return heights.get(idx); + } + else + { + return widgets.get(idx).getPreferredHeight(); + } + } + + @Override + public int getPreferredHeight() + { + int maxheights = 0; + for (int i = 0; i < heights.size(); i++) + { + if (getHeight(i) > maxheights) + { + maxheights = getHeight(i); + } + } + return maxheights; + } + + @Override + public int getPreferredWidth() + { + int totalwidth = (widths.size() - 1) * xSpacing; + totalwidth = totalwidth >= 0 ? totalwidth : 0; + for (int i = 0; i < widths.size(); i++) + { + totalwidth += getWidth(i); + } + return totalwidth; + } + + private int getWidth(int idx) + { + if (widths.get(idx) >= 0) + { + return widths.get(idx); + } + else + { + return widgets.get(idx).getPreferredWidth(); + } + } + + @Override + public void layout() + { + int curXpos = 0; + for (int i = 0; i < widgets.size(); i++) + { + Widget w = widgets.get(i); + w.setPosition(curXpos + getX(), getY()); + w.setSize(getWidth(i), getHeight(i)); + curXpos += getWidth(i) + xSpacing; + } + } + + @Override + public Widget removeChild(int idx) + { + widgets.remove(idx); + heights.remove(idx); + widths.remove(idx); + return super.removeChild(idx); + } + + @Override + public boolean removeChild(Widget widget) + { + int idx = widgets.indexOf(widget); + widgets.remove(idx); + heights.remove(idx); + widths.remove(idx); + return super.removeChild(widget); + } +} diff --git a/mcp/WidgetSinglecolumn.java b/mcp/WidgetSinglecolumn.java new file mode 100644 index 0000000..ed937e8 --- /dev/null +++ b/mcp/WidgetSinglecolumn.java @@ -0,0 +1,89 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.Widget; + + +/** + * This is a widget designed to arrange other widgets into a single column. + * + * @author lahwran + * @author ShaRose + */ +public class WidgetSinglecolumn extends WidgetClassicTwocolumn +{ + /** + * This creates the WidgetSinglecolumn with the specified Widgets. It chooses a default Width of 200. + * @param w The widgets to add. + */ + public WidgetSinglecolumn(Widget... widgets) + { + super(widgets); + childWidth = 200; + } + + @Override + public int getPreferredHeight() + { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); ++i) + { + Widget widget = getChild(i); + int height = childDefaultHeight; + if (!overrideHeight) + { + height = widget.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(widget)) + { + Integer heightSet = heightOverrideExceptions.get(widget); + if (heightSet == 0) + { + height = widget.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + totalheight += height + defaultPadding; + } + return totalheight; + } + + @Override + public int getPreferredWidth() + { + return Math.max(getParent().getWidth(), childWidth); + } + + @Override + public void layout() + { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); ++i) + { + Widget w = getChild(i); + int height = childDefaultHeight; + if (!overrideHeight) + { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) + { + Integer heightSet = heightOverrideExceptions.get(w); + if (heightSet == 0) + { + height = w.getPreferredHeight(); + } + else + { + height = heightSet; + } + } + w.setSize(childWidth, height); + w.setPosition(getX() + getWidth() / 2 - w.getWidth() / 2, getY() + + totalheight); + totalheight += height + defaultPadding; + } + } +} diff --git a/mcp/WidgetSlider.java b/mcp/WidgetSlider.java new file mode 100644 index 0000000..7713a5b --- /dev/null +++ b/mcp/WidgetSlider.java @@ -0,0 +1,32 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.ValueAdjusterFloat; +import de.matthiasmann.twl.model.FloatModel; + + +/** + * This is a simple extension of ValueAdjusterFloat so that it always updates + * the setting. Used internally. + * + * @author lahwran + */ +public class WidgetSlider extends ValueAdjusterFloat +{ + /** + * This is the basic constructor. It just calls the ValueAdjusterFloat + * constructor. + * + * @param f + * The FloatModel to use. + */ + public WidgetSlider(FloatModel f) + { + super(f); + } + + @Override + public void startEdit() + { + cancelEdit(); + } +} diff --git a/mcp/WidgetText.java b/mcp/WidgetText.java new file mode 100644 index 0000000..8b1ab70 --- /dev/null +++ b/mcp/WidgetText.java @@ -0,0 +1,148 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.EditField; +import de.matthiasmann.twl.Label; +import de.matthiasmann.twl.model.StringModel; +import de.matthiasmann.twl.utils.CallbackSupport; + + +/** + * This is the Widget for Text settings. It uses an EditField for the user to + * edit, and a Label for the name. + * + * @author lahwran + * @author ShaRose + */ +public class WidgetText extends WidgetSetting implements StringModel +{ + private Runnable[] callbacks; + /** + * The label that displays to the user what the nice name of this setting + * is. + */ + public Label displayLabel; + /** + * The EditField that the user actually changes the setting with. + */ + public EditField editField; + /** + * This is a control number to who and what can edit this setting. 0 means + * that both the SettingText and the user can edit. Below 0 means that only + * the user can edit: So resetting to default will not change the text the + * user sees. Over 0 means that the user can't edit the field, but if the + * SettingText updates, it will replace what the user sees. + */ + public int setmode = 0; + /** + * The reference to the SettingText that this WidgetText uses. + */ + public SettingText settingReference; + + /** + * This creates a new WidgetText using the SettingText and String provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the Label. If null, it will not + * have a label at all. + */ + public WidgetText(SettingText setting, String title) + { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + editField = new EditField(); + add(editField); + if (title == null) + { + displayLabel = new Label(); + displayLabel.setText(String.format("%s: ", niceName)); + add(displayLabel); + } + editField.setModel(this); + update(); + } + + @Override + public void addCallback(Runnable callback) + { + callbacks = (CallbackSupport.addCallbackToList(callbacks, callback, + Runnable.class)); + } + + @Override + public String getValue() + { + return settingReference.get(); + } + + @Override + public void layout() + { + if (displayLabel != null) + { + displayLabel.setPosition(getX(), getY() + getHeight() / 2 + - displayLabel.computeTextHeight() / 2); + displayLabel.setSize(displayLabel.computeTextWidth(), + displayLabel.computeTextHeight()); + editField.setPosition(getX() + displayLabel.computeTextWidth(), + getY()); + editField.setSize(getWidth() - displayLabel.computeTextWidth(), + getHeight()); + } + else + { + editField.setPosition(getX(), getY()); + editField.setSize(getWidth(), getHeight()); + } + } + + @Override + public void removeCallback(Runnable callback) + { + callbacks = (CallbackSupport + .removeCallbackFromList(callbacks, callback)); + } + + @Override + public void setValue(String _value) + { + GuiModScreen.clicksound(); + ModSettings.dbgout(String.format("setvalue %s", editField.getText())); + if (setmode <= 0) + { + setmode = -1; + settingReference.set(editField.getText(), + ModSettingScreen.guiContext); + setmode = 0; + } + CallbackSupport.fireCallbacks(callbacks); + } + + @Override + public void update() + { + ModSettings.dbgout("update"); + if (displayLabel != null) + { + displayLabel.setText(String.format("%s: ", niceName)); + } + if (setmode >= 0) + { + setmode = 1; + editField + .setText(settingReference.get(ModSettingScreen.guiContext)); + setmode = 0; + } + ModSettings.dbgout(String.format("update %s", editField.getText())); + } + + @Override + public String userString() + { + return String.format("%s: %s", niceName, + settingReference.get(ModSettingScreen.guiContext)); + } +} diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/mod_GuiApiBasicExample.java new file mode 100644 index 0000000..c1db11d --- /dev/null +++ b/mcp/mod_GuiApiBasicExample.java @@ -0,0 +1,133 @@ +package net.minecraft.src; + +/** + * This is the BASIC example of GuiAPI usage. We are going to create a + * ModSettings object, and use the 'easy' way of getting settings. Note, the + * easy was is slower than the intermediate way of doing things, so if you are + * getting your setting values several times a second you might want to read + * that after this tutorial. As well, this tutorial will show you some usage of + * the 'makeButton' and 'showTextDisplay' method in the GuiApiHelper class. + * + * @author ShaRose + */ +public class mod_GuiApiBasicExample extends BaseMod +{ + public ModSettingScreen myModScreen; + public ModSettings mySettings; + + public mod_GuiApiBasicExample() + { + // First, create the settings class. The string in question is the + // 'backend' name, usually the actual mod class name. + mySettings = new ModSettings("mod_GuiApiBasicExample"); + // This is the Mod screen. It will automatically register the button in + // the settings menu. This is two seperate steps, because you don't HAVE + // to have this step there, like if you only want to store the settings + // without a user-accessible gui. + // Since we are adding one with longish names, we are going to make this + // in single column mode. + myModScreen = new ModSettingScreen("GuiAPI Basic Example"); + // If you want to leave it in two column mode, you don't need this part. + // Now let's add a few settings. Since we are doing it in 'easy' mode, + // we'll just discard the return values in this case. + myModScreen.setSingleColumn(true); + // default is 5, min is 1, max is 10 + mySettings.addSetting(myModScreen, "Nice Name for Int A", + "backendIntA", 5, 1, 10); + // default is 0.5, min is 0.1, step is 0.01, max is 1.0. + mySettings.addSetting(myModScreen, "Nice Name for Float B", + "backendFloatB", 0.5f, 0.1f, 0.01f, 1.0f); + // Multi options, default at 'Option A', go between Option A-F + mySettings.addSetting(myModScreen, "Nice Name for Multi C", + "backendMultiC", 0, "Option A", "Option B", "Option C", + "Option D", "Option E", "Option F"); + // boolean, default at true + mySettings.addSetting(myModScreen, "Nice Name for Boolean D", + "backendBooleanD", true); + // boolean, default at true, with custom names + mySettings.addSetting(myModScreen, "Nice Name for Boolean E", + "backendBooleanE", false, "Yes!", "Noo!"); + // Text setting + mySettings.addSetting(myModScreen, "Nice Name for Text F", + "backendTextF", "This is the Default Value"); + // This makes a button which will call the 'ShowAllTheSettings' method + // below. If the method in question is a static method, please use the + // class. For example, mod_GuiAPIBasicExample.class instead of this. + // Note you don't have to use this either, it can be any object, and the + // method does not need to be public, as this can and will call private + // methods as well. The boolean at the end controls whether or not to + // automatically add the click sound. Use false if you want it to be + // silent, or if you want to call it manually with GuiModScreen.back() + myModScreen.append(GuiApiHelper.makeButton("Display all my settings!", + "ShowAllTheSettings", this, true)); + // We'll also add a button to reset all of the settings to default. You + // can do this on a per setting basis as well, but we'll learn that in + // the Intermediate example mod. As well, you can see that I am calling + // mySettings.resetAll() with this button, and it will click. + myModScreen.append(GuiApiHelper.makeButton("Default all my settings!", + "resetAll", mySettings, true)); + // And finally, don't forget to load any settings you saved earlier! + mySettings.load(); + } + + // This is the method that will be called if you press the + // "Display Settings" button. It doesn't have to be public, so you can make + // this private and it will work. However, since we are calling this from a + // button, it needs to return void. + public void ShowAllTheSettings() + { + StringBuilder displayTextBuilder = new StringBuilder(); + displayTextBuilder.append("Int A: "); + // this finds the setting by backend name. It makes sure that it is an + // int type, and gets the value of the current context (like a global + // context, or a per world context. By default, the context will not + // change, but you can specify specific ones if you want). You can + // specify one as an argument if you want as well. + displayTextBuilder.append(mySettings.getIntSetting("backendIntA")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Float B: "); + // Now Float B. + displayTextBuilder.append(mySettings.getFloatSetting("backendFloatB")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Multi C: "); + // Now Multi C, as an int which you can use in your code. + displayTextBuilder.append(mySettings.getMultiSetting("backendMultiC")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Multi C (Displayed): "); + // Now Multi C, as the displayed string on the menu. + displayTextBuilder.append(mySettings + .getMultiSettingLabel("backendMultiC")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Boolean D: "); + // Now Boolean D. + displayTextBuilder.append(mySettings + .getBooleanSetting("backendBooleanD")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Boolean E: "); + // Now Boolean E. Note that it is not any different whether you + // specified display names or not. + displayTextBuilder.append(mySettings + .getBooleanSetting("backendBooleanE")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Text F: "); + // Now String F. + displayTextBuilder.append(mySettings.getTextSetting("backendTextF")); + // Display your menu. It will have a title bar that says 'My Current + // Settings', will use all the text you just created using the + // StringBuilder and the settings helpers in a long textbox, and at the + // bottom will have a button that says 'OK, Go back to the settings + // now.' which, when pressed, will just go back to the last menu. In + // this case, your settings menu. It automatically sets up a scrollbar + // for you as well. Of course, we also call GuiModScreen.show to display + // the widget that makeTextDisplayAndGoBack creates. + GuiModScreen.show(GuiApiHelper.makeTextDisplayAndGoBack( + "My Current Settings", displayTextBuilder.toString(), + "OK, Go back to the settings now.", false)); + } + + @Override + public String Version() + { + return "1.0"; + } +} diff --git a/mcp/mod_GuiApiIntermediateExample.java b/mcp/mod_GuiApiIntermediateExample.java new file mode 100644 index 0000000..bbe007f --- /dev/null +++ b/mcp/mod_GuiApiIntermediateExample.java @@ -0,0 +1,226 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.TextArea; +import de.matthiasmann.twl.Widget; + + +/** + * This is the INTERMEDIATE example of GuiAPI usage. We are going to do the more + * correct, but slightly more complex, way of retrieving settings, learn about + * Callback usage within GuiAPI, and some more interesting usages of ModAction + * relating to that. We will also learn about subscreens and how to use them + * within your mod. We'll also be looking at the createChoiceMenu method in + * GuiApiHelper. + * + * @author ShaRose + */ +public class mod_GuiApiIntermediateExample extends BaseMod +{ + private static void updateTextArea(TextArea textArea, + @SuppressWarnings("rawtypes") Setting setting) + { + String text = ""; + // Instead of making different method for each one, We'll just check + // what type of setting each is, place the text you want in the text + // variable, and then set the TextArea. + if (setting instanceof SettingInt) + { + SettingInt settingint = (SettingInt) setting; + text = (settingint.get() - settingint.minimumValue) + / (float) (settingint.maximumValue - settingint.minimumValue) * 100 + "%"; + } + if (setting instanceof SettingFloat) + { + SettingFloat settingfloat = (SettingFloat) setting; + float val = (settingfloat.get() - settingfloat.minimumValue) + / (settingfloat.maximumValue - settingfloat.minimumValue); + if (val < 0) + { + val = 0; + } + text = val * 100 + "%"; + } + if (setting instanceof SettingText) + { + SettingText settingtext = (SettingText) setting; + text = settingtext.get(); + } + // Here's how you normally would set the TextArea's text, but we are + // going to use one of the helpers for it. It's still one line, but this + // way is a bit messy. + // ((SimpleTextAreaModel) textArea.getModel()).setText(text, false); + // Here's the cleaner way to do it, and this also works if you set it to + // use HTML mode. + GuiApiHelper.setTextAreaText(textArea, text); + } + + public ModSettingScreen myModScreen; + public ModSettings mySettings; + SettingBoolean settingBooleanD; + SettingBoolean settingBooleanE; + SettingFloat settingFloatB; + SettingInt settingIntA; + SettingMulti settingMultiC; + SettingText settingTextF; + public WidgetSimplewindow subscreenBooleans; + public WidgetSimplewindow subscreenNumberics; + public WidgetSimplewindow subscreenOthers; + + public mod_GuiApiIntermediateExample() + { + // We need to set up our settings and modscreen, so let's do that. + mySettings = new ModSettings("mod_GuiApiIntermediateExample"); + myModScreen = new ModSettingScreen("GuiAPI Intermediate Example"); + // Now we are going to start setting up our subscreens. I want it in one + // column, so I'm using the WidgetSinglecolumn class. If you want to use + // the normal two column version, use WidgetClassicTwocolumn instead. + WidgetSinglecolumn numbericBaseWidget = new WidgetSinglecolumn(); + // Note that this time we are saving the SettingInt that is returned. + // This is a faster way to get settings than the easy way shown in the + // basic example, but it takes up more space for field declarations. As + // well note instead of adding it to the modscreen, we are telling it to + // use the WidgetSinglecolumn we made just previous. + settingIntA = mySettings.addSetting(numbericBaseWidget, + "Nice Name for Int A", "backendIntA", 0, -100, 100); + // We are also going to have a TextArea display the percentage of what's + // selected. I'm leave the text blank for now, we will update it after + // we load the saved settings. As well, the reason for the false at the + // end is because we are just using simple text mode. If you want a + // TextBox to render HTML, set that to true. + TextArea textAreaA = GuiApiHelper.makeTextArea("", false); + // Add it to the subscreen we are making as well. + numbericBaseWidget.add(textAreaA); + // This is how you set up a callback when the value is changed. This + // code creates a ModAction that calls the static updateTextArea method + // in this class. It has two arguments: a TextArea and a Setting, so we + // specify that. Since there's no way for it to specify that kind of + // argument (The callback has no arguments to send), we are also going + // to tell it to use the references to the textarea we created for this + // setting, and the setting itself. After we create the setting, we use + // the setting to get a reference to the widget that is actually + // displayed, and add a callback. + settingIntA.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea A", TextArea.class, Setting.class) + .setDefaultArguments(textAreaA, settingIntA)); + // You should already know what this is. + settingFloatB = mySettings.addSetting(numbericBaseWidget, + "Nice Name for Float B", "backendFloatB", 0f, -2.0f, 0.01f, + 2.0f); + TextArea textAreaB = GuiApiHelper.makeTextArea("", false); + numbericBaseWidget.add(textAreaB); + // And again, this is much the same. Note that for both of these + // ModActions, we specifically set a 'name' for it, so in case anything + // happens and an exception is thrown, you will see 'Callback for + // TextArea B' in the stack trace. This is useful for debugging, as + // usually you won't see what the method that actually crashed is, but + // now you can see what method it was, where the ModAction was created, + // etc. As long as you set your names that is. + settingFloatB.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea B", TextArea.class, Setting.class) + .setDefaultArguments(textAreaB, settingFloatB)); + // Now we are going to merge the reset ModActions for the two 'numberic' + // settings. + ModAction mergedResetNumberics = new ModAction(settingIntA, "reset") + .mergeAction(new ModAction(settingFloatB, "reset")); + // And add a button for it to the subscreen. + numbericBaseWidget.add(GuiApiHelper.makeButton("Reset Numberic Values", + mergedResetNumberics, true)); + // Now we finish creating the subscreen. The WidgetSimplewindow sets up + // a title bar on top, and a button bar to go back on the bottom. There + // is an option to disable the back button as well. + subscreenNumberics = new WidgetSimplewindow(numbericBaseWidget, + "Numberic Settings"); + // And now create a Button to open your new SubScreen. We are going to + // use use the makeButton overloads this time, as we don't need to merge + // any ModActions. This one calls the static GuiModScreen.show method, + // which takes a Widget class as an parameter. When the button is + // clicked, it will call that method using subscreenNumberics as the + // argument. + myModScreen.append(GuiApiHelper.makeButton("Open Numberic Settings", + "show", GuiModScreen.class, true, new Class[] + { Widget.class }, subscreenNumberics)); + // And now we will do 2 other subscreens. There won't be anything + // special for these, so you should be able to follow along with what I + // am doing easily. + WidgetSinglecolumn booleanBaseWidget = new WidgetSinglecolumn(); + settingBooleanD = mySettings.addSetting(booleanBaseWidget, + "Nice Name for Boolean D", "backendBooleanD", true); + settingBooleanE = mySettings.addSetting(booleanBaseWidget, + "Nice Name for Boolean E", "backendBooleanE", false, "Yes!", + "Noo!"); + ModAction mergedResetBooleans = new ModAction(settingBooleanD, "reset") + .mergeAction(new ModAction(settingBooleanE, "reset")); + booleanBaseWidget.add(GuiApiHelper.makeButton("Reset Boolean Values", + mergedResetBooleans, true)); + subscreenBooleans = new WidgetSimplewindow(booleanBaseWidget, + "Boolean Settings"); + myModScreen.append(GuiApiHelper.makeButton("Open Boolean Settings", + "show", GuiModScreen.class, true, new Class[] + { Widget.class }, subscreenBooleans)); + WidgetSinglecolumn otherBaseWidget = new WidgetSinglecolumn(); + settingMultiC = mySettings.addSetting(otherBaseWidget, + "Nice Name for Multi C", "backendMultiC", 0, "Option A", + "Option B", "Option C", "Option D", "Option E", "Option F"); + // Actually, let's do something nice for the text widget. It's a bit + // small to see when editing, so we'll add a TextArea below it that + // shows what you have. + settingTextF = mySettings.addSetting(otherBaseWidget, + "Nice Name for Text F", "backendTextF", + "This is the Default Value"); + TextArea textAreaF = GuiApiHelper.makeTextArea("", false); + otherBaseWidget.add(textAreaF); + // This line of code adds the TextArea to the override list so it won't + // be overridden to anything. Normally, WidgetClassicTwocolumn and + // WidgetSinglecolumn override the height and width of all widgets. + // There's a boolean to not do that for everything, but if you do, it + // makes buttons thin and ugly looking. So, we are going to add it + // specifically so it doesn't override the height. As well, you can use + // this to specify a height to override to, by changing the integer. + otherBaseWidget.heightOverrideExceptions.put(textAreaF, 0); + // And we'll add the callback. It's pretty much the same as the numberic + // callbacks, since in this case we are using a single method for each. + settingTextF.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea F", TextArea.class, Setting.class) + .setDefaultArguments(textAreaF, settingTextF)); + ModAction mergedResetOthers = new ModAction(settingMultiC, "reset") + .mergeAction(new ModAction(settingTextF, "reset")); + otherBaseWidget.add(GuiApiHelper.makeButton("Reset Other Values", + mergedResetOthers, true)); + subscreenOthers = new WidgetSimplewindow(otherBaseWidget, + "Other Settings"); + myModScreen.append(GuiApiHelper.makeButton("Open Other Settings", + "show", GuiModScreen.class, true, new Class[] + { Widget.class }, subscreenOthers)); + myModScreen.append(GuiApiHelper.makeButton("Reset ALL settings", + "resetAll", mySettings, true)); + // And as well, we'll use GuiApiHelper.createChoiceMenu for a reset menu + // as well. + Widget choiceMenu = GuiApiHelper + .createChoiceMenu( + "Which settings would you like to reset? You can pick to reset any of the groups from here, or you can also reset all the settings as once.", + true, true, "Reset the Numberic Settings.", + mergedResetNumberics, "Reset the Boolean Settings.", + mergedResetBooleans, "Reset the Other settings.", + mergedResetOthers, "Reset everything.", new ModAction( + mySettings, "resetAll")); + // And a button to show the choice menu. + myModScreen.append(GuiApiHelper.makeButton("Reset Settings with Menu", + "show", GuiModScreen.class, true, new Class[] + { Widget.class }, choiceMenu)); + mySettings.load(); + // Finally, make sure all of those TextAreas are updated with the loaded + // values. + mod_GuiApiIntermediateExample.updateTextArea(textAreaA, settingIntA); + mod_GuiApiIntermediateExample.updateTextArea(textAreaB, settingFloatB); + mod_GuiApiIntermediateExample.updateTextArea(textAreaF, settingTextF); + } + + @Override + public String Version() + { + return "1.0"; + } +} From eb0423599129b84f9bd3c00d615b74ad5acfb3f9 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 3 Sep 2011 13:25:15 -0230 Subject: [PATCH 03/49] Updated javadocs --- doc/allclasses-frame.html | 6 +- doc/allclasses-noframe.html | 6 +- doc/constant-values.html | 4 +- doc/deprecated-list.html | 4 +- doc/help-doc.html | 4 +- doc/index-files/index-1.html | 7 +- doc/index-files/index-10.html | 4 +- doc/index-files/index-11.html | 4 +- doc/index-files/index-12.html | 16 +- doc/index-files/index-13.html | 4 +- doc/index-files/index-14.html | 4 +- doc/index-files/index-15.html | 6 +- doc/index-files/index-16.html | 4 +- doc/index-files/index-17.html | 34 ++-- doc/index-files/index-18.html | 4 +- doc/index-files/index-19.html | 4 +- doc/index-files/index-2.html | 4 +- doc/index-files/index-20.html | 4 +- doc/index-files/index-21.html | 4 +- doc/index-files/index-22.html | 4 +- doc/index-files/index-3.html | 4 +- doc/index-files/index-4.html | 7 +- doc/index-files/index-5.html | 4 +- doc/index-files/index-6.html | 4 +- doc/index-files/index-7.html | 7 +- doc/index-files/index-8.html | 4 +- doc/index-files/index-9.html | 7 +- doc/index.html | 2 +- doc/net/minecraft/src/GuiApiHelper.html | 4 +- doc/net/minecraft/src/GuiModScreen.html | 13 +- doc/net/minecraft/src/GuiModSelect.html | 8 +- doc/net/minecraft/src/GuiWidgetScreen.html | 10 +- doc/net/minecraft/src/ModAction.html | 4 +- doc/net/minecraft/src/ModSettingScreen.html | 4 +- doc/net/minecraft/src/ModSettings.html | 6 +- doc/net/minecraft/src/Setting.html | 4 +- doc/net/minecraft/src/SettingBoolean.html | 4 +- doc/net/minecraft/src/SettingFloat.html | 4 +- doc/net/minecraft/src/SettingInt.html | 4 +- doc/net/minecraft/src/SettingKey.html | 4 +- doc/net/minecraft/src/SettingMulti.html | 4 +- doc/net/minecraft/src/SettingText.html | 4 +- doc/net/minecraft/src/WidgetBoolean.html | 4 +- .../minecraft/src/WidgetClassicTwocolumn.html | 4 +- doc/net/minecraft/src/WidgetFloat.html | 4 +- doc/net/minecraft/src/WidgetInt.html | 4 +- doc/net/minecraft/src/WidgetKeybinding.html | 4 +- doc/net/minecraft/src/WidgetMulti.html | 4 +- doc/net/minecraft/src/WidgetSetting.html | 4 +- doc/net/minecraft/src/WidgetSimplewindow.html | 4 +- doc/net/minecraft/src/WidgetSingleRow.html | 4 +- doc/net/minecraft/src/WidgetSinglecolumn.html | 9 +- doc/net/minecraft/src/WidgetSlider.html | 4 +- doc/net/minecraft/src/WidgetText.html | 4 +- .../minecraft/src/class-use/GuiApiHelper.html | 4 +- .../minecraft/src/class-use/GuiModScreen.html | 4 +- .../minecraft/src/class-use/GuiModSelect.html | 4 +- .../src/class-use/GuiWidgetScreen.html | 4 +- .../minecraft/src/class-use/ModAction.html | 4 +- .../src/class-use/ModSettingScreen.html | 8 +- .../minecraft/src/class-use/ModSettings.html | 8 +- doc/net/minecraft/src/class-use/Setting.html | 4 +- .../src/class-use/SettingBoolean.html | 20 ++- .../minecraft/src/class-use/SettingFloat.html | 12 +- .../minecraft/src/class-use/SettingInt.html | 12 +- .../minecraft/src/class-use/SettingKey.html | 4 +- .../minecraft/src/class-use/SettingMulti.html | 12 +- .../minecraft/src/class-use/SettingText.html | 12 +- .../src/class-use/WidgetBoolean.html | 4 +- .../src/class-use/WidgetClassicTwocolumn.html | 4 +- .../minecraft/src/class-use/WidgetFloat.html | 4 +- .../minecraft/src/class-use/WidgetInt.html | 4 +- .../src/class-use/WidgetKeybinding.html | 4 +- .../minecraft/src/class-use/WidgetMulti.html | 4 +- .../src/class-use/WidgetSetting.html | 4 +- .../src/class-use/WidgetSimplewindow.html | 10 +- .../src/class-use/WidgetSingleRow.html | 4 +- .../src/class-use/WidgetSinglecolumn.html | 4 +- .../minecraft/src/class-use/WidgetSlider.html | 4 +- .../minecraft/src/class-use/WidgetText.html | 4 +- .../src/class-use/mod_GuiApiBasicExample.html | 4 +- .../mod_GuiApiIntermediateExample.html | 4 +- .../minecraft/src/mod_GuiApiBasicExample.html | 24 ++- .../src/mod_GuiApiIntermediateExample.html | 148 +++++++++++++++++- doc/net/minecraft/src/package-frame.html | 6 +- doc/net/minecraft/src/package-summary.html | 8 +- doc/net/minecraft/src/package-tree.html | 28 ++-- doc/net/minecraft/src/package-use.html | 4 +- doc/overview-tree.html | 6 +- mcp/GuiApiHelper.java | 8 + mcp/GuiModScreen.java | 10 +- mcp/GuiWidgetScreen.java | 2 +- mcp/ModSettings.java | 2 - mcp/WidgetSinglecolumn.java | 7 +- mcp/mod_GuiApiBasicExample.java | 15 +- mcp/mod_GuiApiIntermediateExample.java | 42 ++++- 96 files changed, 509 insertions(+), 275 deletions(-) diff --git a/doc/allclasses-frame.html b/doc/allclasses-frame.html index 797bfb6..5e2a617 100644 --- a/doc/allclasses-frame.html +++ b/doc/allclasses-frame.html @@ -2,12 +2,12 @@ - + All Classes - + @@ -27,8 +27,6 @@
GuiModSelect
-GuiOptions -
GuiWidgetScreen
mod_GuiApiBasicExample diff --git a/doc/allclasses-noframe.html b/doc/allclasses-noframe.html index cc90ab7..8c9cdb8 100644 --- a/doc/allclasses-noframe.html +++ b/doc/allclasses-noframe.html @@ -2,12 +2,12 @@ - + All Classes - + @@ -27,8 +27,6 @@
GuiModSelect
-GuiOptions -
GuiWidgetScreen
mod_GuiApiBasicExample diff --git a/doc/constant-values.html b/doc/constant-values.html index e42c779..c2e8862 100644 --- a/doc/constant-values.html +++ b/doc/constant-values.html @@ -2,12 +2,12 @@ - + Constant Field Values - + diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html index b490fb0..88b3117 100644 --- a/doc/deprecated-list.html +++ b/doc/deprecated-list.html @@ -2,12 +2,12 @@ - + Deprecated List - + diff --git a/doc/help-doc.html b/doc/help-doc.html index 16183f5..c216806 100644 --- a/doc/help-doc.html +++ b/doc/help-doc.html @@ -2,12 +2,12 @@ - + API Help - + diff --git a/doc/index-files/index-1.html b/doc/index-files/index-1.html index b861e35..356cc59 100644 --- a/doc/index-files/index-1.html +++ b/doc/index-files/index-1.html @@ -2,12 +2,12 @@ - + A-Index - + @@ -81,9 +81,6 @@

A

-
actionPerformed(GuiButton) - -Method in class net.minecraft.src.GuiOptions -
 
add(Widget) - Method in class net.minecraft.src.WidgetSetting
  diff --git a/doc/index-files/index-10.html b/doc/index-files/index-10.html index 1c29ab9..db2f61f 100644 --- a/doc/index-files/index-10.html +++ b/doc/index-files/index-10.html @@ -2,12 +2,12 @@ - + K-Index - + diff --git a/doc/index-files/index-11.html b/doc/index-files/index-11.html index 5ab4234..6596a51 100644 --- a/doc/index-files/index-11.html +++ b/doc/index-files/index-11.html @@ -2,12 +2,12 @@ - + L-Index - + diff --git a/doc/index-files/index-12.html b/doc/index-files/index-12.html index 6256c80..f4f97bf 100644 --- a/doc/index-files/index-12.html +++ b/doc/index-files/index-12.html @@ -2,12 +2,12 @@ - + M-Index - + @@ -133,10 +133,10 @@
The minimum value.
mod_GuiApiBasicExample - Class in net.minecraft.src
This is the BASIC example of GuiAPI usage.
mod_GuiApiBasicExample() - Constructor for class net.minecraft.src.mod_GuiApiBasicExample -
  +
Instantiates a new mod_GuiApiBasicExample.
mod_GuiApiIntermediateExample - Class in net.minecraft.src
This is the INTERMEDIATE example of GuiAPI usage.
mod_GuiApiIntermediateExample() - Constructor for class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
Instantiates a new mod_GuiApiIntermediateExample.
ModAction - Class in net.minecraft.src
This class is a helper designed to make it easier to use callbacks.
ModAction(Object, String, Class...) - Constructor for class net.minecraft.src.ModAction
This is the most common ModAction constructor. @@ -170,16 +170,16 @@
An alternate Constructor for ModSettingScreen.
myModScreen - Variable in class net.minecraft.src.mod_GuiApiBasicExample -
  +
The mod screen.
myModScreen - Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
The mod screen.
mySettings - Variable in class net.minecraft.src.mod_GuiApiBasicExample -
  +
The settings.
mySettings - Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
The settings.

diff --git a/doc/index-files/index-13.html b/doc/index-files/index-13.html index 982adb1..8e7af3b 100644 --- a/doc/index-files/index-13.html +++ b/doc/index-files/index-13.html @@ -2,12 +2,12 @@ - + N-Index - + diff --git a/doc/index-files/index-14.html b/doc/index-files/index-14.html index a77e2ff..3ec4a50 100644 --- a/doc/index-files/index-14.html +++ b/doc/index-files/index-14.html @@ -2,12 +2,12 @@ - + O-Index - + diff --git a/doc/index-files/index-15.html b/doc/index-files/index-15.html index 0fb4431..2338572 100644 --- a/doc/index-files/index-15.html +++ b/doc/index-files/index-15.html @@ -2,12 +2,12 @@ - + P-Index - + @@ -86,7 +86,7 @@
Reference to the ModSettings this Setting is a child of.
parentScreen - Variable in class net.minecraft.src.GuiModScreen -
Reference to parent screen, is used to go back() +
Reference to parent screen, is used by GuiModScreen#back()
presetMcint(Minecraft) - Static method in class net.minecraft.src.ModSettings
Set the Minecraft instance that getMcinst returns. diff --git a/doc/index-files/index-16.html b/doc/index-files/index-16.html index b6354fa..cf60b59 100644 --- a/doc/index-files/index-16.html +++ b/doc/index-files/index-16.html @@ -2,12 +2,12 @@ - + R-Index - + diff --git a/doc/index-files/index-17.html b/doc/index-files/index-17.html index 3ca15fd..ca3a3f9 100644 --- a/doc/index-files/index-17.html +++ b/doc/index-files/index-17.html @@ -2,12 +2,12 @@ - + S-Index - + @@ -93,9 +93,6 @@ Variable in class net.minecraft.src.GuiWidgetScreen
This is the ScaledResolution class that is used to scale all of the widgets. -
screenTitle - -Variable in class net.minecraft.src.GuiOptions -
 
screenwidth - Static variable in class net.minecraft.src.GuiWidgetScreen
The width of the screen that the widget will render on. @@ -163,6 +160,12 @@
SettingBoolean(String, Boolean) - Constructor for class net.minecraft.src.SettingBoolean
This is the constructor for SettingBoolean. +
settingBooleanD - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting boolean d. +
settingBooleanE - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting boolean e.
SettingFloat - Class in net.minecraft.src
This is the Setting type for Floats.
SettingFloat(String) - Constructor for class net.minecraft.src.SettingFloat
A constructor for SettingFloat. @@ -175,6 +178,9 @@
SettingFloat(String, float, float, float, float) - Constructor for class net.minecraft.src.SettingFloat
A constructor for SettingFloat. +
settingFloatB - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting float b.
SettingInt - Class in net.minecraft.src
This is the Setting type for Ints.
SettingInt(String) - Constructor for class net.minecraft.src.SettingInt
A constructor for SettingInt. @@ -187,6 +193,9 @@
SettingInt(String, int, int, int, int) - Constructor for class net.minecraft.src.SettingInt
A constructor for SettingInt. +
settingIntA - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting int a.
SettingKey - Class in net.minecraft.src
This is the Setting type for Keys.
SettingKey(String, int) - Constructor for class net.minecraft.src.SettingKey
Constructor for SettingKey. @@ -199,6 +208,9 @@
SettingMulti(String, String...) - Constructor for class net.minecraft.src.SettingMulti
A constructor for SettingMulti. +
settingMultiC - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting multi c.
settingReference - Variable in class net.minecraft.src.WidgetBoolean
The reference to the SettingBoolean that this WidgetBoolean uses. @@ -223,6 +235,9 @@
SettingText - Class in net.minecraft.src
This is the Setting type for Text.
SettingText(String, String) - Constructor for class net.minecraft.src.SettingText
A constructor for SettingText. +
settingTextF - +Variable in class net.minecraft.src.mod_GuiApiIntermediateExample +
The setting text f.
setupHandler(Object, String) - Method in class net.minecraft.src.ModAction
  @@ -237,7 +252,8 @@
Show a screen - TWL widget version.
ShowAllTheSettings() - Method in class net.minecraft.src.mod_GuiApiBasicExample -
  +
This is the method that will be called if you press the + "Display Settings" button.
size() - Method in class net.minecraft.src.ModSettings
  @@ -261,13 +277,13 @@
The step value.
subscreenBooleans - Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
The subscreen for booleans.
subscreenNumberics - Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
The subscreen for numberics.
subscreenOthers - Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
  +
The subscreen for others.
diff --git a/doc/index-files/index-18.html b/doc/index-files/index-18.html index d8bdf7c..43670e0 100644 --- a/doc/index-files/index-18.html +++ b/doc/index-files/index-18.html @@ -2,12 +2,12 @@ - + T-Index - + diff --git a/doc/index-files/index-19.html b/doc/index-files/index-19.html index 8d3415f..bf0c140 100644 --- a/doc/index-files/index-19.html +++ b/doc/index-files/index-19.html @@ -2,12 +2,12 @@ - + U-Index - + diff --git a/doc/index-files/index-2.html b/doc/index-files/index-2.html index c393868..af590d7 100644 --- a/doc/index-files/index-2.html +++ b/doc/index-files/index-2.html @@ -2,12 +2,12 @@ - + B-Index - + diff --git a/doc/index-files/index-20.html b/doc/index-files/index-20.html index b12704b..77cbf62 100644 --- a/doc/index-files/index-20.html +++ b/doc/index-files/index-20.html @@ -2,12 +2,12 @@ - + V-Index - + diff --git a/doc/index-files/index-21.html b/doc/index-files/index-21.html index 0dade8f..b5fc11d 100644 --- a/doc/index-files/index-21.html +++ b/doc/index-files/index-21.html @@ -2,12 +2,12 @@ - + W-Index - + diff --git a/doc/index-files/index-22.html b/doc/index-files/index-22.html index ac8c321..66e10ee 100644 --- a/doc/index-files/index-22.html +++ b/doc/index-files/index-22.html @@ -2,12 +2,12 @@ - + X-Index - + diff --git a/doc/index-files/index-3.html b/doc/index-files/index-3.html index 8425962..323bf39 100644 --- a/doc/index-files/index-3.html +++ b/doc/index-files/index-3.html @@ -2,12 +2,12 @@ - + C-Index - + diff --git a/doc/index-files/index-4.html b/doc/index-files/index-4.html index 25ddd4e..72ac5c2 100644 --- a/doc/index-files/index-4.html +++ b/doc/index-files/index-4.html @@ -2,12 +2,12 @@ - + D-Index - + @@ -119,9 +119,6 @@
drawScreen(int, int, float) - Method in class net.minecraft.src.GuiModScreen
  -
drawScreen(int, int, float) - -Method in class net.minecraft.src.GuiOptions -
 
diff --git a/doc/index-files/index-5.html b/doc/index-files/index-5.html index 0ea1c12..d07f089 100644 --- a/doc/index-files/index-5.html +++ b/doc/index-files/index-5.html @@ -2,12 +2,12 @@ - + E-Index - + diff --git a/doc/index-files/index-6.html b/doc/index-files/index-6.html index 7808704..e332a90 100644 --- a/doc/index-files/index-6.html +++ b/doc/index-files/index-6.html @@ -2,12 +2,12 @@ - + F-Index - + diff --git a/doc/index-files/index-7.html b/doc/index-files/index-7.html index 3fcdba1..ba4ecae 100644 --- a/doc/index-files/index-7.html +++ b/doc/index-files/index-7.html @@ -2,12 +2,12 @@ - + G-Index - + @@ -243,9 +243,6 @@ button in the options menu.
GuiModSelect(GuiScreen) - Constructor for class net.minecraft.src.GuiModSelect
  -
GuiOptions - Class in net.minecraft.src
 
GuiOptions(GuiScreen, GameSettings) - -Constructor for class net.minecraft.src.GuiOptions -
 
GuiWidgetScreen - Class in net.minecraft.src
TWL Widget that switches out child widgets.
GuiWidgetScreen() - Constructor for class net.minecraft.src.GuiWidgetScreen
This creates a new instance of GuiWidgetScreen. diff --git a/doc/index-files/index-8.html b/doc/index-files/index-8.html index b26b10b..42caa46 100644 --- a/doc/index-files/index-8.html +++ b/doc/index-files/index-8.html @@ -2,12 +2,12 @@ - + H-Index - + diff --git a/doc/index-files/index-9.html b/doc/index-files/index-9.html index b446a67..45f9fcb 100644 --- a/doc/index-files/index-9.html +++ b/doc/index-files/index-9.html @@ -2,12 +2,12 @@ - + I-Index - + @@ -84,9 +84,6 @@
init(Boolean, String) - Method in class net.minecraft.src.WidgetSimplewindow
Initializes the WidgetSimplewindow's widgets. -
initGui() - -Method in class net.minecraft.src.GuiOptions -
 
instance - Static variable in class net.minecraft.src.GuiWidgetScreen
The initialized instance of GuiWidgetScreen. diff --git a/doc/index.html b/doc/index.html index 291597c..d5b387f 100644 --- a/doc/index.html +++ b/doc/index.html @@ -2,7 +2,7 @@ - + Generated Documentation (Untitled) diff --git a/doc/net/minecraft/src/GuiApiHelper.html b/doc/net/minecraft/src/GuiApiHelper.html index 8d3835b..ebb1edf 100644 --- a/doc/net/minecraft/src/GuiApiHelper.html +++ b/doc/net/minecraft/src/GuiApiHelper.html @@ -2,12 +2,12 @@ - + GuiApiHelper - + diff --git a/doc/net/minecraft/src/GuiModScreen.html b/doc/net/minecraft/src/GuiModScreen.html index 9f73b6b..a39f0f9 100644 --- a/doc/net/minecraft/src/GuiModScreen.html +++ b/doc/net/minecraft/src/GuiModScreen.html @@ -2,12 +2,12 @@ - + GuiModScreen - + @@ -114,7 +114,8 @@

Author:
lahwran
-
See Also:
show
+
See Also:
show(GuiModScreen), +show(Widget)

@@ -156,7 +157,7 @@

parentScreen
-          Reference to parent screen, is used to go back() +          Reference to parent screen, is used by GuiModScreen#back()   @@ -313,7 +314,7 @@

 public GuiScreen parentScreen
-
Reference to parent screen, is used to go back() +
Reference to parent screen, is used by GuiModScreen#back()

See Also:
back()
@@ -339,7 +340,7 @@

widget in mainwidget, of course.

-
Parameters:
screen - parent screen
+
Parameters:
screen - parent screen
See Also:
back()


diff --git a/doc/net/minecraft/src/GuiModSelect.html b/doc/net/minecraft/src/GuiModSelect.html index dedad50..7250d15 100644 --- a/doc/net/minecraft/src/GuiModSelect.html +++ b/doc/net/minecraft/src/GuiModSelect.html @@ -2,12 +2,12 @@ - + GuiModSelect - + @@ -55,7 +55,7 @@  PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   @@ -228,7 +228,7 @@

 PREV CLASS  - NEXT CLASSNEXT CLASS FRAMES    NO FRAMES   diff --git a/doc/net/minecraft/src/GuiWidgetScreen.html b/doc/net/minecraft/src/GuiWidgetScreen.html index 739b6d9..ab7a972 100644 --- a/doc/net/minecraft/src/GuiWidgetScreen.html +++ b/doc/net/minecraft/src/GuiWidgetScreen.html @@ -2,12 +2,12 @@ - + GuiWidgetScreen - + @@ -54,7 +54,7 @@ PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   @@ -460,7 +460,7 @@

GuiModScreen manages this.

-
Parameters:
w - widget to display
+
Parameters:
widget - widget to display
@@ -493,7 +493,7 @@

PREV CLASS  + PREV CLASS   NEXT CLASS FRAMES   diff --git a/doc/net/minecraft/src/ModAction.html b/doc/net/minecraft/src/ModAction.html index 3370ca6..80594cc 100644 --- a/doc/net/minecraft/src/ModAction.html +++ b/doc/net/minecraft/src/ModAction.html @@ -2,12 +2,12 @@ - + ModAction - + diff --git a/doc/net/minecraft/src/ModSettingScreen.html b/doc/net/minecraft/src/ModSettingScreen.html index 14da868..60bef2f 100644 --- a/doc/net/minecraft/src/ModSettingScreen.html +++ b/doc/net/minecraft/src/ModSettingScreen.html @@ -2,12 +2,12 @@ - + ModSettingScreen - + diff --git a/doc/net/minecraft/src/ModSettings.html b/doc/net/minecraft/src/ModSettings.html index 8d33b3e..bdc5ed6 100644 --- a/doc/net/minecraft/src/ModSettings.html +++ b/doc/net/minecraft/src/ModSettings.html @@ -2,12 +2,12 @@ - + ModSettings - + @@ -1438,7 +1438,7 @@

Get a list of all Multi settings for the current context.

-
Parameters:
context - The context from which to copy from. +
Returns:
The list of settings.
diff --git a/doc/net/minecraft/src/Setting.html b/doc/net/minecraft/src/Setting.html index 1547633..a1f9850 100644 --- a/doc/net/minecraft/src/Setting.html +++ b/doc/net/minecraft/src/Setting.html @@ -2,12 +2,12 @@ - + Setting - + diff --git a/doc/net/minecraft/src/SettingBoolean.html b/doc/net/minecraft/src/SettingBoolean.html index 6a074d1..f67478e 100644 --- a/doc/net/minecraft/src/SettingBoolean.html +++ b/doc/net/minecraft/src/SettingBoolean.html @@ -2,12 +2,12 @@ - + SettingBoolean - + diff --git a/doc/net/minecraft/src/SettingFloat.html b/doc/net/minecraft/src/SettingFloat.html index 1b60eea..a32d723 100644 --- a/doc/net/minecraft/src/SettingFloat.html +++ b/doc/net/minecraft/src/SettingFloat.html @@ -2,12 +2,12 @@ - + SettingFloat - + diff --git a/doc/net/minecraft/src/SettingInt.html b/doc/net/minecraft/src/SettingInt.html index 0236d79..7cbc6bb 100644 --- a/doc/net/minecraft/src/SettingInt.html +++ b/doc/net/minecraft/src/SettingInt.html @@ -2,12 +2,12 @@ - + SettingInt - + diff --git a/doc/net/minecraft/src/SettingKey.html b/doc/net/minecraft/src/SettingKey.html index 634e072..620443d 100644 --- a/doc/net/minecraft/src/SettingKey.html +++ b/doc/net/minecraft/src/SettingKey.html @@ -2,12 +2,12 @@ - + SettingKey - + diff --git a/doc/net/minecraft/src/SettingMulti.html b/doc/net/minecraft/src/SettingMulti.html index 4903231..910cfea 100644 --- a/doc/net/minecraft/src/SettingMulti.html +++ b/doc/net/minecraft/src/SettingMulti.html @@ -2,12 +2,12 @@ - + SettingMulti - + diff --git a/doc/net/minecraft/src/SettingText.html b/doc/net/minecraft/src/SettingText.html index 9589e1a..030c735 100644 --- a/doc/net/minecraft/src/SettingText.html +++ b/doc/net/minecraft/src/SettingText.html @@ -2,12 +2,12 @@ - + SettingText - + diff --git a/doc/net/minecraft/src/WidgetBoolean.html b/doc/net/minecraft/src/WidgetBoolean.html index 4e76a0b..e6c4312 100644 --- a/doc/net/minecraft/src/WidgetBoolean.html +++ b/doc/net/minecraft/src/WidgetBoolean.html @@ -2,12 +2,12 @@ - + WidgetBoolean - + diff --git a/doc/net/minecraft/src/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/WidgetClassicTwocolumn.html index 0066df1..db33b09 100644 --- a/doc/net/minecraft/src/WidgetClassicTwocolumn.html +++ b/doc/net/minecraft/src/WidgetClassicTwocolumn.html @@ -2,12 +2,12 @@ - + WidgetClassicTwocolumn - + diff --git a/doc/net/minecraft/src/WidgetFloat.html b/doc/net/minecraft/src/WidgetFloat.html index 6d03c78..5583215 100644 --- a/doc/net/minecraft/src/WidgetFloat.html +++ b/doc/net/minecraft/src/WidgetFloat.html @@ -2,12 +2,12 @@ - + WidgetFloat - + diff --git a/doc/net/minecraft/src/WidgetInt.html b/doc/net/minecraft/src/WidgetInt.html index 7311790..4f31dbe 100644 --- a/doc/net/minecraft/src/WidgetInt.html +++ b/doc/net/minecraft/src/WidgetInt.html @@ -2,12 +2,12 @@ - + WidgetInt - + diff --git a/doc/net/minecraft/src/WidgetKeybinding.html b/doc/net/minecraft/src/WidgetKeybinding.html index 5c36b04..3d40eb8 100644 --- a/doc/net/minecraft/src/WidgetKeybinding.html +++ b/doc/net/minecraft/src/WidgetKeybinding.html @@ -2,12 +2,12 @@ - + WidgetKeybinding - + diff --git a/doc/net/minecraft/src/WidgetMulti.html b/doc/net/minecraft/src/WidgetMulti.html index d821241..78aaef9 100644 --- a/doc/net/minecraft/src/WidgetMulti.html +++ b/doc/net/minecraft/src/WidgetMulti.html @@ -2,12 +2,12 @@ - + WidgetMulti - + diff --git a/doc/net/minecraft/src/WidgetSetting.html b/doc/net/minecraft/src/WidgetSetting.html index 8463e7b..cdaf372 100644 --- a/doc/net/minecraft/src/WidgetSetting.html +++ b/doc/net/minecraft/src/WidgetSetting.html @@ -2,12 +2,12 @@ - + WidgetSetting - + diff --git a/doc/net/minecraft/src/WidgetSimplewindow.html b/doc/net/minecraft/src/WidgetSimplewindow.html index 53fa445..e803e47 100644 --- a/doc/net/minecraft/src/WidgetSimplewindow.html +++ b/doc/net/minecraft/src/WidgetSimplewindow.html @@ -2,12 +2,12 @@ - + WidgetSimplewindow - + diff --git a/doc/net/minecraft/src/WidgetSingleRow.html b/doc/net/minecraft/src/WidgetSingleRow.html index 058f976..4d96436 100644 --- a/doc/net/minecraft/src/WidgetSingleRow.html +++ b/doc/net/minecraft/src/WidgetSingleRow.html @@ -2,12 +2,12 @@ - + WidgetSingleRow - + diff --git a/doc/net/minecraft/src/WidgetSinglecolumn.html b/doc/net/minecraft/src/WidgetSinglecolumn.html index a285ed7..1034274 100644 --- a/doc/net/minecraft/src/WidgetSinglecolumn.html +++ b/doc/net/minecraft/src/WidgetSinglecolumn.html @@ -2,12 +2,12 @@ - + WidgetSinglecolumn - + @@ -208,10 +208,11 @@

 public WidgetSinglecolumn(Widget... widgets)
-
This creates the WidgetSinglecolumn with the specified Widgets. It chooses a default Width of 200. +
This creates the WidgetSinglecolumn with the specified Widgets. It + chooses a default Width of 200.

-
Parameters:
w - The widgets to add.
+
Parameters:
widgets - The widgets to add.
diff --git a/doc/net/minecraft/src/WidgetSlider.html b/doc/net/minecraft/src/WidgetSlider.html index f3cc593..1fa0afe 100644 --- a/doc/net/minecraft/src/WidgetSlider.html +++ b/doc/net/minecraft/src/WidgetSlider.html @@ -2,12 +2,12 @@ - + WidgetSlider - + diff --git a/doc/net/minecraft/src/WidgetText.html b/doc/net/minecraft/src/WidgetText.html index 69b1180..6985789 100644 --- a/doc/net/minecraft/src/WidgetText.html +++ b/doc/net/minecraft/src/WidgetText.html @@ -2,12 +2,12 @@ - + WidgetText - + diff --git a/doc/net/minecraft/src/class-use/GuiApiHelper.html b/doc/net/minecraft/src/class-use/GuiApiHelper.html index c24559f..fbaa310 100644 --- a/doc/net/minecraft/src/class-use/GuiApiHelper.html +++ b/doc/net/minecraft/src/class-use/GuiApiHelper.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.GuiApiHelper - + diff --git a/doc/net/minecraft/src/class-use/GuiModScreen.html b/doc/net/minecraft/src/class-use/GuiModScreen.html index c78c813..5020e51 100644 --- a/doc/net/minecraft/src/class-use/GuiModScreen.html +++ b/doc/net/minecraft/src/class-use/GuiModScreen.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.GuiModScreen - + diff --git a/doc/net/minecraft/src/class-use/GuiModSelect.html b/doc/net/minecraft/src/class-use/GuiModSelect.html index 0d4c0e9..423bb85 100644 --- a/doc/net/minecraft/src/class-use/GuiModSelect.html +++ b/doc/net/minecraft/src/class-use/GuiModSelect.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.GuiModSelect - + diff --git a/doc/net/minecraft/src/class-use/GuiWidgetScreen.html b/doc/net/minecraft/src/class-use/GuiWidgetScreen.html index e309ddf..1b93862 100644 --- a/doc/net/minecraft/src/class-use/GuiWidgetScreen.html +++ b/doc/net/minecraft/src/class-use/GuiWidgetScreen.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.GuiWidgetScreen - + diff --git a/doc/net/minecraft/src/class-use/ModAction.html b/doc/net/minecraft/src/class-use/ModAction.html index 60de6e4..1d496d3 100644 --- a/doc/net/minecraft/src/class-use/ModAction.html +++ b/doc/net/minecraft/src/class-use/ModAction.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.ModAction - + diff --git a/doc/net/minecraft/src/class-use/ModSettingScreen.html b/doc/net/minecraft/src/class-use/ModSettingScreen.html index adbbf10..a6f56ff 100644 --- a/doc/net/minecraft/src/class-use/ModSettingScreen.html +++ b/doc/net/minecraft/src/class-use/ModSettingScreen.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.ModSettingScreen - + @@ -102,7 +102,7 @@

mod_GuiApiBasicExample.myModScreen
-            +          The mod screen. @@ -110,7 +110,7 @@

mod_GuiApiIntermediateExample.myModScreen
-            +          The mod screen.   diff --git a/doc/net/minecraft/src/class-use/ModSettings.html b/doc/net/minecraft/src/class-use/ModSettings.html index bba74fd..92e963d 100644 --- a/doc/net/minecraft/src/class-use/ModSettings.html +++ b/doc/net/minecraft/src/class-use/ModSettings.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.ModSettings - + @@ -102,7 +102,7 @@

mod_GuiApiBasicExample.mySettings
-            +          The settings. @@ -110,7 +110,7 @@

mod_GuiApiIntermediateExample.mySettings
-            +          The settings. diff --git a/doc/net/minecraft/src/class-use/Setting.html b/doc/net/minecraft/src/class-use/Setting.html index be88027..7aaa231 100644 --- a/doc/net/minecraft/src/class-use/Setting.html +++ b/doc/net/minecraft/src/class-use/Setting.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.Setting - + diff --git a/doc/net/minecraft/src/class-use/SettingBoolean.html b/doc/net/minecraft/src/class-use/SettingBoolean.html index b781ebf..01bf7c3 100644 --- a/doc/net/minecraft/src/class-use/SettingBoolean.html +++ b/doc/net/minecraft/src/class-use/SettingBoolean.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingBoolean - + @@ -99,6 +99,22 @@

 SettingBoolean +mod_GuiApiIntermediateExample.settingBooleanD + +
+          The setting boolean d. + + + + SettingBoolean +mod_GuiApiIntermediateExample.settingBooleanE + +
+          The setting boolean e. + + + + SettingBoolean WidgetBoolean.settingReference
diff --git a/doc/net/minecraft/src/class-use/SettingFloat.html b/doc/net/minecraft/src/class-use/SettingFloat.html index 83e66cb..f88d2cb 100644 --- a/doc/net/minecraft/src/class-use/SettingFloat.html +++ b/doc/net/minecraft/src/class-use/SettingFloat.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingFloat - + @@ -99,6 +99,14 @@

 SettingFloat +mod_GuiApiIntermediateExample.settingFloatB + +
+          The setting float b. + + + + SettingFloat WidgetFloat.settingReference
diff --git a/doc/net/minecraft/src/class-use/SettingInt.html b/doc/net/minecraft/src/class-use/SettingInt.html index 9bfb47e..32b7c90 100644 --- a/doc/net/minecraft/src/class-use/SettingInt.html +++ b/doc/net/minecraft/src/class-use/SettingInt.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingInt - + @@ -99,6 +99,14 @@

 SettingInt +mod_GuiApiIntermediateExample.settingIntA + +
+          The setting int a. + + + + SettingInt WidgetInt.settingReference
diff --git a/doc/net/minecraft/src/class-use/SettingKey.html b/doc/net/minecraft/src/class-use/SettingKey.html index c844474..575c841 100644 --- a/doc/net/minecraft/src/class-use/SettingKey.html +++ b/doc/net/minecraft/src/class-use/SettingKey.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingKey - + diff --git a/doc/net/minecraft/src/class-use/SettingMulti.html b/doc/net/minecraft/src/class-use/SettingMulti.html index 7ccffeb..5f372f4 100644 --- a/doc/net/minecraft/src/class-use/SettingMulti.html +++ b/doc/net/minecraft/src/class-use/SettingMulti.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingMulti - + @@ -99,6 +99,14 @@

 SettingMulti +mod_GuiApiIntermediateExample.settingMultiC + +
+          The setting multi c. + + + + SettingMulti WidgetMulti.value
diff --git a/doc/net/minecraft/src/class-use/SettingText.html b/doc/net/minecraft/src/class-use/SettingText.html index 2c39747..7336800 100644 --- a/doc/net/minecraft/src/class-use/SettingText.html +++ b/doc/net/minecraft/src/class-use/SettingText.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.SettingText - + @@ -104,6 +104,14 @@


          The reference to the SettingText that this WidgetText uses. + + + SettingText +mod_GuiApiIntermediateExample.settingTextF + +
+          The setting text f. +  

diff --git a/doc/net/minecraft/src/class-use/WidgetBoolean.html b/doc/net/minecraft/src/class-use/WidgetBoolean.html index 61a30c8..d9ff02f 100644 --- a/doc/net/minecraft/src/class-use/WidgetBoolean.html +++ b/doc/net/minecraft/src/class-use/WidgetBoolean.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetBoolean - + diff --git a/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html index 2bcaafa..a7fe241 100644 --- a/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html +++ b/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetClassicTwocolumn - + diff --git a/doc/net/minecraft/src/class-use/WidgetFloat.html b/doc/net/minecraft/src/class-use/WidgetFloat.html index 7550aa6..86e63fb 100644 --- a/doc/net/minecraft/src/class-use/WidgetFloat.html +++ b/doc/net/minecraft/src/class-use/WidgetFloat.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetFloat - + diff --git a/doc/net/minecraft/src/class-use/WidgetInt.html b/doc/net/minecraft/src/class-use/WidgetInt.html index fb753e2..f9a244c 100644 --- a/doc/net/minecraft/src/class-use/WidgetInt.html +++ b/doc/net/minecraft/src/class-use/WidgetInt.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetInt - + diff --git a/doc/net/minecraft/src/class-use/WidgetKeybinding.html b/doc/net/minecraft/src/class-use/WidgetKeybinding.html index 0ae091a..3c5a853 100644 --- a/doc/net/minecraft/src/class-use/WidgetKeybinding.html +++ b/doc/net/minecraft/src/class-use/WidgetKeybinding.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetKeybinding - + diff --git a/doc/net/minecraft/src/class-use/WidgetMulti.html b/doc/net/minecraft/src/class-use/WidgetMulti.html index 86dee62..a41ceb1 100644 --- a/doc/net/minecraft/src/class-use/WidgetMulti.html +++ b/doc/net/minecraft/src/class-use/WidgetMulti.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetMulti - + diff --git a/doc/net/minecraft/src/class-use/WidgetSetting.html b/doc/net/minecraft/src/class-use/WidgetSetting.html index 3671c27..98a9ea4 100644 --- a/doc/net/minecraft/src/class-use/WidgetSetting.html +++ b/doc/net/minecraft/src/class-use/WidgetSetting.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetSetting - + diff --git a/doc/net/minecraft/src/class-use/WidgetSimplewindow.html b/doc/net/minecraft/src/class-use/WidgetSimplewindow.html index 976ecd2..8f222dd 100644 --- a/doc/net/minecraft/src/class-use/WidgetSimplewindow.html +++ b/doc/net/minecraft/src/class-use/WidgetSimplewindow.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetSimplewindow - + @@ -102,7 +102,7 @@

mod_GuiApiIntermediateExample.subscreenBooleans
-            +          The subscreen for booleans. @@ -110,7 +110,7 @@

mod_GuiApiIntermediateExample.subscreenNumberics
-            +          The subscreen for numberics. @@ -118,7 +118,7 @@

mod_GuiApiIntermediateExample.subscreenOthers
-            +          The subscreen for others.   diff --git a/doc/net/minecraft/src/class-use/WidgetSingleRow.html b/doc/net/minecraft/src/class-use/WidgetSingleRow.html index 6b95be5..d4fe6f2 100644 --- a/doc/net/minecraft/src/class-use/WidgetSingleRow.html +++ b/doc/net/minecraft/src/class-use/WidgetSingleRow.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetSingleRow - + diff --git a/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html b/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html index 53e0ad8..1670cda 100644 --- a/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html +++ b/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetSinglecolumn - + diff --git a/doc/net/minecraft/src/class-use/WidgetSlider.html b/doc/net/minecraft/src/class-use/WidgetSlider.html index 6145fc8..1ce1fed 100644 --- a/doc/net/minecraft/src/class-use/WidgetSlider.html +++ b/doc/net/minecraft/src/class-use/WidgetSlider.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetSlider - + diff --git a/doc/net/minecraft/src/class-use/WidgetText.html b/doc/net/minecraft/src/class-use/WidgetText.html index d30b2b5..9dfc77d 100644 --- a/doc/net/minecraft/src/class-use/WidgetText.html +++ b/doc/net/minecraft/src/class-use/WidgetText.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.WidgetText - + diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html index 6a6ed51..6e5bdfb 100644 --- a/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html +++ b/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.mod_GuiApiBasicExample - + diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html index b554854..3b2dbc5 100644 --- a/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html +++ b/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html @@ -2,12 +2,12 @@ - + Uses of Class net.minecraft.src.mod_GuiApiIntermediateExample - + diff --git a/doc/net/minecraft/src/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/mod_GuiApiBasicExample.html index cecb837..1f24313 100644 --- a/doc/net/minecraft/src/mod_GuiApiBasicExample.html +++ b/doc/net/minecraft/src/mod_GuiApiBasicExample.html @@ -2,12 +2,12 @@ - + mod_GuiApiBasicExample - + @@ -131,7 +131,7 @@

myModScreen
-            +          The mod screen. @@ -139,7 +139,7 @@

mySettings
-            +          The settings.   @@ -155,7 +155,7 @@

mod_GuiApiBasicExample()
-            +          Instantiates a new mod_GuiApiBasicExample.   @@ -173,7 +173,8 @@

ShowAllTheSettings()
-            +          This is the method that will be called if you press the + "Display Settings" button. @@ -211,6 +212,8 @@

 public ModSettingScreen myModScreen
+
The mod screen. +

@@ -221,6 +224,8 @@

 public ModSettings mySettings
+
The settings. +

@@ -240,6 +245,8 @@

 public mod_GuiApiBasicExample()
+
Instantiates a new mod_GuiApiBasicExample. +

@@ -257,6 +264,11 @@

 public void ShowAllTheSettings()
+
This is the method that will be called if you press the + "Display Settings" button. It doesn't have to be public, so you can make + this private and it will work. However, since we are calling this from a + button, it needs to return void. +

diff --git a/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html index c537b4d..5ca203f 100644 --- a/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html +++ b/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html @@ -2,12 +2,12 @@ - + mod_GuiApiIntermediateExample - + @@ -131,7 +131,7 @@

myModScreen
-            +          The mod screen. @@ -139,7 +139,55 @@

mySettings
-            +          The settings. + + + + SettingBoolean +settingBooleanD + +
+          The setting boolean d. + + + + SettingBoolean +settingBooleanE + +
+          The setting boolean e. + + + + SettingFloat +settingFloatB + +
+          The setting float b. + + + + SettingInt +settingIntA + +
+          The setting int a. + + + + SettingMulti +settingMultiC + +
+          The setting multi c. + + + + SettingText +settingTextF + +
+          The setting text f. @@ -147,7 +195,7 @@

subscreenBooleans
-            +          The subscreen for booleans. @@ -155,7 +203,7 @@

subscreenNumberics
-            +          The subscreen for numberics. @@ -163,7 +211,7 @@

subscreenOthers
-            +          The subscreen for others.   @@ -179,7 +227,7 @@

mod_GuiApiIntermediateExample()
-            +          Instantiates a new mod_GuiApiIntermediateExample.   @@ -227,6 +275,8 @@

 public ModSettingScreen myModScreen
+
The mod screen. +

@@ -237,6 +287,80 @@

 public ModSettings mySettings
+
The settings. +

+

+
+
+
+ +

+settingBooleanD

+
+public SettingBoolean settingBooleanD
+
+
The setting boolean d. +

+

+
+
+
+ +

+settingBooleanE

+
+public SettingBoolean settingBooleanE
+
+
The setting boolean e. +

+

+
+
+
+ +

+settingFloatB

+
+public SettingFloat settingFloatB
+
+
The setting float b. +

+

+
+
+
+ +

+settingIntA

+
+public SettingInt settingIntA
+
+
The setting int a. +

+

+
+
+
+ +

+settingMultiC

+
+public SettingMulti settingMultiC
+
+
The setting multi c. +

+

+
+
+
+ +

+settingTextF

+
+public SettingText settingTextF
+
+
The setting text f. +

@@ -247,6 +371,8 @@

 public WidgetSimplewindow subscreenBooleans
+
The subscreen for booleans. +

@@ -257,6 +383,8 @@

 public WidgetSimplewindow subscreenNumberics
+
The subscreen for numberics. +

@@ -267,6 +395,8 @@

 public WidgetSimplewindow subscreenOthers
+
The subscreen for others. +

@@ -286,6 +416,8 @@

 public mod_GuiApiIntermediateExample()
+
Instantiates a new mod_GuiApiIntermediateExample. +

diff --git a/doc/net/minecraft/src/package-frame.html b/doc/net/minecraft/src/package-frame.html index 835cb27..20867e3 100644 --- a/doc/net/minecraft/src/package-frame.html +++ b/doc/net/minecraft/src/package-frame.html @@ -2,12 +2,12 @@ - + net.minecraft.src - + @@ -29,8 +29,6 @@
GuiModSelect
-GuiOptions -
GuiWidgetScreen
mod_GuiApiBasicExample diff --git a/doc/net/minecraft/src/package-summary.html b/doc/net/minecraft/src/package-summary.html index 944bc17..ff9e5a2 100644 --- a/doc/net/minecraft/src/package-summary.html +++ b/doc/net/minecraft/src/package-summary.html @@ -2,12 +2,12 @@ - + net.minecraft.src - + @@ -102,10 +102,6 @@

button in the options menu. -GuiOptions -  - - GuiWidgetScreen TWL Widget that switches out child widgets. diff --git a/doc/net/minecraft/src/package-tree.html b/doc/net/minecraft/src/package-tree.html index 45b29d9..8b56730 100644 --- a/doc/net/minecraft/src/package-tree.html +++ b/doc/net/minecraft/src/package-tree.html @@ -2,12 +2,12 @@ - + net.minecraft.src Class Hierarchy - + @@ -89,27 +89,17 @@


diff --git a/doc/net/minecraft/src/package-use.html b/doc/net/minecraft/src/package-use.html index 3639093..1840f0c 100644 --- a/doc/net/minecraft/src/package-use.html +++ b/doc/net/minecraft/src/package-use.html @@ -2,12 +2,12 @@ - + Uses of Package net.minecraft.src - + diff --git a/doc/overview-tree.html b/doc/overview-tree.html index 684cf66..7534da9 100644 --- a/doc/overview-tree.html +++ b/doc/overview-tree.html @@ -2,12 +2,12 @@ - + Class Hierarchy - + @@ -98,8 +98,6 @@

  • net.minecraft.src.GuiModScreen -
  • GuiScreen
  • net.minecraft.src.ModAction (implements java.beans.PropertyChangeListener, java.lang.Runnable)
  • net.minecraft.src.ModSettings
  • net.minecraft.src.ModSettingScreen
  • ValueAdjusterFloat diff --git a/mcp/GuiApiHelper.java b/mcp/GuiApiHelper.java index 7233ba0..14a9353 100644 --- a/mcp/GuiApiHelper.java +++ b/mcp/GuiApiHelper.java @@ -285,9 +285,17 @@ public static Widget makeTextDisplayAndGoBack(String titleText, return window; } + /** The button info. */ private ArrayList> buttonInfo_; + + /** The display text. */ private String displayText_; + /** + * Instantiates a new gui api helper. + * + * @param displayText the display text + */ private GuiApiHelper(String displayText) { displayText_ = displayText; diff --git a/mcp/GuiModScreen.java b/mcp/GuiModScreen.java index bf0d7dd..3713ea3 100644 --- a/mcp/GuiModScreen.java +++ b/mcp/GuiModScreen.java @@ -13,7 +13,9 @@ * would use unsafe api (I still might change things.) * * @author lahwran - * @see show + * + * @see GuiModScreen#show(GuiModScreen) + * @see GuiModScreen#show(Widget) */ public class GuiModScreen extends GuiScreen { @@ -94,9 +96,9 @@ public static void show(Widget screen) */ public Widget mainwidget; /** - * Reference to parent screen, is used to go back() + * Reference to parent screen, is used by GuiModScreen#back() * - * @see back() + * @see GuiModScreen#back() */ public GuiScreen parentScreen; @@ -107,6 +109,8 @@ public static void show(Widget screen) * * @param screen * parent screen + * + * @see GuiModScreen#back() */ protected GuiModScreen(GuiScreen screen) { diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 0caa627..3178647 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -144,7 +144,7 @@ public void resetScreen() * to be called only from GuiModScreen, sets the widget to display. * GuiModScreen manages this. * - * @param w + * @param widget * widget to display */ public void setScreen(Widget widget) diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index 332836d..e092e66 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -599,8 +599,6 @@ public ArrayList getAllKeySettings(String context) /** * Get a list of all Multi settings for the current context. * - * @param context - * The context from which to copy from. * @return The list of settings. */ public ArrayList getAllMultiSettings() diff --git a/mcp/WidgetSinglecolumn.java b/mcp/WidgetSinglecolumn.java index ed937e8..2657ad9 100644 --- a/mcp/WidgetSinglecolumn.java +++ b/mcp/WidgetSinglecolumn.java @@ -12,8 +12,11 @@ public class WidgetSinglecolumn extends WidgetClassicTwocolumn { /** - * This creates the WidgetSinglecolumn with the specified Widgets. It chooses a default Width of 200. - * @param w The widgets to add. + * This creates the WidgetSinglecolumn with the specified Widgets. It + * chooses a default Width of 200. + * + * @param widgets + * The widgets to add. */ public WidgetSinglecolumn(Widget... widgets) { diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/mod_GuiApiBasicExample.java index c1db11d..8463f8c 100644 --- a/mcp/mod_GuiApiBasicExample.java +++ b/mcp/mod_GuiApiBasicExample.java @@ -12,9 +12,14 @@ */ public class mod_GuiApiBasicExample extends BaseMod { + /** The mod screen. */ public ModSettingScreen myModScreen; + /** The settings. */ public ModSettings mySettings; + /** + * Instantiates a new mod_GuiApiBasicExample. + */ public mod_GuiApiBasicExample() { // First, create the settings class. The string in question is the @@ -70,10 +75,12 @@ public mod_GuiApiBasicExample() mySettings.load(); } - // This is the method that will be called if you press the - // "Display Settings" button. It doesn't have to be public, so you can make - // this private and it will work. However, since we are calling this from a - // button, it needs to return void. + /** + * This is the method that will be called if you press the + * "Display Settings" button. It doesn't have to be public, so you can make + * this private and it will work. However, since we are calling this from a + * button, it needs to return void. + */ public void ShowAllTheSettings() { StringBuilder displayTextBuilder = new StringBuilder(); diff --git a/mcp/mod_GuiApiIntermediateExample.java b/mcp/mod_GuiApiIntermediateExample.java index bbe007f..29c8171 100644 --- a/mcp/mod_GuiApiIntermediateExample.java +++ b/mcp/mod_GuiApiIntermediateExample.java @@ -16,6 +16,12 @@ */ public class mod_GuiApiIntermediateExample extends BaseMod { + /** + * This is a method designed to update the text area, depending on what kind of setting is passed. Please view the source code comments for more. + * + * @param textArea The textarea to update. + * @param setting The setting to get info from. This particular method supports SettingInt, SettingFloat, and SettingText. + */ private static void updateTextArea(TextArea textArea, @SuppressWarnings("rawtypes") Setting setting) { @@ -54,18 +60,42 @@ private static void updateTextArea(TextArea textArea, GuiApiHelper.setTextAreaText(textArea, text); } + /** The mod screen. */ public ModSettingScreen myModScreen; + + /** The settings. */ public ModSettings mySettings; - SettingBoolean settingBooleanD; - SettingBoolean settingBooleanE; - SettingFloat settingFloatB; - SettingInt settingIntA; - SettingMulti settingMultiC; - SettingText settingTextF; + + /** The setting boolean d. */ + public SettingBoolean settingBooleanD; + + /** The setting boolean e. */ + public SettingBoolean settingBooleanE; + + /** The setting float b. */ + public SettingFloat settingFloatB; + + /** The setting int a. */ + public SettingInt settingIntA; + + /** The setting multi c. */ + public SettingMulti settingMultiC; + + /** The setting text f. */ + public SettingText settingTextF; + + /** The subscreen for booleans. */ public WidgetSimplewindow subscreenBooleans; + + /** The subscreen for numberics. */ public WidgetSimplewindow subscreenNumberics; + + /** The subscreen for others. */ public WidgetSimplewindow subscreenOthers; + /** + * Instantiates a new mod_GuiApiIntermediateExample. + */ public mod_GuiApiIntermediateExample() { // We need to set up our settings and modscreen, so let's do that. From 2a9cfc1fb2963587dcc05cd641c95f5b095296f2 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 3 Sep 2011 20:52:32 -0230 Subject: [PATCH 04/49] Removed the javadocs from GitHub temporarily until I find a good way to do them. Fixed a few bugs. --- doc/allclasses-frame.html | 85 - doc/allclasses-noframe.html | 85 - doc/constant-values.html | 172 -- doc/deprecated-list.html | 144 -- doc/help-doc.html | 215 -- doc/index-files/index-1.html | 248 --- doc/index-files/index-10.html | 143 -- doc/index-files/index-11.html | 173 -- doc/index-files/index-12.html | 239 --- doc/index-files/index-13.html | 159 -- doc/index-files/index-14.html | 146 -- doc/index-files/index-15.html | 152 -- doc/index-files/index-16.html | 212 -- doc/index-files/index-17.html | 343 --- doc/index-files/index-18.html | 176 -- doc/index-files/index-19.html | 186 -- doc/index-files/index-2.html | 174 -- doc/index-files/index-20.html | 161 -- doc/index-files/index-21.html | 208 -- doc/index-files/index-22.html | 143 -- doc/index-files/index-3.html | 193 -- doc/index-files/index-4.html | 178 -- doc/index-files/index-5.html | 143 -- doc/index-files/index-6.html | 164 -- doc/index-files/index-7.html | 305 --- doc/index-files/index-8.html | 155 -- doc/index-files/index-9.html | 152 -- doc/index.html | 36 - doc/net/minecraft/src/GuiApiHelper.html | 652 ------ doc/net/minecraft/src/GuiModScreen.html | 510 ----- doc/net/minecraft/src/GuiModSelect.html | 262 --- doc/net/minecraft/src/GuiOptions.html | 331 --- doc/net/minecraft/src/GuiWidgetScreen.html | 528 ----- doc/net/minecraft/src/ModAction.html | 742 ------- doc/net/minecraft/src/ModSettingScreen.html | 494 ----- doc/net/minecraft/src/ModSettings.html | 1846 ----------------- doc/net/minecraft/src/Setting.html | 566 ----- doc/net/minecraft/src/SettingBoolean.html | 398 ---- doc/net/minecraft/src/SettingFloat.html | 518 ----- doc/net/minecraft/src/SettingInt.html | 518 ----- doc/net/minecraft/src/SettingKey.html | 488 ----- doc/net/minecraft/src/SettingMulti.html | 563 ----- doc/net/minecraft/src/SettingText.html | 379 ---- doc/net/minecraft/src/WidgetBoolean.html | 524 ----- .../minecraft/src/WidgetClassicTwocolumn.html | 468 ----- doc/net/minecraft/src/WidgetFloat.html | 496 ----- doc/net/minecraft/src/WidgetInt.html | 454 ---- doc/net/minecraft/src/WidgetKeybinding.html | 560 ----- doc/net/minecraft/src/WidgetMulti.html | 457 ---- doc/net/minecraft/src/WidgetSetting.html | 455 ---- doc/net/minecraft/src/WidgetSimplewindow.html | 515 ----- doc/net/minecraft/src/WidgetSingleRow.html | 524 ----- doc/net/minecraft/src/WidgetSinglecolumn.html | 330 --- doc/net/minecraft/src/WidgetSlider.html | 265 --- doc/net/minecraft/src/WidgetText.html | 536 ----- .../minecraft/src/class-use/GuiApiHelper.html | 166 -- .../minecraft/src/class-use/GuiModScreen.html | 198 -- .../minecraft/src/class-use/GuiModSelect.html | 142 -- .../minecraft/src/class-use/GuiOptions.html | 142 -- .../src/class-use/GuiWidgetScreen.html | 181 -- .../minecraft/src/class-use/ModAction.html | 263 --- .../src/class-use/ModSettingScreen.html | 307 --- .../minecraft/src/class-use/ModSettings.html | 197 -- doc/net/minecraft/src/class-use/Setting.html | 189 -- .../src/class-use/SettingBoolean.html | 287 --- .../minecraft/src/class-use/SettingFloat.html | 278 --- .../minecraft/src/class-use/SettingInt.html | 274 --- .../minecraft/src/class-use/SettingKey.html | 235 --- .../minecraft/src/class-use/SettingMulti.html | 245 --- .../minecraft/src/class-use/SettingText.html | 242 --- .../src/class-use/WidgetBoolean.html | 142 -- .../src/class-use/WidgetClassicTwocolumn.html | 165 -- .../minecraft/src/class-use/WidgetFloat.html | 142 -- .../minecraft/src/class-use/WidgetInt.html | 142 -- .../src/class-use/WidgetKeybinding.html | 142 -- .../minecraft/src/class-use/WidgetMulti.html | 142 -- .../src/class-use/WidgetSetting.html | 181 -- .../src/class-use/WidgetSimplewindow.html | 181 -- .../src/class-use/WidgetSingleRow.html | 166 -- .../src/class-use/WidgetSinglecolumn.html | 142 -- .../minecraft/src/class-use/WidgetSlider.html | 173 -- .../minecraft/src/class-use/WidgetText.html | 142 -- .../src/class-use/mod_GuiApiBasicExample.html | 142 -- .../mod_GuiApiIntermediateExample.html | 142 -- .../minecraft/src/mod_GuiApiBasicExample.html | 349 ---- .../src/mod_GuiApiIntermediateExample.html | 504 ----- doc/net/minecraft/src/package-frame.html | 86 - doc/net/minecraft/src/package-summary.html | 267 --- doc/net/minecraft/src/package-tree.html | 182 -- doc/net/minecraft/src/package-use.html | 260 --- doc/overview-tree.html | 184 -- doc/package-list | 1 - doc/resources/inherit.gif | Bin 57 -> 0 bytes doc/stylesheet.css | 29 - javadoc.xml | 6 - mcp/WidgetClassicTwocolumn.java | 37 +- mcp/WidgetSinglecolumn.java | 10 +- mcp/WidgetText.java | 2 +- 98 files changed, 29 insertions(+), 26647 deletions(-) delete mode 100644 doc/allclasses-frame.html delete mode 100644 doc/allclasses-noframe.html delete mode 100644 doc/constant-values.html delete mode 100644 doc/deprecated-list.html delete mode 100644 doc/help-doc.html delete mode 100644 doc/index-files/index-1.html delete mode 100644 doc/index-files/index-10.html delete mode 100644 doc/index-files/index-11.html delete mode 100644 doc/index-files/index-12.html delete mode 100644 doc/index-files/index-13.html delete mode 100644 doc/index-files/index-14.html delete mode 100644 doc/index-files/index-15.html delete mode 100644 doc/index-files/index-16.html delete mode 100644 doc/index-files/index-17.html delete mode 100644 doc/index-files/index-18.html delete mode 100644 doc/index-files/index-19.html delete mode 100644 doc/index-files/index-2.html delete mode 100644 doc/index-files/index-20.html delete mode 100644 doc/index-files/index-21.html delete mode 100644 doc/index-files/index-22.html delete mode 100644 doc/index-files/index-3.html delete mode 100644 doc/index-files/index-4.html delete mode 100644 doc/index-files/index-5.html delete mode 100644 doc/index-files/index-6.html delete mode 100644 doc/index-files/index-7.html delete mode 100644 doc/index-files/index-8.html delete mode 100644 doc/index-files/index-9.html delete mode 100644 doc/index.html delete mode 100644 doc/net/minecraft/src/GuiApiHelper.html delete mode 100644 doc/net/minecraft/src/GuiModScreen.html delete mode 100644 doc/net/minecraft/src/GuiModSelect.html delete mode 100644 doc/net/minecraft/src/GuiOptions.html delete mode 100644 doc/net/minecraft/src/GuiWidgetScreen.html delete mode 100644 doc/net/minecraft/src/ModAction.html delete mode 100644 doc/net/minecraft/src/ModSettingScreen.html delete mode 100644 doc/net/minecraft/src/ModSettings.html delete mode 100644 doc/net/minecraft/src/Setting.html delete mode 100644 doc/net/minecraft/src/SettingBoolean.html delete mode 100644 doc/net/minecraft/src/SettingFloat.html delete mode 100644 doc/net/minecraft/src/SettingInt.html delete mode 100644 doc/net/minecraft/src/SettingKey.html delete mode 100644 doc/net/minecraft/src/SettingMulti.html delete mode 100644 doc/net/minecraft/src/SettingText.html delete mode 100644 doc/net/minecraft/src/WidgetBoolean.html delete mode 100644 doc/net/minecraft/src/WidgetClassicTwocolumn.html delete mode 100644 doc/net/minecraft/src/WidgetFloat.html delete mode 100644 doc/net/minecraft/src/WidgetInt.html delete mode 100644 doc/net/minecraft/src/WidgetKeybinding.html delete mode 100644 doc/net/minecraft/src/WidgetMulti.html delete mode 100644 doc/net/minecraft/src/WidgetSetting.html delete mode 100644 doc/net/minecraft/src/WidgetSimplewindow.html delete mode 100644 doc/net/minecraft/src/WidgetSingleRow.html delete mode 100644 doc/net/minecraft/src/WidgetSinglecolumn.html delete mode 100644 doc/net/minecraft/src/WidgetSlider.html delete mode 100644 doc/net/minecraft/src/WidgetText.html delete mode 100644 doc/net/minecraft/src/class-use/GuiApiHelper.html delete mode 100644 doc/net/minecraft/src/class-use/GuiModScreen.html delete mode 100644 doc/net/minecraft/src/class-use/GuiModSelect.html delete mode 100644 doc/net/minecraft/src/class-use/GuiOptions.html delete mode 100644 doc/net/minecraft/src/class-use/GuiWidgetScreen.html delete mode 100644 doc/net/minecraft/src/class-use/ModAction.html delete mode 100644 doc/net/minecraft/src/class-use/ModSettingScreen.html delete mode 100644 doc/net/minecraft/src/class-use/ModSettings.html delete mode 100644 doc/net/minecraft/src/class-use/Setting.html delete mode 100644 doc/net/minecraft/src/class-use/SettingBoolean.html delete mode 100644 doc/net/minecraft/src/class-use/SettingFloat.html delete mode 100644 doc/net/minecraft/src/class-use/SettingInt.html delete mode 100644 doc/net/minecraft/src/class-use/SettingKey.html delete mode 100644 doc/net/minecraft/src/class-use/SettingMulti.html delete mode 100644 doc/net/minecraft/src/class-use/SettingText.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetBoolean.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetFloat.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetInt.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetKeybinding.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetMulti.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetSetting.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetSimplewindow.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetSingleRow.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetSinglecolumn.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetSlider.html delete mode 100644 doc/net/minecraft/src/class-use/WidgetText.html delete mode 100644 doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html delete mode 100644 doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html delete mode 100644 doc/net/minecraft/src/mod_GuiApiBasicExample.html delete mode 100644 doc/net/minecraft/src/mod_GuiApiIntermediateExample.html delete mode 100644 doc/net/minecraft/src/package-frame.html delete mode 100644 doc/net/minecraft/src/package-summary.html delete mode 100644 doc/net/minecraft/src/package-tree.html delete mode 100644 doc/net/minecraft/src/package-use.html delete mode 100644 doc/overview-tree.html delete mode 100644 doc/package-list delete mode 100644 doc/resources/inherit.gif delete mode 100644 doc/stylesheet.css delete mode 100644 javadoc.xml diff --git a/doc/allclasses-frame.html b/doc/allclasses-frame.html deleted file mode 100644 index 5e2a617..0000000 --- a/doc/allclasses-frame.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - -All Classes - - - - - - - - - - - -All Classes -
    - - - - - -
    GuiApiHelper -
    -GuiModScreen -
    -GuiModSelect -
    -GuiWidgetScreen -
    -mod_GuiApiBasicExample -
    -mod_GuiApiIntermediateExample -
    -ModAction -
    -ModSettings -
    -ModSettingScreen -
    -Setting -
    -SettingBoolean -
    -SettingFloat -
    -SettingInt -
    -SettingKey -
    -SettingMulti -
    -SettingText -
    -WidgetBoolean -
    -WidgetClassicTwocolumn -
    -WidgetFloat -
    -WidgetInt -
    -WidgetKeybinding -
    -WidgetMulti -
    -WidgetSetting -
    -WidgetSimplewindow -
    -WidgetSinglecolumn -
    -WidgetSingleRow -
    -WidgetSlider -
    -WidgetText -
    -
    - - - diff --git a/doc/allclasses-noframe.html b/doc/allclasses-noframe.html deleted file mode 100644 index 8c9cdb8..0000000 --- a/doc/allclasses-noframe.html +++ /dev/null @@ -1,85 +0,0 @@ - - - - - - -All Classes - - - - - - - - - - - -All Classes -
    - - - - - -
    GuiApiHelper -
    -GuiModScreen -
    -GuiModSelect -
    -GuiWidgetScreen -
    -mod_GuiApiBasicExample -
    -mod_GuiApiIntermediateExample -
    -ModAction -
    -ModSettings -
    -ModSettingScreen -
    -Setting -
    -SettingBoolean -
    -SettingFloat -
    -SettingInt -
    -SettingKey -
    -SettingMulti -
    -SettingText -
    -WidgetBoolean -
    -WidgetClassicTwocolumn -
    -WidgetFloat -
    -WidgetInt -
    -WidgetKeybinding -
    -WidgetMulti -
    -WidgetSetting -
    -WidgetSimplewindow -
    -WidgetSinglecolumn -
    -WidgetSingleRow -
    -WidgetSlider -
    -WidgetText -
    -
    - - - diff --git a/doc/constant-values.html b/doc/constant-values.html deleted file mode 100644 index c2e8862..0000000 --- a/doc/constant-values.html +++ /dev/null @@ -1,172 +0,0 @@ - - - - - - -Constant Field Values - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Constant Field Values

    -
    -
    -Contents - - - - - - -
    -net.minecraft.*
    - -

    - - - - - - - - - - - - -
    net.minecraft.src.ModSettings
    -public static final booleandebugfalse
    - -

    - -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/deprecated-list.html b/doc/deprecated-list.html deleted file mode 100644 index 88b3117..0000000 --- a/doc/deprecated-list.html +++ /dev/null @@ -1,144 +0,0 @@ - - - - - - -Deprecated List - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Deprecated API

    -
    -
    -Contents
      -
    - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/help-doc.html b/doc/help-doc.html deleted file mode 100644 index c216806..0000000 --- a/doc/help-doc.html +++ /dev/null @@ -1,215 +0,0 @@ - - - - - - -API Help - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -How This API Document Is Organized

    -
    -This API (Application Programming Interface) document has pages corresponding to the items in the navigation bar, described as follows.

    -Package

    -
    - -

    -Each package has a page that contains a list of its classes and interfaces, with a summary for each. This page can contain four categories:

      -
    • Interfaces (italic)
    • Classes
    • Enums
    • Exceptions
    • Errors
    • Annotation Types
    -
    -

    -Class/Interface

    -
    - -

    -Each class, interface, nested class and nested interface has its own separate page. Each of these pages has three sections consisting of a class/interface description, summary tables, and detailed member descriptions:

      -
    • Class inheritance diagram
    • Direct Subclasses
    • All Known Subinterfaces
    • All Known Implementing Classes
    • Class/interface declaration
    • Class/interface description -

      -

    • Nested Class Summary
    • Field Summary
    • Constructor Summary
    • Method Summary -

      -

    • Field Detail
    • Constructor Detail
    • Method Detail
    -Each summary entry contains the first sentence from the detailed description for that item. The summary entries are alphabetical, while the detailed descriptions are in the order they appear in the source code. This preserves the logical groupings established by the programmer.
    - -

    -Annotation Type

    -
    - -

    -Each annotation type has its own separate page with the following sections:

      -
    • Annotation Type declaration
    • Annotation Type description
    • Required Element Summary
    • Optional Element Summary
    • Element Detail
    -
    - -

    -Enum

    -
    - -

    -Each enum has its own separate page with the following sections:

      -
    • Enum declaration
    • Enum description
    • Enum Constant Summary
    • Enum Constant Detail
    -
    -

    -Use

    -
    -Each documented package, class and interface has its own Use page. This page describes what packages, classes, methods, constructors and fields use any part of the given class or package. Given a class or interface A, its Use page includes subclasses of A, fields declared as A, methods that return A, and methods and constructors with parameters of type A. You can access this page by first going to the package, class or interface, then clicking on the "Use" link in the navigation bar.
    -

    -Tree (Class Hierarchy)

    -
    -There is a Class Hierarchy page for all packages, plus a hierarchy for each package. Each hierarchy page contains a list of classes and a list of interfaces. The classes are organized by inheritance structure starting with java.lang.Object. The interfaces do not inherit from java.lang.Object.
      -
    • When viewing the Overview page, clicking on "Tree" displays the hierarchy for all packages.
    • When viewing a particular package, class or interface page, clicking "Tree" displays the hierarchy for only that package.
    -
    -

    -Deprecated API

    -
    -The Deprecated API page lists all of the API that have been deprecated. A deprecated API is not recommended for use, generally due to improvements, and a replacement API is usually given. Deprecated APIs may be removed in future implementations.
    -

    -Index

    -
    -The Index contains an alphabetic list of all classes, interfaces, constructors, methods, and fields.
    -

    -Prev/Next

    -These links take you to the next or previous class, interface, package, or related page.

    -Frames/No Frames

    -These links show and hide the HTML frames. All pages are available with or without frames. -

    -

    -Serialized Form

    -Each serializable or externalizable class has a description of its serialization fields and methods. This information is of interest to re-implementors, not to developers using the API. While there is no link in the navigation bar, you can get to this information by going to any serialized class and clicking "Serialized Form" in the "See also" section of the class description. -

    -

    -Constant Field Values

    -The Constant Field Values page lists the static final fields and their values. -

    - - -This help file applies to API documentation generated using the standard doclet. - -
    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/index-files/index-1.html b/doc/index-files/index-1.html deleted file mode 100644 index 356cc59..0000000 --- a/doc/index-files/index-1.html +++ /dev/null @@ -1,248 +0,0 @@ - - - - - - -A-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -A

    -
    -
    add(Widget) - -Method in class net.minecraft.src.WidgetSetting -
      -
    add(Widget) - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    add(Widget, int, int) - -Method in class net.minecraft.src.WidgetSingleRow -
    This adds a new Widget with specified width and height. -
    addButton(String, ModAction, Boolean) - -Method in class net.minecraft.src.GuiApiHelper -
    This method adds a button to the choice menu. -
    addButton(String, String, Object, Boolean) - -Method in class net.minecraft.src.GuiApiHelper -
    This method adds a button to the choice menu. -
    addButton(String, String, Object, Class[], Boolean, Object...) - -Method in class net.minecraft.src.GuiApiHelper -
    This method adds a button to the choice menu. -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetBoolean -
      -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetFloat -
      -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetInt -
      -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetMulti -
      -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetSetting -
    This adds a callback to the displayed widget (Button, Slider, etc) -
    addCallback(Runnable) - -Method in class net.minecraft.src.WidgetText -
      -
    addSetting(ModSettingScreen, String, String, boolean) - -Method in class net.minecraft.src.ModSettings -
    convenience boolean setting adder -
    addSetting(ModSettingScreen, String, String, boolean, String, String) - -Method in class net.minecraft.src.ModSettings -
    convenience boolean setting adder -
    addSetting(ModSettingScreen, String, String, float) - -Method in class net.minecraft.src.ModSettings -
    convenience float setting adder -
    addSetting(ModSettingScreen, String, String, float, float, float, float) - -Method in class net.minecraft.src.ModSettings -
    convenience float setting adder -
    addSetting(ModSettingScreen, String, String, int) - -Method in class net.minecraft.src.ModSettings -
    convenience key setting adder -
    addSetting(ModSettingScreen, String, String, int, int, int) - -Method in class net.minecraft.src.ModSettings -
    convenience int setting adder -
    addSetting(ModSettingScreen, String, String, int, int, int, int) - -Method in class net.minecraft.src.ModSettings -
    convenience int setting adder -
    addSetting(ModSettingScreen, String, String, int, String...) - -Method in class net.minecraft.src.ModSettings -
    convenience multi setting adder -
    addSetting(ModSettingScreen, String, String, String) - -Method in class net.minecraft.src.ModSettings -
    convenience text setting adder -
    addSetting(Widget, String, String, boolean) - -Method in class net.minecraft.src.ModSettings -
    convenience boolean setting adder -
    addSetting(Widget, String, String, boolean, String, String) - -Method in class net.minecraft.src.ModSettings -
    convenience boolean setting adder -
    addSetting(Widget, String, String, float) - -Method in class net.minecraft.src.ModSettings -
    convenience float setting adder -
    addSetting(Widget, String, String, float, float, float, float) - -Method in class net.minecraft.src.ModSettings -
    convenience float setting adder -
    addSetting(Widget, String, String, int) - -Method in class net.minecraft.src.ModSettings -
    convenience key setting adder -
    addSetting(Widget, String, String, int, int, int) - -Method in class net.minecraft.src.ModSettings -
    convenience int setting adder -
    addSetting(Widget, String, String, int, int, int, int) - -Method in class net.minecraft.src.ModSettings -
    convenience int setting adder -
    addSetting(Widget, String, String, int, String...) - -Method in class net.minecraft.src.ModSettings -
    convenience multi setting adder -
    addSetting(Widget, String, String, String) - -Method in class net.minecraft.src.ModSettings -
    convenience text setting adder -
    all - -Static variable in class net.minecraft.src.ModSettings -
    A list of all ModSettings instances. -
    all - -Static variable in class net.minecraft.src.WidgetSetting -
    This is a list of all WidgetSetting instances. -
    append(Setting) - -Method in class net.minecraft.src.ModSettings -
    add a setting to be saved. -
    append(Widget) - -Method in class net.minecraft.src.ModSettingScreen -
    Add a widget -
    argsMatch(Class[], Object[]) - -Method in class net.minecraft.src.ModAction -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-10.html b/doc/index-files/index-10.html deleted file mode 100644 index db2f61f..0000000 --- a/doc/index-files/index-10.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -K-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -K

    -
    -
    keyboardFocusLost() - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-11.html b/doc/index-files/index-11.html deleted file mode 100644 index 6596a51..0000000 --- a/doc/index-files/index-11.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -L-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -L

    -
    -
    labelValues - -Variable in class net.minecraft.src.SettingMulti -
    A string array of labels for the button. -
    layout() - -Method in class net.minecraft.src.GuiWidgetScreen -
      -
    layout() - -Method in class net.minecraft.src.WidgetClassicTwocolumn -
      -
    layout() - -Method in class net.minecraft.src.WidgetSetting -
      -
    layout() - -Method in class net.minecraft.src.WidgetSimplewindow -
      -
    layout() - -Method in class net.minecraft.src.WidgetSinglecolumn -
      -
    layout() - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    layout() - -Method in class net.minecraft.src.WidgetText -
      -
    load() - -Method in class net.minecraft.src.ModSettings -
    Loads the settings for the default context. -
    load(String) - -Method in class net.minecraft.src.ModSettings -
    must be called after all settings are added for loading/saving to work. -
    loadAll(String) - -Static method in class net.minecraft.src.ModSettings -
    Loads all saved settings for a specific context. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-12.html b/doc/index-files/index-12.html deleted file mode 100644 index f4f97bf..0000000 --- a/doc/index-files/index-12.html +++ /dev/null @@ -1,239 +0,0 @@ - - - - - - -M-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -M

    -
    -
    mainwidget - -Variable in class net.minecraft.src.GuiModScreen -
    Actual main widget of this GuiModScreen -
    mainWidget - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is a reference to the main widget in the center. -
    makeButton(String, ModAction, Boolean) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method creates a button widget for you. -
    makeButton(String, String, Object, Boolean) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method creates a button widget for you. -
    makeButton(String, String, Object, Boolean, Class[], Object...) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method creates a button widget for you. -
    makeTextArea(String, Boolean) - -Static method in class net.minecraft.src.GuiApiHelper -
    This is a small helper to create TextAreas, which is basically a label - that wraps text. -
    makeTextDisplayAndGoBack(String, String, String, Boolean) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method is designed to provide an easy way to make popups or - information notices. -
    maximumValue - -Variable in class net.minecraft.src.SettingFloat -
    The maximum value. -
    maximumValue - -Variable in class net.minecraft.src.SettingInt -
    The maximum value. -
    mergeAction(ModAction) - -Method in class net.minecraft.src.ModAction -
    This method merges ModActions together into one. -
    mergedActions - -Variable in class net.minecraft.src.ModAction -
      -
    methodName - -Variable in class net.minecraft.src.ModAction -
      -
    methodParams - -Variable in class net.minecraft.src.ModAction -
      -
    minecraftInstance - -Variable in class net.minecraft.src.GuiWidgetScreen -
    This is a reference to Minecraft. -
    minimumValue - -Variable in class net.minecraft.src.SettingFloat -
    The minimum value. -
    minimumValue - -Variable in class net.minecraft.src.SettingInt -
    The minimum value. -
    mod_GuiApiBasicExample - Class in net.minecraft.src
    This is the BASIC example of GuiAPI usage.
    mod_GuiApiBasicExample() - -Constructor for class net.minecraft.src.mod_GuiApiBasicExample -
    Instantiates a new mod_GuiApiBasicExample. -
    mod_GuiApiIntermediateExample - Class in net.minecraft.src
    This is the INTERMEDIATE example of GuiAPI usage.
    mod_GuiApiIntermediateExample() - -Constructor for class net.minecraft.src.mod_GuiApiIntermediateExample -
    Instantiates a new mod_GuiApiIntermediateExample. -
    ModAction - Class in net.minecraft.src
    This class is a helper designed to make it easier to use callbacks.
    ModAction(Object, String, Class...) - -Constructor for class net.minecraft.src.ModAction -
    This is the most common ModAction constructor. -
    ModAction(Object, String, Object, Class...) - -Constructor for class net.minecraft.src.ModAction -
    This is an overload to allow the dataRef object. -
    ModAction(Object, String, String, Class...) - -Constructor for class net.minecraft.src.ModAction -
    This is an overload to allow the nameRef string. -
    ModAction(Object, String, String, Object, Class...) - -Constructor for class net.minecraft.src.ModAction -
    This is an overload to allow the nameRef string and dataRef object. -
    ModAction(String) - -Constructor for class net.minecraft.src.ModAction -
    This is a constructor that is only supposed to be used internally. -
    modScreens - -Static variable in class net.minecraft.src.ModSettingScreen -
    The list of currently registered ModScreens. -
    ModSettings - Class in net.minecraft.src
    Main interface class for Settings API
    ModSettings(String) - -Constructor for class net.minecraft.src.ModSettings -
      -
    ModSettingScreen - Class in net.minecraft.src
    This is the class that GuiModSelect uses to show Subscreens.
    ModSettingScreen(String) - -Constructor for class net.minecraft.src.ModSettingScreen -
    convenience constructor for when you want to show the same name on the - button and screen title -
    ModSettingScreen(String, String) - -Constructor for class net.minecraft.src.ModSettingScreen -
    The main Constructor for ModSettingScreen. -
    ModSettingScreen(Widget, String) - -Constructor for class net.minecraft.src.ModSettingScreen -
    An alternate Constructor for ModSettingScreen. -
    myModScreen - -Variable in class net.minecraft.src.mod_GuiApiBasicExample -
    The mod screen. -
    myModScreen - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The mod screen. -
    mySettings - -Variable in class net.minecraft.src.mod_GuiApiBasicExample -
    The settings. -
    mySettings - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The settings. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-13.html b/doc/index-files/index-13.html deleted file mode 100644 index 8e7af3b..0000000 --- a/doc/index-files/index-13.html +++ /dev/null @@ -1,159 +0,0 @@ - - - - - - -N-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -N

    -
    -
    nameRef - -Variable in class net.minecraft.src.ModAction -
    The 'nameRef' field is also something you can use to track your - ModActions. -
    net.minecraft.src - package net.minecraft.src
     
    NEVERMINDKEY - -Variable in class net.minecraft.src.WidgetKeybinding -
    The constant for exiting and keeping the existing key. -
    next() - -Method in class net.minecraft.src.SettingMulti -
    Shifts the value forward for the current context. -
    next(String) - -Method in class net.minecraft.src.SettingMulti -
    Shifts the value forward for the specified context. -
    niceName - -Variable in class net.minecraft.src.ModSettingScreen -
    name to show at top of screen -
    niceName - -Variable in class net.minecraft.src.WidgetSetting -
    The name that will be shown on the widget. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-14.html b/doc/index-files/index-14.html deleted file mode 100644 index 3ec4a50..0000000 --- a/doc/index-files/index-14.html +++ /dev/null @@ -1,146 +0,0 @@ - - - - - - -O-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -O

    -
    -
    objectRef - -Variable in class net.minecraft.src.ModAction -
      -
    overrideHeight - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This says whether it should override the height for all widgets. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-15.html b/doc/index-files/index-15.html deleted file mode 100644 index 2338572..0000000 --- a/doc/index-files/index-15.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -P-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -P

    -
    -
    parent - -Variable in class net.minecraft.src.Setting -
    Reference to the ModSettings this Setting is a child of. -
    parentScreen - -Variable in class net.minecraft.src.GuiModScreen -
    Reference to parent screen, is used by GuiModScreen#back() -
    presetMcint(Minecraft) - -Static method in class net.minecraft.src.ModSettings -
    Set the Minecraft instance that getMcinst returns. -
    propertyChange(PropertyChangeEvent) - -Method in class net.minecraft.src.ModAction -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-16.html b/doc/index-files/index-16.html deleted file mode 100644 index cf60b59..0000000 --- a/doc/index-files/index-16.html +++ /dev/null @@ -1,212 +0,0 @@ - - - - - - -R-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -R

    -
    -
    remove(Setting) - -Method in class net.minecraft.src.ModSettings -
    removes a setting using ArrayList.remove -
    remove(Widget) - -Method in class net.minecraft.src.ModSettingScreen -
    Remove a widget -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetBoolean -
      -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetFloat -
      -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetInt -
      -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetMulti -
      -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetSetting -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -
    removeCallback(Runnable) - -Method in class net.minecraft.src.WidgetText -
      -
    removeChild(int) - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    removeChild(Widget) - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    renderer - -Variable in class net.minecraft.src.GuiWidgetScreen -
    This is the rendered used by TWL. -
    reset() - -Method in class net.minecraft.src.Setting -
    Resets this setting for the current context, saving the default and - updating the display. -
    reset(String) - -Method in class net.minecraft.src.Setting -
    Resets this setting for the specified context, saving the default and - updating the display. -
    resetAll() - -Method in class net.minecraft.src.ModSettings -
    Resets all settings for the current context. -
    resetAll(String) - -Method in class net.minecraft.src.ModSettings -
    Resets all settings for the specified context. -
    resetScreen() - -Method in class net.minecraft.src.GuiWidgetScreen -
    Removes all children and clears the current widget. -
    run() - -Method in class net.minecraft.src.ModAction -
      -
    run() - -Method in class net.minecraft.src.WidgetBoolean -
      -
    run() - -Method in class net.minecraft.src.WidgetFloat -
      -
    run() - -Method in class net.minecraft.src.WidgetInt -
      -
    run() - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    run() - -Method in class net.minecraft.src.WidgetMulti -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-17.html b/doc/index-files/index-17.html deleted file mode 100644 index ca3a3f9..0000000 --- a/doc/index-files/index-17.html +++ /dev/null @@ -1,343 +0,0 @@ - - - - - - -S-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -S

    -
    -
    save(String) - -Method in class net.minecraft.src.ModSettings -
    called every time a setting is changed saves settings file to - .minecraft/mods/$backendname/guiconfig.properties coming soon: set name - of config file -
    screenheight - -Static variable in class net.minecraft.src.GuiWidgetScreen -
    The height of the screen that the widget will render on. -
    screenSize - -Variable in class net.minecraft.src.GuiWidgetScreen -
    This is the ScaledResolution class that is used to scale all of the - widgets. -
    screenwidth - -Static variable in class net.minecraft.src.GuiWidgetScreen -
    The width of the screen that the widget will render on. -
    set(T) - -Method in class net.minecraft.src.Setting -
    Sets the value for this setting to the current context. -
    set(T, String) - -Method in class net.minecraft.src.Setting -
    Sets the value for this setting to the specified context. -
    set(Boolean, String) - -Method in class net.minecraft.src.SettingBoolean -
      -
    set(Float, String) - -Method in class net.minecraft.src.SettingFloat -
      -
    set(Integer, String) - -Method in class net.minecraft.src.SettingInt -
      -
    set(Integer, String) - -Method in class net.minecraft.src.SettingKey -
      -
    set(String) - -Method in class net.minecraft.src.SettingKey -
    Sets the value for this setting to the current context. -
    set(String, String) - -Method in class net.minecraft.src.SettingKey -
    Sets the value for this setting to the specified context. -
    set(Integer, String) - -Method in class net.minecraft.src.SettingMulti -
      -
    set(String) - -Method in class net.minecraft.src.SettingMulti -
    Sets the value for this setting to the current context. -
    set(String, String) - -Method in class net.minecraft.src.SettingMulti -
    Sets the value for this setting to the specified context. -
    set(String, String) - -Method in class net.minecraft.src.SettingText -
      -
    setContext(String, String) - -Static method in class net.minecraft.src.ModSettings -
    Sets the context for mods. -
    setDefaultArguments(Object...) - -Method in class net.minecraft.src.ModAction -
    This sets the arguments to use if no or invalid arguments are provided. -
    setmode - -Variable in class net.minecraft.src.WidgetText -
    This is a control number to who and what can edit this setting. -
    setScreen(Widget) - -Method in class net.minecraft.src.GuiWidgetScreen -
    to be called only from GuiModScreen, sets the widget to display. -
    setSingleColumn(Boolean) - -Method in class net.minecraft.src.ModSettingScreen -
    Changes the widgetColumn to or from WidgetClassicTwocolumn or - WidgetSinglecolumn. -
    setTextAreaText(TextArea, String) - -Static method in class net.minecraft.src.GuiApiHelper -
    This is a small helper method to set the text of a TextArea. -
    Setting<T> - Class in net.minecraft.src
    This is the base class for Settings.
    Setting() - -Constructor for class net.minecraft.src.Setting -
    This is the basic constructor for Setting. -
    SettingBoolean - Class in net.minecraft.src
    This is the Setting type for Booleans.
    SettingBoolean(String) - -Constructor for class net.minecraft.src.SettingBoolean -
    This is the constructor for SettingBoolean. -
    SettingBoolean(String, Boolean) - -Constructor for class net.minecraft.src.SettingBoolean -
    This is the constructor for SettingBoolean. -
    settingBooleanD - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting boolean d. -
    settingBooleanE - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting boolean e. -
    SettingFloat - Class in net.minecraft.src
    This is the Setting type for Floats.
    SettingFloat(String) - -Constructor for class net.minecraft.src.SettingFloat -
    A constructor for SettingFloat. -
    SettingFloat(String, float) - -Constructor for class net.minecraft.src.SettingFloat -
    A constructor for SettingFloat. -
    SettingFloat(String, float, float, float) - -Constructor for class net.minecraft.src.SettingFloat -
    A constructor for SettingFloat. -
    SettingFloat(String, float, float, float, float) - -Constructor for class net.minecraft.src.SettingFloat -
    A constructor for SettingFloat. -
    settingFloatB - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting float b. -
    SettingInt - Class in net.minecraft.src
    This is the Setting type for Ints.
    SettingInt(String) - -Constructor for class net.minecraft.src.SettingInt -
    A constructor for SettingInt. -
    SettingInt(String, int) - -Constructor for class net.minecraft.src.SettingInt -
    A constructor for SettingInt. -
    SettingInt(String, int, int, int) - -Constructor for class net.minecraft.src.SettingInt -
    A constructor for SettingInt. -
    SettingInt(String, int, int, int, int) - -Constructor for class net.minecraft.src.SettingInt -
    A constructor for SettingInt. -
    settingIntA - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting int a. -
    SettingKey - Class in net.minecraft.src
    This is the Setting type for Keys.
    SettingKey(String, int) - -Constructor for class net.minecraft.src.SettingKey -
    Constructor for SettingKey. -
    SettingKey(String, String) - -Constructor for class net.minecraft.src.SettingKey -
    Constructor for SettingKey. -
    SettingMulti - Class in net.minecraft.src
    This is the Setting type for Multis.
    SettingMulti(String, int, String...) - -Constructor for class net.minecraft.src.SettingMulti -
    A constructor for SettingMulti. -
    SettingMulti(String, String...) - -Constructor for class net.minecraft.src.SettingMulti -
    A constructor for SettingMulti. -
    settingMultiC - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting multi c. -
    settingReference - -Variable in class net.minecraft.src.WidgetBoolean -
    The reference to the SettingBoolean that this WidgetBoolean uses. -
    settingReference - -Variable in class net.minecraft.src.WidgetFloat -
    The reference to the SettingInt that this WidgetInt uses. -
    settingReference - -Variable in class net.minecraft.src.WidgetInt -
    The reference to the SettingInt that this WidgetInt uses. -
    settingReference - -Variable in class net.minecraft.src.WidgetKeybinding -
    The reference to the SettingKey that this WidgetKeybinding uses. -
    settingReference - -Variable in class net.minecraft.src.WidgetText -
    The reference to the SettingText that this WidgetText uses. -
    Settings - -Variable in class net.minecraft.src.ModSettings -
    all registered settings for this mod -
    settingsLoaded - -Variable in class net.minecraft.src.ModSettings -
    Whether or not Settings have been loaded for this mod. -
    SettingText - Class in net.minecraft.src
    This is the Setting type for Text.
    SettingText(String, String) - -Constructor for class net.minecraft.src.SettingText -
    A constructor for SettingText. -
    settingTextF - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The setting text f. -
    setupHandler(Object, String) - -Method in class net.minecraft.src.ModAction -
      -
    setValue(String) - -Method in class net.minecraft.src.WidgetText -
      -
    show(GuiModScreen) - -Static method in class net.minecraft.src.GuiModScreen -
    Show a screen - GuiModScreen version. -
    show(Widget) - -Static method in class net.minecraft.src.GuiModScreen -
    Show a screen - TWL widget version. -
    ShowAllTheSettings() - -Method in class net.minecraft.src.mod_GuiApiBasicExample -
    This is the method that will be called if you press the - "Display Settings" button. -
    size() - -Method in class net.minecraft.src.ModSettings -
      -
    slider - -Variable in class net.minecraft.src.WidgetFloat -
    The reference to the underlying WidgetSlider. -
    slider - -Variable in class net.minecraft.src.WidgetInt -
    The reference to the underlying WidgetSlider. -
    splitDistance - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This is the amount of room between the two columns. -
    startEdit() - -Method in class net.minecraft.src.WidgetSlider -
      -
    stepValue - -Variable in class net.minecraft.src.SettingFloat -
    The step value. -
    stepValue - -Variable in class net.minecraft.src.SettingInt -
    The step value. -
    subscreenBooleans - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The subscreen for booleans. -
    subscreenNumberics - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The subscreen for numberics. -
    subscreenOthers - -Variable in class net.minecraft.src.mod_GuiApiIntermediateExample -
    The subscreen for others. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-18.html b/doc/index-files/index-18.html deleted file mode 100644 index 43670e0..0000000 --- a/doc/index-files/index-18.html +++ /dev/null @@ -1,176 +0,0 @@ - - - - - - -T-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -T

    -
    -
    theme - -Variable in class net.minecraft.src.GuiWidgetScreen -
    This the the ThemeManager for GuiAPI. -
    theWidget - -Variable in class net.minecraft.src.ModSettingScreen -
    the main widget to pass into GuiModScreen.show() -
    titleWidget - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is a reference to the Label that acts as the title on top. -
    toggleButton - -Variable in class net.minecraft.src.WidgetKeybinding -
    The reference to the underlying ToggleButton. -
    toString(String) - -Method in class net.minecraft.src.Setting -
    return string to save, called from ModSettings.save() -
    toString(String) - -Method in class net.minecraft.src.SettingBoolean -
      -
    toString(String) - -Method in class net.minecraft.src.SettingFloat -
      -
    toString(String) - -Method in class net.minecraft.src.SettingInt -
      -
    toString(String) - -Method in class net.minecraft.src.SettingKey -
      -
    toString(String) - -Method in class net.minecraft.src.SettingMulti -
      -
    toString(String) - -Method in class net.minecraft.src.SettingText -
      -
    trueText - -Variable in class net.minecraft.src.WidgetBoolean -
    The text to display on the button when the setting is true. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-19.html b/doc/index-files/index-19.html deleted file mode 100644 index bf0c140..0000000 --- a/doc/index-files/index-19.html +++ /dev/null @@ -1,186 +0,0 @@ - - - - - - -U-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -U

    -
    -
    update() - -Method in class net.minecraft.src.WidgetBoolean -
      -
    update() - -Method in class net.minecraft.src.WidgetFloat -
      -
    update() - -Method in class net.minecraft.src.WidgetInt -
      -
    update() - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    update() - -Method in class net.minecraft.src.WidgetMulti -
      -
    update() - -Method in class net.minecraft.src.WidgetSetting -
    This method updates the widget with the backing setting store. -
    update() - -Method in class net.minecraft.src.WidgetText -
      -
    updateAll() - -Static method in class net.minecraft.src.WidgetSetting -
    This updates all Widgets with the backing setting's current values. -
    userString() - -Method in class net.minecraft.src.WidgetBoolean -
      -
    userString() - -Method in class net.minecraft.src.WidgetFloat -
      -
    userString() - -Method in class net.minecraft.src.WidgetInt -
      -
    userString() - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    userString() - -Method in class net.minecraft.src.WidgetMulti -
      -
    userString() - -Method in class net.minecraft.src.WidgetSetting -
    This returns a clean string that shows the Nice Name and the current - value. -
    userString() - -Method in class net.minecraft.src.WidgetText -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-2.html b/doc/index-files/index-2.html deleted file mode 100644 index af590d7..0000000 --- a/doc/index-files/index-2.html +++ /dev/null @@ -1,174 +0,0 @@ - - - - - - -B-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -B

    -
    -
    back() - -Static method in class net.minecraft.src.GuiModScreen -
    Hide current screen and show parent screen. -
    backButton - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is a reference to the back button, if created. -
    backendname - -Variable in class net.minecraft.src.ModSettings -
    Mod name as used in .minecraft/mods/${modbackendname}/ -
    backendName - -Variable in class net.minecraft.src.Setting -
    The name used by ModSettings to save and load the setting. -
    backgroundType - -Variable in class net.minecraft.src.GuiModScreen -
    The type of background to draw. -
    backModAction - -Static variable in class net.minecraft.src.GuiApiHelper -
    This is a static ModAction to go back to the previous menu. -
    booleanModel - -Variable in class net.minecraft.src.WidgetKeybinding -
    The reference to the underlying SimpleBooleanModel. -
    button - -Variable in class net.minecraft.src.WidgetBoolean -
    The reference to the underlying Button. -
    button - -Variable in class net.minecraft.src.WidgetMulti -
    The reference to the underlying Button. -
    buttonBar - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is a reference to the row at the bottom that contains the back - button. -
    buttonTitle - -Variable in class net.minecraft.src.ModSettingScreen -
    title to show on button to this modscreen -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-20.html b/doc/index-files/index-20.html deleted file mode 100644 index 77cbf62..0000000 --- a/doc/index-files/index-20.html +++ /dev/null @@ -1,161 +0,0 @@ - - - - - - -V-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -V

    -
    -
    value - -Variable in class net.minecraft.src.WidgetMulti -
    The reference to the SettingMulti that this WidgetMulti uses. -
    values - -Variable in class net.minecraft.src.Setting -
    value. -
    vBottomPadding - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is the padding on the bottom. -
    Version() - -Method in class net.minecraft.src.mod_GuiApiBasicExample -
      -
    Version() - -Method in class net.minecraft.src.mod_GuiApiIntermediateExample -
      -
    verticalPadding - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This is the amount of padding to have before any widgets are positioned. -
    vTopPadding - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is the padding on the top. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-21.html b/doc/index-files/index-21.html deleted file mode 100644 index b5fc11d..0000000 --- a/doc/index-files/index-21.html +++ /dev/null @@ -1,208 +0,0 @@ - - - - - - -W-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -W

    -
    -
    WidgetBoolean - Class in net.minecraft.src
    This is the Widget for boolean settings.
    WidgetBoolean(SettingBoolean, String) - -Constructor for class net.minecraft.src.WidgetBoolean -
    This creates a new WidgetBoolean using the SettingBoolean and String - provided. -
    WidgetBoolean(SettingBoolean, String, String, String) - -Constructor for class net.minecraft.src.WidgetBoolean -
    This creates a new WidgetBoolean using the WidgetBoolean and String - provided, as well as setting the true and false text. -
    WidgetClassicTwocolumn - Class in net.minecraft.src
    This widget is designed to arrange widgets into two columns.
    WidgetClassicTwocolumn(Widget...) - -Constructor for class net.minecraft.src.WidgetClassicTwocolumn -
    This creates the WidgetClassicTwocolumn and adds the requested widgets. -
    widgetColumn - -Variable in class net.minecraft.src.ModSettingScreen -
    the column widget to show the child widgets in -
    WidgetFloat - Class in net.minecraft.src
    This is the Widget for Float settings.
    WidgetFloat(SettingFloat, String) - -Constructor for class net.minecraft.src.WidgetFloat -
    This creates a new WidgetInt using the SettingInt and String provided. -
    WidgetFloat(SettingFloat, String, int) - -Constructor for class net.minecraft.src.WidgetFloat -
    This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. -
    WidgetInt - Class in net.minecraft.src
    This is the Widget for Integer settings.
    WidgetInt(SettingInt, String) - -Constructor for class net.minecraft.src.WidgetInt -
    This creates a new WidgetInt using the SettingInt and String provided. -
    WidgetKeybinding - Class in net.minecraft.src
    This is the Widget for Key binding settings.
    WidgetKeybinding(SettingKey, String) - -Constructor for class net.minecraft.src.WidgetKeybinding -
    This creates a new WidgetKeybinding using the WidgetKeybinding and String - provided. -
    WidgetMulti - Class in net.minecraft.src
    This is the Widget for Multi settings.
    WidgetMulti(SettingMulti, String) - -Constructor for class net.minecraft.src.WidgetMulti -
    This creates a new WidgetMulti using the SettingMulti and String - provided. -
    widgets - -Variable in class net.minecraft.src.WidgetSingleRow -
      -
    WidgetSetting - Class in net.minecraft.src
    This is the base class for Widgets that are supposed to be front ends for - Settings.
    WidgetSetting(String) - -Constructor for class net.minecraft.src.WidgetSetting -
    This sets the Nice Name and adds itself to the list of instances. -
    WidgetSimplewindow - Class in net.minecraft.src
    This widget is designed to make an easy base for menus.
    WidgetSimplewindow() - -Constructor for class net.minecraft.src.WidgetSimplewindow -
    This is a basic constructor. -
    WidgetSimplewindow(Widget) - -Constructor for class net.minecraft.src.WidgetSimplewindow -
    This is a basic constructor. -
    WidgetSimplewindow(Widget, String) - -Constructor for class net.minecraft.src.WidgetSimplewindow -
    This is the most common constructor. -
    WidgetSimplewindow(Widget, String, Boolean) - -Constructor for class net.minecraft.src.WidgetSimplewindow -
    This is the more advanced constructor. -
    WidgetSinglecolumn - Class in net.minecraft.src
    This is a widget designed to arrange other widgets into a single column.
    WidgetSinglecolumn(Widget...) - -Constructor for class net.minecraft.src.WidgetSinglecolumn -
    This creates the WidgetSinglecolumn with the specified Widgets. -
    WidgetSingleRow - Class in net.minecraft.src
    This is a layout widget designed to arrange your widgets in a row.
    WidgetSingleRow(int, int, Widget...) - -Constructor for class net.minecraft.src.WidgetSingleRow -
    This creates a new WidgetSingleRow, specifying the default width and - height for any new widgets, as well as adding any widgets you would like - to add. -
    WidgetSlider - Class in net.minecraft.src
    This is a simple extension of ValueAdjusterFloat so that it always updates - the setting.
    WidgetSlider(FloatModel) - -Constructor for class net.minecraft.src.WidgetSlider -
    This is the basic constructor. -
    WidgetText - Class in net.minecraft.src
    This is the Widget for Text settings.
    WidgetText(SettingText, String) - -Constructor for class net.minecraft.src.WidgetText -
    This creates a new WidgetText using the SettingText and String provided. -
    widths - -Variable in class net.minecraft.src.WidgetSingleRow -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-22.html b/doc/index-files/index-22.html deleted file mode 100644 index 66e10ee..0000000 --- a/doc/index-files/index-22.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -X-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -X

    -
    -
    xSpacing - -Variable in class net.minecraft.src.WidgetSingleRow -
    This defines the space between child widgets. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-3.html b/doc/index-files/index-3.html deleted file mode 100644 index 323bf39..0000000 --- a/doc/index-files/index-3.html +++ /dev/null @@ -1,193 +0,0 @@ - - - - - - -C-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -C

    -
    -
    call(Object...) - -Method in class net.minecraft.src.ModAction -
    This calls this ModAction and any Merged actions with the provided - arguments. -
    callInt(Object...) - -Method in class net.minecraft.src.ModAction -
      -
    childDefaultHeight - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This is the default height to enforce for widgets. -
    childWidth - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This dictates the width to set each of the widgets to. -
    CLEARKEY - -Variable in class net.minecraft.src.WidgetKeybinding -
    The constant for clearing the existing key. -
    clickModAction - -Static variable in class net.minecraft.src.GuiApiHelper -
    This is a static ModAction to play the 'click' sound you usually hear - when pressing a button in minecraft. -
    clicksound() - -Static method in class net.minecraft.src.GuiModScreen -
    Play a click sound. -
    contextDatadirs - -Static variable in class net.minecraft.src.ModSettings -
    A map of context names and the directories they save to. -
    copyContext(String, String) - -Method in class net.minecraft.src.Setting -
    Copies a setting from the source context to the destination context. -
    copyContextAll(String, String) - -Method in class net.minecraft.src.ModSettings -
    Copies the saved settings from one context to another. -
    createChoiceMenu(String) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. -
    createChoiceMenu(String, Boolean, Boolean, Object...) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. -
    createChoiceMenu(String, Boolean, Boolean, String[], ModAction[]) - -Static method in class net.minecraft.src.GuiApiHelper -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. -
    currentContext - -Static variable in class net.minecraft.src.ModSettings -
    The current context. -
    currentScreen - -Static variable in class net.minecraft.src.GuiModScreen -
    Used by static methods. -
    currentWidget - -Variable in class net.minecraft.src.GuiWidgetScreen -
    The widget that is currently displayed. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-4.html b/doc/index-files/index-4.html deleted file mode 100644 index 72ac5c2..0000000 --- a/doc/index-files/index-4.html +++ /dev/null @@ -1,178 +0,0 @@ - - - - - - -D-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -D

    -
    -
    dataRef - -Variable in class net.minecraft.src.ModAction -
    The 'dataRef' field is an extra, unused field you can use as a key, or - something specific to track. -
    dbgout(String) - -Static method in class net.minecraft.src.ModSettings -
    Debug printer. -
    debug - -Static variable in class net.minecraft.src.ModSettings -
    Debug mode flag. -
    decimalPlaces - -Variable in class net.minecraft.src.WidgetFloat -
    The number of decimal places to display to the user. -
    defaultArguments - -Variable in class net.minecraft.src.ModAction -
      -
    defaultHeight - -Variable in class net.minecraft.src.WidgetSingleRow -
    This is the default height of any new widgets. -
    defaultPadding - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This is the amount of padding to use between widgets vertically. -
    defaultValue - -Variable in class net.minecraft.src.Setting -
    The default value for this setting. -
    defaultWidth - -Variable in class net.minecraft.src.WidgetSingleRow -
    This is the default width of any new widgets. -
    displayLabel - -Variable in class net.minecraft.src.WidgetText -
    The label that displays to the user what the nice name of this setting - is. -
    displayWidget - -Variable in class net.minecraft.src.Setting -
    A reference to the Widget that displays this setting. -
    drawScreen(int, int, float) - -Method in class net.minecraft.src.GuiModScreen -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-5.html b/doc/index-files/index-5.html deleted file mode 100644 index d07f089..0000000 --- a/doc/index-files/index-5.html +++ /dev/null @@ -1,143 +0,0 @@ - - - - - - -E-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -E

    -
    -
    editField - -Variable in class net.minecraft.src.WidgetText -
    The EditField that the user actually changes the setting with. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-6.html b/doc/index-files/index-6.html deleted file mode 100644 index e332a90..0000000 --- a/doc/index-files/index-6.html +++ /dev/null @@ -1,164 +0,0 @@ - - - - - - -F-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -F

    -
    -
    falseText - -Variable in class net.minecraft.src.WidgetBoolean -
    The text to display on the button when the setting is false. -
    fromString(String, String) - -Method in class net.minecraft.src.Setting -
    load back a string from toString() -
    fromString(String, String) - -Method in class net.minecraft.src.SettingBoolean -
      -
    fromString(String, String) - -Method in class net.minecraft.src.SettingFloat -
      -
    fromString(String, String) - -Method in class net.minecraft.src.SettingInt -
      -
    fromString(String, String) - -Method in class net.minecraft.src.SettingKey -
      -
    fromString(String, String) - -Method in class net.minecraft.src.SettingMulti -
      -
    fromString(String, String) - -Method in class net.minecraft.src.SettingText -
      -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-7.html b/doc/index-files/index-7.html deleted file mode 100644 index ba4ecae..0000000 --- a/doc/index-files/index-7.html +++ /dev/null @@ -1,305 +0,0 @@ - - - - - - -G-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -G

    -
    -
    genWidget(Boolean) - -Method in class net.minecraft.src.GuiApiHelper -
    This creates the Choice Menu from the Display Text entered earlier and - the buttons you have added. -
    get() - -Method in class net.minecraft.src.Setting -
    Returns the setting for the current context. -
    get(String) - -Method in class net.minecraft.src.Setting -
    Returns the setting for the specified context. -
    get(String) - -Method in class net.minecraft.src.SettingBoolean -
      -
    get(String) - -Method in class net.minecraft.src.SettingFloat -
      -
    get(String) - -Method in class net.minecraft.src.SettingInt -
      -
    get(String) - -Method in class net.minecraft.src.SettingKey -
      -
    get(String) - -Method in class net.minecraft.src.SettingMulti -
      -
    get(String) - -Method in class net.minecraft.src.SettingText -
      -
    getAllBooleanSettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Boolean settings for the current context. -
    getAllBooleanSettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Boolean settings for the specified context. -
    getAllFloatSettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Float settings for the current context. -
    getAllFloatSettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Float settings for the specified context. -
    getAllIntSettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Int settings for the current context. -
    getAllIntSettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Int settings for the specified context. -
    getAllKeySettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Key settings for the current context. -
    getAllKeySettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Key settings for the specified context. -
    getAllMultiSettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Multi settings for the current context. -
    getAllMultiSettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Multi settings for the specified context. -
    getAllTextSettings() - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Text settings for the current context. -
    getAllTextSettings(String) - -Method in class net.minecraft.src.ModSettings -
    Get a list of all Text settings for the specified context. -
    getAppDir(String) - -Static method in class net.minecraft.src.ModSettings -
    Returns, and creates if needed, an application directory. -
    getBooleanSetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getBooleanSetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getFloatSetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getFloatSetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getInstance() - -Static method in class net.minecraft.src.GuiWidgetScreen -
    get the instance of GuiWidget, creating it if needed -
    getIntSetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getIntSetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getKeySetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getKeySetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getLabel() - -Method in class net.minecraft.src.SettingMulti -
    Helper to get the text label for the current context and value. -
    getLabel(String) - -Method in class net.minecraft.src.SettingMulti -
    Helper to get the text label for the specified context and value. -
    getMcinst() - -Static method in class net.minecraft.src.ModSettings -
    This finds and returns a Minecraft instance. -
    GetMethodRecursively(Object, String) - -Method in class net.minecraft.src.ModAction -
      -
    getMultiSetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getMultiSetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getMultiSettingLabel(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getMultiSettingLabel(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getPreferredHeight() - -Method in class net.minecraft.src.WidgetClassicTwocolumn -
      -
    getPreferredHeight() - -Method in class net.minecraft.src.WidgetSinglecolumn -
      -
    getPreferredHeight() - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    getPreferredWidth() - -Method in class net.minecraft.src.WidgetClassicTwocolumn -
      -
    getPreferredWidth() - -Method in class net.minecraft.src.WidgetSinglecolumn -
      -
    getPreferredWidth() - -Method in class net.minecraft.src.WidgetSingleRow -
      -
    getTextSetting(String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the current context. -
    getTextSetting(String, String) - -Method in class net.minecraft.src.ModSettings -
    Gets the value of a setting by backend name from the specified context. -
    getValue() - -Method in class net.minecraft.src.WidgetText -
      -
    gui - -Variable in class net.minecraft.src.GuiWidgetScreen -
    This is a reference to a TWL class that is used to render the widgets. -
    GuiApiHelper - Class in net.minecraft.src
    This is just a class for helping ease common and somewhat long operations - with GuiAPI.
    guiContext - -Static variable in class net.minecraft.src.ModSettingScreen -
    The current context. -
    GuiModScreen - Class in net.minecraft.src
    GuiModScreen is the minecraft screen subclass that controls and renders TWL.
    GuiModScreen(GuiScreen) - -Constructor for class net.minecraft.src.GuiModScreen -
    Only use this constructor from subclasses. -
    GuiModScreen(GuiScreen, Widget) - -Constructor for class net.minecraft.src.GuiModScreen -
    main constructor, to be used if you are instantiating this class. -
    GuiModSelect - Class in net.minecraft.src
    This is a Subclass of GuiModScreen, and acts as the entry point from the - button in the options menu.
    GuiModSelect(GuiScreen) - -Constructor for class net.minecraft.src.GuiModSelect -
      -
    GuiWidgetScreen - Class in net.minecraft.src
    TWL Widget that switches out child widgets.
    GuiWidgetScreen() - -Constructor for class net.minecraft.src.GuiWidgetScreen -
    This creates a new instance of GuiWidgetScreen. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-8.html b/doc/index-files/index-8.html deleted file mode 100644 index 42caa46..0000000 --- a/doc/index-files/index-8.html +++ /dev/null @@ -1,155 +0,0 @@ - - - - - - -H-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -H

    -
    -
    handleEvent(Event) - -Method in class net.minecraft.src.WidgetKeybinding -
      -
    handleInput() - -Method in class net.minecraft.src.GuiModScreen -
      -
    heightOverrideExceptions - -Variable in class net.minecraft.src.WidgetClassicTwocolumn -
    This is a map to override the heights of specific widgets. -
    heights - -Variable in class net.minecraft.src.WidgetSingleRow -
      -
    hPadding - -Variable in class net.minecraft.src.WidgetSimplewindow -
    This is the padding to use on each side of the main widget. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index-files/index-9.html b/doc/index-files/index-9.html deleted file mode 100644 index 45f9fcb..0000000 --- a/doc/index-files/index-9.html +++ /dev/null @@ -1,152 +0,0 @@ - - - - - - -I-Index - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    -

    -I

    -
    -
    init(Boolean, String) - -Method in class net.minecraft.src.WidgetSimplewindow -
    Initializes the WidgetSimplewindow's widgets. -
    instance - -Static variable in class net.minecraft.src.GuiWidgetScreen -
    The initialized instance of GuiWidgetScreen. -
    isKeyDown() - -Method in class net.minecraft.src.SettingKey -
    An easy helper to see if the current key is down. -
    isKeyDown(String) - -Method in class net.minecraft.src.SettingKey -
    An easy helper to see if the current key is down. -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -A B C D E F G H I K L M N O P R S T U V W X
    - - - diff --git a/doc/index.html b/doc/index.html deleted file mode 100644 index d5b387f..0000000 --- a/doc/index.html +++ /dev/null @@ -1,36 +0,0 @@ - - - - - - -Generated Documentation (Untitled) - - - - - - - - -<H2> -Frame Alert</H2> - -<P> -This document is designed to be viewed using the frames feature. If you see this message, you are using a non-frame-capable web client. -<BR> -Link to<A HREF="net/minecraft/src/package-summary.html">Non-frame version.</A> - - - diff --git a/doc/net/minecraft/src/GuiApiHelper.html b/doc/net/minecraft/src/GuiApiHelper.html deleted file mode 100644 index ebb1edf..0000000 --- a/doc/net/minecraft/src/GuiApiHelper.html +++ /dev/null @@ -1,652 +0,0 @@ - - - - - - -GuiApiHelper - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class GuiApiHelper

    -
    -java.lang.Object
    -  extended by net.minecraft.src.GuiApiHelper
    -
    -
    -
    -
    public class GuiApiHelper
    extends java.lang.Object
    - - -

    -This is just a class for helping ease common and somewhat long operations - with GuiAPI. -

    - -

    -

    -
    Author:
    -
    ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    -static ModActionbackModAction - -
    -          This is a static ModAction to go back to the previous menu.
    -static ModActionclickModAction - -
    -          This is a static ModAction to play the 'click' sound you usually hear - when pressing a button in minecraft.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddButton(java.lang.String text, - ModAction action, - java.lang.Boolean mergeBack) - -
    -          This method adds a button to the choice menu.
    - voidaddButton(java.lang.String text, - java.lang.String methodName, - java.lang.Object me, - java.lang.Boolean mergeBack) - -
    -          This method adds a button to the choice menu.
    - voidaddButton(java.lang.String text, - java.lang.String methodName, - java.lang.Object me, - java.lang.Class[] types, - java.lang.Boolean mergeBack, - java.lang.Object... arguments) - -
    -          This method adds a button to the choice menu.
    -static GuiApiHelpercreateChoiceMenu(java.lang.String displayText) - -
    -          This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it.
    -static WidgetcreateChoiceMenu(java.lang.String displayText, - java.lang.Boolean showBackButton, - java.lang.Boolean autoBack, - java.lang.Object... args) - -
    -          This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it.
    -static WidgetcreateChoiceMenu(java.lang.String displayText, - java.lang.Boolean showBackButton, - java.lang.Boolean autoBack, - java.lang.String[] buttonTexts, - ModAction[] buttonActions) - -
    -          This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it.
    - WidgetgenWidget(java.lang.Boolean showBackButton) - -
    -          This creates the Choice Menu from the Display Text entered earlier and - the buttons you have added.
    -static ButtonmakeButton(java.lang.String displayText, - ModAction action, - java.lang.Boolean addClick) - -
    -          This method creates a button widget for you.
    -static ButtonmakeButton(java.lang.String displayText, - java.lang.String methodName, - java.lang.Object me, - java.lang.Boolean addClick) - -
    -          This method creates a button widget for you.
    -static ButtonmakeButton(java.lang.String displayText, - java.lang.String methodName, - java.lang.Object me, - java.lang.Boolean addClick, - java.lang.Class[] classes, - java.lang.Object... arguments) - -
    -          This method creates a button widget for you.
    -static TextAreamakeTextArea(java.lang.String text, - java.lang.Boolean htmlMode) - -
    -          This is a small helper to create TextAreas, which is basically a label - that wraps text.
    -static WidgetmakeTextDisplayAndGoBack(java.lang.String titleText, - java.lang.String displayText, - java.lang.String buttonText, - java.lang.Boolean htmlMode) - -
    -          This method is designed to provide an easy way to make popups or - information notices.
    -static voidsetTextAreaText(TextArea textArea, - java.lang.String text) - -
    -          This is a small helper method to set the text of a TextArea.
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -backModAction

    -
    -public static final ModAction backModAction
    -
    -
    This is a static ModAction to go back to the previous menu. -

    -

    -
    -
    -
    - -

    -clickModAction

    -
    -public static final ModAction clickModAction
    -
    -
    This is a static ModAction to play the 'click' sound you usually hear - when pressing a button in minecraft. -

    -

    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -createChoiceMenu

    -
    -public static GuiApiHelper createChoiceMenu(java.lang.String displayText)
    -
    -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. This - overload is the most advanced option, though uses more code. Call this - method, use the returned GuiApiHelper instance to add the buttons you - want, then generate the widget. -

    -

    -
    Parameters:
    displayText - The text to be displayed to the user. -
    Returns:
    An instance of GuiApiHelper. Use the addButton methods to add - buttons to the menu, and then when you are done use genWidget to - create the choice menu.
    -
    -
    -
    - -

    -createChoiceMenu

    -
    -public static Widget createChoiceMenu(java.lang.String displayText,
    -                                      java.lang.Boolean showBackButton,
    -                                      java.lang.Boolean autoBack,
    -                                      java.lang.Object... args)
    -
    -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. This - overload uses variable arguments to choose it. -

    -

    -
    Parameters:
    displayText - The text to display.
    showBackButton - Whether to automatically show a 'back' button or not.
    autoBack - Whether to automatically merge a 'back' ModAction with the - buttons.
    args - The button information. Enter it in the form of String (Name - on the button), ModAction (The ModAction to call when the - button is pressed). -
    Returns:
    The generated widget. Use GuiModScreen.show to display it.
    -
    -
    -
    - -

    -createChoiceMenu

    -
    -public static Widget createChoiceMenu(java.lang.String displayText,
    -                                      java.lang.Boolean showBackButton,
    -                                      java.lang.Boolean autoBack,
    -                                      java.lang.String[] buttonTexts,
    -                                      ModAction[] buttonActions)
    -
    -
    This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it. This - overload uses two tables that match up to create the buttons. -

    -

    -
    Parameters:
    displayText - The text to display.
    showBackButton - Whether to automatically show a 'back' button or not.
    autoBack - Whether to automatically merge a 'back' ModAction with the - buttons.
    buttonTexts - The text for the buttons you want to show.
    buttonActions - The corresponding ModActions for the buttons. -
    Returns:
    The generated widget. Use GuiModScreen.show to display it.
    -
    -
    -
    - -

    -makeButton

    -
    -public static Button makeButton(java.lang.String displayText,
    -                                ModAction action,
    -                                java.lang.Boolean addClick)
    -
    -
    This method creates a button widget for you. -

    -

    -
    Parameters:
    displayText - The text to display on the button.
    action - The ModAction to call when clicked.
    addClick - Set this to true and it will automatically play the Click - sound. -
    Returns:
    The new Button widget.
    -
    -
    -
    - -

    -makeButton

    -
    -public static Button makeButton(java.lang.String displayText,
    -                                java.lang.String methodName,
    -                                java.lang.Object me,
    -                                java.lang.Boolean addClick)
    -
    -
    This method creates a button widget for you. -

    -

    -
    Parameters:
    displayText - The text to display on the button.
    methodName - The name of the method to call when clicked.
    me - The Object or Class that has the method you want to call.
    addClick - Set this to true and it will automatically play the Click - sound. -
    Returns:
    The new Button widget.
    -
    -
    -
    - -

    -makeButton

    -
    -public static Button makeButton(java.lang.String displayText,
    -                                java.lang.String methodName,
    -                                java.lang.Object me,
    -                                java.lang.Boolean addClick,
    -                                java.lang.Class[] classes,
    -                                java.lang.Object... arguments)
    -
    -
    This method creates a button widget for you. -

    -

    -
    Parameters:
    displayText - The text to display on the button.
    methodName - The name of the method to call when clicked.
    me - The Object or Class that has the method you want to call.
    addClick - Set this to true and it will automatically play the Click - sound.
    classes - The argument classes for the method you want to call.
    arguments - The defaulted arguments you want to use. -
    Returns:
    The new Button widget.
    -
    -
    -
    - -

    -makeTextArea

    -
    -public static TextArea makeTextArea(java.lang.String text,
    -                                    java.lang.Boolean htmlMode)
    -
    -
    This is a small helper to create TextAreas, which is basically a label - that wraps text. -

    -

    -
    Parameters:
    text - The text to show.
    htmlMode - Whether to create the Textbox to render HTML, or standard - text. -
    Returns:
    The TextArea widget.
    -
    -
    -
    - -

    -setTextAreaText

    -
    -public static void setTextAreaText(TextArea textArea,
    -                                   java.lang.String text)
    -
    -
    This is a small helper method to set the text of a TextArea. It supposed - Simple and HTML TextAreas. -

    -

    -
    Parameters:
    textArea - The TextArea you wish to set the text of.
    text - The text to set.
    -
    -
    -
    - -

    -makeTextDisplayAndGoBack

    -
    -public static Widget makeTextDisplayAndGoBack(java.lang.String titleText,
    -                                              java.lang.String displayText,
    -                                              java.lang.String buttonText,
    -                                              java.lang.Boolean htmlMode)
    -
    -
    This method is designed to provide an easy way to make popups or - information notices. -

    -

    -
    Parameters:
    titleText - This is the text for the title on top of the display. If you - set this to null, it will simply not have a top bar.
    displayText - This is the text to be displayed below the title bar (If there - is one).
    buttonText - This is the text you want the back button to have. Something - like 'OK' or 'Back' is what you usually use.
    htmlMode - This is if you want the text to be rendered as if it were - HTML. -
    Returns:
    The generated widget. Use GuiModScreen.show to display it.
    -
    -
    -
    - -

    -addButton

    -
    -public void addButton(java.lang.String text,
    -                      ModAction action,
    -                      java.lang.Boolean mergeBack)
    -
    -
    This method adds a button to the choice menu. The arguments are the same - as the related makeButton method. -

    -

    -
    Parameters:
    text - The text for the button.
    action - The action to use when pressed.
    mergeBack - Whether or not to automatically to back after the button is - pressed.
    -
    -
    -
    - -

    -addButton

    -
    -public void addButton(java.lang.String text,
    -                      java.lang.String methodName,
    -                      java.lang.Object me,
    -                      java.lang.Boolean mergeBack)
    -
    -
    This method adds a button to the choice menu. The arguments are the same - as the related makeButton method. -

    -

    -
    Parameters:
    text - The text for the button.
    methodName - The method to call.
    me - The object or class with the method you wish to call.
    mergeBack - Whether or not to automatically to back after the button is - pressed.
    -
    -
    -
    - -

    -addButton

    -
    -public void addButton(java.lang.String text,
    -                      java.lang.String methodName,
    -                      java.lang.Object me,
    -                      java.lang.Class[] types,
    -                      java.lang.Boolean mergeBack,
    -                      java.lang.Object... arguments)
    -
    -
    This method adds a button to the choice menu. The arguments are the same - as the related makeButton method. -

    -

    -
    Parameters:
    text - The text for the button.
    methodName - The method to call.
    me - The object or class with the method you wish to call.
    types - The types of the arguments required for the method.
    mergeBack - Whether or not to automatically to back after the button is - pressed.
    arguments - The arguments you wish to use when this button is pressed.
    -
    -
    -
    - -

    -genWidget

    -
    -public Widget genWidget(java.lang.Boolean showBackButton)
    -
    -
    This creates the Choice Menu from the Display Text entered earlier and - the buttons you have added. -

    -

    -
    Parameters:
    showBackButton - If true, show a bar on the bottom with a button to go back to - the previous menu. If false, don't. -
    Returns:
    The generated widget. Use GuiModScreen.show to display it.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/GuiModScreen.html b/doc/net/minecraft/src/GuiModScreen.html deleted file mode 100644 index a39f0f9..0000000 --- a/doc/net/minecraft/src/GuiModScreen.html +++ /dev/null @@ -1,510 +0,0 @@ - - - - - - -GuiModScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class GuiModScreen

    -
    -java.lang.Object
    -  extended by GuiScreen
    -      extended by net.minecraft.src.GuiModScreen
    -
    -
    -
    Direct Known Subclasses:
    GuiModSelect
    -
    -
    -
    -
    public class GuiModScreen
    extends GuiScreen
    - - -

    -GuiModScreen is the minecraft screen subclass that controls and renders TWL. - normally you will want to call it's static methods to use it, though - subclassing it and/or instantiating it are also possible. however, to do so - would use unsafe api (I still might change things.) -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    See Also:
    show(GuiModScreen), -show(Widget)
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - intbackgroundType - -
    -          The type of background to draw.
    -static GuiModScreencurrentScreen - -
    -          Used by static methods.
    - Widgetmainwidget - -
    -          Actual main widget of this GuiModScreen
    - GuiScreenparentScreen - -
    -          Reference to parent screen, is used by GuiModScreen#back()
    -  - - - - - - - - - - - - - - - -
    -Constructor Summary
    -protected GuiModScreen(GuiScreen screen) - -
    -          Only use this constructor from subclasses.
    - GuiModScreen(GuiScreen screen, - Widget widget) - -
    -          main constructor, to be used if you are instantiating this class.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    -static voidback() - -
    -          Hide current screen and show parent screen.
    -static voidclicksound() - -
    -          Play a click sound.
    - voiddrawScreen(int var1, - int var2, - float var3) - -
    -           
    - voidhandleInput() - -
    -           
    -static voidshow(GuiModScreen screen) - -
    -          Show a screen - GuiModScreen version.
    -static voidshow(Widget screen) - -
    -          Show a screen - TWL widget version.
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -currentScreen

    -
    -public static GuiModScreen currentScreen
    -
    -
    Used by static methods. Is the currently displayed screen. -

    -

    -
    -
    -
    - -

    -backgroundType

    -
    -public int backgroundType
    -
    -
    The type of background to draw. 0 is the default background. If you are - in game, it will shade the screen grey before it draws your widget, like - when you pause the game normally. If you are not in game, it will show - the dirt background, like on the main menu. 1 is force the main menu - (dirt) background. Anything else is no background, completely clear. -

    -

    -
    -
    -
    - -

    -mainwidget

    -
    -public Widget mainwidget
    -
    -
    Actual main widget of this GuiModScreen -

    -

    -
    -
    -
    - -

    -parentScreen

    -
    -public GuiScreen parentScreen
    -
    -
    Reference to parent screen, is used by GuiModScreen#back() -

    -

    -
    See Also:
    back()
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -GuiModScreen

    -
    -protected GuiModScreen(GuiScreen screen)
    -
    -
    Only use this constructor from subclasses. does not take a widget, so - that the subclass can build the widget before storing it. put your main - widget in mainwidget, of course. -

    -

    -
    Parameters:
    screen - parent screen
    See Also:
    back()
    -
    -
    - -

    -GuiModScreen

    -
    -public GuiModScreen(GuiScreen screen,
    -                    Widget widget)
    -
    -
    main constructor, to be used if you are instantiating this class. -

    -

    -
    Parameters:
    screen - parent screen - make sure this is right!
    widget - main widget to display
    -
    - - - - - - - - -
    -Method Detail
    - -

    -back

    -
    -public static void back()
    -
    -
    Hide current screen and show parent screen. -

    -

    -
    -
    -
    -
    - -

    -clicksound

    -
    -public static void clicksound()
    -
    -
    Play a click sound. Call after the user performs an action. Already - called from setting widgets. -

    -

    -
    -
    -
    -
    - -

    -show

    -
    -public static void show(GuiModScreen screen)
    -
    -
    Show a screen - GuiModScreen version. Show an instance of GuiModScreen - - Does not set the parent screen, you have to deal with that yourself! -

    -

    -
    Parameters:
    screen - GuiModScreen instance or subclass to show with parent screen - already set to current screen.
    -
    -
    -
    - -

    -show

    -
    -public static void show(Widget screen)
    -
    -
    Show a screen - TWL widget version. This is the recommended way to show a - TWL widget as a screen. -

    -

    -
    Parameters:
    screen - widget to show - will be sized to size of screen when twl was - started.
    -
    -
    -
    - -

    -drawScreen

    -
    -public void drawScreen(int var1,
    -                       int var2,
    -                       float var3)
    -
    -
    -
    -
    -
    -
    - -

    -handleInput

    -
    -public void handleInput()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/GuiModSelect.html b/doc/net/minecraft/src/GuiModSelect.html deleted file mode 100644 index 7250d15..0000000 --- a/doc/net/minecraft/src/GuiModSelect.html +++ /dev/null @@ -1,262 +0,0 @@ - - - - - - -GuiModSelect - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class GuiModSelect

    -
    -java.lang.Object
    -  extended by GuiScreen
    -      extended by net.minecraft.src.GuiModScreen
    -          extended by net.minecraft.src.GuiModSelect
    -
    -
    -
    -
    public class GuiModSelect
    extends GuiModScreen
    - - -

    -This is a Subclass of GuiModScreen, and acts as the entry point from the - button in the options menu. This is just used internally. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - -
    -Field Summary
    - - - - - - - -
    Fields inherited from class net.minecraft.src.GuiModScreen
    backgroundType, currentScreen, mainwidget, parentScreen
    -  - - - - - - - - - - - -
    -Constructor Summary
    -protected GuiModSelect(GuiScreen screen) - -
    -           
    -  - - - - - - - -
    -Method Summary
    - - - - - - - -
    Methods inherited from class net.minecraft.src.GuiModScreen
    back, clicksound, drawScreen, handleInput, show, show
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -GuiModSelect

    -
    -protected GuiModSelect(GuiScreen screen)
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/GuiOptions.html b/doc/net/minecraft/src/GuiOptions.html deleted file mode 100644 index c55fce5..0000000 --- a/doc/net/minecraft/src/GuiOptions.html +++ /dev/null @@ -1,331 +0,0 @@ - - - - - - -GuiOptions - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class GuiOptions

    -
    -java.lang.Object
    -  extended by GuiScreen
    -      extended by net.minecraft.src.GuiOptions
    -
    -
    -
    -
    public class GuiOptions
    extends GuiScreen
    - - -

    -


    - -

    - - - - - - - - - - - -
    -Field Summary
    -protected  java.lang.StringscreenTitle - -
    -           
    -  - - - - - - - - - - -
    -Constructor Summary
    GuiOptions(GuiScreen var1, - GameSettings var2) - -
    -           
    -  - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    -protected  voidactionPerformed(GuiButton var1) - -
    -           
    - voiddrawScreen(int var1, - int var2, - float var3) - -
    -           
    - voidinitGui() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -screenTitle

    -
    -protected java.lang.String screenTitle
    -
    -
    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -GuiOptions

    -
    -public GuiOptions(GuiScreen var1,
    -                  GameSettings var2)
    -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -initGui

    -
    -public void initGui()
    -
    -
    -
    -
    -
    -
    - -

    -actionPerformed

    -
    -protected void actionPerformed(GuiButton var1)
    -
    -
    -
    -
    -
    -
    - -

    -drawScreen

    -
    -public void drawScreen(int var1,
    -                       int var2,
    -                       float var3)
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/GuiWidgetScreen.html b/doc/net/minecraft/src/GuiWidgetScreen.html deleted file mode 100644 index ab7a972..0000000 --- a/doc/net/minecraft/src/GuiWidgetScreen.html +++ /dev/null @@ -1,528 +0,0 @@ - - - - - - -GuiWidgetScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class GuiWidgetScreen

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.GuiWidgetScreen
    -
    -
    -
    -
    public class GuiWidgetScreen
    extends Widget
    - - -

    -TWL Widget that switches out child widgets. the Minecraft gui end and twl - rendering is managed from GuiModScreen. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - WidgetcurrentWidget - -
    -          The widget that is currently displayed.
    - GUIgui - -
    -          This is a reference to a TWL class that is used to render the widgets.
    -static GuiWidgetScreeninstance - -
    -          The initialized instance of GuiWidgetScreen.
    - MinecraftminecraftInstance - -
    -          This is a reference to Minecraft.
    - LWJGLRendererrenderer - -
    -          This is the rendered used by TWL.
    -static intscreenheight - -
    -          The height of the screen that the widget will render on.
    - ScaledResolutionscreenSize - -
    -          This is the ScaledResolution class that is used to scale all of the - widgets.
    -static intscreenwidth - -
    -          The width of the screen that the widget will render on.
    - ThemeManagertheme - -
    -          This the the ThemeManager for GuiAPI.
    -  - - - - - - - - - - -
    -Constructor Summary
    GuiWidgetScreen() - -
    -          This creates a new instance of GuiWidgetScreen.
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    -static GuiWidgetScreengetInstance() - -
    -          get the instance of GuiWidget, creating it if needed
    - voidlayout() - -
    -           
    - voidresetScreen() - -
    -          Removes all children and clears the current widget.
    - voidsetScreen(Widget widget) - -
    -          to be called only from GuiModScreen, sets the widget to display.
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -instance

    -
    -public static GuiWidgetScreen instance
    -
    -
    The initialized instance of GuiWidgetScreen. -

    -

    -
    -
    -
    - -

    -screenheight

    -
    -public static int screenheight
    -
    -
    The height of the screen that the widget will render on. -

    -

    -
    -
    -
    - -

    -screenwidth

    -
    -public static int screenwidth
    -
    -
    The width of the screen that the widget will render on. -

    -

    -
    -
    -
    - -

    -currentWidget

    -
    -public Widget currentWidget
    -
    -
    The widget that is currently displayed. -

    -

    -
    -
    -
    - -

    -gui

    -
    -public GUI gui
    -
    -
    This is a reference to a TWL class that is used to render the widgets. -

    -

    -
    -
    -
    - -

    -minecraftInstance

    -
    -public Minecraft minecraftInstance
    -
    -
    This is a reference to Minecraft. -

    -

    -
    -
    -
    - -

    -renderer

    -
    -public LWJGLRenderer renderer
    -
    -
    This is the rendered used by TWL. -

    -

    -
    -
    -
    - -

    -screenSize

    -
    -public ScaledResolution screenSize
    -
    -
    This is the ScaledResolution class that is used to scale all of the - widgets. -

    -

    -
    -
    -
    - -

    -theme

    -
    -public ThemeManager theme
    -
    -
    This the the ThemeManager for GuiAPI. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -GuiWidgetScreen

    -
    -public GuiWidgetScreen()
    -
    -
    This creates a new instance of GuiWidgetScreen. It should only be used - internally. Please use the static method getInstance() instead. -

    -

    - - - - - - - - -
    -Method Detail
    - -

    -getInstance

    -
    -public static GuiWidgetScreen getInstance()
    -
    -
    get the instance of GuiWidget, creating it if needed -

    -

    - -
    Returns:
    GuiWidgetScreen singleton
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    -
    -
    -
    - -

    -resetScreen

    -
    -public void resetScreen()
    -
    -
    Removes all children and clears the current widget. -

    -

    -
    -
    -
    -
    - -

    -setScreen

    -
    -public void setScreen(Widget widget)
    -
    -
    to be called only from GuiModScreen, sets the widget to display. - GuiModScreen manages this. -

    -

    -
    Parameters:
    widget - widget to display
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/ModAction.html b/doc/net/minecraft/src/ModAction.html deleted file mode 100644 index 80594cc..0000000 --- a/doc/net/minecraft/src/ModAction.html +++ /dev/null @@ -1,742 +0,0 @@ - - - - - - -ModAction - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class ModAction

    -
    -java.lang.Object
    -  extended by net.minecraft.src.ModAction
    -
    -
    -
    All Implemented Interfaces:
    java.beans.PropertyChangeListener, java.lang.Runnable, java.util.EventListener
    -
    -
    -
    -
    public class ModAction
    extends java.lang.Object
    implements java.lang.Runnable, java.beans.PropertyChangeListener
    - - -

    -This class is a helper designed to make it easier to use callbacks. It - implements Runnable and PropertyChangeListener, and you can use it in several - ways. -

    - -

    -

    -
    Author:
    -
    _303, ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - java.lang.ObjectdataRef - -
    -          The 'dataRef' field is an extra, unused field you can use as a key, or - something specific to track.
    -protected  java.lang.Object[]defaultArguments - -
    -           
    -protected  java.util.ArrayList<ModAction>mergedActions - -
    -           
    -protected  java.lang.StringmethodName - -
    -           
    -protected  java.lang.Class[]methodParams - -
    -           
    - java.lang.StringnameRef - -
    -          The 'nameRef' field is also something you can use to track your - ModActions.
    -protected  java.lang.ObjectobjectRef - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Constructor Summary
    - ModAction(java.lang.Object o, - java.lang.String method, - java.lang.Class... params) - -
    -          This is the most common ModAction constructor.
    - ModAction(java.lang.Object o, - java.lang.String method, - java.lang.Object data, - java.lang.Class... params) - -
    -          This is an overload to allow the dataRef object.
    - ModAction(java.lang.Object o, - java.lang.String method, - java.lang.String name, - java.lang.Class... params) - -
    -          This is an overload to allow the nameRef string.
    - ModAction(java.lang.Object o, - java.lang.String method, - java.lang.String name, - java.lang.Object data, - java.lang.Class... params) - -
    -          This is an overload to allow the nameRef string and dataRef object.
    -protected ModAction(java.lang.String name) - -
    -          This is a constructor that is only supposed to be used internally.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    -protected  java.lang.BooleanargsMatch(java.lang.Class[] classTypes, - java.lang.Object[] arguments) - -
    -           
    - java.lang.Object[]call(java.lang.Object... args) - -
    -          This calls this ModAction and any Merged actions with the provided - arguments.
    -protected  java.lang.ObjectcallInt(java.lang.Object... args) - -
    -           
    -protected  java.lang.reflect.MethodGetMethodRecursively(java.lang.Object o, - java.lang.String method) - -
    -           
    - ModActionmergeAction(ModAction newAction) - -
    -          This method merges ModActions together into one.
    - voidpropertyChange(java.beans.PropertyChangeEvent paramPropertyChangeEvent) - -
    -           
    - voidrun() - -
    -           
    - ModActionsetDefaultArguments(java.lang.Object... Arguments) - -
    -          This sets the arguments to use if no or invalid arguments are provided.
    -protected  voidsetupHandler(java.lang.Object o, - java.lang.String method) - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -dataRef

    -
    -public java.lang.Object dataRef
    -
    -
    The 'dataRef' field is an extra, unused field you can use as a key, or - something specific to track. -

    -

    -
    -
    -
    - -

    -defaultArguments

    -
    -protected java.lang.Object[] defaultArguments
    -
    -
    -
    -
    -
    - -

    -mergedActions

    -
    -protected java.util.ArrayList<ModAction> mergedActions
    -
    -
    -
    -
    -
    - -

    -methodName

    -
    -protected java.lang.String methodName
    -
    -
    -
    -
    -
    - -

    -methodParams

    -
    -protected java.lang.Class[] methodParams
    -
    -
    -
    -
    -
    - -

    -nameRef

    -
    -public java.lang.String nameRef
    -
    -
    The 'nameRef' field is also something you can use to track your - ModActions. -

    -

    -
    -
    -
    - -

    -objectRef

    -
    -protected java.lang.Object objectRef
    -
    -
    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -ModAction

    -
    -public ModAction(java.lang.Object o,
    -                 java.lang.String method,
    -                 java.lang.Class... params)
    -
    -
    This is the most common ModAction constructor. You simply specify what - has the method you want, and the method's name and (Optionally) the - parameters. -

    -

    -
    Parameters:
    o - The object reference or class that contains the method you - wish to call.
    method - The name of the method you wish to call.
    params - The parameters of the method you wish to call.
    -
    -
    - -

    -ModAction

    -
    -public ModAction(java.lang.Object o,
    -                 java.lang.String method,
    -                 java.lang.Object data,
    -                 java.lang.Class... params)
    -
    -
    This is an overload to allow the dataRef object. -

    -

    -
    Parameters:
    o - The object reference or class that contains the method you - wish to call.
    method - The name of the method you wish to call.
    data - A specific key for identifying this ModAction. Basically - something you can use to track it.
    params - The parameters of the method you wish to call.
    -
    -
    - -

    -ModAction

    -
    -public ModAction(java.lang.Object o,
    -                 java.lang.String method,
    -                 java.lang.String name,
    -                 java.lang.Class... params)
    -
    -
    This is an overload to allow the nameRef string. -

    -

    -
    Parameters:
    o - The object reference or class that contains the method you - wish to call.
    method - The name of the method you wish to call.
    name - The name of this ModAction. Something else you can use to keep - track, and this is included within exceptions.
    params - The parameters of the method you wish to call.
    -
    -
    - -

    -ModAction

    -
    -public ModAction(java.lang.Object o,
    -                 java.lang.String method,
    -                 java.lang.String name,
    -                 java.lang.Object data,
    -                 java.lang.Class... params)
    -
    -
    This is an overload to allow the nameRef string and dataRef object. -

    -

    -
    Parameters:
    o - The object reference or class that contains the method you - wish to call.
    method - The name of the method you wish to call.
    name - The name of this ModAction. Something else you can use to keep - track, and this is included within exceptions.
    data - A specific key for identifying this ModAction. Basically - something you can use to track it.
    params - The parameters of the method you wish to call.
    -
    -
    - -

    -ModAction

    -
    -protected ModAction(java.lang.String name)
    -
    -
    This is a constructor that is only supposed to be used internally. It - sets no actual handler, only a name. -

    -

    -
    Parameters:
    name - The name to use for this ModAction.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -argsMatch

    -
    -protected java.lang.Boolean argsMatch(java.lang.Class[] classTypes,
    -                                      java.lang.Object[] arguments)
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -

    -call

    -
    -public java.lang.Object[] call(java.lang.Object... args)
    -                        throws java.lang.Exception
    -
    -
    This calls this ModAction and any Merged actions with the provided - arguments. If the arguments do not match it will try using the default - arguments, if they exist. If not, it will throw an exception. -

    -

    -
    -
    -
    -
    Parameters:
    args - The arguments to try and call for the ModAction (And any - merged ModActions) -
    Returns:
    The return values for each ModAction. -
    Throws: -
    java.lang.Exception - Any exception thrown when the ModAction attempts to run.
    -
    -
    -
    - -

    -callInt

    -
    -protected java.lang.Object callInt(java.lang.Object... args)
    -                            throws java.lang.Exception
    -
    -
    -
    -
    -
    - -
    Throws: -
    java.lang.Exception
    -
    -
    -
    - -

    -GetMethodRecursively

    -
    -protected java.lang.reflect.Method GetMethodRecursively(java.lang.Object o,
    -                                                        java.lang.String method)
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -

    -mergeAction

    -
    -public ModAction mergeAction(ModAction newAction)
    -
    -
    This method merges ModActions together into one. -

    -

    -
    -
    -
    -
    Parameters:
    newAction - The new Action to merge with. -
    Returns:
    The Merged ModAction.
    -
    -
    -
    - -

    -propertyChange

    -
    -public void propertyChange(java.beans.PropertyChangeEvent paramPropertyChangeEvent)
    -
    -
    -
    Specified by:
    propertyChange in interface java.beans.PropertyChangeListener
    -
    -
    -
    -
    -
    -
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -setDefaultArguments

    -
    -public ModAction setDefaultArguments(java.lang.Object... Arguments)
    -
    -
    This sets the arguments to use if no or invalid arguments are provided. - Throws InvalidParameterException if the arguments provided do not match - the method parameters, or are not assignable to those types. -

    -

    -
    -
    -
    -
    Parameters:
    Arguments - The arguments to try and call. -
    Returns:
    this
    -
    -
    -
    - -

    -setupHandler

    -
    -protected void setupHandler(java.lang.Object o,
    -                            java.lang.String method)
    -
    -
    -
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/ModSettingScreen.html b/doc/net/minecraft/src/ModSettingScreen.html deleted file mode 100644 index 60bef2f..0000000 --- a/doc/net/minecraft/src/ModSettingScreen.html +++ /dev/null @@ -1,494 +0,0 @@ - - - - - - -ModSettingScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class ModSettingScreen

    -
    -java.lang.Object
    -  extended by net.minecraft.src.ModSettingScreen
    -
    -
    -
    -
    public class ModSettingScreen
    extends java.lang.Object
    - - -

    -This is the class that GuiModSelect uses to show Subscreens. Create one of - these to create your own subscreen, from which you can add widgets to. This - automatically registers the button on the Mod Setting Screen. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - java.lang.StringbuttonTitle - -
    -          title to show on button to this modscreen
    -static java.lang.StringguiContext - -
    -          The current context.
    -static java.util.ArrayList<ModSettingScreen>modScreens - -
    -          The list of currently registered ModScreens.
    - java.lang.StringniceName - -
    -          name to show at top of screen
    - WidgettheWidget - -
    -          the main widget to pass into GuiModScreen.show()
    - WidgetClassicTwocolumnwidgetColumn - -
    -          the column widget to show the child widgets in
    -  - - - - - - - - - - - - - - - - -
    -Constructor Summary
    ModSettingScreen(java.lang.String name) - -
    -          convenience constructor for when you want to show the same name on the - button and screen title
    ModSettingScreen(java.lang.String nicename, - java.lang.String buttontitle) - -
    -          The main Constructor for ModSettingScreen.
    ModSettingScreen(Widget widget, - java.lang.String buttontitle) - -
    -          An alternate Constructor for ModSettingScreen.
    -  - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidappend(Widget newwidget) - -
    -          Add a widget
    - voidremove(Widget child) - -
    -          Remove a widget
    - voidsetSingleColumn(java.lang.Boolean value) - -
    -          Changes the widgetColumn to or from WidgetClassicTwocolumn or - WidgetSinglecolumn.
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -guiContext

    -
    -public static java.lang.String guiContext
    -
    -
    The current context. -

    -

    -
    -
    -
    - -

    -modScreens

    -
    -public static java.util.ArrayList<ModSettingScreen> modScreens
    -
    -
    The list of currently registered ModScreens. -

    -

    -
    -
    -
    - -

    -buttonTitle

    -
    -public java.lang.String buttonTitle
    -
    -
    title to show on button to this modscreen -

    -

    -
    -
    -
    - -

    -niceName

    -
    -public java.lang.String niceName
    -
    -
    name to show at top of screen -

    -

    -
    -
    -
    - -

    -theWidget

    -
    -public Widget theWidget
    -
    -
    the main widget to pass into GuiModScreen.show() -

    -

    -
    -
    -
    - -

    -widgetColumn

    -
    -public WidgetClassicTwocolumn widgetColumn
    -
    -
    the column widget to show the child widgets in -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -ModSettingScreen

    -
    -public ModSettingScreen(java.lang.String name)
    -
    -
    convenience constructor for when you want to show the same name on the - button and screen title -

    -

    -
    Parameters:
    name - mod nice name
    -
    -
    - -

    -ModSettingScreen

    -
    -public ModSettingScreen(java.lang.String nicename,
    -                        java.lang.String buttontitle)
    -
    -
    The main Constructor for ModSettingScreen. Creates a WidgetSimplewindow - as the main Widget, sets the title for said WidgetSimplewindow, and - registers this ModSettingScreen on the settings screen. -

    -

    -
    Parameters:
    nicename - The title that will be on the WidgetSimplewindow.
    buttontitle - button-to-screen title
    -
    -
    - -

    -ModSettingScreen

    -
    -public ModSettingScreen(Widget widget,
    -                        java.lang.String buttontitle)
    -
    -
    An alternate Constructor for ModSettingScreen. Instead of creating a - WidgetSimplewindow, this simply lets you pass a widget of your choosing. -

    -

    -
    Parameters:
    widget - The main widget you want to use for this ModSettingScreen.
    buttontitle - button-to-screen title
    -
    - - - - - - - - -
    -Method Detail
    - -

    -append

    -
    -public void append(Widget newwidget)
    -
    -
    Add a widget -

    -

    -
    Parameters:
    newwidget - the widget to add
    -
    -
    -
    - -

    -remove

    -
    -public void remove(Widget child)
    -
    -
    Remove a widget -

    -

    -
    Parameters:
    child - widget to remove
    -
    -
    -
    - -

    -setSingleColumn

    -
    -public void setSingleColumn(java.lang.Boolean value)
    -
    -
    Changes the widgetColumn to or from WidgetClassicTwocolumn or - WidgetSinglecolumn. -

    -

    -
    Parameters:
    value - What to change it to. True for WidgetSinglecolumn, False for - WidgetClassicTwocolumn.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/ModSettings.html b/doc/net/minecraft/src/ModSettings.html deleted file mode 100644 index bdc5ed6..0000000 --- a/doc/net/minecraft/src/ModSettings.html +++ /dev/null @@ -1,1846 +0,0 @@ - - - - - - -ModSettings - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class ModSettings

    -
    -java.lang.Object
    -  extended by net.minecraft.src.ModSettings
    -
    -
    -
    -
    public class ModSettings
    extends java.lang.Object
    - - -

    -Main interface class for Settings API -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    -static java.util.ArrayList<ModSettings>all - -
    -          A list of all ModSettings instances.
    - java.lang.Stringbackendname - -
    -          Mod name as used in .minecraft/mods/${modbackendname}/
    -static java.util.HashMap<java.lang.String,java.lang.String>contextDatadirs - -
    -          A map of context names and the directories they save to.
    -static java.lang.StringcurrentContext - -
    -          The current context.
    -static booleandebug - -
    -          Debug mode flag.
    - java.util.ArrayList<Setting>Settings - -
    -          all registered settings for this mod
    - booleansettingsLoaded - -
    -          Whether or not Settings have been loaded for this mod.
    -  - - - - - - - - - - -
    -Constructor Summary
    ModSettings(java.lang.String modbackendname) - -
    -           
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - SettingBooleanaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value) - -
    -          convenience boolean setting adder
    - SettingBooleanaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value, - java.lang.String truestring, - java.lang.String falsestring) - -
    -          convenience boolean setting adder
    - SettingFloataddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value) - -
    -          convenience float setting adder
    - SettingFloataddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value, - float min, - float step, - float max) - -
    -          convenience float setting adder
    - SettingKeyaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value) - -
    -          convenience key setting adder
    - SettingIntaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int max) - -
    -          convenience int setting adder
    - SettingIntaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int step, - int max) - -
    -          convenience int setting adder
    - SettingMultiaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - java.lang.String... labels) - -
    -          convenience multi setting adder
    - SettingTextaddSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - java.lang.String value) - -
    -          convenience text setting adder
    - SettingBooleanaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - boolean value) - -
    -          convenience boolean setting adder
    - SettingBooleanaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - boolean value, - java.lang.String truestring, - java.lang.String falsestring) - -
    -          convenience boolean setting adder
    - SettingFloataddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - float value) - -
    -          convenience float setting adder
    - SettingFloataddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - float value, - float min, - float step, - float max) - -
    -          convenience float setting adder
    - SettingKeyaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value) - -
    -          convenience key setting adder
    - SettingIntaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int max) - -
    -          convenience int setting adder
    - SettingIntaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int step, - int max) - -
    -          convenience int setting adder
    - SettingMultiaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - java.lang.String... labels) - -
    -          convenience multi setting adder
    - SettingTextaddSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - java.lang.String value) - -
    -          convenience text setting adder
    - voidappend(Setting s) - -
    -          add a setting to be saved.
    - voidcopyContextAll(java.lang.String src, - java.lang.String dest) - -
    -          Copies the saved settings from one context to another.
    -static voiddbgout(java.lang.String s) - -
    -          Debug printer.
    - java.util.ArrayList<SettingBoolean>getAllBooleanSettings() - -
    -          Get a list of all Boolean settings for the current context.
    - java.util.ArrayList<SettingBoolean>getAllBooleanSettings(java.lang.String context) - -
    -          Get a list of all Boolean settings for the specified context.
    - java.util.ArrayList<SettingFloat>getAllFloatSettings() - -
    -          Get a list of all Float settings for the current context.
    - java.util.ArrayList<SettingFloat>getAllFloatSettings(java.lang.String context) - -
    -          Get a list of all Float settings for the specified context.
    - java.util.ArrayList<SettingInt>getAllIntSettings() - -
    -          Get a list of all Int settings for the current context.
    - java.util.ArrayList<SettingInt>getAllIntSettings(java.lang.String context) - -
    -          Get a list of all Int settings for the specified context.
    - java.util.ArrayList<SettingKey>getAllKeySettings() - -
    -          Get a list of all Key settings for the current context.
    - java.util.ArrayList<SettingKey>getAllKeySettings(java.lang.String context) - -
    -          Get a list of all Key settings for the specified context.
    - java.util.ArrayList<SettingMulti>getAllMultiSettings() - -
    -          Get a list of all Multi settings for the current context.
    - java.util.ArrayList<SettingMulti>getAllMultiSettings(java.lang.String context) - -
    -          Get a list of all Multi settings for the specified context.
    - java.util.ArrayList<SettingText>getAllTextSettings() - -
    -          Get a list of all Text settings for the current context.
    - java.util.ArrayList<SettingText>getAllTextSettings(java.lang.String context) - -
    -          Get a list of all Text settings for the specified context.
    -static java.io.FilegetAppDir(java.lang.String app) - -
    -          Returns, and creates if needed, an application directory.
    - java.lang.BooleangetBooleanSetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.BooleangetBooleanSetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - java.lang.FloatgetFloatSetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.FloatgetFloatSetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - java.lang.IntegergetIntSetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.IntegergetIntSetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - java.lang.IntegergetKeySetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.IntegergetKeySetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    -static MinecraftgetMcinst() - -
    -          This finds and returns a Minecraft instance.
    - java.lang.IntegergetMultiSetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.IntegergetMultiSetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - java.lang.StringgetMultiSettingLabel(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.StringgetMultiSettingLabel(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - java.lang.StringgetTextSetting(java.lang.String backendName) - -
    -          Gets the value of a setting by backend name from the current context.
    - java.lang.StringgetTextSetting(java.lang.String backendName, - java.lang.String context) - -
    -          Gets the value of a setting by backend name from the specified context.
    - voidload() - -
    -          Loads the settings for the default context.
    - voidload(java.lang.String context) - -
    -          must be called after all settings are added for loading/saving to work.
    -static voidloadAll(java.lang.String context) - -
    -          Loads all saved settings for a specific context.
    -static voidpresetMcint(Minecraft m) - -
    -          Set the Minecraft instance that getMcinst returns.
    - voidremove(Setting s) - -
    -          removes a setting using ArrayList.remove
    - voidresetAll() - -
    -          Resets all settings for the current context.
    - voidresetAll(java.lang.String context) - -
    -          Resets all settings for the specified context.
    - voidsave(java.lang.String context) - -
    -          called every time a setting is changed saves settings file to - .minecraft/mods/$backendname/guiconfig.properties coming soon: set name - of config file
    -static voidsetContext(java.lang.String name, - java.lang.String location) - -
    -          Sets the context for mods.
    - intsize() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -all

    -
    -public static java.util.ArrayList<ModSettings> all
    -
    -
    A list of all ModSettings instances. -

    -

    -
    -
    -
    - -

    -contextDatadirs

    -
    -public static java.util.HashMap<java.lang.String,java.lang.String> contextDatadirs
    -
    -
    A map of context names and the directories they save to. -

    -

    -
    -
    -
    - -

    -currentContext

    -
    -public static java.lang.String currentContext
    -
    -
    The current context. -

    -

    -
    -
    -
    - -

    -debug

    -
    -public static final boolean debug
    -
    -
    Debug mode flag. Should always be false. -

    -

    -
    See Also:
    Constant Field Values
    -
    -
    - -

    -backendname

    -
    -public java.lang.String backendname
    -
    -
    Mod name as used in .minecraft/mods/${modbackendname}/ -

    -

    -
    -
    -
    - -

    -Settings

    -
    -public java.util.ArrayList<Setting> Settings
    -
    -
    all registered settings for this mod -

    -

    -
    -
    -
    - -

    -settingsLoaded

    -
    -public boolean settingsLoaded
    -
    -
    Whether or not Settings have been loaded for this mod. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -ModSettings

    -
    -public ModSettings(java.lang.String modbackendname)
    -
    -
    -
    Parameters:
    modbackendname - used to initialize class modbackendname field
    -
    - - - - - - - - -
    -Method Detail
    - -

    -dbgout

    -
    -public static void dbgout(java.lang.String s)
    -
    -
    Debug printer. This prints to System.out, and only works when in debug - mode. -

    -

    -
    Parameters:
    s - The string to output.
    -
    -
    -
    - -

    -getAppDir

    -
    -public static java.io.File getAppDir(java.lang.String app)
    -
    -
    Returns, and creates if needed, an application directory. -

    -

    -
    Parameters:
    app - The name of the application. -
    Returns:
    A File reference to the directory created.
    -
    -
    -
    - -

    -getMcinst

    -
    -public static Minecraft getMcinst()
    -
    -
    This finds and returns a Minecraft instance. It caches it if it has - already been located. -

    -

    - -
    Returns:
    The minecraft instance.
    -
    -
    -
    - -

    -loadAll

    -
    -public static void loadAll(java.lang.String context)
    -
    -
    Loads all saved settings for a specific context. -

    -

    -
    Parameters:
    context - The context to load from.
    -
    -
    -
    - -

    -presetMcint

    -
    -public static void presetMcint(Minecraft m)
    -
    -
    Set the Minecraft instance that getMcinst returns. -

    -

    -
    Parameters:
    m - The Minecraft Instance.
    -
    -
    -
    - -

    -setContext

    -
    -public static void setContext(java.lang.String name,
    -                              java.lang.String location)
    -
    -
    Sets the context for mods. This means you can specify a context on a per - world / per server basis, or anything else you would prefer. This will - carry thoughout all mods. -

    -

    -
    Parameters:
    name - The name reference of the context.
    location - The location that this context stores and loads data from.
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingBoolean addSetting(ModSettingScreen screen,
    -                                 java.lang.String nicename,
    -                                 java.lang.String backendname,
    -                                 boolean value)
    -
    -
    convenience boolean setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingBoolean addSetting(ModSettingScreen screen,
    -                                 java.lang.String nicename,
    -                                 java.lang.String backendname,
    -                                 boolean value,
    -                                 java.lang.String truestring,
    -                                 java.lang.String falsestring)
    -
    -
    convenience boolean setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingFloat addSetting(ModSettingScreen screen,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               float value)
    -
    -
    convenience float setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingFloat addSetting(ModSettingScreen screen,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               float value,
    -                               float min,
    -                               float step,
    -                               float max)
    -
    -
    convenience float setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingKey addSetting(ModSettingScreen screen,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value)
    -
    -
    convenience key setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingInt addSetting(ModSettingScreen screen,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value,
    -                             int min,
    -                             int max)
    -
    -
    convenience int setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingInt addSetting(ModSettingScreen screen,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value,
    -                             int min,
    -                             int step,
    -                             int max)
    -
    -
    convenience int setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingMulti addSetting(ModSettingScreen screen,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               int value,
    -                               java.lang.String... labels)
    -
    -
    convenience multi setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingText addSetting(ModSettingScreen screen,
    -                              java.lang.String nicename,
    -                              java.lang.String backendname,
    -                              java.lang.String value)
    -
    -
    convenience text setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingBoolean addSetting(Widget w2,
    -                                 java.lang.String nicename,
    -                                 java.lang.String backendname,
    -                                 boolean value)
    -
    -
    convenience boolean setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingBoolean addSetting(Widget w2,
    -                                 java.lang.String nicename,
    -                                 java.lang.String backendname,
    -                                 boolean value,
    -                                 java.lang.String truestring,
    -                                 java.lang.String falsestring)
    -
    -
    convenience boolean setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingFloat addSetting(Widget w2,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               float value)
    -
    -
    convenience float setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingFloat addSetting(Widget w2,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               float value,
    -                               float min,
    -                               float step,
    -                               float max)
    -
    -
    convenience float setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingKey addSetting(Widget w2,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value)
    -
    -
    convenience key setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingInt addSetting(Widget w2,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value,
    -                             int min,
    -                             int max)
    -
    -
    convenience int setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingInt addSetting(Widget w2,
    -                             java.lang.String nicename,
    -                             java.lang.String backendname,
    -                             int value,
    -                             int min,
    -                             int step,
    -                             int max)
    -
    -
    convenience int setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingMulti addSetting(Widget w2,
    -                               java.lang.String nicename,
    -                               java.lang.String backendname,
    -                               int value,
    -                               java.lang.String... labels)
    -
    -
    convenience multi setting adder -

    -

    -
    -
    -
    -
    - -

    -addSetting

    -
    -public SettingText addSetting(Widget w2,
    -                              java.lang.String nicename,
    -                              java.lang.String backendname,
    -                              java.lang.String value)
    -
    -
    convenience text setting adder -

    -

    -
    -
    -
    -
    - -

    -append

    -
    -public void append(Setting s)
    -
    -
    add a setting to be saved. -

    -

    -
    Parameters:
    s - setting to add - sets s.parent as well, don't add a setting to - more than one modsettings
    -
    -
    -
    - -

    -copyContextAll

    -
    -public void copyContextAll(java.lang.String src,
    -                           java.lang.String dest)
    -
    -
    Copies the saved settings from one context to another. -

    -

    -
    Parameters:
    src - The source context from which to copy.
    dest - The destination context to save to.
    -
    -
    -
    - -

    -getAllBooleanSettings

    -
    -public java.util.ArrayList<SettingBoolean> getAllBooleanSettings()
    -
    -
    Get a list of all Boolean settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllBooleanSettings

    -
    -public java.util.ArrayList<SettingBoolean> getAllBooleanSettings(java.lang.String context)
    -
    -
    Get a list of all Boolean settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllFloatSettings

    -
    -public java.util.ArrayList<SettingFloat> getAllFloatSettings()
    -
    -
    Get a list of all Float settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllFloatSettings

    -
    -public java.util.ArrayList<SettingFloat> getAllFloatSettings(java.lang.String context)
    -
    -
    Get a list of all Float settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllIntSettings

    -
    -public java.util.ArrayList<SettingInt> getAllIntSettings()
    -
    -
    Get a list of all Int settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllIntSettings

    -
    -public java.util.ArrayList<SettingInt> getAllIntSettings(java.lang.String context)
    -
    -
    Get a list of all Int settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllKeySettings

    -
    -public java.util.ArrayList<SettingKey> getAllKeySettings()
    -
    -
    Get a list of all Key settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllKeySettings

    -
    -public java.util.ArrayList<SettingKey> getAllKeySettings(java.lang.String context)
    -
    -
    Get a list of all Key settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllMultiSettings

    -
    -public java.util.ArrayList<SettingMulti> getAllMultiSettings()
    -
    -
    Get a list of all Multi settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllMultiSettings

    -
    -public java.util.ArrayList<SettingMulti> getAllMultiSettings(java.lang.String context)
    -
    -
    Get a list of all Multi settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllTextSettings

    -
    -public java.util.ArrayList<SettingText> getAllTextSettings()
    -
    -
    Get a list of all Text settings for the current context. -

    -

    - -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getAllTextSettings

    -
    -public java.util.ArrayList<SettingText> getAllTextSettings(java.lang.String context)
    -
    -
    Get a list of all Text settings for the specified context. -

    -

    -
    Parameters:
    context - The context from which to copy from. -
    Returns:
    The list of settings.
    -
    -
    -
    - -

    -getBooleanSetting

    -
    -public java.lang.Boolean getBooleanSetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The boolean value.
    -
    -
    -
    - -

    -getBooleanSetting

    -
    -public java.lang.Boolean getBooleanSetting(java.lang.String backendName,
    -                                           java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The boolean value.
    -
    -
    -
    - -

    -getFloatSetting

    -
    -public java.lang.Float getFloatSetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The Float value.
    -
    -
    -
    - -

    -getFloatSetting

    -
    -public java.lang.Float getFloatSetting(java.lang.String backendName,
    -                                       java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The Float value.
    -
    -
    -
    - -

    -getIntSetting

    -
    -public java.lang.Integer getIntSetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The Int value.
    -
    -
    -
    - -

    -getIntSetting

    -
    -public java.lang.Integer getIntSetting(java.lang.String backendName,
    -                                       java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The Int value.
    -
    -
    -
    - -

    -getKeySetting

    -
    -public java.lang.Integer getKeySetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The Key value.
    -
    -
    -
    - -

    -getKeySetting

    -
    -public java.lang.Integer getKeySetting(java.lang.String backendName,
    -                                       java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The Key value.
    -
    -
    -
    - -

    -getMultiSetting

    -
    -public java.lang.Integer getMultiSetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The Multi value.
    -
    -
    -
    - -

    -getMultiSetting

    -
    -public java.lang.Integer getMultiSetting(java.lang.String backendName,
    -                                         java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The Multi value.
    -
    -
    -
    - -

    -getMultiSettingLabel

    -
    -public java.lang.String getMultiSettingLabel(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The text label for the value.
    -
    -
    -
    - -

    -getMultiSettingLabel

    -
    -public java.lang.String getMultiSettingLabel(java.lang.String backendName,
    -                                             java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The text label for the value.
    -
    -
    -
    - -

    -getTextSetting

    -
    -public java.lang.String getTextSetting(java.lang.String backendName)
    -
    -
    Gets the value of a setting by backend name from the current context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting. -
    Returns:
    The Text value.
    -
    -
    -
    - -

    -getTextSetting

    -
    -public java.lang.String getTextSetting(java.lang.String backendName,
    -                                       java.lang.String context)
    -
    -
    Gets the value of a setting by backend name from the specified context. -

    -

    -
    Parameters:
    backendName - The backend name of the setting.
    context - The context from which to copy from. -
    Returns:
    The Text value.
    -
    -
    -
    - -

    -load

    -
    -public void load()
    -
    -
    Loads the settings for the default context. -

    -

    -
    -
    -
    -
    - -

    -load

    -
    -public void load(java.lang.String context)
    -
    -
    must be called after all settings are added for loading/saving to work. - loads from .minecraft/mods/$backendname/guiconfig.properties if it - exists. coming soon: set name of config file -

    -

    -
    Parameters:
    context - The context to load from.
    -
    -
    -
    - -

    -remove

    -
    -public void remove(Setting s)
    -
    -
    removes a setting using ArrayList.remove -

    -

    -
    Parameters:
    s - setting to remove
    -
    -
    -
    - -

    -resetAll

    -
    -public void resetAll()
    -
    -
    Resets all settings for the current context. -

    -

    -
    -
    -
    -
    - -

    -resetAll

    -
    -public void resetAll(java.lang.String context)
    -
    -
    Resets all settings for the specified context. -

    -

    -
    Parameters:
    context - The context to reset.
    -
    -
    -
    - -

    -save

    -
    -public void save(java.lang.String context)
    -
    -
    called every time a setting is changed saves settings file to - .minecraft/mods/$backendname/guiconfig.properties coming soon: set name - of config file -

    -

    -
    Parameters:
    context - The context to save.
    -
    -
    -
    - -

    -size

    -
    -public int size()
    -
    -
    - -
    Returns:
    number of settings registered
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/Setting.html b/doc/net/minecraft/src/Setting.html deleted file mode 100644 index a1f9850..0000000 --- a/doc/net/minecraft/src/Setting.html +++ /dev/null @@ -1,566 +0,0 @@ - - - - - - -Setting - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class Setting<T>

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<T>
    -
    -
    -
    Type Parameters:
    T - The type that this Setting will use.
    -
    -
    Direct Known Subclasses:
    SettingBoolean, SettingFloat, SettingInt, SettingKey, SettingMulti, SettingText
    -
    -
    -
    -
    public abstract class Setting<T>
    extends Widget
    - - -

    -This is the base class for Settings. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - java.lang.StringbackendName - -
    -          The name used by ModSettings to save and load the setting.
    - TdefaultValue - -
    -          The default value for this setting.
    - WidgetSettingdisplayWidget - -
    -          A reference to the Widget that displays this setting.
    - ModSettingsparent - -
    -          Reference to the ModSettings this Setting is a child of.
    - java.util.HashMap<java.lang.String,T>values - -
    -          value.
    -  - - - - - - - - - - -
    -Constructor Summary
    Setting() - -
    -          This is the basic constructor for Setting.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidcopyContext(java.lang.String srccontext, - java.lang.String destcontext) - -
    -          Copies a setting from the source context to the destination context.
    -abstract  voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - Tget() - -
    -          Returns the setting for the current context.
    -abstract  Tget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - voidreset() - -
    -          Resets this setting for the current context, saving the default and - updating the display.
    - voidreset(java.lang.String context) - -
    -          Resets this setting for the specified context, saving the default and - updating the display.
    - voidset(T v) - -
    -          Sets the value for this setting to the current context.
    -abstract  voidset(T v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    -abstract  java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -backendName

    -
    -public java.lang.String backendName
    -
    -
    The name used by ModSettings to save and load the setting. -

    -

    -
    -
    -
    - -

    -defaultValue

    -
    -public T defaultValue
    -
    -
    The default value for this setting. -

    -

    -
    -
    -
    - -

    -displayWidget

    -
    -public WidgetSetting displayWidget
    -
    -
    A reference to the Widget that displays this setting. -

    -

    -
    -
    -
    - -

    -parent

    -
    -public ModSettings parent
    -
    -
    Reference to the ModSettings this Setting is a child of. -

    -

    -
    -
    -
    - -

    -values

    -
    -public java.util.HashMap<java.lang.String,T> values
    -
    -
    value. do not write directly if you want things to update! -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -Setting

    -
    -public Setting()
    -
    -
    This is the basic constructor for Setting. Internal use only. -

    -

    - - - - - - - - -
    -Method Detail
    - -

    -copyContext

    -
    -public void copyContext(java.lang.String srccontext,
    -                        java.lang.String destcontext)
    -
    -
    Copies a setting from the source context to the destination context. -

    -

    -
    Parameters:
    srccontext - The source context to copy data from.
    destcontext - The destination context you would like to save the data to.
    -
    -
    -
    - -

    -fromString

    -
    -public abstract void fromString(java.lang.String s,
    -                                java.lang.String context)
    -
    -
    load back a string from toString() -

    -

    -
    -
    -
    -
    - -

    -get

    -
    -public T get()
    -
    -
    Returns the setting for the current context. -

    -

    - -
    Returns:
    The setting.
    -
    -
    -
    - -

    -get

    -
    -public abstract T get(java.lang.String context)
    -
    -
    Returns the setting for the specified context. -

    -

    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -reset

    -
    -public void reset()
    -
    -
    Resets this setting for the current context, saving the default and - updating the display. -

    -

    -
    -
    -
    -
    - -

    -reset

    -
    -public void reset(java.lang.String context)
    -
    -
    Resets this setting for the specified context, saving the default and - updating the display. -

    -

    -
    Parameters:
    context - The context to reset.
    -
    -
    -
    - -

    -set

    -
    -public void set(T v)
    -
    -
    Sets the value for this setting to the current context. -

    -

    -
    Parameters:
    v - The value.
    -
    -
    -
    - -

    -set

    -
    -public abstract void set(T v,
    -                         java.lang.String context)
    -
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public abstract java.lang.String toString(java.lang.String context)
    -
    -
    return string to save, called from ModSettings.save() -

    -

    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingBoolean.html b/doc/net/minecraft/src/SettingBoolean.html deleted file mode 100644 index f67478e..0000000 --- a/doc/net/minecraft/src/SettingBoolean.html +++ /dev/null @@ -1,398 +0,0 @@ - - - - - - -SettingBoolean - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingBoolean

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.Boolean>
    -          extended by net.minecraft.src.SettingBoolean
    -
    -
    -
    -
    public class SettingBoolean
    extends Setting<java.lang.Boolean>
    - - -

    -This is the Setting type for Booleans. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - -
    -Field Summary
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - - - - -
    -Constructor Summary
    SettingBoolean(java.lang.String name) - -
    -          This is the constructor for SettingBoolean.
    SettingBoolean(java.lang.String name, - java.lang.Boolean defValue) - -
    -          This is the constructor for SettingBoolean.
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Booleanget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - voidset(java.lang.Boolean v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingBoolean

    -
    -public SettingBoolean(java.lang.String name)
    -
    -
    This is the constructor for SettingBoolean. It sets the default value as - false. -

    -

    -
    Parameters:
    name - The backend name for this setting.
    -
    -
    - -

    -SettingBoolean

    -
    -public SettingBoolean(java.lang.String name,
    -                      java.lang.Boolean defValue)
    -
    -
    This is the constructor for SettingBoolean. -

    -

    -
    Parameters:
    name - The backend name for this setting.
    defValue - The default value.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.Boolean>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.Boolean get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.Boolean>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.Boolean v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.Boolean>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.Boolean>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingFloat.html b/doc/net/minecraft/src/SettingFloat.html deleted file mode 100644 index a32d723..0000000 --- a/doc/net/minecraft/src/SettingFloat.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - -SettingFloat - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingFloat

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.Float>
    -          extended by net.minecraft.src.SettingFloat
    -
    -
    -
    -
    public class SettingFloat
    extends Setting<java.lang.Float>
    - - -

    -This is the Setting type for Floats. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - floatmaximumValue - -
    -          The maximum value.
    - floatminimumValue - -
    -          The minimum value.
    - floatstepValue - -
    -          The step value.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - - - - - - - - - - -
    -Constructor Summary
    SettingFloat(java.lang.String title) - -
    -          A constructor for SettingFloat.
    SettingFloat(java.lang.String title, - float defValue) - -
    -          A constructor for SettingFloat.
    SettingFloat(java.lang.String title, - float defValue, - float minValue, - float maxValue) - -
    -          A constructor for SettingFloat.
    SettingFloat(java.lang.String title, - float defValue, - float minValue, - float stepValue, - float maxValue) - -
    -          A constructor for SettingFloat.
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Floatget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - voidset(java.lang.Float v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -maximumValue

    -
    -public float maximumValue
    -
    -
    The maximum value. -

    -

    -
    -
    -
    - -

    -minimumValue

    -
    -public float minimumValue
    -
    -
    The minimum value. -

    -

    -
    -
    -
    - -

    -stepValue

    -
    -public float stepValue
    -
    -
    The step value. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingFloat

    -
    -public SettingFloat(java.lang.String title)
    -
    -
    A constructor for SettingFloat. Defaults settings to default value of 0, - range of 0.0-1.0, and a step of 0.1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    -
    -
    - -

    -SettingFloat

    -
    -public SettingFloat(java.lang.String title,
    -                    float defValue)
    -
    -
    A constructor for SettingFloat. Defaults settings to range of 0.0-1.0 and - a step of 0.1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    -
    -
    - -

    -SettingFloat

    -
    -public SettingFloat(java.lang.String title,
    -                    float defValue,
    -                    float minValue,
    -                    float maxValue)
    -
    -
    A constructor for SettingFloat. Defaults settings to a step of 0.1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    minValue - The minimum value.
    maxValue - The maximum value.
    -
    -
    - -

    -SettingFloat

    -
    -public SettingFloat(java.lang.String title,
    -                    float defValue,
    -                    float minValue,
    -                    float stepValue,
    -                    float maxValue)
    -
    -
    A constructor for SettingFloat. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    minValue - The minimum value.
    stepValue - The step value.
    maxValue - The maximum value.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.Float>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.Float get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.Float>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.Float v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.Float>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.Float>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingInt.html b/doc/net/minecraft/src/SettingInt.html deleted file mode 100644 index 7cbc6bb..0000000 --- a/doc/net/minecraft/src/SettingInt.html +++ /dev/null @@ -1,518 +0,0 @@ - - - - - - -SettingInt - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingInt

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.Integer>
    -          extended by net.minecraft.src.SettingInt
    -
    -
    -
    -
    public class SettingInt
    extends Setting<java.lang.Integer>
    - - -

    -This is the Setting type for Ints. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - intmaximumValue - -
    -          The maximum value.
    - intminimumValue - -
    -          The minimum value.
    - intstepValue - -
    -          The step value.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - - - - - - - - - - -
    -Constructor Summary
    SettingInt(java.lang.String title) - -
    -          A constructor for SettingInt.
    SettingInt(java.lang.String title, - int defValue) - -
    -          A constructor for SettingInt.
    SettingInt(java.lang.String title, - int defValue, - int minValue, - int maxValue) - -
    -          A constructor for SettingInt.
    SettingInt(java.lang.String title, - int defValue, - int minValue, - int stepValue, - int maxValue) - -
    -          A constructor for SettingInt.
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Integerget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - voidset(java.lang.Integer v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -maximumValue

    -
    -public int maximumValue
    -
    -
    The maximum value. -

    -

    -
    -
    -
    - -

    -minimumValue

    -
    -public int minimumValue
    -
    -
    The minimum value. -

    -

    -
    -
    -
    - -

    -stepValue

    -
    -public int stepValue
    -
    -
    The step value. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingInt

    -
    -public SettingInt(java.lang.String title)
    -
    -
    A constructor for SettingInt. Defaults settings to default value of 0, - range of 1-100, and a step of 1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    -
    -
    - -

    -SettingInt

    -
    -public SettingInt(java.lang.String title,
    -                  int defValue)
    -
    -
    A constructor for SettingInt. Defaults settings to range of 1-100, and a - step of 1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    -
    -
    - -

    -SettingInt

    -
    -public SettingInt(java.lang.String title,
    -                  int defValue,
    -                  int minValue,
    -                  int maxValue)
    -
    -
    A constructor for SettingInt. Defaults settings to a step of 1. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    minValue - The minimum value.
    maxValue - The maximum value.
    -
    -
    - -

    -SettingInt

    -
    -public SettingInt(java.lang.String title,
    -                  int defValue,
    -                  int minValue,
    -                  int stepValue,
    -                  int maxValue)
    -
    -
    A constructor for SettingInt. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value.
    minValue - The minimum value.
    stepValue - The step value.
    maxValue - The maximum value.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.Integer get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.Integer v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingKey.html b/doc/net/minecraft/src/SettingKey.html deleted file mode 100644 index 620443d..0000000 --- a/doc/net/minecraft/src/SettingKey.html +++ /dev/null @@ -1,488 +0,0 @@ - - - - - - -SettingKey - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingKey

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.Integer>
    -          extended by net.minecraft.src.SettingKey
    -
    -
    -
    -
    public class SettingKey
    extends Setting<java.lang.Integer>
    - - -

    -This is the Setting type for Keys. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - -
    -Field Summary
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - - - - -
    -Constructor Summary
    SettingKey(java.lang.String title, - int key) - -
    -          Constructor for SettingKey.
    SettingKey(java.lang.String title, - java.lang.String key) - -
    -          Constructor for SettingKey.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Integerget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - booleanisKeyDown() - -
    -          An easy helper to see if the current key is down.
    - booleanisKeyDown(java.lang.String context) - -
    -          An easy helper to see if the current key is down.
    - voidset(java.lang.Integer v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - voidset(java.lang.String v) - -
    -          Sets the value for this setting to the current context.
    - voidset(java.lang.String v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingKey

    -
    -public SettingKey(java.lang.String title,
    -                  int key)
    -
    -
    Constructor for SettingKey. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    key - The key you want as default, as a int keycode.
    -
    -
    - -

    -SettingKey

    -
    -public SettingKey(java.lang.String title,
    -                  java.lang.String key)
    -
    -
    Constructor for SettingKey. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    key - key The key you want as default, as a string.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.Integer get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -isKeyDown

    -
    -public boolean isKeyDown()
    -
    -
    An easy helper to see if the current key is down. -

    -

    - -
    Returns:
    true if the key specified to this setting (In the current - context) is down.
    -
    -
    -
    - -

    -isKeyDown

    -
    -public boolean isKeyDown(java.lang.String context)
    -
    -
    An easy helper to see if the current key is down. -

    -

    -
    Parameters:
    context - The context to get the key from. -
    Returns:
    true if the key specified to this setting is down.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.Integer v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.String v)
    -
    -
    Sets the value for this setting to the current context. -

    -

    -
    Parameters:
    v - The value, as a string.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.String v,
    -                java.lang.String context)
    -
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Parameters:
    v - The value, as a string.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingMulti.html b/doc/net/minecraft/src/SettingMulti.html deleted file mode 100644 index 910cfea..0000000 --- a/doc/net/minecraft/src/SettingMulti.html +++ /dev/null @@ -1,563 +0,0 @@ - - - - - - -SettingMulti - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingMulti

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.Integer>
    -          extended by net.minecraft.src.SettingMulti
    -
    -
    -
    -
    public class SettingMulti
    extends Setting<java.lang.Integer>
    - - -

    -This is the Setting type for Multis. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - -
    -Field Summary
    - java.lang.String[]labelValues - -
    -          A string array of labels for the button.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - - - - -
    -Constructor Summary
    SettingMulti(java.lang.String title, - int defValue, - java.lang.String... labelValues) - -
    -          A constructor for SettingMulti.
    SettingMulti(java.lang.String title, - java.lang.String... labelValues) - -
    -          A constructor for SettingMulti.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Integerget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - java.lang.StringgetLabel() - -
    -          Helper to get the text label for the current context and value.
    - java.lang.StringgetLabel(java.lang.String context) - -
    -          Helper to get the text label for the specified context and value.
    - voidnext() - -
    -          Shifts the value forward for the current context.
    - voidnext(java.lang.String context) - -
    -          Shifts the value forward for the specified context.
    - voidset(java.lang.Integer v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - voidset(java.lang.String v) - -
    -          Sets the value for this setting to the current context.
    - voidset(java.lang.String v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -labelValues

    -
    -public java.lang.String[] labelValues
    -
    -
    A string array of labels for the button. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingMulti

    -
    -public SettingMulti(java.lang.String title,
    -                    int defValue,
    -                    java.lang.String... labelValues)
    -
    -
    A constructor for SettingMulti. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defValue - The default value for this Multi.
    labelValues - The text labels you would like this multi to have. Must have - at least one.
    -
    -
    - -

    -SettingMulti

    -
    -public SettingMulti(java.lang.String title,
    -                    java.lang.String... labelValues)
    -
    -
    A constructor for SettingMulti. Default value is 0, or the first label to - be defined. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    labelValues - The text labels you would like this multi to have. Must have - at least one.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.Integer get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -getLabel

    -
    -public java.lang.String getLabel()
    -
    -
    Helper to get the text label for the current context and value. -

    -

    - -
    Returns:
    The label.
    -
    -
    -
    - -

    -getLabel

    -
    -public java.lang.String getLabel(java.lang.String context)
    -
    -
    Helper to get the text label for the specified context and value. -

    -

    -
    Parameters:
    context - The context to get the value from. -
    Returns:
    The label.
    -
    -
    -
    - -

    -next

    -
    -public void next()
    -
    -
    Shifts the value forward for the current context. -

    -

    -
    -
    -
    -
    - -

    -next

    -
    -public void next(java.lang.String context)
    -
    -
    Shifts the value forward for the specified context. -

    -

    -
    Parameters:
    context - The context to change.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.Integer v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.Integer>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.String v)
    -
    -
    Sets the value for this setting to the current context. -

    -

    -
    Parameters:
    v - The value, in the label representation.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.String v,
    -                java.lang.String context)
    -
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Parameters:
    v - The value, in the label representation.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.Integer>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/SettingText.html b/doc/net/minecraft/src/SettingText.html deleted file mode 100644 index 030c735..0000000 --- a/doc/net/minecraft/src/SettingText.html +++ /dev/null @@ -1,379 +0,0 @@ - - - - - - -SettingText - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class SettingText

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.Setting<java.lang.String>
    -          extended by net.minecraft.src.SettingText
    -
    -
    -
    -
    public class SettingText
    extends Setting<java.lang.String>
    - - -

    -This is the Setting type for Text. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - -
    -Field Summary
    - - - - - - - -
    Fields inherited from class net.minecraft.src.Setting
    backendName, defaultValue, displayWidget, parent, values
    -  - - - - - - - - - - -
    -Constructor Summary
    SettingText(java.lang.String title, - java.lang.String defaulttext) - -
    -          A constructor for SettingText.
    -  - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidfromString(java.lang.String s, - java.lang.String context) - -
    -          load back a string from toString()
    - java.lang.Stringget(java.lang.String context) - -
    -          Returns the setting for the specified context.
    - voidset(java.lang.String v, - java.lang.String context) - -
    -          Sets the value for this setting to the specified context.
    - java.lang.StringtoString(java.lang.String context) - -
    -          return string to save, called from ModSettings.save()
    - - - - - - - -
    Methods inherited from class net.minecraft.src.Setting
    copyContext, get, reset, reset, set
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -SettingText

    -
    -public SettingText(java.lang.String title,
    -                   java.lang.String defaulttext)
    -
    -
    A constructor for SettingText. -

    -

    -
    Parameters:
    title - The backend name for this setting.
    defaulttext - The default text for this Setting.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -fromString

    -
    -public void fromString(java.lang.String s,
    -                       java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    load back a string from toString() -

    -

    -
    Specified by:
    fromString in class Setting<java.lang.String>
    -
    -
    -
    -
    -
    -
    - -

    -get

    -
    -public java.lang.String get(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Returns the setting for the specified context. -

    -

    -
    Specified by:
    get in class Setting<java.lang.String>
    -
    -
    -
    Parameters:
    context - The context to retrieve from. -
    Returns:
    The setting.
    -
    -
    -
    - -

    -set

    -
    -public void set(java.lang.String v,
    -                java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    Sets the value for this setting to the specified context. -

    -

    -
    Specified by:
    set in class Setting<java.lang.String>
    -
    -
    -
    Parameters:
    v - The value.
    context - The context to set.
    -
    -
    -
    - -

    -toString

    -
    -public java.lang.String toString(java.lang.String context)
    -
    -
    Description copied from class: Setting
    -
    return string to save, called from ModSettings.save() -

    -

    -
    Specified by:
    toString in class Setting<java.lang.String>
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetBoolean.html b/doc/net/minecraft/src/WidgetBoolean.html deleted file mode 100644 index e6c4312..0000000 --- a/doc/net/minecraft/src/WidgetBoolean.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - -WidgetBoolean - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetBoolean

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetBoolean
    -
    -
    -
    All Implemented Interfaces:
    java.lang.Runnable
    -
    -
    -
    -
    public class WidgetBoolean
    extends WidgetSetting
    implements java.lang.Runnable
    - - -

    -This is the Widget for boolean settings. It uses a button to display to the - user. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - Buttonbutton - -
    -          The reference to the underlying Button.
    - java.lang.StringfalseText - -
    -          The text to display on the button when the setting is false.
    - SettingBooleansettingReference - -
    -          The reference to the SettingBoolean that this WidgetBoolean uses.
    - java.lang.StringtrueText - -
    -          The text to display on the button when the setting is true.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - - - - -
    -Constructor Summary
    WidgetBoolean(SettingBoolean setting, - java.lang.String title) - -
    -          This creates a new WidgetBoolean using the SettingBoolean and String - provided.
    WidgetBoolean(SettingBoolean setting, - java.lang.String title, - java.lang.String truetext, - java.lang.String falsetext) - -
    -          This creates a new WidgetBoolean using the WidgetBoolean and String - provided, as well as setting the true and false text.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidrun() - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, layout, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -button

    -
    -public Button button
    -
    -
    The reference to the underlying Button. -

    -

    -
    -
    -
    - -

    -falseText

    -
    -public java.lang.String falseText
    -
    -
    The text to display on the button when the setting is false. -

    -

    -
    -
    -
    - -

    -settingReference

    -
    -public SettingBoolean settingReference
    -
    -
    The reference to the SettingBoolean that this WidgetBoolean uses. -

    -

    -
    -
    -
    - -

    -trueText

    -
    -public java.lang.String trueText
    -
    -
    The text to display on the button when the setting is true. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetBoolean

    -
    -public WidgetBoolean(SettingBoolean setting,
    -                     java.lang.String title)
    -
    -
    This creates a new WidgetBoolean using the SettingBoolean and String - provided. It uses 'true' and 'false' for the text. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The title for this Widget. It is what will show on the button, - asides from it's current value.
    -
    -
    - -

    -WidgetBoolean

    -
    -public WidgetBoolean(SettingBoolean setting,
    -                     java.lang.String title,
    -                     java.lang.String truetext,
    -                     java.lang.String falsetext)
    -
    -
    This creates a new WidgetBoolean using the WidgetBoolean and String - provided, as well as setting the true and false text. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The title for this Widget. It is what will show on the button, - asides from it's current value.
    truetext - The text to display what the setting is true.
    falsetext - The text to display what the setting is false.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/WidgetClassicTwocolumn.html deleted file mode 100644 index db33b09..0000000 --- a/doc/net/minecraft/src/WidgetClassicTwocolumn.html +++ /dev/null @@ -1,468 +0,0 @@ - - - - - - -WidgetClassicTwocolumn - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetClassicTwocolumn

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetClassicTwocolumn
    -
    -
    -
    Direct Known Subclasses:
    WidgetSinglecolumn
    -
    -
    -
    -
    public class WidgetClassicTwocolumn
    extends Widget
    - - -

    -This widget is designed to arrange widgets into two columns. The width and - height is enforced, but they can be configured by the programmer. -

    - -

    -

    -
    Author:
    -
    lahwran, ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - intchildDefaultHeight - -
    -          This is the default height to enforce for widgets.
    - intchildWidth - -
    -          This dictates the width to set each of the widgets to.
    - intdefaultPadding - -
    -          This is the amount of padding to use between widgets vertically.
    - java.util.Map<Widget,java.lang.Integer>heightOverrideExceptions - -
    -          This is a map to override the heights of specific widgets.
    - booleanoverrideHeight - -
    -          This says whether it should override the height for all widgets.
    - intsplitDistance - -
    -          This is the amount of room between the two columns.
    - intverticalPadding - -
    -          This is the amount of padding to have before any widgets are positioned.
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetClassicTwocolumn(Widget... widgets) - -
    -          This creates the WidgetClassicTwocolumn and adds the requested widgets.
    -  - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - intgetPreferredHeight() - -
    -           
    - intgetPreferredWidth() - -
    -           
    - voidlayout() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -childDefaultHeight

    -
    -public int childDefaultHeight
    -
    -
    This is the default height to enforce for widgets. -

    -

    -
    -
    -
    - -

    -childWidth

    -
    -public int childWidth
    -
    -
    This dictates the width to set each of the widgets to. -

    -

    -
    -
    -
    - -

    -defaultPadding

    -
    -public int defaultPadding
    -
    -
    This is the amount of padding to use between widgets vertically. -

    -

    -
    -
    -
    - -

    -heightOverrideExceptions

    -
    -public java.util.Map<Widget,java.lang.Integer> heightOverrideExceptions
    -
    -
    This is a map to override the heights of specific widgets. It is an - override to overrideHeight. If you set the Integer as below 1, it will - use what the widget wants as it's height. If you set anything else, it - will use that height. Note that with TwoColumn widgets it will try and - keep the height the same between two widgets opposite each other, so the - one with the biggest height will override the other. -

    -

    -
    -
    -
    - -

    -overrideHeight

    -
    -public boolean overrideHeight
    -
    -
    This says whether it should override the height for all widgets. -

    -

    -
    -
    -
    - -

    -splitDistance

    -
    -public int splitDistance
    -
    -
    This is the amount of room between the two columns. -

    -

    -
    -
    -
    - -

    -verticalPadding

    -
    -public int verticalPadding
    -
    -
    This is the amount of padding to have before any widgets are positioned. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetClassicTwocolumn

    -
    -public WidgetClassicTwocolumn(Widget... widgets)
    -
    -
    This creates the WidgetClassicTwocolumn and adds the requested widgets. -

    -

    -
    Parameters:
    widgets -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -getPreferredHeight

    -
    -public int getPreferredHeight()
    -
    -
    -
    -
    -
    -
    - -

    -getPreferredWidth

    -
    -public int getPreferredWidth()
    -
    -
    -
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetFloat.html b/doc/net/minecraft/src/WidgetFloat.html deleted file mode 100644 index 5583215..0000000 --- a/doc/net/minecraft/src/WidgetFloat.html +++ /dev/null @@ -1,496 +0,0 @@ - - - - - - -WidgetFloat - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetFloat

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetFloat
    -
    -
    -
    All Implemented Interfaces:
    java.lang.Runnable
    -
    -
    -
    -
    public class WidgetFloat
    extends WidgetSetting
    implements java.lang.Runnable
    - - -

    -This is the Widget for Float settings. It uses a WidgetSlider to display to - the user. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - intdecimalPlaces - -
    -          The number of decimal places to display to the user.
    - SettingFloatsettingReference - -
    -          The reference to the SettingInt that this WidgetInt uses.
    - WidgetSliderslider - -
    -          The reference to the underlying WidgetSlider.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - - - - -
    -Constructor Summary
    WidgetFloat(SettingFloat setting, - java.lang.String title) - -
    -          This creates a new WidgetInt using the SettingInt and String provided.
    WidgetFloat(SettingFloat setting, - java.lang.String title, - int _decimalPlaces) - -
    -          This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidrun() - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, layout, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -decimalPlaces

    -
    -public int decimalPlaces
    -
    -
    The number of decimal places to display to the user. -

    -

    -
    -
    -
    - -

    -slider

    -
    -public WidgetSlider slider
    -
    -
    The reference to the underlying WidgetSlider. -

    -

    -
    -
    -
    - -

    -settingReference

    -
    -public SettingFloat settingReference
    -
    -
    The reference to the SettingInt that this WidgetInt uses. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetFloat

    -
    -public WidgetFloat(SettingFloat setting,
    -                   java.lang.String title)
    -
    -
    This creates a new WidgetInt using the SettingInt and String provided. It defaults the decimal places to display at 2. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The text that will show on the WidgetSlider.
    -
    -
    - -

    -WidgetFloat

    -
    -public WidgetFloat(SettingFloat setting,
    -                   java.lang.String title,
    -                   int _decimalPlaces)
    -
    -
    This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The text that will show on the WidgetSlider.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    -
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetInt.html b/doc/net/minecraft/src/WidgetInt.html deleted file mode 100644 index 4f31dbe..0000000 --- a/doc/net/minecraft/src/WidgetInt.html +++ /dev/null @@ -1,454 +0,0 @@ - - - - - - -WidgetInt - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetInt

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetInt
    -
    -
    -
    All Implemented Interfaces:
    java.lang.Runnable
    -
    -
    -
    -
    public class WidgetInt
    extends WidgetSetting
    implements java.lang.Runnable
    - - -

    -This is the Widget for Integer settings. It uses a WidgetSlider to display to - the user. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    - SettingIntsettingReference - -
    -          The reference to the SettingInt that this WidgetInt uses.
    - WidgetSliderslider - -
    -          The reference to the underlying WidgetSlider.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetInt(SettingInt setting, - java.lang.String title) - -
    -          This creates a new WidgetInt using the SettingInt and String provided.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidrun() - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, layout, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -settingReference

    -
    -public SettingInt settingReference
    -
    -
    The reference to the SettingInt that this WidgetInt uses. -

    -

    -
    -
    -
    - -

    -slider

    -
    -public WidgetSlider slider
    -
    -
    The reference to the underlying WidgetSlider. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetInt

    -
    -public WidgetInt(SettingInt setting,
    -                 java.lang.String title)
    -
    -
    This creates a new WidgetInt using the SettingInt and String provided. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The text that will show on the WidgetSlider.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetKeybinding.html b/doc/net/minecraft/src/WidgetKeybinding.html deleted file mode 100644 index 3d40eb8..0000000 --- a/doc/net/minecraft/src/WidgetKeybinding.html +++ /dev/null @@ -1,560 +0,0 @@ - - - - - - -WidgetKeybinding - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetKeybinding

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetKeybinding
    -
    -
    -
    All Implemented Interfaces:
    java.lang.Runnable
    -
    -
    -
    -
    public class WidgetKeybinding
    extends WidgetSetting
    implements java.lang.Runnable
    - - -

    -This is the Widget for Key binding settings. It uses a ToggleButton to - display to the user. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - SimpleBooleanModelbooleanModel - -
    -          The reference to the underlying SimpleBooleanModel.
    - intCLEARKEY - -
    -          The constant for clearing the existing key.
    - intNEVERMINDKEY - -
    -          The constant for exiting and keeping the existing key.
    - SettingKeysettingReference - -
    -          The reference to the SettingKey that this WidgetKeybinding uses.
    - ToggleButtontoggleButton - -
    -          The reference to the underlying ToggleButton.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetKeybinding(SettingKey setting, - java.lang.String title) - -
    -          This creates a new WidgetKeybinding using the WidgetKeybinding and String - provided.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - booleanhandleEvent(Event evt) - -
    -           
    - voidkeyboardFocusLost() - -
    -           
    - voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidrun() - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, layout, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -booleanModel

    -
    -public SimpleBooleanModel booleanModel
    -
    -
    The reference to the underlying SimpleBooleanModel. -

    -

    -
    -
    -
    - -

    -CLEARKEY

    -
    -public int CLEARKEY
    -
    -
    The constant for clearing the existing key. -

    -

    -
    -
    -
    - -

    -NEVERMINDKEY

    -
    -public int NEVERMINDKEY
    -
    -
    The constant for exiting and keeping the existing key. -

    -

    -
    -
    -
    - -

    -settingReference

    -
    -public SettingKey settingReference
    -
    -
    The reference to the SettingKey that this WidgetKeybinding uses. -

    -

    -
    -
    -
    - -

    -toggleButton

    -
    -public ToggleButton toggleButton
    -
    -
    The reference to the underlying ToggleButton. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetKeybinding

    -
    -public WidgetKeybinding(SettingKey setting,
    -                        java.lang.String title)
    -
    -
    This creates a new WidgetKeybinding using the WidgetKeybinding and String - provided. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The text that will show on the WidgetSlider.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -handleEvent

    -
    -public boolean handleEvent(Event evt)
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -

    -keyboardFocusLost

    -
    -public void keyboardFocusLost()
    -
    -
    -
    -
    -
    -
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetMulti.html b/doc/net/minecraft/src/WidgetMulti.html deleted file mode 100644 index 78aaef9..0000000 --- a/doc/net/minecraft/src/WidgetMulti.html +++ /dev/null @@ -1,457 +0,0 @@ - - - - - - -WidgetMulti - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetMulti

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetMulti
    -
    -
    -
    All Implemented Interfaces:
    java.lang.Runnable
    -
    -
    -
    -
    public class WidgetMulti
    extends WidgetSetting
    implements java.lang.Runnable
    - - -

    -This is the Widget for Multi settings. It uses a button to display to the - user, and cycles the values. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    - Buttonbutton - -
    -          The reference to the underlying Button.
    - SettingMultivalue - -
    -          The reference to the SettingMulti that this WidgetMulti uses.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetMulti(SettingMulti setting, - java.lang.String title) - -
    -          This creates a new WidgetMulti using the SettingMulti and String - provided.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidrun() - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, layout, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -button

    -
    -public Button button
    -
    -
    The reference to the underlying Button. -

    -

    -
    -
    -
    - -

    -value

    -
    -public SettingMulti value
    -
    -
    The reference to the SettingMulti that this WidgetMulti uses. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetMulti

    -
    -public WidgetMulti(SettingMulti setting,
    -                   java.lang.String title)
    -
    -
    This creates a new WidgetMulti using the SettingMulti and String - provided. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The title for this Widget. It is what will show on the button, - asides from it's current value.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -run

    -
    -public void run()
    -
    -
    -
    Specified by:
    run in interface java.lang.Runnable
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetSetting.html b/doc/net/minecraft/src/WidgetSetting.html deleted file mode 100644 index cdaf372..0000000 --- a/doc/net/minecraft/src/WidgetSetting.html +++ /dev/null @@ -1,455 +0,0 @@ - - - - - - -WidgetSetting - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetSetting

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -
    -
    -
    Direct Known Subclasses:
    WidgetBoolean, WidgetFloat, WidgetInt, WidgetKeybinding, WidgetMulti, WidgetText
    -
    -
    -
    -
    public abstract class WidgetSetting
    extends Widget
    - - -

    -This is the base class for Widgets that are supposed to be front ends for - Settings. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    -static java.util.ArrayList<WidgetSetting>all - -
    -          This is a list of all WidgetSetting instances.
    - java.lang.StringniceName - -
    -          The name that will be shown on the widget.
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetSetting(java.lang.String nicename) - -
    -          This sets the Nice Name and adds itself to the list of instances.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidadd(Widget child) - -
    -           
    -abstract  voidaddCallback(java.lang.Runnable paramRunnable) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - voidlayout() - -
    -           
    -abstract  voidremoveCallback(java.lang.Runnable paramRunnable) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    -abstract  voidupdate() - -
    -          This method updates the widget with the backing setting store.
    -static voidupdateAll() - -
    -          This updates all Widgets with the backing setting's current values.
    -abstract  java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -all

    -
    -public static java.util.ArrayList<WidgetSetting> all
    -
    -
    This is a list of all WidgetSetting instances. -

    -

    -
    -
    -
    - -

    -niceName

    -
    -public java.lang.String niceName
    -
    -
    The name that will be shown on the widget. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetSetting

    -
    -public WidgetSetting(java.lang.String nicename)
    -
    -
    This sets the Nice Name and adds itself to the list of instances. Note - this class is abstract, so you will not be using this constructor. -

    -

    -
    Parameters:
    nicename - The nice name for this WidgetSetting.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -updateAll

    -
    -public static void updateAll()
    -
    -
    This updates all Widgets with the backing setting's current values. -

    -

    -
    -
    -
    -
    - -

    -add

    -
    -public void add(Widget child)
    -
    -
    -
    -
    -
    -
    - -

    -addCallback

    -
    -public abstract void addCallback(java.lang.Runnable paramRunnable)
    -
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Parameters:
    paramRunnable - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    -
    -
    -
    - -

    -removeCallback

    -
    -public abstract void removeCallback(java.lang.Runnable paramRunnable)
    -
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Parameters:
    paramRunnable - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -update

    -
    -public abstract void update()
    -
    -
    This method updates the widget with the backing setting store. -

    -

    -
    -
    -
    -
    - -

    -userString

    -
    -public abstract java.lang.String userString()
    -
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetSimplewindow.html b/doc/net/minecraft/src/WidgetSimplewindow.html deleted file mode 100644 index e803e47..0000000 --- a/doc/net/minecraft/src/WidgetSimplewindow.html +++ /dev/null @@ -1,515 +0,0 @@ - - - - - - -WidgetSimplewindow - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetSimplewindow

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSimplewindow
    -
    -
    -
    -
    public class WidgetSimplewindow
    extends Widget
    - - -

    -This widget is designed to make an easy base for menus. It include a - ScrollPane for the main widget, a title bar on top, and a button to go back - to the previous menu. -

    - -

    -

    -
    Author:
    -
    lahwran, ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - ButtonbackButton - -
    -          This is a reference to the back button, if created.
    - WidgetSingleRowbuttonBar - -
    -          This is a reference to the row at the bottom that contains the back - button.
    - inthPadding - -
    -          This is the padding to use on each side of the main widget.
    - WidgetmainWidget - -
    -          This is a reference to the main widget in the center.
    - LabeltitleWidget - -
    -          This is a reference to the Label that acts as the title on top.
    - intvBottomPadding - -
    -          This is the padding on the bottom.
    - intvTopPadding - -
    -          This is the padding on the top.
    -  - - - - - - - - - - - - - - - - - - - -
    -Constructor Summary
    WidgetSimplewindow() - -
    -          This is a basic constructor.
    WidgetSimplewindow(Widget w) - -
    -          This is a basic constructor.
    WidgetSimplewindow(Widget w, - java.lang.String s) - -
    -          This is the most common constructor.
    WidgetSimplewindow(Widget w, - java.lang.String s, - java.lang.Boolean showbackButton) - -
    -          This is the more advanced constructor.
    -  - - - - - - - - - - - - - - - -
    -Method Summary
    -protected  voidinit(java.lang.Boolean showBack, - java.lang.String titleText) - -
    -          Initializes the WidgetSimplewindow's widgets.
    - voidlayout() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -backButton

    -
    -public Button backButton
    -
    -
    This is a reference to the back button, if created. -

    -

    -
    -
    -
    - -

    -buttonBar

    -
    -public WidgetSingleRow buttonBar
    -
    -
    This is a reference to the row at the bottom that contains the back - button. -

    -

    -
    -
    -
    - -

    -hPadding

    -
    -public int hPadding
    -
    -
    This is the padding to use on each side of the main widget. -

    -

    -
    -
    -
    - -

    -mainWidget

    -
    -public Widget mainWidget
    -
    -
    This is a reference to the main widget in the center. -

    -

    -
    -
    -
    - -

    -titleWidget

    -
    -public Label titleWidget
    -
    -
    This is a reference to the Label that acts as the title on top. -

    -

    -
    -
    -
    - -

    -vBottomPadding

    -
    -public int vBottomPadding
    -
    -
    This is the padding on the bottom. Generally, this is to keep room - between the bottom of the main widget's ScrollPane and the button bar. -

    -

    -
    -
    -
    - -

    -vTopPadding

    -
    -public int vTopPadding
    -
    -
    This is the padding on the top. Generally, this is to keep room between - the top of the main widget's ScrollPane and the Label. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetSimplewindow

    -
    -public WidgetSimplewindow()
    -
    -
    This is a basic constructor. It sets the title as an empty string and it - creates a new WidgetClassicTwocolumn for the main widget. -

    -

    -
    - -

    -WidgetSimplewindow

    -
    -public WidgetSimplewindow(Widget w)
    -
    -
    This is a basic constructor. It uses the passed widget as the main widget - and sets the title as an empty string. -

    -

    -
    Parameters:
    w - The widget to use in the center.
    -
    -
    - -

    -WidgetSimplewindow

    -
    -public WidgetSimplewindow(Widget w,
    -                          java.lang.String s)
    -
    -
    This is the most common constructor. This keeps everything default, - although you can pass null for the title and it will remove the title bar - for you. -

    -

    -
    Parameters:
    w - The widget to use in the center.
    s - The title to show on top. If null, the title bar will not be - created.
    -
    -
    - -

    -WidgetSimplewindow

    -
    -public WidgetSimplewindow(Widget w,
    -                          java.lang.String s,
    -                          java.lang.Boolean showbackButton)
    -
    -
    This is the more advanced constructor. This can also skip the back button - creation. -

    -

    -
    Parameters:
    w - The widget to use in the center.
    s - The title to show on top. If null, the title bar will not be - created.
    showbackButton -
    -
    - - - - - - - - -
    -Method Detail
    - -

    -init

    -
    -protected void init(java.lang.Boolean showBack,
    -                    java.lang.String titleText)
    -
    -
    Initializes the WidgetSimplewindow's widgets. This is used internally. -

    -

    -
    Parameters:
    showBack - Whether or not to show the back button.
    titleText - What to set the label text to. If null, it will not have a label.
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetSingleRow.html b/doc/net/minecraft/src/WidgetSingleRow.html deleted file mode 100644 index 4d96436..0000000 --- a/doc/net/minecraft/src/WidgetSingleRow.html +++ /dev/null @@ -1,524 +0,0 @@ - - - - - - -WidgetSingleRow - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetSingleRow

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSingleRow
    -
    -
    -
    -
    public class WidgetSingleRow
    extends Widget
    - - -

    -This is a layout widget designed to arrange your widgets in a row. It - specifies height and width for each widget when you add them. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - intdefaultHeight - -
    -          This is the default height of any new widgets.
    - intdefaultWidth - -
    -          This is the default width of any new widgets.
    -protected  java.util.ArrayList<java.lang.Integer>heights - -
    -           
    -protected  java.util.ArrayList<Widget>widgets - -
    -           
    -protected  java.util.ArrayList<java.lang.Integer>widths - -
    -           
    - intxSpacing - -
    -          This defines the space between child widgets.
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetSingleRow(int defwidth, - int defheight, - Widget... widgets) - -
    -          This creates a new WidgetSingleRow, specifying the default width and - height for any new widgets, as well as adding any widgets you would like - to add.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidadd(Widget widget) - -
    -           
    - voidadd(Widget widget, - int width, - int height) - -
    -          This adds a new Widget with specified width and height.
    - intgetPreferredHeight() - -
    -           
    - intgetPreferredWidth() - -
    -           
    - voidlayout() - -
    -           
    - WidgetremoveChild(int idx) - -
    -           
    - booleanremoveChild(Widget widget) - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -defaultHeight

    -
    -public int defaultHeight
    -
    -
    This is the default height of any new widgets. -

    -

    -
    -
    -
    - -

    -defaultWidth

    -
    -public int defaultWidth
    -
    -
    This is the default width of any new widgets. -

    -

    -
    -
    -
    - -

    -heights

    -
    -protected java.util.ArrayList<java.lang.Integer> heights
    -
    -
    -
    -
    -
    - -

    -widgets

    -
    -protected java.util.ArrayList<Widget> widgets
    -
    -
    -
    -
    -
    - -

    -widths

    -
    -protected java.util.ArrayList<java.lang.Integer> widths
    -
    -
    -
    -
    -
    - -

    -xSpacing

    -
    -public int xSpacing
    -
    -
    This defines the space between child widgets. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetSingleRow

    -
    -public WidgetSingleRow(int defwidth,
    -                       int defheight,
    -                       Widget... widgets)
    -
    -
    This creates a new WidgetSingleRow, specifying the default width and - height for any new widgets, as well as adding any widgets you would like - to add. -

    -

    -
    Parameters:
    defwidth - The default width to use for any new widgets.
    defheight - The default height to use for any new widgets.
    widgets - The widgets you are adding.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -add

    -
    -public void add(Widget widget)
    -
    -
    -
    -
    -
    -
    - -

    -add

    -
    -public void add(Widget widget,
    -                int width,
    -                int height)
    -
    -
    This adds a new Widget with specified width and height. -

    -

    -
    Parameters:
    widget - The widget you are adding.
    width - The width of the widget you are adding.
    height - The height of the widget you are adding.
    -
    -
    -
    - -

    -getPreferredHeight

    -
    -public int getPreferredHeight()
    -
    -
    -
    -
    -
    -
    - -

    -getPreferredWidth

    -
    -public int getPreferredWidth()
    -
    -
    -
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    -
    -
    -
    - -

    -removeChild

    -
    -public Widget removeChild(int idx)
    -
    -
    -
    -
    -
    -
    - -

    -removeChild

    -
    -public boolean removeChild(Widget widget)
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetSinglecolumn.html b/doc/net/minecraft/src/WidgetSinglecolumn.html deleted file mode 100644 index 1034274..0000000 --- a/doc/net/minecraft/src/WidgetSinglecolumn.html +++ /dev/null @@ -1,330 +0,0 @@ - - - - - - -WidgetSinglecolumn - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetSinglecolumn

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetClassicTwocolumn
    -          extended by net.minecraft.src.WidgetSinglecolumn
    -
    -
    -
    -
    public class WidgetSinglecolumn
    extends WidgetClassicTwocolumn
    - - -

    -This is a widget designed to arrange other widgets into a single column. -

    - -

    -

    -
    Author:
    -
    lahwran, ShaRose
    -
    -
    - -

    - - - - - - - -
    -Field Summary
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetClassicTwocolumn
    childDefaultHeight, childWidth, defaultPadding, heightOverrideExceptions, overrideHeight, splitDistance, verticalPadding
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetSinglecolumn(Widget... widgets) - -
    -          This creates the WidgetSinglecolumn with the specified Widgets.
    -  - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - intgetPreferredHeight() - -
    -           
    - intgetPreferredWidth() - -
    -           
    - voidlayout() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetSinglecolumn

    -
    -public WidgetSinglecolumn(Widget... widgets)
    -
    -
    This creates the WidgetSinglecolumn with the specified Widgets. It - chooses a default Width of 200. -

    -

    -
    Parameters:
    widgets - The widgets to add.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -getPreferredHeight

    -
    -public int getPreferredHeight()
    -
    -
    -
    Overrides:
    getPreferredHeight in class WidgetClassicTwocolumn
    -
    -
    -
    -
    -
    -
    - -

    -getPreferredWidth

    -
    -public int getPreferredWidth()
    -
    -
    -
    Overrides:
    getPreferredWidth in class WidgetClassicTwocolumn
    -
    -
    -
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    Overrides:
    layout in class WidgetClassicTwocolumn
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetSlider.html b/doc/net/minecraft/src/WidgetSlider.html deleted file mode 100644 index 1fa0afe..0000000 --- a/doc/net/minecraft/src/WidgetSlider.html +++ /dev/null @@ -1,265 +0,0 @@ - - - - - - -WidgetSlider - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetSlider

    -
    -java.lang.Object
    -  extended by ValueAdjusterFloat
    -      extended by net.minecraft.src.WidgetSlider
    -
    -
    -
    -
    public class WidgetSlider
    extends ValueAdjusterFloat
    - - -

    -This is a simple extension of ValueAdjusterFloat so that it always updates - the setting. Used internally. -

    - -

    -

    -
    Author:
    -
    lahwran
    -
    -
    - -

    - - - - - - - - - - - -
    -Constructor Summary
    WidgetSlider(FloatModel f) - -
    -          This is the basic constructor.
    -  - - - - - - - - - - - -
    -Method Summary
    - voidstartEdit() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetSlider

    -
    -public WidgetSlider(FloatModel f)
    -
    -
    This is the basic constructor. It just calls the ValueAdjusterFloat - constructor. -

    -

    -
    Parameters:
    f - The FloatModel to use.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -startEdit

    -
    -public void startEdit()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/WidgetText.html b/doc/net/minecraft/src/WidgetText.html deleted file mode 100644 index 6985789..0000000 --- a/doc/net/minecraft/src/WidgetText.html +++ /dev/null @@ -1,536 +0,0 @@ - - - - - - -WidgetText - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class WidgetText

    -
    -java.lang.Object
    -  extended by Widget
    -      extended by net.minecraft.src.WidgetSetting
    -          extended by net.minecraft.src.WidgetText
    -
    -
    -
    -
    public class WidgetText
    extends WidgetSetting
    - - -

    -This is the Widget for Text settings. It uses an EditField for the user to - edit, and a Label for the name. -

    - -

    -

    -
    Author:
    -
    lahwran, ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - LabeldisplayLabel - -
    -          The label that displays to the user what the nice name of this setting - is.
    - EditFieldeditField - -
    -          The EditField that the user actually changes the setting with.
    - intsetmode - -
    -          This is a control number to who and what can edit this setting.
    - SettingTextsettingReference - -
    -          The reference to the SettingText that this WidgetText uses.
    - - - - - - - -
    Fields inherited from class net.minecraft.src.WidgetSetting
    all, niceName
    -  - - - - - - - - - - -
    -Constructor Summary
    WidgetText(SettingText setting, - java.lang.String title) - -
    -          This creates a new WidgetText using the SettingText and String provided.
    -  - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Method Summary
    - voidaddCallback(java.lang.Runnable callback) - -
    -          This adds a callback to the displayed widget (Button, Slider, etc)
    - java.lang.StringgetValue() - -
    -           
    - voidlayout() - -
    -           
    - voidremoveCallback(java.lang.Runnable callback) - -
    -          This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up.
    - voidsetValue(java.lang.String _value) - -
    -           
    - voidupdate() - -
    -          This method updates the widget with the backing setting store.
    - java.lang.StringuserString() - -
    -          This returns a clean string that shows the Nice Name and the current - value.
    - - - - - - - -
    Methods inherited from class net.minecraft.src.WidgetSetting
    add, updateAll
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -displayLabel

    -
    -public Label displayLabel
    -
    -
    The label that displays to the user what the nice name of this setting - is. -

    -

    -
    -
    -
    - -

    -editField

    -
    -public EditField editField
    -
    -
    The EditField that the user actually changes the setting with. -

    -

    -
    -
    -
    - -

    -setmode

    -
    -public int setmode
    -
    -
    This is a control number to who and what can edit this setting. 0 means - that both the SettingText and the user can edit. Below 0 means that only - the user can edit: So resetting to default will not change the text the - user sees. Over 0 means that the user can't edit the field, but if the - SettingText updates, it will replace what the user sees. -

    -

    -
    -
    -
    - -

    -settingReference

    -
    -public SettingText settingReference
    -
    -
    The reference to the SettingText that this WidgetText uses. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -WidgetText

    -
    -public WidgetText(SettingText setting,
    -                  java.lang.String title)
    -
    -
    This creates a new WidgetText using the SettingText and String provided. -

    -

    -
    Parameters:
    setting - The backing setting.
    title - The text that will show on the Label. If null, it will not - have a label at all.
    -
    - - - - - - - - -
    -Method Detail
    - -

    -addCallback

    -
    -public void addCallback(java.lang.Runnable callback)
    -
    -
    Description copied from class: WidgetSetting
    -
    This adds a callback to the displayed widget (Button, Slider, etc) -

    -

    -
    Specified by:
    addCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    callback - The Runnable callback you wish to call if the value changes.
    -
    -
    -
    - -

    -getValue

    -
    -public java.lang.String getValue()
    -
    -
    -
    -
    -
    -
    - -

    -layout

    -
    -public void layout()
    -
    -
    -
    Overrides:
    layout in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -removeCallback

    -
    -public void removeCallback(java.lang.Runnable callback)
    -
    -
    Description copied from class: WidgetSetting
    -
    This removes a callback to the displayed widget (Button, Slider, etc) if - you previously set one up. -

    -

    -
    Specified by:
    removeCallback in class WidgetSetting
    -
    -
    -
    Parameters:
    callback - The Runnable callback you wish to remove.
    -
    -
    -
    - -

    -setValue

    -
    -public void setValue(java.lang.String _value)
    -
    -
    -
    -
    -
    -
    - -

    -update

    -
    -public void update()
    -
    -
    Description copied from class: WidgetSetting
    -
    This method updates the widget with the backing setting store. -

    -

    -
    Specified by:
    update in class WidgetSetting
    -
    -
    -
    -
    -
    -
    - -

    -userString

    -
    -public java.lang.String userString()
    -
    -
    Description copied from class: WidgetSetting
    -
    This returns a clean string that shows the Nice Name and the current - value. -

    -

    -
    Specified by:
    userString in class WidgetSetting
    -
    -
    - -
    Returns:
    A descriptor string.
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/GuiApiHelper.html b/doc/net/minecraft/src/class-use/GuiApiHelper.html deleted file mode 100644 index fbaa310..0000000 --- a/doc/net/minecraft/src/class-use/GuiApiHelper.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.GuiApiHelper - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.GuiApiHelper

    -
    - - - - - -
    -Uses of GuiApiHelper in net.minecraft.src
    -  -

    - - - - - - - - - -
    Methods in net.minecraft.src that return GuiApiHelper
    -static GuiApiHelperGuiApiHelper.createChoiceMenu(java.lang.String displayText) - -
    -          This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/GuiModScreen.html b/doc/net/minecraft/src/class-use/GuiModScreen.html deleted file mode 100644 index 5020e51..0000000 --- a/doc/net/minecraft/src/class-use/GuiModScreen.html +++ /dev/null @@ -1,198 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.GuiModScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.GuiModScreen

    -
    - - - - - -
    -Uses of GuiModScreen in net.minecraft.src
    -  -

    - - - - - - - - - -
    Subclasses of GuiModScreen in net.minecraft.src
    - classGuiModSelect - -
    -          This is a Subclass of GuiModScreen, and acts as the entry point from the - button in the options menu.
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as GuiModScreen
    -static GuiModScreenGuiModScreen.currentScreen - -
    -          Used by static methods.
    -  -

    - - - - - - - - - -
    Methods in net.minecraft.src with parameters of type GuiModScreen
    -static voidGuiModScreen.show(GuiModScreen screen) - -
    -          Show a screen - GuiModScreen version.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/GuiModSelect.html b/doc/net/minecraft/src/class-use/GuiModSelect.html deleted file mode 100644 index 423bb85..0000000 --- a/doc/net/minecraft/src/class-use/GuiModSelect.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.GuiModSelect - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.GuiModSelect

    -
    -No usage of net.minecraft.src.GuiModSelect -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/GuiOptions.html b/doc/net/minecraft/src/class-use/GuiOptions.html deleted file mode 100644 index 096463f..0000000 --- a/doc/net/minecraft/src/class-use/GuiOptions.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.GuiOptions - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.GuiOptions

    -
    -No usage of net.minecraft.src.GuiOptions -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/GuiWidgetScreen.html b/doc/net/minecraft/src/class-use/GuiWidgetScreen.html deleted file mode 100644 index 1b93862..0000000 --- a/doc/net/minecraft/src/class-use/GuiWidgetScreen.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.GuiWidgetScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.GuiWidgetScreen

    -
    - - - - - -
    -Uses of GuiWidgetScreen in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as GuiWidgetScreen
    -static GuiWidgetScreenGuiWidgetScreen.instance - -
    -          The initialized instance of GuiWidgetScreen.
    -  -

    - - - - - - - - - -
    Methods in net.minecraft.src that return GuiWidgetScreen
    -static GuiWidgetScreenGuiWidgetScreen.getInstance() - -
    -          get the instance of GuiWidget, creating it if needed
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/ModAction.html b/doc/net/minecraft/src/class-use/ModAction.html deleted file mode 100644 index 1d496d3..0000000 --- a/doc/net/minecraft/src/class-use/ModAction.html +++ /dev/null @@ -1,263 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.ModAction - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.ModAction

    -
    - - - - - -
    -Uses of ModAction in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as ModAction
    -static ModActionGuiApiHelper.backModAction - -
    -          This is a static ModAction to go back to the previous menu.
    -static ModActionGuiApiHelper.clickModAction - -
    -          This is a static ModAction to play the 'click' sound you usually hear - when pressing a button in minecraft.
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src with type parameters of type ModAction
    -protected  java.util.ArrayList<ModAction>ModAction.mergedActions - -
    -           
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return ModAction
    - ModActionModAction.mergeAction(ModAction newAction) - -
    -          This method merges ModActions together into one.
    - ModActionModAction.setDefaultArguments(java.lang.Object... Arguments) - -
    -          This sets the arguments to use if no or invalid arguments are provided.
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in net.minecraft.src with parameters of type ModAction
    - voidGuiApiHelper.addButton(java.lang.String text, - ModAction action, - java.lang.Boolean mergeBack) - -
    -          This method adds a button to the choice menu.
    -static WidgetGuiApiHelper.createChoiceMenu(java.lang.String displayText, - java.lang.Boolean showBackButton, - java.lang.Boolean autoBack, - java.lang.String[] buttonTexts, - ModAction[] buttonActions) - -
    -          This method is one of the overloads to create a choice menu, so the user - is presented a textbox and user configurable buttons beneath it.
    -static ButtonGuiApiHelper.makeButton(java.lang.String displayText, - ModAction action, - java.lang.Boolean addClick) - -
    -          This method creates a button widget for you.
    - ModActionModAction.mergeAction(ModAction newAction) - -
    -          This method merges ModActions together into one.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/ModSettingScreen.html b/doc/net/minecraft/src/class-use/ModSettingScreen.html deleted file mode 100644 index a6f56ff..0000000 --- a/doc/net/minecraft/src/class-use/ModSettingScreen.html +++ /dev/null @@ -1,307 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.ModSettingScreen - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.ModSettingScreen

    -
    - - - - - -
    -Uses of ModSettingScreen in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as ModSettingScreen
    - ModSettingScreenmod_GuiApiBasicExample.myModScreen - -
    -          The mod screen.
    - ModSettingScreenmod_GuiApiIntermediateExample.myModScreen - -
    -          The mod screen.
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src with type parameters of type ModSettingScreen
    -static java.util.ArrayList<ModSettingScreen>ModSettingScreen.modScreens - -
    -          The list of currently registered ModScreens.
    -  -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    Methods in net.minecraft.src with parameters of type ModSettingScreen
    - SettingBooleanModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value) - -
    -          convenience boolean setting adder
    - SettingBooleanModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value, - java.lang.String truestring, - java.lang.String falsestring) - -
    -          convenience boolean setting adder
    - SettingFloatModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value) - -
    -          convenience float setting adder
    - SettingFloatModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value, - float min, - float step, - float max) - -
    -          convenience float setting adder
    - SettingKeyModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value) - -
    -          convenience key setting adder
    - SettingIntModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int max) - -
    -          convenience int setting adder
    - SettingIntModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int step, - int max) - -
    -          convenience int setting adder
    - SettingMultiModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - java.lang.String... labels) - -
    -          convenience multi setting adder
    - SettingTextModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - java.lang.String value) - -
    -          convenience text setting adder
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/ModSettings.html b/doc/net/minecraft/src/class-use/ModSettings.html deleted file mode 100644 index 92e963d..0000000 --- a/doc/net/minecraft/src/class-use/ModSettings.html +++ /dev/null @@ -1,197 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.ModSettings - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.ModSettings

    -
    - - - - - -
    -Uses of ModSettings in net.minecraft.src
    -  -

    - - - - - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as ModSettings
    - ModSettingsmod_GuiApiBasicExample.mySettings - -
    -          The settings.
    - ModSettingsmod_GuiApiIntermediateExample.mySettings - -
    -          The settings.
    - ModSettingsSetting.parent - -
    -          Reference to the ModSettings this Setting is a child of.
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src with type parameters of type ModSettings
    -static java.util.ArrayList<ModSettings>ModSettings.all - -
    -          A list of all ModSettings instances.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/Setting.html b/doc/net/minecraft/src/class-use/Setting.html deleted file mode 100644 index 7aaa231..0000000 --- a/doc/net/minecraft/src/class-use/Setting.html +++ /dev/null @@ -1,189 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.Setting - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.Setting

    -
    - - - - - -
    -Uses of Setting in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src with type parameters of type Setting
    - java.util.ArrayList<Setting>ModSettings.Settings - -
    -          all registered settings for this mod
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src with parameters of type Setting
    - voidModSettings.append(Setting s) - -
    -          add a setting to be saved.
    - voidModSettings.remove(Setting s) - -
    -          removes a setting using ArrayList.remove
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingBoolean.html b/doc/net/minecraft/src/class-use/SettingBoolean.html deleted file mode 100644 index 01bf7c3..0000000 --- a/doc/net/minecraft/src/class-use/SettingBoolean.html +++ /dev/null @@ -1,287 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingBoolean - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingBoolean

    -
    - - - - - -
    -Uses of SettingBoolean in net.minecraft.src
    -  -

    - - - - - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingBoolean
    - SettingBooleanmod_GuiApiIntermediateExample.settingBooleanD - -
    -          The setting boolean d.
    - SettingBooleanmod_GuiApiIntermediateExample.settingBooleanE - -
    -          The setting boolean e.
    - SettingBooleanWidgetBoolean.settingReference - -
    -          The reference to the SettingBoolean that this WidgetBoolean uses.
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingBoolean
    - SettingBooleanModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value) - -
    -          convenience boolean setting adder
    - SettingBooleanModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - boolean value, - java.lang.String truestring, - java.lang.String falsestring) - -
    -          convenience boolean setting adder
    - SettingBooleanModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - boolean value) - -
    -          convenience boolean setting adder
    - SettingBooleanModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - boolean value, - java.lang.String truestring, - java.lang.String falsestring) - -
    -          convenience boolean setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingBoolean
    - java.util.ArrayList<SettingBoolean>ModSettings.getAllBooleanSettings() - -
    -          Get a list of all Boolean settings for the current context.
    - java.util.ArrayList<SettingBoolean>ModSettings.getAllBooleanSettings(java.lang.String context) - -
    -          Get a list of all Boolean settings for the specified context.
    -  -

    - - - - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingBoolean
    WidgetBoolean(SettingBoolean setting, - java.lang.String title) - -
    -          This creates a new WidgetBoolean using the SettingBoolean and String - provided.
    WidgetBoolean(SettingBoolean setting, - java.lang.String title, - java.lang.String truetext, - java.lang.String falsetext) - -
    -          This creates a new WidgetBoolean using the WidgetBoolean and String - provided, as well as setting the true and false text.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingFloat.html b/doc/net/minecraft/src/class-use/SettingFloat.html deleted file mode 100644 index f88d2cb..0000000 --- a/doc/net/minecraft/src/class-use/SettingFloat.html +++ /dev/null @@ -1,278 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingFloat - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingFloat

    -
    - - - - - -
    -Uses of SettingFloat in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingFloat
    - SettingFloatmod_GuiApiIntermediateExample.settingFloatB - -
    -          The setting float b.
    - SettingFloatWidgetFloat.settingReference - -
    -          The reference to the SettingInt that this WidgetInt uses.
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingFloat
    - SettingFloatModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value) - -
    -          convenience float setting adder
    - SettingFloatModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - float value, - float min, - float step, - float max) - -
    -          convenience float setting adder
    - SettingFloatModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - float value) - -
    -          convenience float setting adder
    - SettingFloatModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - float value, - float min, - float step, - float max) - -
    -          convenience float setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingFloat
    - java.util.ArrayList<SettingFloat>ModSettings.getAllFloatSettings() - -
    -          Get a list of all Float settings for the current context.
    - java.util.ArrayList<SettingFloat>ModSettings.getAllFloatSettings(java.lang.String context) - -
    -          Get a list of all Float settings for the specified context.
    -  -

    - - - - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingFloat
    WidgetFloat(SettingFloat setting, - java.lang.String title) - -
    -          This creates a new WidgetInt using the SettingInt and String provided.
    WidgetFloat(SettingFloat setting, - java.lang.String title, - int _decimalPlaces) - -
    -          This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingInt.html b/doc/net/minecraft/src/class-use/SettingInt.html deleted file mode 100644 index 32b7c90..0000000 --- a/doc/net/minecraft/src/class-use/SettingInt.html +++ /dev/null @@ -1,274 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingInt - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingInt

    -
    - - - - - -
    -Uses of SettingInt in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingInt
    - SettingIntmod_GuiApiIntermediateExample.settingIntA - -
    -          The setting int a.
    - SettingIntWidgetInt.settingReference - -
    -          The reference to the SettingInt that this WidgetInt uses.
    -  -

    - - - - - - - - - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingInt
    - SettingIntModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int max) - -
    -          convenience int setting adder
    - SettingIntModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int step, - int max) - -
    -          convenience int setting adder
    - SettingIntModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int max) - -
    -          convenience int setting adder
    - SettingIntModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - int min, - int step, - int max) - -
    -          convenience int setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingInt
    - java.util.ArrayList<SettingInt>ModSettings.getAllIntSettings() - -
    -          Get a list of all Int settings for the current context.
    - java.util.ArrayList<SettingInt>ModSettings.getAllIntSettings(java.lang.String context) - -
    -          Get a list of all Int settings for the specified context.
    -  -

    - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingInt
    WidgetInt(SettingInt setting, - java.lang.String title) - -
    -          This creates a new WidgetInt using the SettingInt and String provided.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingKey.html b/doc/net/minecraft/src/class-use/SettingKey.html deleted file mode 100644 index 575c841..0000000 --- a/doc/net/minecraft/src/class-use/SettingKey.html +++ /dev/null @@ -1,235 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingKey - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingKey

    -
    - - - - - -
    -Uses of SettingKey in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingKey
    - SettingKeyWidgetKeybinding.settingReference - -
    -          The reference to the SettingKey that this WidgetKeybinding uses.
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingKey
    - SettingKeyModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value) - -
    -          convenience key setting adder
    - SettingKeyModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value) - -
    -          convenience key setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingKey
    - java.util.ArrayList<SettingKey>ModSettings.getAllKeySettings() - -
    -          Get a list of all Key settings for the current context.
    - java.util.ArrayList<SettingKey>ModSettings.getAllKeySettings(java.lang.String context) - -
    -          Get a list of all Key settings for the specified context.
    -  -

    - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingKey
    WidgetKeybinding(SettingKey setting, - java.lang.String title) - -
    -          This creates a new WidgetKeybinding using the WidgetKeybinding and String - provided.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingMulti.html b/doc/net/minecraft/src/class-use/SettingMulti.html deleted file mode 100644 index 5f372f4..0000000 --- a/doc/net/minecraft/src/class-use/SettingMulti.html +++ /dev/null @@ -1,245 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingMulti - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingMulti

    -
    - - - - - -
    -Uses of SettingMulti in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingMulti
    - SettingMultimod_GuiApiIntermediateExample.settingMultiC - -
    -          The setting multi c.
    - SettingMultiWidgetMulti.value - -
    -          The reference to the SettingMulti that this WidgetMulti uses.
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingMulti
    - SettingMultiModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - int value, - java.lang.String... labels) - -
    -          convenience multi setting adder
    - SettingMultiModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - int value, - java.lang.String... labels) - -
    -          convenience multi setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingMulti
    - java.util.ArrayList<SettingMulti>ModSettings.getAllMultiSettings() - -
    -          Get a list of all Multi settings for the current context.
    - java.util.ArrayList<SettingMulti>ModSettings.getAllMultiSettings(java.lang.String context) - -
    -          Get a list of all Multi settings for the specified context.
    -  -

    - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingMulti
    WidgetMulti(SettingMulti setting, - java.lang.String title) - -
    -          This creates a new WidgetMulti using the SettingMulti and String - provided.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/SettingText.html b/doc/net/minecraft/src/class-use/SettingText.html deleted file mode 100644 index 7336800..0000000 --- a/doc/net/minecraft/src/class-use/SettingText.html +++ /dev/null @@ -1,242 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.SettingText - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.SettingText

    -
    - - - - - -
    -Uses of SettingText in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as SettingText
    - SettingTextWidgetText.settingReference - -
    -          The reference to the SettingText that this WidgetText uses.
    - SettingTextmod_GuiApiIntermediateExample.settingTextF - -
    -          The setting text f.
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return SettingText
    - SettingTextModSettings.addSetting(ModSettingScreen screen, - java.lang.String nicename, - java.lang.String backendname, - java.lang.String value) - -
    -          convenience text setting adder
    - SettingTextModSettings.addSetting(Widget w2, - java.lang.String nicename, - java.lang.String backendname, - java.lang.String value) - -
    -          convenience text setting adder
    -  -

    - - - - - - - - - - - - - -
    Methods in net.minecraft.src that return types with arguments of type SettingText
    - java.util.ArrayList<SettingText>ModSettings.getAllTextSettings() - -
    -          Get a list of all Text settings for the current context.
    - java.util.ArrayList<SettingText>ModSettings.getAllTextSettings(java.lang.String context) - -
    -          Get a list of all Text settings for the specified context.
    -  -

    - - - - - - - - -
    Constructors in net.minecraft.src with parameters of type SettingText
    WidgetText(SettingText setting, - java.lang.String title) - -
    -          This creates a new WidgetText using the SettingText and String provided.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetBoolean.html b/doc/net/minecraft/src/class-use/WidgetBoolean.html deleted file mode 100644 index d9ff02f..0000000 --- a/doc/net/minecraft/src/class-use/WidgetBoolean.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetBoolean - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetBoolean

    -
    -No usage of net.minecraft.src.WidgetBoolean -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html b/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html deleted file mode 100644 index a7fe241..0000000 --- a/doc/net/minecraft/src/class-use/WidgetClassicTwocolumn.html +++ /dev/null @@ -1,165 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetClassicTwocolumn - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetClassicTwocolumn

    -
    - - - - - -
    -Uses of WidgetClassicTwocolumn in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as WidgetClassicTwocolumn
    - WidgetClassicTwocolumnModSettingScreen.widgetColumn - -
    -          the column widget to show the child widgets in
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetFloat.html b/doc/net/minecraft/src/class-use/WidgetFloat.html deleted file mode 100644 index 86e63fb..0000000 --- a/doc/net/minecraft/src/class-use/WidgetFloat.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetFloat - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetFloat

    -
    -No usage of net.minecraft.src.WidgetFloat -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetInt.html b/doc/net/minecraft/src/class-use/WidgetInt.html deleted file mode 100644 index f9a244c..0000000 --- a/doc/net/minecraft/src/class-use/WidgetInt.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetInt - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetInt

    -
    -No usage of net.minecraft.src.WidgetInt -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetKeybinding.html b/doc/net/minecraft/src/class-use/WidgetKeybinding.html deleted file mode 100644 index 3c5a853..0000000 --- a/doc/net/minecraft/src/class-use/WidgetKeybinding.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetKeybinding - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetKeybinding

    -
    -No usage of net.minecraft.src.WidgetKeybinding -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetMulti.html b/doc/net/minecraft/src/class-use/WidgetMulti.html deleted file mode 100644 index a41ceb1..0000000 --- a/doc/net/minecraft/src/class-use/WidgetMulti.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetMulti - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetMulti

    -
    -No usage of net.minecraft.src.WidgetMulti -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetSetting.html b/doc/net/minecraft/src/class-use/WidgetSetting.html deleted file mode 100644 index 98a9ea4..0000000 --- a/doc/net/minecraft/src/class-use/WidgetSetting.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetSetting - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetSetting

    -
    - - - - - -
    -Uses of WidgetSetting in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as WidgetSetting
    - WidgetSettingSetting.displayWidget - -
    -          A reference to the Widget that displays this setting.
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src with type parameters of type WidgetSetting
    -static java.util.ArrayList<WidgetSetting>WidgetSetting.all - -
    -          This is a list of all WidgetSetting instances.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetSimplewindow.html b/doc/net/minecraft/src/class-use/WidgetSimplewindow.html deleted file mode 100644 index 8f222dd..0000000 --- a/doc/net/minecraft/src/class-use/WidgetSimplewindow.html +++ /dev/null @@ -1,181 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetSimplewindow - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetSimplewindow

    -
    - - - - - -
    -Uses of WidgetSimplewindow in net.minecraft.src
    -  -

    - - - - - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as WidgetSimplewindow
    - WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenBooleans - -
    -          The subscreen for booleans.
    - WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenNumberics - -
    -          The subscreen for numberics.
    - WidgetSimplewindowmod_GuiApiIntermediateExample.subscreenOthers - -
    -          The subscreen for others.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetSingleRow.html b/doc/net/minecraft/src/class-use/WidgetSingleRow.html deleted file mode 100644 index d4fe6f2..0000000 --- a/doc/net/minecraft/src/class-use/WidgetSingleRow.html +++ /dev/null @@ -1,166 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetSingleRow - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetSingleRow

    -
    - - - - - -
    -Uses of WidgetSingleRow in net.minecraft.src
    -  -

    - - - - - - - - - -
    Fields in net.minecraft.src declared as WidgetSingleRow
    - WidgetSingleRowWidgetSimplewindow.buttonBar - -
    -          This is a reference to the row at the bottom that contains the back - button.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html b/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html deleted file mode 100644 index 1670cda..0000000 --- a/doc/net/minecraft/src/class-use/WidgetSinglecolumn.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetSinglecolumn - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetSinglecolumn

    -
    -No usage of net.minecraft.src.WidgetSinglecolumn -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetSlider.html b/doc/net/minecraft/src/class-use/WidgetSlider.html deleted file mode 100644 index 1ce1fed..0000000 --- a/doc/net/minecraft/src/class-use/WidgetSlider.html +++ /dev/null @@ -1,173 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetSlider - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetSlider

    -
    - - - - - -
    -Uses of WidgetSlider in net.minecraft.src
    -  -

    - - - - - - - - - - - - - -
    Fields in net.minecraft.src declared as WidgetSlider
    - WidgetSliderWidgetFloat.slider - -
    -          The reference to the underlying WidgetSlider.
    - WidgetSliderWidgetInt.slider - -
    -          The reference to the underlying WidgetSlider.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/WidgetText.html b/doc/net/minecraft/src/class-use/WidgetText.html deleted file mode 100644 index 9dfc77d..0000000 --- a/doc/net/minecraft/src/class-use/WidgetText.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.WidgetText - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.WidgetText

    -
    -No usage of net.minecraft.src.WidgetText -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html deleted file mode 100644 index 6e5bdfb..0000000 --- a/doc/net/minecraft/src/class-use/mod_GuiApiBasicExample.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.mod_GuiApiBasicExample - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.mod_GuiApiBasicExample

    -
    -No usage of net.minecraft.src.mod_GuiApiBasicExample -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html deleted file mode 100644 index 3b2dbc5..0000000 --- a/doc/net/minecraft/src/class-use/mod_GuiApiIntermediateExample.html +++ /dev/null @@ -1,142 +0,0 @@ - - - - - - -Uses of Class net.minecraft.src.mod_GuiApiIntermediateExample - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Class
    net.minecraft.src.mod_GuiApiIntermediateExample

    -
    -No usage of net.minecraft.src.mod_GuiApiIntermediateExample -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/mod_GuiApiBasicExample.html b/doc/net/minecraft/src/mod_GuiApiBasicExample.html deleted file mode 100644 index 1f24313..0000000 --- a/doc/net/minecraft/src/mod_GuiApiBasicExample.html +++ /dev/null @@ -1,349 +0,0 @@ - - - - - - -mod_GuiApiBasicExample - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class mod_GuiApiBasicExample

    -
    -java.lang.Object
    -  extended by BaseMod
    -      extended by net.minecraft.src.mod_GuiApiBasicExample
    -
    -
    -
    -
    public class mod_GuiApiBasicExample
    extends BaseMod
    - - -

    -This is the BASIC example of GuiAPI usage. We are going to create a - ModSettings object, and use the 'easy' way of getting settings. Note, the - easy was is slower than the intermediate way of doing things, so if you are - getting your setting values several times a second you might want to read - that after this tutorial. As well, this tutorial will show you some usage of - the 'makeButton' and 'showTextDisplay' method in the GuiApiHelper class. -

    - -

    -

    -
    Author:
    -
    ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - -
    -Field Summary
    - ModSettingScreenmyModScreen - -
    -          The mod screen.
    - ModSettingsmySettings - -
    -          The settings.
    -  - - - - - - - - - - -
    -Constructor Summary
    mod_GuiApiBasicExample() - -
    -          Instantiates a new mod_GuiApiBasicExample.
    -  - - - - - - - - - - - - - - - -
    -Method Summary
    - voidShowAllTheSettings() - -
    -          This is the method that will be called if you press the - "Display Settings" button.
    - java.lang.StringVersion() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -myModScreen

    -
    -public ModSettingScreen myModScreen
    -
    -
    The mod screen. -

    -

    -
    -
    -
    - -

    -mySettings

    -
    -public ModSettings mySettings
    -
    -
    The settings. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -mod_GuiApiBasicExample

    -
    -public mod_GuiApiBasicExample()
    -
    -
    Instantiates a new mod_GuiApiBasicExample. -

    -

    - - - - - - - - -
    -Method Detail
    - -

    -ShowAllTheSettings

    -
    -public void ShowAllTheSettings()
    -
    -
    This is the method that will be called if you press the - "Display Settings" button. It doesn't have to be public, so you can make - this private and it will work. However, since we are calling this from a - button, it needs to return void. -

    -

    -
    -
    -
    -
    - -

    -Version

    -
    -public java.lang.String Version()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html b/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html deleted file mode 100644 index 5ca203f..0000000 --- a/doc/net/minecraft/src/mod_GuiApiIntermediateExample.html +++ /dev/null @@ -1,504 +0,0 @@ - - - - - - -mod_GuiApiIntermediateExample - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - -

    - -net.minecraft.src -
    -Class mod_GuiApiIntermediateExample

    -
    -java.lang.Object
    -  extended by BaseMod
    -      extended by net.minecraft.src.mod_GuiApiIntermediateExample
    -
    -
    -
    -
    public class mod_GuiApiIntermediateExample
    extends BaseMod
    - - -

    -This is the INTERMEDIATE example of GuiAPI usage. We are going to do the more - correct, but slightly more complex, way of retrieving settings, learn about - Callback usage within GuiAPI, and some more interesting usages of ModAction - relating to that. We will also learn about subscreens and how to use them - within your mod. We'll also be looking at the createChoiceMenu method in - GuiApiHelper. -

    - -

    -

    -
    Author:
    -
    ShaRose
    -
    -
    - -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Field Summary
    - ModSettingScreenmyModScreen - -
    -          The mod screen.
    - ModSettingsmySettings - -
    -          The settings.
    - SettingBooleansettingBooleanD - -
    -          The setting boolean d.
    - SettingBooleansettingBooleanE - -
    -          The setting boolean e.
    - SettingFloatsettingFloatB - -
    -          The setting float b.
    - SettingIntsettingIntA - -
    -          The setting int a.
    - SettingMultisettingMultiC - -
    -          The setting multi c.
    - SettingTextsettingTextF - -
    -          The setting text f.
    - WidgetSimplewindowsubscreenBooleans - -
    -          The subscreen for booleans.
    - WidgetSimplewindowsubscreenNumberics - -
    -          The subscreen for numberics.
    - WidgetSimplewindowsubscreenOthers - -
    -          The subscreen for others.
    -  - - - - - - - - - - -
    -Constructor Summary
    mod_GuiApiIntermediateExample() - -
    -          Instantiates a new mod_GuiApiIntermediateExample.
    -  - - - - - - - - - - - -
    -Method Summary
    - java.lang.StringVersion() - -
    -           
    - - - - - - - -
    Methods inherited from class java.lang.Object
    clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
    -  -

    - - - - - - - - -
    -Field Detail
    - -

    -myModScreen

    -
    -public ModSettingScreen myModScreen
    -
    -
    The mod screen. -

    -

    -
    -
    -
    - -

    -mySettings

    -
    -public ModSettings mySettings
    -
    -
    The settings. -

    -

    -
    -
    -
    - -

    -settingBooleanD

    -
    -public SettingBoolean settingBooleanD
    -
    -
    The setting boolean d. -

    -

    -
    -
    -
    - -

    -settingBooleanE

    -
    -public SettingBoolean settingBooleanE
    -
    -
    The setting boolean e. -

    -

    -
    -
    -
    - -

    -settingFloatB

    -
    -public SettingFloat settingFloatB
    -
    -
    The setting float b. -

    -

    -
    -
    -
    - -

    -settingIntA

    -
    -public SettingInt settingIntA
    -
    -
    The setting int a. -

    -

    -
    -
    -
    - -

    -settingMultiC

    -
    -public SettingMulti settingMultiC
    -
    -
    The setting multi c. -

    -

    -
    -
    -
    - -

    -settingTextF

    -
    -public SettingText settingTextF
    -
    -
    The setting text f. -

    -

    -
    -
    -
    - -

    -subscreenBooleans

    -
    -public WidgetSimplewindow subscreenBooleans
    -
    -
    The subscreen for booleans. -

    -

    -
    -
    -
    - -

    -subscreenNumberics

    -
    -public WidgetSimplewindow subscreenNumberics
    -
    -
    The subscreen for numberics. -

    -

    -
    -
    -
    - -

    -subscreenOthers

    -
    -public WidgetSimplewindow subscreenOthers
    -
    -
    The subscreen for others. -

    -

    -
    -
    - - - - - - - - -
    -Constructor Detail
    - -

    -mod_GuiApiIntermediateExample

    -
    -public mod_GuiApiIntermediateExample()
    -
    -
    Instantiates a new mod_GuiApiIntermediateExample. -

    -

    - - - - - - - - -
    -Method Detail
    - -

    -Version

    -
    -public java.lang.String Version()
    -
    -
    -
    -
    -
    - -
    - - - - - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/package-frame.html b/doc/net/minecraft/src/package-frame.html deleted file mode 100644 index 20867e3..0000000 --- a/doc/net/minecraft/src/package-frame.html +++ /dev/null @@ -1,86 +0,0 @@ - - - - - - -net.minecraft.src - - - - - - - - - - - -net.minecraft.src - - - - -
    -Classes  - -
    -GuiApiHelper -
    -GuiModScreen -
    -GuiModSelect -
    -GuiWidgetScreen -
    -mod_GuiApiBasicExample -
    -mod_GuiApiIntermediateExample -
    -ModAction -
    -ModSettings -
    -ModSettingScreen -
    -Setting -
    -SettingBoolean -
    -SettingFloat -
    -SettingInt -
    -SettingKey -
    -SettingMulti -
    -SettingText -
    -WidgetBoolean -
    -WidgetClassicTwocolumn -
    -WidgetFloat -
    -WidgetInt -
    -WidgetKeybinding -
    -WidgetMulti -
    -WidgetSetting -
    -WidgetSimplewindow -
    -WidgetSinglecolumn -
    -WidgetSingleRow -
    -WidgetSlider -
    -WidgetText
    - - - - diff --git a/doc/net/minecraft/src/package-summary.html b/doc/net/minecraft/src/package-summary.html deleted file mode 100644 index ff9e5a2..0000000 --- a/doc/net/minecraft/src/package-summary.html +++ /dev/null @@ -1,267 +0,0 @@ - - - - - - -net.minecraft.src - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -

    -Package net.minecraft.src -

    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Class Summary
    GuiApiHelperThis is just a class for helping ease common and somewhat long operations - with GuiAPI.
    GuiModScreenGuiModScreen is the minecraft screen subclass that controls and renders TWL.
    GuiModSelectThis is a Subclass of GuiModScreen, and acts as the entry point from the - button in the options menu.
    GuiWidgetScreenTWL Widget that switches out child widgets.
    mod_GuiApiBasicExampleThis is the BASIC example of GuiAPI usage.
    mod_GuiApiIntermediateExampleThis is the INTERMEDIATE example of GuiAPI usage.
    ModActionThis class is a helper designed to make it easier to use callbacks.
    ModSettingsMain interface class for Settings API
    ModSettingScreenThis is the class that GuiModSelect uses to show Subscreens.
    Setting<T>This is the base class for Settings.
    SettingBooleanThis is the Setting type for Booleans.
    SettingFloatThis is the Setting type for Floats.
    SettingIntThis is the Setting type for Ints.
    SettingKeyThis is the Setting type for Keys.
    SettingMultiThis is the Setting type for Multis.
    SettingTextThis is the Setting type for Text.
    WidgetBooleanThis is the Widget for boolean settings.
    WidgetClassicTwocolumnThis widget is designed to arrange widgets into two columns.
    WidgetFloatThis is the Widget for Float settings.
    WidgetIntThis is the Widget for Integer settings.
    WidgetKeybindingThis is the Widget for Key binding settings.
    WidgetMultiThis is the Widget for Multi settings.
    WidgetSettingThis is the base class for Widgets that are supposed to be front ends for - Settings.
    WidgetSimplewindowThis widget is designed to make an easy base for menus.
    WidgetSinglecolumnThis is a widget designed to arrange other widgets into a single column.
    WidgetSingleRowThis is a layout widget designed to arrange your widgets in a row.
    WidgetSliderThis is a simple extension of ValueAdjusterFloat so that it always updates - the setting.
    WidgetTextThis is the Widget for Text settings.
    -  - -

    -

    -
    -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/package-tree.html b/doc/net/minecraft/src/package-tree.html deleted file mode 100644 index 8b56730..0000000 --- a/doc/net/minecraft/src/package-tree.html +++ /dev/null @@ -1,182 +0,0 @@ - - - - - - -net.minecraft.src Class Hierarchy - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Hierarchy For Package net.minecraft.src -

    -
    -

    -Class Hierarchy -

    - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/net/minecraft/src/package-use.html b/doc/net/minecraft/src/package-use.html deleted file mode 100644 index 1840f0c..0000000 --- a/doc/net/minecraft/src/package-use.html +++ /dev/null @@ -1,260 +0,0 @@ - - - - - - -Uses of Package net.minecraft.src - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Uses of Package
    net.minecraft.src

    -
    - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
    -Classes in net.minecraft.src used by net.minecraft.src
    GuiApiHelper - -
    -          This is just a class for helping ease common and somewhat long operations - with GuiAPI.
    GuiModScreen - -
    -          GuiModScreen is the minecraft screen subclass that controls and renders TWL.
    GuiWidgetScreen - -
    -          TWL Widget that switches out child widgets.
    ModAction - -
    -          This class is a helper designed to make it easier to use callbacks.
    ModSettings - -
    -          Main interface class for Settings API
    ModSettingScreen - -
    -          This is the class that GuiModSelect uses to show Subscreens.
    Setting - -
    -          This is the base class for Settings.
    SettingBoolean - -
    -          This is the Setting type for Booleans.
    SettingFloat - -
    -          This is the Setting type for Floats.
    SettingInt - -
    -          This is the Setting type for Ints.
    SettingKey - -
    -          This is the Setting type for Keys.
    SettingMulti - -
    -          This is the Setting type for Multis.
    SettingText - -
    -          This is the Setting type for Text.
    WidgetClassicTwocolumn - -
    -          This widget is designed to arrange widgets into two columns.
    WidgetSetting - -
    -          This is the base class for Widgets that are supposed to be front ends for - Settings.
    WidgetSimplewindow - -
    -          This widget is designed to make an easy base for menus.
    WidgetSingleRow - -
    -          This is a layout widget designed to arrange your widgets in a row.
    WidgetSlider - -
    -          This is a simple extension of ValueAdjusterFloat so that it always updates - the setting.
    -  -

    -


    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/overview-tree.html b/doc/overview-tree.html deleted file mode 100644 index 7534da9..0000000 --- a/doc/overview-tree.html +++ /dev/null @@ -1,184 +0,0 @@ - - - - - - -Class Hierarchy - - - - - - - - - - - - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    -
    -

    -Hierarchy For All Packages

    -
    -
    -
    Package Hierarchies:
    net.minecraft.src
    -
    -

    -Class Hierarchy -

    - -
    - - - - - - - - - - - - - - - -
    - -
    - - - -
    - - - diff --git a/doc/package-list b/doc/package-list deleted file mode 100644 index 66d9a78..0000000 --- a/doc/package-list +++ /dev/null @@ -1 +0,0 @@ -net.minecraft.src diff --git a/doc/resources/inherit.gif b/doc/resources/inherit.gif deleted file mode 100644 index c814867a13deb0ca7ea2156c6ca1d5a03372af7e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 57 zcmZ?wbhEHbIIT!9-C*e{wE9>Kx3D)-;0v)C; KYxQGgum%9JOA&7X diff --git a/doc/stylesheet.css b/doc/stylesheet.css deleted file mode 100644 index 6ea9e51..0000000 --- a/doc/stylesheet.css +++ /dev/null @@ -1,29 +0,0 @@ -/* Javadoc style sheet */ - -/* Define colors, fonts and other style attributes here to override the defaults */ - -/* Page background color */ -body { background-color: #FFFFFF; color:#000000 } - -/* Headings */ -h1 { font-size: 145% } - -/* Table colors */ -.TableHeadingColor { background: #CCCCFF; color:#000000 } /* Dark mauve */ -.TableSubHeadingColor { background: #EEEEFF; color:#000000 } /* Light mauve */ -.TableRowColor { background: #FFFFFF; color:#000000 } /* White */ - -/* Font used in left-hand frame lists */ -.FrameTitleFont { font-size: 100%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameHeadingFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } -.FrameItemFont { font-size: 90%; font-family: Helvetica, Arial, sans-serif; color:#000000 } - -/* Navigation bar fonts and colors */ -.NavBarCell1 { background-color:#EEEEFF; color:#000000} /* Light mauve */ -.NavBarCell1Rev { background-color:#00008B; color:#FFFFFF} /* Dark Blue */ -.NavBarFont1 { font-family: Arial, Helvetica, sans-serif; color:#000000;color:#000000;} -.NavBarFont1Rev { font-family: Arial, Helvetica, sans-serif; color:#FFFFFF;color:#FFFFFF;} - -.NavBarCell2 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} -.NavBarCell3 { font-family: Arial, Helvetica, sans-serif; background-color:#FFFFFF; color:#000000} - diff --git a/javadoc.xml b/javadoc.xml deleted file mode 100644 index f0445b6..0000000 --- a/javadoc.xml +++ /dev/null @@ -1,6 +0,0 @@ - - - - - - diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/WidgetClassicTwocolumn.java index 69f1ea8..eeb4d00 100644 --- a/mcp/WidgetClassicTwocolumn.java +++ b/mcp/WidgetClassicTwocolumn.java @@ -29,11 +29,13 @@ public class WidgetClassicTwocolumn extends Widget public int defaultPadding = 4; /** * This is a map to override the heights of specific widgets. It is an - * override to overrideHeight. If you set the Integer as below 1, it will - * use what the widget wants as it's height. If you set anything else, it - * will use that height. Note that with TwoColumn widgets it will try and - * keep the height the same between two widgets opposite each other, so the - * one with the biggest height will override the other. + * override to overrideHeight. If you set the Integer as 0, it will use what + * the widget wants as it's height. If it is set negative, it will keep the + * positive part as the minimum size, but if the widget wants to grow it + * can. If you set anything else, it will use that height. Note that with + * TwoColumn widgets it will try and keep the height the same between two + * widgets opposite each other, so the one with the biggest height will + * override the other. */ public Map heightOverrideExceptions = new HashMap(); /** @@ -83,11 +85,12 @@ public int getPreferredHeight() if (heightOverrideExceptions.containsKey(w)) { Integer heightSet = heightOverrideExceptions.get(w); - if (heightSet == 0) + if (heightSet < 1) { height = w.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } @@ -102,11 +105,12 @@ public int getPreferredHeight() if (heightOverrideExceptions.containsKey(w2)) { Integer heightSet = heightOverrideExceptions.get(w2); - if (heightSet == 0) + if (heightSet < 1) { - height = w.getPreferredHeight(); + height = w2.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } @@ -155,11 +159,13 @@ public void layout() if (heightOverrideExceptions.containsKey(w)) { Integer heightSet = heightOverrideExceptions.get(w); - if (heightSet == 0) + + if (heightSet < 1) { height = w.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } @@ -174,11 +180,12 @@ public void layout() if (heightOverrideExceptions.containsKey(w2)) { Integer heightSet = heightOverrideExceptions.get(w2); - if (heightSet == 0) + if (heightSet < 1) { - height = w.getPreferredHeight(); + height = w2.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } diff --git a/mcp/WidgetSinglecolumn.java b/mcp/WidgetSinglecolumn.java index 2657ad9..6370891 100644 --- a/mcp/WidgetSinglecolumn.java +++ b/mcp/WidgetSinglecolumn.java @@ -39,11 +39,12 @@ public int getPreferredHeight() if (heightOverrideExceptions.containsKey(widget)) { Integer heightSet = heightOverrideExceptions.get(widget); - if (heightSet == 0) + if (heightSet < 1) { height = widget.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } @@ -74,11 +75,12 @@ public void layout() if (heightOverrideExceptions.containsKey(w)) { Integer heightSet = heightOverrideExceptions.get(w); - if (heightSet == 0) + if (heightSet < 1) { height = w.getPreferredHeight(); } - else + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) { height = heightSet; } diff --git a/mcp/WidgetText.java b/mcp/WidgetText.java index 8b1ab70..43fb56b 100644 --- a/mcp/WidgetText.java +++ b/mcp/WidgetText.java @@ -55,7 +55,7 @@ public WidgetText(SettingText setting, String title) settingReference.displayWidget = this; editField = new EditField(); add(editField); - if (title == null) + if (title != null) { displayLabel = new Label(); displayLabel.setText(String.format("%s: ", niceName)); From aa962ac38173e1fdf02022c63e708f87eab8400a Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 9 Sep 2011 21:00:02 -0230 Subject: [PATCH 05/49] Updated the binaries. --- bin/GuiModScreen.class | Bin 2477 -> 2586 bytes bin/GuiModSelect.class | Bin 1555 -> 1900 bytes bin/GuiWidgetScreen.class | Bin 3237 -> 3347 bytes bin/ModAction.class | Bin 4602 -> 5927 bytes bin/ModCallback.class | Bin 1093 -> 0 bytes bin/ModSettingScreen.class | Bin 1764 -> 2571 bytes bin/ModSettings.class | Bin 11210 -> 19538 bytes bin/ScreenScaleProxy.class | Bin 459 -> 0 bytes bin/Setting.class | Bin 1907 -> 1954 bytes bin/SettingBoolean.class | Bin 2152 -> 2255 bytes bin/SettingFloat.class | Bin 2784 -> 2979 bytes bin/SettingInt.class | Bin 2941 -> 3079 bytes bin/SettingKey.class | Bin 2708 -> 2812 bytes bin/SettingMulti.class | Bin 3394 -> 3503 bytes bin/SettingText.class | Bin 1702 -> 1806 bytes bin/Subscreen.class | Bin 1983 -> 0 bytes bin/WidgetBoolean.class | Bin 2458 -> 2910 bytes bin/WidgetClassicTwocolumn.class | Bin 1702 -> 3343 bytes bin/WidgetClassicWindow.class | Bin 688 -> 0 bytes bin/WidgetFloat.class | Bin 2763 -> 2965 bytes bin/WidgetInt.class | Bin 2720 -> 2855 bytes bin/WidgetKeybinding.class | Bin 2618 -> 2945 bytes bin/WidgetMulti.class | Bin 1935 -> 2343 bytes bin/WidgetSetting.class | Bin 1852 -> 1968 bytes bin/WidgetSimplewindow.class | Bin 2804 -> 3272 bytes bin/WidgetSingleRow.class | Bin 3133 -> 3063 bytes bin/WidgetSinglecolumn.class | Bin 1365 -> 2118 bytes bin/WidgetSlider.class | Bin 487 -> 499 bytes bin/WidgetText.class | Bin 2935 -> 3353 bytes bin/ch.class | Bin 2842 -> 0 bytes bin/oa.class | Bin 2864 -> 0 bytes bin/qp.class | Bin 5426 -> 0 bytes bin/uq.class | Bin 2742 -> 0 bytes 33 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 bin/ModCallback.class delete mode 100644 bin/ScreenScaleProxy.class delete mode 100644 bin/Subscreen.class delete mode 100644 bin/WidgetClassicWindow.class delete mode 100644 bin/ch.class delete mode 100644 bin/oa.class delete mode 100644 bin/qp.class delete mode 100644 bin/uq.class diff --git a/bin/GuiModScreen.class b/bin/GuiModScreen.class index 9f685efbf30720b5430152f239a73fa65777ee43..9149f7b3a4a2bf80ec18ba64a019e4b17e7621a0 100644 GIT binary patch literal 2586 zcmah~+jA3j7(Kr<$&z&2Lb-}aBcfB6+a7rqK1 zfFoffFeuj1FkZo{8eR)?axBD2av6rgIF4aiIU&RAVLXkKa{81EZ^-bbY@C+ituWrk znGgpfj1iE4ETfP$Y&+&mWnw4X z-ChNK+*k;y`W5_wsZbMX8|LI-E=|~mgk_sYi`fw~KV*z#xYC%&rHst5k+)=CT2xtu z)`V?3u`JK0^2S*wmdaT4IW|~cAZcCFA;q9E?q1W7r_Vf=8Y@U3BrTlFO)-|U3c*4t z*o~2;0ufh(do9~?_VL~ULNML}%~M=2r$QN=MB?#&H?T<~zm4bk=<*)h6}lGXV1m+S z-pt1`Q|CuBvBZhP1Bqj$HAW*4JNQUUOq6EbZfz8^6e^g`{*+@)(hetc#eB-_wDC&sdCKIEh54TyRg{O7AjCLJ+Fv*R)VW)H14mW!m zX5{>oj@`JUV+U@D#iP$)i;iye>Ub8<>6n(a3wTGvM>^icdpa)RvW6=p!Z#qpZhWlcBDQGwRL6B$xgq4A%kTwu@n)Ju*|4-?6lx_^ zrsG)lD2p1Rum@9?U7)--McV#fZ~nwgj-^=}Nl2n&8N(ipC7nFcdiz~5D2txVVnjLY*I|>w&95rbTuNoaTidf*i@rMQZ+9s zvw`DradNTjbIWt6EIWlZI<(l)N}04!1N;a{KhaVmfA>l8yHBk zA$&)oH0Mw=55H&phQJ*(dG=!j?m^LhfZ!}N#mP^+U4!R2Zo)E-tq9TzV>4FKgI2cQ zR`Pd~aSuB91#~io5#zU$vu*su! zpw5)sY$Appt+|i7X#0KCM44`x)mJgsG27sq(~r}1rbz5bG-3*C`L?S%-h>|4aiEE8 zH_4*NcBjNvAe$s{eU)wNeKhVV~!K(kNaDV>&vAy1O*^Y3ENWC7%}lB(s}Yu;sI;jZ&N|W>NDHjdNHzk5!Mc zy2t+rYfic=Yv<5ZHk!-Ex(9fwC(s<2L(4s^Z}!h)L;3nfNv9{_4oVUDjIzB>@!p`P zH>sOjRMOY<_Zt}a78bsPjqjP{SvS^wp6``dr||+CPyC(6i?k$)Y3xTEIr`9xgAi34 z%-10*E#Njl05z>ajh6;0(w77Xh}&SE)`RZC-38)NC03vOZ{)6Me2<%5HWlMzLL27M YTGflE!5=8#9~Z#XmS7a(1n}YTKk1kQv;Y7A literal 2477 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 D_>Dlb diff --git a/bin/ModAction.class b/bin/ModAction.class index 06263aa2d7702ec67d2df754933e7d8dfdd0e419..2876ec2b09342ecfa6bab4c95097d7ab0933d61d 100644 GIT binary patch literal 5927 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 literal 4602 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 YnnVw_h;9hmR8d2yYnr?}bPnOwU$slzQ~&?~ diff --git a/bin/ModSettingScreen.class b/bin/ModSettingScreen.class index f1e18ea49d96a3b253bb412a14752607aa7451aa..9013072f51f0d65832bf10d90a24e89d68600d80 100644 GIT binary patch literal 2571 zcmai0TXz#x6#gbjJI!=@OWPDE1;h(!N{Jv~F%^XhSV&tTrLlmQ$z(_eCNp(1X{h(> z(&cigOP3G6`e2`tUR<(t`Q(GY!(ZX@_MMrKh8pWb&g`@2oc--@@9&(+uYdjU6M!T5 zK*3&2E7*sbD6Qud4B?`%E{P#4<2@Od708$q^PG(56|`esOs)v`RRwKgka0~|*JQk) z;6=Qo;ALoH$Sa6pPAt&HP>6E7q2M}-ZCDUtOc^%>>Wqw=GAs#7v0_d*wrAY(B*Zc| zv?VQNX?8J{^<2{~rn#cz6tcQ&7uSpxv+QwEG;0=Z&8xVEgmkkt z;~CrVQYF(ibXU9XrOK|JnqpwX^9U2fPoHF@_I$JPN%On~Q!AG=+fI2^D;2zD47KX7n{cd3$(8^Kt>dO`dM8OB@o$d9a}pvG zPJtj@8D=5SZ0q;E3%fcc4kw=0HB9U{j5%7f?N% z*p5{5V66dB^3xU<4Z9#=@3v6{)2MA!?``YIdYXQ7N?WY)YITj0vqaV{`hsaOTvyrf zvTTrL+$(0hk?Cp2u?)>li@1`>-z2v#X;y_HdK*%{w~h@p%RxK|q3RJCC5oQjaowsl zD4Y<%l&n*6b>pllTF}2$D2IehRgB`87%r%I5D%%a;ix!({VEdJ&(t@yJYi{Nwrkga zi$=s*R55~g+3`R}S+lfg8CBCRI92g_OvNyg0w%5E6}SxxMSXN%Y%*q5cyLHeMFmSL zs<@?M8Lz5%4X>+s18>SGt9TplP(Laj5UKY1sosC6By?}3P1h!;nfwhy=TYd{bk(XX zA*>bHyZfXbEKd(#k+3gubvvbr^0x;%mpp(a*$I?&8HF&1!rq6d3uX85#}hv^DHyiv0AXt(86%QiR1=C-yxh_M*^}D}S|(@(y}W;R^ZMEB_D~&kh(ZxO zYoNVtw4Y{sd=W`1D<*2T+>4k1Tu1Ns=$kq?@+~5_$+G`z^xQ?P*8BJhIvbQQ9X=lE zj|AHWzCnCcnEjD;>|mwdk4P(j|CSuxBA1Sz(Y}hE>)5rao1ltG3K#ego%o1^K1Lrt zp*%mOdOpWRK6Cg2*YG87;VYl$Q6@gdGj*C86ZK!NQ(oqtGbGrFo7CJHR`nP?=Xi#~ zei;VP@(224Jll6(#^j#}bCiC^9{%Gxj|)L%aL{iC&>b7RgWY#AG{1p8cMujGkQ&Ze OAJf=DPlo;wrv3rN0Xk;@ literal 1764 zcmai!ZBr9h6vzLYU>27ZaFGNBls;*)v8F+*A}Of&(1(p^!$8r_Fw15qtljJ~n~iBd zML&kGTgA-OXqEm{huEosn>J->7(itJx3uN5yVI9c-= zfgQIaS3zNzO~pFOTVA1`)@XZ97{u<+BpHdLq}SqznTg2pp4;*24VMOUR^2T%?Ks}^ z>{inbf>PY^OIz}lrbGp{-zyyLhoHp=Rd5zu&FW7CxZ2oQ?aNZJG|8@uCW{cJt+-k zTo*OnP_U4HcHB%0n*zC{;}phKaE3;Lta;6SpKB4+!;Xeq_)3K1_{#a?q77@7h<{th z7<8`M&f!kzJOA32)DCwmWAE>~0sC~}Sd5rj84pEg?`ybNNihGF(wEEj5)|3ZvAyw3L|yba}G%^5p#G$?5aV(DpP8+D%crNni1qe2X*NU1VS3 ztTFov^S|*fg$w*1mptKnnwvC+1^FU4Gcp?yWtBD}j%pT*U3`4#tjTMW(4utACT92y z7imrhTw-AU0f-+;FQs2um?&|{>>~d=&YEvf*fK94;B&KhfRgzZzE|SX)O>O|4Wfj0}qVE#DM)Wslh=2AVw9DW>t&iA47crpl`8YT35CXhnyA4yVX+W-In diff --git a/bin/ModSettings.class b/bin/ModSettings.class index 927240dac151a6c1a01de255a38947983e541071..9c27194d5364b0424f851a1b795645aa9e7353fa 100644 GIT binary patch literal 19538 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 diff --git a/bin/ScreenScaleProxy.class b/bin/ScreenScaleProxy.class deleted file mode 100644 index a89b4cc17b0dcde9178527eb4a08556cc0d3dec9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 459 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 UqDDkHAQ8Oh`@hdx%6oJF0tV*H2><{9 literal 2152 zcmah~TUQ%Z7~LlcOfn25Bn=d7D|n%~wP@7}4N_@qTWbI{7!)sck_<34OfZ?S`~fci zgTKJnx)x1cK6Leo2Y-~yeP+%iLtrf*n4I&S@3O!B?Q{6&-@ji1xQTrY5rGR8%XMvM z?{2Hrv`j}sOh8jMfzcJ)vE5aHY_|N=JTe!Xrn9$Laodb2g)Az%l&cEF?zI}0jwlia zMxYBsv$<*l0)~NcTo8yitlcBC*|h{xp&XmFr&ir9NzbH#Nu*fbbL$ACeZQ`2Hy0n7 zo&9z5uoTBd0ce;Km>ghJNOWAntcIE3EF5XzHC!gF!>%i^6mCpGI14Iw)+BLWHSjv- z1jcG+{U^(5IOf4nQ;I5qiL&ij8{LDN)!s5|P0y`WH=9+nZOgqf#@v0I{U*z&$5JA# ze)7bV0egxSZzjP61Tx`{RQ+64M+SKV1r#}7kJimyfvN0HxV0dO&fadw>5Xz)Zp%+1 zuy9`H5HqTnjJ|2$J-knn_bifp?SBFXbu+kS;6p4?Ej3?}RbMF-(M}w<$%EVOT5+rh zjO?1t4vEz2EyuNfVV&`c%Rx{a9-A6ICX)kc1a0WM?bboCIS<;|mLz|7aNocuctBZN zKX+Mrh-xLC+>TVnBLkn}vFyKV%i(X^4KksITGCO*hK6+_K6PMVQ(lq4nwEbzw+(!aZ&>=!Y+H_`vb^4ED7+m4{ubYB z_>NK!nGO7aEGN=2k0jWmA&5bNP|ZHXQ?x5<$S(*b?E-ZJTlh*que7@Dy7j=8w}xuVwj)wpwLmG-&(3&iuq=NQW$ zV9@&xJSf7I$+0HvfdT zTEI1CkhQb?%G!779pSH@FGT-B?gg$7s_5RyWmdT2WuEdq`SzrHV&>NTt8{LpEQk+Jh-boC#X@SihkHcsv2=`wCv1g3J$xn`@$01+0=Aw)4l{g_=5Rek)qKD9JU;hoOKcKF z1QJCQLh{GgMIrc2^|&Mvu+1+{FcB;{uV-?dN_+NXf2|JWKnFzlbG(HyzChDhB9LV= zc{@amwE1&f3K0`SWcm`(P^AjfuY@UC$;yI7f}&=QQ9bdrR4w+f!|l1`%um5zUMz*T~Y33ekdMY1C7K?Ah0@KYZckrcxNQ e1yjZ3RToqvc_QlCK#fCj%+~O7TG;h|_x=N}?7F)E diff --git a/bin/SettingFloat.class b/bin/SettingFloat.class index 47154f7962dc87e8a831c130030c0a90c6368b56..fd2aa96d442561d8b9c755e3b9c572ed75bf9ec9 100644 GIT binary patch literal 2979 zcmaJ@T~iZh6n-{@BrF?*s03}TsGt~>sI@H>YZWb`4Jx1@R$G^3fyI!-WJA$@+7Io= zbUM9gFMHeDc7_k9&UAX^MaTZ5PTS|ayDST&<>KA5?|aU3o^#%3Px#~SUw;E|3}1y` zd-m*49lP+Rju((=pfwc3B^_~G)^P>HvNIyfs4Q1yxhBh46yxG`U0x=1+`wDne^d5u z>3AFO$iZzLCMKiE>S#qqmYgKB#F~<2T3%{-x(x45s}!V$USwafFo<>crF_BAs4-VLMnbis70WlE+eQ?Q&gFVD)B%_%2cDQDB8mg7)s zCj*(>0#C71`e?CQ&RPSuD5=GBRmVL-%)mYzl_hUr4h8DYKoO-V?ieVeV!**U1AEYJ zV6QB@WvQZ@a$c)T!3ju*fqA?e#a#pU1n~s!8+Z@zN3mewLwsc5V?2oB0|TF;Lql>6 z!mYo*YUguS*}!M`T%!BLdT8J@9vL`^*EBS5455a+qFA0ftU7i+J!n>Ds8cGXORgd^ zFP}06x7BS@(1%Tms^iO38n$%})Y4mg+|E&;ex|xomHO)q>Tk0YyqzGPf2Rh&QnQ+O zybrH&lHZk8$Xzn$cunz~T`A?wdu~#h9P84PaMM~FhD>LM1y)Nr(_!p79seH#eM-J1 zFF(7)A=fxm%y}iURrTd!wUFcZVoNSCL&+>#1y&u;1l)v6Ca5ZIge&GenMBM|i6v<` z9Bfk!p|87p#;^0QQNl+5ZC$|@dkHwQgS1Fz_=Il^LJHjk62L+vG(t%7QM?r5A2&6;j90u)ROl#OYG)bYLr)N&=w3mSYQ!S8JZ15GETeg? zu!Krtp#@WD!wid>4cvIUPq!VtNbut`*Q+RLic%P%WEviz*^{sN*?vPke9K$>F3{EypZN$*;dSyPyFgnb2&WpF;@m&YkHj4S z8P*`3ZF_>&i4`QJi)|?uv11uKm+_o*&YcDkh4(|CQ*C~}Hn&sFXV{;94|$Nt(jPt5 z%^P5q&#z4u7b_OvuKQRzt2?K1>3BmVLDUl%@K8^9N{A?q8`-&t?mb3)#0U{(PK9t@ LRWpbS>Ur^BlsH}I literal 2784 zcmah~ZBr9h7(Ew4BFXX=glMaR3JMz)tEkc7JB@E30v4pU(j{47F>GSkQ2J_LX8Z^J z+OPd;X9S!&)9EKabnHLsv_1FkO;{mLab)j4``q)K^E~HX{`}{+-vOM$j}g=f7?ZZ= zIqpIxU$DFgLIM#T5eTh#c2PiN1nQR^SN^uv1j0j(>v)$0I{HSItW|3uZ@CKtlU|81 z>HaD1yI#oIp^Ivi{P75@6j^}UM!AGF8R$W;%JiBV;%dEAhR)$Y3G^>R3VXZ|`k9|_i zes-d-f2xtc_gT-Vz&S{9g5&Xfy8#CYh@>&vrAD7W1n>8 zO#`=Zn=M%*jQ+)rFwAqw&X;hBpfq@x(EM=A*dCaDr90lv+LpGn_ zQ3RiI7;k+rFe^a7|0U3nLYoBj=y0Mp7qllVd!;md8xYRplGwk7I81P577d~0Gl8lX_w%83blYrw)B zn>AS|m$G)ok=I#U@R~azdnM2~=`6UGS1$4UzREo~6oB=WT}tC1Ve5I**YnBa$rZh& zpFE^|mxbvQ{*LkOI%9Qw#>`|a7B`GdH2uogI<%@(`Dr(kJJ7~er=N;A+WE#!{MJDr z3D~ItM+qni5U}SRfcpt}Kmm69sXG8AbV4zc(0erW93u^cHVEAtHxi*5Wc#_(RM>-l zZWY_mWVv5s%hg^@*T8#Rg_M*QUGHzQi?H6fxrz797dQ|<)bkQO8!)F$xmd?Zvv(bX zW+JqXvu2`U9Vs)pjtk5k33AIL*RmNc1d8oI@8< zJk95M@n676-ls#j#H-^nZsQ8>aU~~l(spAiWf=SnPCvK3gjJ3bQ@XRJMW^w~JHgIPHW6v4(-4bRpkO?@Y zy~?j06WS@0xUWH1I3VeiZuaKDu~+DwNp9jJ)!i4EevK&O(;IlW)vY-D1ooi~cW8=H zc4|yj^KH~!t=5gtR5fC&x^+q=k3<(s^TcTaF9|0JOt8?|7>CuPm{40*M%8EgH;qT^tVJPN4#W;fn5asa zz$!i`PqGV0phL~Z<|fAZXH2Vj#`eqEq$D?TUwe&~%JL8NK9}qGAr)_}uJwnL^2xov z89UX9S>_3HX`%uSqeufj2@Et<<(JX}mG%jtF0rTeDmi_nIUUiQ!pbPyEy6pFyU3Y) kEPSo^m}DWR5jB%!#h!j62OqRnbswWo)wl2Py?XxeAAQauasU7T diff --git a/bin/SettingInt.class b/bin/SettingInt.class index b7cecd868ff7269e8f6f4163490ad992578cabe3..bfe0ebd91507f98fd02a1bbebd5f692ed73037dc 100644 GIT binary patch literal 3079 zcmai0Yf}?f7=D(7BrMBCkc)TJRxyCVODPr9qAfxjE)@l-wRTCCun>}%Y$)2R*3#D7 zIGuj!cW3&wo#EotnNC0Xp?{!1#+kOyySqtNiIy48o;~M1&-=X3dCuAV_0R8r062<= zD)wMRMH@z|*c%IBT!n@YRGi0zj9ifBqBN7zOi6Poh-r!XP+l&p_y|{m_*g|fMnkwN z&rhV$Rm>nJNbwL18JU$;2^DiNW$C;GEC_?7G>btz2qLXOThy1$#r)!=p3EBxlwlb% zQ=Xx!oMmL(=|DfHtWye_+N1OOk{(IwsYGPL%9^P}-=Rqb{R>_6NLpg~gsl?$8TF$7be@ znANvAPWGc>xm$L+w1sZ8%p6hhe;JF>RTE|+rCa$djnf@X8CHZ_XvDJmtQE;+W048N zvgo*ePo_eNr>K`YkloCq zANw@CCe2=HZlFuSmQr1AHi0>y;WK<5#FBDaujsOx{e!jjV!d@lMV@D{UIS z!q*zk;ARkCX!u58`f-~Fhx-vx0?!wCQ=jP~SI;mZ@DX=7mou#`T@y1ZTpglb{D+h15yd!I-%s5S4%;n4E>Cj%U zqc$7G9q}R-cUGYs@UROwLO`F)g*$e>1n@8cBQ{{06S@gdpd(~kVMBMj z&^n3RsyT%YTtYXd(TB?z;7^5NT)`Nw+O-Xl*8pm9oSXx~uvq1| zyCX8@2q?WmmE&>^GMkJ^y_I-_{YEJN5;_n>PY`b^{No^R0KDZ2ai4)AQV+}Ubv}VM z-LZihTZdKDK4sN>tfTG;>ZdobrJ-RRjUD`7$JWPaDwW%8Z%G_mV4xKVmTHo~yvGSW z#X@>;!nPK(Qi3izL8#Kzdq}DuCtYeQoDh%p3N_|zeu}z6_fKfQO25HxkJlIb?nF?Y zHmG>rA(y5nuAzlrk^NYr{x@uLj_-Sm z-iWe95x%uhBt>ovvz%S)kU~XR=Mo9nh(CLTY%OMNb%d-RpnUJR$U{UH`FNJNL9BIm z=|Xa_LLT;N5lh9p7_@V#I46!FYCnct)Dx~z0yf7N**S>LHV2A`0V2xvR>8w3)x3xI H?Pv5q5<7Zs literal 2941 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 Xl(63&!GuQVi2jX_@GZXcKfnJEs!R?R diff --git a/bin/SettingMulti.class b/bin/SettingMulti.class index 9179c7efa45ee6f528c171e584ad887f61b6181f..23563316a9b1e8b582c64de0d1882b7c196a7938 100644 GIT binary patch literal 3503 zcmb7GYjYE26n-{Iv&nWFptR*K<({Ukg$f7)m5Ty}0NNsmSGLKvT}YFVZd$yHqN0Kq z)N#-cj?O546tJlSPRAK%_~6g*5BS|t@j1Jj?Y6{Ghhg{K_dV}(o^#G~PWsDVH>Ut} z<6{jg(HF-G^v7^i!vZ{};TVp~&g1epA&)0CKAzO@6rNV`jD~tVE02>Z3=IkN#V{c6 zj6AX$Obp7cAq~T@1n!iI(*ltb2Pb7U5~o#ORt0$!#r}-kEXn7nipwg>3hHylfSEgH z2JEkDAr;s%j%t>2$ z^Kf}&z$_g#26EhKOcyc+J(eu__BJE-uton+P-k1VYgU6vENc!rToow23L5%tBXjzY zQFKt8kj7N3R*)hJHSXOVvV^Bt{7=SerjWPIvo^oZDhLmmT-8Ep z3&8a9#*kTJW@EHZO92!#C4(k@?$_2}RMRk$cUXjz!mhd2E$+u{bEG&X#U|HL;W{Hz zRbm0I9uX(xF$yGbRJCRpcA;hlj|`kLGxoN?od8_u?0ONybd^181);MW6#QG@zID9c z8p<1Xxx|>(r}L)WHA2Z{O2(kwHCoDa^_#X$9d8eKsxt3k3AFw~xs);YS|Yl6p7Eh_ z&bICqYC6_nmyU6;y3p|)o>yV(co8q@co_$Etioy?ub@*5*QyxP@hZ+y_tSCh%@qt@ zS%cj=Uc>7O7EGVH`Pf~ya#^!P|02dwr|()vghQ*2^LRtYe)On#LC0GHash9vcvHu_ z!fYEZ^4>I}7n>YhlE-!(?+Lq|a`PcPtmA!rpyNaLb941>*|u_B`;F0Ib`w?YIXO!%zXB+F~X8Y%`;^qM>jKiq6+r}#cSoOH`zR#Dp8|Y@AlLrl+LNo5V@B69-+qY(jO41pze4|788i3Iwzo}+9wdZ zM)NR|e6B={&m{y{ia73phE^=3!&aWGp}Q0vw$UQxy5RdAe$g2^&`AQax))stIV+(T z#(J*jL%Bn+h>8s=x)l}oaZ^}t^jIGtV3>QcRC~B%5^Ss=IP9K zb7%ou7|d48;W$`^9SmhF%eIp_+s&Q5=;L@9MlT9Dh%p>;!rkZuumblpt5Vi+Kk#v) zxj7#vPA8E=DB}Uzxj9cD`X}lXW%2K*Yie1=gm4JCX~CP0HTg)aB;RrybE?aqu;4pc zH-?@4x&GQah{~HxT*b6F>Fwj+NJse>&vBOE1S|fu!@Y%GB<8A0wm3Zb>%iRzLJJm> z%?|WJGiKE`bI8RO@@3xf3CvtMfQsFoC zB@*r;yW{Ge-<;m0$+BtTxCwrX3BG_Pw%c-CWM5oz9J;;G=F@NU=-0D#_c(1Rsa6sC z1N91fP=0r2F-l5#JLr;w;d|V38};()s9-tYHI=*=QG#A(JAZ_E_ymjaDV2PM!{_q= zsiaRTNoDV&SCF==Q?LGu8XQK|9PRSz7EiT1iEf>p=&w1Pz6q2q?z@Q7g|vbM=yg6O z2q&Gt>A!cro|3L-?1A*V6Y)AVaD#n2!M>ejv^UtdH`%v8a)3=alxFwoCZF6Uj~uCZ z@rO9dru$S!#P3td$o~JS3egqm0 ya3VhM19045v5=u9Olgsj^GjJ{pjC9rnj#E literal 3394 zcmb7HU3U{z6x}x&k~E!$e$W<>j{<^8%7<2p)j|qqU;%C1EKf%^ihA(V29MvkD!@Mou|%&bFdcn%*|P^#5_Qfg)?5i1fYyAkxb10Y z_T;Ej8BC#F0ck8lR}!5HZS%B-OTIhpR&8`+IYnrcu@eei+2LG-p4m2-#!9S8;=Tq( zG>nbaSVLx&ny)Yr6*o3{%AN8DBY5UcG=#Y&qIzts!+M2O!9AfFDYV~vSa#lTV+j(n z+GOJaWEGkxovG7qsZere+`Es36<9jrmE7lQGm~!hkTY4-+sac;al)y3^4;9D{F5FN zni+}Kngv|qd%hfslbwPZX4;N7O5QT=Gdy#yF_L&#p>;ml0fQtG3fX9W46{XRpQg4) zr06N;!!HM0DR+_c(QFz>IX!4&Cw7tVw9CRg@Gl4FE4>W6Z9I-WjO&&B3GtWqod}*P z(>G@cmp)M~&ooFah8?M!;gp+5vyb-McnVL`xbB&nBi+&&CD!oA(IlQxSUR7={l&85 zr!kBX$;s$~W045M*qy`yh3@&Y!PC7puUK%aDIBDUh5fAV%$^x(<(@RgFe1NRurYzd zw3EV?D8ELad(;_pHp&=|*ciZ3g=N`AEAtXwN#bQXcC=hD7MrzkTtp=blhfsz zFTQqcOkzr^SM!*Ok;7hrbu{}K#>I3J^kK_g4{V&2DUqmE3XadRDJEE*<%byYS(h19 zDA_2YyugZ$^4}wDP{xp&6H1&GvtaEL6{qT!xM&%PNFb+|FlXa65n|0ca|~~Wk{*PO z2u<8}-p1?Fw3(?|RiO3-wi0%43cDv{-n=dTeP@B?8wQE+G`DD1CTK)vu;9EWr!Oun zLb%r|X&X2B?o36G8aZ>x#{0tl-<# z&@}E%mmI%V{KjC|f-DKhYAd!OrdJP=UK|f`-2runU{(?;i9UX|^QN%w zH>{r_pr}gad*hpLVuw(QX-a7gwvKz(>(D*HzA$tu44r}mj1h4Fj~d*)+%04>%mKyL z@mL*0eb+*JQ3ij1arQGr~TMae1~-n-GbX`^%42WFOcZ8 zhAvvF(~`TlzP|I@>eyH4ko0d}ZL)t2EA{uEF?^)=CZ4V1IrHRaj2&rz{wBtWb*PRP zf5b8FeDyZca;c**U#33TzsS zXo*TYh!VS(lg)+y*_&@ikTW6jd~aUBQKRuODwM>EfDQRN-X-tFy8S(kXa{=@qLSfn za4s1$p{v~Mm!w2;S!T`nPd41J$xB!@d;~vRR;}* zS1y#1GYM+O8hoJVrnrIsZTyK0r=+kFo-)^W7 zj7`P`39W456jb^&UBWX(d}Pk#O*Yc`UgopWvcYT)re}DL=vT-zhL0&(u2=s7J*k|X diff --git a/bin/SettingText.class b/bin/SettingText.class index ce2c3a6db192ee8e98bc52182d217ef00b8234e5..0d7e641f662628cb0673f844f39fc3b52056c6b6 100644 GIT binary patch literal 1806 zcmah}?Nbv+82@b&?%;B1AXGH;1(k{+pi%pVf~d6$+5=m|;O8Yd;B2^LE*pk^@AU6! zXVlL0L#Lnk&_Alv-`=g4V`44L?Cn1L?DKnhcJuc?fBXsH7Iqv=;@SktxIT`CgB!T1 z7q|5AxgNf7@Fl*|8(-U4(UIE@?qJp7Y)ub$ZLHh4Ct$4wVW8FpuGYMl@>n)HGCXKB zRTP8=tD}*{U4g>GZrc|qdqL=L503WyXh-gK7^!&Omh9}xD9~#YEU3evF93lt6{sX_ z1W2IR_V?wWqm+N51f2b-dz6q65IkAYK(f(}jrQcHjp*?qUL+cz0FxdjRlbiofBh8*@1_z;3gNU{@ywF#TBf8m& zmmyvpa}d{^LN~Icait=-hQp%*7P$yLfYTx?<6#xob+;|HB|(ZwZH*ryB{+hSJqwWhCz zbu2prpZ%Inh!0fIX>7{=A^Sz%Q!z|7$b-EB8?ut^-)IL+B-_!{O4r<+T@6iwd%PZg z*xr^$T$S2Ezt@pJy$IUzJt=$1%&;c=XJbdLIF+CnG!T}${!6&3W$Fi3)fYlVR%A5qS z%1jOTXUkv}$0yUd*%;H`xaiQ01r$-E z2TPd8HT?@3lbcB}QgSOXB@t69Aa`DK;yW;$el~8@G+^pR@f1Y{ifo6=?>o(zg{8I7 zoZB>Km9p_HYK&jGd!KNmV+x;h_M`MVKZ5Ejy@+nd_TLS U;wZZ-vGN=iV>NYlOsiV{7hXSHwg3PC literal 1702 zcmZ`&*>2N76g`usaqBoF4c$_YEnL>U(hED-#!2@4lhH&VfF(~+bQq&FHJKcdLgC9SaoTHlE5M1%r! z@r}}Jy$B@D;DnHE$-~M zxrHU9*u#1!=r-I(o@#F{*7b|ZufS;CYx#~0x|}|7a4MGmMO~@lG+~E$e*uG|VWjvr z__xKXs?XTpFk*j3I-gzmim^BL!WT^0c)Zknl6+_F=Lx_Z7Ax9STYFqyw+7N%}EN z^O=be7W#w*ENa36E`@}bLkuxZ<}0|$xAJ?NN)r60Y_eYa$Wi1?s%WUf^zXL;_AqH@bA>Uxg6?U~s{$Ta>Gqlm{k>|!izDk@}htHgMs70v0C2B$4TY<7ctmhe>Xv9$}+E;A>pex?pX Syi5Iktk%N0HM|JFFaH3F5lg24 diff --git a/bin/Subscreen.class b/bin/Subscreen.class deleted file mode 100644 index 895e21bc9a3f12c63f271819880fee3c1b64d85e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1983 zcma)7?NZxD6g_L3*cOTjCYX?rgnR(Dz$n2aZ80Tr+$L$`kTzzVVfst9HK10OJF-+y zpQSI+P78FJX&;~u)#+JD7^ab#j>fCq)!lQ?J@?-A-~asa7k~}yrI8TGHvRUX1#nerI(LOs~2_gsH(P(V^vZ`$K_+ zi;f7W@_^rd7g=B0wj9gb5m+gP{(~Tzo@+S=)em<{ErC?M-!&B^kynw!45N!VT56>+ zD=-riw}PvflSi)!B#Wh178F=T8kr0h1k!pt5LV&#Efu$=hs?nA_72USnZ_M~LKuJD zHUNRA{eY5lhnVvcO{Tn~P)$NflLGhMI=P1cwk!tM|QahDs|a zVNJr71s)bJLW`482Cb`@l=u$?R^!s#qt3P-`V5QhwcJtg0CRHKRPhLp1*VN|x7P8j zzEd}ByKQv76PP=nlhc~4mReHPk5znvtx(kfQ9z3iAY^dPHxXEK4a+fi{a)L2_rg-o zH~JmJZW*p6*U@H*?J^LUY>awIR(#KN*an_#koH3a>U3`_s z8}{l8-(rHA!9}FvYiX4l9Lg?Nntk8xn9nUKWNxJJy5xyFOmdRHiC|=7ah~PvmVit@ zYmRdvYn$&0&T^RIc!jHL0wDulX_fJqb!n~Hhag3YXSlmzkiMuDbe}ok- zOZ(bySXn*6>Jir8;{nY#cFWo^Dq8s%AN@kC1gadD0|ryX&(hNs6flh??!o zGt5$k0=8+Zg&erQ!xh=!37(RnoYgo>@XI7m)PwkP_$*@oE72!tRU5;;Jf8DbYCaXP zo=?Tlo{wl>C&3$h7O;w&*u*Vt@q&8Fi$&7j44sc?*G9B!5p7b#=afB3+si=!DN@hj zc@)4;{37MAXjC*t{xul@hyS7Uy@>LCQeGnEWs+P$kx!Wy*9J8{Q@S#uTnUIur7Ho^ z1ntk1W|>ArYs^7{R@or?$N1tb(Ms@PokgbyE()RH$VC>fr~u0y4P1-h9tUe6L%8+d Z@%q1LoBVfp6rjnIw2ROL-g1>d^Iu?1z_tJY diff --git a/bin/WidgetBoolean.class b/bin/WidgetBoolean.class index 7505ee70fd0049e8b03351f8863de15a4134310e..d7b8dbf664279eb9c865a0e8c441f283929e447b 100644 GIT binary patch literal 2910 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 literal 2763 zcmai0>3qPXF{ z3$EZUAKluNpZxUaXa6Ym+?h!epumUBd-LYKbMHO(-23v+zkmD%U=uEBSfJ2y(8^>@ zJCQ3Iwg$h#LU$o$+O}25YG_gjA2W^{eL16$?b}}|6pXQ)sSwIo<;k3JGG`VP)R2Nc zUM%GeyKI+uj)#)VyU!kd-vodB$VNudEakf`71>F@v~G0U;Je(}1jogS) zvgF-c^xG3wndEt4)tpyc3)q$|gsr)?3lc!f(K@jq_|Pd4tY#$9`5crOyL7CP9l^3` zADA%nW-}Mp>d+9BSyV?eLNbf%ScpZ<=s~ZB^~_i!)jImHLBW@;SPHGR^tdYM*RYAl zGiDzX%t(!L-Y69M>=U`ZJn7E$rL6p9&UB(4mIbkKkB)n>nTUBy6q1m&tva^3YsOTF z@BKP<;6AZx+6ryaSVN5a#*Ue3o2GZtpSqSDBOwgn0Uf(ANFk1kc1K+K_@c2y2pjQ` zu$G{DqKQNzHX=(8>lnf#B-qGg28~>9%t$|@u&j~Rn!5XABN~zidTZwwX0cIx?UM&8fG2 z;|lH3p+?%hZT%r+VQHAS%BEY$I*x(VHMs?^u&t3puhtJ=pUFlm-Y%gaucILHZ6*Z? zr-g{9Cv`jvHVPlJrLby#zTNbYWjSH%sNgu=s!V1Kn;}vQtS61I(#dFGu0e5A*%7Wn z&rK3}t*Y6L7N%^ONE{n@ab-a!@xNb~Nng#N(ejcW;r`3b(58^Er-nbyWqvKtirbO&w&0EDP z{Qw_n_>d`P)q2e!l`ffPLC43Us1UnBx=7(n*;20Oq+HJ{L~h}RQvp=a9(<>ct{PwuzSHqNeqeG5$S&9Dh`XslcU}fW z1))^2Qc9Z%OFHplS2xc7UdabmQ$Ifb0`T+6#>pF!g5eb+Ba7D=**rNmaitZD`CP)c zB+vLbhT`2lfpB;hZNKtu0hY-cN1&ZJ%Wykqo$gL_U^(C9`wAlRrsC`lXSX1)^pHm! zZ(QV+^CB-N@(KqzPQL}^#>n#ZPR1os@qcF&n#BO!{I9Kim#kOB;Mhl z!Mb?&3}W$V{$|j91sg|YK8?HGVT%k^Z2ubrRop*|2e$`00`V$#$FE?|Xh&cc!!vl) z-Mhc#+(mSGbMN^13s}NwZATT4%UgIf@FxzB`Z#|wHR|UOxs0b%moZ*NE-pK&DAGz< zc=kCw4=^Gyx&T%&SDnnwYDT!0+^jQhT8lAx1!qRXFVEuD?kZjjzsW}xZ(qwuOz8N95RE$9g*FU2v9!DJ zUMy{l{5^WhRv-=1b7I2LF|b(}qB&- diff --git a/bin/WidgetInt.class b/bin/WidgetInt.class index 920b85f957272da37f3cb303a34e4f89bb34bb19..ff8c73a8d6edd76c7b11b34fecae7d80d52edd75 100644 GIT binary patch literal 2855 zcma)8`F9gl6#ib5W|H)^lt=-Ur7V>+v`rBK+3Jx>un<~puvkH5noPr#WD=7}Srj+4 zqPXHNf(y8BfHXxpdi>cxO1*bxl1U|?r>Ae;+{D=85J5Z|gb$A?*dIhQ4zPpj$C!f0d727B!#ICQ zv*SUY>FhAU;SceUVOzEd1}1pODM$vf7*F_7;AfFPn>;J=Fd4*Q9N~SB25<~dGLolw zIL_;y_Tw2|^{gMy`SHAhyn+`LyeQCG)J#)1(!<)gR?v*3CeRg6Y0<1|ng?~Ym{koU zY97u+v$>R(i6-=HKBL7lIn~_FhRp)LVn$DC1%bH}>ZBUYs75+EV3=B(ZN4qKp__dI z%fj)5y%T-g9Cw!{%mQt{xpPFo+fN|{=EQYF8!TnVw89>BEJK!1JeO26BWgkCcgN@@ zd_@5WC{7Lnjizqe4%cnKK&>1sm*#}2CJ*ga^Hwm6j}r=BqGAd(si{=In#qjO3V{XT z8nDA9!(a#&+~&MmP_q@2z`S}31zHMPHaDrc5j};HA>avf%Dz%QrJ9stuvF9vHWw5r z+*uRLVTjfwa-~92i|L$V%U(T|)=XlvhjW!!hm(|=#LGA-u?CkFoRD}0rvxJZzn&7W z;x&oad3XbF3P^jKgjHjSw{V(wdYgpfGCVXkp(RbWzaz00KMMppiksRyI(mA?i9mOu zoyoS6o*}_Vyo)~KT;e^vFYy7x{*d?m2xlZ>*dg&T&Pwb?T;d!)Q7|R36FVq+HFe%I zPQoEZ+a*53=Mv{}foESxe2F0ipGthqk-x#W3cix~9(@u&;73mHCy9$VL;A6cU`4n@ z(b~KF+6DYp4n4goCcY|Nfo6vh+eG4Y^K-SZ^2U_Ahi4XvmD;z}>dh%VE5%PD-*ZsQ zQt6vhdNH3-kJ>=^z|4X~XHsVA*kw!E5j9gH2Qk1V^+=7$L)!Vb(Cj*ryI(g<$CYGC z&c1Lg7Go5h;hQuEH#6&e_zgX&4XTXTH=Zj{M-kXqC%b($T6ZASm4AR3h&gcrMN`W= z5Sz%Jpx1L> z%bb8C8E(d;?{rD;&r#1lLf#&tlgX&5O2x0nRHMvQwM#4Znxz$QTf_^)Ub?h&M4gpy=b73+8|xtf}0XOeKcE#^)zlE;~IMRlJ#7q zYX%|`YAC}KSv?JJMH`=6as*L&FkunxU*jUCwn%{bf z5PEPojqB+i2j$m@S|Y$vnewrtZ!vj+MD zT5Pblt^NhKH-Owm=Dg}4(_ zqm($&wb!tCbOuX8OUr1tF)uq+#_}>&T*XQ*LB)6#9hY%O8LQl6S||vxjebG(6Gz*v z&7~dINl5TLZm1r8!8L;Vzrd^>O@V{CDo`8SgRiV2lb4x AR{#J2 literal 2720 zcmah~`+E~b6g@-IZW@*rVkrW}wqPMiAE}5BT0|`ns00uK!3qeQWZN!oHX+$SLGg+B zKt;tDz7?!*KlP(2pM3iHvwxI&W_R19P~nHn?A*-Ud+xdC&iwt)?|%YVi=P$D6KL3P zWJh&-$g&mq1s1r=q;A`WHL9RqAaqnauEk8v8jbBKTb7nKb%9{kC>2cYq^Vm1Vn{$8 z$rp2)U9yWj$3uzgsib2Y;J%VTW5SDI8d<$aW8HDhEYqW!@PZNw&Gj1$%dj^JbcAdF zxY2DSCE(wb&+0)4+@_)l%>pZLacD@MYDyTEzO$T5>&3lpR-r^bqnRnKXvno^^xIPs%8QCFbPM=K%Z7wMt5yRFdIh3cJ;pK+vR2AzmKC#4n6Vt$F=I(1 zS1|Rsnb+(c(jX)BskjRPddwM?T;Hu?ox9e?gIwRM;y&CjBkHz5b2w6y*{<|aJ!3O$ zzrdnuwaJe@suzP;j}0mw081D!EIZ{^*%yus1<`|tBv%i!%;9)E9!V+KLQz``m@7rflQQ^hU>3DPn$ zx~1h<%H2pR*fVRtt6>#;v5%l#tqZK5qtXX%q^OoPuNh=|`&B$9b&!}xl~o+a2?52qMs|$|w1kIh3HS6!ot`8u zRRy@d2Fr%YdnkaXn4P1R-XO-&Du-uOJd5XO*9ryQB2_)Lqj|W7L?PclR{lWxT536>5yV=rwpUQ`B`!#cNWILH2ki&t4k0Wh1^W8}SW+HMf8; zoh>7qQao>|cw34`-Zf4O25^C7xpi!p*xr*_zJFbEUT@zlxeuwq_MVOOF^G>;e2h;R zh1W#2(c{wnXVU%W0@9_iwVRi!HT5hI^sOiS(icz`2WWHR?=y5~7WsR=Zd7@X!10C!UAAfc5bL6ee z=aOB@yIan@Tb!A9H0L^6ny`@LBCfXcgpYGWw5xkz(-cC#axo8!IR-fcEp)boBhc<{ z=Cqt`GvywpF1&6C*5eOp6A{y(sN*vIc3$*Xv@ zf|PrF*ngQJ9FLykwU-c*M?B-%3JxyyM=LlImDUQf{2r58`<$%%9g>z2`*IT3N}^WK z-o~*5oB0av#wv`V6KAj*7ZAZk^im2je2qSbrFCxBGb~Naur%SZL{4CmRUiGOk%Pq& z(C73}8JL%To$$6Qu%nykvIYzY--2v~I$w&Wmj4dcV1Q&V`ltAf*^ z=Q&jHVqKM|VZY?yH;{sJ^1v^2R9osei?`KDqQwp3CDF_m_e~a<9V#zX56XE$k;RuZ zJLI~KWz8x$FO72)$$|I|Ay$!8@NVb>VwEQ#)O9ay~$)JP&+iJ{4N9_k$vqP-zk(zjYGx2_O H2>j_k;)sNF diff --git a/bin/WidgetKeybinding.class b/bin/WidgetKeybinding.class index 1584afc1a4a9b2c96ea5c60643667f6b484c7f71..3d088e784e2d783adbccf01e3f1d13e18568183f 100644 GIT binary patch literal 2945 zcmb7GX>$}s7=DJ`WH&z zjHzM14FyOw9M@6AgbovvI*!3=LkYG{Xh+$Vbvyu9eN_~cr{JqeOeJt!IXR&Wr`5g( zbv%TJ6L=(nM-zBVgBWuhOB(imrywm2o3aI&DH)zOVH%Z^VcQw+xRoiX#Z1mDl`VN& z#J*QUvM<}eYiM8ps0M9-aD)9L{X_c)25MH+N!9ZlTf^F>#={XC?rGg-+NQTd!#Jr+c%L#*~q<47-@gc`k$K?HX zm8T4=%Hzc3l;;QDp7R*Xexn>7sq>he9&-%0u-nO3D_N&Pvsg+|GtZSJXG%80kGWOm zptV{q7#<<@YDKyMl?*u59SJ!km^L}5>gMHcQ!&(a$Sf44$7GC|c7Yk#q!<&tFee2z zqDSBw^e{+)$JNXxe3QTv0#D*84L$!yhYIp(fo`NVtZue3su*SbjKHWWG)qW>gyJUk&wDxZzZLePR)DO<*LfUPdbC0=;V z;;F+*B^#TIFenk16bEG;<9*Pus`;M4gMS~EHOpEkd)=&1Lg9c?rO-S5se`VpRAeDs zNm6Pff%qfz=B6v2EHMzLN}+cJnl+uwK~@Bhyhx+Ov+03MgW5nBtYk|ax0tbxPZq6= zX_u>BM#)&+n_25YL$TPE8fbbG7W!Ga)Dz1{S^2eitvVZ78?ZfDlrC5O%X?s4!{SR( zLkmXQ!9pG8EthwtB$8gNntcv2PN=KQ{Ax%=vtQr*@B6AUqy!PtCiYZK1z*R_TW0=P z#i`mnv#Ni?zK5i3=4Ej97-`e6A?mCywTQF2fBG`*y02)8{OZixG48m0dNgcl0(c|> z7+jg&rnHOb6QHVkAhJdcQV+(^o~-Fftl`tRfwet_7PhP&e9S3u^!Pn%li#x}`8^8; z`y?$k<9fC?aC9DV#Mo!kJr|&*JMsGr=A`2@h@}_AYiLPtoIz{)NB(AzNdJuFXzT*o zW}x$X?kE@Z3lKACPxG_AhI#24=KnyvIk=JSCcfh8??nriu|}>$C;cv=-xXY4hnrZ! zZpKdBf<4&6BD0kM~jR{v|ShHuexHrSI z^>bE7>@W0bU4Np3GrLK8Ab}m+qv#b3rygB{#d$s-N7>%bWE#Fd5!i=bH1$Y?SeK_` zWdkTk$2ikb{Eu`D%!am^VX4sK4DE6xiy@UF;lyXd;d2;m0nb0UJh LZWepLZ#DQ2eKxU- literal 2618 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 diff --git a/bin/WidgetSimplewindow.class b/bin/WidgetSimplewindow.class index 096b5b137c12609957279da8e7899d52ffeca879..37f3c73b57f8b21f7dea9d12f126175baafbf42f 100644 GIT binary patch literal 3272 zcmb7H`EwLi5dLP5%w~6TEddN5pdxNI!H5Scc#&9v=mIetgNX-Bc8Bc1>`dIuX7L8a zc;EMZ-;`BaW}{O2BW3yT_@h;pU%%NTTV~O+sJz$xUia6pzt^v4`Teh-e+6(kzSVJu zj`27&OvG?!9CzXFIM?rqBZNab4#yG0p=Pd_Iws>tASX&*21|w`I;P@i4{QpuV#{z; z$FVq8!)Znlu1KE1PRnqw*q20_k$Aq2avU3RNJ7oZP-(_-+?T-pcp!!cW#u7>{ICp< z$Z$fOPs;G9sE-NYDH)XXxJWb!i5kKQ9djDulVyH^1E}sEv~V`u$j->?vw^?h_FS|b`RS5Da$_>Y_Ln% zgm3$fwP?J);TbaKq~*}Ib++H*S&K`-60@V;^pe(eo$cEG4I09!?lBFK0WWW9Xv^5H zwZB}Pv`VAqq{EeD#><(`m|3z#uPsKH_KXHz`KDCEL)1Xzy%*22^M5;QoadB_EWmY*N;fbza3h}J#p-y{ zz*Bfy^jl@P=^SoB#T&Q+SF(B*&*Dxw)`(XT$7c*&h0_ME#x(}6#ZC=fjl!#{HLwfU z8Mt0dZ@@JgHa0R{W?S$Fbv$d}1-xkBCA@6l6})O-7`MqDrPnZM;B~yAp{Eg6kyY>X z1>^;(@S$3cIKOG&ExfJc9RoY?u8#K%e1H#mzj9LsJ`(hg@ri*?W%vxA8~8$`FJ<^j z)UQSQ2A{Bw7l~QEB-T>u&W6<#*s2=sSbiC`($%2Pnoij|aD*3}n&_^psKw&eaA9g_ z=s&TyG~#2K+bx6kaVxJOTAPg_*R@Kjm@K}`_}&8}LlXz~kM7QB*xE3Ue`4`%#AYnN zhS%Nr6|ZoTRv>Pp1*^z%UtRyK>fTV8Emeat89eYYp-8p12@UDSk%FtQyL82PjBQwz zfQIf=cf-6^Ix_H{vb}rS-fKD27F&KILyVx`GwX{RF}(ssLuY1Xnb5t1sRdXArsGJ* z;;XNxVWjN3(wtQSx^SiXM+Z|GE?GycQpw5_*)J$Y_{mAu@9eegsRFx-IA-npNn4cV z(@o-pi<)0E#YMve4TrrMJNTNl=e*){*|#KS&A6j(Y0;@;DYsg0U}8-pdos3f;R1ez zL;NkF^LxTRLP?XJp=P!XHM4W5nGHhC>=9~ao8a6;5B4aIyQ$rb2qj=m`V6%3@Gl50 zAe@XuenfNuP2X`Rgno|lX$Nsvv+WE}G6FC9zfVmN2kQ{U)=2l96K9Y=BlakqH44|L z;Rx;?M&Xx`hI`*DD=BGU5%0<;jC z6=8F|XR%J@)VqN7l2rN!B&*o)1)9_C@p*LiRB`@W$kHY@eg+$v`=$kK7Os9kyow9H z$Av%Pq7Xz)ZmHs8S|-Lj@LPLlgk?1zmW}KJ6q}S=6nHEh7VfCGQ5R;ys@`^>g>so^ zt?=jNai0A_*8aof_;jS)P^?p2dwa1&7@lOqW!VI;d8w=#DzIy{MBiQdkiXn>t literal 2804 zcma)7YgZFz5Pmin17RyMqTEpwkVG+Fs?~y4K#^Dk3KWXA)lIUJ#m$CpHb!l&wfFnw zOY7e#N5g43_H$2vR8ODT4UkiV?U$X|_nmjO4HLtliNPre-ZAW*ytG zmIf7sbDCk5T(1f`CbsuO+XmOshTHa<#uHjfH^uLWmcBhwbez1konLR4w)H93E~VKD zc1>)gXf2ugOuoeZ9Ycm?IOi4k`(yJ80;Bni9)=&gRWu?}hdl~V4+YICg4iKitBMfn zL~B>M6&9^iMFUjP_NjOYJL}L*UyfdI!dyG3q6fVS>I%9um(_FRYfu04gvI8?_>hWz zM0i?oDQKK9EPb+=OX>EUmh!01r!{k4vkm#LECzTz1qDr;8E#!7lib%|lTVM0!PtBV z2?brX?q@b_=S_23vq;KO92Zgs>TwdMLU>t0&x?=rj2UZs$w7&ER>iAe4nm&mPeH79I?o-K3sp+2t*tt|puPZoQ%W;m?Y9_pv^=z-o zN*GtLJB)EmO1vor@!AP_$Eyyq7Ub9)DrPWC&N&ZUhr)TRCU4KX2;ogq&SRsRX{Okz zVa#DcfV`z(Z-26izNyr*o^}|t0oU+$2-g+#Zl7iqP8ILqT{bky8%{e$-r9)8My>9w znWAM$moP*fZnCLla!7_L6=`Y7khG+J*9n15+4!&V5Jm<|0z9kWKz}lMy(R;jUBqEx zYWMO*_Iw7nRhY;TA}O4<^;^1a>lvCl^u|{R?PWKkJXG3qQuHlw-t_aWOi*{NcGi01KR}!dtc8M-52C*AR_Io1S8CTzQHX`LxNWLq1*c=ziIW zHkEN8UPj-qJmN!)-?$rOC!Ow~7NYBVG*N5i6VSylJq!~^l%s1mB?!e0hr>9+KVBLJ zDo|FLh@^7y#ZcC9bn);Sj$J*niW6m=i60TT+u}RT2ME}+4Zda^LJP6Aa)`I#EZXrJ zIxvb(7wdixPX#NHVTjc7QR4nNoOh{f|*z%%$4{jxE;hFels)VstbWeeq2UG)(J2)&VY(##ZNNHDo$d?t<~#dMc(3O3); zt(q!q)|9c4iV|?k9e5lVl1N^(WlvaTytg3gDvCj~vK2Hlt9ZX+5W1Nu<3q7&+puB& zk7yGKw`a@v)ZLP8u6p9LGQM1hbhT&CMf%&b=egL@(OJexHd+ zy*?V`r3|qm&+&T!3mhvsR-KJYC}9kbnEfwER$cDnO3ps~O#A!1K$`{d4K*K6bmLoU Xe(K+mOCP?+50vuWo+P6`UTFOX9y5km diff --git a/bin/WidgetSingleRow.class b/bin/WidgetSingleRow.class index 4c5f949092ddeb7a6a9ad2ce9921c6d431673d09..c82419897eb03f6458299498da89079ad3e26b81 100644 GIT binary patch literal 3063 zcma)8TXR!Y6#jOSCTTddw6t8Baw#ITr2!@5 zBRdj{XKi!D%y;aeV`$P!jhHq=?^xU|WyVGg+fG}?_^6T1#_Y*VjIikA_y_54r|BM^ zN{$&rR(3=o*lA@gdym4V=6L*UVu=VXJqm&SxfD@XC#{0AzrwOOwL7C6ki!q-_jc=r+cjpsYd&yA=FJDy6WY`B{MF z%Dlcp<5DLTnwE?dkIUsNJoLd5^h!o9bwZ#y-oj?^Td66s!Hwg2bJ)!1%~a`xzgZ4M zMvW=gpRCl(KiBK_PsGmIM#f7O<^j(h%ox+T0&l`N1fwR|4?~6g>9HIGEz6suxe0TB z+R8Yz#9NlW?lXuxL!8N6AwOguu%xLq~SPDXt;*!qMc;g#8VgL(1piM`&8N-B@Ok> z^9D0%=SfG0)MA1C*x-3{$nIz%hoK20Q!tMWE39I7%=0Y`HH%4FCBTAhF9dU2S-VGK zaE`{Ui}K<5)9$B_Whb`dxpB+3a#{8#C)i0#YtlI#blZYRtZd4h5+sXaWnWf5b#uN9 zCl4kp+e8!J#yURGLC!FXO-)I?`3*>MxoW2FLkrieb9vp$HA`Mzw@_pCc{YNp?420b zFESWOKn1M>`V5r5qV55FdJVpQ0Kfhafxa13JV0FfqGh+}rEjGWRwbRB1r?!)t&(U=3V&+$=*TeUO zt`#BdRw@Lx7iLMWl1XssU=s%%w<^6=zt1b(hp&j`0^a9(fOYrlim1Ow z7q@&>{DMWPK@uC$JCB7}8B7dsI)xC@{ZJd3o3De1;3o4+h%Nq3e^;YqEn?LjtkD~1 zusZrZTS}D9Yd*Hk@6ox$4V(es9KHKd4TD`X#BS+lqG1QbMn(+~lJte#aEk}W$MvBy zoMrI;g@96PXGyM-2g-wWo9+UuoruCj6i892Om{|ak%zkol+el^yE`f<*9^EY|M(Zo z3?YuPsk4MJ#)i%kOuh^=%AFF-b`NGX3wO8-vl@ZNSgrP|$MC6H-qj}$st0v`4Z}~@ zaGqgd4cE?5>DF+PHJm14m;Y}K6YM?b)xfW0T3Wih#7f9vWv?_%qtjG%N86%$5e)+r zgxJ{I<`Cx8wup7TE`LJtfJfrPxhG;1!VG?mm%dIOKS2~X__*EV5P!->y3R59%)u-} z5JfAFa^|G?hsvyWmy3S{$I7g7dY$6WI#uV-k9Qq|nWSZ!1V7QPcP6x?2&1$_XRzT1 z9&#UoTIc?sb2h)=f7~w#xztj9SjEdv8Lehr-AFNhi{&e*kj$R@eXl literal 3133 zcma)7SyL2O6#ni^!z?x+ARrDXi?TH0xP`>9#3dr5qZlzDY9j4S!!!;vWat4ji&;#} z_M8`=tV)$HJ|tB#q>?I==lqboq5RTFk{#&X8&%uL$4kX;Hu6WEcoqI0I>q-=9x&dg+@&Qdz+Itm1r$L7rh{RKo! zKu=oJWt4T+| zwRY+Vx>k#h5W@1bO~)351K2H4`+|~$(T)b`*QrBCg|xbLY;~<39W|&3qE`T6oC9`gw149U{}}6GOdc+8S7kr?z)w` zXkJed>ap z#vC(ouqHwoELsC!1v}Yko=w9C@aGqt|Dxgwx-BIgHbY z2XKaYKBp!fXK{`)Tr|^pYjj$mzAM(ft_elaNzoh9wj8PzVa#;$5ew#c! zdBc=9*v1gsIpWO)jrSC?rDIwm`*|qqm(pQlma4Eb&bX|VdOLLWBdudj9@WtGe9oHY zV6l?LfI)6jTTV)P&g*zjdRDLZ^iJEcpu>@;+Jb$Hk5ph$M+OOju#9p^lGK9HLy38z1ZVq_{CDd3>hh4n7yy!k2eGyI?zZHpAX> zf=IFWaaYHe@;t!vF_NK`$mcH2X9*M@%jR3qqa-yg;=ZX4qn((X1X+f__+CEfq&6!bJS98tDv2Gn^Lbce&ojL}uCR!P9&Kj$z zH_BJgXjJ376-11!+g8wQ_*bw?{%bXULHpz?_N<^|&Foq;4Wnjn0sD-IyxYX9{yyyi zDvjPc?O*{1?`Wb<>wSFx>0dt*&5u6*KTf6~JB`_f__vk$)N@8gm{AM!>0vf~+&xCN zr^q(W)3?xo2{hswzcxKzWrV|S26zoexMD7Not5IGq}5N$r>p@C689qG3~^7x8{Dmh z?~bdZp20JYr&x&|JVVnSxKH5LTxRoYO1Gp_9=%dI}hxpwZR*6JnliG!^ZhRgA8I)vG+)SgCeqv71`igAQ~m zV8abr0`ByH34`-q4LVu9a@Ih|*Y1&7CK;(W!y|KXP#R4ITvDuxhT$6IbM;{p^L_!u6a5Lv&g_(&GlJQgNd$TGJ|@JJE7Xc(>$S;f>3C2%Pl zuumcOp@xtVHeZUt?Lcb@*o6}e&xh~9IUZb87M{VAzu|NNGxt!lapR#!hv)tRZph4C zgWtoHm@JDcgg&ntYJ`pZ@V2u}i!?$q9OybL0xeF-e79T}Q0LBj)4& zEk#TtWjP^SVj=kdMnH&4AL+c0?H;LLsXnQ{vo5LPqme>6*BfCyKbYdb+XZ|&(W@$` z$QJO$gj-Nq>#0&zI~4iHYm>2!6A_pq2b0_roKs1(!NLLlunuuAj+Dy5ef4KcIh?^) eUJfH(4z--3as>HRnS=1DY>qIEuZiHpH~#|5s9(+i diff --git a/bin/WidgetSinglecolumn.class b/bin/WidgetSinglecolumn.class index d97d871ef4ce6d31ea42254f4db6a2c2acdfaee1..ad5ead2c2d2fae299a8029aa049a60e07b8298d7 100644 GIT binary patch literal 2118 zcmcgs+fy4=82_DI*bk#3sO8EqPQr?l(w`Kw6$SM+NKrED3}$f8#FA#84@@iUrFcmWKnaRf}xd*nq?)OZ8N!OR z(6b;A7_oD@KqPHg`gEnZrkCcmHItU+w4K$=1+8RAy=DwBPFVl~%C;MW%CQ4;Fc4GC zmh^SKRMK--bt7MJ1pM)ylt6vKRWmv*N75VGmX)?5!zn)9pjSO9WYVo3#3?Y4sok+FUWJ55Yzu@kcBPcn z#|;U~Q4hO}VdYIdYnzp#)h7#A(SewXIV4nMq?pGk71yz#Vo|C~SY}!kC#CrYRusIf z;uYLf@hVnX%D(1RX!7V9vMO>if{t|+d7M&EP+?$0#VwdBit>~tg$g!s?batj9Y%@#A$mu%@=Yi6;E?4SZkG;KMP>F#ME95v04y0A18tJqL7SlNwza`~<@Zc^AB};tKuh zxOXq{HT;AA%bkfT0w3b_L}wMjX&USL1C+}9sPC=fkgL@9eut0`_c6vDsWkZTBh*X5 z_Fxr_^sXIsRp%kXwVnHDaZS;{#|XKr{y;1$!$($E2k-jCCx5&h`+~*z-Ij)NnCmXK z)Qt#BkFxj}OFw}p5yw+Fj~}o;Cx2mO z0?+KgiHnTER~iw*c({rt_U3ztX4#a-Q=Pj#=oY4WM{5ZMOFv5s$rhU|O0x2R{(D&Y z=>KA+SJoX3RB>dnmz}im9}SwToPegFnWNSkTdnd%evG{pIgcKB*U-%MFaaMSL}P?~ zoPbY|ycEHoBzaRLWtwu9?g73`G literal 1365 zcmaJ=TTc@~7(GL`7M1}DDj+xS+E%oRfEN%ic&ipgG2rEep}VrH+g;OcMSU~zSNP_O zzW8FI)%f7E@fVqRJ+oa5(MUGC+4;Wt&YW|;Z@&Ee_zA!WuBXr>(6!)N%XT>D`pceO z3cOm`Pr(rAZp5cORjs)TgqLlRrDO`tt^Xjdw(Wj9i!ciY4c>`Gy$K;Qq}lh}egEtcT(bn#%(3;Y*2MWH}Lhw zlM<)&#&$xmyOF;Y+ou<V6|)?Swb z8Ux!&CBb_I7uwYv zjZUsuiY{y<9A_SzW7u!3NHSMSOuoX+Tz?(iGr70uo8o8iIhu#-*slN0af9Ez&(Xq2 zZrm8&Yz)@1e_=RR$05F>NpF#vBT3KV>S(&R-&w3G^*%?IG8AK;~*i7s*U}Tth)_$@wqoO1a z11kd?4}%y3KO+NAcxFm^YDsWTW=d+&M0ss(uH?kL{lf4)fY8f{IEoEZh0Fqolnt?$AXu2c=Cy*ru=Cc9C#eqBq1~vvB23`h6 vAmn4<2a@bSF=H^Ffq_+P8v_%%QF1_!$b*gI0V)G3f*QrhAOPesF$e+x2KORH delta 239 zcmZ9Fy$%6U5QV?H%P!Yt{c9v>X@rhKrPE2M#cpI1QHWNpUYU?uNKT>Wv(-FU4*hTwT^kM!+1ZDQs&5lVd1awRwNyw-q$VX@`NIx|v=BIC@Z?aD gB`502tovbzH&5jMqda0_eMcFwiRl}qC<$4VUnL+Pq5uE@ diff --git a/bin/WidgetText.class b/bin/WidgetText.class index 28431f9e71e3a8182f28e1a2364deb98ed943960..c01c10be629e26e8e9a3cb65ff0b7ae0a39f7ba6 100644 GIT binary patch literal 3353 zcma)8X?qh@6n<~hW|DLYB~Vs@0v6MNMnO=iiduzM0%}uR3#d$!X*-amBoh!^!F?Cp z_g&mYw4vhi_{k6c4*!Cmd>-{ZGt*>>^T7{u=iYPAJ@-B5yywjP{`a|G0BpcdF>J)0 zQO@p);O-dT`($B6F^a5)Tnrjak&MaSxQ2-sT3v}1!F~+~WHTSbQWRvTCCa4dr3B6&E5 zNAPGAkKu8#`h+Mv8NrAwo)U#(1W!lsjD~X>p40HWLNsgS^P@)gKt-WrPkO&`$Vlal z;&^JHS}Yo)d9z1B&smkpym2ILjGB3cW$B!mDj2psVHuTzQ7oqH!}*l6N#&@Sv+Qk_ zna?S#4Ai`7MuFN|#k32hoT;Gt723J7t>XBAIcAp4VwPekgs--WmVK?l>O?x@Dh!(U z*gZb58N1A5J>5eJ&ApDfxoN9t?y43>&GMkQp%71(=%~%GQNo9=9!kL%nF+YUf*>7gjGOk5 zk*^Z-f<(7Zrw$^_WR$A5LMS07=akJt>5$pDJwjhR3mtwSzA%OFKIC2zu1@9*n|H;k z6|?MWaFHoh%UN@qC4rbbY~_eaf_{mFM8{SP>*&GNjGT@WvbY96Xn0n~NxZ1AJcuCm zw9D~99amwCj+gMV!jd3$hfg}Lz?IBtS7l2l>Cwo?Eu;I*tgYh}^yzpNujzPQP`rUR zb&QDhP1wwoHxA6?K*I|<-o`sR-o<;fOuDY?cpo3=_)vzAWcXNyPjE`dr!xCYW}nOK z3w){JEgfHDklAO%oq%?BRdjrV0S#a2_!h$&PV4wiP=1do9W|Vlo2OYPZrrI)hKqkP zY4!1&Tyx{@$rQSR;w06RPr2ZC%3Ps4NUv&J`ATYrBbn;tWT{LB2~`Fs%mUNg=9Rg7 zE7P8ybw8^$M2@qn6M<#zDmyh8DOy=`mmx;OW2G{Cg~C+D zeVR;wJ>fR8jCGW;mqy|V7tU@G+sdVa>-CoZ=XJ1?trAkVZIZmPY~JE`q*N`EBpUB_ zQ`X*4nhAe6H#+Y0FWsYfd3*+5n@0#A}=N!687G=@zKMR!%O`$0n57p3|TsMW5Q-~%h zi`EcZ{~Io*xRqjk3T>3O#pg8tjJYEr&f7E7m{&twwA-jHhmtkS=d<8jUKhd*9JgQ& zM*+VEF~V=B1096FoDL+|r7xw%_( zGH|vXeGExI=W(cicr>KpW(_+uq$yL_iCta@cA%M>AULAzST`RFr?Kc)ES^G#Ky7lM z#vGOHG}iB2z0f^Uzj{7y!L2l?a2p0Z!<(En&`P^4H7xlROHbDghPer15I=Nh-s%}s z$Y9Vj@dslgdM720zo8&6#&8**3-~N=$?p?U4J%smxf)guI|`1Z)7z+Fl}IK0%Un_C zJ~>{)>KXYOPo5K#HC#A+3L*BH1JrAhdUAo;U->WSv_VWXCktpYQl20UyK?lu1V$ zU8s`8hxvzcguFTG1K3*!*vlaG5txJ^1l7YSe;hodrx_K=_}=)%E-I#dDZvC*7csv{ z%*`(5sNi-0Us6NL!5qId$k&DoYZ2vL4>CFrk%h-uhmRo1pZF9WXRSSnoA5OD;2B^3 v_WJV2x>>V|Xm{5s-{+xU5x=aZ(F;bJ8^|Qw=U2fApZyh{eZ_mF`1bw_7JMCU literal 2935 zcmah~`&SfY7=DJ!?y!u4tDvUhqM^&8fS8(qSeXb0Xf8r%rNi#HjPB0D?hM|t`~7bB zGOf(+bxw6;_0*};&;3XJ(&>3;23T~fALjPWdwJgHectc;^Y34N2hf2Zf+$lE8a0zC z!yY!y*g;e%Smb@j4cj)YR1g6LO-Z9Iqucg`spm7gWwqI-(`}h-(nz<(?HsKJsHD~*VR0tpkfalLny~m4K-M%pe|a4ztbj3GvAGz6hmVJ#Yih$yHoDp|uitXEK;a!ds^0}BZ4Qqe^G?ICPLa}ZH_ zl0Dx!uOTLx0?F}I)?q(3G0}hW7D5YJrJ^?Gi#Cr4v@IH{5K^&~dA6w7#z%+Lu|vb% z*hxD*nPfwvCAs#%lCmJk_{vhr-FAe~iB`$hqoEp_ihIa$Q@%42#C-~C=X-Eq{G^ev z#qxd)d(lfCEi++QdWL-r-`;}|`mjF;Hn=E=Co>HXV1VqL$mS?V1v^W$@Muv)FLhUQ z(UKRaOVAH#I3Q$;szj(l<%1dyA?~%>7j>*OPol#G@+W0N@?i}l(u{yJnbd7V#Y3c@ zov0ZwEn~>Zj2pROeLU^fo=xcK5j|(hx4&4yAAW-_XvUzQCGCuWz&WMM*sDGOD!>od&M1id?PN<&&!mn5>8Nyj!M3<@vbfMrh@DV`RQnw7H2^pH_vhUT3`v1vl`Bc zmr5kQbqgGBMNZzxc^y))ELx&(DxP5NBD1D^6`sN~K|Iau^Ai+L--wxy=n*TMos8s!eZHP12eZFfagk2vB6}>2$i^DtW^++$csUz@ zmp!4lrvMuy{r*J5r?@~3kaNKyHC)y3Ij*q}Orc<7F`@o=77^jE$QB+rHhaFrZT4bN zpLB;t1qZJMLn^+dxV^Dsc4CWXom|4`HDzFGyp2sTw94j$MhdZezK&GiV6kc@rCA zzoKRA1~$*2J>0?X@LjSCw>$A3K$g2U1CXx zSOEul4Tnb=;wPpr!x-tD*C+ zi3Uuu84e;G#zq`rtcX_@j^bf{u|UR@(&g<@W-8^QF^uT*9F zxQF{>Wja|vX4ExsE1B|t6kyA$6y@7ax$Xs=o?SoVnNGPO3phVIUvoV(gXd=>qO7Z# z+jtBqN z6EA{OJqPFQ5^&xr0cVVGj{Xmv_b3`q=ND-$rFGxL`{9r0#7XI15vD}R*HL#F4Y4vA z0nxoH>?U``{spr*vIZ87Il0_@MZY^A8R_Bod5s; diff --git a/bin/ch.class b/bin/ch.class deleted file mode 100644 index 425b726eaa41e56e09b81901e1123a90805b8da1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2842 zcmb7F`+pSG760CS&1M+FW=Uv}h#?Z(M@WP!Rsz;n0;`)Kt_?0$&1QGV&StWk?oI&H zhkanRwXN1Z6!3voi?)`QKsFHyqJ7!c|E9mS{WSfanGKJI_Va1-*_nIpJ?Gr-J>T!S z^Ot{}y9i(_{;a{L;L8^^1ms;)P?ka8THBLI&nKii#1|> ziaf7BU)#cGX=aO#+i{16Z9M3tE%BdI2*u**NxMIc?FuU^UjAOka%@w)cZkAGMB@C7LzDej1+QYrCUjyXQE0*_+9hO9!f ztD?*B3_OM}5>c*DP-wfl1bfCxX5Q(KGwcb1nXU=4Q8_uqsCkG6bv%x|0ATcu{~f?! zd_=IvEO?{dnS9kW%Ld*>SV3pmg&^~=qvIENU&Ak1*?m@F+;kfL z27ZNRg{JALLe4Sov26{%Rxox=TW(I9%F}TQrv=#SI?iBD!`Ukijos>)C#SVy<&Z*4 zEZvB97m1ymmL^=%$)9kNN>PV8`|h`Lois}aUKBz<6k${k^!u^6xG3u%OBH@6EhW>- z)kukY7uO%e@f-`w7S}VC>1y5_wB-KN^2J^eF*Y!rpErB}KDol&5id2qeR7fUt;-$C zcaXCy(MsrD{A~(fKqTv*MKqHQ%%Uxm4bGxHlMT&cT_&r|VtwWeI#1Knhb}&K zzJVvu&Ao1RXTgkQw~;r`b-~k?n8&6>G&YAsA~}biM9&<0ucTQ+I3Sz=!H8g2p#`mo zx+y!o1h^Gj=)+X}e1(`^MxS*7@cc^$@eOcBBZk8ZxGkMXM(?bnpPTx3&Z2X8^Tlle z|F+;sytBD2xOIDIZK#gBj$v2gEbcjvfvnhKJP@>7aJ|;wWc^A|X4{-VvB7 zj;;;S?iJTP^LXR~?DJvYNep>89{;~{EG2t#9%EjzBR+K`sM>;Ufj1ZTduh#V#N>#$ zB8376E}YTPWOSUzn}_8EUiKB2Ykd#X*S?-_i|YAL=N7y;8Z9r&+JaA(d%nxOQ&;B| zPW`Sl2FW3?hMcnf(N0#^lG7VF>cD#bZ$u}0DA*~oe2#*-!1+HRhQA@9ZbFYrVY51f zURMLVJx&`M2q*_t)Tn`oD#AgUB5PFzOjFo?w5w4Z8Y+xeSOl+!=4S3~3>7y_sH{(7YF7Lv)2 zFmMzbS(e`9B@EQ@tw0^$PP#UI7VsU4WDehR1I!cX5IN|yit diff --git a/bin/oa.class b/bin/oa.class deleted file mode 100644 index 0d042008beaa97136e45f94cc0b92feb62e9d661..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2864 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 AoB#j- diff --git a/bin/uq.class b/bin/uq.class deleted file mode 100644 index dd409e33c4a74e31d1645e909d5fcca6ff493cc4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2742 zcmbVN`EyfM7(F*jUlLvy1GFrq6l6(KXs}e!21Te=gDH!x!GcO(lh-tDmNt1QoBOT^ zu2jW+#RU~-N(y$yA9cpR$q~=J2`RK0m~lGq-S6ez`+et}@7&wJ|NZ?B03Eof!6slU zOlWX$jO7J{A>fFl6Cs94K8FNqb|f=N>t2CvzDUNjg6U+&jOC1BD;P^9&5RZ7z4k*W zGHOg3!IY6n1pBO9GLr~}{ZS_D&c;m-?5Ne@MxB7&=a0G}(4a$u%L6Z#Xjm-Ja`XH; zoLDNL`68wj@<%l^5%uJR2aQ-RGp`Wn@rpVRI_ zG8H#-F05ho-u)i5;C5MkoxoDxLIwO$4>rK3VWWV%Hye*+4er+AM?hdn!n7*#g)^+0 ziJ1axeg0cfa8tBRIyR%7T{okzu$@hq zPf*9*=n`0DWh2?6X0F@F6Vehwn!hk4x$n?%59p2>V|?7q#05526Jf#LvWhCjeL8l@ ziY_Z#vW*K8bUGW)2gl9ak-V9kG;_h;{VqH}LO~B6L|DT^#7IH=Ov|Fx@;dh5VF6Fx zw7Rny%RFWYY^;K10TfzEpguwu?=7T<%v`@Qlp-{l`2)<}}a#35bA zepb$cK}Yz_VscC*&`5U~Qje#KwA!@p56OuUnlZ z5%XXWLmGHcZRwO;9i#Z{PCCW@3z#~FkzfH*Xeey12NR8W>#i& zq?GStDbvVl$Vdl`$#mm7o-pT4ADHIs|Ko*UtYIHvZA7D&n2ZQSx>} z@>#^M8O}L49uCYv57;lEzD*Qy+bkLf0&SaC&0tv(D`(L%;BB43+RIo!jkak7i@39h zP!T)T)b52--up}Qm(lZ^Djwl`g#uE`f^~#Y&vyfw*}6kmj9$(MN>H#D`}jpr*pCAQ zDx*ixNh&hxLqDkrcCM~WVh=~Tsy;A{=%4V&p@_$1VLN2uI;BM;+up=@nJT82wv>xK zuGWe=B5>k~a^9WlM?lO`s8PFCstm0vtEj*gJaSvryig!*jCm=Plbxjcl0fJ(jzows zegz`}GMGhrz|J7+Of|&g3?{Tx!?D2zeXz}I6)`!3<5%#M4F~67c$HEue6L0=TG7RZ zO9dNCCCZQ-*pBD$JOM~nFI0fo)ha(5`QkaO3pm(yR-IGs6@I-wi&FzLI9&myE0=qxd+C@`g*Ak8_2^E9q>z!dMc z@97;kPOJ7fls<0Q{=r@igF9&yCw?e*E5wCzlNM+@bP3Um3~kEOB`4l{o$eZbEFT;V zKT%u$XJ(=co3epvsap&s8=rz|d1=v%oK^#IOGW!@DT@ From fc046370a59b6ac7ccb1e3f1313d4fcb6202713d Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sun, 18 Sep 2011 20:27:47 -0230 Subject: [PATCH 06/49] Updated to 1.8.1 --- .gitignore | 1 - bin/GuiApiHelper.class | Bin 0 -> 7863 bytes bin/GuiModScreen.class | Bin 2586 -> 2585 bytes bin/GuiModSelect.class | Bin 1900 -> 1899 bytes bin/GuiWidgetScreen.class | Bin 3347 -> 3346 bytes bin/ModAction.class | Bin 5927 -> 5936 bytes bin/ModSettingScreen.class | Bin 2571 -> 2552 bytes bin/ModSettings.class | Bin 19538 -> 19177 bytes bin/Setting.class | Bin 1954 -> 1935 bytes bin/SettingBoolean.class | Bin 2255 -> 2236 bytes bin/SettingFloat.class | Bin 2979 -> 2960 bytes bin/SettingInt.class | Bin 3079 -> 3060 bytes bin/SettingKey.class | Bin 2812 -> 2793 bytes bin/SettingMulti.class | Bin 3503 -> 3484 bytes bin/SettingText.class | Bin 1806 -> 1787 bytes bin/WidgetBoolean.class | Bin 2910 -> 2909 bytes bin/WidgetClassicTwocolumn.class | Bin 3343 -> 3342 bytes bin/WidgetFloat.class | Bin 2965 -> 2964 bytes bin/WidgetInt.class | Bin 2855 -> 2854 bytes bin/WidgetKeybinding.class | Bin 2945 -> 2944 bytes bin/WidgetMulti.class | Bin 2343 -> 2342 bytes bin/WidgetSetting.class | Bin 1968 -> 1949 bytes bin/WidgetSimplewindow.class | Bin 3272 -> 3378 bytes bin/WidgetSingleRow.class | Bin 3063 -> 3062 bytes bin/WidgetSinglecolumn.class | Bin 2118 -> 2117 bytes bin/WidgetSlider.class | Bin 499 -> 498 bytes bin/WidgetText.class | Bin 3353 -> 3352 bytes bin/bj.class | Bin 0 -> 2968 bytes mcp/GuiApiHelper.java | 6 +- mcp/GuiModScreen.java | 4 +- mcp/GuiModSelect.java | 1 - mcp/GuiOptions.java | 20 ++--- mcp/ModAction.java | 145 +++++++++++++------------------ mcp/WidgetSimplewindow.java | 2 +- 34 files changed, 72 insertions(+), 107 deletions(-) create mode 100644 bin/GuiApiHelper.class create mode 100644 bin/bj.class diff --git a/.gitignore b/.gitignore index e660fd9..e69de29 100644 --- a/.gitignore +++ b/.gitignore @@ -1 +0,0 @@ -bin/ diff --git a/bin/GuiApiHelper.class b/bin/GuiApiHelper.class new file mode 100644 index 0000000000000000000000000000000000000000..35abb7765a6b217590e9606cef93d71fabecdf2a GIT binary patch literal 7863 zcmb_h3wRt?b^fn*SF>7;?099#TKTnp#MWb1vYp6DEMu@7V;e~}jZKW~QZkap(k81} zu{-Mr(3A!fnl|P6@sR{lD1D^;+Cm79l%U25eU}z!OW!YEZ3BJ33n3)^&%Lvwk+mqm zhy8hW_RhWM{O6qiJZAmr7e09vz#cVVsiqVZK4IZX5|5`4liN8p8Sp+{9U>Gw1wYGp;L}_ z;`c3lCWVdotcA~|uvr#2;}2xz4=r_rh0mw34Sy_W|3vQow27BLv+(CBbmK3Yc=^i| zhH+H@{FQ~jPNC0y`5RgJTMJ)EVGph*@kROkQW9U5&#wrKzq9ZUDcpi*<;+*bjIW9C ze@x+@@XyWo7yPR{__t>KJN`p1|0$dQOD_K{%Kyj0|0eN&NqjwtZzS=Yg>Ndfj5`x| zjg}@4PWXkAr?740PUpPSU-b*c{)6KczwAu-qt5L1lZBbtqI=l$%a;ZfR!tNOOO7>< zSADZE`Y zVZt4Cy{f|2uH_rMM~+kr2WJaM-QuiUrtJ8k(j;wLJyP)8#y6d=D0zBS;hqbreKY4wXtp*YO7HES-(4ofyB{M<(6=8OQgh3r=Om@w|Tj zLb3mJVRFiqK&S%$9pgVj3xcH`aB8|-x*!O-XH{jobYY0>7}B9tXpN|;p;1UWRlg+L zXuVUOV(?n);8AFt)=p9wGGbO@*h__xv_0tyZ=G4~O4b1;yF&H*;=+J9XCusc33mqU z7e-xce;`Z}O}o+L8F$%H`3k8S=Poz&bj9^=bCdU79@Z%#flDa)~BtAXef2?;oHjYjq(SjIOMhS0QR^qE^Au(Zfa@ z>mL)O7EN0ME{r+IQloHqWkYKDR^MwiF$`uRAi{|KI(Nm)% z*B*(BNLGPqf2Js6So}!d+AjH2xS^}A+}ftW2s;7>b>B{rBH1`+)5_-+a&74}B;dU_ zS-N2E_ZPf^e}F~14qe1)aTa`*iY8VFLrON<8Mi#;*7|#s{$}d6ZB&{^oSGCy>WEz) zoyf`x`Asx$_#VYA&z*?Mns1|hrze|i>0CCfXE_nz zPrLfCJTWhIM_MvKDcg?R3E6QV=H_52-yIDi$AvLyDODf{l;h zXB1xhlIASt7cHh)6|rmF)u=0MGucYvjkK{6;4`QzgxOm!05j4&m$y@a^f3$bHfJkk zdqn0k~ZF;cH1bcn8L1lazaX&9xsJN zs;91b6s(%r;Om{MZ4@np-B)iD!C-dj(NU2B~D2%8d|GzEIrY> zxxCATi8v^QtYuLG=W<#!Zr)gKcZyY(Hdebc3Yo6x*xMZ$u@$m>wivWpNnf&M4f~o& z%tKDGXneFT3i7t9=jrzsK}7iV$ZS&AkU(dLhHnL9i^45Yfy*0Q;D;zyGvA3y31j#| z$RQcUT7oXcdXxhfxy<)Dz0Sn#s^8JRjU40edj1Jopg@b! z-wK=S1B~ojRXXpM%Y{kzs9Ttt=E$cQYj)ig#79CMI71YsB&H@b^1?Ga>k7m3bzIlI zOhAy}Y|cr)WMr~^(<_Ul3N%r)MBAC-Tkf^5@H?ZrmPfxvOJZFzgVok)w{>0^f8v~k z{7h7PZSvssIj#M4BJf(+mN~bqHgI)eV;<3(wIj81=uH*fiBhpT<8isY>sVBHkjYE- z%TG3@d~!K9TV-Hw{?5#c_$;uDUM&RUkLV6mUpp3A(@y2Mo@e8p{#fe&P*x*(JM412 z5&{Pm;@0nyFAf=xQJ1xblXN3rW|r~kB?J;w*wGe4$WisS zBcq32jV&DVhxvnM92sd{yvxYoz|RKhXMFkt`u-HZv-RQXiMa;egvB{@qAli&ogM`NBj=nSh+bQFDDuvdGU*nV9maSIi5+(BlUD9 z-aCipN2zH8hH#j`V-RFLNb!0CNg9{NDLy@o9W-Y@KZh{Rov*_YydEbpq0t}Z@1L9b zW9JWXEx{)??tsHPq7E#QyK(LoSDe8l?;7--i*wYu0S7RpHqglhuBMSle+#ySJJoa8 zI%MIl7VXla@d!T8eHQl(<*#PqS3eYZ#9rc&L~L(kTcdcSBa_ItHSWp8dC{(Dq${4y zB#h+aAf=dflZ zPZQD$XdTPXW9`0pCf+lLwoF_IX2NKUdVoefNLGFToA5A$^i#;=L*(U$wNW=3O`$1! zQ6ak}Onc$$FeUl3brt6+Gf$Kka4`r|66$$uvT#YTcDt92bPCqiBAp|18&S9_p~lJO&Wi$>Q@Mx3Lgnq(FZ^gm38NOW&x6jnck&INQb zR_jM|J+V1#Sir`y+&nftx`54G&T@GUTf$YIi-zb6WZ#zZTbqg_U9nF0To#aFA z8Fcmv)JM?F`^_|C%f~}p?V1)}=k*)R=5L|{FCwdy#*@`{Z^2LCe(ncLq@ZBMB*QP` zCy7i@G@;>nbXa(Y#oKq{T>+M#qeCTZ0}I$TMsjSQ$MwS9UPf)l9Cl{nvB%N1fbKE! zc^*Cc5}Cvm^fCk5GKob7b&3$xffkj)I@O7dd@1N=ZtYPUBat4!y956W=$H$u2JjxP zN%a}fK8x{xn7Z&@wT-~KY3uvc^|YixUe*K1uc5uNzm0fuJ-v@3Ps;T%s{M~+m$BV7>Mn|_#pWuj6aHpSs+ZM)+OL(izS7|u&9`pcNf_# z#8f*O#CvlA`)D`Uatl0)q8@_8%UdtA%vprA)y{G8-XPW8^?u$-54iED0dWeV$8*!>uGr;n29wMWOoN7u0-reDQJ!Y!rkHRWq7TgWzAvz;C6diJv&WSl7>ALr-- O4mo_E#NXpKH2ptl^%TSa literal 0 HcmV?d00001 diff --git a/bin/GuiModScreen.class b/bin/GuiModScreen.class index 9149f7b3a4a2bf80ec18ba64a019e4b17e7621a0..dec80fccd92eb2562714b9398ef1ef0fca3849c8 100644 GIT binary patch delta 168 zcmbOwGE-#33`WL+$uk+(305UqGcvH0B^H@7GB7YQFlJ7UV0tA|mB_=;$zZ_4P{&Zu z!_dH>%EM4KIgDA2sjz5r9dn9SekxFxxQ0(wVp*boPGVlVesD=qW?s6ro111B(3EUO z2B!Q}AR~1$4~sEl+GGb7S;n-@aV#>7AR}s6rFaXAtU*eZHGF`q$%QPUlXo+6v#|!b N`#J|~KE)cq0svW=D;@v< delta 168 zcmbO!GD~E`3`WMZ$uk+(2^JPwGcvH0B^H@7GB7YQFs4q9V0tA|SjfZB$zZ_4P{&Zu z!_dH>%ERD3IgDA2DJ5}o9dn9SWj;`sxQ0(wVp*boPGVlVesD=qW?s6ro111B(3DI@ z2Byk7AR}s6rFc^ktwBnaHGF`q$%QPUlXo-num!pM NWR|3EKFJ!u0suZ6D@gzV diff --git a/bin/GuiModSelect.class b/bin/GuiModSelect.class index 58ed47a55f0f0c82a70f33c3c3b0d629953073bd..b17a886ebe3d8f8fe484c914d156785d0338f84e 100644 GIT binary patch delta 120 zcmaFE_nL1*0wYsl(dHyZb}*gIl|qUYhBfpAwv!lbT$@$iN!p?&};d z`8=x!Coh9A10RDJ1OH?NwynCt46F SL4l!yL6M=BL1{7*dlmrlh8QXU delta 121 zcmaFO_l9pn0wYsO;^rhqb}*gIl|qUYhBfpAwv!lbT$@$iNol?vq)P zI{6%{2PYqcFatk>7=yrMdA6;(A`Gkyq6~sSzBmvnGe|P%Ge|K+0@?8latv7v3Jm!S RiVPJDN({9O%99z{vj7g47>ob_ diff --git a/bin/GuiWidgetScreen.class b/bin/GuiWidgetScreen.class index 713b02a4a02ca9907e456240e4e2aa0e095a5dd3..d5c5a5fa8a19f960bd02d97ec24ef5247850183a 100644 GIT binary patch delta 50 zcmbO%HA!m2ITog>#LX92f|z;J%B&d~7*iM-I5m9IChK#2;jT&qim(Q``#J|~*5`b} F3;=y&4l@7% delta 51 zcmbOvHCbxIITohE!p#?0f|z-;%d8n07*iM-I5m8-C+l;3;VCQxim(N_`(&1+Zr0;` G!VCbB0}lEC diff --git a/bin/ModAction.class b/bin/ModAction.class index 2876ec2b09342ecfa6bab4c95097d7ab0933d61d..2f36d94623be9d2a516f46e3ede38cfa1ca54acd 100644 GIT binary patch literal 5936 zcmb7Id303e75}}=n|Voi86YHqKq3RABuo-g1EK68)hEKm|4;{Gb~!$ zQaQEOu2`+oy3`G8)dnkx6%8(RskPSH#nx`t-P3=1dfIcWwbI}H-piXeB%EWZ_DL6xm;g~gZPeE zf434r+#vQh8n{Wm-7GKPlgljz-jb2q4BTFc8r)&vP$lYcpd5F~{rmFqE_wPvIqsJG zJz{pR4F6C(42kQ*a=A|~KavmkSK_kU#PP!hMhzS*$0Lt0WV5`xC+jY=tcw#W(^kGeo7fObb4In#b#LBIX8LGhIu@H^b}UWL)qZ?yQn6f) zHi3MsuXMVHydtY&*lg|85L%whB=cPw&TR2{a!q|BuJ7@l7Hrj^ugNBeb#iwyV{Is; zcUbn8*p8G!pN+>-TVr-o-rYex-=8FEXwb3*;Kag*K{uT9KM;}+j4h*hto1MI1|!hJ z@qQ~l;7j(>mhmzAM_g(a`24TVW>Z!yL(;V*|F35X+l5r8RQw)}1QOwR_^$pwuI==yaPiu$gD}VMlJ&a6TEkyztw6CK~E>ajgHL$Lqw483$WG1pYei;Wms zg3jwD6R+brhTEe`G2(G7F38gxcvHhE3i?TFkE&6OZF3=$Po^zTlQe8hil`+M5obe) zs3NtfP`SuXh8>HP7Od>9R>pGp5FQo^sF>P~BgtH(S;OkJim=`NR>ouP|6XMA1d9-S zMg+#o!Fb=zD%70FUNXP8W4#lb+OZ`jU)=M(R*59CkxVupNyqZ>{z$&x@^P?GL+6@o zA(c=TDN0t}ia6RD*`3VyN0OO%s*tb}d>~z1g1Z2#U@g}16i~vug05lCNwYOZElaLA zu~dR7rNvL~{-?oU0t?ng9xLivF7$V5afd8tE2}PJnUys2m>f?@=2qo$a%3XG>+Ecr z+lXH=9J>V<(pxgOHa(c@f z`Kox_Vs@EY=8HAL2&(9_*(4D@O*_mUt!Nz7`?QXxnYP`od_uMuGbj92%^T5anV`=qE0#N z_7TuS0yZcxbYoBc9G-iot5~q|%I(k3!VN_j@Df+_*Zx2LUM=-f} z$Qho(p`JijV;j-WYHO6i#$il-1l441TJQbO% z%pAt7>IOa!qmgxX$}xqsjyP*rSyIV0Zp2ZN2z;8?9KYzrrKOY04{^?yFGCbKXoGU^8A#i)+~~*C|4zWt-Ws z{YVn?N;G*iBs>}tJ{p!opLra!5O9JwaIwTcaGYWKhDgnTfz)v>eiD|-sp>`oAG>rL6^?LnDnDshquen|yI)va-opP{X!=d9Z zGJt6epieRcLisx zHn3Y`bM0ZRD*e?q(o%GEfYCb5)pZor+p8%-tvziVV{f!=Yu(U3x9l$?S`?3kY%vLi3B)CD%5V{9Ex(C?Ew~{6yvIW88 zTsWjkaG!J4xR1PphIgU855vGdO?!t`s<9g{cgW?DKS*SNEu}Q7->lj&6zH6W_S-T4 zC>DAu)G=O#M)2WdQAg-ndnsYt4x!Ceuj0H@$IqjBbsjrR1ZR-HbG^=-%gqY>9aM{# z_~m7Ody8LRp-jETh+k*1y{-5av0m?!Cfnn~#(sRp<)Z?6?c9x2p%xB&5m&eYUoG87 zH%nyu4!fYc*;SO>BIrfqK~u>c&_D(2cuZ?&GR45(Ira`m|G~ZXpO}h&v2*^dz{)mP z<$`54u*3x`DKk*ktpM)hA>&FHU_YZ1fU_kdo;p??#p3PNr;T9Av1scN%<+|Iwe+AC zLRc%u3~dq`HPiFVWju0b>x4AaC+R&St!C{n6VSBY*r zf_dV5u4GQY%in38Emmbtn?`+}iAt>&leFoWOb_+iES#b>V4l{fAc?L{qJ+q%B30Mq zfot-FqsbKxm!R`VP?!$+gWQGMMc_gZk6TA@M)AZWfAobmpUT+mi$CPK2(h46a}7;? lE4yoTsCPgl;0)>dG9`^64nuPeXd+oOaF@~W4Q2Js{{aywf`|YB literal 5927 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 diff --git a/bin/ModSettingScreen.class b/bin/ModSettingScreen.class index 9013072f51f0d65832bf10d90a24e89d68600d80..a43bfc10448cee57e31836dd22074934c86a6ea5 100644 GIT binary patch delta 28 kcmeAc`5`>vJ)`Et4`Q1o7+G1_ScBYsodY(jusvr60FliJ3;+NC delta 48 zcmew%+$}QUJ)`x+4`M=jsU`ZknR%(nMTu!8`o%@b`kUDpSy|cHg4}&FOHwxrvOQ-8 E0KKFTkN^Mx diff --git a/bin/ModSettings.class b/bin/ModSettings.class index 9c27194d5364b0424f851a1b795645aa9e7353fa..5b288358c55367ff0929d38d25838f799171a7de 100644 GIT binary patch delta 355 zcmcaKgYo55#to;K7*!@Os#fL6y1X#;6QZEC4mbGY?{dIoz6)+?kB3AZuVsyi+T|mVotbp2}m!!iZ4K zA=nCWlr+>p-_o3tOrUyp#!7a^*X&F-j0_Oh{T5V5cO6VEBZC^qLP4kzA*mG*M}Y%v e@)aQ!MhlqpHk%5!39zvSx%)Z?Y(AtsK?4A^b!-s; delta 723 zcmaDkmGROH#to;K7|kX-3W^EkrIzUDX6B_P7bT{Z=oc3y>u-L@#LdWPgiDs0`xgJXwb`n$a6(ks3COu$YCze|I>qF`9xbQo`vX z&pe2GJYiO1_Zu^JCZjpXZ@5kJPOSv{3~V8m(B8b7+l+;gfIU0{t&lLpV!-580#ZOn zU{42=Zwsgs7jC|#IVG83ms)^4q>M9YLQ*RrVS_8}O|BDEVf4ZqaGTExwh6Ga1-biV MmZWZuRGOdx0Db)P82|tP diff --git a/bin/Setting.class b/bin/Setting.class index fe095184699391ea1d91099546c4663ea3998f3f..2af6dd61bf0f3429dcf4e979e53809ee2a076053 100644 GIT binary patch delta 129 zcmZ3)-_O5cGUMb^OwyaTF^VvvxJPiqJSHYNpUs(jfq@8U delta 46 zcmdlZcwTVBJSGtXpS;u({oKsF)a0VXv=aT|qGbKe3z*uO*x7>IeKJc@H|w(YGXnsN CdS delta 46 zcmbOrzF2&NF|&xCPhM(?er{%7YI0FxT8VyfQL_GKQ)V@0cD5jQpUjff&53OKtN>u1 B4nY6_ diff --git a/bin/SettingInt.class b/bin/SettingInt.class index bfe0ebd91507f98fd02a1bbebd5f692ed73037dc..8a818ee481da09d397ad33edd26e8c338369f2b4 100644 GIT binary patch delta 27 icmZpd_#(c+o|#F`XLB&KJ2M+=kh`yQz~+T)X{-QnbqA#Y delta 46 zcmew&-Y&7ho>|1eCoi=`KQ}WkHMuA;twg`LC|Q5ABeOd*J6n*uPi9H#=03JGRseJc B4=Dfu diff --git a/bin/SettingKey.class b/bin/SettingKey.class index e78b67f055a375e00c03c81593351a2edbb32491..68e8eabe0429d4dd1ef02c36bb3212bc96d507e6 100644 GIT binary patch delta 39 vcmew(`cibmIVLVSpWxJzlFYnxo5=?mg*X3Y`o_e@8szTl9I*KpD-$aKIQtH5 delta 46 zcmaDU`bTubIVKSUpS;u({oKsF)a0VXv=aT|qGbKe7nlT@+1Y~JeKJc@H$P`(Vg&%A C>JVrE diff --git a/bin/SettingMulti.class b/bin/SettingMulti.class index 23563316a9b1e8b582c64de0d1882b7c196a7938..06d5f0847146a6a0b870bc1a3d00de6733b8655a 100644 GIT binary patch delta 27 jcmZ24Jx6*&88efd&*m;>duBG)Aa`HqfXx@!?y~^^b}R^s delta 58 zcmbOuyK_=nNlbKbR+1Y~J OeKJc@H}7S;&jtWixD)CC diff --git a/bin/SettingText.class b/bin/SettingText.class index 0d7e641f662628cb0673f844f39fc3b52056c6b6..cbc005cc649b2aa3b17b7ccc3ef78315fb57fa9e 100644 GIT binary patch delta 27 jcmeC<`^~%IIwO;;&*s;ROiXO7LGHfJ0h_-tOECigg7^rA delta 46 zcmey(+sC)zI-`ibPhM(?er{%7YI0FxT8VyfQL_H#n~Y3M>})~qKA9z{n;$YuF#`aR Cb`S~x diff --git a/bin/WidgetBoolean.class b/bin/WidgetBoolean.class index d7b8dbf664279eb9c865a0e8c441f283929e447b..0c449da734f94956fe74aa217d77484585225518 100644 GIT binary patch delta 19 acmca7c2{hJH#-|^kh`yQz~&%!9u@#XG6jkN delta 20 bcmcaBc28`BH#<99kh@Q2N$Tc6b{-Z0OEd;K diff --git a/bin/WidgetClassicTwocolumn.class b/bin/WidgetClassicTwocolumn.class index b33220750b422a370d341a28f8c4b193b840d5ef..0e3d354664f82a2666fd1f7dcfda777d70310502 100644 GIT binary patch delta 19 acmeB|>XX`F!N$fKX+JJ!N$%O1MQ;Y4 diff --git a/bin/WidgetSetting.class b/bin/WidgetSetting.class index 5bc898805a2771e930035f4da3da795586675c45..ba9bff00da58af0f3641909689cbf66ebe881029 100644 GIT binary patch delta 46 zcmdnMKbL>PQE@e&ti-ZJ{nC=m9DT>4qQpv{%;FLopN;RtSlC#D+4qQpv{%;FLopS;u({oKsF)a0VXv=aT|qGbJz Vcf?rO*@E1CGD}i7|6p0l1OO`=7*zlO diff --git a/bin/WidgetSimplewindow.class b/bin/WidgetSimplewindow.class index 37f3c73b57f8b21f7dea9d12f126175baafbf42f..4dbe60671cdf8ae779ea04ac82d7933f4cb527d2 100644 GIT binary patch delta 1284 zcmYk6>vI!j6vltMN!aAgEA7qHt8NqD9LUvM_gt)4@9P@a|nfdE?_nJ;#cEIBm%d5O* z>12ySm;Yzvy4E$Ub*M_`v!l7m!Tk7WAvZ9wU)`@;ZsS|a?X+9gbB9B{?>M!7f7GkK zlMc%Ub!?>Fp)qvWh)HQ;ug59No4jQ?%^Azvyki+;oBD*kORwcU-uEv?+eSM1!15s< zd3o9ZaL3c%Q-&r_|$TN&mE$jyE0>zFSO8?Ok2KE_?nBBZ#WHGmIG*>F?Fh5hsXT~ah) zUHO7M`EX=c!W`X8C}lOFl4M|{!hx%f?T={;e5U6^mn@tS|P%;1EX_k@}26AL@$GKZvNI?TMD zh;-08+DTa{Q`u(vq^@?~64p4KIOufyb*7_VXIw>0uvp0~Rx*p_O!fA&RXPmNz`cS| zdF1M~njEW&MA+T;&zojv*#FHeY>56y(~ih2Hx33Y`JS6xmR-iwGzTp8|2FHSe_OI? z`w)lZ_j8y79N{R(IU&y}PX6yieq}D7?J|Sz(`P6=QCfJMXhZA@nW%W~E8oV26=LcfP!}0V_*-a09JsjP3caQLU&~Yok@^85ui5x4+w_*3Nw-)8&Keq2}RUp=*s? V+78iN?&l4W`X9GfJ}rMk{lCUv;Y0uc delta 1245 zcmYk6+iz4=6vlt&bY{-XnJtiB2&G^!Rcl*Nk#ZLY2h)la&{jI2U@vqmm6;Z05Kv*b zj$FJSE`nMwRq)b~0Oln6z#}0(`3irBK9LyL+B2Dw$@$i0f8Sbr?Y%QM=H6*6{`KFV zw}5B3=CRddn~%e5abEY?&JJJlZ}_n!VkKH~EIucw(B+6n$-y5Q+_^iwuTU5tb8aS`du~&T4;}D0 zWjM_lLy8RwYaQkWi(~a2WwK!j9S$=yqr)TFLhtCiw+ni-y0d z_ZyRwo1*T`)7~6sORT4>d$f?{5jjU!o`WZ^K!z31(ZQ^h*{qfEtd*gxmAR~y(Zt3? zAtxvJeDH6)r9CY+G`p*;a2VeARbJ zHODGnw8~3~d8uh-pLEPv$AO0I0440%ekGv%8hUwz2aa@|~%ypTkhIH_^ nXu3YygV)f4}FVF1bwT=G+Pxa3L diff --git a/bin/WidgetSingleRow.class b/bin/WidgetSingleRow.class index c82419897eb03f6458299498da89079ad3e26b81..4a655a09649786452f56271e05b1d4ce47387175 100644 GIT binary patch delta 19 acmew^{!M(t3|2PQAa`HqfX(w+BiH~-yau8G delta 20 bcmew+{#|^-3|4lwAa|e4lGM%fSR>c~RXqn$ diff --git a/bin/WidgetSinglecolumn.class b/bin/WidgetSinglecolumn.class index ad5ead2c2d2fae299a8029aa049a60e07b8298d7..f66ed440f52f885e76f50418cf6b66bf376e675f 100644 GIT binary patch delta 19 acmX>ma8zK!J{C6CAa`HqfXzo)8kqq`)dr#f delta 20 bcmX>qa7D_d1O}i0 diff --git a/bin/WidgetText.class b/bin/WidgetText.class index c01c10be629e26e8e9a3cb65ff0b7ae0a39f7ba6..dbdd05e5f9d22467b0a87ca8f529bdd5e2cb3178 100644 GIT binary patch delta 19 acmbO!HA8BHE(aTHkh`yQz-AMUrz`+CtOch4 delta 20 bcmbOsHB)MXE(beXkh@Q2N$O@}j;AaDK@SF2 diff --git a/bin/bj.class b/bin/bj.class new file mode 100644 index 0000000000000000000000000000000000000000..283dccffd45763ffada0c6674003cc0e203396cf GIT binary patch literal 2968 zcmb7G`FB&-5&o{WCqEt_3+$L+z;E6=4P18LjT_|Y-ZIdQ3SaL!jNtdj@<>Ws|$=1`K`cqGP>VET{Y@l{~P7l1fcjnG= zXXcwLzxJ@jw0{JFDDeBmbaoJ61CVk>@@E?URL2;ng#1FtX(5ja`K6FwX?RJ)83kXcBQ{;`QSdm+)=+FL zRZex~Q-#s4xK+v(MteGzixh$@3EiQNyTw&`j2=~yUmrv4%N26gt&~q@i_=_siy2d4 zZ7f$X4^AB$HcNx4;XEb5STUW-52Z>u;cG&VmCa2mfOh3n>1Joyp`e8%O2?1_gObW= z_mbXjhK??AJDuZQ3ajH*Dt&YyHEw&ii}09+_gF3k|Gsp-cGG~9+?18ecg1p(7PFBH z#HnSskVVBjtM z*}&U)N5f+xVRcp)YerVi%9|p*&A_{OPj(+R@Dbe4oF>I6ZQ$1!H1Hb?YWTTGek(y9 z*KpRrv$()(rP8*CCq(``1y_0OssQC&#w^Oo^9q5*sOe(CDi!lA^}7CiaX6K487O92 z;-+O00+jkkr*hjf#RC04iKh%aEjPG~Ss~|yoHtOB%&M5zFlXR7yd!BcbywDo_P%Ic zB%3ENpy3$@dqI(`WY$9 zE-6t+-WKw%kUt8kB1x6$GRZ_qVU3OIrG~PU$M_W#nnKdm6(QctMn~mzIn<^7M4(s_ z;hX-uq74+4Wh@Sc8g&NFhLPVkk2;>B9S*iO7fh?`7zZO=N{v`u1f*H8x&{^nbTPs& zuh0_v-pPWl`NVEXX{P%Z!><4QyACP`kA!HZ1Q6 z$8E*`I+58+^qMo4tx-2Mo=I8efjrB!qQQznH7s{$?z|kqrP9KV$jhi$GVeW3e^!M= zMdTer0@3$*bZ7rS?_sp^?cL9x84p}C-1d%>&ebJz&Q+Ib=IUj9T9V#DF3oc{*M@Kv zDjamp!5xmw!4uv#2k+B7a3MYqW- zg(GJ$;P_bgfBRT;w!Vr6$Jq&&I^k7k7LGVB8xsMOJKiaf$#7#|C7Fx_uVZ>uG&x2~ zx}tKe?hJJ|tfX77w*9AaJswO3uV3c19EoybtwAhJL zXu8%JIR>|#u%*{{35L%hGLLN+(3#*EZl6cjl`b9RA9lb_)^`_YZZ~_;jXk)9qrI1v z?ZN%H6{D={1a89#^x^^jR6m5<@hE%p1p8cNf1ab}^N8U!mQ1?U=#*<|Vqa%xdRa`V zy$0`|_V&$N$?|88R9=ZPo9f}(7OvnXDapw`Ng*csl~++M}5D^Etywz!it zj_cXlR(!$^9(Ft}1#e^ULB^r?8Z2Zt#1!1@^L>jC2YI;x&>8Su#O{Q97TxiLXBHof pC%m)R6HoYNaZ5a*&0=pn;h#lM{2c1!I?6`7&khkJ%~0lo`ERDGbans$ literal 0 HcmV?d00001 diff --git a/mcp/GuiApiHelper.java b/mcp/GuiApiHelper.java index 14a9353..d6bf06d 100644 --- a/mcp/GuiApiHelper.java +++ b/mcp/GuiApiHelper.java @@ -32,9 +32,9 @@ public class GuiApiHelper static { backModAction = new ModAction(GuiModScreen.class, "back"); - GuiApiHelper.backModAction.nameRef = "Helper Back ModAction"; + GuiApiHelper.backModAction.setTag("Helper Back ModAction"); clickModAction = new ModAction(GuiModScreen.class, "clicksound"); - GuiApiHelper.clickModAction.nameRef = "Helper ClickSound ModAction"; + GuiApiHelper.clickModAction.setTag("Helper ClickSound ModAction"); } /** @@ -320,7 +320,7 @@ public void addButton(String text, ModAction action, Boolean mergeBack) if (mergeBack) { buttonAction = buttonAction.mergeAction(GuiApiHelper.backModAction); - buttonAction.nameRef = "Button '" + text + "' with back."; + buttonAction.setTag("Button '" + text + "' with back."); } buttonInfo_.add(new AbstractMap.SimpleEntry(text, buttonAction)); diff --git a/mcp/GuiModScreen.java b/mcp/GuiModScreen.java index 3713ea3..e4e66f3 100644 --- a/mcp/GuiModScreen.java +++ b/mcp/GuiModScreen.java @@ -116,7 +116,7 @@ protected GuiModScreen(GuiScreen screen) { parentScreen = screen; GuiModScreen.currentScreen = this; - field_948_f = false; + allowUserInput = false; } /** @@ -132,7 +132,7 @@ public GuiModScreen(GuiScreen screen, Widget widget) mainwidget = widget; parentScreen = screen; GuiModScreen.currentScreen = this; - field_948_f = false; + allowUserInput = false; } @Override diff --git a/mcp/GuiModSelect.java b/mcp/GuiModSelect.java index 6454880..3f19f60 100644 --- a/mcp/GuiModSelect.java +++ b/mcp/GuiModSelect.java @@ -8,7 +8,6 @@ */ public class GuiModSelect extends GuiModScreen { - @SuppressWarnings("unused") private static void selectScreen(Integer i) { GuiModScreen.show(ModSettingScreen.modScreens.get(i).theWidget); diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java index 8b93d89..a2dd76e 100644 --- a/mcp/GuiOptions.java +++ b/mcp/GuiOptions.java @@ -4,22 +4,18 @@ import net.minecraft.src.GameSettings; import net.minecraft.src.GuiButton; import net.minecraft.src.GuiControls; -import net.minecraft.src.GuiModScreen; -import net.minecraft.src.GuiModSelect; import net.minecraft.src.GuiScreen; import net.minecraft.src.GuiSlider; import net.minecraft.src.GuiSmallButton; import net.minecraft.src.GuiVideoSettings; -import net.minecraft.src.ModSettingScreen; import net.minecraft.src.StringTranslate; -import net.minecraft.src.WidgetSetting; public class GuiOptions extends GuiScreen { private GuiScreen parentScreen; protected String screenTitle = "Options"; private GameSettings options; - private static EnumOptions[] field_22135_k = new EnumOptions[]{EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.DIFFICULTY}; + private static EnumOptions[] relevantOptions = new EnumOptions[]{EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; public GuiOptions(GuiScreen var1, GameSettings var2) { @@ -31,7 +27,7 @@ public void initGui() { StringTranslate var1 = StringTranslate.getInstance(); this.screenTitle = var1.translateKey("options.title"); int var2 = 0; - EnumOptions[] var3 = field_22135_k; + EnumOptions[] var3 = relevantOptions; int var4 = var3.length; for(int var5 = 0; var5 < var4; ++var5) { @@ -74,12 +70,11 @@ protected void actionPerformed(GuiButton var1) { } if(var1.id == 300) { - this.mc.gameSettings.saveOptions(); - ModSettingScreen.guiContext = ""; - WidgetSetting.updateAll(); - GuiModScreen.show((GuiModScreen)(new GuiModSelect(this))); - } - + this.mc.gameSettings.saveOptions(); + ModSettingScreen.guiContext = ""; + WidgetSetting.updateAll(); + GuiModScreen.show((GuiModScreen)(new GuiModSelect(this))); + } } } @@ -88,4 +83,5 @@ public void drawScreen(int var1, int var2, float var3) { this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); super.drawScreen(var1, var2, var3); } + } diff --git a/mcp/ModAction.java b/mcp/ModAction.java index a029eec..0a15482 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -18,21 +18,12 @@ @SuppressWarnings("rawtypes") public class ModAction implements Runnable, PropertyChangeListener { - /** - * The 'dataRef' field is an extra, unused field you can use as a key, or - * something specific to track. - */ - public Object dataRef; - protected Object[] defaultArguments; - protected ArrayList mergedActions = new ArrayList(); - protected String methodName; - protected Class[] methodParams = new Class[0]; - /** - * The 'nameRef' field is also something you can use to track your - * ModActions. - */ - public String nameRef; - protected Object objectRef; + private Object[] defaultArguments; + private ArrayList mergedActions = new ArrayList(); + private String methodName; + private Class[] methodParams = new Class[0]; + private Object tag; + private Object objectRef; /** * This is the most common ModAction constructor. You simply specify what @@ -49,31 +40,11 @@ public class ModAction implements Runnable, PropertyChangeListener */ public ModAction(Object o, String method, Class... params) { - nameRef = method; + setTag(method); methodParams = params; setupHandler(o, method); } - /** - * This is an overload to allow the dataRef object. - * - * @param o - * The object reference or class that contains the method you - * wish to call. - * @param method - * The name of the method you wish to call. - * @param data - * A specific key for identifying this ModAction. Basically - * something you can use to track it. - * @param params - * The parameters of the method you wish to call. - */ - public ModAction(Object o, String method, Object data, Class... params) - { - this(o, method, params); - dataRef = data; - } - /** * This is an overload to allow the nameRef string. * @@ -91,32 +62,7 @@ public ModAction(Object o, String method, Object data, Class... params) public ModAction(Object o, String method, String name, Class... params) { this(o, method, params); - nameRef = name; - } - - /** - * This is an overload to allow the nameRef string and dataRef object. - * - * @param o - * The object reference or class that contains the method you - * wish to call. - * @param method - * The name of the method you wish to call. - * @param name - * The name of this ModAction. Something else you can use to keep - * track, and this is included within exceptions. - * @param data - * A specific key for identifying this ModAction. Basically - * something you can use to track it. - * @param params - * The parameters of the method you wish to call. - */ - public ModAction(Object o, String method, String name, Object data, - Class... params) - { - this(o, method, params); - nameRef = name; - dataRef = data; + setTag(name); } /** @@ -126,13 +72,13 @@ public ModAction(Object o, String method, String name, Object data, * @param name * The name to use for this ModAction. */ - protected ModAction(String name) + private ModAction(String name) { - nameRef = name; + setTag(name); } @SuppressWarnings("unchecked") - protected Boolean argsMatch(Class[] classTypes, Object[] arguments) + private static Boolean checkArguments(Class[] classTypes, Object[] arguments) { if (classTypes.length != arguments.length) { @@ -149,7 +95,7 @@ protected Boolean argsMatch(Class[] classTypes, Object[] arguments) } /** - * This calls this ModAction and any Merged actions with the provided + * Call this ModAction and any Merged actions with the provided * arguments. If the arguments do not match it will try using the default * arguments, if they exist. If not, it will throw an exception. * @@ -167,14 +113,14 @@ public Object[] call(Object... args) throws Exception if (mergedActions.isEmpty()) { return new Object[] - { callInt(args) }; + { callInternal(args) }; } else { Object[] returnvals = new Object[mergedActions.size()]; for (int i = 0; i < returnvals.length; i++) { - returnvals[i] = mergedActions.get(i).callInt(args); + returnvals[i] = mergedActions.get(i).call(args); } return returnvals; } @@ -182,13 +128,13 @@ public Object[] call(Object... args) throws Exception catch (Exception e) { e.printStackTrace(); - throw new Exception("error calling callback '" + nameRef + "'.", e); + throw new Exception("error calling callback '" + getTag() + "'.", e); } } - protected Object callInt(Object... args) throws Exception + private Object callInternal(Object... args) throws Exception { - if (!argsMatch(methodParams, args)) + if (!checkArguments(methodParams, args)) { if (defaultArguments != null) { @@ -197,17 +143,17 @@ protected Object callInt(Object... args) throws Exception } try { - Method meth = GetMethodRecursively(objectRef, methodName); + Method meth = getMethodRecursively(objectRef, methodName); return meth.invoke(objectRef instanceof Class ? null : objectRef, args); } catch (Exception e) { - throw new Exception("error calling callback '" + nameRef + "'.", e); + throw new Exception("error calling callback '" + getTag() + "'.", e); } } - protected Method GetMethodRecursively(Object o, String method) + private Method getMethodRecursively(Object o, String method) { Class currentclass = (o instanceof Class ? (Class) o : o .getClass()); @@ -234,24 +180,31 @@ protected Method GetMethodRecursively(Object o, String method) } /** - * This method merges ModActions together into one. + * Merge[s] newAction[s] with this action. * - * @param newAction - * The new Action to merge with. + * @param newActions + * The new Action[s] to merge with. * @return The Merged ModAction. */ - public ModAction mergeAction(ModAction newAction) + public ModAction mergeAction(ModAction... newActions) { if (mergedActions.isEmpty()) { ModAction merged = new ModAction("Merged ModAction"); merged.mergedActions.add(this); - merged.mergedActions.add(newAction); + for (ModAction modAction : newActions) + { + merged.mergedActions.add(modAction); + } + return merged; } else { - mergedActions.add(newAction); + for (ModAction modAction : newActions) + { + mergedActions.add(modAction); + } return this; } } @@ -264,7 +217,7 @@ public void propertyChange(PropertyChangeEvent paramPropertyChangeEvent) { throw new RuntimeException( "invalid method parameters for a PropertyChangeListener callback. Modaction is '" - + nameRef + "'."); + + getTag() + "'."); } try { @@ -275,7 +228,7 @@ public void propertyChange(PropertyChangeEvent paramPropertyChangeEvent) e.printStackTrace(); throw new RuntimeException( "Error when calling PropertyChangeListener callback. Modaction is '" - + nameRef + "'.", e); + + getTag() + "'.", e); } } @@ -291,12 +244,12 @@ public void run() e.printStackTrace(); throw new RuntimeException( "Error when calling Runnable callback. Modaction is '" - + nameRef + "'.", e); + + getTag() + "'.", e); } } /** - * This sets the arguments to use if no or invalid arguments are provided. + * Set the arguments to use if no or invalid arguments are provided. * Throws InvalidParameterException if the arguments provided do not match * the method parameters, or are not assignable to those types. * @@ -306,7 +259,7 @@ public void run() */ public ModAction setDefaultArguments(Object... Arguments) { - if (!argsMatch(methodParams, Arguments)) + if (!checkArguments(methodParams, Arguments)) { throw new InvalidParameterException( "Arguments do not match the parameters."); @@ -315,11 +268,11 @@ public ModAction setDefaultArguments(Object... Arguments) return this; } - protected void setupHandler(Object o, String method) + private void setupHandler(Object o, String method) { try { - GetMethodRecursively(o, method); + getMethodRecursively(o, method); } catch (Exception e) { @@ -330,4 +283,22 @@ protected void setupHandler(Object o, String method) methodName = method; objectRef = o; } + + /** + * Sets the tag of this ModAction. Used for tracking, and is included with exceptions. + * + * @param name The tag to assign to this ModAction. + */ + public void setTag(String tag) + { + this.tag = tag; + } + + /** + * @return The tag of this ModAction. + */ + public Object getTag() + { + return tag; + } } \ No newline at end of file diff --git a/mcp/WidgetSimplewindow.java b/mcp/WidgetSimplewindow.java index 7d70c6d..8cabb5d 100644 --- a/mcp/WidgetSimplewindow.java +++ b/mcp/WidgetSimplewindow.java @@ -126,7 +126,7 @@ protected void init(Boolean showBack, String titleText) if (showBack) { backButton = new Button(new SimpleButtonModel()); - backButton.getModel().addActionCallback(GuiApiHelper.backModAction); + backButton.getModel().addActionCallback(GuiApiHelper.backModAction.mergeAction(GuiApiHelper.clickModAction)); backButton.setText("Back"); buttonBar = new WidgetSingleRow(200, 20, backButton); add(buttonBar); From ff323edfcc5971bf8f1f3ed377ceec14c540a735 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sun, 18 Sep 2011 22:58:47 -0230 Subject: [PATCH 07/49] Forgot to change setTag to Object. --- mcp/ModAction.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mcp/ModAction.java b/mcp/ModAction.java index 0a15482..4158c71 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -289,7 +289,7 @@ private void setupHandler(Object o, String method) * * @param name The tag to assign to this ModAction. */ - public void setTag(String tag) + public void setTag(Object tag) { this.tag = tag; } From 63a4dfb7c0365c63ca78e66ccb022510a7a02b3e Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 20 Sep 2011 00:26:17 -0230 Subject: [PATCH 08/49] Updated the creole. --- README.creole | 35 ++++++++++++++++++++++++++++------- 1 file changed, 28 insertions(+), 7 deletions(-) diff --git a/README.creole b/README.creole index a37c87e..8ce4c9e 100644 --- a/README.creole +++ b/README.creole @@ -1,15 +1,36 @@ = GuiAPI = -GuiAPI uses the TWL library from Matthias Mann (probably spelled his name wrong), see [[http://twl.l33tlabs.org/|twl.l33tlabs.org]] +GuiAPI uses the TWL library from Matthias Mann, see [[http://twl.l33tlabs.org/|twl.l33tlabs.org]] ==Building== -* First decompile the needed minecraft classes with jad, then run them through astyle --break-blocks --delete-empty-lines --style=java -* Apply the diffs in diffs/ to your decompiled minecraft and copy those java files to src/ -* Build (I use eclipse) -** You need .minecraft/bin/*.jar, Modloader, twl/bin, and xpp on your build classpath. + +* Currently, GuiAPI uses MCP for the most part, so you are going to need to decompile a jar with it. To start, we need to make sure we have all the needed references, so before you decompile install the following: +** twl/bin/* +** xpp3-1.1.4c/* +** theme/* +* Add ModLoader or any other APIs you want to use at this point. ModLoader is not required to build this though. +* Decompile with MCP. It shouldn't decompile anything you added though, but that's OK. +* After that, drag in all the mcp source files from mcp/* EXCEPT for GuiOptions.java. +** That's a base class, so we are going to edit the small changes we made in. I'm not going to go into much detail, since you can see the finished file, but I'll explain a bit. The code itself you can view in the patched GuiOptions.java. +* Now we need to patch GuiOptions.java to add that Global Mod Settings button. +** In public void initGui(), you need to add the Global Mod Settings button. Add it in second last, before gui.done. +** Then, move options.video and options.controls up slightly in the same method. I suggest getting rid of the + 12 parts for each, as I did. +** Now we need to add the button handler. So in protected void actionPerformed(GuiButton var1) add a handler for the ID you used. I used 300. +* Now recompile and test! You are all done. Again, if you have any issues patching GuiOptions.java just look at the prepatched version. ==Packaging== -To create a distributable archive, package twl/bin/*, xpp*/*, theme/*, and bin/*. + +To create a distributable archive, package twl/bin/*, xpp*/*, theme/*, and bin/*. The only base Minecraft class this edits is GuiOptions. ==Credits== -Lots of people who I forget. Open an issue or something if you helped ... + +lahwran +_303 +ShaRose +Lots of people who I forget. Open an issue or something if you helped... + +==Documentation== + +Read all javadocs at https://dl.dropbox.com/u/3687570/GuiAPI%20Javadoc/index.html + +They are updated as I commit. Note the documentation isn't that great (It's not my strong point), I just tried to tag everything and explain roughly what it does. \ No newline at end of file From dafca3f9dd11ceff82fba0aa059403df58303e1f Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 20 Sep 2011 22:40:13 -0230 Subject: [PATCH 09/49] Fixed a bug in ModAction that would hide exceptions where the method it's supposed to call doesn't exist, until you actually try and CALL the ModAction. Now crashes when it is created as it's supposed to. --- mcp/ModAction.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/mcp/ModAction.java b/mcp/ModAction.java index 4158c71..2c10e51 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -159,12 +159,12 @@ private Method getMethodRecursively(Object o, String method) .getClass()); while (true) { + if (currentclass == null) + { + throw new RuntimeException("Unable to locate method '" + method + "' anywhere in the inheritance chain of the given class!"); + } try { - if (currentclass == null) - { - return null; - } Method returnval = currentclass.getDeclaredMethod(method, methodParams); if (returnval != null) From c9f883ba38b857cbffbeed4bb365516c9232dcd8 Mon Sep 17 00:00:00 2001 From: lahwran Date: Wed, 21 Sep 2011 00:05:36 -0600 Subject: [PATCH 10/49] removed crap, fixed up readme --- bin/GuiApiHelper.class | Bin 7863 -> 0 bytes bin/GuiModScreen.class | Bin 2585 -> 0 bytes bin/GuiModSelect.class | Bin 1899 -> 0 bytes bin/GuiWidgetScreen.class | Bin 3346 -> 0 bytes bin/ModAction.class | Bin 5936 -> 0 bytes bin/ModSettingScreen.class | Bin 2552 -> 0 bytes bin/ModSettings.class | Bin 19177 -> 0 bytes bin/Setting.class | Bin 1935 -> 0 bytes bin/SettingBoolean.class | Bin 2236 -> 0 bytes bin/SettingFloat.class | Bin 2960 -> 0 bytes bin/SettingInt.class | Bin 3060 -> 0 bytes bin/SettingKey.class | Bin 2793 -> 0 bytes bin/SettingMulti.class | Bin 3484 -> 0 bytes bin/SettingText.class | Bin 1787 -> 0 bytes bin/WidgetBoolean.class | Bin 2909 -> 0 bytes bin/WidgetClassicTwocolumn.class | Bin 3342 -> 0 bytes bin/WidgetFloat.class | Bin 2964 -> 0 bytes bin/WidgetInt.class | Bin 2854 -> 0 bytes bin/WidgetKeybinding.class | Bin 2944 -> 0 bytes bin/WidgetMulti.class | Bin 2342 -> 0 bytes bin/WidgetSetting.class | Bin 1949 -> 0 bytes bin/WidgetSimplewindow.class | Bin 3378 -> 0 bytes bin/WidgetSingleRow.class | Bin 3062 -> 0 bytes bin/WidgetSinglecolumn.class | Bin 2117 -> 0 bytes bin/WidgetSlider.class | Bin 498 -> 0 bytes bin/WidgetText.class | Bin 3352 -> 0 bytes bin/bj.class | Bin 2968 -> 0 bytes newtheme | 1 - pack.path | 1 - README.creole => readme.md | 41 ++- src/GuiApiHelper.java | 128 ------- src/GuiModScreen.java | 281 --------------- src/GuiModSelect.java | 36 -- src/GuiWidgetScreen.java | 121 ------- src/ModAction.java | 275 --------------- src/ModCallback.java | 38 -- src/ModSettingScreen.java | 96 ----- src/ModSettings.java | 588 ------------------------------- src/ScreenScaleProxy.java | 10 - src/Setting.java | 84 ----- src/SettingBoolean.java | 80 ----- src/SettingFloat.java | 117 ------ src/SettingInt.java | 116 ------ src/SettingKey.java | 119 ------- src/SettingMulti.java | 147 -------- src/SettingText.java | 65 ---- src/Subscreen.java | 56 --- src/WidgetBoolean.java | 78 ---- src/WidgetClassicTwocolumn.java | 105 ------ src/WidgetClassicWindow.java | 14 - src/WidgetFloat.java | 103 ------ src/WidgetInt.java | 192 ---------- src/WidgetKeybinding.java | 131 ------- src/WidgetMulti.java | 73 ---- src/WidgetSetting.java | 49 --- src/WidgetSimplewindow.java | 73 ---- src/WidgetSingleRow.java | 106 ------ src/WidgetSinglecolumn.java | 53 --- src/WidgetSlider.java | 17 - src/WidgetText.java | 128 ------- src/co.java | 94 ----- 61 files changed, 23 insertions(+), 3593 deletions(-) delete mode 100644 bin/GuiApiHelper.class delete mode 100644 bin/GuiModScreen.class delete mode 100644 bin/GuiModSelect.class delete mode 100644 bin/GuiWidgetScreen.class delete mode 100644 bin/ModAction.class delete mode 100644 bin/ModSettingScreen.class delete mode 100644 bin/ModSettings.class delete mode 100644 bin/Setting.class delete mode 100644 bin/SettingBoolean.class delete mode 100644 bin/SettingFloat.class delete mode 100644 bin/SettingInt.class delete mode 100644 bin/SettingKey.class delete mode 100644 bin/SettingMulti.class delete mode 100644 bin/SettingText.class delete mode 100644 bin/WidgetBoolean.class delete mode 100644 bin/WidgetClassicTwocolumn.class delete mode 100644 bin/WidgetFloat.class delete mode 100644 bin/WidgetInt.class delete mode 100644 bin/WidgetKeybinding.class delete mode 100644 bin/WidgetMulti.class delete mode 100644 bin/WidgetSetting.class delete mode 100644 bin/WidgetSimplewindow.class delete mode 100644 bin/WidgetSingleRow.class delete mode 100644 bin/WidgetSinglecolumn.class delete mode 100644 bin/WidgetSlider.class delete mode 100644 bin/WidgetText.class delete mode 100644 bin/bj.class delete mode 160000 newtheme delete mode 100644 pack.path rename README.creole => readme.md (51%) delete mode 100644 src/GuiApiHelper.java delete mode 100644 src/GuiModScreen.java delete mode 100644 src/GuiModSelect.java delete mode 100644 src/GuiWidgetScreen.java delete mode 100644 src/ModAction.java delete mode 100644 src/ModCallback.java delete mode 100644 src/ModSettingScreen.java delete mode 100644 src/ModSettings.java delete mode 100644 src/ScreenScaleProxy.java delete mode 100644 src/Setting.java delete mode 100644 src/SettingBoolean.java delete mode 100644 src/SettingFloat.java delete mode 100644 src/SettingInt.java delete mode 100644 src/SettingKey.java delete mode 100644 src/SettingMulti.java delete mode 100644 src/SettingText.java delete mode 100644 src/Subscreen.java delete mode 100644 src/WidgetBoolean.java delete mode 100644 src/WidgetClassicTwocolumn.java delete mode 100644 src/WidgetClassicWindow.java delete mode 100644 src/WidgetFloat.java delete mode 100644 src/WidgetInt.java delete mode 100644 src/WidgetKeybinding.java delete mode 100644 src/WidgetMulti.java delete mode 100644 src/WidgetSetting.java delete mode 100644 src/WidgetSimplewindow.java delete mode 100644 src/WidgetSingleRow.java delete mode 100644 src/WidgetSinglecolumn.java delete mode 100644 src/WidgetSlider.java delete mode 100644 src/WidgetText.java delete mode 100644 src/co.java diff --git a/bin/GuiApiHelper.class b/bin/GuiApiHelper.class deleted file mode 100644 index 35abb7765a6b217590e9606cef93d71fabecdf2a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 7863 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 O4mo_E#NXpKH2ptl^%TSa diff --git a/bin/GuiModScreen.class b/bin/GuiModScreen.class deleted file mode 100644 index dec80fccd92eb2562714b9398ef1ef0fca3849c8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2585 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 diff --git a/bin/ModAction.class b/bin/ModAction.class deleted file mode 100644 index 2f36d94623be9d2a516f46e3ede38cfa1ca54acd..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5936 zcmb7Id303e75}}=n|Voi86YHqKq3RABuo-g1EK68)hEKm|4;{Gb~!$ zQaQEOu2`+oy3`G8)dnkx6%8(RskPSH#nx`t-P3=1dfIcWwbI}H-piXeB%EWZ_DL6xm;g~gZPeE zf434r+#vQh8n{Wm-7GKPlgljz-jb2q4BTFc8r)&vP$lYcpd5F~{rmFqE_wPvIqsJG zJz{pR4F6C(42kQ*a=A|~KavmkSK_kU#PP!hMhzS*$0Lt0WV5`xC+jY=tcw#W(^kGeo7fObb4In#b#LBIX8LGhIu@H^b}UWL)qZ?yQn6f) zHi3MsuXMVHydtY&*lg|85L%whB=cPw&TR2{a!q|BuJ7@l7Hrj^ugNBeb#iwyV{Is; zcUbn8*p8G!pN+>-TVr-o-rYex-=8FEXwb3*;Kag*K{uT9KM;}+j4h*hto1MI1|!hJ z@qQ~l;7j(>mhmzAM_g(a`24TVW>Z!yL(;V*|F35X+l5r8RQw)}1QOwR_^$pwuI==yaPiu$gD}VMlJ&a6TEkyztw6CK~E>ajgHL$Lqw483$WG1pYei;Wms zg3jwD6R+brhTEe`G2(G7F38gxcvHhE3i?TFkE&6OZF3=$Po^zTlQe8hil`+M5obe) zs3NtfP`SuXh8>HP7Od>9R>pGp5FQo^sF>P~BgtH(S;OkJim=`NR>ouP|6XMA1d9-S zMg+#o!Fb=zD%70FUNXP8W4#lb+OZ`jU)=M(R*59CkxVupNyqZ>{z$&x@^P?GL+6@o zA(c=TDN0t}ia6RD*`3VyN0OO%s*tb}d>~z1g1Z2#U@g}16i~vug05lCNwYOZElaLA zu~dR7rNvL~{-?oU0t?ng9xLivF7$V5afd8tE2}PJnUys2m>f?@=2qo$a%3XG>+Ecr z+lXH=9J>V<(pxgOHa(c@f z`Kox_Vs@EY=8HAL2&(9_*(4D@O*_mUt!Nz7`?QXxnYP`od_uMuGbj92%^T5anV`=qE0#N z_7TuS0yZcxbYoBc9G-iot5~q|%I(k3!VN_j@Df+_*Zx2LUM=-f} z$Qho(p`JijV;j-WYHO6i#$il-1l441TJQbO% z%pAt7>IOa!qmgxX$}xqsjyP*rSyIV0Zp2ZN2z;8?9KYzrrKOY04{^?yFGCbKXoGU^8A#i)+~~*C|4zWt-Ws z{YVn?N;G*iBs>}tJ{p!opLra!5O9JwaIwTcaGYWKhDgnTfz)v>eiD|-sp>`oAG>rL6^?LnDnDshquen|yI)va-opP{X!=d9Z zGJt6epieRcLisx zHn3Y`bM0ZRD*e?q(o%GEfYCb5)pZor+p8%-tvziVV{f!=Yu(U3x9l$?S`?3kY%vLi3B)CD%5V{9Ex(C?Ew~{6yvIW88 zTsWjkaG!J4xR1PphIgU855vGdO?!t`s<9g{cgW?DKS*SNEu}Q7->lj&6zH6W_S-T4 zC>DAu)G=O#M)2WdQAg-ndnsYt4x!Ceuj0H@$IqjBbsjrR1ZR-HbG^=-%gqY>9aM{# z_~m7Ody8LRp-jETh+k*1y{-5av0m?!Cfnn~#(sRp<)Z?6?c9x2p%xB&5m&eYUoG87 zH%nyu4!fYc*;SO>BIrfqK~u>c&_D(2cuZ?&GR45(Ira`m|G~ZXpO}h&v2*^dz{)mP z<$`54u*3x`DKk*ktpM)hA>&FHU_YZ1fU_kdo;p??#p3PNr;T9Av1scN%<+|Iwe+AC zLRc%u3~dq`HPiFVWju0b>x4AaC+R&St!C{n6VSBY*r zf_dV5u4GQY%in38Emmbtn?`+}iAt>&leFoWOb_+iES#b>V4l{fAc?L{qJ+q%B30Mq zfot-FqsbKxm!R`VP?!$+gWQGMMc_gZk6TA@M)AZWfAobmpUT+mi$CPK2(h46a}7;? lE4yoTsCPgl;0)>dG9`^64nuPeXd+oOaF@~W4Q2Js{{aywf`|YB diff --git a/bin/ModSettingScreen.class b/bin/ModSettingScreen.class deleted file mode 100644 index a43bfc10448cee57e31836dd22074934c86a6ea5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2552 zcmai0TXz#x6#gbjJI!?3(zH#1Qi^yXO(_usEViN$0Sjphq%;=rGMNnNz+|Q-lZJY~ zE?q8{x^(&As}J@W>BVK2E}wkxclaw@-o7&vl2BrO$eDf4?6bf9?fsoI`R(r?e+F;_ zA1WBaw1Rz@3Ddf$U=Wvtby*B)8Sl%uqCm!+m}g|Xpr9S|Vsce1UsKQ~1{v3dbzR1b z3SPp?3SNOGhOB}J=7fVThFqB24FxxlZ^MEJW6HQGP-kS^l3__u@?|sW*sgKgl@LkY z)Rwe_rP=vJ+AW%Pew-c!CzsZXhGCZ^^!XlT*R&F+ibZWXWtLnzh0|u<*4%Q@kTBfL zXCgJlFox?gs2^?oB=@yv%dYF#v!-itXPa&6#n@mD zsi4_*!mU^d|1D#v70)l}SmlB(0TNm#Oxtu%GTqpNjE3hVgpy8%F#7zPAi&XUR?|knA{mSWP8aSXcD$LkjKd1RHf?rR1e3tBh@@ut51~tw8cfk z&Pf>BHi}>xwvEcYZ5?S>({D{_i&b8&MWf&>k#&o{U|I~5bl3SNFtIQBR4JqIAV?)i7A5TJ{azsXf66flKZdDr;jEP`M+9?-x|Bkc5J21r8=jX>`g=GQRuEORjVu^sO8wZ`=su>j}Kp! zurGFPJEe*8xBEIs`XcxrO)=!IW|d88Swq|>W@*wcxtguBm9i&}nHv(Kv8&ZJkwmJ*4nsSOLB5}J6a^=9W=kW5(b(&dpYw4i9C2Y zF?piRde>ratTFf6#ke!&NB8t*>a!KcR|Nw`o4?_4xqNOad67C8;zs~zMObKpR#>Q- zH_W5719*%UwM|--ewu^VPX;RkAv1DNn2pQd*Rfr#km z$r@yyECuAC57||P+>u#&>gbu`v%>ch*WzYT|sAq5~hR4LwzBCTmQF+jta9c zw2qyu)CVDH<)7c>$>r)7^iT7kI;#aN$3;w;#11=GpgqcT;el> zFL51T;WobZh#qC)V?0x*sWDOi?m0t(ow!BKoncjvapfG(P|zzwKU)4ouZ-t= z&&!zn3qg+3AK1&kSLboTuM7@)%>Z^p2JT|dCI;s>u=g&4q61RHIqPK_JGqkLdH_@Z E0&~eS(EtDd diff --git a/bin/ModSettings.class b/bin/ModSettings.class deleted file mode 100644 index 5b288358c55367ff0929d38d25838f799171a7de..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19177 zcmcIr34B!5)j#LG$-K$%2oMM`tixvZ1Q8HIMAkqgC;~zQYC9wo7@5q(nF)(+wOYEk zw%S^^`c>4HZdL(FsA&~jw{F&@T5Hu-tk$+xZEF`1Lp#9olibK&)_v)UdtczawD&k%X)*)_wWVMc%hdJ{ot6a7jyj@1AmP_RBlLmjv%b(^;y;RJX8T=V9mGR|XzJfn1<9Ep8 z=M4V5m#X;-27l2@r}CBZaFxMVducjfWAL?Jn#tE0{3S2V;x8L~y_ahE27|xirCR=~ z!8dwoE`QD7o4hoSZ#MWAFD>9(y?h&gJ)i3Mc0;T6;`bXe;T^)%&H;QU-zAs3h5v5~ zR^O7hyX5k1xqL@1-<8Yv!_Ua?dV%0sgMX9H z&++qK{w=>CQ2b6hz9{d0@8Op`{IXDe#lwH_@E_&&Re5z#2*eD2%}du?Q~b$GpXJvL zenVIU4u3ZIO(s1M4l@-sTol+6sBTY$!qxL*vB36*P&_e*DSuUHVa8rf4J)+?H4rNCcWgu{hJvw1G`5r`z#1j6k>9TrJU zLs~At#%Oy2OHk5NhSD`mu7%NNOf#qf9Gu;v~91~9}=}T-`5-$cgs#lx^;WQR)Jyt7eD@+*cmIy^7Sp3>hB$SwoMNVuA z0TJkAL2I3*Fc1M)?zkEc)ROO3 z!))=w6A3j1Enf4sh`B&Fl3ipGwlbAMKYG*krx-n3vdHC4#M*;#{d0Ns>R_dH->Yze`5!W#lA2S4VvgpXM19(<{xvs10$+!;J27QYsg0NP-HL#6o zaX;zTJE$xRZU-jCeJF*6ov6f=UXe@n>+gEi*Qa=^kH~t>KJFDraWSP2xnu^BYH5FQ z?8)xB{*p>}sY%z9wB6at)7BH8 zxhGgXTO9LEdTXY0Pk82@9%uE5)6C|`&N*SSDIa0^uM-!(ry;LAaV~ojZ9Z|L$Kodf zCp=9rI%k`#8>uH!X_eX7d2&)4dk#L97D=>5Ssm>J_nh`bTYCcTEf{Ep@fS2j+qT=; zo5}_Cc&rH#u^CwcGEd2!!(p2Tn%zasU!~3p^D$ zQ_vlM=uJ^PB|GfSo=Rzvxbz&GQ=1E?+YpOGgrXFGvyOEcdd`Y`UAB=HQ7mhUsPzU{ z8xti`me+;WSYa^BTcO-t6(!5+X$E#KsW#3@^GWSf&sO`?Y|C)0lm>y1^i_pQ^udLd zJ!Q9!-e*mY9Edqn>(sa0=o{P^6e~D>NmFBG*3?2`+l}Y+wS(zpv@}RE#dJy^fH>(@ zHg)SA5oc%trcTooI4#-GB8@K*ug905p)HWu1RrM+OzrSpE!gR!3v&M9);r}oR>Y!h z!B`>`i~}}ChxCp2;%!aAHrc1b6+D5O6{?CTYM~m13^EpMjc!4IkJ>ydH|mN9q(xW7 z3@E-U9=b%HOG;59@YJG?Vr_N3tD^0(rl6D_m z@dqX!<|B~bsq^?-1EGlDs#Tc$As>Y)ccW|-B@k> zWL+B|msv8Mi^;T!C`*@K1L3Qzp-z)2?SoKivHQX%rDZVI*XoIe4WURgV3PKNR8QEl zv=pLfVfC~dhNLD|1}&Y2ITJfgL(yc0$k6hD2*lEcYaQkW-& z*L?J($@y%W+9+)_BB`m3(Z-tEIBmSC`LzkAHc^{o@(6U`(Q+9tmq~IdmPZEp z6eJU7u|E<`_*+n)Ypyc2DSX7_YCctFo|;;6wKOtj8c&y3r={=&!t!DUPfxXBeWY!s zv?aAhfh?`3^K4T)g=d*ugF6tLCAB*%!x4=A#em#V^y+R#Z3zW;Rc&g;+E~n}1h##h z_~-Tzs(US=ja6-qdo!`vC3vU0X1Km2WHyERh?6bKs8ZOER)$&P7JGhixh8!d#-o*s zNhEVFzo}J-s-$@dXH^W%Yw~if%Fsrb+EfkDp2bH^UM57Q(LFF)I8U*DyDaHPn&&Su zwbR5WY5w)NTu^Fi(?x-%2v{T2Wlm3UO>KrY)6`C9q-~Z~DrxPqJG?T=i^vYsoa8wh zE)q`ftW3?AWdcu6`a)|_)Bej1R( zO5?gS;G_ob;Kl8zbYij61x$j21CWvF?VxPe)CJX|66}OiYwW73gFXXz-CAS>e;{WrmcxYiU4aund!H_c5-CR_+3A3^Z9AN9 z$lmk{;I`T*N0)R&7-4J*#Lve3DhGuHxFYJIy8$`M?tz7=d)!X4a(Ggw$O)+gQD=YVra zMlaEfq|F1{w5T>mUIETX0vT=`%7|Fo0(p`=6s93>A2Gp4I6S1SlAw}Y>6E=1ZL*GG zoHAtfMVLHK?Ha7j)%*?dXt+HQT%k5D?$*uLnQ>km6%BaA@|0NVVJ-&??AD`*1w=w_T_dnjM_0N7~Uh9`}_ zj%Q^1&ht0$jGQ0ud~_$>h4#Buzi*OP_F1@RN&eL@GJR*b#np{hM74AuuBN(Y+O0_D%YM!tSdCxlmshr*Sh}VUUXnIAkM6ez@1qWD zFh5K>rXkw7hqTAY!1cbNq<4_ZHEmg$s{=&2gWLy5Zzz9^^2_&hSAE~r8m6*iW4($I(Grf^s%6+Hw-@r4XsOG5zFXVvcxx=Q`(3au6_1kp-}vl=}c zX(+9uk+dEQdOl5|3#pVoj*$VHP8(=8HPJk3ro|MbWz>RE8|eZHQ7dhxODIg2QiQIc zDD6P|RkRheBY#rn z{g@sk7bxV@Lv#TBhT{HV`U&{`DgM`z;XOirgB~&H(W7A0ZQUC57#s9B7PsmsrosIq zL`Oj!T4K->hbdoL@@30uEhn|%rM#Y?*N)yp!#ilioiqYBqdREi0rHh~(5M{@kY5)i zvtTO(V+27>`aF%oub;lCL>#V2jZ-3udQG68EA0`6^GQ2Q8XuyuxcvqF(w_Y^{92j_ zJxQstSFv;h=J`rDZ4}6a*01PEo4{q@N!TwfdyFRTq0wdK9W-Wb*T_+8{F9EawV7~`-aP-9GT7Y&3d4xw*CoLw{tCRPFi6T=XZK%9Q91d+R^aK~y5 zT%=8M;U0T`o0*GjW+s+(lD|yfM-$4*_tC_%E}GQXNt5@{6aWiEPg$E1b(AuuN5I98 zAlRc+K#xHy9|w3(q;W8jp3z2v6QYUq8^ryhsek$pt(we+3 zDr@xRRdiB$jl10E?x2b?UtR}Q`tnjnKOAa8kZKU*7){S$-e;*8b4U--Sx|N6E~DRS zm6%i7eg`fDn=<9HbanS4kaU64Xxgn+gYIbDzoea^ywY>@ip}kQJm;f-Rd;R;#jR1{ z%k#NAsj9|P?t{w!$A)lhWODopX#au6)2p!5gRs)q6vyXVlpT(%9FD6Tj;kDwtH|OQ zynxnDg+vwo5qEA-AFre^@M}ro0sqfoKFj&uZew2DMb(X!BV3&{RRBNL0(@FufWHOn z`8%A=+cb{ep~>`a8sNna`^66X#SZ($4*SJm{~*{f72tEh{z%2@nKt0B+pIo}W%L5@ zN}JUYc_Z8-j7~bO#-kYaKtrb0a0g8{e%7qmI~A=EP^Pb)G927D6$Iww%JZ|H}e`ReNg)OqVx+arC->W($_%g z=RoOeu?A;g4d(V!=_Oh!cSA2YN?&Iy{r_xMk2xAG$`Ort2@T?V3_l!nKj!#xJI^0t|dWl9k z0dInOG($atP>&X<$Hp|k)1y(6{r*IwBQ~pP{zS3bTQma0S)&oR!Jk|VW@BJB4u6tR z4EKyiNrq2;H2Sb7^1Vc(oXCF~$X^QNFM}|jfiRc%6Zzhv(NUY#hZR%p*{{nVa*M32iv_dx0Q zVh!%c8tm(*(&vmua>i-1x(vG%*{2LDyPu|Db9lMcHftH5Nmy`!&Gd0(Y zHcjJqX$Joje{l4k;%hqQoQ$|X5MaA#Fy0sNAO*)F2aZLmsDJ`3{@`aYiewrO0ez9k zYIzNu3qZq2KSF~I9%}Hg!!+68qW96ulJ!rJbwn=A&d$W_!*!pVos)r?HZCV-Z!0?e#B5d;%x2}n ztQ?qC0JAD!HWipn17_1t8fO1G2F%`rtmAWGwjvWVD<{upoBvUC`ia@}ESOEth1oJ- z)&R`T24*XO*-Bux`lMm@-@Y;90g!c4F3ir&#O%Ucdd7u{PCqfL&4O8NF3dIqvoJ7= z0JAn=76WF9lZ6?!{C)Z}9tl~Cb78hJ6SGTmV&+qH`ia@RESSy9h1u1>>>6Np9WeVc zFuMVmef6YaHtHBK8v|L(xdL%R5}Gp*Wh6_;FDqApb5$m2cPQqpydd8RM)~q#5J(8A zDx1_B2wf67TQWoDtlmPV&vieoMtXv?j)5wAB6&FPzFkKj?V>e}UHEdXlRj41*g@;i zXIUR42AgRsxO(tczsca* z;>got%LDFJm`$pl>o9qoIC_YR4goCYYScfn!*^jOe2@15AHH%rKKL@CXC{2rfbZj( z@O`3h_?`!RF95z50pCl2?-juJ>PH0MG?vqkY}yydgzxP>;KP?-#|K|VAkBnt7U0{E z313s+@ErksN2yH5(YvnGY(0mdxh~S%<6TXd^@L9*nxqTl#Ej&K>GQw*ne6@gYQzm?& zzTsO2_?82{a{%ADfNvGxTk{dYcRD9Gn3$}@P#wsyQ&ZP@Zsw5!IzP!WNP0$XkTk4e38Dj?-sy!8{oSg@O=aD z?F4*xe?;)jK_TA?9djiTBL^_mardY)7Y>~>Y8(1J3^hm^n>)S{wMmc{yH7f-&9K_WxTsl9XSK_5I1eXKkMs}xwM<-@|jrrRrGb9hdUh! z+m$?@7l8kF$;%6Qk;-R3a8kPu?7E56MyhZoW*(**gBKsBVYnWlkp}*d{sW30qCELr zL^F7afioC3xZaCY@2s5lw9l_CNBu6do~FM?`TD=9K>v>t#EKo+>S@ayO`d6MvR%6R zLQ0F(*C43o82X248k{U&v3$L4Tf?V7L#k(!^fSgd$~02$#@IEv4*KE_4JEnPGD>nT z4-IsAX$*cRx=b~VU+oF}3Uk>TOmeWCl!m4AVas^H)R5!^RXxj=4r1~Nw~}jjQbmv1 zjFJPcgifoZ|0>)-O|KSny9Sr;#&|7SELFGc&x4=q)}~pYV|U$6tt6{i`P`WDOC9v( zwaQAK>7wh!Qg5ii=UKiy`LgCK_@G8i{j0lyy$5HUFTq4C(>M!9_~i1D;TlaI*La%k znn*F%6x!}8rb}I=bfv3|Zg7>;PFE$}>#CvyxPQzwm7a2)O22c>q?cT$(aWwG^s4K0 zwGeWQb}!ByEHk)~PPNToHr-*H!IiYaHiH{ziERc?p`yE-^RO3tnOu%R9CQ}(VA>)U zliPEc+F=PF(r{eG7!J|Yqg2$*67aQ;{C$tDY}4>-)mp9U@Asi2X&=(Lvek1ue6FML z%ay7UO|fgNduezV-3Z_KwY@Z2eXE2OE*w{QlYG%6>dLB!YJIRX3QnqwhT+2(A5QWo N diff --git a/bin/Setting.class b/bin/Setting.class deleted file mode 100644 index 2af6dd61bf0f3429dcf4e979e53809ee2a076053..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1935 zcma)7Yje|95Iu^YQk0}|AV8o6%FA&8^M-;+3keXw2@jiO_`rv2SqTDL_Q-PD{43}{ zm}zJF1Nx(wo|R<9iPDxY*Z1x{yJz?8>iX}mfBXgD3SJqQz`Txe{4C2aIUF*O4lVa( zw;;=+jt6*X5b#KrC4oMc-IE-SJXL z%%;7r`YnG|wfcK7&l>M+%O^&!IUBC>`yK(QdYzWBrqk=T)Yh8Q+^~HOlR@OZ@3hKG zs`qwTbv0zW%ClWw=4!U@lZ~cLVd-g@3R4+&VAN95T1n>21m+3ORvg#y=b2G)c2z@q zq0?k~6II8xSNiRS?bTJI6;#x*RBKgvj+`T7+JEaXjck#@#Cy8B3$)c801pcynS=O@ zTAl9JLdW&(-&o|iViJ|Kh@a8(ENkF4+O&Iqd@|O(PCIN3>k5=TP@EkK6SpK&oDCXr zb|2b(9S-dW3_@f)yC*$7xF3S~=Hm2HNnDhW)TM1|z#bu@>!Avw!4n69^L}Sg?*CO1 zPwbUS{q|76h+@9lw99Sfv$3kzR<2w2e{Ge+`Q)@1wNBr&?1zqwgc%LwMVVR?-{S`p z(|Bp(FlriR{ymV185}h+hh-Bhc$ULc6E83+mWw7X;j)PWrc7MLP0q)1rx_7()bwh! zXEM7=9VnPAi6hYMvoW`Z85_T* zXnEmz`XnEg3BFDlw(UDia>o}1Q(O;lKZ1kYQN+Mb9fM!072h9&!9BI+dYrfGNO1?u zl)gYKX`eA7ORDrI(yzZD^BLKXyiMT**J-i>vwZW8LZ|mQPT>g8CuudqDEJXoo=)$w zJm-mW<6O*{W<;P+`h@IxS?0Ep+eUtEhs$6sz;#x5BZz+@^oZiq7e(Gl<^^UjN%Rh9 zfhcmO`IM1UxaV-52&s3Gzv7iI{SJK_#s}`h>au}-aj2Snq8hPCHKEoQ$iR`KUwAHa zcPUnOX*bj8-r81?!`e5oNz}`XE&11(ttexZsGCXM#`eZ-us2o^cREDIni>306U}y% zGNO7kek<3A7KS$wgI<~oBuWspk%v1(pvMF{8z!SD1R=THiC|z-*Ms25{BoJC438b+h#S~h4m2Ck6V^dpZ=zFLC z&@bp~J42jKA3A;Fp&!-hI?}N$5>NXgoy$J!viCk3{r%4$e*&1nk%4~PH*gsb3=Cr~ z!O^^YJd9((z(@F4P8Q=>GO&zCa`M=~6RgO+RUJ>|$|nY%Atyod5^gPybvb#i<5L|Q z0@}P&b=(Dk%jw*Kbz)6btm@uW!L2*hy}5}kf!K1bYzqwJoT|OnJSy7tO{-YpN-|d~ zS(PoT?#Q`XjJf+xLjXKiwT`@~*H8u0UARK*OSM|XwyGX|yln4oS(PTCQe8p>jNN+e z$k!`y`@exhwggq`rCQasPhEk&f@_ry^VYGl5#6)7+6`@@tB7br#$T}2HW7*s)1L^$ z-CA4stuDI5OzNbL!YiuQiwAbeo$F2#Ih~ee>J&gl3q(%u3H%>v5S=JEdsWMA)>(ub zxq|JwY>xR5Zrkg^9P3f2HR~n&i6eU?rGiz!T`9%HCO$JUf-(8nGO>*r6QAP?wvCP* z6JO#h6JKMLJ>=G#HcgxO2H%?a4wjChiIO~(MpwHo_uG-k>dA6_KRag&WS8*Yc!ORQGHN`hMT7TL&lwY=utKF$8VN!zd7 z?)Lc|Hh$S@99OI#wwu&^~R*P*Vhwv}3DoSLH3s zoyopHyhAaJ9tMvhMt}rGj^HNY-}30je4v2tx}qaEBX3fS zVC371*d>M}9+!NR*<_*xgN8iLGxVO*Azv++l0549OY#WV`bkVM7gYOuV0! z8T8^kX5>S9HE5I5^d;^&U%Vu*~$!t(AaO+V7A%t~4kPEr&raE5_%^vc&{ z3sOnf$@{KC|vItkD`ppB5>R6vvp8P*XQT+}f&xJb{_ieXiGW=k`x^mwV$Z$5B5 zR*yDqJKfO08t~NydV+0@5O(>TFP^? F{{n|P#B%@u diff --git a/bin/SettingFloat.class b/bin/SettingFloat.class deleted file mode 100644 index f33e43cb2700133b398a47131f725ce0344282db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2960 zcmaJ@TUQfT7~K;>5{3yvRDxD(R8UM%)Y_JcT11Ozg9<2!)z*Ow5X{YFLeXCBMSEFY zU43XD``XubEiSIQR#%^V=(7K)tL^^I48s6vc{uaUIp5je-rw1C!XJPC`Wt}b_$qk% z`SU+@?8ciqUPQWq(NF}JbwqJR$5jl=%!mx5GF+44x(s7sj7!!Hd70306K_fWEt$Km z<88bn3wLywm<(e|M=R1YWTcoS(XjCHstq?Vag4bKdOEnT46|QM;Ti%=8`_(-1sY%n)WvI$N+VSM!rr`IJ|Z*>?8h+~at87!&}9aSD1~v?Kp7PSHqIN^i-duFGVGC|iWJSerb599 zNV|b~yc@pQ2qud=0`;+h5J*GFI8ZXZT!p z_e%80Kp!3(IEB+1nm2BtV_Z>`rxvSrHrG99R%Yo+`l3@BADWjBm-gD~G|8XCCWY1V zm1zyzItOaGD>|Od(2icEx>A*H>+!p7^TE3_emw644SthmHD|k@S>q(XBCC+OZ031P z(M+~d%9;0_qH<5HD^J2rYi$@Z?O6(}mNKTzz3W{2e+=|#`EuO)>=LiE#-U=ymB?1r zmy6XxhL;sva*-8EX4xuGbu{fu6E3R;bWFz$6?2|ULT0H%Ng59O+f>8W>&~8l>+)+z z*qFbq)8AsZ05532*(qn_!qB;^wDNBLo&a^cPHARFn%G-C>2N-E&d|ynJNR}EAq4nr zOr{zeW16voz%P6a;DAb%r3AO^#X&}`PAWR_3E#L0Nu&rQfL$)&5CQ9CEtzWn55OY? z>{fsYCv_8`Kp$q|fPy~aLQfL9p3nxNJ7QWqSc7aIcb-+)C!Aal+i=Os72se?)XgeF z*T7LmK~?XVTkkKfgt<1HTtQuO5y4n}`xAtg5gt!Uu!KmmV+jq(cyI}NGG4zVs+Y)b zk&}yP{QgJ8CGH6&ePIdS=3j?Dpd<`*N$4-p#*v5G@H`v(;lDf%@;THOF z8<+Uweie6=xIq%@M-%^(NU$lS=*b-RWDa{Whdr6Ya?P=t>=42Ac!}{=X#Ws86vl}# zUJme&lNw&Zt8OPMOq4DqC?nYQ6w!&)3Yt_S7O~|S#q+U@<~3n4Rm4IIrqPC3ikkDC zc*3KbK##HzvGE$CfFeZq?qO-(kS>8oTo6({LLjw_mS@xjpE1ZVI%d6J#4tsw-H4NXzb_wgffE`T&ONN3xgqIF^gap_`P zk|K62W9Kqnkj^=`K}g~K;OkVISFg?KRP$N(r{6^$B(n5JPo{VRRJm*IW^u40KJL1Q xrBmH`RZGVkVhN(2#DI%>(se>eaootxL3GYBCR#5-| diff --git a/bin/SettingInt.class b/bin/SettingInt.class deleted file mode 100644 index 8a818ee481da09d397ad33edd26e8c338369f2b4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3060 zcmai0TT>KA7(K%-Gs`es1i5$xHBnqZyoC@!4U!-v+#(7RW6Zz~%fPa`F0%y9Rbxov zt*lgD@@`dLlPWG&tV-p{hx~#37^{+;Z)SEGWHnUL)6@O+`ObIxbkF|v&+mT#IF3g; z8ZfA%5kn>H4M#Ad!@vhRE?`tfE=qGrnlWj{rMawOLZUvDmn%9x!c`3)>!`#~1lQ#G zi8Q8;NlXb+ECNeLre#%J#|&&)Ix7Kl!XP2dyoQGwQVNWDbIG31&X1XitffHdmmxbD z7%EwCth7I^c5%u%qoAf~VAfnT+Y)9n-ZtuF>}0(2@R)*dPbx;3iUB)m4Q1yit;|Jp zGQp9mfz*_l7&9}ry!(S;XU1Mo00qU4?Ra5ZU=`FBNY*deA~9>)XI5V*rr(QVJ$_V# z)%x8Xg%`Lh6h}eXsAEpe4Vr0}t1DMhfj*r{&3pAKI8*?luq+Cz)TUBN$66wEC~mPW zwEA#hc|W7$R;H8j3liTH%$A!B#0PdkSyWIRn94;{F(;K{e=vxbTO3&A54}KicyiX7 zayqxh$$k_q9hIHl*g`*AW{xTNzl{0ll2JRJG@WdQ#@RbCYB>)5)fK?a6?BH`=%cA@ zX3FZd#Xl8(FawSV4Fj*^gf!O;WFTHM;2^6ZZQxTZ8MuL70|&6*z-!X%ljbH`6>Qt6 z!p|l!2Mv6N&owL>_!8F@)NMq0dY#MKiI|m9P%2JYa8E{~fv@njfpfT};R^%b2uv65 z@VIbi-PvyqEaN*3w+;M&y9VyzzJUi`+-U=6a8^O(i@E42zuX+%tYatI`pktH`j)NHME&P!nVt#)Oo?A1U zaQvfKI?0n}C1XS8Jh!kcW-p`@<_#~Y+$EdRlXB@`D&~`6S!y;NGaW8e&2*Y53R;8A zUg~Urr--+`DabPK`|=IF2Tf;&31XA+l$5^7$ge7N6O#ggn><4%5j&X^g_|dLanAkp zAm@uSsjO5OZt9g;HEm|BBng!b1SDZxc)?txBD${<7jx}}^MgGjba(^5KtPDMF5S+a zBK~)uJOX^`9HGehJ_a0=Bt;jb7*$K!I)}+aeeGs1I!ty4Z)_6Rrst;ChzO zZ@bVZz0g-cOOj(u;VVJLS#NQDa^8}P$uF4U)1({98 zq~2n@!G1NAe+jK>XxH$j!aol30>E3o5DyqABDJ%OP|H&o6V2-=b9Goj`7>6{#~Lc0 zqH8!Xf#&Qfg>m<>3gJzq#WPPx`%R!Y!HCkR!# zx`Cv+aN4J~%n9*mhfrhA+GnW9b^nC%tMseF?s#Rs?@ws*bV0@I9=Q}faUFI1h#bHo z^}p$o^L*ctC)eRpQd~-56xG#}4exND)8ABB?t5;`rUykl8L zmXlAg)9cON^Ii4}%5p)p+zNI*bG@~zWevOe8c=>iRT-5HumBU&-Yyn;y%sw zkS2PBDf~#qe+ps=zMi}-Uu$ohQ7dQZs8Zp!zLkK9LOk&kDI8^l`oZd^znRwTe)&tvI$7rkyS s9p}X{MD0SKk9x{Cit2KFk)4O=ZL^w3REa3pTM-YRRP!F*cb^0Q0WbJ+*Z=?k diff --git a/bin/SettingKey.class b/bin/SettingKey.class deleted file mode 100644 index 68e8eabe0429d4dd1ef02c36bb3212bc96d507e6..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2793 zcmah~&vz4L6ur}=Ni&_0Qlzv6u^ua=No-0L4HOV)g;vrQDHO#YFiD0mZJLy1Qd$+{ zcswq2h zxh`-Y%Ds;y^oGv2AIpnRWcgHHd=|ycC~j$poU*I7b4Ej7GQVW5nc0e2EoT>;x?L?# z%#18*2v62ZmWD*$u3B@=m4a2jY8EOy>CM-QW@XW=+p<@OVdswB&;Sjcj_r71J8(6G zmaPp9+Kh&yyX4);M2P6O>$Me+8Lu))v{ZIa@BO2bvog2 ze!+4aI_6XWw=MJx>#Hx+n)RY}!4^X#R4^+(Dl`ln0+#}c21+<-z`|`hD2lRyJFpEb zVK|Cq0~M@D?91%@wYl^2*XE|8s2ZqY)xcfUqi7g#1S*53hP|5-6_qH~4BW%8fl-V} z)EfrYu_4>f4Sazw4cy0Z1IKVwmT?0Q@RgAF#E~yEtBvaumNU9$R+`p43HK#ub~l$% zvTmErinAz@oH+Le?WCyePrE7)`>jqA}4+19~E*g-K)3I{S)?yq)bRD`bF*2 z%-R#}Bw=jmc@eXnUUOAsvjuD>X98xZ?H1BsJ zG?0i>Hb-5F|CW?RVosQ)TiEj)iT2}PNc<|#y`AoPkN>P*gyh$!=r!aty74Ysa-M~m zBE@N!UZ0mEKu<_%5K>`u9O&osD6)#vxLZb`EA=~iTG;!DQC`y{i~#?84{;R(F-Bp^ z{V{d_CZk2uV2XlzTiDm}GexQAXL#vRND#fk?%^+Ri)aO!s1#s3=(8PkOX#r;K@+n4 z8meU95I`W3Qk@Kw(5a8H|2ewlC(}Y7fB&PWOLWsR_F{#7tug&wx~JjN@LZhqX(aI` zyDp-Wfu6E_1JcrCIIb9-BOj3;OQqfV9oTN?`>fi7fYO+sBE}Tb7lCV!$Gj34Pbr^L zQ~!3z?^wX^1FYjdWL!Z4am8A5ee2EMS=B0IvpoZ1sbIT*2v9YAT*GTh&pA@fDdp3O zDkquN+{)9lPIrJ~aEedhBr#;NCuCZPn!zcBdQx$WxE!~$^AJ6QM|^e>oNx=-fzz&< KGaL$0b@pEuWEn94 diff --git a/bin/SettingMulti.class b/bin/SettingMulti.class deleted file mode 100644 index 06d5f0847146a6a0b870bc1a3d00de6733b8655a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3484 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 AAOHXW diff --git a/bin/WidgetBoolean.class b/bin/WidgetBoolean.class deleted file mode 100644 index 0c449da734f94956fe74aa217d77484585225518..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2909 zcma)7?N=0K9KFNtGRra`tb(DYSfa}=xM^hxMars#E($E6_}c950E4r$xI2ql7WSgO zzjrFF?DWa6))BBg^|25A5B(>d>^?ICJHlq31J6FM_xauXyU%a_{O8x-0qn$&K^zHU zFoZS?g|HRFHSDE=7!flsiNUC7j>ZkR@1e} z;FM^xHPA2~;_5^Qlh8#oC5C51Fpv``OmQMF@TNmJhe8lV8J6glf|v>7yo@U{F3NaC zLUp=iS$R{!hGbTY=Tys@)YW26HO;tn-iY_wtKAZ6##N)Jjc6Av3E||FI-|x7)trc@ ztb%S%a6>~;vn+OpwQ;SWnHfz&XGO?dKC2n=l%AV5GzWe_%n%}I6-w?E)z9gsZuLlL zizHJHaBn_uXsX%0^78gk3H}5@B&ntC_PB)ikO60B@_Ke#syMB!n#UF9Ak(bmlZ_NuHX&yD0mZZk+Fhj z@wS3KBoti5J2GBX@E&?(yr$p-5z2@7NXEMgKEbC7KEvkQ^U4mS8E$>(NMPck@S?7u@roZ@8|?G-#VijLXgJAZfm~K>KbSD36I#$ zL7KYGk<~RZ{a6Ms8=v6$TnS!R#C{11ix>*<23DWB$lUk1P zMs|Z0 z>{)Gw`vww&*vt>uR+8QZKU)?7eqQNZ#Oz-dAp4iKhrcpc;&_7X4vq#8fRDem(O5@V z3Rf+__Y;Rz{5pdl*ebRi{O!b(?6o>u@f1Ghh=;I?&@683Jwxy+8~TO|{TG9&=GsuS zV*&oCG>1SmTs;pt+Bt_{w8cM%n!5;%Eugk55WNd!tR=93x;fOh1fug;6^-6T{X80? zF>&%X|L4%ig>X5*U8v&)d&prOgWQV-^r8s~tj9iV!G1D4z`*+O0t?wb^dpIb7{no) zOpg=X5}BbTGD9vIhK}8&CG;6W7khr9cA}gA0g`+kJucM)q%NeYcS2qr`vq&NP>$0P za*)vu*>^WPyO-{+XM}r*C6U7eFq>9ljuP|e|6uk~5hvSM$wj1Vhmi9RwAre%`!ky7 zv34GhT!-wx3BT_STI{)XLhn0RFR1uzPc)M{aFRAUO`D}DMTTa|+94`F3|QN@82#BuN@U3nWdsXKV=)&thXngiOh3^e?> zeKx%17DI59+DMInJlk_J&JXk@T=CGE^(gi<EEVXu+R%dV&XB?gWYNvntzf)&A?Mx{cpL6fsBsiG< z?`(3;dCz&z`}sU)_p@()cL~61{33?i(N~UT*d>SEa_CpFCkDmezEAG#mBWA>_Qg2t zFT(*jAC$u(IovPJJTMOrVo(l-ilG>4k&;7NDwtAXSPmm)$i!gbu!`iykiaz+FeWjxj1 zV`eUArOmC!Q|6d!Wu3gh{O-fXF{7#AT6R;9G1e+j-fxXKhFi#)0{7f_+SZ*mn??=S z%~(c$)Nq_8cie8G*Adfg^;K=d8ENWrTyw_7q_L~Y|lwm|m` zh;6ou9@U38hm}~tfM$TzY2-63oQ5BuLBlHCsUa!#?vg_evJ)Cy6f_*e z1`XpluAvPZRPf3}cv!7c7|E*C7tOuoKN0w|Sr zT*GqmJIoW`aoam|*i5;tjbv$-P^GU*tS(~S>5#ZE^|fB36;bgn4Tkwu2Q;IC zV;h~u5knoSu>=bl<}!x1l0n>wwG3ke)?*Xy;k*r-(T#hthPRf|#u|Q`t!3CD%00Ln zKjkb}KgK#Hu%7E$gr=w#R?(t@^~Y7z@QB>@GYoamOc~2ntG|y}8>7~XsGJaro+x7e zPSFxcLw{+Fzu->1h}ZJ>icK{_!X z+u5xhSj0};j-7;2AA7Wm74OGJ+{cpv9Kb%LI9fQwSM`4O^O_Mh;w z(R`gC4uLLK)}vkMUyN0P@|1snQB7SDi_eo;l3y`)X%d&ZuhX51rvKvXh zQR`73@L+;(6L5xIe}+gqi^X`B$a#*>>GRZlk-F!peGaX7i70%The# za^bQ_;1jVCpNe)|5xw|ajN%J1j%US5eCZ);n6GIoBi%ucD)d}p%vaNld25<6y66cQ zlN8$n#%vbN0b>%vm}bnW0I7>bdKP24P!Ye5s1Q>~K#^n+K6Ajihjf{PKmWzS8!5EY HBTDbL3eoLi diff --git a/bin/WidgetFloat.class b/bin/WidgetFloat.class deleted file mode 100644 index ac2ce6cd2fb843ab0b0c44ef79cbaaa75ae527c5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2964 zcma)8>3u_HpEt5_O=hD-!uWJMS%Mj~jzn4H=vil!`gg|S=3sBGpU z$fFQJ5l_jNk{BwBuw_{hxIK;7i+y5Xzla0!;ps4*QDH?eAJ2vHyo?9KctOS&<@-xb zco~L>S5!Q!;#C!|DQM0b88fF_1D2jK$_kV|1r24(%o-&HQ+Mfm^d3vkkM$(2f^I8l zDI2zJ=Enw&QKMw!Glqh$RMzOp>9)Po)XOEj-I5I**TbuQg zDQj;tNGC`F3RKTg1tHtC-2;~y5c+1hXzBa6nAtId{G!`0iAO`(Vd7vmr)@p6yI(Il z)|?<7Qt<|pt{_mV(=)ouD1sg#Y9OGZIkyyJ3;47jDBNzZ0`b;}wdyn-2V zpWa|4pBI8oFq(^cNzc``2zez%k|-Iu!XBfJ7)ci@rHqj@B@QhvS10J*5)uu|F)rdT zS!#F_hczt1Vhzjin~Fmk?#EjS5;vY@4e#Jx4eyC~A0H^tT$5?1tTcRxBVz8ThD{it zL-o9D8rfxJZ29<+#)dnq;bQ^$1fMdPvGU3}u~>I3JIWZ<&$#hjS1~QttcK69M#bwI zj^Q|Squ~pDso{ih`U+obco-Wrd?OAV!?!Bl*6=;nX!rpq#n&G-{3N!5u|-R=%!@Bn z;?xG_*72fS!_PRy@3-SiMKGAh@BcbG-b;|=j-GAY&H5x>TT;JXS$x3O#+MGvNl6w+L#%>(o( z7jls~2D$m5skgC~abmOpo{ZJI)KMTtTCS5-%(TE3OdDZN8rJ`1(=2 zn2YO%o%C=5>|X`5uT0#{hSR@c#?)imMt(j^4g?N@@^z+ z1mKk&trf0wO>i%I@dLpUxbBnDCsh?1T;Jb2fVq4!yNTO_03~lUKH`epD$dBujibt) z<+z*j9j4*&J67tMDCHJb`!!jR7qdP=osG{j_XjL>% zBDyj-GnlAiYT`UvhGzyRF>L~^uI^1uM~-8jH}{SoJ%(wV)-{lYn`C@Wdf+j5GpNVB?$6c63j%yjY_0$?- zTuNAtgXDjL5je?b;}pM2w3fN-FGTC~g=n4jqQ%%ycQNg)MGotT9mE4XIUUM>gbb;8 zP(@P3dPT)U+*i=YY`IzM( z+{tta;Bo;IPzP!*b5O+{vUkl8)-6VzB1zF=KM8I0SzUg?YKq@n8V498DYA8~^MbVm z)iRShkNLxsh_x=L;?7R~TH_Q|bX=Os2Fc?YqWH@;O%EhJ5>Cg0XT6Q>v5~3b{Vy-E z=SPw{q7`*Rndtl-ol{U}<+j3BG-I0&GkPJpQ9Ob{2a}KC)iJv+$J{|o{W_RK4!1}D E2eo>(oB#j- diff --git a/bin/WidgetInt.class b/bin/WidgetInt.class deleted file mode 100644 index b81d54f8114fc0bcd96ceb553f777de60e3e0902..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2854 zcma)8`F9gl6#ib5W|H)^lt=-Ur7V>+v`rBK+3Jx>u#mRcV6lSAG?|7e$s{I|vM6q7 zMRCPl1Q&4M0BMSH^!T%XlzQ*XB$G-(PEX&wx%2LQ-~I0Q?#o|)|MmxfyD=3+6hnR_ zg6P7Y01XcZFpRwl9^vN*503_E*r(v0AcA--2p=9-us?`K9AF34k5L6r@H7>KhB5w< zX2*j()7fF1!yn=y!?tV#42<)TQ;-Z|F`o3Jz|SIoHhEU!VIqjbIKulL4d57_VkA%V zaGcjYN!82_u~Zxc?B;jcuAnSsF|j2q=&RIt)Ll6O`s#5(xO?_G!N=(F{>Iz z)I6MtW^*Ym6HVyZd`639a;n+ShRp)LVn$DC1%bKa>Vz82s75;4XP8==ZN4qKp_@Gd z%fj)5y%T-g9Cw!{%mQt{xqVo`+e;w@=EQYF8z^N*wZa~CG((n9JeO26!)ih2cgN@@ zd_@5WC{7Ln^`>sx4%cnKK&>1sm&SytCJ*(ic`KO3#|Z^5Q!xb^)Ksch&16Ptg}{Pv z4cMWQVK4*>Zew08sM(51VBTyC1)2(4HaDTU5j};HA>avf%Dz%QrJ9stuvF9vHWw5r z++GvQVTjfwa-~92i|L$V(_TH5)=Xlvi*uD&hm(|=#49){u?CkFoRD}GrvxImUQdbF z@VdksJiLjw1f;!9!m6>v+c?cTy+gur86F%R*ODgN-<4R4Ujzbe#Z9ekZC%}CM4-FS z&SYCj&yZjw-a`*@F7ZA-kob^cf5iKKj5883?2z~bXC?X(mpF${6--L(#14vHO`Z3Q zlW>U9R*BE?g~WMW;MtcFUtv(eXA<9VhtjkbdkUSP?E! zwARj^Rsp}2Lsxf-iLXjmpwVH(Hjy~p{9G-pyfNkO;h8~VrS>hgdUHz8O7WA(_Z-x+ zRQkr0Ud(6Iqc#veFf$<0nUq;NcG*&PSk08kLG-anJyK)xkaqqnG`o)E?$-^|aV43O zvo9Qr#TZ3<_$JN4&CEIo?`-w!hJVgZ{{j8X?77Lk_Anpj^ay=rgJ4CS()In57OD2KQo@w zmN@}OGTe+w-|3Rxo1>n6guFdOCzDZAm5N`DsYaQrYL`~*HA^erwuYU2XHa#+s=HLl z+UtY5Uq$j(U!oN1hj#S$?#42@IHPnWbfb<&>VkB43+_qu^wDe`*3-CwjBDuKOV)Fd zj%kQUsICl8Wc3uhkt_5+h5Bpojqv;mlu7&Px1MDL{zR~hhRJEjfygy9j&x3=X$o^_ z)tpeX_jk-4@z6Y!xQg4#m}fh;crRduGqoT7^9a$5-Ds1R$uj15M#@+aVPhE!X@2`9 zLg>N0G_I#>9F$)@mZJeH(2SK>h&J?K6?MfhRJ7wbI;eklQJ0QVEA7TvVqhbAMeIzm z3E$Hj<%})F4BZwq+e#7Y=>GujqhC25+)vgPh<_-MSHU&~y$T*su$|0;yRuCm&Fbh6 zXtKfHvHDlsSqFw&XTc3xUm5fU3&MPRbrnJr9z-9-65P^n9COk2F}G06t^X5q7vfG# zjZ)%7*IvWok!dUmEiI$f#=PuQ8OzI9aTP1M1Qp{|v|YwsWvp_OX`&#&Hu?e8OB`*t zHkWo-Cn3Stl(Xe&OKHGwU%aA8(V8SQMGMI;q?RCI<{^;sS2m<_OtEo9YpC)I2h zRX>h>7_7m!zlv{w?3VJ0cs>arE;{R7t&Uj2x1q9dFIG!wuTIoNT~dv@+gkO|zh{Q9 Ar~m)} diff --git a/bin/WidgetKeybinding.class b/bin/WidgetKeybinding.class deleted file mode 100644 index b18ff572934ddcaede7a828fd04eec6d4f914dfb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2944 zcmb7GX>$}s7=DJ`WH&%tC4D5Adu1!5?8+mQT;jW(U|R%MaT<-Tn6SzWuyUzrDZz^Yd>2w&Hso zo3OtPS7KN-cP25Sv(Kr)Xd4b-EP;bMlDJFFj3;nN$3on#2KOk#dsTCvGB~W`2n^Ls zsA0Yh1xPiV)KSEg4inQlj>2j~3ARpXN7V_nm+jv@vaf$!gEm08q5iS{k->qX+x)4Hiu63wE{@1a=}J2UoZ>;qs=&qY)eKY29wxrnghW`cyU-_}eFEd$ZHVjFGVnyO_y&E`#Xp9@7x- z<5@H;&YHFys+K0CJ8Dc=oLQ1}@`g2LxTYG1lX3D;(EtsJ@FW^qJktv{T;xE*LZeXV zGc0Su$RE|PA{7Z@q-xs=+7F|>Y`8|LKBZwmUh0Jeun$>*&v1fNZmeuuw~>PCXh>)O#I($N0-q~{FYu+nSIXBZ zfv@omEidFyLwhh4N}bAWfHefw6_s8@|4Hh2bV`;~J{y;Xparv1wv5>TTV0UzyzrXE zQ-_pFHa8bxP$JGN4$3;l`=DWM^F4tF|30j0mbFm!x>=!w!U3g9p?CUI!>+7UWFcHh zQfgy?_#^b@W-Fd7F%YLpp?3wEHJ!{bD}qN}q*3D8^gyOTZJ-NQvXzco%vi^!i&n<8 z%T+Ie`T3}! z1taZXp$_ww%ezt%NiSB-K8F~`)m3JGHKd~1uW!EizN!or4y;W1e*KzZfnLk=_ zsy5H8>ffmEA!(a=8Js;v+B9s6I;%@9;;inUzD&FBE1Dv|I`ei+Ixe3c4L3IdygLFI zT$$dcw2SBypsIQxvPKOehb<#}2m6Mxo-gAjmi81{*s^%=EvLTGB(&Cm847Nu)g{3G!e;Ci-O_=u~27cE%D61fJQ^t*z7S95g(ZeRtw z5xZ~`_TpyNm~ET^)&=o!TAbpE-v^4%h<&C7+^Z@AbDBzVVLxcU>u_`_&-Qu3{yCWY0lIsOY;=BGU190YyOND_hxvu ze$MKM{f$1Y>o0V0W)DdZB(Rfv6upAs)T3*#xX9<@Fxw+crs4Y&fqm#jQ*T6wbzwTz zG=PG1OfntC|47Hcd}v!4mI^J-&@M!>7*Z(`PJBKbzJ_5q+v-Q-x!TG2Wi_n55Xa@Q zDiItpkHc3l#2G@XAIF9z>so%r`tca?F3*j}*|qxlzM_T=)I{zaHvYhP1N8@cjz_RJ L%wrGwRzv>+tzod; diff --git a/bin/WidgetMulti.class b/bin/WidgetMulti.class deleted file mode 100644 index 949885674d2087395ebd1823f362898c11d7e524..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2342 zcma)7YgZdp6x|ab6DC6n*g{)t8>G|_pjcR9DJ?CaJT!qy5XAbLB-1c3nZ#szOLd&*hI=Y0RhHAx9UN?s`MzL(_o=I9rXcxX}ScW|* zp*NAr=(cTGg|uVZ#zbmU+t!9n%_UMW>k6D=S*oq@*)d z%4z1RRx!l8FKlM8RSA$FS3Tbh)HZC-;0OQ@-9TN7sFu&qXr`Ifa$6F*6M=Y^9m^6Z zZbWTmt)dkVL=uiSQj`#@=*7~uUia8kaah%+gvcuFl=GU+EEK1zSG;uTDbXMBc5~6{E5yE@(iAYw}P3s*#5#&OEn-OwsWkWBr4Qi0e zbelJ-WmCK7c^CA32#0k|CLVKdf;UFcrGwO*%GpNA3ebr%3FjKS@z7klMg%*=-ILHy zel=>R$ABQHguW+IBxgOEKN?*-A^nnMaur=C`ILfV%#^Nf;Xi@QtwP=;uE7NhjgMCl6{^W&c7 zNr+l8FN)Z}?>H7hJr2b^9YGsy1x}ZzeTWmoi?~c*?8oDLwjcF*nLfw=$LAGH_;Jn? zS7g&E>iH`=YTU74dw8lIYo}iW1=kV74Rm12^{;xCe$0}XsJ_=V-)o=9p8k&4aAF@_ zY*csW$r?_1qEj`T-ow*%pcsn?e(R%{V~gekAbp1*oX0+hACuH@FR9>R7$`CfO!Smkr(Qg4FS@ zzrf30cE;(oI))iL<9O}8f59K&IO=mYnGpIRnLY1&-aQ}BIp=wo-~ajLR{)psZ4@DV z5W`t~DB^kqH)1@w8N(QI^6n!!{#ev}3teGZ zk#39F6mdtyr}E-6*?lhJ3sJv};48_Ji$GTh>XxN2l;6^K^^E75R%XF*^!>cqaI*^0 zqFJ?d*K-Vo3oo*n&2N~Ms^Jz5*EQ{Gc8*THwplio^lkdYTRxUg9U{eW!gM zo;7XLontl0=hOOW+?v@?KpUd%Lk#Mbio#ejUokSUuc+*7WZ z7A;5q&yc{@A}A^JG3p{)TOvY*Q{8}8J=>OQ{HS3|->-Wv{q_`&JH~c>*EsYGw>qT| z^BRWJYM{c&0O z!;FaYcum6_sA{NTo~3Cp!7juy(-q^c?pba_!xl0c?t$Y}+-#%DihVwH&Hb9k?ir2- z8+8pkn3t$;YPc^L959M2J5R(e_B4DgyL}N4z}^hLfS?MAmk&*0;8_eLTEl!mT9I|+ zPmsJ7vgEqkxm?;Z%0m4kBx;{d-eH^RwN^8P-C@hHt8R^Fjm}xL;guRb(-nr3xg)VV zHy~`>_jHR?4C^~PhRuFXcQd4I*A1(6)NZ2OF}L12B5MeUmu6Au=@@nkp|1(83E<^D zVxSPcZ?~3B(w2p+)ElO2))}Zr@V84QL8Q_s&2JiJwZ_gxXk7IB+5gN}fUc`I3X3bD zbNuLx@yi!LR4B)r_o}Z=a7SiwALZ`?E>cfYGib>Rit%7J@gr0dfyWr;CecLjH-wt# zc?k97-#>q#O%Rimab^G#&@h72T*okq6i+n93GgeI#uT+_K2ZezMnL^VLq%?9C?(}8 z%>rEGsRM*l>7Nl{zEl&v8g!Tl9CHcNCehZ%ohLV-(d>_l8C5V(i%P?19kn$SW02coPp>Uo? diff --git a/bin/WidgetSimplewindow.class b/bin/WidgetSimplewindow.class deleted file mode 100644 index 4dbe60671cdf8ae779ea04ac82d7933f4cb527d2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3378 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 YKiwtq!7hoP|0fbJ5chM;;=%bp0nXaYApigX diff --git a/bin/WidgetSlider.class b/bin/WidgetSlider.class deleted file mode 100644 index 938a94c0cdd2cbda4d2b0e2a28a80134f77cefe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 498 zcma)&PfNo<5XIl7X=6idZPjWoiWli0FrdduL5lT~idd=VZL;c?O#;bAKbIE;4}JhY zlsHLyDB{7(?7o@D`!VzN{qYIl6m1(Onl?(pv>dXj$!-5G;9qAx?;laaX2!nsK9_*_w^>BT-*GoHv?ubL($rVL7al?OA(Z+MQTXeptsWN zzk|IN^9`zY(cLF!8&%S+rHlG|q{t5koB4TALw%KXR%oEydxP;i>VWWvMU+D}GOeN* Jwn!Oh`~U~zXgB}> diff --git a/bin/WidgetText.class b/bin/WidgetText.class deleted file mode 100644 index dbdd05e5f9d22467b0a87ca8f529bdd5e2cb3178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3352 zcma)8X?qh@6n<~hWRi3WB~TO)C}1%SXxta7qDG;WfY{X5A}Z5l+74tX$pi!!+&6Fm z_kG_tTpH^7_{k6c4*!Cmd>-{ZGt*>>^T7{u=iYPAJ@-B5yywjP{`U{R0Jso8#c>gC zk8yTK6nDn?-XjYmhH>OI6ynfeiey6eCN)gO(cwz0DE4aDC!57MmZKy)WjRn0-D%m_ zub~=84Yr0$<1|^%5awqhvd{@8Sa+h9vSWxBV1mH`((yt4M*a*9}h(FphzBy z<6%4!!=rditUfLZPed^$izh{)9L3Qnj%oNo!_yj`QHbS@VsYHa@2e?v-=x@a8A8slbBVMVrJrb~uxPgzE-WR%Nk`(QEcY*IO97A$*< zWfltxs{=J}m{Xv(Rx|BVrC=(kL4_`^Y^yvuWKNh>vz(_G3Xv3AM5C@c$7cle~^GF;A__SQD_kRGjk+%&$|%-cF%#DI>M@Uo6q1jVa( zO~;s6zXX>u<*fsAIneN|jyLe8j<@jkJd>{LI^My%I^L7veHlKG;X{0+<71h9BC}6r z_8C6c@VbsKG0f~U;!Z$&dTTnq!jOh9bbO6b4JUPcD=5FijE)9Q$<4E@6F2VEC&R@* znRNL0O|H3d_hbsaL2;7mDW+ZU+hwlM7o=CWtzs=b$B|rpdb(02gM=!>Q)Y>2?)1vs zy_IRt&by!08Y0J8)ycrJc9oqPjFzpuxx)~nk%>x`y+YxN03!PPjhoT_K)y?D3j18R zo|ma$82^cfgGk?6w|Fj>ubO6AVUe#`hbvjDM$_Ap0dRcP=K=IdGDV|S>+cIV#!#_f zPOo3j0{P6%Tb=4<)04#*`M}qJX-!V?*rI%;G+nn%@p(=r4BJ_$S+-T71L5T0VBaqC z*Qdz@*i&vJ%UOpRdub$|aOwOOv87rmxn6Jje_jVW*&!iy+a}2y&lfFzM=JF)Nuu#? zH)UNdrMd7&3geSb|I$5*i6;3KpR8M%O4)W&9iqbu=LFEkmjYi$>zuHv%^pZNXU_9% zuKpc1tPe06NW9K@9~=U7N$xrp9@@G+vlDChJ-&z^kc$yUoAe$2Kq%>3&YNA%d9ztM zZ}v&Pqtw`pYdBuZ)t`tU#P`0`##2zK&)L7+^>SIZr_S!=oV$H)`0XAxoLUcI@y%unq0h1i=wy_lCt-I*T)Y#hEkc7N~6w z)VQOvmBt30tCzY*npZEzP1s3;3O8fOGkl4&20Car+`zJ5vHWDyV1%0>2Ju68<{h3f zg&c-G6Mrx^qIW{#_!~;{VhmUCIg8KAaB+`_8dw!B78+PR>L@sp9&e+8H6oSpuW&^@ zd*pZnYv<(aJb6J(HgNXnM-Y*F3EIfd}~acN_(u zmnS?gB{LDU{e}Ij>ESKSYz#1`l8r7m8?)#QPKAYq%(6t!O+{BT6>{BQ7(o@7)cE6=4P18LjT_|Y-ZIdQ3SaL!jNtdj@<>Ws|$=1`K`cqGP>VET{Y@l{~P7l1fcjnG= zXXcwLzxJ@jw0{JFDDeBmbaoJ61CVk>@@E?URL2;ng#1FtX(5ja`K6FwX?RJ)83kXcBQ{;`QSdm+)=+FL zRZex~Q-#s4xK+v(MteGzixh$@3EiQNyTw&`j2=~yUmrv4%N26gt&~q@i_=_siy2d4 zZ7f$X4^AB$HcNx4;XEb5STUW-52Z>u;cG&VmCa2mfOh3n>1Joyp`e8%O2?1_gObW= z_mbXjhK??AJDuZQ3ajH*Dt&YyHEw&ii}09+_gF3k|Gsp-cGG~9+?18ecg1p(7PFBH z#HnSskVVBjtM z*}&U)N5f+xVRcp)YerVi%9|p*&A_{OPj(+R@Dbe4oF>I6ZQ$1!H1Hb?YWTTGek(y9 z*KpRrv$()(rP8*CCq(``1y_0OssQC&#w^Oo^9q5*sOe(CDi!lA^}7CiaX6K487O92 z;-+O00+jkkr*hjf#RC04iKh%aEjPG~Ss~|yoHtOB%&M5zFlXR7yd!BcbywDo_P%Ic zB%3ENpy3$@dqI(`WY$9 zE-6t+-WKw%kUt8kB1x6$GRZ_qVU3OIrG~PU$M_W#nnKdm6(QctMn~mzIn<^7M4(s_ z;hX-uq74+4Wh@Sc8g&NFhLPVkk2;>B9S*iO7fh?`7zZO=N{v`u1f*H8x&{^nbTPs& zuh0_v-pPWl`NVEXX{P%Z!><4QyACP`kA!HZ1Q6 z$8E*`I+58+^qMo4tx-2Mo=I8efjrB!qQQznH7s{$?z|kqrP9KV$jhi$GVeW3e^!M= zMdTer0@3$*bZ7rS?_sp^?cL9x84p}C-1d%>&ebJz&Q+Ib=IUj9T9V#DF3oc{*M@Kv zDjamp!5xmw!4uv#2k+B7a3MYqW- zg(GJ$;P_bgfBRT;w!Vr6$Jq&&I^k7k7LGVB8xsMOJKiaf$#7#|C7Fx_uVZ>uG&x2~ zx}tKe?hJJ|tfX77w*9AaJswO3uV3c19EoybtwAhJL zXu8%JIR>|#u%*{{35L%hGLLN+(3#*EZl6cjl`b9RA9lb_)^`_YZZ~_;jXk)9qrI1v z?ZN%H6{D={1a89#^x^^jR6m5<@hE%p1p8cNf1ab}^N8U!mQ1?U=#*<|Vqa%xdRa`V zy$0`|_V&$N$?|88R9=ZPo9f}(7OvnXDapw`Ng*csl~++M}5D^Etywz!it zj_cXlR(!$^9(Ft}1#e^ULB^r?8Z2Zt#1!1@^L>jC2YI;x&>8Su#O{Q97TxiLXBHof pC%m)R6HoYNaZ5a*&0=pn;h#lM{2c1!I?6`7&khkJ%~0lo`ERDGbans$ diff --git a/newtheme b/newtheme deleted file mode 160000 index 80e3c47..0000000 --- a/newtheme +++ /dev/null @@ -1 +0,0 @@ -Subproject commit 80e3c47b96b81b08593cc9dd099ae8ff5590d646 diff --git a/pack.path b/pack.path deleted file mode 100644 index 89b787f..0000000 --- a/pack.path +++ /dev/null @@ -1 +0,0 @@ -'/home/blendmaster/workspace/GuiAPI/twl/bin':'/home/blendmaster/workspace/GuiAPI/xpp3-1.1.4c':'/home/blendmaster/workspace/GuiAPI/theme':'/home/blendmaster/workspace/GuiAPI/bin' diff --git a/README.creole b/readme.md similarity index 51% rename from README.creole rename to readme.md index 8ce4c9e..7f0bcd0 100644 --- a/README.creole +++ b/readme.md @@ -1,36 +1,41 @@ -= GuiAPI = +GuiAPI +====== GuiAPI uses the TWL library from Matthias Mann, see [[http://twl.l33tlabs.org/|twl.l33tlabs.org]] -==Building== +Building +-------- * Currently, GuiAPI uses MCP for the most part, so you are going to need to decompile a jar with it. To start, we need to make sure we have all the needed references, so before you decompile install the following: -** twl/bin/* -** xpp3-1.1.4c/* -** theme/* + - twl/bin/* + - xpp3-1.1.4c/* + - theme/* * Add ModLoader or any other APIs you want to use at this point. ModLoader is not required to build this though. * Decompile with MCP. It shouldn't decompile anything you added though, but that's OK. * After that, drag in all the mcp source files from mcp/* EXCEPT for GuiOptions.java. -** That's a base class, so we are going to edit the small changes we made in. I'm not going to go into much detail, since you can see the finished file, but I'll explain a bit. The code itself you can view in the patched GuiOptions.java. -* Now we need to patch GuiOptions.java to add that Global Mod Settings button. -** In public void initGui(), you need to add the Global Mod Settings button. Add it in second last, before gui.done. -** Then, move options.video and options.controls up slightly in the same method. I suggest getting rid of the + 12 parts for each, as I did. -** Now we need to add the button handler. So in protected void actionPerformed(GuiButton var1) add a handler for the ID you used. I used 300. + - That's a base class, so we are going to edit the small changes we made in. I'm not going to go into much detail, since you can see the finished file, but I'll explain a bit. The code itself you can view in the patched GuiOptions.java. +* Now we need to patch GuiOptions.java to add the Global Mod Settings button. + - In public void initGui(), you need to add the Global Mod Settings button. Add it in second last, before gui.done. + - Then, move options.video and options.controls up slightly in the same method. I suggest getting rid of the + 12 parts for each, as I did. + - Now we need to add the button handler. So in protected void actionPerformed(GuiButton var1) add a handler for the ID you used. I used 300. * Now recompile and test! You are all done. Again, if you have any issues patching GuiOptions.java just look at the prepatched version. -==Packaging== +Packaging +--------- To create a distributable archive, package twl/bin/*, xpp*/*, theme/*, and bin/*. The only base Minecraft class this edits is GuiOptions. -==Credits== +Credits +------- -lahwran -_303 -ShaRose -Lots of people who I forget. Open an issue or something if you helped... +- lahwran +- ShaRose +- _303 +- Lots of people who I forget. Open an issue or something if you helped... -==Documentation== +Documentation +------------- Read all javadocs at https://dl.dropbox.com/u/3687570/GuiAPI%20Javadoc/index.html -They are updated as I commit. Note the documentation isn't that great (It's not my strong point), I just tried to tag everything and explain roughly what it does. \ No newline at end of file +They are updated as I commit. Note the documentation isn't that great (It's not my strong point), I just tried to tag everything and explain roughly what it does. diff --git a/src/GuiApiHelper.java b/src/GuiApiHelper.java deleted file mode 100644 index aac5e9d..0000000 --- a/src/GuiApiHelper.java +++ /dev/null @@ -1,128 +0,0 @@ -import java.util.AbstractMap; -import java.util.ArrayList; - -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.ScrollPane; -import de.matthiasmann.twl.TextArea; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.model.SimpleButtonModel; -import de.matthiasmann.twl.textarea.SimpleTextAreaModel; - - -public class GuiApiHelper -{ - public static GuiApiHelper createChoiceMenu(String displayText) - { - return new GuiApiHelper(displayText); - } - - public static Widget createChoiceMenu(String displayText, Object... args) - { - if (args.length % 2 == 1) - { - throw new IllegalArgumentException( - "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button."); - } - GuiApiHelper helper = new GuiApiHelper(displayText); - try - { - for (int i = 0; i < args.length; i += 2) - { - helper.addButton((String) args[i], (ModAction) args[i + 1]); - } - } - catch (Throwable e) - { - throw new IllegalArgumentException( - "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button.", - e); - } - return helper.genWidget(); - } - - public static Widget createChoiceMenu(String displayText, - String[] buttonTexts, ModAction[] buttonActions) - { - if (buttonTexts.length != buttonActions.length) - { - throw new IllegalArgumentException( - "Arguments not in correct format. buttonTexts needs to be the same size as buttonActions."); - } - GuiApiHelper helper = new GuiApiHelper(displayText); - for (int i = 0; i < buttonTexts.length; i += 2) - { - helper.addButton(buttonTexts[i], buttonActions[i]); - } - return helper.genWidget(); - } - - public static Button makeButton(String displayText, ModAction action) - { - SimpleButtonModel simplebuttonmodel = new SimpleButtonModel(); - simplebuttonmodel.addActionCallback(action); - Button button = new Button(simplebuttonmodel); - button.setText(displayText); - return button; - } - - public static Button makeButton(String displayText, String methodName, - Object me) - { - return GuiApiHelper.makeButton(displayText, new ModAction(me, - methodName, new Class[0])); - } - - @SuppressWarnings("rawtypes") - public static Button makeButton(String displayText, String methodName, - Object me, Class[] types, Object... arguments) - { - return GuiApiHelper.makeButton(displayText, new ModAction(me, - methodName, types).setDefaultArguments(arguments)); - } - - private ArrayList> buttonInfo_; - private String displayText_; - - private GuiApiHelper(String displayText) - { - displayText_ = displayText; - buttonInfo_ = new ArrayList>(); - } - - public void addButton(String text, ModAction action) - { - buttonInfo_.add(new AbstractMap.SimpleEntry(text, - action)); - } - - public void addButton(String text, String methodName, Object me) - { - buttonInfo_.add(new AbstractMap.SimpleEntry(text, - new ModAction(me, methodName, new Class[0]))); - } - - @SuppressWarnings("rawtypes") - public void addButton(String text, String methodName, Object me, - Class[] types, Object... arguments) - { - buttonInfo_.add(new AbstractMap.SimpleEntry(text, - (new ModAction(me, methodName, types) - .setDefaultArguments(arguments)))); - } - - public Widget genWidget() - { - WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); - SimpleTextAreaModel model = new SimpleTextAreaModel(); - model.setText(displayText_, false); - TextArea textarea = new TextArea(model); - widget.add(textarea); - for (AbstractMap.SimpleEntry entry : buttonInfo_) - { - GuiApiHelper.makeButton(entry.getKey(), entry.getValue()); - } - ScrollPane pane = new ScrollPane(widget); - pane.setFixed(ScrollPane.Fixed.HORIZONTAL); - return pane; - } -} diff --git a/src/GuiModScreen.java b/src/GuiModScreen.java deleted file mode 100644 index 6c28473..0000000 --- a/src/GuiModScreen.java +++ /dev/null @@ -1,281 +0,0 @@ -/** - * GuiModScreen is the minecraft screen subclass that controls and renders TWL. - * normally you will want to call it's static methods to use it, though - * subclassing it and/or instantiating it - * are also possible. however, to do so would use unsafe api (I still might - * change things.) - * - * @author lahwran - * @version 0.9.5 - * @see show - */ - -import net.minecraft.client.Minecraft; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; -import de.matthiasmann.twl.renderer.lwjgl.RenderScale; - -public class GuiModScreen extends da { - /** - * reference to parent screen, is used to go back() - * @see back() - */ - public da parentScreen; - public boolean drawbg = true; - /** - * actual main widget of this guiscreen - */ - public Widget mainwidget; - - /* - * public static int lastMouseX=0; - * public static int lastMouseY=0; - * public static boolean mousepressed[]; - * - * static { - * mousepressed=new boolean[Mouse.getButtonCount()]; - * for(int i=0;i8| - Minecraft m = ModSettings.getMcinst(); - m.a(screen); - screen.setActive(); - } - - /** - * play a click sound. call after the user performs an action. already - * called from setting widgets. - */ - public static void clicksound() - { - Minecraft m = ModSettings.getMcinst(); - m.B.a("random.click", 1.0F, 1.0F); - - } - - /** - * internal - actually sets the TWL screen. - */ - private void setActive() - { - GuiWidgetScreen.getInstance().setScreen(mainwidget); - } - - // protected void a(int x, int y, int button){} - private int t = 0; - - //handleInput - is empty as this is where input is normally handled and we handle it elsewhere - public void e(){} - - public void a(int j, int k, float f) - { - if (drawbg) i();// render default background - // GL11.glClearColor(0.96f, 0.97f, 1.0f, 1.0f); - // GL11.glClear(GL11.GL_COLOR_BUFFER_BIT); - - // mouse doesn't like to respond unless we do this - /* - * if(t==20) - * { - * System.out.println(j); - * System.out.println(Mouse.getX()); - * System.out.println(k); - * System.out.println(Mouse.getY()); - * - * System.out.println(Mouse.isButtonDown(0)); - * t=0; - * } - * else - * { - * t++; - * } - */ - // LWJGLRenderer r = (LWJGLRenderer) - // GuiWidgetScreen.getInstance().gui.getRenderer(); - // r.syncViewportSize(); - // GuiWidgetScreen.getInstance().layout(); - // for (int i=0; i E = new ArrayList(); - * E.add(new Integer(Mouse.getEventX())); - * E.add(new Integer(Mouse.getEventY())); - * E.add(new Integer(Mouse.getEventButton())); - * E.add(new Boolean(Mouse.getEventButtonState())); - * int wheeldelta = Mouse.getEventDWheel(); - * if(wheeldelta>0) - * E.add(new Integer(wheeldelta)); - * MCTWLInput.instance.MouseEvents.add(E);* / - * } - * public void f() - * { - * GuiWidgetScreen.getInstance().gui.handleKey( - * Keyboard.getEventKey(), - * Keyboard.getEventCharacter(), - * Keyboard.getEventKeyState()); - * /* - * ArrayList E = new ArrayList(); - * E.add(new Integer(Keyboard.getEventKey())); - * E.add(new Character(Keyboard.getEventCharacter())); - * E.add(new Boolean(Keyboard.getEventKeyState())); - * MCTWLInput.instance.KeyEvents.add(E);* / - * } - */ - -} diff --git a/src/GuiModSelect.java b/src/GuiModSelect.java deleted file mode 100644 index 85b2096..0000000 --- a/src/GuiModSelect.java +++ /dev/null @@ -1,36 +0,0 @@ -/** - * subclass of guimodscreen, is the entry point from the button in the options menu. - * @author lahwran - * @version 0.9.5 - */ -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.model.SimpleButtonModel; - - -public class GuiModSelect extends GuiModScreen { - - protected GuiModSelect(da by1) { - super(by1); - WidgetClassicTwocolumn w=new WidgetClassicTwocolumn(); - w.vpad = 10; - for(int i=0; i - *
    - * example:
    - *
    - * assuming x.addCallback takes a runnable:
    - * public void F(T x)
    - * {
    - * x.addCallback(new ModAction(this, "callback"));
    - * }
    - *
    - * public void callback()
    - * {
    - * //do stuff here
    - * }
    - * - * @author 303 (Patch by ShaRose) - * @version 0.9.5 - */ -import java.lang.reflect.Method; -import java.util.ArrayList; -import java.util.List; -import java.security.InvalidParameterException; - -public class ModAction implements Runnable { - protected List handlerObjects = new ArrayList(); - protected List handlerMethods = new ArrayList(); - - protected Object[] defaultArguments; - - @SuppressWarnings("unchecked") - protected Class[] params; - /** - * coming soon, this will be useful enough to document - */ - public String name; - /** - * coming soon, this will be useful enough to document - */ - public Object data; - - /** - * "normal" constructor. - * @param name_ name used in error messages. set to something you'll - * recognize. - * @param params_ paramaters types that you will pass through call to your - * handlers. - */ - @SuppressWarnings("unchecked") - public ModAction(String name_, Class... params_) - { - name = name_; - params = params_; - } - - /** - * condensed constructor, for use when a runnable is needed. combines - * constructor and call to addhandler. - * @param o object on which to call handler - * @param method handler method name - * @param params_ you won't want to pass any into this for runnables, but - * same meaning as for the normal constructor. - */ - @SuppressWarnings("unchecked") - public ModAction(Object o, String method, Class... params_) - { - name = method; // cheating? - params = params_; // will usually be empty in this constructor - addHandler(o, method); - } - - /** - * coming soon, this will be useful enough to document - * @param o - - * @param method - - * @param _name - - * @param params_ - - */ - @SuppressWarnings("unchecked") - public ModAction(Object o, String method, String _name, Class... params_) - { - name = _name; // cheating? - params = params_; // will usually be empty in this constructor - addHandler(o, method); - } - - /** - * coming soon, this will be useful enough to document - * @param o - - * @param method - - * @param _data - - * @param params_ - - */ - @SuppressWarnings("unchecked") - public ModAction(Object o, String method, Object _data, Class... params_) - { - name = method; // cheating? - data = _data; - params = params_; // will usually be empty in this constructor - addHandler(o, method); - } - - /** - * adds a handler. - * @param o object on which to call the handler - * @param method method on object to call for handler - * @return this (for chaining calls) - */ - @SuppressWarnings("unchecked") - public ModAction addHandler(Object o, String method) - { - try - { - @SuppressWarnings("unused") - Method meth = GetMethodRecursively(o, method);// (o instanceof Class - // ? (Class)o : - // o.getClass()).getDeclaredMethod(method, - // params); - } - catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException("invalid method parameters"); - } - - for (int i = 0; i < handlerObjects.size(); ++i) - { - Object oo = handlerObjects.get(i); - String omethod = handlerMethods.get(i); - - if (oo == o && omethod.equals(method)) - { - System.err.println(String.format("WARNING: event handler is already registered: %s: %s.%s", name, o.getClass().getName(), method)); - return this; - } - } - - handlerObjects.add(o); - handlerMethods.add(method); - - return this; - } - - /** - * call all handlers. - * @param args arguments list to pass to handlers - make sure it matches - * what you passed in in the constructor. - * @return list of what each handler returns. - */ - @SuppressWarnings("unchecked") - public Object[] call(Object... args) - { - Object[] returns = new Object[handlerObjects.size()]; - for (int i = 0; i < handlerObjects.size(); ++i) - { - Object o = handlerObjects.get(i); - String method = handlerMethods.get(i); - - try - { - Method meth = GetMethodRecursively(o, method);// (o instanceof - // Class ? - // (Class)o : - // o.getClass()).getDeclaredMethod(method, - // params); - returns[i] = meth.invoke(o instanceof Class ? null : o, args); - } - catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException("error calling callback"); - } - } - return returns; - } - - public boolean hasHandler(Object o, String method) - { - for (int i = 0; i < handlerObjects.size(); ++i) - { - Object oo = handlerObjects.get(i); - String omethod = handlerMethods.get(i); - - if (oo == o && omethod.equals(method)) { return true; } - } - - return false; - } - - public boolean removeHandler(Object o, String method) - { - for (int i = 0; i < handlerObjects.size(); ++i) - { - Object oo = handlerObjects.get(i); - String omethod = handlerMethods.get(i); - - if (oo == o && omethod.equals(method)) - { - handlerObjects.remove(i); - handlerMethods.remove(i); - return true; - } - } - - return false; - } - - Method GetMethodRecursively(Object o, String method) // Why do this? Because - // Class.getMethod - // doesn't include - // private methods, and - // Class.getDeclaredMethod - // doesn't return - // superclass methods. - { - Class currentclass = (o instanceof Class ? (Class)o : o.getClass()); - while (true) - { - try - { - if (currentclass == null) // End of the line, return null. - return null; - - Method returnval = currentclass.getDeclaredMethod(method, params); - if (returnval != null) - { - returnval.setAccessible(true); - return returnval; // hey look at that, a method! - } - } - catch (Throwable x) - {} // Exception? Oh well! - currentclass = currentclass.getSuperclass(); // We don't need to - // worry about - // exceptions here, if - // it's a primitive - // type or something it - // will return null on - // the next loop. - } - } - - /** - * This sets the arguments to use when using run(). - * If this is not used, run calls the requested method with no arguments. - * Throws InvalidParameterException if the arguments provided do not match the method parameters, or are unassignable to those types. - */ - @SuppressWarnings("rawtypes") - public ModAction setDefaultArguments(Object... Arguments) - { - if(Arguments.length != params.length) - throw new InvalidParameterException("Arguments do not match the parameters."); - for (int i = 0; i < params.length; i++) { - Class value = params[i]; - if(!value.isInstance(Arguments[i])) - throw new InvalidParameterException("Arguments do not match the parameters."); - } - defaultArguments = Arguments; - return this; - } - - /** -* Runnable call. If no default arguments are present it will call the method with no arguments. If the method has parameters, it will throw an exception. -* If default arguments are provided using setDefaultArguments, it will use those arguments. -*/ - @Override - public void run() - { - if(defaultArguments == null) - call(); - else - call(defaultArguments); - } -} \ No newline at end of file diff --git a/src/ModCallback.java b/src/ModCallback.java deleted file mode 100644 index 7879f97..0000000 --- a/src/ModCallback.java +++ /dev/null @@ -1,38 +0,0 @@ -/** - * class that should be completely replaced by modaction, but is not. use if you dare. - * @author lahwran - * @version 0.9.5 - */ -public class ModCallback implements Runnable { - - public static final int BACK = 0; - public static final int SELECTMOD = 1; - - public Object data; - public int type; - - public ModCallback(int t, Object _data) - { - type = t; - data = _data; - } - - @Override - public void run() { - // TODO Auto-generated method stub - if (type == BACK) - { - GuiModScreen.back(); - GuiModScreen.clicksound(); - } - else if (type == SELECTMOD) - { - //there has got to be a better way to do this - Integer i = (Integer) data; - int modnum = i; - GuiModScreen.show(ModSettingScreen.modscreens.get(modnum).thewidget); - GuiModScreen.clicksound(); - } - } - -} diff --git a/src/ModSettingScreen.java b/src/ModSettingScreen.java deleted file mode 100644 index 6469baf..0000000 --- a/src/ModSettingScreen.java +++ /dev/null @@ -1,96 +0,0 @@ -/** - * class that GuiModSelect uses to show subscreens. instantiate to add your own subscreen. - * @author lahwran - * @version 0.9.5 - */ -import java.util.ArrayList; - -import de.matthiasmann.twl.Widget; - - -public class ModSettingScreen { - /** - * actual list of mod screens - */ - - public static ArrayList modscreens = new ArrayList(); - public static String guicontext = ""; - - /** - * the main widget to pass into GuiModScreen.show() - */ - public Widget thewidget; - /** - * the twocolumn widget to show the child widgets in - */ - public WidgetClassicTwocolumn w; - - /** - * title to show on button to this modscreen - */ - public String buttontitle; - /** - * name to show at top of screen - */ - public String nicename; - /** - * convenience constructor for when you want to show the same name on the button and screen title - * @param name mod nice name - */ - public ModSettingScreen(String name) - { - this(name, name); - } - - /** - * - * @param _nicename screen title - * @param _buttontitle button-to-screen title - */ - public ModSettingScreen(String _nicename, String _buttontitle) - { - modscreens.add(this); //// is this a bad idea? - - buttontitle=_buttontitle; - nicename = _nicename; - - w = new WidgetClassicTwocolumn(); - - - thewidget = new WidgetSimplewindow(w, nicename); - - - } - public ModSettingScreen(Widget _w, String _buttontitle) - { - modscreens.add(this); - buttontitle=_buttontitle; - thewidget = _w; - } - /** - * add a widget - * @param newwidget the widget to add - */ - public void append(Widget newwidget) - { - if(w != null) - w.add(newwidget); - else - thewidget.add(newwidget); - } - - /** - * remove a widget - * @param child widget to remove - */ - public void remove(Widget child) - { - if(w != null) - w.removeChild(child); - else - thewidget.removeChild(child); - } - - - -} diff --git a/src/ModSettings.java b/src/ModSettings.java deleted file mode 100644 index 4f3a7d2..0000000 --- a/src/ModSettings.java +++ /dev/null @@ -1,588 +0,0 @@ -/** - * Main interface class for Settings API - * @author lahwran - * @version 0.9.5 - */ -import java.io.File; -import java.io.FileInputStream; -import java.io.FileOutputStream; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Properties; - -import de.matthiasmann.twl.Widget; - -import net.minecraft.client.Minecraft; -//import java.util.Vector; - - -public class ModSettings { - //public Vector settings; - /** - * all registered settings for this mod - */ - public ArrayList Settings; - //public HashMap NameID; - - public static ArrayList all = new ArrayList(); - - /** - * Mod name as used in .minecraft/mods/${modbackendname}/ - */ - public String backendname; - - public static String currentContext; - public static HashMap contextDatadirs; - static { - contextDatadirs=new HashMap(); - currentContext = ""; - contextDatadirs.put("", "mods"); - } - //public Widget mainwidget = null; - - public boolean have_loaded = false; - - private static Minecraft mcinst; - public static void presetMcint(Minecraft m) - { - mcinst = m; - } - public static Minecraft getMcinst() - { - if(mcinst != null) return mcinst; - Field f; - try { - - f = Minecraft.class.getDeclaredFields()[1]; - f.setAccessible(true); - - Minecraft m = (Minecraft)f.get(null); - - if(m != null) - { - mcinst = m; - return m; - } - - f = Thread.class.getDeclaredField("target"); - f.setAccessible(true); - - ThreadGroup group = Thread.currentThread().getThreadGroup(); - int count = group.activeCount(); - Thread[] threads = new Thread[count]; - group.enumerate(threads); - for (int i = 0; i < threads.length; i++) - if (threads[i].getName().equals("Minecraft main thread")) { - m = (Minecraft)f.get(threads[i]); - if(m != null) - { - mcinst = m; - return m; - } - } - } - catch (Throwable t) - { - throw new RuntimeException(t); - } - throw new RuntimeException("You are a godless monkey! why are you doing weird things with the innards of minecraft?"); - } - - /** - * @param modbackendname used to initialize class modbackendname field - */ - public ModSettings(String modbackendname) - { - //modnicename = _modnicename; - backendname = modbackendname; - Settings = new ArrayList(); - all.add(this); - //NameID = new HashMap(); - } - //boolean - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(ModSettingScreen screen, String nicename, String backendname, boolean value) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename); - screen.append(w); - this.append(s); - return s; - } - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(ModSettingScreen screen, String nicename, String backendname, boolean value, String truestring, String falsestring) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, falsestring); - screen.append(w); - this.append(s); - return s; - } - //float - /** - * convenience float setting adder - */ - public SettingFloat addSetting(ModSettingScreen screen, String nicename, String backendname, float value) - { - SettingFloat s = new SettingFloat(backendname, value); - WidgetFloat w = new WidgetFloat(s, nicename); - screen.append(w); - this.append(s); - return s; - } - /** - * convenience float setting adder - */ - public SettingFloat addSetting(ModSettingScreen screen, String nicename, String backendname, float value, float min, float step, float max) - { - SettingFloat s = new SettingFloat(backendname, value, min, step, max); - WidgetFloat w = new WidgetFloat(s, nicename); - screen.append(w); - this.append(s); - return s; - } - //int - /** - * convenience int setting adder - */ - public SettingInt addSetting(ModSettingScreen screen, String nicename, String backendname, int value, int min, int max) - { - SettingInt s = new SettingInt(backendname, value, min, 1, max); - WidgetInt w = new WidgetInt(s, nicename); - screen.append(w); - this.append(s); - return s; - } - /** - * convenience int setting adder - */ - public SettingInt addSetting(ModSettingScreen screen, String nicename, String backendname, int value, int min, int step, int max) - { - SettingInt s = new SettingInt(backendname, value, min, step, max); - WidgetInt w = new WidgetInt(s, nicename); - screen.append(w); - this.append(s); - return s; - } - - //key - /** - * convenience key setting adder - */ - public SettingKey addSetting(ModSettingScreen screen, String nicename, String backendname, int value) - { - SettingKey s = new SettingKey(backendname, value); - WidgetKeybinding w = new WidgetKeybinding(s, nicename); - screen.append(w); - this.append(s); - return s; - } - - //multi - /** - * convenience multi setting adder - */ - public SettingMulti addSetting(ModSettingScreen screen, String nicename, String backendname, int value, String... labels) - { - SettingMulti s = new SettingMulti(backendname, value, labels); - WidgetMulti w = new WidgetMulti(s, nicename); - screen.append(w); - this.append(s); - return s; - } - - //text - /** - * convenience text setting adder - */ - public SettingText addSetting(ModSettingScreen screen, String nicename, String backendname, String value) - { - SettingText s = new SettingText(backendname, value); - WidgetText w = new WidgetText(s, nicename); - screen.append(w); - this.append(s); - return s; - } - - ///disgusting shitloads of overloads - - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(Widget w2, String nicename, String backendname, boolean value) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename); - w2.add(w); - this.append(s); - return s; - } - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(Widget w2, String nicename, String backendname, boolean value, String truestring, String falsestring) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, falsestring); - w2.add(w); - this.append(s); - return s; - } - //float - /** - * convenience float setting adder - */ - public SettingFloat addSetting(Widget w2, String nicename, String backendname, float value) - { - SettingFloat s = new SettingFloat(backendname, value); - WidgetFloat w = new WidgetFloat(s, nicename); - w2.add(w); - this.append(s); - return s; - } - /** - * convenience float setting adder - */ - public SettingFloat addSetting(Widget w2, String nicename, String backendname, float value, float min, float step, float max) - { - SettingFloat s = new SettingFloat(backendname, value, min, step, max); - WidgetFloat w = new WidgetFloat(s, nicename); - w2.add(w); - this.append(s); - return s; - } - //int - /** - * convenience int setting adder - */ - public SettingInt addSetting(Widget w2, String nicename, String backendname, int value, int min, int max) - { - SettingInt s = new SettingInt(backendname, value, min, 1, max); - WidgetInt w = new WidgetInt(s, nicename); - w2.add(w); - this.append(s); - return s; - } - /** - * convenience int setting adder - */ - public SettingInt addSetting(Widget w2, String nicename, String backendname, int value, int min, int step, int max) - { - SettingInt s = new SettingInt(backendname, value, min, step, max); - WidgetInt w = new WidgetInt(s, nicename); - w2.add(w); - this.append(s); - return s; - } - - //key - /** - * convenience key setting adder - */ - public SettingKey addSetting(Widget w2, String nicename, String backendname, int value) - { - SettingKey s = new SettingKey(backendname, value); - WidgetKeybinding w = new WidgetKeybinding(s, nicename); - w2.add(w); - this.append(s); - return s; - } - - //multi - /** - * convenience multi setting adder - */ - public SettingMulti addSetting(Widget w2, String nicename, String backendname, int value, String... labels) - { - SettingMulti s = new SettingMulti(backendname, value, labels); - WidgetMulti w = new WidgetMulti(s, nicename); - w2.add(w); - this.append(s); - return s; - } - - //text - /** - * convenience text setting adder - */ - public SettingText addSetting(Widget w2, String nicename, String backendname, String value) - { - SettingText s = new SettingText(backendname, value); - WidgetText w = new WidgetText(s, nicename); - w2.add(w); - this.append(s); - return s; - } - - /*public Widget getWidget() - { - //TODO: should add new settings to screen - if (mainwidget == null) - { - Widget subwidget = new WidgetClassicTwocolumn(); - for (int i=0; i= 8) - // return s; - Settings.add(s); - if(s instanceof Setting) - { - ((Setting)s).nicename = nicename; - ((Setting)s).backendname = backendname; //backendname needs/has uniqueness constraint - ((Setting)s).parentmod = this; - ((Setting)s).update(); - } - if (context == null) - return defvalue; - if(nicename != backendname) - { - NameID.put(backendname, Settings.indexOf(s)); - NameID.put(nicename, Settings.indexOf(s)); - } - else - { - NameID.put(backendname, Settings.indexOf(s));// - } - return s; - } - - /** - * Add a setting to setting list, single name version - * this must be called on a setting for it to function correctly. - * @param name Name to use for setting - must be unique, recommended no special characters (use seperate name version for that) - * @param s Setting object to register - * @return Setting object passed in - * @see Setting - * / - public Widget addSetting(String name, Widget s) - { - return genericAddSetting(name, name, s); - } - public Setting addSetting(String name, Setting s) - { - return (Setting)genericAddSetting(name, name, s); - } - - /* * - * Add a setting to setting list, seperate name version - * this must be called on a setting for it to function correctly. - * @param nicename Name used in GUI - * @param backendname Name used in config file - recommended no special characters, must be unique - * @param s Setting to register - * @return Setting passed in - * @see Setting - * / - public Widget addSetting(String nicename, String backendname, Widget s) - { - return genericAddSetting(nicename, backendname, s); - } - public Setting addSetting(String nicename, String backendname, Setting s) - { - return (Setting)genericAddSetting(nicename, backendname, s); - }*/ - - public static void setContext(String name, String location) - { - if(name != null) - { - - contextDatadirs.put(name, location); - currentContext = name; - if(!name.equals("")) - ModSettings.loadAll(ModSettings.currentContext); - } - else - { - currentContext = ""; - } - } - /** - * add a setting to be saved. - * @param s setting to add - sets s.parent as well, don't add a setting to more than one modsettings - */ - public void append(Setting s) - { - Settings.add(s); - s.parent=this; - } - /** - * removes a setting using ArrayList.remove - * @param s setting to remove - */ - public void remove(Setting s) - { - Settings.remove(s); - s.parent = null; - } - /** - * - * @return count of settings registered - */ - public int size() - { - return Settings.size(); - } - /** - * reset all settings to default values. use as the handler for a modaction passed into a button handler. - */ - public void resetAll(String context) - { - for(int i=0;i - * saves settings file to .minecraft/mods/$backendname/guiconfig.properties
    - * coming soon: set name of config file - */ - public void save(String context) - { - if (! have_loaded) - { - return; - } - try{ - File path = getAppDir("minecraft/"+contextDatadirs.get(context)+"/"+backendname+"/"); - dbgout("saving context "+context+" (" + path.getAbsolutePath() +" ["+contextDatadirs.get(context)+"])"); - if (! path.exists()) - { - path.mkdirs(); - } - File file = new File(path,"guiconfig.properties"); - Properties p = new Properties(); - for (int i = 0; i < Settings.size(); i++) - { - - Setting z = (Setting)Settings.get(i); - p.put(z.backendname, z.toString(context)); - } - - - FileOutputStream out = new FileOutputStream(file); - p.store(out, ""); - } - catch (Exception e) { - e.printStackTrace(); - } - } - /** - * must be called after all settings are added for loading/saving to work.
    - * loads from .minecraft/mods/$backendname/guiconfig.properties if it exists.
    - * coming soon: set name of config file - */ - public void load(String context) - { - for(;;) - { - try{ - if(contextDatadirs.get(context) == null) - break; - File path = getAppDir("minecraft/"+contextDatadirs.get(context)+"/"+backendname+"/"); - if (! path.exists()) break; - File file = new File(path,"guiconfig.properties"); - if (!file.exists()) break; - Properties p = new Properties(); - p.load(new FileInputStream(file)); - for (int i = 0; i < Settings.size(); i++) //TODO: could be more effecient - { //TODO: file version handling - if(Settings.get(i) instanceof Setting) - { - dbgout("setting load"); - Setting z = (Setting)Settings.get(i); - if(p.containsKey(z.backendname)) - { - dbgout("setting "+(String)p.get(z.backendname)); - z.fromString((String)p.get(z.backendname), context); - } - } - } - break; - } - catch (Exception e) { - System.out.println(e); - break; - } - } - } - public void load() - { - load(""); - have_loaded = true; - } - public static void loadAll(String context) - { - for(int i=0; i extends Widget { - - /** - * value. do not write directly if you want things to update! - */ - public HashMap values = new HashMap(); - /** - * default value - */ - public T defvalue; - - /** - * name used to save setting by ModSettings - */ - public String backendname; - - /** - * reference to frontend, so it can tell the gui when to update - set from gui constructor - */ - public WidgetSetting gui = null; - - /** - * reference to modsettings - set from ModSettings.append - used to save when something has changed - */ - public ModSettings parent = null; - public Setting() - { - - } - - /** - * return string to save, called from ModSettings.save() - */ - public abstract String toString(String context); - - /** - * load back a string from toString() - */ - public abstract void fromString(String s, String context); - /*{ - return; - }*/ - - public void reset() - { - reset(ModSettings.currentContext); - } - - /** - * reset setting to default value, including saving and updating the display - */ - public void reset(String context) { - set(defvalue,context); - } - - public void copyContext(String srccontext, String destcontext) { - values.put(destcontext,values.get(srccontext)); - } - - public abstract void set(T v,String context); - public void set(T v) - { - set(v, ModSettings.currentContext); - } - - - public abstract T get(String context); - public T get() - { - return get(ModSettings.currentContext); - } - - //public boolean hasGlobal() -} diff --git a/src/SettingBoolean.java b/src/SettingBoolean.java deleted file mode 100644 index b7db47a..0000000 --- a/src/SettingBoolean.java +++ /dev/null @@ -1,80 +0,0 @@ -import java.util.HashMap; - -/** - * boolean setting, goes with WidgetBoolean - * @author lahwran - * @version 0.9.5 - */ -public class SettingBoolean extends Setting { - - - /** - * - * @param name name to use in config file - * @param _value default value - */ - public SettingBoolean(String name, Boolean _defvalue) - { - defvalue = _defvalue; - values.put("",defvalue); - backendname = name; - } - /** - * you'd call this if the default is "false" - * @param name name to pass to other constructor - */ - public SettingBoolean(String name) - { - this(name, false); - } - - @Override - public String toString(String context) { - return (get(context) ? "true" : "false"); - } - - @Override - public void fromString(String s, String context) - { - values.put(context, s.equals("true")); - - if(gui != null) - { - gui.update(); - } - } - - /** - * return current value. value is no longer accessible, please use this. - * @return - */ - @Override - public Boolean get(String context) - { - if(values.get(context) != null) - return values.get(context); - else if (values.get("") != null) - return values.get(""); - else return defvalue; - } - - /** - * set and save value - * @param v value - */ - @Override - public void set(Boolean v,String context) - { - values.put(context,v); - if (parent != null) - { - parent.save(context); - - } - if(gui != null) - { - gui.update(); - } - } - -} diff --git a/src/SettingFloat.java b/src/SettingFloat.java deleted file mode 100644 index 44d7bea..0000000 --- a/src/SettingFloat.java +++ /dev/null @@ -1,117 +0,0 @@ -import java.util.HashMap; - -/** - * float setting - * @author lahwran - * @version 0.9.5 - * - */ -public class SettingFloat extends Setting { - public float step; - public float min; - public float max; - - /** - * - * @param title name used in config file - */ - public SettingFloat(String title) - { - this(title, 0.0f, 0.0f, 0.1f, 1.0f); - } - /** - * - * @param title name used in config file - * @param _value default value - */ - public SettingFloat(String title, float _value) - { - this(title, _value, 0.0f, 0.1f, 1.0f); - } - /** - * - * @param title name used in config file - * @param _value default value - * @param _min minimum - * @param _max maximum - */ - public SettingFloat(String title, float _value, float _min, float _max) - { - - this(title, _value, _min, 0.1f, _max); - } - /** - * - * @param title name used in config file - * @param _value default value - * @param _min minimum - * @param _step stepsize - * @param _max maximum - */ - public SettingFloat(String title, float _value, float _min, float _step, float _max) - { - values.put("",_value); - defvalue = _value; - min=_min; - step=_step; - max=_max; - backendname = title; - - if (min > max) - { - float t = min; - min = max; - max = t; - } - } - - - public String toString(String context) { - return ""+get(context); - } - public void fromString(String s, String context) - { - values.put(context, new Float(s)); - if(gui != null) - { - gui.update(); - } - } - - /** - * set and save value - * @param v value - */ - @Override - public void set(Float v, String context) - { - if (step > 0) - values.put(context, Math.round(v/step)*step); - else - values.put(context, v); - if (parent != null) - { - parent.save(context); - - } - if(gui != null) - { - gui.update(); - } - } - /** - * return current value. not really needed because value is public, but is nice to have - * @return - */ - @Override - public Float get(String context) - { - if(values.get(context) != null) - return values.get(context); - else if (values.get("") != null) - return values.get(""); - else return defvalue; - } - - -} diff --git a/src/SettingInt.java b/src/SettingInt.java deleted file mode 100644 index 34132b3..0000000 --- a/src/SettingInt.java +++ /dev/null @@ -1,116 +0,0 @@ -import java.util.HashMap; - - -public class SettingInt extends Setting { - public int step; - public int min; - public int max; - - /** - * - * @param title name used in config file - */ - public SettingInt(String title) - { - - this(title, 0, 0, 1, 100); - } - /** - * - * @param title name used in config file - * @param _value default value - */ - public SettingInt(String title, int _value) - { - this(title, _value, 0, 1, 100); - } - /** - * - * @param title name used in config file - * @param _value default value - * @param _min minimum - * @param _max maximum - */ - public SettingInt(String title, int _value, int _min, int _max) - { - - this(title, _value, _min, 1, _max); - } - /** - * - * @param title name used in config file - * @param _value default value - * @param _min minimum - * @param _step stepsize - * @param _max maximum - */ - public SettingInt(String title, int _value, int _min, int _step, int _max) - { - values.put("",_value); - defvalue = _value; - min=_min; - step=_step; - max=_max; - backendname = title; - - if (min > max) - { - int t = min; - min = max; - max = t; - } - } - - - public String toString(String context) { - return ""+get(context); - } - public void fromString(String s, String context) - { - values.put(context, new Integer(s)); - if(gui != null) - { - gui.update(); - } - ModSettings.dbgout("fromstring " +s); - } - - /** - * set and save value - * @param v value - */ - @Override - public void set(Integer v, String context) - { - ModSettings.dbgout("set " +v); - if (step > 1) - values.put(context, (int)(Math.round( (float)v /(float)step)*(float)step)); - else - values.put(context, v); - if (parent != null) - { - parent.save(context); - - } - if(gui != null) - { - gui.update(); - } - } - /** - * return current value. not really needed because value is public, but is nice to have - * @return - */ - @Override - public Integer get(String context) - { - if(values.get(context) != null) - return values.get(context); - else if (values.get("") != null) - return values.get(""); - else return defvalue; - } - - - -} diff --git a/src/SettingKey.java b/src/SettingKey.java deleted file mode 100644 index 206d302..0000000 --- a/src/SettingKey.java +++ /dev/null @@ -1,119 +0,0 @@ -import java.util.HashMap; - -import org.lwjgl.input.Keyboard; - - -public class SettingKey extends Setting { - - /** - * - * @param title name used in conf file - * @param key default keycode - */ - public SettingKey(String title,int key) - { - defvalue = key; - values.put("",key); - backendname = title; - } - /** - * - * @param title name used in conf file - * @param key default key - */ - public SettingKey(String title, String key) - { - this(title, Keyboard.getKeyIndex(key)); - } - - @Override - public String toString(String context) { - return Keyboard.getKeyName(get(context)); - } - - - - @Override - public void fromString(String s, String context) { - - if (s.equals("UNBOUND")) - values.put(context, Keyboard.KEY_NONE); - else - values.put(context,Keyboard.getKeyIndex(s)); - - if(gui != null) - { - gui.update(); - } - } - /** - * set and save value keycode version - used internally - * @param v value - */ - @Override - public void set(Integer v, String context) - { - values.put(context, v); - if (parent != null) - { - parent.save(context); - - } - if(gui != null) - { - gui.update(); - } - } - - /** - * set and save value keyname version - * @param v value - */ - public void set(String v, String context) - { - set(Keyboard.getKeyIndex(v), context); - } - public void set(String v) - { - set(v, ModSettings.currentContext); - } - - /** - * return current value. not really needed because value is public, but is nice to have - * @return - */ - @Override - public Integer get(String context) - { - if(values.get(context) != null) - { - return values.get(context); - } - else if (values.get("") != null) - { - return values.get(""); - } - else - { - return defvalue; - } - - } - - /** - * - * @return true if the key is down. ya think? - */ - public boolean isKeyDown(String context) - { - if (get(context) != -1) - { - return Keyboard.isKeyDown(get(context)); - } - return false; //mildly redundant - } - public boolean isKeyDown() - { - return isKeyDown(ModSettings.currentContext); - } -} diff --git a/src/SettingMulti.java b/src/SettingMulti.java deleted file mode 100644 index 14d4ea4..0000000 --- a/src/SettingMulti.java +++ /dev/null @@ -1,147 +0,0 @@ -import java.util.HashMap; - -import org.lwjgl.input.Keyboard; - - -public class SettingMulti extends Setting { - - public String[] labels; - /** - * - * @param title name to use in config file - * @param def default index - * @param _labels labels of each option - must be at least one - */ - public SettingMulti(String title, int def, String... _labels) - { - if (_labels.length == 0) - return;//should cause an error ... damnit can't actually throw - values.put("", def); - defvalue=def; - - labels = _labels; - - backendname = title; - } - /** - * - * @param title name to use in config file - * @param _labels labels of each option - must be at least one - */ - public SettingMulti(String title, String... _labels) - { - this(title, 0, _labels); - } - - /** - * now uses the label value instead of label idx - */ - @Override - public String toString(String context) { - return labels[get(context)]; - } - /** - * now uses the label value instead of label idx - */ - @Override - public void fromString(String s, String context) - { - int x=-1; - for (int i=0;i= labels.length) - { - tempvalue -= labels.length; - } - set(tempvalue, context); - } - public void next() - { - next(ModSettings.currentContext); - } -} diff --git a/src/SettingText.java b/src/SettingText.java deleted file mode 100644 index c59335b..0000000 --- a/src/SettingText.java +++ /dev/null @@ -1,65 +0,0 @@ -import java.util.HashMap; - - -public class SettingText extends Setting { - - /** - * - * @param title name in config file - * @param defaulttext default text - */ - public SettingText(String title, String defaulttext) - { - values.put("", defaulttext); - defvalue = defaulttext; - - backendname = title; - } - - @Override - public void fromString(String s, String context) { - values.put(context, s); - if(gui != null) - { - gui.update(); - } - } - - @Override - public String toString(String context) { - return get(context); - } - /** - * return current value. not really needed because value is public, but is nice to have - * @return - */ - @Override - public String get(String context) - { - if(values.get(context) != null) - return values.get(context); - else if (values.get("") != null) - return values.get(""); - else return defvalue; - } - /** - * set and save value - * @param v value - */ - @Override - public void set(String v, String context) - { - values.put(context, v); - - if (parent != null) - { - parent.save(context); - - } - if(gui != null) - { - gui.update(); - } - } - -} diff --git a/src/Subscreen.java b/src/Subscreen.java deleted file mode 100644 index 2a9e0b6..0000000 --- a/src/Subscreen.java +++ /dev/null @@ -1,56 +0,0 @@ -import java.util.ArrayList; - -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.model.SimpleButtonModel; - - -public class Subscreen extends Button implements Runnable { - public ArrayList children = new ArrayList(); - - public Widget subscreenwindow; - public Widget subsubWindow; - public Subscreen(String menutitle, String buttontitle) - { - super(buttontitle); - setTheme("/button"); - subsubWindow = new WidgetClassicTwocolumn(); - subscreenwindow = new WidgetSimplewindow(subsubWindow,menutitle); - SimpleButtonModel s = new SimpleButtonModel(); - s.addActionCallback(this); - setModel(s); - } - public Subscreen(String menutitle, String buttontitle, Widget subwidget) - { - super(buttontitle); - setTheme("/button"); - subsubWindow = subwidget; - subscreenwindow = new WidgetSimplewindow(subsubWindow,menutitle); - SimpleButtonModel s = new SimpleButtonModel(); - s.addActionCallback(this); - setModel(s); - } - public Subscreen(String buttontitle, Widget subwidget) - { - super(buttontitle); - setTheme("/button"); - subsubWindow = subwidget; - subscreenwindow = subwidget; - SimpleButtonModel s = new SimpleButtonModel(); - s.addActionCallback(this); - setModel(s); - } - - public void add(Widget w) - { - subsubWindow.add(w); - } - - public void run() - { - - GuiModScreen.show(subscreenwindow); - } - - -} diff --git a/src/WidgetBoolean.java b/src/WidgetBoolean.java deleted file mode 100644 index 910608c..0000000 --- a/src/WidgetBoolean.java +++ /dev/null @@ -1,78 +0,0 @@ -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.model.SimpleButtonModel; - - - - -public class WidgetBoolean extends WidgetSetting implements Runnable { - - public String ttext; - public String ftext; - public Button b; - - public SettingBoolean value = null; - - public WidgetBoolean(SettingBoolean setting, String title) - { - this(setting, title, "true", "false"); - } - public WidgetBoolean(SettingBoolean setting, String title, String _ttext, String _ftext) - { - super(title); - setTheme(""); - ttext = _ttext; - ftext = _ftext; - SimpleButtonModel bmodel = new SimpleButtonModel(); - b = new Button(bmodel); - bmodel.addActionCallback(this); - add(b); - value = setting; - value.gui = this; - update(); - } - - - public String userString() - { - if(value != null) - { - if (nicename.length() > 0) - return String.format("%s: %s", nicename, value.get(ModSettingScreen.guicontext) ? ttext : ftext); - else - return value.get(ModSettingScreen.guicontext) ? ttext : ftext; - } - else - { - if (nicename.length() > 0) - return String.format("%s: %s", nicename, "no value"); - else - return "no value or title"; - } - } - /* - public String toString() { - return (value ? "true" : "false"); - } - public void fromString(String s) - { - value = s.equals("true"); - }*/ - //@Override - public void update() { - // TO DO Auto-generated method stub - b.setText(userString()); - } - @Override - public void run() { - // TO DO Auto-generated method stub - if(value != null) - value.set(!value.get(ModSettingScreen.guicontext), ModSettingScreen.guicontext); - update(); - //if(parentmod != null) - // parentmod.save(); - GuiModScreen.clicksound(); - //ModSettings.dbgout("safe"); - } - -} diff --git a/src/WidgetClassicTwocolumn.java b/src/WidgetClassicTwocolumn.java deleted file mode 100644 index 02ea255..0000000 --- a/src/WidgetClassicTwocolumn.java +++ /dev/null @@ -1,105 +0,0 @@ -import java.util.ArrayList; - -import de.matthiasmann.twl.Widget; - - -public class WidgetClassicTwocolumn extends Widget -{ - public int defaultwidth = 150; - public int defaultheight = 20; - public int defaultpad = 4; - public boolean overrideheight = true; - public int split = 10; - public int vpad = 0; - public ArrayList heightOverrideExceptions = new ArrayList(); - - public WidgetClassicTwocolumn(Widget... ws) - { - for (int i = 0; i < ws.length; ++i) - { - this.add(ws[i]); - } - this.setTheme(""); - } - - public void layout() - { - if (this.getParent().getTheme().equals("scrollpane-notch")) - { - this.vpad = 10; - } - int totalheight = vpad; - for (int i = 0; i < this.getNumChildren(); i += 2) - { - Widget w = this.getChild(i); - Widget w2 = null; - try - { - w2 = this.getChild(i + 1); - } - catch (IndexOutOfBoundsException e) - { - // do nothing, just means it's uneven. - } - int height = this.defaultheight; - if (!this.overrideheight || heightOverrideExceptions.contains(w)) - { - height = w.getPreferredHeight(); - } - if (w2 != null) - { - if (!this.overrideheight - || heightOverrideExceptions.contains(w2)) - { - int temp = w2.getPreferredHeight(); - if (temp > height) - height = temp; - } - } - w.setSize(defaultwidth, height); - w.setPosition(this.getX() + this.getWidth() / 2 - - (150 + this.split / 2), this.getY() + totalheight); - if (w2 != null) - { - w2.setSize(defaultwidth, height); - w2.setPosition(this.getX() + this.getWidth() / 2 + this.split - / 2, this.getY() + totalheight); - } - totalheight += height + defaultpad; - } - } - - public int getPreferredWidth() - { - return this.getParent().getWidth(); - } - - public int getPreferredHeight() - { - int totalheight = vpad; - for (int i = 0; i < this.getNumChildren(); i += 2) - { - Widget w = this.getChild(i); - Widget w2 = null; - if (i + 1 != getNumChildren()) - w2 = this.getChild(i + 1); - int height = this.defaultheight; - if (!this.overrideheight || heightOverrideExceptions.contains(w)) - { - height = w.getPreferredHeight(); - } - if (w2 != null) - { - if (!this.overrideheight - || heightOverrideExceptions.contains(w2)) - { - int temp = w2.getPreferredHeight(); - if (temp > height) - height = temp; - } - } - totalheight += height + defaultpad; - } - return totalheight; - } -} diff --git a/src/WidgetClassicWindow.java b/src/WidgetClassicWindow.java deleted file mode 100644 index 279df6b..0000000 --- a/src/WidgetClassicWindow.java +++ /dev/null @@ -1,14 +0,0 @@ -/** - * @deprecated Use WSimpleWindow - * @author blendmaster - * - */ -public class WidgetClassicWindow extends WidgetSimplewindow { - - @Deprecated - public void init() - { - super.init(); - System.err.println("WidgetClassicWindow is deprecated, please update mods using it to use WSimplewindow"); - } -} diff --git a/src/WidgetFloat.java b/src/WidgetFloat.java deleted file mode 100644 index a09c26c..0000000 --- a/src/WidgetFloat.java +++ /dev/null @@ -1,103 +0,0 @@ - -import de.matthiasmann.twl.model.SimpleFloatModel; - - - - -public class WidgetFloat extends WidgetSetting implements Runnable { - - //public boolean isSlider; - //public String name; - - - public int displaylen; - public String formatstring; - public WidgetSlider slider; - - public SettingFloat value; - - public WidgetFloat(SettingFloat s,String title) - { - - this( s,title, 2, ""); - } - public WidgetFloat(SettingFloat s, String title, int _displaylen) - { - this( s,title, _displaylen, ""); - } - public WidgetFloat(SettingFloat setting, String title, int _displaylen, String formatstr) - { - super(title); - setTheme(""); - displaylen=_displaylen; - formatstring=formatstr; - - - - - value = setting; - value.gui = this; - SimpleFloatModel smodel = new SimpleFloatModel(value.min, value.max, value.get()); - smodel.addCallback(this); - - slider = new WidgetSlider(smodel); - - if(value.step > 0.0f && value.step <= value.max) - slider.setStepSize(value.step); - slider.setFormat(String.format("%s: %%.%df",nicename,displaylen)); - - //smodel. - //s. - //l.setLabelFor(s); - //s.getChild(index) - //setDepthFocusTraversal(false); - //s.setTheme(""); - add(slider); - update(); - } - - /*public boolean handleEvent(Event e) - { - return s.handleEvent(e); - }*/ - - public String userString() - { - String l = String.format("%02d", displaylen); - return String.format("%s: %."+l+"f", nicename, value); - } - - /*public float floatValue() - { - //System.out.println("floatValue() returning "+((value-min)/(max-min))); - //System.out.println(""+max+" "+min+" "+value+" "+(max-min)+" "+(value-min)); - return Math.min(Math.max((value-min)/(max-min),0.0f),1.0f); - } - public void setFloatValue(float f) - { - f -= min; - //if (step > 0.0) - // f = (float)((int)(f/step))*step; - f += min; - value = f; - //update(); - }*/ - /* - */ - //@Override - public void update() { - // TODO Auto-generated method stub - slider.setValue(value.get(ModSettingScreen.guicontext)); - slider.setFormat(String.format("%s: %%.%df",nicename,displaylen)); - } - @Override - public void run() { - // TODO Auto-generated method stub - //System.out.println(s.getValue()); - value.set(slider.getValue(), ModSettingScreen.guicontext); - //if(parentmod != null) - // parentmod.save(); - } - - -} diff --git a/src/WidgetInt.java b/src/WidgetInt.java deleted file mode 100644 index ae3c3ca..0000000 --- a/src/WidgetInt.java +++ /dev/null @@ -1,192 +0,0 @@ -import de.matthiasmann.twl.ValueAdjusterFloat; -import de.matthiasmann.twl.ValueAdjusterInt; -import de.matthiasmann.twl.model.SimpleFloatModel; -import de.matthiasmann.twl.model.SimpleIntegerModel; - - -public class WidgetInt extends WidgetSetting implements Runnable { - - //public boolean isSlider; - //public String name; - public int displaylen; - public String formatstring; - //public static final boolean hasValue = true; - //public ValueAdjusterFloat s; - public WidgetSlider s; - - public SettingInt value; - - public WidgetInt(SettingInt setting, String title) - { - - this(setting, title, 15); - } - public WidgetInt(SettingInt setting, String title, int _displaylen) - { - super(title); - setTheme(""); - displaylen=_displaylen; - value = setting; - - value.gui = this; - - SimpleFloatModel smodel = new SimpleFloatModel((float)value.min, (float)value.max, (float)value.get()); - s = new WidgetSlider(smodel); - s.setFormat(String.format("%s: %%.0f",nicename)); - - if(value.step > 1 && value.step <= value.max) - s.setStepSize((float)value.step); - //smodel. - //s. - smodel.addCallback(this); - //l.setLabelFor(s); - //s.getChild(index) - //setDepthFocusTraversal(false); - //s.setTheme(""); - add(s); - update(); - } - /* - public IntSliderSetting(int _value, int _min, int _step, int _max, String formatstr) - { - super(""); - value=_value; - min=_min; - step=_step; - max=_max; - displaylen=5; - formatstring=formatstr; - isSlider = true; - init(); - }*/ - - /*public boolean handleEvent(Event e) - { - return s.handleEvent(e); - }*/ - - public String userString() - { - String l = String.format("%d", displaylen); - return String.format("%s: %."+l+"d", nicename, value.get(ModSettingScreen.guicontext)); - } - - /*public String toString() { - return ""+value; - } - public void fromString(String s) - { - value = new Integer(s); - }*/ - //@Override - public void update() { - // TODO Auto-generated method stub - s.setValue((float)value.get(ModSettingScreen.guicontext)); - s.setFormat(String.format("%s: %%.0f",nicename)); - ModSettings.dbgout("update " +value.get(ModSettingScreen.guicontext)+" -> "+(int)s.getValue()); - } - @Override - public void run() { - // TODO Auto-generated method stub - //System.out.println(s.getValue()); - ModSettings.dbgout("run " +(int)s.getValue()); - value.set((int)s.getValue(), ModSettingScreen.guicontext); - //if(parentmod != null) - // parentmod.save(); - } - - -} -/* - -public class IntSliderSetting extends FloatSliderSetting { - public int value; - public int step; - public int min; - public int max; - public int displaylen; - public static final boolean hasValue = true; - - - public IntSliderSetting() - { - value=0; - min=0; - step=0; - max=100; - displaylen=0; - isSlider = true; - } - public IntSliderSetting(int _value) - { - value=_value; - min=0; - step=0; - max=100; - displaylen=0; - isSlider = true; - } - public IntSliderSetting(int _value, int _min, int _max) - { - value=_value; - min=_min; - max=_max; - step=0; - displaylen=0; - isSlider = true; - } - public IntSliderSetting(int _value, int _min, int _step, int _max) - { - value=_value; - min=_min; - step=_step; - max=_max; - displaylen=0; - isSlider = true; - } - public IntSliderSetting(int _value, int _min, int _step, int _max, int _displaylen) - { - value=_value; - min=_min; - step=_step; - max=_max; - displaylen=_displaylen; - isSlider = true; - } - - - - - public String userString() - { - String l = ""; - if(displaylen > 0) - { - l = String.format("%02d", displaylen); - } - return String.format("%s: %"+l+"d", nicename, value); - } - - public float floatValue() - { - return Math.min(Math.max(((float)value-(float)min)/((float)max-(float)min),0.0f),1.0f); - } - @Override - public void setFloatValue(float f) - { - f *= (float)max - (float)min; - if ((float)step > 0.0) - f = (float)((int)(f/(float)step))*(float)step; - f += (float)min; - value = (int)f; - - } - public String toString() { - return ""+value; - } - public void fromString(String s) - { - value = new Float(s).intValue(); - } -} -*/ \ No newline at end of file diff --git a/src/WidgetKeybinding.java b/src/WidgetKeybinding.java deleted file mode 100644 index 9b7446a..0000000 --- a/src/WidgetKeybinding.java +++ /dev/null @@ -1,131 +0,0 @@ - -import java.beans.PropertyChangeEvent; -import java.beans.PropertyChangeListener; - -import org.lwjgl.input.*; - -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.Event; -import de.matthiasmann.twl.ToggleButton; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.model.BooleanModel; -import de.matthiasmann.twl.model.SimpleBooleanModel; - -public class WidgetKeybinding extends WidgetSetting implements Runnable { - - public SettingKey value; - - //public boolean isdown = false; - public SimpleBooleanModel bmodel; - public ToggleButton b; - - public int CLEARKEY = Keyboard.KEY_DELETE; - public int NEVERMINDKEY = Keyboard.KEY_ESCAPE; - - public WidgetKeybinding(SettingKey setting, String title) - { - super(title); - setTheme(""); - value = setting; - - value.gui = this; - - bmodel = new SimpleBooleanModel(false); - b = new ToggleButton(bmodel); //bs? - //b.addPropertyChangeListener("value",this); - //this.handleEvent( - //this.keyboardFocusLost() - add(b); - update(); - } - - public boolean handleEvent(Event evt) - { - if((evt.isKeyEvent() && !evt.isKeyPressedEvent()) && bmodel.getValue()) - { - System.out.println(Keyboard.getKeyName(evt.getKeyCode())); - int tmpvalue = evt.getKeyCode(); - if (tmpvalue == CLEARKEY) - { - value.set(Keyboard.KEY_NONE, ModSettingScreen.guicontext); - } - else if (tmpvalue != NEVERMINDKEY) - { - value.set(tmpvalue, ModSettingScreen.guicontext); - } - bmodel.setValue(false); - //if (parentmod != null) - // parentmod.save(); - update(); - GuiModScreen.clicksound(); - return true; - } - - return false; - } - - public void keyboardFocusLost() - { - GuiModScreen.clicksound(); - bmodel.setValue(false); - } - //@Override - public String userString() { - - return String.format("%s: %s",nicename,Keyboard.getKeyName(value.get(ModSettingScreen.guicontext))); - } - /*@Override - public String toString() { - return Keyboard.getKeyName(value); - } - - - - @Override - public void fromString(String s) { - - if (s.equals("UNBOUND")) - value = Keyboard.KEY_NONE; - else - value = Keyboard.getKeyIndex(s); - } - - */ - - //@Override - public void update() { - // TODO Auto-generated method stub - b.setText(userString()); - } - - @Override - public void run() { - // TODO Auto-generated method stub - //boolean isdown = bmodel.getValue(); - //b//oolean isfocused = b.isActive(); - GuiModScreen.clicksound(); - - //ModSettings.dbgout("run: "+isdown+" "+isfocused); - } - - - /*@Override - public void addCallback(Runnable callback) { - // TODO Auto-generated method stub - - } - @Override - public boolean getValue() { - return isdown; - } - @Override - public void removeCallback(Runnable callback) { - // TODO Auto-generated method stub - - } - @Override - public void setValue(boolean value) { - isdown = value; - }*/ - -} diff --git a/src/WidgetMulti.java b/src/WidgetMulti.java deleted file mode 100644 index e047060..0000000 --- a/src/WidgetMulti.java +++ /dev/null @@ -1,73 +0,0 @@ -import de.matthiasmann.twl.Button; -import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.model.SimpleButtonModel; - - - - -public class WidgetMulti extends WidgetSetting implements Runnable { - - //public boolean isSlider; - //public String name; - public SettingMulti value; - public Button b = null; - - - - public WidgetMulti(SettingMulti setting, String title) - { - super(title); - setTheme(""); - value=setting; - value.gui=this; - - - SimpleButtonModel model = new SimpleButtonModel(); - b = new Button(model); - model.addActionCallback(this); - add(b); - update(); - } - - - - - public String userString() - { - if (nicename.length() > 0) - return String.format("%s: %s", nicename, value.getLabel(ModSettingScreen.guicontext)); - else - return value.getLabel(ModSettingScreen.guicontext); - } - - /* public String toString() { - return ""+value; - } - public void fromString(String s) - { - value = new Float(s).intValue(); - } */ - - //@Override - public void update() { - // TODO Auto-generated method stub - b.setText(userString()); - ModSettings.dbgout("multi update "+userString()); - } - - @Override - public void run() { // change - // TODO Auto-generated method stub - value.next(ModSettingScreen.guicontext); - update(); - - //if(parentmod != null) - // parentmod.save(); - GuiModScreen.clicksound(); - } - - - - - -} diff --git a/src/WidgetSetting.java b/src/WidgetSetting.java deleted file mode 100644 index 5eca9bf..0000000 --- a/src/WidgetSetting.java +++ /dev/null @@ -1,49 +0,0 @@ -import java.util.ArrayList; - -import de.matthiasmann.twl.Widget; - - -public abstract class WidgetSetting extends Widget { - - public String nicename; - - //public Setting backend; - - public static ArrayList all = new ArrayList(); - - public WidgetSetting(String _nicename) - { - nicename = _nicename; - all.add(this); - } - - public void add(Widget child) - { - String T=child.getTheme(); - if (T.length() == 0) - child.setTheme("/-defaults"); - else if(!T.substring(0, 1).equals("/")) - child.setTheme("/"+T); - super.add(child); - } - @Override - public void layout() - { - for(int i=0; i wiggets = new ArrayList(); - protected ArrayList heights = new ArrayList(); - protected ArrayList widths = new ArrayList(); - - public WidgetSingleRow(int defwidth, int defheight, Widget... widgets_) - { - setTheme(""); - defaultwidth = defwidth; - defaultheight = defheight; - for(int i=0; i=0) - return heights.get(idx); - else - return wiggets.get(idx).getPreferredHeight(); - } - private int getWidth(int idx) - { - if(widths.get(idx)>=0) - return widths.get(idx); - else - return wiggets.get(idx).getPreferredWidth(); - } - @Override - public int getPreferredWidth() - { - int totalwidth=(widths.size()-1)*xSpacing; - totalwidth = totalwidth>=0?totalwidth:0; - for(int i=0; imaxheights) - maxheights = getHeight(i); - return maxheights; - } - public void layout() - { - int curXpos=0; - for(int i=0; i= 0) - { - setmode = 1; - e.setText(value.get(ModSettingScreen.guicontext)); - setmode = 0; - } - ModSettings.dbgout(String.format("update %s", e.getText())); - } - - -} diff --git a/src/co.java b/src/co.java deleted file mode 100644 index d5d7d7e..0000000 --- a/src/co.java +++ /dev/null @@ -1,94 +0,0 @@ -// Decompiled by Jad v1.5.8g. Copyright 2001 Pavel Kouznetsov. -// Jad home page: http://www.kpdus.com/jad.html -// Decompiler options: packimports(3) fieldsfirst safe -// Source File Name: SourceFile - -import java.util.List; -import net.minecraft.client.Minecraft; - -public class co extends da { - - private da i; - protected String a; - private kv j; - private static ht l[]; - - public co(da da1, kv kv1) { - a = "Options"; - i = da1; - j = kv1; - } - - public void b() { - nh nh1 = nh.a(); - a = nh1.a("options.title"); - int k = 0; - ht aht[] = l; - int i1 = aht.length; - - for(int j1 = 0; j1 < i1; j1++) { - ht ht1 = aht[j1]; - - if(!ht1.a()) - e.add(((Object) (new ab(ht1.c(), (c / 2 - 155) + (k % 2) * 160, d / 6 + 24 * (k >> 1), ht1, j.c(ht1))))); - else - e.add(((Object) (new vz(ht1.c(), (c / 2 - 155) + (k % 2) * 160, d / 6 + 24 * (k >> 1), ht1, j.c(ht1), j.a(ht1))))); - - k++; - } - - // TODO: update (d / 6 + 96 + 12) - e.add(((Object) (new ke(101, c / 2 - 100, d / 6 + 96, nh1.a("options.video"))))); - // TODO: update (d / 6 + 120 + 12) - e.add(((Object) (new ke(100, c / 2 - 100, d / 6 + 120, nh1.a("options.controls"))))); - // TODO: update (new) - e.add(((Object) (new ke(300, c / 2 - 100, d / 6 + 144, "Global Mod Settings")))); - e.add(((Object) (new ke(200, c / 2 - 100, d / 6 + 168, nh1.a("gui.done"))))); - } - - protected void a(ke ke1) { - if(!ke1.g) - return; - - if(ke1.f < 100 && (ke1 instanceof ab)) { - j.a(((ab)ke1).a(), 1); - ke1.e = j.c(ht.a(ke1.f)); - } - - if(ke1.f == 101) { - b.z.b(); - b.a(((da) (new nj(((da) (this)), j)))); - } - - if(ke1.f == 100) { - b.z.b(); - b.a(((da) (new up(((da) (this)), j)))); - } - - if(ke1.f == 200) { - b.z.b(); - b.a(i); - } - - //TODO: update - if (ke1.f == 300) - { - b.z.b(); - ModSettingScreen.guicontext = ""; - WidgetSetting.updateAll(); - GuiModScreen.show(new GuiModSelect(this)); - } - } - - public void a(int k, int i1, float f) { - i(); - a(g, a, c / 2, 20, 0xffffff); - super.a(k, i1, f); - } - - static { - l = (new ht[] { - ht.a, ht.b, ht.c, ht.d, ht.j - }); - } -} From 41734a4ab199619f1cd99d7e28cbc6fa934415a6 Mon Sep 17 00:00:00 2001 From: lahwran Date: Wed, 21 Sep 2011 00:07:00 -0600 Subject: [PATCH 11/49] moved stuff out of theme/ that did not belong, deleted empty release file --- release | 0 {theme => theme-dev}/font/default.png | Bin {theme => theme-dev}/gui/background.png | Bin {theme => theme-dev}/gui/container.png | Bin {theme => theme-dev}/gui/crafting.png | Bin {theme => theme-dev}/gui/furnace.png | Bin {theme => theme-dev}/gui/gui.png | Bin {theme => theme-dev}/gui/icons.png | Bin {theme => theme-dev}/gui/inventory.png | Bin {theme => theme-dev}/gui/items.png | Bin {theme => theme-dev}/gui/logo.png | Bin {theme => theme-dev}/gui/particles.png | Bin {theme => theme-dev}/gui/slot.png | Bin {theme => theme-dev}/gui/trap.png | Bin {theme => theme-dev}/gui/unknown_pack.png | Bin .../scrollwindow.xcf.bz2 | Bin 16 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 release rename {theme => theme-dev}/font/default.png (100%) rename {theme => theme-dev}/gui/background.png (100%) rename {theme => theme-dev}/gui/container.png (100%) rename {theme => theme-dev}/gui/crafting.png (100%) rename {theme => theme-dev}/gui/furnace.png (100%) rename {theme => theme-dev}/gui/gui.png (100%) rename {theme => theme-dev}/gui/icons.png (100%) rename {theme => theme-dev}/gui/inventory.png (100%) rename {theme => theme-dev}/gui/items.png (100%) rename {theme => theme-dev}/gui/logo.png (100%) rename {theme => theme-dev}/gui/particles.png (100%) rename {theme => theme-dev}/gui/slot.png (100%) rename {theme => theme-dev}/gui/trap.png (100%) rename {theme => theme-dev}/gui/unknown_pack.png (100%) rename scrollwindow.xcf.bz2 => theme-dev/scrollwindow.xcf.bz2 (100%) diff --git a/release b/release deleted file mode 100644 index e69de29..0000000 diff --git a/theme/font/default.png b/theme-dev/font/default.png similarity index 100% rename from theme/font/default.png rename to theme-dev/font/default.png diff --git a/theme/gui/background.png b/theme-dev/gui/background.png similarity index 100% rename from theme/gui/background.png rename to theme-dev/gui/background.png diff --git a/theme/gui/container.png b/theme-dev/gui/container.png similarity index 100% rename from theme/gui/container.png rename to theme-dev/gui/container.png diff --git a/theme/gui/crafting.png b/theme-dev/gui/crafting.png similarity index 100% rename from theme/gui/crafting.png rename to theme-dev/gui/crafting.png diff --git a/theme/gui/furnace.png b/theme-dev/gui/furnace.png similarity index 100% rename from theme/gui/furnace.png rename to theme-dev/gui/furnace.png diff --git a/theme/gui/gui.png b/theme-dev/gui/gui.png similarity index 100% rename from theme/gui/gui.png rename to theme-dev/gui/gui.png diff --git a/theme/gui/icons.png b/theme-dev/gui/icons.png similarity index 100% rename from theme/gui/icons.png rename to theme-dev/gui/icons.png diff --git a/theme/gui/inventory.png b/theme-dev/gui/inventory.png similarity index 100% rename from theme/gui/inventory.png rename to theme-dev/gui/inventory.png diff --git a/theme/gui/items.png b/theme-dev/gui/items.png similarity index 100% rename from theme/gui/items.png rename to theme-dev/gui/items.png diff --git a/theme/gui/logo.png b/theme-dev/gui/logo.png similarity index 100% rename from theme/gui/logo.png rename to theme-dev/gui/logo.png diff --git a/theme/gui/particles.png b/theme-dev/gui/particles.png similarity index 100% rename from theme/gui/particles.png rename to theme-dev/gui/particles.png diff --git a/theme/gui/slot.png b/theme-dev/gui/slot.png similarity index 100% rename from theme/gui/slot.png rename to theme-dev/gui/slot.png diff --git a/theme/gui/trap.png b/theme-dev/gui/trap.png similarity index 100% rename from theme/gui/trap.png rename to theme-dev/gui/trap.png diff --git a/theme/gui/unknown_pack.png b/theme-dev/gui/unknown_pack.png similarity index 100% rename from theme/gui/unknown_pack.png rename to theme-dev/gui/unknown_pack.png diff --git a/scrollwindow.xcf.bz2 b/theme-dev/scrollwindow.xcf.bz2 similarity index 100% rename from scrollwindow.xcf.bz2 rename to theme-dev/scrollwindow.xcf.bz2 From d8fd430544cacc5e207c2b5c71bd07f7e5495d4c Mon Sep 17 00:00:00 2001 From: lahwran Date: Wed, 21 Sep 2011 00:12:26 -0600 Subject: [PATCH 12/49] removed more crap --- .classpath | 12 ------------ .settings/org.eclipse.jdt.core.prefs | 12 ------------ 2 files changed, 24 deletions(-) delete mode 100644 .classpath delete mode 100644 .settings/org.eclipse.jdt.core.prefs diff --git a/.classpath b/.classpath deleted file mode 100644 index 701c38c..0000000 --- a/.classpath +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - - diff --git a/.settings/org.eclipse.jdt.core.prefs b/.settings/org.eclipse.jdt.core.prefs deleted file mode 100644 index f0b25bb..0000000 --- a/.settings/org.eclipse.jdt.core.prefs +++ /dev/null @@ -1,12 +0,0 @@ -#Mon Apr 04 18:27:12 MDT 2011 -eclipse.preferences.version=1 -org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled -org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.6 -org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve -org.eclipse.jdt.core.compiler.compliance=1.6 -org.eclipse.jdt.core.compiler.debug.lineNumber=generate -org.eclipse.jdt.core.compiler.debug.localVariable=generate -org.eclipse.jdt.core.compiler.debug.sourceFile=generate -org.eclipse.jdt.core.compiler.problem.assertIdentifier=error -org.eclipse.jdt.core.compiler.problem.enumIdentifier=error -org.eclipse.jdt.core.compiler.source=1.6 From 06d6c012f76337c492df8141b77113efb5624124 Mon Sep 17 00:00:00 2001 From: lahwran Date: Wed, 21 Sep 2011 00:19:21 -0600 Subject: [PATCH 13/49] added all of mcp to gitignore --- .gitignore | 40 ++++++++++++++++++++++++++++++++++++++++ .project | 17 ----------------- 2 files changed, 40 insertions(+), 17 deletions(-) delete mode 100644 .project diff --git a/.gitignore b/.gitignore index e69de29..a141cd7 100644 --- a/.gitignore +++ b/.gitignore @@ -0,0 +1,40 @@ + +# eclipse +.project +.classpath +.settings + +# eclipse and mcp use this +bin/ + +# all of mcp +CHANGELOG +cleanup.bat +cleanup.sh +conf/ +decompile.bat +decompile.sh +docs/ +eclipse/ +jars/ +lib/ +LICENSE +logs/ +recompile.bat +recompile.sh +reobf/ +reobfuscate.bat +reobfuscate.sh +runtime/ +startclient.bat +startclient.sh +startserver.bat +startserver.sh +temp/ +updatemcp.bat +updatemcp.sh +updatemd5.bat +updatemd5.sh +updatenames.bat +updatenames.sh + diff --git a/.project b/.project deleted file mode 100644 index c978ea6..0000000 --- a/.project +++ /dev/null @@ -1,17 +0,0 @@ - - - GuiAPI - - - - - - org.eclipse.jdt.core.javabuilder - - - - - - org.eclipse.jdt.core.javanature - - From ffb9b589b805c75e6b0de4055315056af177ef32 Mon Sep 17 00:00:00 2001 From: lahwran Date: Wed, 21 Sep 2011 00:22:35 -0600 Subject: [PATCH 14/49] fixed link --- readme.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/readme.md b/readme.md index 7f0bcd0..9e311b0 100644 --- a/readme.md +++ b/readme.md @@ -1,7 +1,7 @@ GuiAPI ====== -GuiAPI uses the TWL library from Matthias Mann, see [[http://twl.l33tlabs.org/|twl.l33tlabs.org]] +GuiAPI uses the TWL library from Matthias Mann, see http://twl.l33tlabs.org/ Building -------- From d147a063f672bf1c1c2a3fe700458381665ef5b8 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 21 Sep 2011 03:57:48 -0230 Subject: [PATCH 15/49] Added the Ant task I use to copy from mcp to the github folder I use. It's hardcoded because I don't know how to do otherwise. Please don't make fun of it :( --- GuiAPIAnt.xml | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 GuiAPIAnt.xml diff --git a/GuiAPIAnt.xml b/GuiAPIAnt.xml new file mode 100644 index 0000000..6e3a451 --- /dev/null +++ b/GuiAPIAnt.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + From b69e6fa487f921d673ff31041c4ea0e6e4e9d3ed Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 21 Sep 2011 23:33:07 -0230 Subject: [PATCH 16/49] Fixed a bug in WidgetClassicTwocolumn.heightOverrideExceptions. Added WidgetClassicTwocolumn.widthOverrideExceptions. Fixed a bug in ModAction (Basically just exception text) Changed the simple API (Breaking change for it). Can now get the Setting objects, and not JUST the values. Added SettingList. Updated the basic example to the new Simple API. --- mcp/ModAction.java | 521 ++++---- mcp/ModSettings.java | 2083 +++++++++++++++---------------- mcp/SettingList.java | 78 ++ mcp/WidgetClassicTwocolumn.java | 113 +- mcp/WidgetSinglecolumn.java | 47 +- mcp/mod_GuiApiBasicExample.java | 12 +- 6 files changed, 1465 insertions(+), 1389 deletions(-) create mode 100644 mcp/SettingList.java diff --git a/mcp/ModAction.java b/mcp/ModAction.java index 2c10e51..d61ffcc 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -6,7 +6,6 @@ import java.security.InvalidParameterException; import java.util.ArrayList; - /** * This class is a helper designed to make it easier to use callbacks. It * implements Runnable and PropertyChangeListener, and you can use it in several @@ -16,289 +15,243 @@ * @author ShaRose */ @SuppressWarnings("rawtypes") -public class ModAction implements Runnable, PropertyChangeListener -{ - private Object[] defaultArguments; - private ArrayList mergedActions = new ArrayList(); - private String methodName; - private Class[] methodParams = new Class[0]; - private Object tag; - private Object objectRef; - - /** - * This is the most common ModAction constructor. You simply specify what - * has the method you want, and the method's name and (Optionally) the - * parameters. - * - * @param o - * The object reference or class that contains the method you - * wish to call. - * @param method - * The name of the method you wish to call. - * @param params - * The parameters of the method you wish to call. - */ - public ModAction(Object o, String method, Class... params) - { - setTag(method); - methodParams = params; - setupHandler(o, method); - } - - /** - * This is an overload to allow the nameRef string. - * - * @param o - * The object reference or class that contains the method you - * wish to call. - * @param method - * The name of the method you wish to call. - * @param name - * The name of this ModAction. Something else you can use to keep - * track, and this is included within exceptions. - * @param params - * The parameters of the method you wish to call. - */ - public ModAction(Object o, String method, String name, Class... params) - { - this(o, method, params); - setTag(name); - } - - /** - * This is a constructor that is only supposed to be used internally. It - * sets no actual handler, only a name. - * - * @param name - * The name to use for this ModAction. - */ - private ModAction(String name) - { - setTag(name); - } - - @SuppressWarnings("unchecked") - private static Boolean checkArguments(Class[] classTypes, Object[] arguments) - { - if (classTypes.length != arguments.length) - { - return false; - } - for (int i = 0; i < classTypes.length; i++) - { - if (!classTypes[i].isAssignableFrom(arguments[i].getClass())) - { - return false; - } - } - return true; - } - - /** - * Call this ModAction and any Merged actions with the provided - * arguments. If the arguments do not match it will try using the default - * arguments, if they exist. If not, it will throw an exception. - * - * @param args - * The arguments to try and call for the ModAction (And any - * merged ModActions) - * @return The return values for each ModAction. - * @throws Exception - * Any exception thrown when the ModAction attempts to run. - */ - public Object[] call(Object... args) throws Exception - { - try - { - if (mergedActions.isEmpty()) - { - return new Object[] - { callInternal(args) }; - } - else - { - Object[] returnvals = new Object[mergedActions.size()]; - for (int i = 0; i < returnvals.length; i++) - { - returnvals[i] = mergedActions.get(i).call(args); - } - return returnvals; - } - } - catch (Exception e) - { - e.printStackTrace(); - throw new Exception("error calling callback '" + getTag() + "'.", e); - } - } - - private Object callInternal(Object... args) throws Exception - { - if (!checkArguments(methodParams, args)) - { - if (defaultArguments != null) - { - args = defaultArguments; - } - } - try - { - Method meth = getMethodRecursively(objectRef, methodName); - return meth.invoke(objectRef instanceof Class ? null : objectRef, - args); - } - catch (Exception e) - { - throw new Exception("error calling callback '" + getTag() + "'.", e); - } - } - - private Method getMethodRecursively(Object o, String method) - { - Class currentclass = (o instanceof Class ? (Class) o : o - .getClass()); - while (true) - { - if (currentclass == null) - { - throw new RuntimeException("Unable to locate method '" + method + "' anywhere in the inheritance chain of the given class!"); - } - try - { - Method returnval = currentclass.getDeclaredMethod(method, - methodParams); - if (returnval != null) - { - returnval.setAccessible(true); - return returnval; - } - } - catch (Throwable x) - {} - currentclass = currentclass.getSuperclass(); - } - } - - /** - * Merge[s] newAction[s] with this action. - * - * @param newActions - * The new Action[s] to merge with. - * @return The Merged ModAction. - */ - public ModAction mergeAction(ModAction... newActions) - { - if (mergedActions.isEmpty()) - { - ModAction merged = new ModAction("Merged ModAction"); - merged.mergedActions.add(this); - for (ModAction modAction : newActions) - { - merged.mergedActions.add(modAction); - } - - return merged; - } - else - { - for (ModAction modAction : newActions) - { - mergedActions.add(modAction); - } - return this; - } - } - - @Override - public void propertyChange(PropertyChangeEvent paramPropertyChangeEvent) - { - if ((methodParams.length != 1) - || (methodParams[0] != PropertyChangeEvent.class)) - { - throw new RuntimeException( - "invalid method parameters for a PropertyChangeListener callback. Modaction is '" - + getTag() + "'."); - } - try - { - call(paramPropertyChangeEvent); - } - catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException( - "Error when calling PropertyChangeListener callback. Modaction is '" - + getTag() + "'.", e); - } - } - - @Override - public void run() - { - try - { - call(); - } - catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException( - "Error when calling Runnable callback. Modaction is '" - + getTag() + "'.", e); - } - } - - /** - * Set the arguments to use if no or invalid arguments are provided. - * Throws InvalidParameterException if the arguments provided do not match - * the method parameters, or are not assignable to those types. - * - * @param Arguments - * The arguments to try and call. - * @return this - */ - public ModAction setDefaultArguments(Object... Arguments) - { - if (!checkArguments(methodParams, Arguments)) - { - throw new InvalidParameterException( - "Arguments do not match the parameters."); - } - defaultArguments = Arguments; - return this; - } - - private void setupHandler(Object o, String method) - { - try - { - getMethodRecursively(o, method); - } - catch (Exception e) - { - e.printStackTrace(); - throw new RuntimeException( - "Could not locate Method with included information."); - } - methodName = method; - objectRef = o; - } +public class ModAction implements Runnable, PropertyChangeListener { + @SuppressWarnings("unchecked") + private static Boolean checkArguments(Class[] classTypes, Object[] arguments) { + if (classTypes.length != arguments.length) { + return false; + } + for (int i = 0; i < classTypes.length; i++) { + if (!classTypes[i].isAssignableFrom(arguments[i].getClass())) { + return false; + } + } + return true; + } + + private Object[] defaultArguments; + private ArrayList mergedActions = new ArrayList(); + private String methodName; + private Class[] methodParams = new Class[0]; + private Object objectRef; + + private Object tag; + + /** + * This is the most common ModAction constructor. You simply specify what + * has the method you want, and the method's name and (Optionally) the + * parameters. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, Class... params) { + setTag(method); + methodParams = params; + setupHandler(o, method); + } + + /** + * This is an overload to allow the nameRef string. + * + * @param o + * The object reference or class that contains the method you + * wish to call. + * @param method + * The name of the method you wish to call. + * @param name + * The name of this ModAction. Something else you can use to keep + * track, and this is included within exceptions. + * @param params + * The parameters of the method you wish to call. + */ + public ModAction(Object o, String method, String name, Class... params) { + this(o, method, params); + setTag(name); + } + + /** + * This is a constructor that is only supposed to be used internally. It + * sets no actual handler, only a name. + * + * @param name + * The name to use for this ModAction. + */ + private ModAction(String name) { + setTag(name); + } + + /** + * Call this ModAction and any Merged actions with the provided arguments. + * If the arguments do not match it will try using the default arguments, if + * they exist. If not, it will throw an exception. + * + * @param args + * The arguments to try and call for the ModAction (And any + * merged ModActions) + * @return The return values for each ModAction. + * @throws Exception + * Any exception thrown when the ModAction attempts to run. + */ + public Object[] call(Object... args) throws Exception { + try { + if (mergedActions.isEmpty()) { + return new Object[] { callInternal(args) }; + } + Object[] returnvals = new Object[mergedActions.size()]; + for (int i = 0; i < returnvals.length; i++) { + returnvals[i] = mergedActions.get(i).call(args); + } + return returnvals; + } catch (Exception e) { + e.printStackTrace(); + throw new Exception("error calling callback '" + getTag() + "'.", e); + } + } + + private Object callInternal(Object... args) throws Exception { + if (!ModAction.checkArguments(methodParams, args)) { + if (defaultArguments != null) { + args = defaultArguments; + } + } + try { + Method meth = getMethodRecursively(objectRef, methodName); + return meth.invoke(objectRef instanceof Class ? null : objectRef, + args); + } catch (Exception e) { + throw new Exception("error calling callback '" + getTag() + "'.", e); + } + } + + private Method getMethodRecursively(Object o, String method) throws Exception { + Class currentclass = (o instanceof Class ? (Class) o : o + .getClass()); + while (true) { + if (currentclass == null) { + throw new Exception( + "Unable to locate method '" + + method + + "' anywhere in the inheritance chain of object '" + + (o instanceof Class ? (Class) o : o + .getClass()).getName() + "'!"); + } + try { + Method returnval = currentclass.getDeclaredMethod(method, + methodParams); + if (returnval != null) { + returnval.setAccessible(true); + return returnval; + } + } catch (Throwable x) { + } + currentclass = currentclass.getSuperclass(); + } + } + + /** + * @return The tag of this ModAction. + */ + public Object getTag() { + return tag; + } + + /** + * Merge[s] newAction[s] with this action. + * + * @param newActions + * The new Action[s] to merge with. + * @return The Merged ModAction. + */ + public ModAction mergeAction(ModAction... newActions) { + if (mergedActions.isEmpty()) { + ModAction merged = new ModAction("Merged ModAction"); + merged.mergedActions.add(this); + for (ModAction modAction : newActions) { + merged.mergedActions.add(modAction); + } + + return merged; + } + for (ModAction modAction : newActions) { + mergedActions.add(modAction); + } + return this; + } + + @Override + public void propertyChange(PropertyChangeEvent paramPropertyChangeEvent) { + if ((methodParams.length != 1) + || (methodParams[0] != PropertyChangeEvent.class)) { + throw new RuntimeException( + "invalid method parameters for a PropertyChangeListener callback. Modaction is '" + + getTag() + "'."); + } + try { + call(paramPropertyChangeEvent); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling PropertyChangeListener callback. Modaction is '" + + getTag() + "'.", e); + } + } + + @Override + public void run() { + try { + call(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling Runnable callback. Modaction is '" + + getTag() + "'.", e); + } + } + + /** + * Set the arguments to use if no or invalid arguments are provided. Throws + * InvalidParameterException if the arguments provided do not match the + * method parameters, or are not assignable to those types. + * + * @param Arguments + * The arguments to try and call. + * @return this + */ + public ModAction setDefaultArguments(Object... Arguments) { + if (!ModAction.checkArguments(methodParams, Arguments)) { + throw new InvalidParameterException( + "Arguments do not match the parameters."); + } + defaultArguments = Arguments; + return this; + } - /** - * Sets the tag of this ModAction. Used for tracking, and is included with exceptions. - * - * @param name The tag to assign to this ModAction. - */ - public void setTag(Object tag) - { - this.tag = tag; - } + /** + * Sets the tag of this ModAction. Used for tracking, and is included with + * exceptions. + * + * @param name + * The tag to assign to this ModAction. + */ + public void setTag(Object tag) { + this.tag = tag; + } - /** - * @return The tag of this ModAction. - */ - public Object getTag() - { - return tag; - } + private void setupHandler(Object o, String method) { + try { + getMethodRecursively(o, method); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException( + "Could not locate Method with included information.", e); + } + methodName = method; + objectRef = o; + } } \ No newline at end of file diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index e092e66..bebbec1 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -12,1077 +12,1024 @@ import net.minecraft.client.Minecraft; import de.matthiasmann.twl.Widget; - /** * Main interface class for Settings API * * @author lahwran */ -public class ModSettings -{ - /** - * A list of all ModSettings instances. - */ - public static ArrayList all = new ArrayList(); - /** - * A map of context names and the directories they save to. - */ - public static HashMap contextDatadirs; - /** - * The current context. - */ - public static String currentContext; - /** - * Debug mode flag. Should always be false. - */ - public static final boolean debug = false; - private static Minecraft minecraftInstance; - static - { - ModSettings.contextDatadirs = new HashMap(); - ModSettings.currentContext = ""; - ModSettings.contextDatadirs.put("", "mods"); - } - - /** - * Debug printer. This prints to System.out, and only works when in debug - * mode. - * - * @param s - * The string to output. - */ - public static void dbgout(String s) - { - if (ModSettings.debug) - { - System.out.println(s); - } - } - - /** - * Returns, and creates if needed, an application directory. - * - * @param app - * The name of the application. - * @return A File reference to the directory created. - */ - public static File getAppDir(String app) - { - return Minecraft.getAppDir(app); - } - - /** - * This finds and returns a Minecraft instance. It caches it if it has - * already been located. - * - * @return The minecraft instance. - */ - public static Minecraft getMcinst() - { - if (ModSettings.minecraftInstance != null) - { - return ModSettings.minecraftInstance; - } - Field f; - try - { - f = Minecraft.class.getDeclaredFields()[1]; - f.setAccessible(true); - Minecraft m = (Minecraft) f.get(null); - if (m != null) - { - ModSettings.minecraftInstance = m; - return m; - } - f = Thread.class.getDeclaredField("target"); - f.setAccessible(true); - ThreadGroup group = Thread.currentThread().getThreadGroup(); - int count = group.activeCount(); - Thread[] threads = new Thread[count]; - group.enumerate(threads); - for (int i = 0; i < threads.length; i++) - { - if (threads[i].getName().equals("Minecraft main thread")) - { - m = (Minecraft) f.get(threads[i]); - if (m != null) - { - ModSettings.minecraftInstance = m; - return m; - } - } - } - } - catch (Throwable t) - { - throw new RuntimeException(t); - } - throw new RuntimeException( - "You are a godless monkey! why are you doing weird things with the innards of minecraft?"); - } - - /** - * Loads all saved settings for a specific context. - * - * @param context - * The context to load from. - */ - public static void loadAll(String context) - { - for (int i = 0; i < ModSettings.all.size(); i++) - { - ModSettings.all.get(i).load(context); - } - } - - /** - * Set the Minecraft instance that getMcinst returns. - * - * @param m - * The Minecraft Instance. - */ - public static void presetMcint(Minecraft m) - { - ModSettings.minecraftInstance = m; - } - - /** - * Sets the context for mods. This means you can specify a context on a per - * world / per server basis, or anything else you would prefer. This will - * carry thoughout all mods. - * - * @param name - * The name reference of the context. - * @param location - * The location that this context stores and loads data from. - */ - public static void setContext(String name, String location) - { - if (name != null) - { - ModSettings.contextDatadirs.put(name, location); - ModSettings.currentContext = name; - if (!name.equals("")) - { - ModSettings.loadAll(ModSettings.currentContext); - } - } - else - { - ModSettings.currentContext = ""; - } - } - - /** - * Mod name as used in .minecraft/mods/${modbackendname}/ - */ - public String backendname; - /** - * all registered settings for this mod - */ - @SuppressWarnings("rawtypes") - public ArrayList Settings; - /** - * Whether or not Settings have been loaded for this mod. - */ - public boolean settingsLoaded = false; - - /** - * @param modbackendname - * used to initialize class modbackendname field - */ - @SuppressWarnings("rawtypes") - public ModSettings(String modbackendname) - { - backendname = modbackendname; - Settings = new ArrayList(); - ModSettings.all.add(this); - } - - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(ModSettingScreen screen, String nicename, - String backendname, boolean value) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(ModSettingScreen screen, String nicename, - String backendname, boolean value, String truestring, - String falsestring) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, - falsestring); - screen.append(w); - append(s); - return s; - } - - /** - * convenience float setting adder - */ - public SettingFloat addSetting(ModSettingScreen screen, String nicename, - String backendname, float value) - { - SettingFloat s = new SettingFloat(backendname, value); - WidgetFloat w = new WidgetFloat(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience float setting adder - */ - public SettingFloat addSetting(ModSettingScreen screen, String nicename, - String backendname, float value, float min, float step, float max) - { - SettingFloat s = new SettingFloat(backendname, value, min, step, max); - WidgetFloat w = new WidgetFloat(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience key setting adder - */ - public SettingKey addSetting(ModSettingScreen screen, String nicename, - String backendname, int value) - { - SettingKey s = new SettingKey(backendname, value); - WidgetKeybinding w = new WidgetKeybinding(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience int setting adder - */ - public SettingInt addSetting(ModSettingScreen screen, String nicename, - String backendname, int value, int min, int max) - { - SettingInt s = new SettingInt(backendname, value, min, 1, max); - WidgetInt w = new WidgetInt(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience int setting adder - */ - public SettingInt addSetting(ModSettingScreen screen, String nicename, - String backendname, int value, int min, int step, int max) - { - SettingInt s = new SettingInt(backendname, value, min, step, max); - WidgetInt w = new WidgetInt(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience multi setting adder - */ - public SettingMulti addSetting(ModSettingScreen screen, String nicename, - String backendname, int value, String... labels) - { - SettingMulti s = new SettingMulti(backendname, value, labels); - WidgetMulti w = new WidgetMulti(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience text setting adder - */ - public SettingText addSetting(ModSettingScreen screen, String nicename, - String backendname, String value) - { - SettingText s = new SettingText(backendname, value); - WidgetText w = new WidgetText(s, nicename); - screen.append(w); - append(s); - return s; - } - - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(Widget w2, String nicename, - String backendname, boolean value) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience boolean setting adder - */ - public SettingBoolean addSetting(Widget w2, String nicename, - String backendname, boolean value, String truestring, - String falsestring) - { - SettingBoolean s = new SettingBoolean(backendname, value); - WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, - falsestring); - w2.add(w); - append(s); - return s; - } - - /** - * convenience float setting adder - */ - public SettingFloat addSetting(Widget w2, String nicename, - String backendname, float value) - { - SettingFloat s = new SettingFloat(backendname, value); - WidgetFloat w = new WidgetFloat(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience float setting adder - */ - public SettingFloat addSetting(Widget w2, String nicename, - String backendname, float value, float min, float step, float max) - { - SettingFloat s = new SettingFloat(backendname, value, min, step, max); - WidgetFloat w = new WidgetFloat(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience key setting adder - */ - public SettingKey addSetting(Widget w2, String nicename, - String backendname, int value) - { - SettingKey s = new SettingKey(backendname, value); - WidgetKeybinding w = new WidgetKeybinding(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience int setting adder - */ - public SettingInt addSetting(Widget w2, String nicename, - String backendname, int value, int min, int max) - { - SettingInt s = new SettingInt(backendname, value, min, 1, max); - WidgetInt w = new WidgetInt(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience int setting adder - */ - public SettingInt addSetting(Widget w2, String nicename, - String backendname, int value, int min, int step, int max) - { - SettingInt s = new SettingInt(backendname, value, min, step, max); - WidgetInt w = new WidgetInt(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience multi setting adder - */ - public SettingMulti addSetting(Widget w2, String nicename, - String backendname, int value, String... labels) - { - SettingMulti s = new SettingMulti(backendname, value, labels); - WidgetMulti w = new WidgetMulti(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * convenience text setting adder - */ - public SettingText addSetting(Widget w2, String nicename, - String backendname, String value) - { - SettingText s = new SettingText(backendname, value); - WidgetText w = new WidgetText(s, nicename); - w2.add(w); - append(s); - return s; - } - - /** - * add a setting to be saved. - * - * @param s - * setting to add - sets s.parent as well, don't add a setting to - * more than one modsettings - */ - @SuppressWarnings( - { "unchecked", "rawtypes" }) - public void append(Setting s) - { - Settings.add(s); - s.parent = this; - } - - /** - * Copies the saved settings from one context to another. - * - * @param src - * The source context from which to copy. - * @param dest - * The destination context to save to. - */ - public void copyContextAll(String src, String dest) - { - for (int i = 0; i < Settings.size(); i++) - { - Settings.get(i).copyContext(src, dest); - } - } - - /** - * Get a list of all Boolean settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllBooleanSettings() - { - return getAllBooleanSettings(ModSettings.currentContext); - } - - /** - * Get a list of all Boolean settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllBooleanSettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingBoolean) setting); - } - return settings; - } - - /** - * Get a list of all Float settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllFloatSettings() - { - return getAllFloatSettings(ModSettings.currentContext); - } - - /** - * Get a list of all Float settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllFloatSettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingFloat.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingFloat) setting); - } - return settings; - } - - /** - * Get a list of all Int settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllIntSettings() - { - return getAllIntSettings(ModSettings.currentContext); - } - - /** - * Get a list of all Int settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllIntSettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingInt.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingInt) setting); - } - return settings; - } - - /** - * Get a list of all Key settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllKeySettings() - { - return getAllKeySettings(ModSettings.currentContext); - } - - /** - * Get a list of all Key settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllKeySettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingKey.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingKey) setting); - } - return settings; - } - - /** - * Get a list of all Multi settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllMultiSettings() - { - return getAllMultiSettings(ModSettings.currentContext); - } - - /** - * Get a list of all Multi settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllMultiSettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingMulti.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingMulti) setting); - } - return settings; - } - - /** - * Get a list of all Text settings for the current context. - * - * @return The list of settings. - */ - public ArrayList getAllTextSettings() - { - return getAllTextSettings(ModSettings.currentContext); - } - - /** - * Get a list of all Text settings for the specified context. - * - * @param context - * The context from which to copy from. - * @return The list of settings. - */ - @SuppressWarnings("rawtypes") - public ArrayList getAllTextSettings(String context) - { - ArrayList settings = new ArrayList(); - for (Setting setting : Settings) - { - if (!SettingText.class.isAssignableFrom(setting.getClass())) - { - continue; - } - settings.add((SettingText) setting); - } - return settings; - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The boolean value. - */ - public Boolean getBooleanSetting(String backendName) - { - return getBooleanSetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The boolean value. - */ - @SuppressWarnings("rawtypes") - public Boolean getBooleanSetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingBoolean) setting).get(context)); - } - } - throw new InvalidParameterException("SettingBoolean '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The Float value. - */ - public Float getFloatSetting(String backendName) - { - return getFloatSetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The Float value. - */ - @SuppressWarnings("rawtypes") - public Float getFloatSetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingFloat.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingFloat) setting).get(context)); - } - } - throw new InvalidParameterException("SettingFloat '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The Int value. - */ - public Integer getIntSetting(String backendName) - { - return getIntSetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The Int value. - */ - @SuppressWarnings("rawtypes") - public Integer getIntSetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingInt.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingInt) setting).get(context)); - } - } - throw new InvalidParameterException("SettingInt '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The Key value. - */ - public Integer getKeySetting(String backendName) - { - return getKeySetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The Key value. - */ - @SuppressWarnings("rawtypes") - public Integer getKeySetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingKey.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingKey) setting).get(context)); - } - } - throw new InvalidParameterException("SettingKey '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The Multi value. - */ - public Integer getMultiSetting(String backendName) - { - return getMultiSetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The Multi value. - */ - @SuppressWarnings("rawtypes") - public Integer getMultiSetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingMulti.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingMulti) setting).get(context)); - } - } - throw new InvalidParameterException("SettingMulti '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The text label for the value. - */ - public String getMultiSettingLabel(String backendName) - { - return getMultiSettingLabel(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The text label for the value. - */ - @SuppressWarnings("rawtypes") - public String getMultiSettingLabel(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingMulti.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingMulti) setting).getLabel(context)); - } - } - throw new InvalidParameterException("SettingMulti '" + backendName - + "' not found."); - } - - /** - * Gets the value of a setting by backend name from the current context. - * - * @param backendName - * The backend name of the setting. - * @return The Text value. - */ - public String getTextSetting(String backendName) - { - return getTextSetting(backendName, ModSettings.currentContext); - } - - /** - * Gets the value of a setting by backend name from the specified context. - * - * @param backendName - * The backend name of the setting. - * @param context - * The context from which to copy from. - * @return The Text value. - */ - @SuppressWarnings("rawtypes") - public String getTextSetting(String backendName, String context) - { - for (Setting setting : Settings) - { - if (!SettingText.class.isAssignableFrom(setting.getClass())) - { - continue; - } - if (setting.backendName.equals(backendName)) - { - return (((SettingText) setting).get(context)); - } - } - throw new InvalidParameterException("SettingText '" + backendName - + "' not found."); - } - - /** - * Loads the settings for the default context. - */ - public void load() - { - load(""); - settingsLoaded = true; - } - - /** - * must be called after all settings are added for loading/saving to work. - * loads from .minecraft/mods/$backendname/guiconfig.properties if it - * exists. coming soon: set name of config file - * - * @param context - * The context to load from. - */ - @SuppressWarnings("rawtypes") - public void load(String context) - { - for (;;) - { - try - { - if (ModSettings.contextDatadirs.get(context) == null) - { - break; - } - File path = ModSettings.getAppDir("minecraft/" - + ModSettings.contextDatadirs.get(context) + "/" - + backendname + "/"); - if (!path.exists()) - { - break; - } - File file = new File(path, "guiconfig.properties"); - if (!file.exists()) - { - break; - } - Properties p = new Properties(); - p.load(new FileInputStream(file)); - for (int i = 0; i < Settings.size(); i++) - { - if (Settings.get(i) instanceof Setting) - { - ModSettings.dbgout("setting load"); - Setting z = Settings.get(i); - if (p.containsKey(z.backendName)) - { - ModSettings.dbgout("setting " - + (String) p.get(z.backendName)); - z.fromString((String) p.get(z.backendName), context); - } - } - } - break; - } - catch (Exception e) - { - System.out.println(e); - break; - } - } - } - - /** - * removes a setting using ArrayList.remove - * - * @param s - * setting to remove - */ - @SuppressWarnings( - { "unchecked", "rawtypes" }) - public void remove(Setting s) - { - Settings.remove(s); - s.parent = null; - } - - /** - * Resets all settings for the current context. - */ - public void resetAll() - { - resetAll(ModSettings.currentContext); - } - - /** - * Resets all settings for the specified context. - * - * @param context - * The context to reset. - */ - public void resetAll(String context) - { - for (int i = 0; i < Settings.size(); i++) - { - Settings.get(i).reset(context); - } - } - - /** - * called every time a setting is changed saves settings file to - * .minecraft/mods/$backendname/guiconfig.properties coming soon: set name - * of config file - * - * @param context - * The context to save. - */ - @SuppressWarnings("rawtypes") - public void save(String context) - { - if (!settingsLoaded) - { - return; - } - try - { - File path = ModSettings.getAppDir("minecraft/" - + ModSettings.contextDatadirs.get(context) + "/" - + backendname + "/"); - ModSettings.dbgout("saving context " + context + " (" - + path.getAbsolutePath() + " [" - + ModSettings.contextDatadirs.get(context) + "])"); - if (!path.exists()) - { - path.mkdirs(); - } - File file = new File(path, "guiconfig.properties"); - Properties p = new Properties(); - for (int i = 0; i < Settings.size(); i++) - { - Setting z = Settings.get(i); - p.put(z.backendName, z.toString(context)); - } - FileOutputStream out = new FileOutputStream(file); - p.store(out, ""); - } - catch (Exception e) - { - e.printStackTrace(); - } - } - - /** - * @return number of settings registered - */ - public int size() - { - return Settings.size(); - } +public class ModSettings { + /** + * A list of all ModSettings instances. + */ + public static ArrayList all = new ArrayList(); + /** + * A map of context names and the directories they save to. + */ + public static HashMap contextDatadirs; + /** + * The current context. + */ + public static String currentContext; + /** + * Debug mode flag. Should always be false. + */ + public static final boolean debug = false; + private static Minecraft minecraftInstance; + static { + ModSettings.contextDatadirs = new HashMap(); + ModSettings.currentContext = ""; + ModSettings.contextDatadirs.put("", "mods"); + } + + /** + * Debug printer. This prints to System.out, and only works when in debug + * mode. + * + * @param s + * The string to output. + */ + public static void dbgout(String s) { + if (ModSettings.debug) { + System.out.println(s); + } + } + + /** + * Returns, and creates if needed, an application directory. + * + * @param app + * The name of the application. + * @return A File reference to the directory created. + */ + public static File getAppDir(String app) { + return Minecraft.getAppDir(app); + } + + /** + * This finds and returns a Minecraft instance. It caches it if it has + * already been located. + * + * @return The minecraft instance. + */ + public static Minecraft getMcinst() { + if (ModSettings.minecraftInstance != null) { + return ModSettings.minecraftInstance; + } + Field f; + try { + f = Minecraft.class.getDeclaredFields()[1]; + f.setAccessible(true); + Minecraft m = (Minecraft) f.get(null); + if (m != null) { + ModSettings.minecraftInstance = m; + return m; + } + f = Thread.class.getDeclaredField("target"); + f.setAccessible(true); + ThreadGroup group = Thread.currentThread().getThreadGroup(); + int count = group.activeCount(); + Thread[] threads = new Thread[count]; + group.enumerate(threads); + for (int i = 0; i < threads.length; i++) { + if (threads[i].getName().equals("Minecraft main thread")) { + m = (Minecraft) f.get(threads[i]); + if (m != null) { + ModSettings.minecraftInstance = m; + return m; + } + } + } + } catch (Throwable t) { + throw new RuntimeException(t); + } + throw new RuntimeException( + "You are a godless monkey! why are you doing weird things with the innards of minecraft?"); + } + + /** + * Loads all saved settings for a specific context. + * + * @param context + * The context to load from. + */ + public static void loadAll(String context) { + for (int i = 0; i < ModSettings.all.size(); i++) { + ModSettings.all.get(i).load(context); + } + } + + /** + * Set the Minecraft instance that getMcinst returns. + * + * @param m + * The Minecraft Instance. + */ + public static void presetMcint(Minecraft m) { + ModSettings.minecraftInstance = m; + } + + /** + * Sets the context for mods. This means you can specify a context on a per + * world / per server basis, or anything else you would prefer. This will + * carry thoughout all mods. + * + * @param name + * The name reference of the context. + * @param location + * The location that this context stores and loads data from. + */ + public static void setContext(String name, String location) { + if (name != null) { + ModSettings.contextDatadirs.put(name, location); + ModSettings.currentContext = name; + if (!name.equals("")) { + ModSettings.loadAll(ModSettings.currentContext); + } + } else { + ModSettings.currentContext = ""; + } + } + + /** + * Mod name as used in .minecraft/mods/${modbackendname}/ + */ + public String backendname; + /** + * all registered settings for this mod + */ + @SuppressWarnings("rawtypes") + public ArrayList Settings; + /** + * Whether or not Settings have been loaded for this mod. + */ + public boolean settingsLoaded = false; + + /** + * @param modbackendname + * used to initialize class modbackendname field + */ + @SuppressWarnings("rawtypes") + public ModSettings(String modbackendname) { + backendname = modbackendname; + Settings = new ArrayList(); + ModSettings.all.add(this); + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(ModSettingScreen screen, String nicename, + String backendname, boolean value) { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(ModSettingScreen screen, String nicename, + String backendname, boolean value, String truestring, + String falsestring) { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, + falsestring); + screen.append(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(ModSettingScreen screen, String nicename, + String backendname, float value) { + SettingFloat s = new SettingFloat(backendname, value); + WidgetFloat w = new WidgetFloat(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(ModSettingScreen screen, String nicename, + String backendname, float value, float min, float step, float max) { + SettingFloat s = new SettingFloat(backendname, value, min, step, max); + WidgetFloat w = new WidgetFloat(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience key setting adder + */ + public SettingKey addSetting(ModSettingScreen screen, String nicename, + String backendname, int value) { + SettingKey s = new SettingKey(backendname, value); + WidgetKeybinding w = new WidgetKeybinding(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, int min, int max) { + SettingInt s = new SettingInt(backendname, value, min, 1, max); + WidgetInt w = new WidgetInt(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, int min, int step, int max) { + SettingInt s = new SettingInt(backendname, value, min, step, max); + WidgetInt w = new WidgetInt(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience multi setting adder + */ + public SettingMulti addSetting(ModSettingScreen screen, String nicename, + String backendname, int value, String... labels) { + SettingMulti s = new SettingMulti(backendname, value, labels); + WidgetMulti w = new WidgetMulti(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience text setting adder + */ + public SettingText addSetting(ModSettingScreen screen, String nicename, + String backendname, String value) { + SettingText s = new SettingText(backendname, value); + WidgetText w = new WidgetText(s, nicename); + screen.append(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(Widget w2, String nicename, + String backendname, boolean value) { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience boolean setting adder + */ + public SettingBoolean addSetting(Widget w2, String nicename, + String backendname, boolean value, String truestring, + String falsestring) { + SettingBoolean s = new SettingBoolean(backendname, value); + WidgetBoolean w = new WidgetBoolean(s, nicename, truestring, + falsestring); + w2.add(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(Widget w2, String nicename, + String backendname, float value) { + SettingFloat s = new SettingFloat(backendname, value); + WidgetFloat w = new WidgetFloat(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience float setting adder + */ + public SettingFloat addSetting(Widget w2, String nicename, + String backendname, float value, float min, float step, float max) { + SettingFloat s = new SettingFloat(backendname, value, min, step, max); + WidgetFloat w = new WidgetFloat(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience key setting adder + */ + public SettingKey addSetting(Widget w2, String nicename, + String backendname, int value) { + SettingKey s = new SettingKey(backendname, value); + WidgetKeybinding w = new WidgetKeybinding(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(Widget w2, String nicename, + String backendname, int value, int min, int max) { + SettingInt s = new SettingInt(backendname, value, min, 1, max); + WidgetInt w = new WidgetInt(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience int setting adder + */ + public SettingInt addSetting(Widget w2, String nicename, + String backendname, int value, int min, int step, int max) { + SettingInt s = new SettingInt(backendname, value, min, step, max); + WidgetInt w = new WidgetInt(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience multi setting adder + */ + public SettingMulti addSetting(Widget w2, String nicename, + String backendname, int value, String... labels) { + SettingMulti s = new SettingMulti(backendname, value, labels); + WidgetMulti w = new WidgetMulti(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * convenience text setting adder + */ + public SettingText addSetting(Widget w2, String nicename, + String backendname, String value) { + SettingText s = new SettingText(backendname, value); + WidgetText w = new WidgetText(s, nicename); + w2.add(w); + append(s); + return s; + } + + /** + * add a setting to be saved. + * + * @param s + * setting to add - sets s.parent as well, don't add a setting to + * more than one modsettings + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void append(Setting s) { + Settings.add(s); + s.parent = this; + } + + /** + * Copies the saved settings from one context to another. + * + * @param src + * The source context from which to copy. + * @param dest + * The destination context to save to. + */ + public void copyContextAll(String src, String dest) { + for (int i = 0; i < Settings.size(); i++) { + Settings.get(i).copyContext(src, dest); + } + } + + /** + * Get a list of all Boolean settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllBooleanSettings() { + return getAllBooleanSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Boolean settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllBooleanSettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingBoolean) setting); + } + return settings; + } + + /** + * Get a list of all Float settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllFloatSettings() { + return getAllFloatSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Float settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllFloatSettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingFloat.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingFloat) setting); + } + return settings; + } + + /** + * Get a list of all Int settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllIntSettings() { + return getAllIntSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Int settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllIntSettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingInt.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingInt) setting); + } + return settings; + } + + /** + * Get a list of all Key settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllKeySettings() { + return getAllKeySettings(ModSettings.currentContext); + } + + /** + * Get a list of all Key settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllKeySettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingKey.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingKey) setting); + } + return settings; + } + + /** + * Get a list of all Multi settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllMultiSettings() { + return getAllMultiSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Multi settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllMultiSettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingMulti.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingMulti) setting); + } + return settings; + } + + /** + * Get a list of all Text settings for the current context. + * + * @return The list of settings. + */ + public ArrayList getAllTextSettings() { + return getAllTextSettings(ModSettings.currentContext); + } + + /** + * Get a list of all Text settings for the specified context. + * + * @param context + * The context from which to copy from. + * @return The list of settings. + */ + @SuppressWarnings("rawtypes") + public ArrayList getAllTextSettings(String context) { + ArrayList settings = new ArrayList(); + for (Setting setting : Settings) { + if (!SettingText.class.isAssignableFrom(setting.getClass())) { + continue; + } + settings.add((SettingText) setting); + } + return settings; + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The boolean value. + */ + public Boolean getBooleanSettingValue(String backendName) { + return getBooleanSettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The boolean value. + */ + @SuppressWarnings("rawtypes") + public Boolean getBooleanSettingValue(String backendName, String context) { + return getSettingBoolean(backendName).get(context); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Float value. + */ + public Float getFloatSettingValue(String backendName) { + return getFloatSettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Float value. + */ + @SuppressWarnings("rawtypes") + public Float getFloatSettingValue(String backendName, String context) { + return getSettingFloat(backendName).get(context); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Int value. + */ + public Integer getIntSettingValue(String backendName) { + return getIntSettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Int value. + */ + @SuppressWarnings("rawtypes") + public Integer getIntSettingValue(String backendName, String context) { + return getSettingInt(backendName).get(context); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Key value. + */ + public Integer getKeySettingValue(String backendName) { + return getKeySettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Key value. + */ + @SuppressWarnings("rawtypes") + public Integer getKeySettingValue(String backendName, String context) { + return getSettingKey(backendName).get(context); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The text label for the value. + */ + public String getMultiSettingLabel(String backendName) { + return getMultiSettingLabel(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The text label for the value. + */ + @SuppressWarnings("rawtypes") + public String getMultiSettingLabel(String backendName, String context) { + SettingMulti setting = getSettingMulti(backendName); + + return setting.labelValues[setting.get(context)]; + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Multi value. + */ + public Integer getMultiSettingValue(String backendName) { + return getMultiSettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Multi value. + */ + @SuppressWarnings("rawtypes") + public Integer getMultiSettingValue(String backendName, String context) { + return getSettingMulti(backendName).get(context); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingBoolean. + */ + public SettingBoolean getSettingBoolean(String backendName) { + for (Setting setting : Settings) { + if (!SettingBoolean.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingBoolean) setting; + } + } + throw new InvalidParameterException("SettingBoolean '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingFloat. + */ + public SettingFloat getSettingFloat(String backendName) { + for (Setting setting : Settings) { + if (!SettingFloat.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingFloat) setting; + } + } + throw new InvalidParameterException("SettingFloat '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingInt. + */ + public SettingInt getSettingInt(String backendName) { + for (Setting setting : Settings) { + if (!SettingInt.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingInt) setting; + } + } + throw new InvalidParameterException("SettingInt '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingKey. + */ + public SettingKey getSettingKey(String backendName) { + for (Setting setting : Settings) { + if (!SettingKey.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingKey) setting; + } + } + throw new InvalidParameterException("SettingKey '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingList. + */ + public SettingList getSettingList(String backendName) { + for (Setting setting : Settings) { + if (!SettingList.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingList) setting; + } + } + throw new InvalidParameterException("SettingList '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingMulti. + */ + public SettingMulti getSettingMulti(String backendName) { + for (Setting setting : Settings) { + if (!SettingMulti.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingMulti) setting; + } + } + throw new InvalidParameterException("SettingMulti '" + backendName + + "' not found."); + } + + /** + * Gets a setting by backend name. + * + * @param backendName + * The backend name of the setting. + * @return The SettingText. + */ + public SettingText getSettingText(String backendName) { + for (Setting setting : Settings) { + if (!SettingText.class.isAssignableFrom(setting.getClass())) { + continue; + } + if (setting.backendName.equals(backendName)) { + return (SettingText) setting; + } + } + throw new InvalidParameterException("SettingText '" + backendName + + "' not found."); + } + + /** + * Gets the value of a setting by backend name from the current context. + * + * @param backendName + * The backend name of the setting. + * @return The Text value. + */ + public String getTextSettingValue(String backendName) { + return getTextSettingValue(backendName, ModSettings.currentContext); + } + + /** + * Gets the value of a setting by backend name from the specified context. + * + * @param backendName + * The backend name of the setting. + * @param context + * The context from which to copy from. + * @return The Text value. + */ + @SuppressWarnings("rawtypes") + public String getTextSettingValue(String backendName, String context) { + return getSettingText(backendName).get(context); + } + + /** + * Loads the settings for the default context. + */ + public void load() { + load(""); + settingsLoaded = true; + } + + /** + * must be called after all settings are added for loading/saving to work. + * loads from .minecraft/mods/$backendname/guiconfig.properties if it + * exists. coming soon: set name of config file + * + * @param context + * The context to load from. + */ + @SuppressWarnings("rawtypes") + public void load(String context) { + for (;;) { + try { + if (ModSettings.contextDatadirs.get(context) == null) { + break; + } + File path = ModSettings.getAppDir("minecraft/" + + ModSettings.contextDatadirs.get(context) + "/" + + backendname + "/"); + if (!path.exists()) { + break; + } + File file = new File(path, "guiconfig.properties"); + if (!file.exists()) { + break; + } + Properties p = new Properties(); + p.load(new FileInputStream(file)); + for (int i = 0; i < Settings.size(); i++) { + ModSettings.dbgout("setting load"); + Setting z = Settings.get(i); + if (p.containsKey(z.backendName)) { + ModSettings.dbgout("setting " + + (String) p.get(z.backendName)); + z.fromString((String) p.get(z.backendName), context); + } + } + break; + } catch (Exception e) { + System.out.println(e); + break; + } + } + } + + /** + * removes a setting using ArrayList.remove + * + * @param s + * setting to remove + */ + @SuppressWarnings({ "unchecked", "rawtypes" }) + public void remove(Setting s) { + Settings.remove(s); + s.parent = null; + } + + /** + * Resets all settings for the current context. + */ + public void resetAll() { + resetAll(ModSettings.currentContext); + } + + /** + * Resets all settings for the specified context. + * + * @param context + * The context to reset. + */ + public void resetAll(String context) { + for (int i = 0; i < Settings.size(); i++) { + Settings.get(i).reset(context); + } + } + + /** + * called every time a setting is changed saves settings file to + * .minecraft/mods/$backendname/guiconfig.properties coming soon: set name + * of config file + * + * @param context + * The context to save. + */ + @SuppressWarnings("rawtypes") + public void save(String context) { + if (!settingsLoaded) { + return; + } + try { + File path = ModSettings.getAppDir("minecraft/" + + ModSettings.contextDatadirs.get(context) + "/" + + backendname + "/"); + ModSettings.dbgout("saving context " + context + " (" + + path.getAbsolutePath() + " [" + + ModSettings.contextDatadirs.get(context) + "])"); + if (!path.exists()) { + path.mkdirs(); + } + File file = new File(path, "guiconfig.properties"); + Properties p = new Properties(); + for (int i = 0; i < Settings.size(); i++) { + Setting z = Settings.get(i); + p.put(z.backendName, z.toString(context)); + } + FileOutputStream out = new FileOutputStream(file); + p.store(out, ""); + } catch (Exception e) { + e.printStackTrace(); + } + } + + /** + * @return number of settings registered + */ + public int size() { + return Settings.size(); + } } diff --git a/mcp/SettingList.java b/mcp/SettingList.java new file mode 100644 index 0000000..9cefb93 --- /dev/null +++ b/mcp/SettingList.java @@ -0,0 +1,78 @@ +package net.minecraft.src; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Properties; + +/** + * This is the Setting type for a list of strings. It uses the Properties class + * for ease of use. The widget is NOT complete yet since there's no theme for + * ListBox. + * + * @author ShaRose + */ +public class SettingList extends Setting { + + public SettingList(String title) { + this(title, new Properties()); + } + + public SettingList(String title, Properties defaultvalue) { + backendName = title; + defaultValue = defaultvalue; + values.put("", defaultvalue); + } + + @Override + public void fromString(String s, String context) { + Properties prop = new Properties(); + try { + prop.loadFromXML(new ByteArrayInputStream(s.getBytes("UTF-8"))); + } catch (Throwable e) { + ModSettings.dbgout("Error reading SettingList from context '" + + context + "': " + e); + } + values.put(context, prop); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Properties get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(Properties v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + try { + Properties prop = get(context); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + prop.storeToXML(output, "GuiAPI SettingList: DO NOT EDIT."); + return output.toString("UTF-8"); + } catch (IOException e) { + ModSettings.dbgout("Error writing SettingList from context '" + + context + "': " + e); + return ""; + } + } + +} diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/WidgetClassicTwocolumn.java index eeb4d00..f19df7d 100644 --- a/mcp/WidgetClassicTwocolumn.java +++ b/mcp/WidgetClassicTwocolumn.java @@ -20,7 +20,7 @@ public class WidgetClassicTwocolumn extends Widget */ public int childDefaultHeight = 20; /** - * This dictates the width to set each of the widgets to. + * This is the default height to enforce for widgets. */ public int childWidth = 150; /** @@ -38,6 +38,17 @@ public class WidgetClassicTwocolumn extends Widget * override the other. */ public Map heightOverrideExceptions = new HashMap(); + /** + * This is a map to override the width of specific widgets. It is an + * override to childWidth. If you set the Integer as 0, it will use what + * the widget wants as it's width. If it is set negative, it will keep the + * positive part as the minimum size, but if the widget wants to grow it + * can. If you set anything else, it will use that width. Note that with + * TwoColumn widgets it will try and keep the width the same between two + * widgets opposite each other, so the one with the biggest width will + * override the other. + */ + public Map widthOverrideExceptions = new HashMap(); /** * This says whether it should override the height for all widgets. */ @@ -88,11 +99,15 @@ public int getPreferredHeight() if (heightSet < 1) { height = w.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + height = heightSet; } } if (w2 != null) @@ -107,12 +122,16 @@ public int getPreferredHeight() Integer heightSet = heightOverrideExceptions.get(w2); if (heightSet < 1) { - height = w2.getPreferredHeight(); + height = w.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + height = heightSet; } } if (temp > height) @@ -152,6 +171,7 @@ public void layout() // do nothing, just means it's uneven. } int height = childDefaultHeight; + int width = childWidth; if (!overrideHeight) { height = w.getPreferredHeight(); @@ -163,44 +183,93 @@ public void layout() if (heightSet < 1) { height = w.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } + } + else + { + height = heightSet; + } + } + if (widthOverrideExceptions.containsKey(w)) + { + Integer widthSet = widthOverrideExceptions.get(w); + + if (widthSet < 1) + { + width = w.getPreferredWidth(); + widthSet = -widthSet; + if(widthSet != 0 && widthSet > width) + { + width = widthSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + width = widthSet; } } if (w2 != null) { - int temp = height; + int temph = height; + int tempw = width; if (!overrideHeight) { - temp = w2.getPreferredHeight(); + temph = w2.getPreferredHeight(); } if (heightOverrideExceptions.containsKey(w2)) { Integer heightSet = heightOverrideExceptions.get(w2); if (heightSet < 1) { - height = w2.getPreferredHeight(); + height = w.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + height = heightSet; } } - if (temp > height) + if (widthOverrideExceptions.containsKey(w2)) { - height = temp; + Integer widthSet = widthOverrideExceptions.get(w2); + + if (widthSet < 1) + { + width = w2.getPreferredWidth(); + widthSet = -widthSet; + if(widthSet != 0 && widthSet > width) + { + width = widthSet; + } + } + else + { + width = widthSet; + } + } + if (temph > height) + { + height = temph; + } + if (tempw > width) + { + width = tempw; } } - w.setSize(childWidth, height); + w.setSize(width, height); w.setPosition(getX() + getWidth() / 2 - - (childWidth + splitDistance / 2), getY() + totalheight); + - (width + splitDistance / 2), getY() + totalheight); if (w2 != null) { - w2.setSize(childWidth, height); + w2.setSize(width, height); w2.setPosition(getX() + getWidth() / 2 + splitDistance / 2, getY() + totalheight); } diff --git a/mcp/WidgetSinglecolumn.java b/mcp/WidgetSinglecolumn.java index 6370891..2601b9c 100644 --- a/mcp/WidgetSinglecolumn.java +++ b/mcp/WidgetSinglecolumn.java @@ -42,11 +42,15 @@ public int getPreferredHeight() if (heightSet < 1) { height = widget.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + height = heightSet; } } totalheight += height + defaultPadding; @@ -57,7 +61,9 @@ public int getPreferredHeight() @Override public int getPreferredWidth() { - return Math.max(getParent().getWidth(), childWidth); + // I can't see why we do a check here and not on TwoColoumn, and I don't really want to loop widthOverrideExceptions, so let's just remove this particular check, mmkay? + //return Math.max(getParent().getWidth(), childWidth); + return getParent().getWidth(); } @Override @@ -68,6 +74,7 @@ public void layout() { Widget w = getChild(i); int height = childDefaultHeight; + int width = childWidth; if (!overrideHeight) { height = w.getPreferredHeight(); @@ -78,15 +85,37 @@ public void layout() if (heightSet < 1) { height = w.getPreferredHeight(); + heightSet = -heightSet; + if(heightSet != 0 && heightSet > height) + { + height = heightSet; + } } - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) + else { - height = heightSet; + height = heightSet; } } - w.setSize(childWidth, height); - w.setPosition(getX() + getWidth() / 2 - w.getWidth() / 2, getY() + if (widthOverrideExceptions.containsKey(w)) + { + Integer widthSet = widthOverrideExceptions.get(w); + + if (widthSet < 1) + { + width = w.getPreferredWidth(); + widthSet = -widthSet; + if(widthSet != 0 && widthSet > width) + { + width = widthSet; + } + } + else + { + width = widthSet; + } + } + w.setSize(width, height); + w.setPosition(getX() + getWidth() / 2 - width / 2, getY() + totalheight); totalheight += height + defaultPadding; } diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/mod_GuiApiBasicExample.java index 8463f8c..fb3e126 100644 --- a/mcp/mod_GuiApiBasicExample.java +++ b/mcp/mod_GuiApiBasicExample.java @@ -90,15 +90,15 @@ public void ShowAllTheSettings() // context, or a per world context. By default, the context will not // change, but you can specify specific ones if you want). You can // specify one as an argument if you want as well. - displayTextBuilder.append(mySettings.getIntSetting("backendIntA")); + displayTextBuilder.append(mySettings.getIntSettingValue("backendIntA")); displayTextBuilder.append("\r\n\r\n"); displayTextBuilder.append("Float B: "); // Now Float B. - displayTextBuilder.append(mySettings.getFloatSetting("backendFloatB")); + displayTextBuilder.append(mySettings.getFloatSettingValue("backendFloatB")); displayTextBuilder.append("\r\n\r\n"); displayTextBuilder.append("Multi C: "); // Now Multi C, as an int which you can use in your code. - displayTextBuilder.append(mySettings.getMultiSetting("backendMultiC")); + displayTextBuilder.append(mySettings.getMultiSettingValue("backendMultiC")); displayTextBuilder.append("\r\n\r\n"); displayTextBuilder.append("Multi C (Displayed): "); // Now Multi C, as the displayed string on the menu. @@ -108,17 +108,17 @@ public void ShowAllTheSettings() displayTextBuilder.append("Boolean D: "); // Now Boolean D. displayTextBuilder.append(mySettings - .getBooleanSetting("backendBooleanD")); + .getBooleanSettingValue("backendBooleanD")); displayTextBuilder.append("\r\n\r\n"); displayTextBuilder.append("Boolean E: "); // Now Boolean E. Note that it is not any different whether you // specified display names or not. displayTextBuilder.append(mySettings - .getBooleanSetting("backendBooleanE")); + .getBooleanSettingValue("backendBooleanE")); displayTextBuilder.append("\r\n\r\n"); displayTextBuilder.append("Text F: "); // Now String F. - displayTextBuilder.append(mySettings.getTextSetting("backendTextF")); + displayTextBuilder.append(mySettings.getTextSettingValue("backendTextF")); // Display your menu. It will have a title bar that says 'My Current // Settings', will use all the text you just created using the // StringBuilder and the settings helpers in a long textbox, and at the From a8c892bc516b9326e51042313286961190b5a53a Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sun, 25 Sep 2011 05:08:21 -0230 Subject: [PATCH 17/49] Updated the theme to support more widgets, as well as hopefully fixing a bug where if a button was disabled and you rolled over it it would stay highlighted. Added TextArea.Callback support to ModAction, so you can use the href tag more effectively. Example of use forthcoming. Minor reformats (Getting rid of a few redundant else clauses). --- mcp/GuiApiHelper.java | 727 +++++++++++++++----------------- mcp/GuiWidgetScreen.java | 268 ++++++------ mcp/ModAction.java | 25 +- mcp/mod_GuiApiBasicExample.java | 255 +++++------ theme/twlGuiTheme.xml | 65 ++- 5 files changed, 679 insertions(+), 661 deletions(-) diff --git a/mcp/GuiApiHelper.java b/mcp/GuiApiHelper.java index d6bf06d..aef3c2c 100644 --- a/mcp/GuiApiHelper.java +++ b/mcp/GuiApiHelper.java @@ -11,390 +11,357 @@ import de.matthiasmann.twl.textarea.SimpleTextAreaModel; import de.matthiasmann.twl.textarea.TextAreaModel; - /** * This is just a class for helping ease common and somewhat long operations * with GuiAPI. * * @author ShaRose */ -public class GuiApiHelper -{ - /** - * This is a static ModAction to go back to the previous menu. - */ - public final static ModAction backModAction; - /** - * This is a static ModAction to play the 'click' sound you usually hear - * when pressing a button in minecraft. - */ - public final static ModAction clickModAction; - static - { - backModAction = new ModAction(GuiModScreen.class, "back"); - GuiApiHelper.backModAction.setTag("Helper Back ModAction"); - clickModAction = new ModAction(GuiModScreen.class, "clicksound"); - GuiApiHelper.clickModAction.setTag("Helper ClickSound ModAction"); - } - - /** - * This method is one of the overloads to create a choice menu, so the user - * is presented a textbox and user configurable buttons beneath it. This - * overload is the most advanced option, though uses more code. Call this - * method, use the returned GuiApiHelper instance to add the buttons you - * want, then generate the widget. - * - * @param displayText - * The text to be displayed to the user. - * @return An instance of GuiApiHelper. Use the addButton methods to add - * buttons to the menu, and then when you are done use genWidget to - * create the choice menu. - */ - public static GuiApiHelper createChoiceMenu(String displayText) - { - return new GuiApiHelper(displayText); - } - - /** - * This method is one of the overloads to create a choice menu, so the user - * is presented a textbox and user configurable buttons beneath it. This - * overload uses variable arguments to choose it. - * - * @param displayText - * The text to display. - * @param showBackButton - * Whether to automatically show a 'back' button or not. - * @param autoBack - * Whether to automatically merge a 'back' ModAction with the - * buttons. - * @param args - * The button information. Enter it in the form of String (Name - * on the button), ModAction (The ModAction to call when the - * button is pressed). - * @return The generated widget. Use GuiModScreen.show to display it. - */ - public static Widget createChoiceMenu(String displayText, - Boolean showBackButton, Boolean autoBack, Object... args) - { - if (args.length % 2 == 1) - { - throw new IllegalArgumentException( - "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button."); - } - GuiApiHelper helper = new GuiApiHelper(displayText); - try - { - for (int i = 0; i < args.length; i += 2) - { - helper.addButton((String) args[i], (ModAction) args[i + 1], - autoBack); - } - } - catch (Throwable e) - { - throw new IllegalArgumentException( - "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button.", - e); - } - return helper.genWidget(showBackButton); - } - - /** - * This method is one of the overloads to create a choice menu, so the user - * is presented a textbox and user configurable buttons beneath it. This - * overload uses two tables that match up to create the buttons. - * - * @param displayText - * The text to display. - * @param showBackButton - * Whether to automatically show a 'back' button or not. - * @param autoBack - * Whether to automatically merge a 'back' ModAction with the - * buttons. - * @param buttonTexts - * The text for the buttons you want to show. - * @param buttonActions - * The corresponding ModActions for the buttons. - * @return The generated widget. Use GuiModScreen.show to display it. - */ - public static Widget createChoiceMenu(String displayText, - Boolean showBackButton, Boolean autoBack, String[] buttonTexts, - ModAction[] buttonActions) - { - if (buttonTexts.length != buttonActions.length) - { - throw new IllegalArgumentException( - "Arguments not in correct format. buttonTexts needs to be the same size as buttonActions."); - } - GuiApiHelper helper = new GuiApiHelper(displayText); - for (int i = 0; i < buttonTexts.length; i += 2) - { - helper.addButton(buttonTexts[i], buttonActions[i], autoBack); - } - return helper.genWidget(showBackButton); - } - - /** - * This method creates a button widget for you. - * - * @param displayText - * The text to display on the button. - * @param action - * The ModAction to call when clicked. - * @param addClick - * Set this to true and it will automatically play the Click - * sound. - * @return The new Button widget. - */ - public static Button makeButton(String displayText, ModAction action, - Boolean addClick) - { - SimpleButtonModel simplebuttonmodel = new SimpleButtonModel(); - if (addClick) - { - action = action.mergeAction(GuiApiHelper.clickModAction); - } - simplebuttonmodel.addActionCallback(action); - Button button = new Button(simplebuttonmodel); - button.setText(displayText); - return button; - } - - /** - * This method creates a button widget for you. - * - * @param displayText - * The text to display on the button. - * @param methodName - * The name of the method to call when clicked. - * @param me - * The Object or Class that has the method you want to call. - * @param addClick - * Set this to true and it will automatically play the Click - * sound. - * @return The new Button widget. - */ - public static Button makeButton(String displayText, String methodName, - Object me, Boolean addClick) - { - return GuiApiHelper.makeButton(displayText, new ModAction(me, - methodName), addClick); - } - - /** - * This method creates a button widget for you. - * - * @param displayText - * The text to display on the button. - * @param methodName - * The name of the method to call when clicked. - * @param me - * The Object or Class that has the method you want to call. - * @param addClick - * Set this to true and it will automatically play the Click - * sound. - * @param classes - * The argument classes for the method you want to call. - * @param arguments - * The defaulted arguments you want to use. - * @return The new Button widget. - */ - @SuppressWarnings("rawtypes") - public static Button makeButton(String displayText, String methodName, - Object me, Boolean addClick, Class[] classes, Object... arguments) - { - return GuiApiHelper.makeButton(displayText, new ModAction(me, - methodName, classes).setDefaultArguments(arguments), addClick); - } - - /** - * This is a small helper to create TextAreas, which is basically a label - * that wraps text. - * - * @param text - * The text to show. - * @param htmlMode - * Whether to create the Textbox to render HTML, or standard - * text. - * @return The TextArea widget. - */ - public static TextArea makeTextArea(String text, Boolean htmlMode) - { - if (!htmlMode) - { - SimpleTextAreaModel model = new SimpleTextAreaModel(); - model.setText(text, false); - return new TextArea(model); - } - else - { - HTMLTextAreaModel model = new HTMLTextAreaModel(); - model.setHtml(text); - return new TextArea(model); - } - } - - /** - * This is a small helper method to set the text of a TextArea. It supposed - * Simple and HTML TextAreas. - * - * @param textArea - * The TextArea you wish to set the text of. - * @param text - * The text to set. - */ - public static void setTextAreaText(TextArea textArea, String text) - { - TextAreaModel model = textArea.getModel(); - if (model instanceof SimpleTextAreaModel) - { - ((SimpleTextAreaModel) model).setText(text, false); - } - else - { - ((HTMLTextAreaModel) model).setHtml(text); - } - } - - /** - * This method is designed to provide an easy way to make popups or - * information notices. - * - * @param titleText - * This is the text for the title on top of the display. If you - * set this to null, it will simply not have a top bar. - * @param displayText - * This is the text to be displayed below the title bar (If there - * is one). - * @param buttonText - * This is the text you want the back button to have. Something - * like 'OK' or 'Back' is what you usually use. - * @param htmlMode - * This is if you want the text to be rendered as if it were - * HTML. - * @return The generated widget. Use GuiModScreen.show to display it. - */ - public static Widget makeTextDisplayAndGoBack(String titleText, - String displayText, String buttonText, Boolean htmlMode) - { - WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); - widget.add(GuiApiHelper.makeTextArea(displayText, htmlMode)); - widget.overrideHeight = false; - WidgetSimplewindow window = new WidgetSimplewindow(widget, titleText); - window.backButton.setText(buttonText); - return window; - } - - /** The button info. */ - private ArrayList> buttonInfo_; - - /** The display text. */ - private String displayText_; - - /** - * Instantiates a new gui api helper. - * - * @param displayText the display text - */ - private GuiApiHelper(String displayText) - { - displayText_ = displayText; - buttonInfo_ = new ArrayList>(); - } - - /** - * This method adds a button to the choice menu. The arguments are the same - * as the related makeButton method. - * - * @param text - * The text for the button. - * @param action - * The action to use when pressed. - * @param mergeBack - * Whether or not to automatically to back after the button is - * pressed. - */ - public void addButton(String text, ModAction action, Boolean mergeBack) - { - ModAction buttonAction = action; - if (mergeBack) - { - buttonAction = buttonAction.mergeAction(GuiApiHelper.backModAction); - buttonAction.setTag("Button '" + text + "' with back."); - } - buttonInfo_.add(new AbstractMap.SimpleEntry(text, - buttonAction)); - } - - /** - * This method adds a button to the choice menu. The arguments are the same - * as the related makeButton method. - * - * @param text - * The text for the button. - * @param methodName - * The method to call. - * @param me - * The object or class with the method you wish to call. - * @param mergeBack - * Whether or not to automatically to back after the button is - * pressed. - */ - public void addButton(String text, String methodName, Object me, - Boolean mergeBack) - { - addButton(text, new ModAction(me, methodName), mergeBack); - } - - /** - * This method adds a button to the choice menu. The arguments are the same - * as the related makeButton method. - * - * @param text - * The text for the button. - * @param methodName - * The method to call. - * @param me - * The object or class with the method you wish to call. - * @param types - * The types of the arguments required for the method. - * @param mergeBack - * Whether or not to automatically to back after the button is - * pressed. - * @param arguments - * The arguments you wish to use when this button is pressed. - */ - @SuppressWarnings("rawtypes") - public void addButton(String text, String methodName, Object me, - Class[] types, Boolean mergeBack, Object... arguments) - { - addButton(text, - new ModAction(me, methodName, types) - .setDefaultArguments(arguments), mergeBack); - } - - /** - * This creates the Choice Menu from the Display Text entered earlier and - * the buttons you have added. - * - * @param showBackButton - * If true, show a bar on the bottom with a button to go back to - * the previous menu. If false, don't. - * @return The generated widget. Use GuiModScreen.show to display it. - */ - public Widget genWidget(Boolean showBackButton) - { - WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); - TextArea textarea = GuiApiHelper.makeTextArea(displayText_, false); - widget.add(textarea); - widget.heightOverrideExceptions.put(textarea, 0); - for (AbstractMap.SimpleEntry entry : buttonInfo_) - { - widget.add(GuiApiHelper.makeButton(entry.getKey(), - entry.getValue(), true)); - } - WidgetSimplewindow window = new WidgetSimplewindow(widget, null, - showBackButton); - return window; - } +public class GuiApiHelper { + /** + * This is a static ModAction to go back to the previous menu. + */ + public final static ModAction backModAction; + /** + * This is a static ModAction to play the 'click' sound you usually hear + * when pressing a button in minecraft. + */ + public final static ModAction clickModAction; + static { + backModAction = new ModAction(GuiModScreen.class, "back"); + GuiApiHelper.backModAction.setTag("Helper Back ModAction"); + clickModAction = new ModAction(GuiModScreen.class, "clicksound"); + GuiApiHelper.clickModAction.setTag("Helper ClickSound ModAction"); + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload is the most advanced option, though uses more code. Call this + * method, use the returned GuiApiHelper instance to add the buttons you + * want, then generate the widget. + * + * @param displayText + * The text to be displayed to the user. + * @return An instance of GuiApiHelper. Use the addButton methods to add + * buttons to the menu, and then when you are done use genWidget to + * create the choice menu. + */ + public static GuiApiHelper createChoiceMenu(String displayText) { + return new GuiApiHelper(displayText); + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload uses variable arguments to choose it. + * + * @param displayText + * The text to display. + * @param showBackButton + * Whether to automatically show a 'back' button or not. + * @param autoBack + * Whether to automatically merge a 'back' ModAction with the + * buttons. + * @param args + * The button information. Enter it in the form of String (Name + * on the button), ModAction (The ModAction to call when the + * button is pressed). + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget createChoiceMenu(String displayText, + Boolean showBackButton, Boolean autoBack, Object... args) { + if ((args.length % 2) == 1) { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + try { + for (int i = 0; i < args.length; i += 2) { + helper.addButton((String) args[i], (ModAction) args[i + 1], + autoBack); + } + } catch (Throwable e) { + throw new IllegalArgumentException( + "Arguments not in correct format. You need to have an even number of arguments, in the form of String, ModAction for each button.", + e); + } + return helper.genWidget(showBackButton); + } + + /** + * This method is one of the overloads to create a choice menu, so the user + * is presented a textbox and user configurable buttons beneath it. This + * overload uses two tables that match up to create the buttons. + * + * @param displayText + * The text to display. + * @param showBackButton + * Whether to automatically show a 'back' button or not. + * @param autoBack + * Whether to automatically merge a 'back' ModAction with the + * buttons. + * @param buttonTexts + * The text for the buttons you want to show. + * @param buttonActions + * The corresponding ModActions for the buttons. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget createChoiceMenu(String displayText, + Boolean showBackButton, Boolean autoBack, String[] buttonTexts, + ModAction[] buttonActions) { + if (buttonTexts.length != buttonActions.length) { + throw new IllegalArgumentException( + "Arguments not in correct format. buttonTexts needs to be the same size as buttonActions."); + } + GuiApiHelper helper = new GuiApiHelper(displayText); + for (int i = 0; i < buttonTexts.length; i += 2) { + helper.addButton(buttonTexts[i], buttonActions[i], autoBack); + } + return helper.genWidget(showBackButton); + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param action + * The ModAction to call when clicked. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @return The new Button widget. + */ + public static Button makeButton(String displayText, ModAction action, + Boolean addClick) { + SimpleButtonModel simplebuttonmodel = new SimpleButtonModel(); + if (addClick) { + action = action.mergeAction(GuiApiHelper.clickModAction); + } + simplebuttonmodel.addActionCallback(action); + Button button = new Button(simplebuttonmodel); + button.setText(displayText); + return button; + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param methodName + * The name of the method to call when clicked. + * @param me + * The Object or Class that has the method you want to call. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @return The new Button widget. + */ + public static Button makeButton(String displayText, String methodName, + Object me, Boolean addClick) { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName), addClick); + } + + /** + * This method creates a button widget for you. + * + * @param displayText + * The text to display on the button. + * @param methodName + * The name of the method to call when clicked. + * @param me + * The Object or Class that has the method you want to call. + * @param addClick + * Set this to true and it will automatically play the Click + * sound. + * @param classes + * The argument classes for the method you want to call. + * @param arguments + * The defaulted arguments you want to use. + * @return The new Button widget. + */ + @SuppressWarnings("rawtypes") + public static Button makeButton(String displayText, String methodName, + Object me, Boolean addClick, Class[] classes, Object... arguments) { + return GuiApiHelper.makeButton(displayText, new ModAction(me, + methodName, classes).setDefaultArguments(arguments), addClick); + } + + /** + * This is a small helper to create TextAreas, which is basically a label + * that wraps text. + * + * @param text + * The text to show. + * @param htmlMode + * Whether to create the Textbox to render HTML, or standard + * text. + * @return The TextArea widget. + */ + public static TextArea makeTextArea(String text, Boolean htmlMode) { + if (!htmlMode) { + SimpleTextAreaModel model = new SimpleTextAreaModel(); + model.setText(text, false); + return new TextArea(model); + } + HTMLTextAreaModel model = new HTMLTextAreaModel(); + model.setHtml(text); + return new TextArea(model); + } + + /** + * This method is designed to provide an easy way to make popups or + * information notices. + * + * @param titleText + * This is the text for the title on top of the display. If you + * set this to null, it will simply not have a top bar. + * @param displayText + * This is the text to be displayed below the title bar (If there + * is one). + * @param buttonText + * This is the text you want the back button to have. Something + * like 'OK' or 'Back' is what you usually use. + * @param htmlMode + * This is if you want the text to be rendered as if it were + * HTML. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public static Widget makeTextDisplayAndGoBack(String titleText, + String displayText, String buttonText, Boolean htmlMode) { + WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); + widget.add(GuiApiHelper.makeTextArea(displayText, htmlMode)); + widget.overrideHeight = false; + WidgetSimplewindow window = new WidgetSimplewindow(widget, titleText); + window.backButton.setText(buttonText); + return window; + } + + /** + * This is a small helper method to set the text of a TextArea. It supposed + * Simple and HTML TextAreas. + * + * @param textArea + * The TextArea you wish to set the text of. + * @param text + * The text to set. + */ + public static void setTextAreaText(TextArea textArea, String text) { + TextAreaModel model = textArea.getModel(); + if (model instanceof SimpleTextAreaModel) { + ((SimpleTextAreaModel) model).setText(text, false); + } else { + ((HTMLTextAreaModel) model).setHtml(text); + } + } + + /** The button info. */ + private ArrayList> buttonInfo_; + + /** The display text. */ + private String displayText_; + + /** + * Instantiates a new gui api helper. + * + * @param displayText + * the display text + */ + private GuiApiHelper(String displayText) { + displayText_ = displayText; + buttonInfo_ = new ArrayList>(); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param action + * The action to use when pressed. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + */ + public void addButton(String text, ModAction action, Boolean mergeBack) { + ModAction buttonAction = action; + if (mergeBack) { + buttonAction = buttonAction.mergeAction(GuiApiHelper.backModAction); + buttonAction.setTag("Button '" + text + "' with back."); + } + buttonInfo_.add(new AbstractMap.SimpleEntry(text, + buttonAction)); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param methodName + * The method to call. + * @param me + * The object or class with the method you wish to call. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + */ + public void addButton(String text, String methodName, Object me, + Boolean mergeBack) { + addButton(text, new ModAction(me, methodName), mergeBack); + } + + /** + * This method adds a button to the choice menu. The arguments are the same + * as the related makeButton method. + * + * @param text + * The text for the button. + * @param methodName + * The method to call. + * @param me + * The object or class with the method you wish to call. + * @param types + * The types of the arguments required for the method. + * @param mergeBack + * Whether or not to automatically to back after the button is + * pressed. + * @param arguments + * The arguments you wish to use when this button is pressed. + */ + @SuppressWarnings("rawtypes") + public void addButton(String text, String methodName, Object me, + Class[] types, Boolean mergeBack, Object... arguments) { + addButton(text, + new ModAction(me, methodName, types) + .setDefaultArguments(arguments), mergeBack); + } + + /** + * This creates the Choice Menu from the Display Text entered earlier and + * the buttons you have added. + * + * @param showBackButton + * If true, show a bar on the bottom with a button to go back to + * the previous menu. If false, don't. + * @return The generated widget. Use GuiModScreen.show to display it. + */ + public Widget genWidget(Boolean showBackButton) { + WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); + TextArea textarea = GuiApiHelper.makeTextArea(displayText_, false); + widget.add(textarea); + widget.heightOverrideExceptions.put(textarea, 0); + for (AbstractMap.SimpleEntry entry : buttonInfo_) { + widget.add(GuiApiHelper.makeButton(entry.getKey(), + entry.getValue(), true)); + } + WidgetSimplewindow window = new WidgetSimplewindow(widget, null, + showBackButton); + return window; + } } diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 3178647..8d76ac2 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -7,153 +7,135 @@ import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; import de.matthiasmann.twl.theme.ThemeManager; - /** * TWL Widget that switches out child widgets. the Minecraft gui end and twl * rendering is managed from GuiModScreen. * * @author lahwran */ -public class GuiWidgetScreen extends Widget -{ - /** - * The initialized instance of GuiWidgetScreen. - */ - public static GuiWidgetScreen instance; - /** - * The height of the screen that the widget will render on. - */ - public static int screenheight; - /** - * The width of the screen that the widget will render on. - */ - public static int screenwidth; - - /** - * get the instance of GuiWidget, creating it if needed - * - * @return GuiWidgetScreen singleton - */ - public static GuiWidgetScreen getInstance() - { - if (GuiWidgetScreen.instance != null) - { - return GuiWidgetScreen.instance; - } - else - { - try - { - GuiWidgetScreen.instance = new GuiWidgetScreen(); - GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); - String themename = "twlGuiTheme.xml"; - GuiWidgetScreen.instance.gui = new GUI( - GuiWidgetScreen.instance, - GuiWidgetScreen.instance.renderer, new LWJGLInput()); - ModSettings.dbgout(GuiWidgetScreen.class.getClassLoader() - .getResource(themename).toString()); - GuiWidgetScreen.instance.theme = ThemeManager - .createThemeManager(GuiWidgetScreen.class - .getClassLoader().getResource(themename), - GuiWidgetScreen.instance.renderer); - if (GuiWidgetScreen.instance.theme == null) - { - throw new RuntimeException( - "I don't think you installed the theme correctly ..."); - } - GuiWidgetScreen.instance.setTheme(""); - GuiWidgetScreen.instance.gui - .applyTheme(GuiWidgetScreen.instance.theme); - GuiWidgetScreen.instance.minecraftInstance = ModSettings - .getMcinst(); - GuiWidgetScreen.instance.screenSize = new ScaledResolution( - GuiWidgetScreen.instance.minecraftInstance.gameSettings, - GuiWidgetScreen.instance.minecraftInstance.displayWidth, - GuiWidgetScreen.instance.minecraftInstance.displayHeight); - } - catch (Throwable e) - { - e.printStackTrace(); - RuntimeException e2 = new RuntimeException( - "error loading theme"); - e2.initCause(e); - throw e2; - } - return GuiWidgetScreen.instance; - } - } - - /** - * The widget that is currently displayed. - */ - public Widget currentWidget = null; - /** - * This is a reference to a TWL class that is used to render the widgets. - */ - public GUI gui = null; - /** - * This is a reference to Minecraft. - */ - public Minecraft minecraftInstance; - /** - * This is the rendered used by TWL. - */ - public LWJGLRenderer renderer = null; - /** - * This is the ScaledResolution class that is used to scale all of the - * widgets. - */ - public ScaledResolution screenSize = null; - /** - * This the the ThemeManager for GuiAPI. - */ - public ThemeManager theme = null; - - /** - * This creates a new instance of GuiWidgetScreen. It should only be used - * internally. Please use the static method getInstance() instead. - */ - public GuiWidgetScreen() - {} - - @Override - public void layout() - { - screenSize = new ScaledResolution(minecraftInstance.gameSettings, - minecraftInstance.displayWidth, minecraftInstance.displayHeight); - if (currentWidget != null) - { - GuiWidgetScreen.screenwidth = screenSize.getScaledWidth(); - GuiWidgetScreen.screenheight = screenSize.getScaledHeight(); - currentWidget.setSize(GuiWidgetScreen.screenwidth, - GuiWidgetScreen.screenheight); - currentWidget.setPosition(0, 0); - } - } - - /** - * Removes all children and clears the current widget. - */ - public void resetScreen() - { - removeAllChildren(); - currentWidget = null; - } - - /** - * to be called only from GuiModScreen, sets the widget to display. - * GuiModScreen manages this. - * - * @param widget - * widget to display - */ - public void setScreen(Widget widget) - { - gui.resyncTimerAfterPause(); - gui.clearKeyboardState(); - gui.clearMouseState(); - removeAllChildren(); - add(widget); - currentWidget = widget; - } +public class GuiWidgetScreen extends Widget { + /** + * The initialized instance of GuiWidgetScreen. + */ + public static GuiWidgetScreen instance; + /** + * The height of the screen that the widget will render on. + */ + public static int screenheight; + /** + * The width of the screen that the widget will render on. + */ + public static int screenwidth; + + /** + * get the instance of GuiWidget, creating it if needed + * + * @return GuiWidgetScreen singleton + */ + public static GuiWidgetScreen getInstance() { + if (GuiWidgetScreen.instance != null) { + return GuiWidgetScreen.instance; + } + try { + GuiWidgetScreen.instance = new GuiWidgetScreen(); + GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); + String themename = "twlGuiTheme.xml"; + GuiWidgetScreen.instance.gui = new GUI(GuiWidgetScreen.instance, + GuiWidgetScreen.instance.renderer, new LWJGLInput()); + ModSettings.dbgout(GuiWidgetScreen.class.getClassLoader() + .getResource(themename).toString()); + GuiWidgetScreen.instance.theme = ThemeManager.createThemeManager( + GuiWidgetScreen.class.getClassLoader().getResource( + themename), GuiWidgetScreen.instance.renderer); + if (GuiWidgetScreen.instance.theme == null) { + throw new RuntimeException( + "I don't think you installed the theme correctly ..."); + } + GuiWidgetScreen.instance.setTheme(""); + GuiWidgetScreen.instance.gui + .applyTheme(GuiWidgetScreen.instance.theme); + GuiWidgetScreen.instance.minecraftInstance = ModSettings + .getMcinst(); + GuiWidgetScreen.instance.screenSize = new ScaledResolution( + GuiWidgetScreen.instance.minecraftInstance.gameSettings, + GuiWidgetScreen.instance.minecraftInstance.displayWidth, + GuiWidgetScreen.instance.minecraftInstance.displayHeight); + } catch (Throwable e) { + e.printStackTrace(); + RuntimeException e2 = new RuntimeException("error loading theme"); + e2.initCause(e); + throw e2; + } + return GuiWidgetScreen.instance; + } + + /** + * The widget that is currently displayed. + */ + public Widget currentWidget = null; + /** + * This is a reference to a TWL class that is used to render the widgets. + */ + public GUI gui = null; + /** + * This is a reference to Minecraft. + */ + public Minecraft minecraftInstance; + /** + * This is the rendered used by TWL. + */ + public LWJGLRenderer renderer = null; + /** + * This is the ScaledResolution class that is used to scale all of the + * widgets. + */ + public ScaledResolution screenSize = null; + /** + * This the the ThemeManager for GuiAPI. + */ + public ThemeManager theme = null; + + /** + * This creates a new instance of GuiWidgetScreen. It should only be used + * internally. Please use the static method getInstance() instead. + */ + public GuiWidgetScreen() { + } + + @Override + public void layout() { + screenSize = new ScaledResolution(minecraftInstance.gameSettings, + minecraftInstance.displayWidth, minecraftInstance.displayHeight); + if (currentWidget != null) { + GuiWidgetScreen.screenwidth = screenSize.getScaledWidth(); + GuiWidgetScreen.screenheight = screenSize.getScaledHeight(); + currentWidget.setSize(GuiWidgetScreen.screenwidth, + GuiWidgetScreen.screenheight); + currentWidget.setPosition(0, 0); + } + } + + /** + * Removes all children and clears the current widget. + */ + public void resetScreen() { + removeAllChildren(); + currentWidget = null; + } + + /** + * to be called only from GuiModScreen, sets the widget to display. + * GuiModScreen manages this. + * + * @param widget + * widget to display + */ + public void setScreen(Widget widget) { + gui.resyncTimerAfterPause(); + gui.clearKeyboardState(); + gui.clearMouseState(); + removeAllChildren(); + add(widget); + currentWidget = widget; + } } diff --git a/mcp/ModAction.java b/mcp/ModAction.java index d61ffcc..c052c5e 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -6,6 +6,8 @@ import java.security.InvalidParameterException; import java.util.ArrayList; +import de.matthiasmann.twl.TextArea; + /** * This class is a helper designed to make it easier to use callbacks. It * implements Runnable and PropertyChangeListener, and you can use it in several @@ -15,7 +17,8 @@ * @author ShaRose */ @SuppressWarnings("rawtypes") -public class ModAction implements Runnable, PropertyChangeListener { +public class ModAction implements Runnable, PropertyChangeListener, + TextArea.Callback { @SuppressWarnings("unchecked") private static Boolean checkArguments(Class[] classTypes, Object[] arguments) { if (classTypes.length != arguments.length) { @@ -129,7 +132,8 @@ private Object callInternal(Object... args) throws Exception { } } - private Method getMethodRecursively(Object o, String method) throws Exception { + private Method getMethodRecursively(Object o, String method) + throws Exception { Class currentclass = (o instanceof Class ? (Class) o : o .getClass()); while (true) { @@ -161,6 +165,23 @@ public Object getTag() { return tag; } + @Override + public void handleLinkClicked(String link) { + if ((methodParams.length != 1) || (methodParams[0] != String.class)) { + throw new RuntimeException( + "invalid method parameters for a TextArea.Callback callback. Modaction is '" + + getTag() + "'."); + } + try { + call(link); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling TextArea.Callback callback. Modaction is '" + + getTag() + "'.", e); + } + } + /** * Merge[s] newAction[s] with this action. * diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/mod_GuiApiBasicExample.java index fb3e126..02927f8 100644 --- a/mcp/mod_GuiApiBasicExample.java +++ b/mcp/mod_GuiApiBasicExample.java @@ -10,131 +10,132 @@ * * @author ShaRose */ -public class mod_GuiApiBasicExample extends BaseMod -{ - /** The mod screen. */ - public ModSettingScreen myModScreen; - /** The settings. */ - public ModSettings mySettings; - - /** - * Instantiates a new mod_GuiApiBasicExample. - */ - public mod_GuiApiBasicExample() - { - // First, create the settings class. The string in question is the - // 'backend' name, usually the actual mod class name. - mySettings = new ModSettings("mod_GuiApiBasicExample"); - // This is the Mod screen. It will automatically register the button in - // the settings menu. This is two seperate steps, because you don't HAVE - // to have this step there, like if you only want to store the settings - // without a user-accessible gui. - // Since we are adding one with longish names, we are going to make this - // in single column mode. - myModScreen = new ModSettingScreen("GuiAPI Basic Example"); - // If you want to leave it in two column mode, you don't need this part. - // Now let's add a few settings. Since we are doing it in 'easy' mode, - // we'll just discard the return values in this case. - myModScreen.setSingleColumn(true); - // default is 5, min is 1, max is 10 - mySettings.addSetting(myModScreen, "Nice Name for Int A", - "backendIntA", 5, 1, 10); - // default is 0.5, min is 0.1, step is 0.01, max is 1.0. - mySettings.addSetting(myModScreen, "Nice Name for Float B", - "backendFloatB", 0.5f, 0.1f, 0.01f, 1.0f); - // Multi options, default at 'Option A', go between Option A-F - mySettings.addSetting(myModScreen, "Nice Name for Multi C", - "backendMultiC", 0, "Option A", "Option B", "Option C", - "Option D", "Option E", "Option F"); - // boolean, default at true - mySettings.addSetting(myModScreen, "Nice Name for Boolean D", - "backendBooleanD", true); - // boolean, default at true, with custom names - mySettings.addSetting(myModScreen, "Nice Name for Boolean E", - "backendBooleanE", false, "Yes!", "Noo!"); - // Text setting - mySettings.addSetting(myModScreen, "Nice Name for Text F", - "backendTextF", "This is the Default Value"); - // This makes a button which will call the 'ShowAllTheSettings' method - // below. If the method in question is a static method, please use the - // class. For example, mod_GuiAPIBasicExample.class instead of this. - // Note you don't have to use this either, it can be any object, and the - // method does not need to be public, as this can and will call private - // methods as well. The boolean at the end controls whether or not to - // automatically add the click sound. Use false if you want it to be - // silent, or if you want to call it manually with GuiModScreen.back() - myModScreen.append(GuiApiHelper.makeButton("Display all my settings!", - "ShowAllTheSettings", this, true)); - // We'll also add a button to reset all of the settings to default. You - // can do this on a per setting basis as well, but we'll learn that in - // the Intermediate example mod. As well, you can see that I am calling - // mySettings.resetAll() with this button, and it will click. - myModScreen.append(GuiApiHelper.makeButton("Default all my settings!", - "resetAll", mySettings, true)); - // And finally, don't forget to load any settings you saved earlier! - mySettings.load(); - } - - /** - * This is the method that will be called if you press the - * "Display Settings" button. It doesn't have to be public, so you can make - * this private and it will work. However, since we are calling this from a - * button, it needs to return void. - */ - public void ShowAllTheSettings() - { - StringBuilder displayTextBuilder = new StringBuilder(); - displayTextBuilder.append("Int A: "); - // this finds the setting by backend name. It makes sure that it is an - // int type, and gets the value of the current context (like a global - // context, or a per world context. By default, the context will not - // change, but you can specify specific ones if you want). You can - // specify one as an argument if you want as well. - displayTextBuilder.append(mySettings.getIntSettingValue("backendIntA")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Float B: "); - // Now Float B. - displayTextBuilder.append(mySettings.getFloatSettingValue("backendFloatB")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Multi C: "); - // Now Multi C, as an int which you can use in your code. - displayTextBuilder.append(mySettings.getMultiSettingValue("backendMultiC")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Multi C (Displayed): "); - // Now Multi C, as the displayed string on the menu. - displayTextBuilder.append(mySettings - .getMultiSettingLabel("backendMultiC")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Boolean D: "); - // Now Boolean D. - displayTextBuilder.append(mySettings - .getBooleanSettingValue("backendBooleanD")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Boolean E: "); - // Now Boolean E. Note that it is not any different whether you - // specified display names or not. - displayTextBuilder.append(mySettings - .getBooleanSettingValue("backendBooleanE")); - displayTextBuilder.append("\r\n\r\n"); - displayTextBuilder.append("Text F: "); - // Now String F. - displayTextBuilder.append(mySettings.getTextSettingValue("backendTextF")); - // Display your menu. It will have a title bar that says 'My Current - // Settings', will use all the text you just created using the - // StringBuilder and the settings helpers in a long textbox, and at the - // bottom will have a button that says 'OK, Go back to the settings - // now.' which, when pressed, will just go back to the last menu. In - // this case, your settings menu. It automatically sets up a scrollbar - // for you as well. Of course, we also call GuiModScreen.show to display - // the widget that makeTextDisplayAndGoBack creates. - GuiModScreen.show(GuiApiHelper.makeTextDisplayAndGoBack( - "My Current Settings", displayTextBuilder.toString(), - "OK, Go back to the settings now.", false)); - } - - @Override - public String Version() - { - return "1.0"; - } +public class mod_GuiApiBasicExample extends BaseMod { + /** The mod screen. */ + public ModSettingScreen myModScreen; + /** The settings. */ + public ModSettings mySettings; + + /** + * Instantiates a new mod_GuiApiBasicExample. + */ + public mod_GuiApiBasicExample() { + // First, create the settings class. The string in question is the + // 'backend' name, usually the actual mod class name. + mySettings = new ModSettings("mod_GuiApiBasicExample"); + // This is the Mod screen. It will automatically register the button in + // the settings menu. This is two seperate steps, because you don't HAVE + // to have this step there, like if you only want to store the settings + // without a user-accessible gui. + // Since we are adding one with longish names, we are going to make this + // in single column mode. + myModScreen = new ModSettingScreen("GuiAPI Basic Example"); + // If you want to leave it in two column mode, you don't need this part. + // Now let's add a few settings. Since we are doing it in 'easy' mode, + // we'll just discard the return values in this case. + myModScreen.setSingleColumn(true); + // default is 5, min is 1, max is 10 + mySettings.addSetting(myModScreen, "Nice Name for Int A", + "backendIntA", 5, 1, 10); + // default is 0.5, min is 0.1, step is 0.01, max is 1.0. + mySettings.addSetting(myModScreen, "Nice Name for Float B", + "backendFloatB", 0.5f, 0.1f, 0.01f, 1.0f); + // Multi options, default at 'Option A', go between Option A-F + mySettings.addSetting(myModScreen, "Nice Name for Multi C", + "backendMultiC", 0, "Option A", "Option B", "Option C", + "Option D", "Option E", "Option F"); + // boolean, default at true + mySettings.addSetting(myModScreen, "Nice Name for Boolean D", + "backendBooleanD", true); + // boolean, default at true, with custom names + mySettings.addSetting(myModScreen, "Nice Name for Boolean E", + "backendBooleanE", false, "Yes!", "Noo!"); + // Text setting + mySettings.addSetting(myModScreen, "Nice Name for Text F", + "backendTextF", "This is the Default Value"); + // This makes a button which will call the 'ShowAllTheSettings' method + // below. If the method in question is a static method, please use the + // class. For example, mod_GuiAPIBasicExample.class instead of this. + // Note you don't have to use this either, it can be any object, and the + // method does not need to be public, as this can and will call private + // methods as well. The boolean at the end controls whether or not to + // automatically add the click sound. Use false if you want it to be + // silent, or if you want to call it manually with GuiModScreen.back() + myModScreen.append(GuiApiHelper.makeButton("Display all my settings!", + "ShowAllTheSettings", this, true)); + // We'll also add a button to reset all of the settings to default. You + // can do this on a per setting basis as well, but we'll learn that in + // the Intermediate example mod. As well, you can see that I am calling + // mySettings.resetAll() with this button, and it will click. + myModScreen.append(GuiApiHelper.makeButton("Default all my settings!", + "resetAll", mySettings, true)); + // And finally, don't forget to load any settings you saved earlier! + mySettings.load(); + myModScreen.theWidget.insertChild(GuiApiHelper.makeButton("Test!", + GuiApiHelper.clickModAction, false), 1); + } + + /** + * This is the method that will be called if you press the + * "Display Settings" button. It doesn't have to be public, so you can make + * this private and it will work. However, since we are calling this from a + * button, it needs to return void. + */ + public void ShowAllTheSettings() { + StringBuilder displayTextBuilder = new StringBuilder(); + displayTextBuilder.append("Int A: "); + // this finds the setting by backend name. It makes sure that it is an + // int type, and gets the value of the current context (like a global + // context, or a per world context. By default, the context will not + // change, but you can specify specific ones if you want). You can + // specify one as an argument if you want as well. + displayTextBuilder.append(mySettings.getIntSettingValue("backendIntA")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Float B: "); + // Now Float B. + displayTextBuilder.append(mySettings + .getFloatSettingValue("backendFloatB")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Multi C: "); + // Now Multi C, as an int which you can use in your code. + displayTextBuilder.append(mySettings + .getMultiSettingValue("backendMultiC")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Multi C (Displayed): "); + // Now Multi C, as the displayed string on the menu. + displayTextBuilder.append(mySettings + .getMultiSettingLabel("backendMultiC")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Boolean D: "); + // Now Boolean D. + displayTextBuilder.append(mySettings + .getBooleanSettingValue("backendBooleanD")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Boolean E: "); + // Now Boolean E. Note that it is not any different whether you + // specified display names or not. + displayTextBuilder.append(mySettings + .getBooleanSettingValue("backendBooleanE")); + displayTextBuilder.append("\r\n\r\n"); + displayTextBuilder.append("Text F: "); + // Now String F. + displayTextBuilder.append(mySettings + .getTextSettingValue("backendTextF")); + // Display your menu. It will have a title bar that says 'My Current + // Settings', will use all the text you just created using the + // StringBuilder and the settings helpers in a long textbox, and at the + // bottom will have a button that says 'OK, Go back to the settings + // now.' which, when pressed, will just go back to the last menu. In + // this case, your settings menu. It automatically sets up a scrollbar + // for you as well. Of course, we also call GuiModScreen.show to display + // the widget that makeTextDisplayAndGoBack creates. + GuiModScreen.show(GuiApiHelper.makeTextDisplayAndGoBack( + "My Current Settings", displayTextBuilder.toString(), + "OK, Go back to the settings now.", false)); + } + + @Override + public String Version() { + return "1.0"; + } } diff --git a/theme/twlGuiTheme.xml b/theme/twlGuiTheme.xml index 0b4162f..323b25a 100644 --- a/theme/twlGuiTheme.xml +++ b/theme/twlGuiTheme.xml @@ -33,11 +33,11 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/newtheme/EforenArrows.png b/newtheme/EforenArrows.png new file mode 100644 index 0000000000000000000000000000000000000000..25e958468c5c8419d89f88fb94f16d4c4403a723 GIT binary patch literal 26845 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 literal 0 HcmV?d00001 diff --git a/newtheme/chaos_sphere_blue_800x600.png b/newtheme/chaos_sphere_blue_800x600.png new file mode 100644 index 0000000000000000000000000000000000000000..e97708ce527517b58e06231e36e7ce9ffc28c93e GIT binary patch literal 302277 zcmXV1Wk8f|(*>lvyBl`tMx?tzV3!nFKuQ`FP^5EdmJ;dSWoe|Oa{)n0LK>8ol-3WP z@BMrKxv!Wx=ggV8Vh!~*i16w0(a_L{v@}(X(a@f-qM>1caWNjgP*GCxpkd}hwN#Z% z-r5{|B1kJ~JK44j+skWBI$2#gzWf)%(C&8or&#eLuO5>UhL(P>$pv(#MG*H(RS^4K ze40k(@wt|c0NZ3_kf6xv8456yp0Cu|%VAUPKP0`$VKcxA8r2*6$g2Tx-MEUt=AHh{ z_4388s9>?xNB7v24OCVZ*)xdAukFN&wDI0W71C9D$gt$85%t~fh2UHi%B?iKrUdeo zYczy!9Op1dh2}@R)@^WU_D<*NIQdH1=_+`7%D{L38B~y}Dy!t< zER2=uC>ci*YL*H|1tBn(bFCtu#tu6+;hP2*O?_k}Fb8uTy>dwVT3AK@rZ$5Pz zLMjtnpGwU}X+!}Vz?xjD7i;Qh6qqeOlpovRk2Sa22r)lT*+0x0kf3)u;mFYq44uDn zxoM`MD3yWOQ43RN=_Z(pYig981{s(9}EX3@Z-mQ+j3~(eHUNypDa5)b()xkn& zgA!{C1g-3HKlM`4Vudrt#B1{4TB=mWH@JD2hN%--8{rd`f{7gG!Q4>cJ4NH(P z=Ehz?sF}97VG82hupk<)ID&5?6SL=@adT3TF|{z`xGg~8ey!#9%rC2YKa+se?&m&+ zZBJS-8*hB5j00K2?v2iWaJ> z6vJ#;xZ)%7ytZIy;)n)$C!+M!VjUZBsbdz%Yxs-59n1v}&#$;UF0tLX#+ocJnqqpZ z)0?3+H>IUR!qi;nA|$};iXsh-1209YB6PydF`Z6$naA*VreZs1Zk(}vO`Q4!VpsV@aa)j<8ajY(Xt<~%{CL6q)_fVSqjypJFW)%W9WPZ& zx*ymy*6WyIBSo>%Rce)BpDNBZODXaY1Wy&*!c)E&`vAw#EP2wXr;Sze!5>5HI5C(+ z;ErVR@#qcBz+=&m;ZRy_NQP8W`0BMh(m{mI<-0!`Flw^$H@^TkjlkTyQE%6QIUmaLuEm2^~SQ~1F7oPKE?{}eDxXmjok+3 ziLT(Plo|4<-uJ?9S%Gf!&WKxKoduT)HNr~XL7*FRH1bkr^}=gC1Y|8G()G(A%8h$K zf}y>livluhj1HeNz5b&(4O^Y?h{MZs{p?c!v#hTlLid0CE!&PX6(QyJP}$H)ms^G_ zQLFK3cLuv#t0qC#z=6*Q@?wUAotq*wkxjPSad--pw#~I6h8=^>a}!L|&{DjbC8183 zA~MS9D3kj;%8N~JSg+i#_lx*iY!^hCB_$`dC z57)g)gO-7p`=n(1oRUsV<-QCJhN%7$YCZyjS}pTu&kpcu634_BYi<^XH`_OY?sfl% zV1FMGY=IHkwa z>GMeNhd2@O);#%~;pn{ry*`i2I&yb5_Pp;$iNCGl$pQGW3?-yq+qeD4nK5ey#Xkv zz~GGbun2xJqsZec+zZ;HD~B}!9Ct1AQGJVUV9Mg&lu%wZ7UlrBRwlXix#OdtW zHhHCWzRB3e5W)lQ^8d!5YM&-#hD zoXqJ6B$9gnDz85O4S2iH zIscIFG>z&EW*=d^#D7xCV4hB))gNK?v3_<0Z2s?Ct=^hq>h>G(J0;Xp!-C_?n`78O zVW-dW5ucf0f2>uxeR93qxkSR$u^la-;DX+eQ+B=ixn|6? zfvTAZHf#+Zdd09t1EbwII}`g(`r^G+4Hv*~`C@ak%6_gk*@L$%rqCTtLgG6nKly-g zxS%7&Nw?eo}z-*;2H9tgyM>vD7!L>5PG|hVCIDdLd(EB9^u;Oar zz89vzjVmcjSS^mHr344ywtGt(9sH4@6qV2h1rFLI?j zUnravkHsO8qYWu=04mpsN>HwT@C&aRAggohe9;daBy&x!uX2RaqDc8~B1oM)RRlj5 zl2(62LHNX|OQbu|Yl`w%O{Z)WC^Y8xs6CKpY&hb8W!V2O53@ymXt z(O3rL$h+47nNF5!##C4)oH&}lU9&9Hc9+~<4!t2c@=kR+NPEuczIL0Zn!LeY(t-#? zA!FW`IqLiIGle8uGm(zD%Uu3hqG+bAR(72Y?zf!6_I@CCV$yyH*hD4QD0wa-8Mj7W zJ_aRgHzuk|I7)vlxfTitvZ-Q~Jizbo;zgr=g9g#NB`yHx?m$b5f2h9%zIR){pH7~8 zKp_v>^GBjtqwAg3dJPYsL%Oj9fd7*=qIYl7clpy3 znCz62y!_jiQAuX{Bd7_};0pYne&f_4`5NUs!UM;0WcuC1xe4$&M+$42g&TeHh$$Cc z|H-@VJIE1JJeoy?Ee)w_@p~oqG94;WjLGlwaUG_;T5U(|O?$g~5mRW5;%7mRpUlOC z6lOXAkHWmzHfQvDihdDu>_Z1?^z~K^|69#pqVU(#Fopk8;59(OBC=pUk1!RM1}C(K zx&Qpr99|mCL?_2Lv;C%h|2-G_l@>g%nf1j(X6B?w}lM4287G&SA_u4J1jUMH&wDLl?=Ph>Z z|6hHbdeYA5fgVuvMN9n_tKH@l*r+6h z^mW2%^On}%F^UV23-)(!rH8HkGLDH`+y8cz*K!`7sJ2E8;h&qXflwDSD2*)n<1#VdoO^I zX>NVS*17;w^IZv68+~IXEd#%ds^+D$B>P(moZ_2Om*;|(u{!J2LrV{Vj!Oy1ebpUoOAyG3j?vU3OkwyL%Onn?LQx zWO6PIn!j*fySCa6;TJM`zw*QvyxsD|Q^t1Gz(SAkTKw0%k)re44Pjn?gU6K3TKi z=WCf@G=;t9%QL$Fm;84O*oS3+AN@~pL0_|MarGOgibG%jFEmLK4f9#LQW+lhPX%FZ z33S0j=15Lyq-%TfURC0yj2+F8hkM#m6YM(+4eBL&?_RFCvXPvrcAbd+hjW<=uY0GPo7B5=HvdvHH1c|+jOR4PbD za=o>+m0v*MJo6w4tm6gCFj3Y9rnwsK7pXmP!vulAv+93*RIhB^vrD})M z$mf&VnTQUn?Wn5TX-et7xDW}!@rTQb-(E|Vm78;4KqPX5=raC z$1os9=Di47`;TeaqE6c@vQ9=^I_91%za9U+F>dY#6Z4JI38q5_+=AZ+9p3o7vIY91 z=O_Q~>OEbgqOc}NA8-`TI=A~@nd1f1LY%5lVLynkKrh_1tc_>^ID(5oDjR8oTRV8L z7mBL*Gi+h=@ScQ!_fo!%J6_FyCo4pfQn~2`X=3Io7-b{opI?%d zT*V7RVmgMim}>^Fiy4Rx-;{Yv>Q_M~?5{_wthZIf!%~~}tm$`dAtPT(HK7=chCY7`;Y%XEQTt z=8*PKJw|-&5t=ua{fPcA_TlSqY|ZQ~_?*_cpAYWQrC>VgxsZpyoN=SS(Pg`^PK6E- z(ZvkS+K;e)CJ$^WA^%dFD1pXL7ytC)+DfgnqGSdVn4B9UeCP1Lq76t?dmI+Sha!RnBx#3NHAvQ0=_h-HB#>Zdb2k6KU8#2W6h0G+S5H^ z5Vfi!*&Q(3VD3WNubEOrtZZJ%6^}0ETP`{`*27S^^tNf|ZO6wyt6V z{p%;y7P@R7{{CUW!rA2(4l5wSmyLrIQv56FFa9FeMQZOI9>MrAPKw~zY|Qj#bsfbX z4~B{#jAg-EVu}eB+KvtnVY&LBy?KQ-Kzl=Zy|AY3cfV=Uq<1n9$nt!`IO~bnc2TE` zsg-ow{N5Mu0^HU=-GQ&<+8;z==@d+iCY%!a&Jv3)YU#P~&PU99=Te6Gd#j6M!+|Wg z!J7$;)cJ@kKaF{xR5NHw1l+Uh-%7vq)GTB5F|P<*lQnO!eBDpkz5uGtJytYBKF;l?#+ddVwh9u<>Cg!wfAKk$wyDB_iJ<(4 zF4?cl|MB9~SbB*lz$%k+rr2nM;IRPOr2dkRzD0 zcO6k;3v5qsI&aTW#Iu`8KzaaYFJe>ksap-Oe%xXHFXAlf0iE$>az%lH*g@b)p$Dv9 zWBP^?GGA!LUp_S49^#wayTtyy~W+a7D1$Bl;qPn z4cHlM_{LKnJB`^>%o7?{a+Dx28d{#Eb{WtT7*m%H27dU!5*BV!AEP#dHA8AV7f6ot z%xc(HjZ!0j=cCRW0ewx(V%(hdRw-Hn2?c1~>3uomA^ya{{cuvi1=>?KNAtc& z#;eWFd){5DyR0TUaiViR9kj+4%PD+U#WV^1tblPQr zI~0%3N4DrWW8^=K{^2szp={;6$PJwN8{sD<1qi<3C~q~s9lxS zh@kPLu}J*y#d*SoWswfLhKTegdJ&)q;IioBa3H8vxIUw+vy*(&i)i^>M^|_qtK&j% zzR zIu>0*NoNQ_t2|e?IDCzi6w!gzpU1FK%joLSlq);?=mUdC$=bT`2LsD}?n%e0q6r$z zX2st5ohxo}N{5?A4dlt6G1g=UJrs=sFq7XeMKX9s9!(p5>)l^cEY5AG5m*lu5g+%C z27rrxClxVyqFRw^q(HSvnS7e^9Cv5~7T!mBtlhjoW*|r3Ed2MkkkCKYYy6u!a1>?Z zfw#(B{$g1n98ctd6naCp6KVg54Q>R|XWod5tVAX1sigFLzm#&?2H@bg1G-jlX(;{%0%zdqzyV*YjlH-aXOg$YW6TPGce8pMQ0 znMEjr2u=CozZjm2Ed*=UtgH-87u@C@$1$hbQZnC2&fDg1Xz*%>B;f(4-c6(Ix;Eba zIkSTfz+iQR4;BA2*JGm{{QTfHSy^BO0Z3o$HsCSrClA5MdX?F*GAhc9(~z0X@CWNs z%QlXwIk)6u$g}Hyb3#ETjC*~8)p_?1FlKt8V$a>A`5z@GmPTr0cu|4S_8rWl&<5{0T}qvfBy262OLa-71(%4VQX_t66?>&H#Gi{HI3|FR|h!|soeRUWyRAfc7w#Jk=?IsTWT zl-Rn?qN_g%Ww-FX2le^CBJo95xvL_ahfd8l5_SCz$6p!;YG3h8gwy=mE8!DP2**So z_;g08ouM-iK%E)OJ`e!O!YhV$hZ%;((24yRhn=@8}w zsQPOf;?CZ59(toTaCj71GBjB}W%PuP98?oysc#;?4bUDx{voai4-eVJbTpn-#O`6A^DC-LG^G}{OpL} zG@6w+*X8HYbbbgJrFrx&_|F}<%L!xZ(at}pgD1C!i$QL!--{r%XOK~#_HB(b zFa2jNgF5Cb5#16P{~b{B*KEOmd4Gw44ley+*4F=J#K!JiUu2_ww@7cKE%78(G(k{7 zUTodl+UK+cFa$~w-Lz$Kg{NY%T3-Y3ZQcDbg@m4m zrhV0@xZR|&xgHR}YKE3v+SU+mqZ-$qGR733aViuSk*9z(5q-8C1h$Lp&(VZx zN0DA-=e4=N?J^>jsncxVNLj5hk#C`!4Y8}x<+eZFkR1WLUt?H%*QgDqHcQ5ulMI9N zrO{om5IKhDbvr0e7X<~NGbyq|q(|(L;jUZxu|Ml#Io+JIZsQ1<@6vp}`OR6~9Q)z+ zY{K)!2Y`zt)#g)70kMa=E6>s%kwNp^K7+?zQ|)SBWo-o#7tx7hXJnO33U9X&vrUQe z7l1X0h{jwXa^cf73sOP!2@@=;K|SEO^otOvL@*QA$Za3bBO<4XcB|Yk?8N=ndvsc6 zRSC`3wb`>IxOuO4O&U*qVWx;)z*D1ZZ|!{EPa=Y>Yjw#40z~y02UpwIrr=#7X5D_e{iN@?g15)OP+P0(8~r7`)d#-O9N%k0TK#$@;=?`y&J9dg z*L)9>%&?Ycfm}Rul@Hp8YKyNe>$u7F8$i@+gDUzZ+50?{{-Rq`4cB*=deuX>--j72 z$}6>M8G1YsKOi;v(=l?ngFM1*BmkBCN z|AM7H(`5t^W=iSUN7`%s5GmcY`x9!~Kszr8<9_B7gm~N8e#|YqRcrfo$gnrUWWSXr z&fBeU=Jfs+pN1aC=wH@He0Z2C`u@8%jPoC#kf_hh)3Y(SW(w_sR-b4n8mr8l4>J+= zgmE_8RPZ}`m{lwA^#YLDtH^hcL^FWu7**(5I4I;+TKVPv_lLhHOJ_Pul5*&BD#S{o zg-&)6w3}SN1tZc+RSCZsn|-&=Coc65a|^^+Q|ctEt&b zs<|EYD$;aU5=pEdbOoq9D{Hm7^xT=!+J9x@7(`l#R+ij&MlKk%`9Qp^>}Fja%BEHriG z_MyoislJ;rf2F0ySAKC5`5T^jF{t$At*j9#(!$D`7m|1*8o*5m|9iCk;yE_y^#`Ge ziLNglq+KzrD~4v~`9cC7&P4PmEKdGx&<=MAkA(d&6D)=;F!qL#1!rUnp1%{QHRvnT zF${Z$O~PU@%p}Zn)ND_G38gABj;CUmfCJF^%uahMUgMq?`9cOBQ1zxZ3J3YvWep-`ZGW{p_VqK&E6k%_UFcMImR+Te7-dea!$X)T(u&o5GH7@wJN(DCQW1yTYkgTE1&Dbm|1+$$`DuR zJcEThzfsNfjsjXwEfwrxi3*V@QHxPtZo;=X|A{%q-x^9*zOSJ}L7;zk_UY#(o#=2= z1OV3Yp%#J{AI(P>Pm`hZy-q^cYvP9iaqn#j)KOYgIkzx=>vV+DR_}c zOLaW>H7@ASkHWU)J;oZUN$oa-J2gO{j)xiAd_FK%mm`6Cxg7WQSXzeg*{xWaX4+Hl zu(*+qrk}2t1y1go#2>h?;TQl^|qJo zoMxfc=7o$Hwe^5AL^!#^mDkIREwWNr4E9%aAk|+%f!eI%s_uLXoaFMhCdBkJ5xe}w z^dxL`D)AR-x;RK(p?!G_`E=onv!hh)CR>zmtM;jDYqNNzmq#>u;j6J2A7<-yLrS8q zyEFY*d@=r7N3Lpx&Ub}R@-(`Y`_e=R&N*b9YyL5nRVqTMeC@^-A;GJ!J1?)_DkIA% ziyJeORS}n$Z?F;l8vB0BUfUS1d~4oBAGJ||jDs6N6p-sw$g|G%FOMnAyQ^K+5tnup z+@`FfV0|cqHpEOV&SPIo0J`B;60+Epp)ncRvqftEP>tm0;_E;!v3-`ve}MH=AX{cE z{Kc2}&t`T6HRC0-lH>U=x>94Xx|P3S3D{DT_Jo>C@)3AyPsNQF+^a{JhdvbMi<%oD z@AgejZF;+GUR3^k@$Y({nrMqbS->wHiiO`p$vl|qX<&z79{os0()s)4iU}AUPQT>e z#yH(Awv;uWmg=t`#RMQO>reC)=|cC;TwDMJ(5}5{%<2d*hkc->VQ8e&jE*BpX zi^w3{pCi&n^{87m&Ku_(86Q~0Y)xWv*(@+$+Z;d$!A2Kg|DxQ9A!LhU86EyezFJ!3 z#C?Oo+7DF`LVD(qH#n2c@YH1fcKUcNqQvjCb=z^*AD*5C8!Sd^7ZKt6frZ4 zM_!2I1jobxzow)_-a>H$-tENHCM8lv9JOlkUuvE%cQ_(hc7;orJx5;{W&Kl|e1E65 ztVq`vm7Zzwm;S_!nTKirTP6X&nh#=wMBEK}1Rm+&IJ$p;Q;BAP7M-Df3A|k8LBFrM zuL?U$T3`2t4L!(PMK~=mmFlS43agI)Fubb5t0aeEWz_V~pGw=XdXTJrhJ%J6x@GET zPWM8=B=VsffvF9`-FFm&Si)E#jkFC8*p=iBhMWDsHL|0!4@|M<9X|AEP|H2Rsw2r8-`PSkc5Z**j=?Ids2HO&H*YuLX=(f*Daov*!52meKM;i_N@H-r64wqOpNJ4)U`^sf zfi>97V2FVA4}5rihOz}A$?0d5DTNY1ak7oX$<9mh$#YnGeHM7K$(?!gIJ*gvZ0_ey zBv;z|NeN%+F2k9T*ri&STFCSzaO~+zpsJ&R6EHR$AL6}Wj|kY7{#~U$An@(;PUisl zVFcmAbyJQ}txS~Lk<^cCsh|fk3G1{oobW4+zh?!nG*3pA#Msb*g-v zIT5v&ehH-B&DO^-K_7p8z;nN^fW29uvQ#~ z?6t?gaBRbWy6egz)1H(4$r2&bLvOuXIX_CbT^K6*w}Y9V4EQ&1<~Rrr16EE@0bsiY(SxVLL;34p z_`$RD9NUALLvae?$WSh&Ddf-oRa$+R<^^@h&L$wP$dS%d@%+vMa$G=_f%eUB zh;6(%tHg+Tsraoxu*8{XQ+iWL85VVNxZ$m0w48#J-bbMrQAjqLk__4EeprU}xP`(b zDgB&2pAN1h+?cv^)Cy&fPe%n@NyxgHnOKt_Q?_Q1rB-}};2-rvXOKi~`Xfl2{eXtV zM-ncs{i3sttQS?rXK>?;bH|yrg4y|_Rmm29G6G0@0@4ub=V&lgFg^QoWc*KUL9ngZ z8$vx55}ZNIZL*m)a&@>B;WtG-bFD`F6l6K4UG-MgJBhxazZ>tKRjvzQ#VeZFN`zYN zaNfqbmCY0hVP7*-o5=EKqPK2&s@PZ9EpVZoyhw;nFnBj^fx$QE3@HmpXE3c{+#{SK z7r=5_HyYCRU?I2~9A>xYrFu`=K}b`SZ&C&c$$fz!H%*cEaY6*^tKZq=a>ipDb`G>I zug&f{8&9i|eu%BxXnU#DCjE1slSsfh=?Ej;(Mm0ZX0dp){+n8Je+XO?M1^quk_tN& z19rvna5*NY?foLmGXVY2EeA{{DTACNYFQ_@+}B;7RM(<~npwF#HY2&H36c1Iu)oY| z2;)N6bf?Ht7oCBHOdE(qykg_hkw4ogATLV4n2?x_^SK(J)(m)Wg#Ak0Y0tBf z=i(sZA=r>d>2Ff;Qfoz)-Fj`~CL#AP-kJYKlJ^Pviyes6JYNZhp5D|}=E@c%Sk#WN zB-P%(Qkt7-D*+l9)Wp$$1%?b+H4X7n&sAI8k!3jPa{MS^S8dsu4Et8q__8p&b6WU^ zla+|mz=a9%L1ilBXawfJ|5at3U}}DQP%9Rf?I-$>Ivdp!tf4t&E~3hfArw|Hux``% zrp|Vdo;e&KLrpbWrrbygD|ck6#y4xSS@=wJGu^bbi=S`PhPr$zMYyO7dWg4&ZuC;M zkI@_44EP4SAqM++n*)`H;eaU-r{KW9h=lMKzf$cZ0n;6AaRMXE8RhOg?d4odbF9Nz zcJr5(dtu@&Wy$DKz^6E+Eu{dU`(8dna#2jri^+R7r`(koIjGL0qpmFJk7&}1 z^wBNInm4KVSZDb9V;#Tk>}GD{D9YBI#glLeJE<6el#N6FV8AvYBItcnB#nfM^!W3% z6ID}RVxyc3&aD*pi!XJU&xnu~$k{^e&(Szu)wDdTMHYn2f2bO95WFQ=y~1rz+}B{K zy_VSXqAAqM(R#Rt_fG7Mda!z%k5K#^FxM7gnw=M| zWt*un^?_c{K`>gFFRjiAPb(ckyta!A`?7Wo!wLm|X$;mNKj1@;G5WsrzUi?C1En>i zU!>7*MGz}V0`j08%P0Whh1J-5bD4T8O|~jkp%OG7B=gub9Oq}S ztEda998cs`4Btyx%%&d2x3Q`|&OmRDK$NCX^Dl(^ySN~@)tl`EQpc0}f$x(F)9b?? z20?|!H~_oZ=xd9=!t*N~x{Yad7A)SfL+tFLMdw_7fO*cDbbwsD!Kx6`@bKV$DrPRc z>r~N@GX!7F*K)vGfxXL{s7F7VnF7=G?Kjr|PgcXi0t+t63NO=GQh-%t(cpo7IqHh#lXYJheCmlqh4SKE9zU!{E`||Qr(31d`9Vn=G#G|<`+(AUA_gHC4rMT^T z-A`C(@1Bre+t1Q}er@eGK)X*)vy!~HwBvKdOY=>3l|)iaNoe024!G%DwtPAaL^4(a zmM55dnI_?6uCXu>TsMbBeWYC!}H{s^Q!>y_-rEXvf-5 z3eu6GDZ>stHSNEDJq1e#E2hPRwisfo_6FP*p=kEAe~NtweZIGK!tx1G8RUwT(*xgP zsT%x+etxW+dr}5EG@rui%AV|D7CF~3|KnvxkMjENe}6lKbEU2Qm5@O>yzOJ+wt*t* z(?vf~+xoKSU{$Cxni&x>v+I{rPX@xFDJuRCgx2WRmllggzi|n)`GvC<5*~+K(bvja z5tNM>tk5rpkv5}ag;-Ub4Z~5qZUw@lUt$@!l5yN+xeak0z}MP;((v)BKPHyptiP75|(Iuh-n)-t~M3P=faU;krH0hFs&J>`;k|E7R;B+M*zMThq8??qj#F@8l}23QW{GN zsCGl8$bb6!SfFJ%*e7RDHEf;wLFOX7?~OB#-VN!AEDLabzrDEmzO-}^xP3-SBf>0x zHbS?5D@An*EYGfUox?^m8y_uj`r^Z|bhw0l|M0lL=n&k-&zw}(SiBuP4O3~UAH?*A zXux?2U|}KT)!nA=3h+5ZgR9&J>4(jx z^xc1wAMM*^39sA29T@}v(TmjYYtN&DJH47jhyQe(tOf<@8*xF}=Ors1=BBJ~?;m{| zH!anR+5+pADM;9qM=AG* zNsZ?QY%?i3ry0bSZHUseIa*#u<#0OnrLsZ-F$|BfEG}|cX{fn|rukC=a~~e3@BWl5 zoZUsYy9Xo#;JTqHRjx@arSpV-(OHnvqxc-ke_b zHfXje##^Q!4y+ubt0F&-#%0=8(SGLSd6q?M_M&<~)oeO@F|Np;ucNdlLwf70wna>% zPusWL!Drh!&9C}^wRx&$BvOyHSWWsiA&pZ<(LTo$>SuV~YA=B|Zy5*c2^4P1dj0#_ zze7zMBzHng&qUE+jB|j2d5;Cj9cjXsokKs}+wfa?cWFDak%sT{ys%zh*)-DsT4hy` z8;u}X`zsMx>q`ZyG&GghE=t|uEOcecyJEu5Wz-Vb6^s3xT352)vBiL=J81tnxu%R~ zDLIAV6gofuUgGO_;gs|&iO66DCq6Qj==5zOn#5BoiNl+}t2H&0EL+(4km}vJ-FJi9 zT6Vx+Wyqz*s*8sy% z^y;^-j2)g>M7|n#2^06`0iD2DlG*sErRzgkKMzhFile_>FhZc$Y<nIJDD+_tmslJ$9R?eaTSi`JwBG%WvVGsS3SUgw#*G$#g1oaY^@MKP_5_L zm7HAlH<&wCs`eMksVjF4Sd`U~*Fp3Whx3 z2|nDr93ssHbf!TviYO6PUzuqDmK`P1>M#OBvs#ROX76nJun<8}vr~6AQMZBi9E`7H z2vl|*(r*MWo>4AX-R$E``-&{`CyuV)&s;3mstu@EoW?pL%IL`Ljnr1lv))kphzU8- zi8)=D0zb4Q|7!Vj|L^*;O9>P$GB-^JeV{j2iH_TGa2bN=L08PIt(nl~m ztRH0lu;0KXaa(;P)~8+=6whO+IxC}DZ-JuGSWE|ICGq+9apY4rs#o5o=0()zn{`sP ztV5@)K3hX2jOOD{hT}E#-rroYwiVggFA1xh4lm!{cGv1PRD_-Ib=W3{<443TcQiGL zebcsZE9{d_ClF0^^3QPPVi@?{57g+NWOcmmi?kw#0bdxsGu)fp1}1$42VxjUuitx# znSpn5e8<6qc0x54K^cP0c?9M}V$Q1K@R_SV5p%KgaIw`cj7>Q_43B~R&ct=h z%rT{Y*Z`;FLSJM&6c)vjTJ!g^>#v$;c+5q-Ij8?KY6zCZW$5a$$ArA=@S@?9Nc@M` zUDKKa{A*SUGR8Jkz4G=OfHB;3D1+j5QKZ!3c%VRC!y=e4Wpy!C#KUBNftNX7>TH6H zmr$WA&`m#4dU1ivYa}tN>vz2fZ&~_|JU}b^d4t-{PoA=9Qm=P*TWSNt`CtVOi|^CY zbxc>Gzw}Lz-wPp2*p!Uf%3q>x%lOufl}U?f06lHn{FXf>^yS?dbKQy-Vu}6Wlwjk% zk7ccmheSj>DJ~|OQT$H3gFr5OXITBgdT*oC2z}nvzx((ZxRkB{dmh7W<_AuQzz{&9 zvBx=BjN0aU986n+jsMX9=urx?!EV1mdAh$T>5$Dwp8FBrL@61D{AamfuWKjawN1vw z(-Y-(g-tuh!yQt+^Q_17SVt7e=l;F??f#Jgl)~$-s4ePyxw8E4AJ3aV+>rgqsAtOw z2?U6q)Koo53hmN0YSyi5VS`W89*!a$KBIC;B<1^~mSk)6(M<&uv$~LutPai_OZ=#MVX`1>>?QEy;0sq%nHWwfUr76&46) zYsQp2tL&z}v_iK8XaOJznv%ap2k{DBnT>J3$qdeJuo$(!8e7cCYO+DOE=4-ODRWq# zke*P;%Xce%Rry+%?CyoA*^vqKqAil)H4o&ldhytivQ5a>%fLG7QzhuI|IcMPfXK5P z{u=h@ix%jWrPmj)*<;KXbk)T15;T<0sJY;dEVYGY4n@~gZ@2$8MUX02Wp=-8?%x8I*=-E@q6(s2LG&uBMtozwtSqrm-{uDCeP3K#HJdYpfcn^U*s`dO z)qr3{9CvbxMQ@EstnqI9-}mgb1_4L-wZoX|gZLko^z8+#4%wcnvXVoN{T+DB9fu3bs2t)FYbt!@Whi#%09{+2MmrXFfU zBz&V(DjFOV2I__R4p3VX|5WH80V;KKvOEb>1^cM#IdxG+QNJ6x zp*Gs;1H9(_=lsHw(7C@sdH5ZN`JNA^E(toBvXlX|)l-m+yNvfsNVt}g>>zIl+1H&> z(_G%kC>baE@h1068SD38m5DWe-42rN zOZbPxpUad1XWw{!3T)B@Ia_{^Y^gN6U79vk!yYezH#M)}ue(16MCmmuH~ulG zIZXv=nvGgHj-F_ZC>5L><-U9Rkrr1^c$hOQSxltKOSw(tpg(|RrUW8T3c8Zl$d%E| z$F=Il&wwx(c~Cxyy@?#{^D;-r8LTi<+8ln~#{5#8Nc|K{&7?p`d%(=>l1B@>v2h=; z&E1A?rsL|4Ni4}YdAGjuk)rJ=D)Vy0&*jM#f=v^sTws6$d4c;so|V8h1(f!0q=<;4 z&%?V*B(>Vb1q!1c94yF}jKrq8ukG$l<{^HL z-oQqwYUnI-@tA=w@&*2!UYQMP9QAk)b}i_~WJ&%Esg)jR`{v?L^W-d-;p+MOU4EQ; zvl-1c3l{<;4bm(yERqk=m+=i><6+b^l`3PZIB-d~)1(5|oD0A3XO*r=OKI*zT2Y2_ zaxA-Hz{E@TcTTqKNp&3_tWI40T!(xB@Crn>Ol&_3 zDK{~&=0N(qo4TeUZ*!o2%cgeFUTLM8XSp_Fx;~H^^W2`ysU%rL>$%@uQwyxkh+Q|g z#{$G_2@tQ=3o{G+Qr9F#M(oS1E21lgp%lOhH+KnE8E+dE`N8JM_9MC8rwfdrYCJKY0eub!R%5fuh+wl_U=$x^uWBW3rdy><+%Vpo{h11qu+Dx{0w>Y}1-bXQt)u3( zTNc;xR>FjR6)aBpCQw#f)jxTNOitvkayT2)ZupqpkjA`%r)gUy?vyiY?TlnS-8+50 zA`$&jXL&zmK#(LH)$?^nGCLXtjh~z@9j2kp0mNsN!cxbS509ySOc(J;YNdOUdQP=j zopUilVyXz58>a*mj^~(JPNL+cilam`)W66bV_}LpWm7v9R{IgU<&5~NnFx?_jE;{JDef}1{rb5je2jmHr|O{tUML=o7KWzVy0l|EkJ+nbAoUW4yHUXH(7 z^(5|uSV!H*9_qD;vcw^qd8`i`uoCXosG<(@SQBMEH{~0rvekMbO>;C%ImJd5b~c$S zh48fIWcOv!6)Xjf3O*2~l5Gc+2@jc%<71ppme!-rhBLUaK=G~jP6e~e-nlyJH`sz9V0SO6pMV!Rw>-n;&Vqa$CM&c*A| zo^%yg^8V!J+@|7l5I_p2YBk|rrNzTA@X8iiI{bb02D%Vs@5M`87k zbi_bNNL;U1ynzXIJ~VW+E+Uh&6@a{?Q66}{ zrcUQ)vUS=K%jFV5F zMFr^-ad&Vu?OW^;oN3NV-ByuK*i8DBsSEl{JNk}r(3QrcrRlu+v(j&a!NnI%cBZ@E zCakGP-yi+>bML5jIp;{aCF+?o?=kkXh>)la1wA$MGp#tXOhYa<+kTo@p+?RHg|(Kd zLARgV?f)MDi9mM0)b3%qc8#sIWpL*U@>FU_z19wbX@9L{@E5>nhz zvW)G`(!ifb&|UV&M1G7Zeiepclewxz6g=DRrqiYYEFGnS_?&d{z- zllOXQiLn-6__K?#>J}S}wWDwYroVZ@`yuYE+E9#HQF`>VXS=)Ks_@l&n1k)AS9e!z zH;wn1w+z*buJPdxAAuWoW6;DzkotRwY1H40n$NqV2)~h_IRx z7;7xYB`C~f^!H}gUN&9qM;oKmG^rvLNzU_(bKt&~KOoJdqLHx)AH_hC8RQWR!wB}m z0RT8?L4hej3^0XGNA7sSNKCZdWB=#BT>k{8&$wjUablKn2H<5~)THyM1xV-M1A+`j zjA1qiX<@vkLU}fvD>JrUCdt7Au@()`S||ZckA3W z^w2!fX^5hwbx)7RI&}D^q~8Xj{S{Ide3MB_&zj11N#ZJMVK;rl>vefQ*2$%ariHSS zikUGhZJ@xcosOZN@2W?7X#TpeW-O(v`3PR0QxT92jCFW5#>&!B%~(2jPjRf)n+n?% z-nUi8!h~Yts~Uy5efqLk?l*la&VF<7{Zp^niS27jUcEnEZBA)#+k(wP47G5z)e}5Z zN=e2yJvh67R?2XT)fQSU=ly8LdLSbO2o4HK&H@)A`4H4-WA@@HIP@-83aenvgc0}@ zIJJDnJiS0FQw0LquvCJN{0GAZ0i7Tj?#}fcf1D=I;NoL6_URvBCUnHmdd8-~Z~qeRq$408otU?E^6Dn{`jbX5UNq$3G*ZUbM)U>K-inkF!vdBTp%*KLpjr zKt_1jGc7tTyTF^o&|%b%F-CtnVGI4!H{j9u_kTcL0n@#rlBh~pq;r9^w1hL#z-<6T z@ds7k;_pEK%j2+pkE0@%nzRy6@NP}kaZ?2S`vffv*X2UwW?kB)L^wt=z*?KPu`Mwx z#=E4fRuP9ac41nOC=8&haTvzQ6X~#z%vjCB4Y}V+#;Q8GZA-@5P_<#dQCJT9_&D_i zSepx9?KcP8uf%yjx{_#qivLHt%4;@L+O_{nTksGYwqR4ZYI}mk4m7avvLL$xtr}eQ zU-sVY$&D;a^8?^;$Bx)H1{uM9$*jy;vTCX~b;~4^X?f8|4>Hq#rw5r#PcoToOs1J0 z+0?YErmHJ!$;v&sGsuWw?AZ53zjF=n+qxUwiT(&07-AlH^&&3zq|3&+LRiHup138bt^o$t2)EXL~gAp92AD~%QH*b#3o zV+Dj`P2cbyzEEgptk8wRA95^~^TS>hCwy_xK2O)oCbeFLFt!h=F<{!@+elY0uqeRN zeyZF*k)J(SxC*Wb`q0Y1?)BuVm0wFA?_;N01rnUNOB04uCWP2=!&Us$*6mt;mE?a$ z*lA%@9hI*fsEch_iuWM-NxoVvLIYSaH#fkg9Rrj%um) z6N8zWl``N`-P@@h9W;&(G8b>m-uihY=2DmggPNt2PNUWXQ<53lq3e#9OwKOmF5l^Q zTh-miiTpyRUa4(AXxB>A@0ut3?P^IxrF4#-Xj#okEnLWL-12gB-B!K2{it0nck0MX zjpXcdJUiQ}6zO~ik~==E9qhG%Hg(Ozf>zLss)pCIGNR+KL7R-6GH6c;T-bE5fKLP@ zb!iX^L{#H2R5v|dykvcj;&i16%ioIm-0`MQjYs^;*lLEViG>1cR&wPX5bkig{b0aY zVDnf$ZD03~%7u1rfH7+VDQi;ayHCpU1-|PGG$ernsAAe+g+lW%jp8k3tT3xVPr;1! zieA0eLgD1==e+&mmh;ZrKJDUQcvgMMp+B)7S-_I0l)bv9zVN96l~e#h5Z({~xCcpKj{-0#+refO$bccVsCaT#G?IF? zvcFT?e_k&ZqyX0!Lp?A8qcn?0X8i`s#C2XNcAGWYq^1AKRI6~nSD3O>EzjQmD7AQ@ zw)ZSCyOdeGoSa?3N(BIMB6nvMK&)W!U!!o+ESDOELZ@0WbzkHj#5dP-l7f92?A`%1 z)$-MDS8MH>6cz>185S|6fvR!(f{ce`ZO(To*XD2%+;LSeAm-M{_zi&)P0RlW)l zeD#JE2g4iN!-q2P>65R*&=to_Kvxr*t^#HYh7hhMs0s3ZC0dOL%qLL{T{iwiD?XxQ z7OR;0r?e*3MJ6!|_F$oyILswdgJY7IZYE^3#@D_8d<2_sC8=WKV-ic zo{ZbNk_?%>a3wLb(CZE2-4pqF2L;RZ=&#}k5LV!Jk~0f{5$GXI)@pD-dgT&LF+i!M zOWj7LQ!k^Mp?<-6UUmkxE+YP?MBGg{sr3Aes zeoqZaVzffRLb#$e11a8+6Pkt<(fR|rYO6C{1RE|1LG(IEU(H4lr<9YuaMelYQERkr z*y8PGW}?C`O|FFym0DhB10z(se1h!MZIHiEqa;a(M_Of9X`GWY1Fvi*ow6!Qy+UT$`l;{`71Sqk1t zv2*P&|2q)s_>13iIX62)#Sj^aV_-W|%fP{SGR-ku%AHxD&WJFEK89mV#@S6$9wj2H zvhx^PLZX8vK{OI2;$9N;hgNCFlG1VCySarg-}7I>Th#2Dolw=1qX|?K;kkc zpqiD@UGnP#0d?95GkD+0avefw= zreZiQWd%Cl?G{;t%Fk_t-c@U1VLWg4o2RBS)cn@L5nnIy4 zd@NQFb-e?uH!-(8eDKv&i-X~1)1pPWps3=J}_z!z}JIw3+Aaug*kbrB&% zSr;s^lN1B^3B3d*i>EHamGG8&UYJtXI68!@nq_?GhX@~Db~ZV`(k>V9LV+xaxn+%j za_N+cJ#l!2dR&ACszspq)2o}A^{XJAoY)qhxRc7jPcHpj zSXsP$vvRn*_q)Fb^_qnPDwUmTQG*y7bU}y6gZ4l}@qzJKDWD92ceTAOOS-ZNL;bMtdty}q}FM#Y^$OPRGRne{7F<*4@|W_6o&c)@Wc)GE2SMjepj z*@M)?0l3#8A$rm(oz!+7HI8;$->iC(oz1qykcMzvcPfsHqV ziGXC?v!!ns2v83oYnG1d`_DSfI&xQfc^%F}a%0fggZ-)>OUBc)pjB#R6V-@d#(Kp?C6(W@39O!D2 zIELV)D`S)pWx)X9%7=q~v>IWqKaG8eR%et3_+c!BUAS;)V27?C0Dc9hIKZCV?B}@z zQ8*qdl)2QqkQXcK>7vUmxtU|4s;Hp)n-ec@u?iFKs`|0PPM8$-E|!p z6P%!{?CPdByV$Lj=>Ujx^3}(s2cMnX{S#sj^*j7nZdQUi+m#ZalUcb0Ld8=#FF%Jh z3f&8X5l(#QhZ>wWvw+?M043*E`E=r5PeTeoF$#hRSMW`{bcD8qJBsVq_nw}7^CxB$ zVs+JGd9MNDFcc{_lc)c*FJAscI=^`b+M`5x^7!kMFMn4**yb)kBF*S( zs~fD%Ju*drul!_?3O~7-Tw;FJimJw-wzwcfNcSw83e~;b$ZG!FJ&wU<`q(w)f1ucp_|?x{{9M}@XvsW1_n%wR4XyF z!=HUctEOmI631{RnT^ZCL(rPY_8wv_oheKz3}wceLZL7q-aVw-o!1W`+uivA=C;4~ z;4A-y!WRd}dom4Ud-za>Y15T85lmP9q$|JaYVxvRuyDnPU$`1atFwdGV`rh2oyw=Z zB#Ki*0VGXo6h~>M9B@j$w>zK!ogDb4+2Eyl3btO2dafxBR`eO)0vj+Gx!GJio!6CP z;{BLs;R}3em5xz{P=m-dK-4i1Nz5)%eN(NgO=XY*9Mklw&!0dojgx(7OsS;&^@l@%`DE|_;K#i zP3HYk-Qz2CMgOT40u#(AL?3FEj@;Z#yL5v7M4RA`f?%7L*`%qX&wqRJ)$eNi&q|NJ zDBSymcYS{wiqiP2nEJ})PE{*vAmynctZO!ZomtsI(;BQ=*w!R4Nn?*7tu;>$kino* zFs`=y7~1PpPPmuM`Zey9sg5@{E*w`IsBz3Lq?{RzC0gYYBAFA9BOltzj5y=qK^R$e zvaXtpY6wwIGNIY6Z3HcN%S&hY3Hh+ESOg_gT_sAM?g_Lt8f;JzW>`22R^z_>!p3P& zL7$Z6!>n#kf7QCAFZ?}N${H^h>XEN17jiA2sxznwcIgn91yzyNUe}n9(+l|iRJrLh zmj5+5V}&rhhcIJJTqry{-hFiB%Q5N(ISHU&GSEH3p{d=`C%kA6kuwk)PR@}6nSzS*=tcZrQ>+{fj&D~a4 z&y7f+dDp@-B|Ctaa&!?`0;7+{dv+Vea%ES-JX^&h6cM-qLzQq<@vx;PB(6gt3~)ItL#3i?mVm??LuRm!dRII2iEl2X1MsKnGwU7u&5ft7-a5L zLlzu9?KjP3^&m*@t5rM}V_Bt$gZ{>oVY81*g{-w0Y^C|;V~?{`H8C|Us(^M zx>PpwHWXt0?iRg2{gDPEeUq|I#Vl=dF!zu`GW27a>700$lr?F&&`N>ARlE%8bb(0p zs(O?1t?W|^laHECqnW8QR`_tNS57JnNO%ut#tJ{9kXN`^tnk_HZ?TBw{1BoU0=(^E zgRjER91L&08g(Y5vHgvttI-IDHC;_!7W4~Oe#Pt5n&6p1+rCI|JIy+*_%%W_u*p&@ z5myYntR~1O?Rn&sX9JrAw+p8l|3Xf z02PY2=q0qq-b5;WVKcoXwsEikEJH)0w1=d$_`zRO-D4-rMEwq~%3iz<*1$R-7vPmz zx=?!f`QhjPSlRl9-ZF;J8v&uc7G^9dcp?8lX+$l|-1zb0hkv!Uy4s4yix0mnJ^ZY^ z^-beor*X8?INYfp?4TF{B6KEq`8N6x!kAEwCN=OzR|C$VJ+7EtyPVs+Lr-Y7w)YfF zBmqlc0-$u0v;a{-LckL@IIOEOc61v$VT(hlfpQCQkKEMy)p$Bf=Q)xSp)>~BQWfCB zcCC!cMIlmZow-?V5H+j(q4r3)jfz1;(FfHTDyFs_UH%1fuY{f?Gy5wV~v^fpVMw+$dqwROjU>J0cX z=liQL%aF*9RKJ*MS~eT8$F?b3##bEkEz5tZb1c#Vu@C=kN%K0Py5*yz#Fu~?%se>jm1&i6i=VH&|#;bTS5!Fn}$L)k#$|rT0}|7&4VU9-JuXumAV9Ys$|8dH#3*Nd?&wg z3!w$)xwUkP#GC(w!l zAC5F#wV7FWex^EUZH1IYxQ)CXoXBRLvK zToPU?YfC3hma}*cV@Jym8=AcQlyAsx8^&1U#;jpnmaiViNrOyQ7^|-witt7owYk~|pJ@QWqHk9*YL3qY8z3z1|mY<1&8S7un zj1_)HVfa`qzuWzX5ZMra8%^$f1S~r^MpprKTptyUHRy{TKK+!~DLc=;v^5rJy_zar z*()%V;jFm!^QWuP&BTICS7+83zN2t;mfiKN5jb}>%zpbri$juelSYD#c~Q5_%xX2Bnn(x5)-fI^DAw0>uXB#tL6 z6ilSp*L?a7ydq@aC8Me>Nt^oOM7C!>`r8jyXUff=HH!zeoySq3kSwRuv8ZM-Fc}c{ z80>;N#aB*5nUe}>vJy+A#8KYsAkOIuJPw!z+kuj>5$c^fx4J;C+)-ENR6>v(3<9^x z40t`Jf$x+}O;nJyExj-32lNC4(-*E1vL!Hsq*p03ZVVda3g@_~3=qjcp%dwZ1@+Xs z37}Wnit!$V0bS> zGSiN*aeA90fU^dMM~>k6rNjKpXJUl!*LMomIYcvr^0uFEaWIti%5Q9+=Cr{HR>GMA zU1dXj({^&xIp ziZ+QfRX>Tsa?{nl-4^TTcxkhBYh;55B_JgL4I(K4Hw{Vtq=}egi3#%<&$Ao1ASzE& ztP1!4Tmznt_bN~CmY;l6di)iX(*Ym=pL(TnvZnzDRjQ2~98aW?lxD8~WMzJ)+Grnt z@sC`WVj_YTAP9dzHlnwv!$~^OZUR_z1`sh&=6JoMp3#+!AUmD7r&5^%igE9d8Rtf{ za%Ul1Yyg4?NU6=+H!m!>vFLFP>8Rl5=CbS8W{8ux_JJd?(g$?1o3}}qkVMmT-e`bW z2c`{zj56j<9Dn`lU;H-b7vqmhY;NNwx))3UTta3H3ky*b3Lo{PV(56DlmdG|g&U1i ztCgq={foDB)}DjXLfTA-i20>7`;_<4mhN}47!4R^jjLIrym9j{ zYIz(#TrqkW>*ZfG(7)kVo7BKA^Dk_|AS*X_xG5!`kx(@JHZC2%aBECK#|mCcXY^(I zlL|wbvEIl+q5t$ZH?rX!U`^lKe*VS5@Ybt<)dr^&%D|qf(v?xiL=y%>&KC5S1t+fw zp0x~)eb@##fihte1BYm3Mk`3d)?LP+W6KM2h|Gar} z2*i+&K*|*B$s}hND65$cfftJFAP=e3!EnhUGwGF!b9a6*bM<{TfDF7)`+xXV?fD~! z%HD`BjE{tKB9(vz#Y1XR)cYVFj;HdaSqX``+aFzD%q26Ktxta^K$DxztZi~vh%JPO zaxc`MEbKt$Hnz~!EQCVRP;HSxQWD79L>{AMj-s9jtiU3$lt?x0X6<0Rtxj`%U48XS zaUl)>_28kWwSIbTvD)fFU9?G!uddSxnSqFD3|K7O{e-*2(Vv`K&R=;iyMEmaOql&S z1+<{RN-@-1SY26MES?-QT>J#*(Kj%Z3MuD8R2;MZpZ)hYZr?69+l`|=u8!bmSVO)% z0Ow)4r$VZwRs3OHY3GJAf0rj!ftUw=}0`k+-gh8PHi@-lhJlwv)Z-s0h(e~swEg^*7~L8vvYvL^l{*F_WJ zbgmAy;DxI0J|SImSnNPV;gb|lj<-9|4Y)2rk&Erb>;gqDYMGGxAHI29xc4XeO<@j6 zES|`aat_ydkLRHxDSx3kkyLKOFgB2MI5EFOo9Hy$g2hvDB(U3%p?t*sQYfTE2BLONDM{4`qU>52crAE@{W5;pwS38vwffvABSJsqFM`8(Yb|o64qYWWN zD-zM0R>u&4A&O|yEU?qA*AcfI4VYE$ooP`c=CDc=ZxeoPy!(dl_9xcYP-A9$T$DF9 z`ezdWL1a6@R}<9D!8bN7josjF{G#$-*)b|?jaTUO7WDVt_^+dC+H`A$*5;6Se0`$> zFI~ts$J@8I{k1~dW9L|#;~nz>Q*fbhy!&rNp|C&dOi-b4L`!yxHTa6oyi_QB2Ut^h z#bSYOIFqk@5dA7YRy5d~b^3L`Q*rQYj{J5D4t`tfRq(VyUcsRZA?b=&IJ)wOU7cxZ zAMW%4(8P2V_5FQ)bQLfXr=pcP6?l*RmCc*vXfk*s;dw)tvk-Q?K`;C_9bvI-B9YJW zd$Yom)xq3TJvcbI`$@ZUta0jsXlO0o%sjAyLWA&8*}6ySCW2Fb^A_q08BvvI_i+@- z!Jfyp$uc0-lZ)d1W`m~Wr#L@3IE^%!vkg+%qJfeZpO`^np=yTCgprHGVxA;?KK_6H zSFnZ#(Qi<301gsCNns%W9mF9=ic7$GlJFiuk{LbVUO>m&7 zr$HFVLK5=XYKnVZZ`M<>ZO{l?mO;;vjK<2w=EiJ#Z*8UYc*aSfw9RlzqWP=G4q4FE zk&TJJoxZwtiEJ=7p`UbC_KpeCrhsZWS;lav>(JC`Q4S*;RkVM)veQvDYlKy19vY*n z(S{+wa6{j=%Wy!E=}g8l*Vn5UOMVH(SaxG!8EeE7e#RQL;AgCHGnO^}N;B4|kpMH+ zORLcM`7ah#ynUJHMySNgk2MjW|LHUyvQCVgRelonyWQp39qN`Ea!XIP9#$;tdHi9#*UYSqr*Un;N z{+EH{YE%%6IhI@{B9rUdls6zif{`i}Qrda&^ORI}$+zq6()Moigh2D%%J!p^Z+=hx zOB2JJW=Td*0uEpr_80D9rFu-U45tn|QFO?f(z=|hbI|Zv&j2G)N2mxvh$nmpA+LIt2K98CRfmh-1@b+ zavnx|#3vwzTjofxjCZ%e9+;^q%890*Yva8a6-iJ@;MPieHj5BcqE~A9cQKYB?=e(1 zYtYuZ@wnxfpy14p|BjK^Lwnk~O9j)iNjVJK<7l1T>B(toDT7>%92i5c%e5dF{9cP6 z{x#B9qj1n`R7uGKx$s>zPo8s+hJauee-WypU9A+0#;I@skwdy>dmjW}>9DbFf@oBE zi8urX$AF1DV!u@k`6pflJ<*KnXU;dYj}a=3H8W;kQFO1ac zjAP}(GirtUb#%&PwL(LHfN(6IoF9Ht;b?RN%vcjFQ+N)A!q>70bco1?DZJhR*7Tzp zg1zk_V@1P-wg)db7(TIm8j)8+K{0@?CWsOZZ)x|3hz9%FCn^h$+qQ;`ud>Y`gh?N_ z&hSWh2)L0Lq+~*a44{NMvV<7Abvio`MyFe)O6~9vmlbK8maqUfh{)7w>OB9pVpf-* zU@06(C{l16xIol`_>lIV0wSW^D8K;gwXbae-_CL@$h4h+El9*WnC(Qo=Mz z#=&?C8le9S4h=$AF`X0%0-|hTvEnxKm)}FQOD(LWS2i;jE+bYYXBLs5Q05$!?r4qE zX^<&|*p(DAT6Bg2oJtu2QC6Yi2ez4!N9Y5q+-S0t=ePn`dKW32=~Ox49st4Q4J=>8 zZZTXe{==o4Zl=~~5HkS=x$2sioKi+llk0l}uxnzmq6I(@OvHdi4*@tYlk4c@O4=b* zg8X-S2vp%(gRPO`h`J!=o(TuYY0^xk2s_%G1}Ket(UlGRd{t3o81XOqmjM>-&<%@B zvvTl&8|WM9wGi`5H7rj5=Nk49mBx{4c)W=;c8vW*kF;C%b;JqA4QJY+d_ds0Wci53 z7ehJ`V~u&pf*EV_;D!(h?;*@s zE<-@3Xh>uG+e%mdq^qE^An$Q4>MTF|M8cKb$V;UdOFTl)u<(Xr&h1yF`=5F)@5euOfhukfC^`Xi>-5g-mRNI#vJsSdD<$X&Sw%tPdVA`vx@ zcA0M&Rm`d%JVOKm9SCGU{_~4F2OS6k<0mnO&n_UR!AYcKOQ9H-#O`1m#11elQmaYu}Gkfdjq&6S|aW3~o-?$5g0)m0GlCw*o390T#WpthqK<U&$X%mv35)pK|Y z%8I^49B7GEYlIoV5g8ncn7q_^rrs$KM*|kY3B>TH zVTm5O9pzWZuq1XNK)9dy;|r|VZ509bMPR0E|S zx%@#1ewZ+X@-vo?C*DHF3J`ljCA0`JH(5UmN(I|i^ z_|_3Fq)5lRiwtpe+-vupRNg`dnnhXBj}rkDpv0E61530V=27j!t^^Em6^UHB`BMO{ zarm5M0UY9JML-N<55zNn`=dP3=hr^q$<42XURJjsR(BqWUea#qqy319g#5}Uq7KX< z__Da-X6Lv%eG`o6v=jLS5Qi>dU+&2QSTrpF_W?2;O-Ws((2w8zOm+^ z`1fHc#IxG-EiMXFaU`WT=I+6E0$BQjoKUa~uNP~eN9;yrhvw5Egh+b zx(HzKddzdV5nO!~PluX;!rwqoJ+t0@YHql%m~LPEAjEM)+wxQyEApBcYqU8@aKmZc zn81t`xJ==B6$-;G0v#OLz{?-m@U}0W6MvKGDq!+p&{u!5XsBq0k+uRr_hd+n|g_h6}++>QgYx@VST1^bsuEPS%ID~o}qxs`VGGGlG9M7khotL15%#3+@ z02fXEOhG(Qh;#t*r*!NhsDlWQkzdSI6o_kaLwKu$XE zrZa>{p|uEC$r3a&Z4h<=j1mj01Z6quF2bYD)zFZbIY`gJk;d^p5eD6+!m8`xYN7*7 zode)>&SP{qL>!D(WUDS3SPKZg_pkU0KFa!lYget7SKN7++q^|PoL)cKYnBd&5#c@7 z4OA~YPOn6M5xGVU`5uaz*sx^iq?W2qrU?5>js?EJtmWPoRxB{`&r7NgPe5#bf5E zjhzq9Rdc?ix}#(X0HR%qO&*gRQlTn^qq&3%VGf)Aso?6j%a+wsUrTgMVJ3MZHHRoLAVjQ1!Ee8~oD)Lrf~PO@C^Gjngo}UVCtQ zYJ;_CcD|PE-Mr4M8yw!+{)L+8@~vIGymFg7rG(EBl;4zM5d!!BF1z zsTK!AEI1h6*d83p5KLFGL9^4NtLWr(CEznjS66y-?>`yzn_ zYF+PGIyZt1NC$Axg5x-dK&i!bx`9lE^S!$LfDCaBh3dgZ)i9XQgCLwmnyBWr#sCqHhg9eis0aF>exdG2gemx#$*&=j`-qtHWcY6$oo$=fIc z(^$Jypk@9>KrqN<$*ahI`Hh>mKlq8eyx}EiC|)TXAAj*N6;GSTM}JV8;EX}wC%ZJ{ zUFV86_*4dn!AT46{o>{?|E`nF(<@c2s?>AYux`^sykAzSv~>pIGdC%mYHl_GQ@UR# z^kIek4j>8Ii|{wnd4kxxv+P~Wk7 zkf{&q9Il>tpGC)NS1UwZ_as5otM2XB4)&Wx2}9xlBr7}J7zlo%ZiN1Uwm~$dt(qck zWs7$o1iqJP9G>6_&0$~)pSX4aCL|oV3dxE+mP-y{$Y(O`=z~A17XpufD)c8Y098wv zicnKP3PZgYny6W>Q*g}Y40eocFt|S*%3G;+3xnD4j!C|T(2Z(T$Oi86r;|z#G05mB?Msy;i zAeu$LMtRGaODKc>Q-@X;%wkxGT|N5ZpDOL%+U4tib9IUA_`{>4gFpSsQHvFoK05=f zv8AT@baV6697)jNliniB1uQ$oaF1UnXkp4K58I3 zo^d6=4jHT0wdq<)SGuBYSHnWP?CYbLrxXc7}%E)^e3&CcWvt^hL;C`J7U*#=1o zFhWOZmj!ynt8UZZyaX*H*w{QZwMf@VV+XLb4im$TP6`7SZ2H4l;1^AKntDKW%*C^n z$+HI_0D!meC{A%l@SnOr^k!q?@$K>!FFP#kuCtzjSG% z9&^blNN2OFD@$|fWTh=*pQb>T&X8kz^3}(bRv9z|9`Moy7UkA*EZT#pM%24iE4W|4 zk)dFx!rY9gfU0$o(k^ioTKa(4U_q&tYA6?WG|+^x9j>AXG^+tFu8=J|6PrJ}yqHhM zV^0o?tS}AtfPj`tMXzi*AikRTq|u;NKC>5ZFxt8G>#WtdG{*wfox`vGRN1;)+k4tL z+QIrJ!we1S%tX*u2v|{x4re)QbptzBt9(pAJQ^Mtz`OxE!vV;fD3J8Qz?vIT@fdls z!(lW@$Cx|;fOO~IpP6wT7Fcw=O7%RZ=9@2~z zBDEpJjKV3n-2)>VLM)#1mWf!-_f5XijX?S8oW1Sgi-X~F8BUY&LmJy(roC@ZSCPY)zV}2t&ebv}Tgrgc#WZdTC}F2O{+kl2DFPeE zNHNmEn3cP9bLQ%Y#4I&SCy;@KrmIz`4@qF3vMMC{7S168Ia#o!#akBUtAZ))1SuSq zyF^}spAt#wwwtgxE84$(`QlC% zM@PpL`>MLgAYCQHoq;210#Kux=Hb2q&Mw_ZEv!;o1R~Ld0Ic-tMs{rzd5p#_-vOkv z1s@p`oiCY4&MqeAmJ&1b_{!B6=BR=g73MRr?n|5m944VG&y|;U$ zQv})^rlH(&qSW0S@Y-VQg&OI3a%r6#M_fdEtL)r=`th$0zy2fg6+p(p5=~mIP-;Yf z0stU3g=5fJQnfNGmzc?j2*)%67U9-;2^B_C7M)y>$S$^ZNuL<~haIgxDS)UGS4FXF zN>zGj*@6BsZ;8zIlBZj9LrgRFXORSy3nyo+$Qkhs-<`3d6EK#4zw8ZWEPs~*k~71m zHiRz}PT%c*)?vXSRy253jJHn2a^8OVDtxkNa5O_eZhKJh)zpiF)3;u+<2A;$`_>r@ zL01#SF}z~sW}o0~6y?8nK2bH4tE`k78~arb)o^VH$Kr_U>{SV&Eur2$6EpZZ4yx4- zk4sPP5i$ud!D{%5uv;N-0961J=}oK|X7OfX3n=ihFb-kv%yCm&Pu<)<=2Dktc_-35rwL&aMCf&iY{+U511Lb+6R1bt z6&eX#0=p0jMWqj3fv&O_uiakGUtP?sWRr7gkB!Zxxw{ADKYsG*Z~y6cUlqE|sGITP z`MLROF9um^?QgDJtx*}Y!6eE-7n82&ls#7pbB^>Ms}^$FQZD(~gQt%^{r!^%-#mG? zb9d(;JHHUi&UIQXCMRNqVq6L2gb$!Am=9Tq6LXulH#ewKdby|E~FFvxEC+K$cltl*A{0} z?q~O(Kt*QT*ZOYAf;LI4>6WZ7LzVIau@PDSA4c-GRXqgtKpv3@obWqKq(aY;a# zAT+4jL@b0TItgat5!fx+;aT40jCIEZbY6k!Vp2D+pPr|_ir@;PdN z%@a}vwrdC5=r`uJ=DAMY2fo4IgP6f$g1RJM0xbt_5dMg}ni#2mEUJvqQoBJ1hIM3$ zO16YEt${~0C1|z#2=&YS<5+DVGc^fipeQWonUziGgf`jVt`*6|TKwRzGV9mTekf)k zqHq>(u#5yz>W0*?2t=TV;F^3E4z^0I?Uwh|e(6u!g-<^J>d$}p{p0`mf8s_WS(GVn zIKPi-E$$^VGs_J|TygQ!53mCXPuaB3Csj)~3%KMcT+$OTF12zgzp%*a#>YF4pu^V5 zLHWs7rH7xlz0B;=1*%$DlQ@wvXNevfq_TN*V3@UnTDVw|b&#Z=akgm+pt^HwUu8_WgHgrL)+x^)&e zpB8F`gXgGFR8$cHv9A#fW~&FrfW?)I%sQmni>}7tv%&4t2-oCvCD$e373~ed3~daS zk{~frokaDts8U^EC!uB8`TUhTkTI&xc~%k@ACEp8Y~(VGDR@Ml9gM#d|@uLUulqxz@^~< z1RF?#@u`&y>Gf;KNOXX>2@nJ-Vz|IWhLH*&LfygBM}&8kYK^0l;?8j~mCn@AgNjEY zTs0f8X}=|GYJkPP&|An4M6)yvddLT($A+m^n#?J_Iy$T~@>cA2IeId|(L*sk#4v!l;`Q{UeLPeCzsN3r40EKq@^=iELePLK|m z25u#PYhATJ)aM#LUA4*tMq_w%eUY$BGSz@i?2{#Tu zK?nQ@=v(?4qiQ%sffeqwwVODsrwd3sMqr~Aqea8>Wo=Jp$vO=}$a0#7rE)@FZsDK3uL+6f$7qNn0?*Qu!lCP%kZ4X}@3~#-fhOzxT>B@Hze@c6B z7Q=Y-i#~hw>0$z>-d$g^g!r&SVJu#xW&Pl{Mx(Ja}6w#1Icy{s=HK0*!rrfTwqof<; zXw%EhSjr`pL});m0KE!+LYRs4AqH4Vg2<)(cax{TKu>NamY#(bP_2MG$c$@2QM`F< zb2+;y2nO`wflUF?kO*GE21Ld>xmJ=|-f41Ch=lu!r{&WY83fVj2HmWcPn_JsVm7h9 zI6Jejl+B6bKC`@ror|&;9EtD-A6+XfgaM55Q}l)43NdqlO^58(BnpdD7%WBxfQE_~u9?es*hXnX zN`w(XSYQ#kONP39jJ(7Z(JTomW!W6Ixg8or*+PqAJULhKQ4H_gAU=IkHUKFA4waEN z5C#h}+7JNJCZQ5&a*!WRGPV)AxKoQig{8FgnHEKAKp-N)(g2?z7hEDn{x-qfT zoTb)&$BNxT0U<0|0r3sfVyxhhcP=pn!+RJr*6S}6hIhLML^e#2J318+i#=}(V7-&C zrtfVJUmOgd%Mjk!9uRqT{&W>=Y4>mUN5%nL)<$RbJ0rzQ&;f^d&pNb2Tj zN@_{-%V-H`Iht|MwL4O|NazZY1EPY`=rC191sxZwJJjNug*?hF$kKbHLs36sPt=86 zTvPi5I5IO_+Mc*f_-8FbFHgy7maft_j;E{md(fp&O+W;s0}ugt8ZKh(rbKH&h%y(E zE}YlFl#i&ES---$+-a#)E_I`YVv!q8VJ&0a#G=*)G8jAn(Th8^POp5h+dSF^M+7ug zGqa+eRJp1MU?&VYQ4aZ)3oa~@&T(HDyuim^vx>%pg$odo3Tfe>c>j~?&Vy$05OQL8 zi7H@l*no;G_JWp8b!B)!Rm((>S%m8Gq7Q%(BMtGuWSu(mG)<#waZxGn&MjIxzg7U{ zZ-g+$!9;mwE^I&PDq^e{77>&9Cw}u9UFFu`15hl&EeT$C%UgFrH1sEUjz1RM zEF{M(?&_3%x@0fNuaDZsv9v>I7$H^N5k~93X|A%SmQ60|8d{3>MUU z7FWdYYNmtq3Y>Kl2}1$;hT{#IP|s05o~)ucg6}1#|m$F_gyhWYC}Mw z@Lb*Q!6KHueo!Ko^G?1R@<9msDulN^d~q;1mm#F}D%jW_9LivyzRpdLuGkDiSG@Q% z-K!n#QO7Jj_^kNo%gWPxnhPbmh00(_ zH!bu=pjwZ`F2r*e$l zyRpyQ$)}aW{YvSidbkUgdL%@Yk08rN@u+dIjgZEaMo13HibWD3s$SF9+liqm(!&;e zm_WC1!Am9qtYm&JmCem&)6Gs-;tVcar8T<8U88#e91sYI08XG1K@yCBDL_CQ??JX_ z1K4Wum2DO9N?KK9XB#X@&aF^MWRH>%)x#XzgR=_u<=1YbVi6k*g2{*8tQhGC4h8#K zilopOfI?^B7(sW9pG9y2i@6Gu2Iw}fFOYz0V|DilBfu#PCPT^~b7|0R5XsS&PoTZ!4^!!h-Qgd z9A+jhGZFxzH$E30lzgRcBjdxGi8FF_B`A``{Y2J46 zM{Bwj#+X*MkzCsBR;#ENP!5U?0tv)}1OocNRY)3|8gS9L4!sIE;8(tARW1#6(GR*; z+uLRlIuM7Nks9zt1>r2@C7Xn3K>)OdSDmyZ)*_@SJWRq#$uzB%o_q}}aCI9)vXCP|f>yZ47&pKXJ&eI&HE7_H@+-$O zhXCf|UigX2a;K(~QMrTU;25rAscBl;qf>IrMCa$Pz8{6oFuc1->YFHJ6mx5P&oH;u zkDgm~*ceMAImDr*GfdNb(iy0aj>faI4d7K5*mgjrxF?vau4V=40?uG3XUUVK+oM_B z>wpWN=pUpE&?^#33HGG#$VFr{5Y~WG9w#_;C76kv1t117iz~J&Cp17Q3b3nfKM=L1 z+qMu!QHe$v2cSycicPesQ3w&i5jA5;kbz0G z1`VcP#^hxz%WdKk1F#5{h`^nIuSB-a!b2Z@@E$eImX}3^s_s2K`SPDm?tOy72bjXm z#I;lVqxRaV*V4q4uj`lthlDFNpdI zvv3U5X=zxO)zdeMY`f7gsZQh8x(bvYz4c|j59z9_IS->(V0^=L8Ee#je}Vwg*J610 zzrv?B_zQ*8bi0So9epQaId8apWnbSk`RaVU?ZL&t>07V-#`fUItMjKTe;h-=%FQnZ zUzcsxEJ`^$#sjV|OTvkB3B>{40uEF~fQDph9(qqC<^m9v-RI?}Phc?^47y@Zb^BqH z0ME7rwSzApjwUnhBWodkP`lyDt?M)oxLjP=UJ?%tz(IZ{RUHs2y?U7wxejJ5z=(cg z4^JFt~m&vI})yKyT=;VF|xMuJXIN`yI%cBp@$wWuk+i>wtB zqFSSvg)W7ED7CnPc?(p+h9%;#7LurWQL*xJc^Cu&OXS6K-Km_wD4Y#%a^e}hp=hqiGGv0|MBH8&=CYPIC$S$nJatkyFYtGNJ=<)2uh5TI7<#-6G z-Kf$fdg9G30)?!lNP;=d=C}kml1MS~Ciaqq?`G#N&8FA$GF_n3>=J>HPsCAa$eU;! z?3A9|1z8}uu6_a~LJVvSDq_i)rJD8o2Gd|7=nNxr*R}{Rl|in~;850Nv@EJBd+FxQ zkN)D;a&EWWIM{knxc3RQNZzPfq*|b#!7;Rej8xls2fX?Xhi;U6*s1CG(v}jYJ z?X!83W=TZLZ{B9an4KEW=723)L&T!+$^tvBQi-)JwFu~NuOf`mVh5-dvNul{x)io8 zyldWZ>bT+s8FTnWJzPbccRt3Z5q+|sBPpQ4U;@*iNUCav;a1t^ia3L z9K-oqwyO^(rdbt+ZqOQfLuUONkOcRDM}2a*_n%Q?imKrnxB*Q#o~Ed6C1#hwCYFv7 z7m>z0VKAbPP}Hp}7n7-Eu~0btVy*hgp`%v zxP>r=Z#uQO3V2E4g9K@cLyH5ltCyK8mtDJ>$S=|+DNTSQ%^=m(_qXv9A;9dGn!87Z zYNgs1n|7hjjKz8#PZ%llM1Yo$_7C^>cAxJb92Z;h)J)24;Cd%*>*RT>An^*#!V!U- zsy{WFCx_*y_o7lJ_;o4NkuD?j_IbtX^7qosDV zxVKGjK{`5f^!YyyTF?lIq4;Cgt04qXOSMc_HA#z8jCSncuyul(?{Ed^Zbjzvf?FZ}vD6==OW)!6Q* zEBOo#WjKSbB4^VT8B*zEToNoBGIWe`fPhH$MpMFN~ZI1 z9>biNzxIp$Km1BpaaI?0w}q~ymBzLvJ2VlZ`mGk47AgVa4bQVyrNoJ7U_-$ijDrK* zZckDrFW&*4aEqgRi7`l@WSHntuzImrtGW&D#3f!lht+!hZ~wKB9I`~E&;dD?H>l0c z&(A$PC?9u9C4fM} z%~SLWM>&B{&=nlU?YCr+#A;>xG1?g3`M!Gd$#l?=(gt}1d%yel42y+W&|CX2lm-z{ zGvycv%xwGM8n;}%^)q_KJb=d09yi+t2-NphKYXrs@*3h0Jft`ngJesnU7NWMYx0i95g_NeV@kcu z5rkdfCmr()P0ii@#g(7`&HwnpI^EtWwhp(qX0QFIl1!sW9scQ8xb944FiBusUnfBU z?GzNYMZsm|oJy%ZGtXgwFOpUD`4bAb5rL|VI z?&UYyCp&bFfcI{@2A4xtiiVleRGVib2`cQ6E|;kKcb zHjZ9Af+{^4P=fb`S#=CXzv@ogGyG|I32pPm701q@v(l9@<*7f`z42IiTX0hk7!g2J z`*Y^4jh#Ne=byEI#^p>nM=7+g<9qDdk>R!V6hAZBDEUMkJyXZ`%nthkRPBPN6bk*_ z9^Z(JZ=2xc-^1sbi|6=oZa`h**YfZ2;{-e38U^c}d=);LVG7>%b14q`gtUpK4F<)v z`{`nnEal@Yd-_Q=wPNa`6@#q&0KmE<&r@zJ$F4MUB z9iuB?g{FvXAh!vy=rn7zgQuIHsIP%FCa4%nLRT;ck^qhwqM=y$W%1%B(U8DU>Cu;T zNP?PlO=zSn8ibUXvwjWS+ zYH66Ku$p2j{e*`kPpc+@2<)Q&5^&LK5FbE^N<$C|Tmp`iw)uvv(Nv4LWXOKTedQaB|^~{@IjI) z-J@E^6*X*=Yj)uYVOc4Ry09|XMCilp)gRGygd8F#=C1#kW9pIkHwTsH6|}ZKZ>~-` z72MG!iE6rVp%c|Ny<`Nq5pIpH@+*VOILuu8VD`pO=I?ye?nfcQr^VW5zyHURFF&TX zyKwD&C>i;!t;4ROrqhoA)h-(m-b$QoTRJ}*w$!A~d@OMZ5-~Uzf@BXN5sWjzq!_|_ zIyn>^7aUBbHD!L4+rdg75y+umPE^}B8@@!ax~^ci)(*}1Z)<*ArmoHHu$`o5348fo z-zp+&A|1=G>%6?JJTiH3LxABu$cz;twIQ%jI0d(Rh}_Y4BGwxZSW&;%%D-C9`Ma;e zM>9;>+a8?D5KtVPlCgdAP=@GP5mwWuD?VT5UnzY$nkG6}plw)bgu663J?mvtQ8(9a zQ2T2a?*0*}29oHsYJ*xEt}HDj5|@Av2LHGPEWHp;3YuUkwK=&Mf|-`9XxP@@CD0+a zdFz)~SC6`GERg{esQ4f?+3GsvgJZI$P)M)>>J%Ozo}&$2YmWvg=h01co#OpJlgSRd z=;G6QAq^|%Ef#yvmalQleiYN`a>y{^SckpXi(Lsqs#oDT`Uc-nlEZ&ZFlJ@v5gV9| z6df916VM>hQ0crn^plnd#fbnhapaiETs2vPSF*pULGwD$bZlsmm~D-$-B=~v7BGLjtB&2Q+;cf4x@=oHk-;~s7tt| zYR&$#h?}1! zw`_T7xl*Z824%pJENMr{*rtopf-Na19i<4!sL{AZwke}G7)tsB)ghW%&Io!cGZm;K z&%gHzoo|>BYP|VVbQ&~8dUf*kA20%ndgo!2Pr%TI0&+zmFVqx~a@l1O@chE1F~SpK zrr2bQTZ4MR7Vq$kH7XSPL1CichSzI&|JH><_Dx;^sV&hi<7TDMx8>RQ1sbv6?h*25XeGQrclBx zdO*vIEw#;Z3j!-b&CbBt%^OD1Npnhi+JEbtS?>iA;t85*cq)8`T{hdrwHAs*f!pw(U@(r3Ns*vs-=ZK9%v zvc@1b%x6sf17S(1THm}zqTxvPv)!W_uXHS|(O1IUb$X7i9 zDUF0^*{Xt!v*mg)O8Dn2sGVE3C7*G%6EH?~mC@4y^cvkBOH-5WjtVsll7NXdI!^e2 zevXuyZkrDC6L$bRa=Kz}7LCeoM^)G!B*!0)re?1F2*SgPN40n6+WUC6u+mdm20D?= zG@2n1byP~Xus0blbM>7O?+b0OVnpSZzC{r{zvE3ia z@Mh8#K&2;-|FPsjtBH%QEt1n$ZN@ASyy>@#4|;aKUF#O_e?dhCKQd^=E2LL9KDc`E!BKVV?w35; zdEWD|r%mRm?f&}zs>yPJB@j$X6th&Tt_Y%fk`&r{j0KsZPAUss;pn12uw5JAgA9Po{5*re z!=C*paL6j=;DNXJWZRnZnJRjyEL1t6Nd^k34|3cU*lS5C`7lpzEt)N&rj!LbP)JnOwVtTnwhDZ&)sOQO8VS*d{&=Z_KIy!2C zLLsl9Lg7TQSW|VopTCI3%O_&J70W+6Z>fA`pWg@h%AeaFt~h8LQ!ftstykfv4W6fV z)gS#eRK!soWx!Zag<4G`6mDAOvX@DFnJfwIoocgwe56v!B9LM8`_LFnKY)SQ1|7t4 z)oNin8a!KP1PDMYE%(G&h!>i(DiXhn14#WJUk6p?}?z-eZl*ey1wK5?fOoyvU)UGO#y7Rr&J`I=VlKq!?f zqSB5UoKxJH}K_z*vcMxE@>Z6L$x~{YXc##E_S=pdI2ydZX(I{}q zjab$I4Qi3AYvvvcg}2#o^S3`j`Qya3#kqDO*DMNoAl-pJfE43EEGLaas5YAtW`eP> z6M;C`&Ypkr8&iOQ2IL|r0JcNn8)7|gD~~cxLscxI_)GfK%FqAH4}ba*!*KZUtEd0p zzuEuY-@_%)39=cksm1qxkxhC}_KqI@=HD{QuOP~0iS`*5+BMyCxS_-h)vCfIf+EL2 zM?$f>>QP-|)+Gp(UvaPjRk-O%mteT~Nw_(pD5yyd!s{jr%T94+jpXyb{2CXe7ElI- z88MIx1FBJMm& zT*P_@Si#|CNB#lc|fRj{%B^@cL2dnh39YI3@gR&_mQs}aih zD1*pa&iKs*v($LrY!WVzT3kSDY7{HYaxJw;T7kFt)4wHlLFAd@AV3QsaaO_JQ3a1VR{Pk=!zp~I!oW)Pe>1Gl`y1W^CdWti!MX>}luaW*O!w;+H~ zuL6bk;8J&yOc%gH&TYb!Bwb;^f~6LhR&q(VSZ{+$;1Os@$``joU^;w|Ub;XBXcOd; zw2OKfPuS6?zbW4Tl;drA8Q7OT@V97UoT?VN7BpiphYq1ip4rBQaXFIXsr^ax{QOFx z-a7j8uSvk?uKATLE~qYh={k3E^x#X%g^-XvGNlyQGaXS2rU~Iu69t8h6l(deN!N_F zj(me3OwSX-GYQQ$;30)DlX<0mZD)`%VXeiXL*5?36-3LMc4WWa0!OmPC|28W*hx|v zK+GvN4U^B-!sW}0xu=DCt$0iwlLIM?W-nY;8L~u$mvoH$l@HP@n;Z{Bnk}&di`VJ~ z-}N*ce}s+BGwtTPFi~_LPwpqWo?`@ z=Pq7D zwxJOVC{n2-YUMxZiYbTsu? zSWSpJpv*(m{bpsO+rR|4z&4iyu;>pMz%B5}RTzXpsJiAd@Rd$R=hjjQuekGw2!2Kb zdpm*nj5AVJ`SDj6{IOect~a}YeunO)7$wp0w$e7Y&*;;d-06$xDrHwufNbS#;Wmwj zkhj*Lt@a0|asY^C45|jWL8Ok>j!k~^*hyRF`QvT#K)FG2U!`(3=ClkDQ?>@~k+0Ma zI55uvoy0d(<~HZDncc7c5ckCVm%VU>zXb{wg-cE$p>*cPPq-IQG6syu3|6AZnlvKV z<`UoUaZ%|~el}!YRaJO}Ieen<-+w{VV4< zZ`ay5Z;^a81#f$ZH3vf!2g6#gM#lEwP=DrmSd2K#QHd7JDF$ zRQ;q>d%j&e+%cCGstGgZxSf-)KSsp?&Unz$CWd#u(jX83C}4=rZQQ8uZBcC;Sga%$ zz@gMg^-UBM%`?S_xg^4ychdAq@VdGOH8BJ&wVpC}hl*VL@jQs=Tq&n4H2CdB-7iFgR= zaj-~r`%&X?8%B|$r@lFo2QaA+fQ2`+2sr^C)ad{zDPG%m+q#JHAX8BD{TmgH$Y=a0e-^5$kU+5raNNQ;qV#LN)JC!j=s(rcGf` zho~4v8bq|K?aIVS<-D5B1{F+nJuQ`H0Agf9hQhq+(sHu_9>GW!Jqr68IEdin2##1~ z(9$;mFH_X$J)~vzMEb+Qws?^VpTo(0R&=Hv{=-+fknVD%KS_~g8>o!3ZIUNgtPt!N zO~PS(BK2i1zrS$lYQ0hfTQOq+Pq@JtOq9H}U;fuL$t}0aB?MGpwc9dT7b_bVa&5Y+ zij&&xDYA`n54XwZ7*b5cSQ7=1o)z2>!tfqo#+sl|7r4Jz|=!#zfS@HFIf)`vD*$kirZcwU- z7_IGXL5lQ5UF3DJ4}r~Oo5c_R8q|O)U@}gDv~(Uo+cLm_IaD_e(^V8xT1oU&mKHc; zX}|efKgDRp>fGWAS1pRNrp3WCAhZC4ahr6Kp`dYo;#$-$nWHB>>S0ZbgNf{qDvSt4 zqmptBD?)Qc*EJzi2cc(9E1UYjxvCeo&A`sV##p>zCOgH7u1YtK(E?qk^E#f0sgA_c zbK^31)jV@;$cY-X2KV=DrEt#ebi41}xXx-j?Rpi#60mC??Zwj>jA*N~>4WVjRarN> z&}+1`UfJgEQPPA3-MArzK^r}KDFn;X)HJcP&x>zEm1|PQ3KxzQY=}A-PMJc`6lB* z5VQPSd+X@ry;--_S*nwnRb48Tu8#D=Lnohg)?RyUC0O+pwsQ@Q-t*IlyXpb3RC+JS zG&VOXcdj7=2W%mNW*mSK;3u}{+AU!nj6*$Q2ry#j280p0gNwpE9W3J3N@l#&H8o5I zSO9>40SYrBs|Ys1e*m@s1e_Zrxj0vZ|KL*CJ8|~w7f-c%gLl6Br}zKt|Ank_dINaT z-h0ri?b8^bjFkukTjb+hKFOEhtEg-9V zTN4?8?dX~7`S z1&=YgoZs^b70we7EP#VG&SHQRisW;e0pND)FA#yEt{hBLSz0S69YIRz6-wmJ8(<>c z2hxFfZ1j3wtdJ(tWhn@oDu^URUfEat+CgEbrNgW!IAW~J>k9|NB+XQqtJ(Rl{Oaqc z=60K%{oUQ_wRh==Bxd4Jdyvsdc&{nc?o(JcJaH213rVS;0n^d&*)$jZ*`lu|TQf|dZ9ned;NwfL{FLB0 z(gq(!MUS-b@zK=?vIb*=D;a#d^+3vs@)=JMu{$)jx9j(B@j0JBmH-Y2$FOaK38+s( zL6SBbe4GWQuvAp@ zB};Krbb&khk&C#kJVOr{u>lt=V$4TKOK7Akkw8oInPWJbZvhS5moh8E@MQE0s*k$>I%%ra zg}exF#|U$JhF5*K$SK^BASr|*)~|K*wHH7%aN$~Yel%crSQ|k99Wa}bEd%stT*23* zyDfMWn45yO;S_T#r^;uqFbE(>23E6fVAP1^ki|nwoXKPG0izsaihiwT-usWda*AiF za#;d@1Vgd6NXN;=#nS!V1K|EkFTVJdQ}fgt+NicRKKSA82j7$8&=hZWYmzVmPYyVu z#>JlM!!f{uEOZH@M>Yea>pnw2Ok|z?{rJ=4ODYV~k0-`D{y^cBYWK;O4L|!N*31Mc5F`{w<*J9bOmDY#*M%8w_Ywrpvt)`ZGnA0R?IGl zz+3IzT|5HVIfMp^DzS{Bg)1Q{!dMc6Y*pV=VtgCm1zLjrI`O4nA>!5AyxZJ;&}%3g z3xH)f1BMBfE5p^GNuaWzMnFPr(wv*jE$8M}F=65uhz%3UM9;tcDvkc$AO3^gcmIND zT?EyU_6p6llnJd&1QW1B7gkO{eE|Z1XiyyxMc@XudC(PD4KN33;Vio8%IDe6*~5oo zn1qc$B(xI*Mvppso2~sVTJHM<17x(^TJhv%sH5hC8wc0kt={|y9W;xKq%J2f8EWf)XxePa76 zFenJQ<}SZR@DA#T(~X2{2o#11V++N_hd@IiLn}&rs|E7foJmlmfGy* zq6pHliDw?Ud;N|8C}2^fqfSw&Y``VaUVb!3&7mvIIMpBB3yef|8KbjSpW8s7s&u3&^(O;-act zA&8VCysFux;bY(r2;Wd$1c?$RpNO9nu1d1Nqx8rYK{;^*+UBpkhSr73DwMB*tpRp; zECy_3S}XX9803LmNv2IknB^8$qT(#@$V69jrJ0$n55E86m%g^PynOxs*2ll|Kclz` z0!hI@a-F>`F6gEbKm@6da{2O^%Yd`c)HyUBOaryn+_=-)-{D|6o~Hw#182pEx@H$5 z3hz|5!BtX@o1ls(Fa_vFg+8yc0(9V96CU+YM$u)OL0M%YUj&<+oAK!odMM9xFc-wh z377?M2WTj)oMLc@ms!Ii`tBhltM?)v4hDsto{`iwYx}}I=I{>U1ju4!FHFW=O!E{( zVhzi43$qK0{W#Y-Ks8@6-}8uz7uHVqjV2UI>&c3pE?BvtlMJi@*3j6XyrE1znO1I8 ze{chU;yQQZHbh-!$PJud0nKm<2&}n%&wV$*l)NWt6nJfPCLpqaXVv~kZxDecSlryX zXQNtkuUhwm5J-&^01(*#G(pSTDX2ii93N(8mKh2no~@mGEwhvGGCn4*m$3yrAG8x+ zwe~jp%^L4nIW*hjZpP$Air_12GC-il3>szCbq{xk0=##XVPK)j#h1Ui{MFx@Isf9< z&aKuuy&zu(A)TKuTv#kF7c$j$@4L5lKm7;)Bc@qaT(U!`7lh}36>yzM5!G^9_(~ZX zPTPQ-v|5y%+H;qGTBx~85{CjDoHohhnC9W}xxktK_+yx3O-d@9EO?*bjCK5h!l~5m z(_1z?a?7VnVohf{`t+lO;m?4%=#!_frg0XXY|Svew*B~ngVRf|{Dg^?SJR^_SFf{| zyCZ{p3k8u@zSo{Jd5W~&PTB_s1$y;5N5;hkS`JM@jD{AGkU#(8FA!`Z9}su}0w6GC zWo`pdi!i~Q)ab3<`|QEH?|z#o7?B!NCC8chWoeJHIpS;VF+if&cpAtgfD2o%!b3ox zY_^NCs zpasiBmbkN%_Hxr6!ANi;8p)?7@u_nbIe-FQ#W`d^@{Z!LPRolubE3~TkdeuNDl-T3 zrY_W$Iv${4Mhq%wXf{_f0#ZRJ_KU`26JWerU^N+io(m@~%G=4Z3ps^RLPSsBn=-^Y z(7}P~6DPS6@Q%BHMo?3+J|X!GRJmoB-6)Pv{PN!c@o3!&ue5Q05WKLtHlO_tNDh=q zj|%H&nP1*FEm92G2C{Kle#{LEW7#k%&BY9Jrzbjw=^?&SzHC*rM)y2i) zb1UT+R?F+<9FXaEK78=rpZ>$jr|$r2Gvzt;f)>=PcAKFQoVBQ+HJr8!5+j7iq6cPs zJ8Yf@6-WWoDnG1l=13a3!JPqb{9qIk~JAhCW1 zOh?0?NpsOhv6ruaW1z2&!CCa#4GvB&ILNt=A#9(JHu#g{u143_doT0i7VVC)`Z9v* z^$*hq)9BC3OYm3q2lrqOU@RgP{aqwpGylTZxB|i>t|0P>VAsxl6g;3dRm3yzO=LF+ zeYh7SghlT1DV2*^KxLJbX4s6uWFQT8YoG%>mIELp%oqoNA)vlMV_&~?;s;mnUi*H5F{Kkc3=w4Fv&>{2F;fZ$GC$O>O zsP7lAyhe3xEk#@0z$x%b=qU)2Ud_bWybI}QA#GN~vo4JtT@!q?+RR6rftAW((rKGI zc+@q^EHwE!_!8$c5FYJhz_FX6u^zwXMs%K**!8E2!_%mNmFOKU(6R zU!KDTJU!EpH`XBih+oFJ7ha(qcMn=0eE8wj8@F$O$y4Et-P%W+wT*h~`XBtC-B#W6 zM&arRD>L;2gTHivxGKmPu*7Jj1F7wq9ru;vHa=x>u@L9;`sK1P@yHV-ju~(>6X|;* zftE50t0c`K%3gZ?S2$z)%|8J{fF$^eh+E&B&DsCBv|9rJ zKKPIyi>EG$Myi{brq`Lf@_G;}@&)MvT&vvp&?WQ04m=1@@JOhXuC6aHmb396{PCY` ze*gCYH(s64L^)j}miq3T2}hwc`+*{o*`?F)K<&yNohJb>yQnRf|AC5layzgfxC-uS zVd)p4xY!o~3hn*u(0tyh53&3JhKnF=_LFQQbA|qVB@bWSa4PlUvXSN&dd-)=*qMJnAxDHoyHm(Z{QkKKD zZlgw~AuG&HAHcXrtC1s2jqVt$-yCvBx9Q?Kyz-VKK#e4X(luNjFd?JwT#!Ip5Lxnp zn83K(q?@4?@a{X^7#Mx!07X9RMDffa*5=Jtm(>Dt(HK+4E3sO@8Rr2{p~{f47vgBU z-mc&Iboc%5vH1ut~&Wdmdi#xbUkbe{X+3ZX|B#@{%8a%kmm#_W`R zEv#g}(&MwnB-Zeec$1yM!_N9qfx@93^6;%6MGqV|YQ$&T=ErV(J7D8QNwp&sji$%N{oNGKgVic`{$z>9}ZpLn>_S6>Xv(q9DW zzVJq$10G*MUrn?m@E?Diiq4-mpqtk9YJ#wR3R8wh`^6UKh~eQ=25kjOM!&R-r8fiw z((VpIn%K8U&CuXZ45c#Y;1yJb#KI2~J_Gm#I5_oN|3dBVHH^a3W<-R!5xfZaz++y( z2yHy(Y{V|&AtAzBB9_X{UTZNONZ?HB*$n0haaivx6HKgJf1m4n@QZexJ6$CC{i6rF z@BIEBP}|NJCJiXzHl;Y4iW$@r2n`B?c$Qz3EiIiozjNRepog{68w@M0E^>Z67m(hkt*o`# z`d7I=BK@wZ(eX6^^e|QqBGIIKcR-E6R#Aigumc=&aS@*M_h^fX;@0ja>jb2T)Q@i! zf@BzmtuSf!P2dnFiOz1fd3Byl?6zK&dTAAS1eC{!8GNQ!Ih2abgGOaMnPo*G;W6)i zDug9*dWxh3z!6Wb-3_ z1*SRUyoOPHCmnpxQwkjf|L%oR+e(22kBtAG3c2XCV9hG#-Y z)u6h_z3UQyx4ax%D8feG-}A=4bc{ae0~SiBELu|@uAlT z^v%g##l5hd+Gb=Ge3ILDaU?N2S~zpzWh;#rxVNV}N3c&r7oiWc3N})tq55Y^fR$!F zuqY$eD5>4M%DFf!=rxg2n1vSk!({hb+HU0WbK9_{4 zT)ESza&gchyo;&k2T+EXYcNk>1tt!3MGz35dO!(NgV;+MerI1;Iddt==TX>aqL4Dr zg(Pfs2X{7iw%+Blp|55u zZeu`G^=Cqt6xt&6Z~4S&C#G1V+PCV2w3bh3B*>dFV#>x+LY5n+x~7U|3%$`+ z{%`4ujuFK333mmK^$!(h8SKy)3N8*>WzregC|5pp?n0&AtL$#UgK{E#D(jZBIDiSl z7*?sWwY_0iuo7NM)yi|4Uygyh3e4aG&_>`jw|pAGJ)d(g8LR3cG%v`Ggt1tPG8q_R zo-~g4R{eS)Le5CIMDA*4+y8QOb#&HHbkt{(1%|x3 zyq#<(7vZ`=VjSd3^pdb3qLiM>l7utoUxHrB$ggq^ga{dAnbI5;l;!zE*P;w3vdNJjS3Z3O_GSC6 zZvkIij{~U&iZTf{rU|I9+g^DZx@FL=0~|p!9(MyQdI@Kw*~EI>C&`?|^I{iVhUJPM z;~2P++c>G4=AlK{E-}@-N8B(<09W}%(2s*}7<4=iMA0SL`t46?42NL@;W{LYmyq@o znDZ)r3_IKpoi&YD=u3l^a5~+$l!67OfSkUq+t;_NjZU_FVy?72TLyYEwMi5#<};jh zP^p^BLs9ISnS>Dvj#JvC$mljLF-xpWQ7Z-}1 z!SKdz{q{TG+yD3toaKS3mTT!DFo6bPn!XSx@42R1cl!9KGBoC>Yv;JQq*_7X_G3p& zJsv?=-aEE%S_=Um$p>x&0jmVoGEQWIL}s?nhD5mRF-I;booHKRx3 z0~0XT1i|}biLu5I;xSwsrphRsQtdv$vSEtiImfERdUBO>CVcWUA0iBb37;55cw~S+ z|H%Zk78m(T)mrH%rM`M}U5s1s80xD>F+Q(<<=|lI7=we4FvfP?<4dn5r49b&=t>WB z;It~f04a7B1m@0Z3tbIH)zBosN(Xu`sFTS6$v`&0tS(1|h5E*wC{i$m12CNAfZCm_ zzxB)C_`#k1p#^KGNCR7gk_kWnasskYtPSxKL=GGV3=JEtAp@*t{s7@?Gt3D2D1P&&OvqLc}HOQ5W0YR%Cod6T@aR8RVa-|Pv-{XVsFTj5P zutXF}#w zI9=bZS6jWgGnb+uX!rWf{cV+kxqpL!#brt@w{kHn=dOf7dV6z|9D>HiO`t023%~f~ zSI^Al=^iO{Z`|F#f6!_`*=*fwk%U;UGQxsHkriD|7hN$H*tCiq$`(K^v{~RXj66O_ zJkhNDSD+7(i!s#Vy4p=&?GNuJ!fJg;Ea6v4)aw=KM&=H1R$My=CT3vWoSkXWExg_& z$r-&4D;>1WO?fg(T!*{!ohP>%?v#UU)>nV4eCGMJ zbC)hH7VjK19~?AKuPh+U>huSd)DU=TGsrDM`pYt_bvncf#m{B)a_U#7L^D_Je2UH3 z!pmRpRUZVyxLw&7S(Q>ELOPC!ym#Ae7IT=(ay;0JE<_mv(}Bz$JmmK%wiu}Ks?YsM z;7kiL;DFESet0~t7|R2NKT?eKlL{1mk)TQ^{-uFJKllp*g%gxm<6At_O01(H(utG( z8tk|U$2@#%YpQ?pgaupCGcIqR{K=zW;!&m4k5XSvXze8Rl|O!b_0_|t1i=LL)p2Uu zkAj1bjNv40+@ykoKd$s@a@yb*Cz9|Va}5nsosPsPeSnBb*}Faenr#WdVg5jT)mJj% z%;N0n=MNU|9(?)^dj_g-uvg{NxBk(8{2#lq*Vuah`-p#0tE7wwfkavU(yz;Ya$l7M zQzqX=)=jf4kXJg!j|Lq46GFI?NHgS4ayT3m_4U~guDVP7g{j33RG z))zLa?FTnL<*eq`ZFnD=ad7qRKiawj%mR4THt)&Vq1^)fVbEY6n{DoRI0%uXdW>B` zv+w#UkgM0X)+e^Vf^Hza-~~~vN2_PtPQr6h$Gav_&$I2kz9Fi7K;}TOqiuP40dK%| zlG9;DJEIca07RCa7hFN`p|L5S9U;dSg%lI{X|Mu?bxja=bnRFu&CAo8FS1wC)(@EkYJf9lY zTP8P8e=9dX;CS>{{noAp2m2udFFAaTwHoK4!D5;~JdqzGiwFxM(B?yt>*p{Qh>#rKZ9$$>*kpUsBiDIlHtn)bl5lGhgdG)$c%EzO2pRB~zg`iv$gktye&8+#h%(to_#$VgLcFCjIQP3cl-4UFrt01 zr+U(RSX)&))dP-1OvYjIj<<@3$jR%sKjGDN(>M=Vag~BXe8gy4bt9#ugtmAexD%gF zlTT^FhAyu1WVf_wlU>aNq2&T?A97?!zwW+pFr z_zbbr4Dco>m&?Qa?BeX~!S;sHS983ADUD_6Yg8B4tDP=99Apy624NFj_R@+VW3z1N zK(oP_QF$6|KHyAY)6xQ$LWKqb0FzM+@z#xNAMduS=`2_ZF6zWgE*FOth%6Z#q>7n% zJ_qy*Z|ybiy!Ge%AOBF&qG|;uMh2~Bo(WuQ9mtHHd%44^X8HaN&>kb^pr1C6LiZNk z)7vCVtkw(^6vFdyGkg6sLya;oJGaPtPbPIdK^z&p%aftE!q{z~Hp!1@xtOWYrjL~d zEQZyC(BeqUsN(V>BKJ&bo=~jWgJlDA@Hgl@^!4D-fhIB1L=w$g)pH{vCotSo-c1~n0EqM8(>HJKwJu(|_}cm$Ve7r!-L4hMrZJqz$S^EXzRY!Ub1Pu9>d{%f@{Mu1PUkEVol@iKG}D43MJNK7`snkE2c0V{ppPohCgfa z_UX+{IXeO>3rEIT+^+dj3e=w#FO>7-W^gzb~FCOvB%6yOjYOulz^&43Q86+n-Ea)#BAF12TfBvjHevrzUizqQdU)MZ}8Jdrf&GxfX{8 zTPbMM#I)=1WQt?v%W-)&L4ITa%O~CHpJ-#&iW>tgsbuuYc-|fTDAKfY=DGESlQa2h zchKyKN8tZZAXk>krEE+t9){qhOuSIY97JVgVKm2-=CUdPdSaN~q15B%UD!T)K`}wa zBF(_Uo9*7G&cQGsj3Jl<2UqOH)#YXtU;$__6c{tt^+t1}HLUbfj39=Yw1k;GKVJlI z9kjad-ne`3yT4z#`5`Uo*Q;72M$dp#3H1`Yq;p=WMgYj<|7h2MIJCq=sI(bO6GT!n zxgUDg^mb`u4MS7tGn+1`7o--v=z`dQ#oP;A3*g`|4(85u0TWlA-TFRvQQw2~xZ*Vh zn#>uWuN?C=f&QQww?EC46{KSlBUR3pKAjsKj$Xj+xDmL`|DwRl4T3d1RM&Y?Le`RL z;bZs5B8L$d4^Y~E>BPnL-cM`UM3GeU42Nmy(6_PbAY5VB6b05goZ-H-pBezH zM!L_%ZI<MmOvpT~tF^c80jWF!PhI0o#+9;Wst%Ay)S z1A|%YtPW*}t(caq$E(;87&kLI=M(R+>J{cokSpl!fgN0d?b8#@7@cmj1{~plK;{l1 z?->AYoo+V>t|blCQOPf@qhcm042%WqK#rjWp_-1X2EAZhUu8U5F03}VF9!!SJ(Zgu z-CtXNd2I$LgIPP8{Y(^mv|0VVk2kV$@Z##s>nCP_P)MT?l{X%&Qxb>FKPnGeA3NyJ zfUVFZyn+Y=xxXeUi#ve;_|foXcg$1rp1C8bEwytGWI!7*2({5jfSVMz!L;29`7Q64 z=dbM`nv3EvUGI=3x5Ger*+G^UL}PLq0&Jyt;yfTpE)uN<&G2v-+?X&EzGPrNd8Y4} zEL|1@3Yh_qlAPjNrnn*zQt%Y3ee(Whmq0?`A(%JDyw$!B?4T46OT`NLX)$m+CR!>5 zTRB*Q_1bliIum4=EE~pBh<6Qz^U7W55p6j5^ldE_V-r=sa&8Hr144~U3#s~kW+pAb zBwvQUU~VKrt1rCRa$&yW!l~F5a%rXb8Ke%9VQ@s2L!GivH@^E1-#>f$^la|h?YrPJ z;@w~=>DEj0bQbE-BjcD|10Ri*SPwVs z$5&!;-c}(#@HS_6;3&u($S8ouL=p6&Wz%gH=;S5T^>} z>9- zpq|Dy0;p%TdrQ*V3xst6nxHG%4;p|`^S~CDbp5sV!g>WnMbMMjC1nuHr8&?^^T92- zrPnFkjvTI!mW6 z;Y3v|l^dJpj~d574{Kysi?h`QV9`RO68o^5#1@$&5+u!NR7EX8B(5_9QVT$&LrWWs zDI=|*o9-SXVQjSuk9;`10CSQVXIgGjEIizc`U7zgKdAo;p&1#?x)vc}RC^(9NN z1#%70fJ2R1;JeTGnEs4!0hAWUj3T$BAETDOSvhFr6T#WP#2m{X$0^40gN~rX1nbe% zPfYFpxW1#0UdrE0tHk1vFO)a^XrTCWsr&d5{VdDdC!32-rmx0_KeP1JacJ8gKXdSl zrB|N|$WD-6J&v&b;q$zVAdff(hp^N1(_&$~wm;f&vEp%FP$q~2AOfsTwiM-Ob4#da zltx!+cN@LluU=UCU*5b;`9H5N0(>zS?4dSkv*iTJcqX6|SDu#7E!^%>`lKM@c4qmQ z_AQy9$+%M<7O}9MX`I!_kSF^bsEdrhNELPFv1OO82rtuC)1}a(F>@2FICi-`Um@gz zcgfDcCzT~^GA%F{mxu?ef+W|I;}JNZ>vC*|GVa&}K;i#TELf6qwa~OgZleHn=o8E` z$|xNi#s>}P_%4XNn(&i@8<;sfx6*Ql-vU5T^B6Ul4m3jXtwy!^rC<2c$+;8d?2G45 zeHbTTIA8&<#+bBu3b>dj=Xj#6&J0i9eRc=*GRY~`Fn%=A0g%x-XcPWJ+@|+1=UhRj6KkoJHhgkJLL6F{_ENWe7yCA5{?wT$=U6VqgIbu(7!VEK{-t;wjv1Ia@kS-rqL$ZDWCc6MEGwzC%AZY~K z7dmG?>hS)>?xUYM(LOmsA(QRhCubB+R=Yp@B-W$%)gVqb9i5=f|LZDs5C0m;+ov}d zovgmn567y$dZOC)$F~(d8imJ|UOm3BeQer3;?+hmc=0>JSnZAz;-=$~{gvQNZiaj= z_Qm|#MVN!x3onC{(3D_NU4bL$4sPr=KK_&cuX64EzOhX}7Q>)IX{II-e?wM39~f*J zdNat$;`6|YI-`amch5fuh0sY;>g2g;w^frZlZ0V?HC*zakgqZ{U}m0#d?Pj@q%atn zf^uM7xap&ki^QZ?1Oy4U!9}TG`4UjCWi9}wVvbdUFkdt>piW0>17Js+J#eI2~iUJLza#<1hEuOzyb!A&f9HPTn7E8#d1%t!uR z-{f&XMX(Ob&qs-K!9(rJHo|l6;s&8Y!@iCmiS>_r>JD4I7E@DYRm(<8D6P)a!!{X- z8!)7t-|y(kv=j3Pq+MPj+7nknb*^;_?MPE`H3+Jre3uPqCg16FS)ZUfm-=xFBiK5u zz3jq@Mf8M~Q<6+2EGPQN)%cK=kXvRj2XI5iS`WEud<{%)c()`XhJlj}eq-E=Co`@{l;4-VfhF_)@w49>Q=e7WYUcyZ%0b zxiMqmHbsO00Vbm;TL&Bv^PRg)@rt&FTtcTDB!bQrv4}(h&m~;*%dUq0*A&MhX^cn{ zafS6FQ9S4zBsCB=Z2u4{?AD{2xDj76c-^`20gyt?K63>*d2aa>fIw`Gy-KoU$#+Q0 zA?E-beq~xngE&A=4b7T2&k7g|UX5xgny>wU_aio0Q^t=E(^~#jf6#;xe7L$9hkY)N z59jB#hHyx0nzaYAbWo!?X`RG8jGHFqRc3)!NmI3a3Nj4T?gm%9_HE6$(H9uhP1qUd zL0Z6Cn3@Zkt`2OMjbk7Y@Ot+0>%q+&YtJhcdZM4dam|yr&joOw$K2-b;Yfvr9SyQ1 zoHEx=CMjx6azn=ic|iz_NvLMMdKRfZIG!^BJGLScF5)~K!>%`;-q>yuLM05!+9nnW z@dn_=IfCQq7A~@==up2E)-Q0RsJo$xsiP0m!Z1x+?fwm-@Wqqo74XZ_n}A^gc{+S# z#`}OX!9?sB0A$V+qvFy6RxYqTyrUB<6+Zm+V~DY)4irvhi}e_m4aZAjjUQ8xSkqO` znXWY9qsKh;C}H%(;)73J-aeJN=w$WPqw&FGQC~e?*}>_x?b8JZrn4%j6iS|(G zy-4;~`I65O6c>Po-H{U|$B9jv)zeOFyIPCBDN#|R8l6h$ufvdm>5ZsHCj=%hcp_GH zk5rDi0pqt~_cEnXf?ckK3L_alWftO`P z9|kKvzs%y;a8jcS5Q#z}r!$vcrF0Uo1H&yZc_g#}piza#lZpd&RFZNG+JG{&TzqFC z#{@AfG|9iB%k6L{W5AJPJR&BaHsc^?&OYCGaEry`GI0Nv);g{-^qCtTBC5|L??V_u z-+8s@}Cl+|bkZ~lzoB}n^=^wtS^eDJ%$)-ia?=1rct{;Zh^vMRbo9Xb)TTb zn!Ec7RdqHGy76jZkr!h#Rt&eUrx-bft%vf9M zRqzVq%)ypnw~eSvX@U+hh+)}^Bx#y6X%>CubP5%N@)SP z(!&8L9Lu80E`ME+z*t;A&j`>#7J&VBZUB+j&eA9Q2PLg`1BrY*(V0`&~ss2_}?wiR%DI zCJ(5{X*yRFK;cLvM)^Fp3!o?%CgK`IsmK>2eeBNLf69lpd$s)rmPsBN2uLC;1xU=x zD$xfdfAMgeu@u|5Otq5?u^4t!JVo7{9n__wc=Jnay=aW&exx!r zGVE^e@0hoBdz>oh5C3t@*<|NS+|)NMc0qIfR{7+}q{`e2ct-=opqOoU+T_N5x}z(v zSHqD$R!;Lk|MaZJFsRD|H$6jCnZ>o*?T=Ds`E9D|F8emOQwUFn=1N@*4St~*133Y$ zdX=5__B}p#)~&vATk<1VA0$mZ%@J`@xH_-3$Gs^)B(z~MO~ZNFcz%V*EZQk}FGObG zMcQ)+i9}Ex#l`GB8?!P8RryiUH&8DaC6({-JyUF6O~x?UgD#Athe7c9aGMYHpi#xD zfVgMr>~kPCpaUOP$)wAdI4s9dM{*itDyfD9;L9(aVi`!d%__9)1X3drTBQW0i*#AW z>!#3h3X)RPc3p3DxT_sFgf5=wlDru90K?-bX;YVSt@d=;9SbXqf2MQ;v-KV!~IDQh#zkLi6>&LB}^Gr$I zpGuT4`l+?Q@=qogADrmUFimZo$Dpt5lxKv#Np^r2e<$naNnW5KTOa@ALx$6`!T_<=A2C$Hr2{4ZI0jT_brLswMqG`vAArk*sNkp^nnZc2qrg2-lCUPszYM6lU2HWt z($df}Y2L|!3iQD8r~x-Ql&;xKz+KUP1%xG-3jvEr-=NL- z-WNRH2M+#NMTqv0G&#{|v(^LZF%*pdm%CouoHEj1eZ10n|z_?V~ z+mjzjlW0BlFWtj(3qmNKT#Es#u6zQH{rJ4|_0DN9Nb(vS( z(U_f5X%?W#q!24?nNV+FYa3RQ7-9q0^(Ji$+-_V^Ve5RFomlD@V)W9nt* zv2-FGIk8kHu>jr&gH4vbk|=56FoUxLS1X=*9$L9hk%Rqv{bmJx8G6ZT>CgIx z>_un&IASb2`r*%~4-`JW+I@m$!;>PhzUVQT#CmjWC!3CrKR&+C}_UVFyX@C83rB@#F(gu)LtSHci5y$yFL5gnO zO+ovR`#_NW>(?BE6FQ-E-Q4BZHh=iXFcYNWv;80|7Iw*J*-$|M?1pd>B&7oa07;$w z-A+|IJxJwqBhaqwut|@LE4x1y+IsK+K`6aSdD8`)(OCE}OwS3C@CqXmp_eM5=~gy7 zTT#z|k>j~>wwS%)M1La{GLR001iBhpi9>h`0-c~n)kv<1xj9@)5kfIhZjBmGM8|Z> zYw`>wV;>WL{m*E3`+mB^i+q@q9T&;`C(piM<%DbPod+P8#@1cMB_(^W0gOEOMH~v0 z!yVn9Nw!jZn{FRKBouU#%jE0#t^y0BYAQ&o1>}Oyla9^m1u^EpLBeo*AHPWe%R{A3 z0;z32AmHd+kz2z_(L(y}F+meH?E|nF0e}$`!7-Mt8S0HtQwQz}P6af^bvS^LWXu_m zhlTLtS3b!R{9Te4D4%fC&ek0d0?t4G)!8$bsAFAk_pjZ$&9}2ltJzYyo|R}U0KbaZ z(Y*jDKvJ*{qw3-_VU$CT(8mgl<(yf}k(P5Oty`_n%CXkYxDX!TBZOC;vt+&V+ycmA zcBztr7f)WIBj6iexfLA>3rcGR>brYx|Zb z5ir+bR;vrN#H2$_5u7!-SPNL3w$}E2m4fY1+h#An z#^>nF=mim5epzTdkwgNxoB~cQpMDrtuu7m!$!%Rf&x9UY%|{8IPn4Y9_D{d54V32f8j z#0Q^6dHZDgDm9V5;{B7PuO?eFOs{Q!jNst3(yMV$GbM|{4nWETE~-r;MkJF_;j?x} zF_bWARqCY7aRz%>CdrZjRk`sY#@PTAP9&IwI2vbgf>VW)7nPS+oB=?`t2x^-&KL^=b2T-IYgA!XSr9f$7I1Vp;AYfrP7vQ)RQNyt!H>$`s?pc~A@}1bI6v z&22wNgFQA(4?`=o9J$e^@6c{vX{B?!P)Yz4j)d}YJ_gj~{1f}SXp9tBZjZSc8U}m= zLDFV4)C|^mqPfc$@4B+yt;S2IuN3CyYdf2JAN~OED6k;V!7JR2bxXb*9m>_`P?8x` z6IBMwrIE>(K%xvUz&D_qX0=Mp2zUfyfHY+C0Lk_HH{d_WKS0?7r^Qp5jCd)TJp^w| zft0nhgDlO1C;}+Zbmpk%Ua$RueH%&Go_Tne3j9rvmb(psd2YEJ?O|Johp8+a84wa7 zw}(suoS}Pz%>vfUpS?_d!)m*`x1-9BbOEqMr}izKQ=z?j#T4IrCSy_-p>PjR4Y1aX z<66Iw-D&cj0b*OHmPav|@#yqhT0Ex3zPE{EN2tzf_DhIZ*hM zQoB#EYgql+a9hpJ}PR9$VtJ+oPXtsdl_@) zbe_gGGdX;61vncY88K(Q9$=BfKsF*vfK$dxsn0d^Qai+++&G(KJ~!8V0+#YmN=Y=F zU)m3qTF97;W#EqznIr+^*Um%O9ena8g?B(md<+`!RDWI(x%W+d4=`fCkF&+4VrC(q z>@_=|y!-af+uv$!KX4$ZJ&9fil1_1?pfmR0u3a+W7vD0fjv)XvMoRI_LSnHD_%SeJ zeZzuXrbylCcg@O@x$Al1nt>5}4oNi#{iFR7_KwyP2c*m*a(r40C#R#b;mVe1JE-#&&vXK>fAa*{s#;w$1@*ltyMDM9ZmPV zMc6u!eVi_Xshiu|z$}(-*UBcc#^@R*rE^!lJbUR?&Z6%?tL4{!jS*OW?n|$qn57o@ zM;iwZHnux^_r+RuvEhhPGU`|H!N|&8JCGj1*RWll0YOYlbPb?T-;0{9M2O^5CFT(oggaJ-<=h+0upcs ztSDO|MpjS-;yNE9+-dG^wjSI7#u2geYRAT56g@2HpeJo#aXdEyYUyf<4DK3=>g&WP z@k+zsB!oCe=<4u6Sd;x;$SiF}O7dS-qFKluY&$)>FF4F?7t$6c^WdP<6`WGJ^`WA8 z<-d7iCfB&~6_8x@=1271O9nkGrx0>oIprC8T-k`aeYuPVfde&Sua^I~+GjJi0@#J} z%yY}-OcY$(u7CW!Z|%POXY9=y?`%O+Jg$Ba28=4$7s?9oK^p+ICN@femB9_P#2pQI z0~9d3fed5`L&FdWH9Ryd&TplX5wT#2mi_Vaa*o0ePRfhK-R9=zD>qZgj8sJBGtYBh zrfL4nrBWsiR1SQ;kVN}UY!#yGyEP|g&blLja{rDZC z$CQ^%-2e3L>@0BHDn;7drvVvm*;<;17z+VsJNI#pV4%1%0l4zn=Tqljs^0u?_QFfz zz@l(A7gtg6cY7yh@;5iOSpc)EC-ZSgmu}s?*03}VI>>ZTBa#K5l*(xnS5c3Wrov#E zv8_lbP&<%f;iYeYUy+yLl;Jp``0|4Srx$B5u8cWe(s<`HE5bZ*#aA~Pf@AUuTqgxNY`w#a&d9&9PHbR?4 zmmNt5DZv55K?Cjh~~JF5&GjR#Z48Gz26`z#WGIImK$1%V|Aroc(8y~reGloVvp0)ti_s!IoI zExI=nBREXye#W8V5;Ak~m6fml_AB4~4XSGsrhI<6w9{x;Tm5Vj?ln4vVktK_n?ykz z1Xpk0ZDH0Whp=5@-()Rds=oNzuaK(A3Ma@&t9soIORm0g55UTeprGK98V_y|o2}{<1RCD zbGKe=_ZUDLM%NgkIGccPjU@`Y?N(&#QJTmYJcr8!>%YZ9R`rB@fqNTVn98-m-%hV~ zA9wayBe6ao&eI`3M)~LTB)^6yBz1obL#$^hN*FzR<#8t4Up;ks`(xC`nMhxGeDLYh zSC0<(F=*R=EMJB(eWm{l2L`Y_W)Y?pnu+_`9@3CCPUMjLJ?Ql2U;6sYg;%JJ1Hh7| zs(#>g)6moOO%09C#x}hCH!h#}-rVx7-}|4Htj8lth|5@k!o^5M;zDPY*t2=*7n{&j zeK#Cx)d^_<-4GN*U%@&cw}R#g<#Ha8cHV6@doA=d5{f}@0FwHa8RtGyt{QfY4jqF$ zbJ@7ZU)=P_<6HnKV1|zceKcq#*yLoAkEet_4~6hNB`|$B@7!Mw6n14e47PLSnsu5| z!S_c}>+$a5@4;BRAO3)*o;`gkfAP8Y-WC7?K^0&5y?6yxzxb^l z&h^2yi8)=(8sq4-bo%BKVNOnA{lP7-?o3%8O;$#t@}b6XXx0oZ)oC^X*-=zcRf}{5-P>=wYcCoz@vx zPQ&MF^)NS#fCUGe7$wkh1`wBpsNF*A&7#`>_|4L}7nINk5YGkXj32V_Fl^iV=!eMK zyiOwPhZ*EHSnf8p%HS5MF1-fNzkE$|xv=G&;Y&dn9LF-eXeZ&eA} zGA2@>3;d}dH=P2kl+QlLdqb!dnn?kJ&fYfRSm;k5!yPmJD4xDtI(<2PCj{tZ7gwSF zU>4nbj0+M9guNps&a2k2)yy8(uaoh8l7OGMc`gfR%U?T2uRHV zW)-!1lp!c=!Z<{C5=|DQr|cr;!%bIgt7kQeY=a;a^qj)AfvZP5>H_+n|5=gI~`Q&qF2!wqhW}IBtdGu5I3+XF&pV5sb7j^a%Csf6G#Q17* z=HSC2SwB}YWT7j)_WLI57H*(H!)^~WV{{J4W`ICDn@Jx0@Q?OCeuKY~%~D(xKQiIW z%p5x|p&x=Ws`!y)=JT0_LgteQi1B)1y&(pJetagC0$>e#4^^y<5zgGwEz*=~77u`Q$1JP(ez6;VjES+G!=k%8ud+{_N5=|*Md z!pp6#d)x&UggavSeR;Xu==Be3&FaP-=#%y?xnuVwEh}IXI?G1Os4|sY$}rGyOkeR7 z7PP{PpfsQiPq4!L-0b4~>>yi8VQ^~UOH@RjmI&QNI2cUE6IcVyhDwY{XMVYzSDpzB zeu-Eju)KDbbLlUWyZ*{Ays%PcNKVfevf13FrQ%#ZLl7>XgsAdCwn-#YsFjjTwz^@4 zwLuH9KOj@GXW0x!uf|S6aZ|=rTCpgymaMXxIT2e5T%%fee#S}p%oP|8s4@^Lry%>! zt>C;+F)-9%iIO5<>pbm6xH+G>fC`2FdC*R;t*yVZJ_D)t2cK?o_L;dtF%$7@bovjr zwrlsVH#cru9)J^jZ3s>ka^6z;8koQ4#x0_{n1`7ORvj#;`agZ4b9tLJ>x?1X6%)j* z89-JG?Su(t<;xbe16?YUTiB+7;bUWe({z@@hK51ODqv(9_iwTcIT96o{r*ix9>;JYXMGxD%z`%who@5dPHuUrJ$ zKOTSb$i*K*9gkjZVuWOTO&6j5rD^qFRJxho`InDb{@H){Vmje*^T{3tLre*oFB_epW>VyAX+`w#wC>UFUFSz5j}X;=a9Q_ue3p3AXIrkmY<5(cPg{_gMn zN#pLd(y7aYq6l~imDCTYV#}tEpoFM|<%rEe;SjrNZQmVYuGQ#qP4++Xq}qGhT*)09 z_QZ{)O@5@jwm3_Zzz9LCI?#rGwDtBuPRa-5L)m<@)9^WM^Fd>Wqf<^naj=WTT`&Y_ z8xLKKPb(4ILP`Vc)SMEQM1VKp(~sK7%*di4oMJ$M6;i zgTN@2cGqOoY3M`6+BR=7fCiL-o~orIdvUJTtl_0;X`9l|iS?0QP0A`bDsWq)vO_em zw{rT_*)xFSVEuG!_j!^-&Cc{H^p&>!)`6K#%vx+NOFN~W&J=JucSmv`UQ1k11w9s5 z>CBb+=e~S?p}3gOWZBNc^k%Jnak1Fw3~HTTF^O1wX`@Ps70Q!Ct^#xAOniMe4a)-O z$H*|u;3q3OP9!U)@vu;^KJGWB@Fn85(~F^%i%#Yi@q;L=ohzMrK2S1&Y*&dn2BD?^ zd6w~)ZB{bJJ4WVz{veWzln}z{zqwoK?|BZ`F|H_xn{DTi4%w!2MrVm;@1Xu&5 zJJgsgMu023g#>~yI8liXd&=8Lie(l&emK{W=Z>WN8Ga(#_Q}D)qmND9J~Y&z7vPog zSUjb0SKKPZg9%vE+}Y^<@DD*(fCdgWS$ByD6mpYL?oib*Uo2#z`;{ht>#r0uzx)07 zIFgW}BqmXUk0pEqdjObeXb}^34n~!W5N(RfiylNkUGBwRs45L_0UD4XEQ*BuFoNp1 zG%8L5MA}Wz6|l&&qHH^tl7@@;SPb~Fo%D>Y;d2m`IU(iUx83Up!#X^i@#n>i9bJJr zI8~K^QlhWS=3Z7+pgljG=Q!~Sa0YEg1Kb9JHUo^vl_SbYP9<~#P|0s0u+?hRZhy)J zL5<5VT)4bcs$cmMtcEH!wi~FO`c|4cJlysmhhQwoxoaN)*Sa(3o+ppYW`q#Yu(@_} zwJhM$C|o2$imOAuQ`-Yiq^&MwynZefMgRy01O(uQCT3FTHk0o&l_$tjh*6F}H+4@&y)XQdl z_xOw6sxezk9#(!fN^2PK}ie zr)V<17MOq_%ys zY5VxqAXI=l*@akE`mN_x>MZ{#)o;QEb+hv);?fMrfPIuNKn!>@1~N@pl2*C|iB;n0 z>-RQ(?ZtEGX@38EZGP<1n9^_HsHQ9(8t4a%bD1Gm_P;? zYY{eeH5i*Q;AYt48afyY(DxUX&dnFs*4G=SFE_B65J#ohjmN@hDv*vy9B{30;zDcZ z!JyqJzw~v2fR+@NRIa_Z`~G*X&aci8gIk)veD>t6nK=d+1Actl1?*taDtla+0xwj! zE3Tc-uAI)f08Y80g>I|PAg`74w-^I$y{Tri*#W(6-S0Fi@G&aG%$?ZLv-yXY+1Ry} z7P6^}Ic&b~Vr~B(unw$QeC3<3z5LS4>oc?Ygiv4{1{7A}TMk;klP-yh#g8j)*&v*+zIRs#a{wVAmkvKm|n02Ve9gRm#MKs2NmaTHwhO4XzH7H z2-4Ah#OxrN{Q5b}7YI8tBgF5jI}bpyz#!H(7yR5#;F}o~VEy*h_V$DS@xAZ<`QQ52 ze)Zz=Z(UjWiyPbB{_ynqOLgM9jRq>ZwLf4dJvZ2a`;Z#<_I1>61I|j5ug=j@gP?^Rlk1=5|If-i4Qp97}RF3 zU%Bw!y?x!xAt4UY6`ytMO)pPN%fL2BfPySyjt(a2 z%9iidiG*#X9Ls)u(R|xF+F=9{h(XB0AZHFm{qn+ zJ4_Zxme-VwCn}gYp;#vZNbGERWx1S`4}UQoc@_dj|As%Gx_ zuQDQx9$XZlg#Dgr0;1?ZIGe@ay|uf4_1$ix4umzcw1z;iu9b6y8V_3CTMudnpT13yw07&0=I#U9(`!lGh8F`dP;76@=UyPb$<*L+ zz_&1|mPP1p1(AaQXD%HFwDvcd0`T0uORs(ZxBl5*I=`5WBSh}2*|=ZGd|F@3edXlL z?A+eg0}2)32tOc2BN`cV99(@17)_fEH}KyitpL2p)M3yE=)ik&Yt!xfVv|`K?a{=w zni|->jo~MKXf1H+!b@K#0};FnilY52p~Cz!<92escxR^%rpGiDSf4g%-Z93J(@Q5V zW)|1mTnE!N`SLe9s@T|rG3quN1e)#m$l~vkD)O4rf{z#pcOQL(zyFD;-6vW$Oi?^% z3KHu_7YK3+D)rcvbDp5o{jX1yF#6ew4^Fnfn%=#Aa`C|_%tgQG$Da^=HHEY26u#|0 zcFjR=s1y5Qze&^1%FtZ)-(3r(_27O;yK|%-kh9jTD56JE4kB5qE^~63!w^wK&7;*mufzc88FjwB#=d#N5 z!#{_v##gYya}nM5)^g&|oJ$>AjY|R#W~GcM5iad@UN_ z>=yv&>ZhO3c#;MHF6QdqqMaPzZGmNB&OuJ4a=Cr-5`jXTq6(|0zzx}zRT2r=QvsS5 zrtG(=R~<&qg3wKkVUl$ha_A6fu&kAX1km6_N+ldB8WDed?Uh#$%q_RF+kxahv+*n> z4G}|b&3zLnv93JsF|wkdP?&M=`>r8E%NsD*-J`TiU${!yodzR>R1%>##8o&5{Qh?B z2cO<%Fq=CMcHa4O$QZ_tB>^!8=|a6{3*Z*s`IUd_@BGr2&M)L=axsvURpd*BDRzK` zvWkTv&;7Z@{K6W%9j0QywNJLIdpAA=U2!QTw*nT0QMx|0w6lJ{4eTI*7+8KKj9`0z z!<`Yp&1$)=E{@?t@FFOLZbHF2kGNI+ql2sO-2LW1cKVgCee>+XMy-9X(tPRCxqK2m zsJ5E3i(_+ka5lHw{J|d(5Ra@>ju~0?`6g{1C}_e|=Gk^2uQDmZDV^q(@nJlnuNV`S zH^`VFB5xE9a{k4y&0c!_)O_K_{jD&X<(OO?Li2&KW{SD^?3D*^{@KcvS204%#NnO0 zs(y$(3)b_(g$sMh`rg(CQFW$Lp>t4_Pf#`+#R6EQ<&qi+SydzN5VPNs(B7g~uYX9@nqoSY6#8HN^VaixNgZoAE&>w4Ro{eL8c|=#-DI79@!aWwozQ-5BlD@+MSPa;3T_E^iMkEMvx_Fmbj?^ zlM$|vF|yoh*TDoJCtgytpi=Es_dycYLfKfF7+(hxt>btw4IWXCit~Ue<36*0dqG3E z8L*oBSApdG&0pfMY|^40_)(%I15aavP4_N$Gx~nJ=R;~n@ELkdZzOED6X+U;flE5o z9R`YPdM!M~k0h@iK=rkW8=9Xd>>a`{MN!)$%xBtm6~AMFVaqgg@zTBhI`?PGY#H&h zu)5M)UaB-Y#Hy$^$bcvb(J&T!xiZv%%PRcb21b}I)(jW|=X4k^AYDk-=CA#;=%29v zMqR#ANyeyPCvj}D)R>eqSLgu?Zp9js@37yiihOT@bVOU+Tb^G`JXT)2Zzx0oP^R*YhetMzV>tl<0e!f76GnG><>YZwx zPLpPfCJ*g7S7uUJhG0;-=jAVl<{t*mLq^3=A**7(LhfT_9ObP^|x{BAhi0R(xSE84$T=0_2z>uF6chJ zXeGTwrlf3%KCz;cRk%qnxCGepKQOEubwH}ij}a)GPVN5qzN5!aVm*fG=o6N@Pd3Cl zhA80_SnZhuSYv=P1)`cZKKPjSSH~}JpT=DD`01-DoJAi;+dfTjaO6}JrUs&hsWS-6 z0&s{D?F1-zGK&NR8@+aiEhk!9r@C`zI4rE3@f@6cIdt(#^=fD{JLISb!Yd);6QF08CJX`k!6uPGv{?Wx zvu;Ye)q!oWI_au2P9i+hI}sB(_Vd4(}^?lwz)Ww#r3 zAk`Co3RNFB6^zR{4}J5FV`t$o&R1jVwsa{f{QNtzf7FwkzJjS`%swmbXHd!ItvyaidpSaDNE zzOa54Fu^plb1R5Bv%m!*X4DF$ABOuM{gBT=TCiE?POdGNGWQOe1Yc{d-l^IAUaLd6 zZK;^eoI1;U#-G#kt7k24)u3Sqdz%b0a&kFK$&P>aGx<%!hbmsDHT4^{7IYN&1&^!x z>;fYoG@2`bBvd0g&ce{R!#-FC>G$nVKKwBMN*vmN_xmRK7Z=DRQ8Jm#3DuIh50L32 zJc5}6t^u2fY&wr<jS>$ji#rN8-iUOrLIMp)+~en&mF-^8V@zj5;eMjL??udRa} z5oTU&r`;X2xqb$g$m(jZ4Y}Nd+w{&eWWm$upFHr-xS1rbkuugv_?Z@#iNb8EkukE2>v0beLUKpv}i=bgWx)O6|W^NIs@ z;I2easmJX$+!X@?hb>Aq3`FA@yJQl;QK0al&0=z(@UhhHQ}~V^8;Lc&>FDuG-5<*k zYl(Wz8^I+y3~$!BJZT6ov{1 zB#Dv-yIr>$m0Nmq5Bi{R>UltdZ(U#pBW$(d1WYyMURF@-WAykXHi@9y4+wymMC`_Ch8_WmArjU#HIbjYz`L;h^t>Xv#?!n|M1SXGTot-bNma^yO3oos88Fhd~%@k2QVYc|O)gM%vJwOsJ zpvE2zFtq~n^-LX~($u6$5$&74%`xiGC=g#~^oy#)gM}g$5>Z(pCgUti(kxR4kcKg* z#GM&lm!NUw>a7nyUOu@vgUzOF?)!~8HtAYR9n~wekqo&qXD0c1&hqIHDCdhL0-A4r{|{K$ zJN19_pMU+-%WE^c&5m!DwaPxM9wwqhLMf!9TMr}}7k6kvJ(f&nb{4%9Fov>>GNg^n z3M>TG@qJ||WKKK$choP-e;YDJ0hc%G{3WyZ(Hl%?{Wt%4%<-`bqwEibIKTJ*{0|HN z;=l3YYWWAZ_m=19n&mQ%62yXcKYp`v{k?-5?*rNjColBt`%1F_@i$w>zK3BBbmc+q zF2UZ={6sV+Lp{b~&B=kn$5*>Qmhb3skXXm(*Kqt&_vvdtPkKyl(qjp;p8XJE5KI6! z)5Qm;FOTzd9y^XgMu>J#a@fq6@A2qslC4m;K1yPZHDj= zD1q%T$`oL>s4M4{YC2r4+fpy0$Q9y>0)(NJVv|#lQvBNOen$doc}jKVEzYGL2CNQ- zRAxBV6^=&6_C+s;%+mxPDRB~Aclgv{oFxR7iXUaL5f?u^bbc^}Mz9#I|URDgYKrKsoq4Pz8}e^j+B}n>aK&x zol@5M_49@KC1g^FxKGdJK`rk*IQZ@dS1X^s?Qz>E@5t5UVnM)(NjiY~LRDS8^QlM8 zTwX&SC=`g>sKRX!`Mt160$%)oynW}+K@<3vjg`)i=>zkS5t0l`stm)MG?Jh0;sWsQ zVB;<-d+|9!z-<7Nd>I0{WfDpg55%jHNsJNTn6?q$1iKZI7!HXfIIl-!>h(Tt!(M?` z>5WWi)!M$VqKy|{<$`qIrvNwz(6rRZ17XM7KC@L=owv#XS(Tl3LQ94PRnR$Ls{>4N z#My1b@CnkXdgdC;nWoRc7GuuwU}*3P<0gz{pL_O4T*yfymB97IOqS8Nk$=fqm75=a z^1uE^|3mZN`X|18`T3Rd{c5w>6_lU7@UqG!ZQN$rgKlYw6@U!MbF`4_JjP(G{MzkL zW!EXD4d{npWd=zGKt0G$MeL}k5iCXPebbd_=Z@IHu!kz5XS)4(Dd=a@#&M}gU^n6NVh$#K)t5-hQtl)|y z&AVA&_T-VhEfKMb-F6QxqfoRIh*$}nmF829>;we@Pc4Kjav?3(0g*_+BtXy>cg4v@ zY>at(%p@%~nfVMIWfgv$b?`xP6lFpv|1t8j_{=%SVKNe6`F;jU@M1D!LThYU#e0uS zJ{%vk9INnQ_pHy&ng^$NwSv~-kob}A>rG!Cm5OS$l>kU1LuN3zU(UDZq|b6)!3Q4)#9& zAqZ8D=WLcyg88_KrBVp6a9%hwUtms&ZN2fsA0QhV9;yP21Pb{P=uGzkI$X-d=6pUT z^JHGys+G^Z%ry;10t@(73itF#&=Ui{&MnPiD@w@kgN@2nz}9nL;d752vq&JYSPA%S z0nN$vL-j8%hY!tUl?uvHt>Q%qlfq0pU!o)cSV~^CX5|mS!mF0y1psAd8R|Uv$>X6t zt2H#{DH$2YA-lK+Z^viMMg74|=8n6gAp`0Wbe2r5m}3rHZ>RMqI;RAw%8_G(Sw3gM z=V#6o*U$08cD)s(XCRrWU(B=KuWjw>h`Hw>>nMd9THZ4Qc7@b3vv=z%ny4OXCL;_IJ!F9zdA~ zT?yZ{+bm(x+fn3TYm6LtKPCt#+G0J1Wy91Y)?<5OO<_9v3`*S}BT8tGpXw-K^i<-5 z9P^Wn5Av80ADqJe>X_y2lg&jZxkf#{b^GztS3jQd)g$bp1Q?EVhIk)@Ly4lycM8X+ zb`{U@9Nd+HbnONL}1&K;&RW4dwt;nbt(F z<`~X4#x|d^!YK(Fc76mTLDGP?6hI`j)Rh|7|4QbKAPh}1k+SD8xu6G3<8^PGLKyZ& z9Fl}H4TW!1(6HZ>=qeS`63~^CC@!lqZz_e807GV0DXdT5Io%lxe~fX}qYGwS6I#-2 zK|;YSfWkPiXkss&3~5e?uIj{tU}n4R@-G6LhbWIp6cm-L0#LBpap*3&4FUX8KJ zXEPTTiUbEg-KxEF|KOt^`~~m=-IA39>Um|J4hu2XICBaCTq7Z(z7>a7$;A;63{|)B zUf!8t_yb~RstJ?HdznHZHnjicS(YE^5x!hQ6VDamaAEyK zqq{;2O`Md*dSK99M!Q`&aj}h;Rkw|%3Zw=<>T?Cqq|J1hcy!dP3BuZH#4Q3Xmr^MU z@+X@w&jH|Au3#*#NhW6X_9rYDs6@QA1gGh#Q8+Y%hLH^bO9vD=l!s^0GZ6<|fBl>0 zD^a*tY3wz+vsh7-bA!^kJNH!T0B0g>f=XeZ+d_L{x;8f$+4(>F<~B?A;P2|E%j zNYZkIuQMae9c~(+CA#4Gq~5PEOc*7W99Nrv;TIy+PN*=9q=0}j0dRAdUk72s@R9ED z55F_Nc;d|b%G#~(e@hrasBs1$4v!Va@=iPPtN*mP&P=wwb7$CATsR07!;dlkEFhMOfnti(_@gjPi2Vp*D6XF{q>0t zPGf&{{POn6;BtEUifjGE>8r`s4C7BGE3qCetP|MgA*MlSLd9@;gbVYfa&x!R+}Vlp zVk{^mhg|}=gm~X4!R7fg$$B}53FMbg&j0R58}GdR=KVkaf1xhew``{eRXl`Cyt;Ft z1SQ}g3EVX7h^^vdC;_%NphLHDU^VhWq<3|jg2GXjg+M+F>dwgVX5NRJ+R^HDpqS#td(T`FpP4z9n)=z3Zu9-*`6 zUuM}*3!szC>RUa2S)Mg(LqLGIF<_0L)IH$NtusUO*}PNie}4;1^Lu-WBOTb zX8~Kgku1=#Z*A>wlNs9Hxeuh1E0}8Lm}baTaZwD6V`eEfKncIv-B0gS)pjOI zkxrP6g4fq)ukO}+D=Ql;AxptSCIuFN>N~r(a(lmyS`q9Vs%<$eFz6=frI12`ysKwH zF3`QeEJ!#kQfZ8@M#wyt&El)SJpb}9CQNZwq4rzf`n%<`FDMwgw~2%wbOm^Y*rUeI zy(GK*)!(Lu_uW7KKPj_g%Cicj9Yk{Z{LAIjm#Hsazx^TlM#;QH|0{=~Q>g&5MTp8n zB+)+$UCVONf@nFm=2#wo6}9_B%ZBMmtm%#2AALNA>F6;?-KQ|bdPbv!&o02CWfKe< zeumHTM3J@H?E@5V=e_;=YAI`X0JSTiFhHeeJCUW8UO zt(-E82jG{HD<$?+ft?z*RSjf1gvlaySpy)a6@^n^rx-feL4r_J>jTQrJVvIuw+RgL41BOJEdk)- zN{X(13*ckMl@>cToN2F`M-5A;m@9A13{$7<4wRhFCVr(PIlLw>lG{UlPo?GI30M^aD259x%T>f6Q<;eka z`L)jaN+u5EQ&-q#kci3Kr8SrGut_k@KI}E^Uk?{?B6=^tN+y2 z+kcv0Ioa9YnYr*1D+>Ml)_xUu*V^Ap3WZdX8;F+ELRP9KO-vGc2j-?&7EoHUNS+QI z(t#TzPf)v0v}~A~#CojigrhSilUS4e8jeru{!1(ha-@tvE_#lrdiQaMcd`S-V;5 z?B2JC+dvx$E}#$|0GT?a2F<2Y=xQ)dwjXyHk&W9ce2#(!VR&l2e?UaT!+CuExnXgL z=I{MdpM$mnE3tr@fRRNHUC8BE100TTYKrwDZ-o>Q38i%@7X|xep(uQ=bhXxrGnkG4h>OOjhET&8L=b^v>?{?h%w z_+3>B3WSo8!*e`pBpLy_!u?wmzL# z=qoNa_+rm%8yVg2;wr6TZx zf`eDLYaidd3zB1N=U%Kauo*Zl-3t3rOvgbyvfdaBaA0?QT)FlRSF_nnq0oX*VfzQE zOIBYjvzELPBCX|uEFK_~mStbF23Thzc;e5QUtR~(!;|Hfax;X|Vo=Bqux9ScR|pZB z*=eqP`U-3o%a4kXMDz@%SADK67A*6QWPZhxHukv->5X^iSN^9c{K~1h^>TKN6pnmy z8|&6ebG4kK%Orxx>cN;|QU^e>q-Vm$rOrK9-`PZjSATG$xwnlh3>uFd5rEV%E!`V3 zte)t`C8#VwFytYG7Ql!~k)Sd9UfH?_3&_-y0noQdqAxt@@r^LB;zeB=dHw(WuP*;f z|Nhd;zldD#)Txu8a}N7tt4gm~{V;H~TOWk^nPGiTGu{XD$@i{jwcgzsizyy4?g5W* z_?Ohrc^u1zX-F(Sd#vh&JjRUCWD@K6rS8)kVoe_<96x@%DB)ALbdR1D1NX;|4?0pf zw)o&=`>UrWZ-4lhNyq;cD-S*{eKn;u!vq-p5QMf;Xkl8Qs!hp`q*O}Bv#r}7M0o`f zEGE{|3lf)oZ8L0>onF6`iGJs!2khTnOVkorQ7|YRv-*U1s7~mnKJ0ef&6Pk+J)W$)!KUu$+V+ePG%nKLFeVTriufp~vz* zzZ^L+j-`}FpvW$2Wsx6&Ox8E9(|ZL4o0$N-)Du55ICNq~9c&Htt_1VS;QpB5~jh_%I+Q zu`@!AT#eL4gAtPRn+HeCbb(Ijz7a5;o>{1mRM_T`K|P$gORpEo<-L11!4qLZ4^HoF zJzxZ|!$@1LA#N@DaA5_23sVT0M1P%*^@(Q6c$UsQ&rA_#r14xCC#_q*``_QomEJ)V z_54?6iuqr^u)I{t{MO}_R(Ak#_1=TZN-2xIDvo0JD-GyDl>XJ0yf8Y2GWVs;tPo&& zc5yX3zf7o<39sI{Mz}MGd4C_T6BR1JTTT`aLn*qf(iHHBh5?ra+()rJFpw=>#zD)^ zS73*H%zJ-qQ({~tmRkV)P>--rBusDp9K zgcpGWkj@=~!b`0+>t@3aDiCYds|j6s&S0o50qdhyYT!5tnkUn@YBon4wLQFYpGWZ= zdqr8(@uWkTwoYyDVW&_(WkgV!ai||@0{}y#sNcX27>E2mYbMzpXA3?&q>j>@RI_3` za&lK5R=$Y9g(!{tX({G73Rz|d_ej*AD-gROj>EZKw?Vf}OJ(&&ZH@^EnM8d~d6a61 z_%__0jHOVG7f=Pj3$}?p6{P#xiP@{U0@vpvxDT+d*q9qT8=x_UcN~QW)j>FsPnVrp z#2|nh)pB`!FBP;kRVDj9!XO~8#@tPz!Vu?dKRX?XbrY2`v%rnOSnxe)eNe;`Rx|B$ z0eN-$YrlmT6tvC#N~@YJP{13+kXt-K2^UP^@!!Hy6-`*bEgH#$eR=VeiewGIF6fzX z1A%_Cg%K;BRo!P)=(2-da2wc%|Ah&_0ifnc&1Y?fA#WWktDv?Ps{>3lPH9`qgc?FPR{K& zI-hL!0kzd6!%Z8T_ZUFR7ZOfQ$}{wn#03Ox;2s5?!n1aOeQyv9R)0>VSztsIP46&w&5>Dwj z`s^2ej-H5t`{V-86F8~~^#_kNJ~-L_>e-REKQgwH>8tUN)6rLxOB{YCYkH{1_&Xix ze~j`H*iQsgWcAdN*dh$!a-3)bS~a#+f{pwvcoa+#XU@M!o;fGYG|WM9OF-XAyMZ7_+=mFv7MF z(LybiVR3gy-&EM~>kgLxGxyGP<9p zZSAqT%cFshsuRFie){OhSdFp6%u5p(1PxS9F=$QRkblX@JaAikV;~B{nc)|t&;KD>Ia&~mVvV5_a;jTfwjZ5e*JG#%QcNu5}Vvr40 zX&!LnpX1bZuzlYxMgh$(hYFMG0fD?E^M3kQa5IM{!F#EH@ntaOl_iBBiJEP-8+0G2 zH&*k&Jb{7ukm;GZ`0DyE{_W+(1;O=Gmx+SWUw|IkDKtqim)Kj-JOX5_A0K3`=nhnj zY99@_pmak3?jp~AR+)DR%J`G#mtOkji>osV)tO#uHkY77Cz?s+X>|S9Zr=r?}jaTz5KK5V2l8(_Pn*pn--DuD*N!FMj9U z)zg1}er5S9zkz=7Yp3UF0Y0vG51ON*j0vaH5}_Z(_q(J0(w5EE8-E0X^qPcQ-x1%$mf@H(#bR)BGzzS`IhXU;z0g(gnXO@> zWkYIe66;YIG=apDXUMZCb$_go+3`mSzqs#TNKkpBrpO$82214}OGe?NJNJ`~4^Fnf zdiwJA$@G;!9;L6wl?RWNzH%=j_AN`q<7s63QJzlV6)^w<-gMDdgOQ4yLNvVPqN;$h zUjc}a#Lf{oVYasJ;yJ|o#S^CsN!aZ4f8+A<2M;O_zVi=T`;f=%`2*=d>88F|6*4$I~pk9+7q#q8fR-XH=Az z-a*%KIb*QoH9suQKqvGwxk4&MB#RHF8_O0L1a84$E+a#k#Fpvyn@KS5K+3D)aBi)4nqTUaDE*e$?9UoT3r_p zFU$17@a|mU6i#vNYGtifvm3-vGRcsfC z^CH7yFy*x?QD7AyxA^imVVgF-^E;p`C@~fQW^X)kcM}B)f5u{n0VY6_4zr{kL$H+iAA<50qOvzq(GI z35O9DL`8?{Ka1&Cr^`*19H6wsh%o{3vXF2{VQR=)Rmf5-&GmD6#x*|Nj3vd*Q`6pY1iL!y|Pgm+b!4T_dL<#-V>7#^C5^_b)jzPn-A0M1-e|7xw_UUWm zJRSN9BFe*6N~o6^I_>w*K?8s*7fjfzuGr^u4=xzZpBe;1kz64Z2%8zZ9c&75nf&4j zLJa$#yv3!mr_U0HAdvLlMx}o5>LI$)!vbXCxTRo-PW6Bf$MD^4tdR)WKiT~#$rEsd zb&y;(Ng!R=YjuSnqGb#{_ygqRYH@T+CW_CqwFpj`u>zX}&;;Z`U1(%UW7qYO+kyz8 zvb(E$nmxdaubgA=foX<$bF!v3pI+g6IFcT@qvS>C$1$p(tf`cwY#9;){K%ZU80~e*X z$;>a;@7(|%HSXVJ;~%t|#Z#9N8+lC_%7GlTdP~L3H_p!A+5IvggX>GQE{b9iC2LDd%(D6X$7pHj{}%rNd#Mpcq`94kpIH1!gu2L~da*1yki@)x$vt zpoud{U{LPMxi)v5-4DP2!v{;OB4V25`9(L62oys-bWZB0B|q;P2v)(Rc|1SoR!^3) z5jwCpKEAp8-nUsW%0R?8Ey*+HE;w*V$8-W^0Hz#3?33I+DcJgsvsnpRZ^_(pZhm#4 zT!Joo_rbybgFCQFI3sZ6=D8OZU-{Zl@_&-rirrU>yf}5F}n%kr~G$ z9|SG~9G71EwfPr+;m#lZZ_LQd`IqT??arrY5W!(|fj>4L1_L2zJ{l!DSpA9_bKu)(uDQ6#hyywm z%??CV!}3~@#1z5V-S@v^1tQOIFPtv`d_%LG^?K^~X@UKa;`uL#d7CL?!x-GqNpnh! z4{m=%__$r&XK}84<=49P8vjqNt0M(zlPKl zm2-|k>ONs8CKzHp>ruk#%^IFjfHl2A!{pSJ>w?BSu93D@OzLKeuhD*vM zB2%I<00dEFa@Pm4h;l>sNgPCGp9I80A=!^(mFYtBkc9Hv&(<<;PU48|6#9Dfx;njN&~<*8fq&| z$P@!Qi=|PRuM8YIc``brePP4)n}VvKSl>mzf=u(2tTR z^QM_oY9USKfHVX7&@wH#M@GJk= zz4w1GbM7TbELcF$RsH^TU=6FQwsYUhG5O;0#?Xw22&T#VSOCOQ17O&vZ*w|7g3Pwx z_+!B0jcoqi`4txSU(7DCB=B=**&ehC^Mx$b-76>NZdY1gJw5l{{R4!LR8T-Wb#AUi zg>Ry|JGIVsJDZ(bk?Jl}sa$)X)CY!(t1)|8;b}RXWo8$^*8G}4IzEgiJQ%IDVPn0vmYgV zrpy|m>BEAP4H~95aDNm=Jk9vv6!urgDQ|zw+BlQxD}PK+UyX5FIuucWVnVx7yA4-k zrT`INIki9#kZS@F#9Dc_OAzarC=(<_mU>i*EzTIb1ShxjT61rU&5s`oC6$c*-~a5b z19H|Z=)wI#3%pmJ+2=Rteh#pXkvZ&;3lwBSZ5zm*+i^jdYGo`*K&AUj-$C z^*Tto6|YeZpO{^ov@&QC!WNXw%grxqOHL9H<=)+!Y;|Nmv3*LOY)(Z0EN<=T^bm52 zD_Lc_Fquzg7cc?xv^Y$#%zCs31qHN1LJpN>v8Rq3NsQ6eDD)X?r?-VBxwrS-BCQ-Y zaCAk(e8vDtYH+RyzMKijS7MiCnOI7qd&?trwo2LWE<_BGW(&Vv$k5PcUi5mzH?feSK93hWNlG-^b8R^w>>k9^3o?g9#c1JHmBG!#KN z4zQ98fop)L;v2JadVOi0rfuL&aQ7;O^E4n2<@~#phgYZ`Fdui@snkT6$;E0Q@^8px zvtvCwA3B1`t(>NyI1#SujrX~d%tE7xu&<{_D9vr_4wFkJLASQY8_-NBS}wBsODzD$ z<`4dG|I>H&&b>&2;o0-&zkFtStKM#Q@=Nn`@&PO4x4_@+CMfE~=byh@X(Cx;PM2m& z8#{YIK+-sXEL0&h)2RqdBY=R7l~`@H&H z6hdu`s-c5uc_qT@gVsOHz~xm^KYX_OhFRmpzE%B4>J`pC_c{mA04`!aZ9QW>QRC&} zTuzKPv-a6d-Q#~LMkW%Zw?BSuoG-dg`X@wRJxr~qt(4z@yJ%C9F?ZOPz9-CPa2bN(A9)i91sTZV z=%lDxCAqTL0wRME;+vd%l$Xk7yZ{ikv*qko+}EE<{x zsD&)e7Qr@VV3Y8o331u#a|Z>MJjPw03%zfM(`xHZwBRNKf-&F(GhP{@_+IhHEzQ!(2RpmIXzy zXZhK#qwSDyB|D1~NwNafcwt}pT$sTD1X#yD5wrpYB4LYNb`~YBf`|B_@mBu1PNWHw z&q1@ss0wD0Y6m~Wk=#qUe!GkhnfdI{=(obGI=*uLIl4nr!3ylML^jB(V<@mEpdd_U zVHJe5TFNXIvZ%IOJvH+E2bHTk^?O^pAPE9(G)BgoN;1e`ua7XR2lyKd_#6<191283 zioTgM4NuSJ0nPiZ-kbOKKBBDQJKv@hAiIUhM0dwBGr2i*Y9KM;F%C*PmN1bKg4$EjdmBG`X_v6tb4h7MLTDpRDB1zA&GU z0e>80<{d5Dw{UW5pn|shKnWA&gmjb!05BLda}Qi)gB1{S;ZKu?pB z3QVv);2{{@2WD;8{~XtY-E+_1eCZdTJ9p-nE-c;IZ(>z-b{@X;G^8lh5$099P3#-y zPtE3Q?cSZ*LGk2eLVi2%{e`R6Bnb1`%;}!scvo&9eWU1LkAPyL;?$BEq;JYnTv)}5 z0)WNAy24--hF0;xD8hV!;}zB}6lJ?^z4PZb($)7QZ>dSnUS&MT*!|uhZQA)&UTKgRh2;s3{sLKvSGi^IOF|*(2 zD)3^Wx1*3jHop$NFe4+raCnR)mOh+@#5(e8IDV=7w1!y6A0>RWBjazUFl!h;9;=GZ zvl${xPo=?{Y~VgQ!1rv$2cMq2{qbw#93y>olsU-L!CxjLd2kPrQWvHo?Ds=xpJI`J zsZq-gu@F=NX6Z2c%}SUd){}U&1qec#eIyNQfLjk0)_&O9yZWtvfPMwY1@pvR+=a;9 zz$KI}FOmSIFhr|{?k6y54kScekbO4H0cAkUJ_mwa0wX%N@cdVZd0A)=^DV&(bSl6X zAk^B@Jf2MK@b~YL-ql0o3tGyQW((_QX7dSm-vA&C$T)0Qaxu+&V`H9FbHYYwXsS0q z@US3+8=DjGP9_fKT?v0cc0DfGN%3XMq&R}))n)j=2=E+G44CzZib!^P(*H)#JXVINCwrm$*HFfkPF`>x3lng(N&rEEeF6kQM9tke zTVy=xCOa3~9*51YqJA3!r?Lw$i^~vBne|x^RU9g0v)5?f+N<9^fVR8I#Tg>=cMY-& zYv8I_5x2!+dA8NLq%y<14?snX&-wWRAcpM?A12y)(CppWZ@hK?VE>~x$SFhSrGODw z+#K@*!f-~wkQPS*KW(F5P9TXYYt~erS7%=6~|G2!X`?7m@{**YqPni+3R21 zsa?BvP1=8UdfFMq9IpYLnL{ha!H`~av*1MlNl#TNTMYqpu^O%{YZ7^bC8+xkt57Q0#aJ1p0Y~u}E2r;}=#K3ioz5ZGK+O=B8mR z2p)!n)Zy4__pa9;+%BKF2+2%0hTTD$k+fozbZ#`XN=cTG6EgJSAwPz6!U?~nzkv ?K3of4VQ4df0kbRRs6@R*FRto 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�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 z zFT6c<<%8m#KSBlos)m*De%w!c62qLDVQQ{PL`h69)b}R9SmNKPYyp88xe0^>MAY=P z53w2#^0R*WsWw?_BX*I1z(YG0TRk9)UhRfl-KtiBKWJZ`! zFcFF+(NU?0m=U?QR4V0ez$^{r?Y_^g&B&XH(>DfLlI)F0?>nZ%C$b`+_h%N9iDk>F zv0O(R-nEFhmGwJ_ganW|p1_n&2c*Jan7bLYLK=}7G;K0dsNfD?tliuyL1N9O2c zH4gHgtDc=sUtP?9efi4A+Z&xmg}|?lufiV!-BA3rpt6!#mKt`)ws^<$X3_ypROAf_ z(#(jD$O2O(%6nFZF%aX0gljcOo60qxS;iYx!+-%3444F^HZg<_tedHNzZZ=vxAgG*aAs0z(ScRv>$dWPPCKN-1`U+JYU=IonxzFLwZhUh^p1y60?62AWFrxWw)CWl zx4<;y$^||;F6a;ri8Z%U0PYU3vr>SL))-nbDNPJn3f6%ijPUxT5q$}p9NBed~j^c74m;D!pXOg=j1#bJnZr>|5LQ?gm+a|^lx zG=r{^GpFF~;@NzoxT$9BtT&+F$aJ2Jy{%$-mzS}UgHg2YW6)P2od;h$eKi6HUj=!4 zh-1b0z^E6IWQv+Gj1I6)zVUPPEa8wp3sv90no{={N@DQ{=}!3VB-W9^MOM3qCknN( zn4e6jaDi`0w6YF0ULv8qQQOQOJ?)7`YNNjSu=waUiMGf8;eTHK@xRHRdvoXWUup5Y zS+`*zz0JZ19r-KWHIv6}1%0;ynW z4NwrL?+sKe4jL))Zsk3E+?~L8dVZ?{>D2&>485$x-dc>U2hD)F{NXjX1}T;?;ZM?n zF%IWvNwRo}BXQ80;$r{{MoVZ=azuQ<^T%UU<7!F1EFkG;|1V7xbkDrf?PTiaKpJ1OdCs5;-nGy|w*> zi?e-$W{%)9!xma^*j9mj8^lJ)H^VcA)!2PXB8;RVa758hul(pHgd#|;ok($-04%NL zJf>%GOo2C%WH&5zX#JbDw9}WH+E6W`cLju5CV{&MMoBsh-f)%qj4&9`Oh=0hB+sZF zwSn@-q8B6KcudhS-O)Iz8XGWeR+F0gz84f51w#?=Wu}ax?~B%FJ*5c7-B`0x<~YDh)QCO8oP&+ zSl^jt!=ITbl-tP%1__B$_>U64{CLoJ^_&pUAWcF%k-k?R-E23ctgq3ifuc5l{~vH4 zg=^XU@;3wm;)3O*hzHq~i-Z9≈=Ect@iC;K7-_HUl7LgHGsJ2U`OtM8u_i9^8O6 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 + + + + + + + + + + + + + + + + + diff --git a/newtheme/font.fnt b/newtheme/font.fnt new file mode 100644 index 0000000..8b3120c --- /dev/null +++ b/newtheme/font.fnt @@ -0,0 +1,116 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/newtheme/font/default.png b/newtheme/font/default.png new file mode 100644 index 0000000000000000000000000000000000000000..fb7686ea62f82c10514eec305e751821b305bf29 GIT binary patch literal 3667 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 literal 0 HcmV?d00001 diff --git a/newtheme/font_00.png b/newtheme/font_00.png new file mode 100644 index 0000000000000000000000000000000000000000..ae2b88b83a1d28ba03cb771a72ce51e3c4366805 GIT binary patch literal 6904 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 literal 0 HcmV?d00001 diff --git a/newtheme/gui.xml b/newtheme/gui.xml new file mode 100644 index 0000000..12a950b --- /dev/null +++ b/newtheme/gui.xml @@ -0,0 +1,155 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/newtheme/gui/background.png b/newtheme/gui/background.png new file mode 100644 index 0000000000000000000000000000000000000000..b29e0092adf2fdd82ee90e4cb6a28218d99e06a3 GIT binary patch literal 1011 zcmeAS@N?(olHy`uVBq!ia0vp^0wB!63?wyl`GbKJOS+@4BLl<6e(pbstPBjy3;{kN zu93Eym7!K85iU77In#2ycDBZ}x3>cokAl$<7zrWZVDv@;=ue3f*NBqf{Irtt#G+J& zfW*wa5hJ!7+#&mXA*)l_-9IEH8htM+#aGAME|ALjfP|LN_bJ^{stCriTD za_&>R+OSWt!{2C0g$m<>FOr^JQDGmN4J%AyiZixrxoSp>J1}oq!eW*?^Qwi;^luBo z9k+hEsvBqmdKI;Vst0FoeBKL7v# literal 0 HcmV?d00001 diff --git a/newtheme/gui/container.png b/newtheme/gui/container.png new file mode 100644 index 0000000000000000000000000000000000000000..bd1d383cef037c2084b1b8b9c41200537eca8a53 GIT binary patch literal 2795 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 K+iNzQw0{7>GnhO8 literal 0 HcmV?d00001 diff --git a/newtheme/gui/furnace.png b/newtheme/gui/furnace.png new file mode 100644 index 0000000000000000000000000000000000000000..a5834e19516d760d1dc1b87db3e8abee756d9884 GIT binary patch literal 3153 zcmeHJdo)z-8h`h;Co|-JNu@EAFd-)y6g6_0Bq4?=x#v;wS99w9(ngiU*rs-mz7iFWdI0^lZ3c{YrIy^|8R?n(wg^*(+> zw@<}NG2zk_S5}H|LR89uu%t-f9kwq%#d3$MA0^G&(#F!7KfJ3G0OjZIE>3<2gQf5K zQ!m+R=kyQneOja>>zngb>+tyTT65>av=4duAJoI?lIpFQ%|p}MH6!ld8|0)KFaQ3k zwzX$K&N#4`ZKpUAE$!*)8EE9rHB@k4jeL;04T%hV$KI)b%of*Ns$XQAJvT90o1j^= z%}`z{;2b_II=1FRPzVhlP2Y}>8E%AYGhwZDoT1DQdbtJxP)8pVs8NAQ{A;ZxeR>VPP(^P#6%C6?tX1#L zwz{E2M1j9a9zt7P*RJ14qGZp=X=kUVu7$22oHtG0T#djK06#9W=cy*Ra3Y{RCR6dE z85ZbhRAD}_GRJfjRDmd2*2fP;f=V|UbGrQS1J?a7&LdM2R=bNRyJ$*?2mig~A z$*VZbSE2;Kw+m$-gtPHlSs@ixvr?MhA6`(tjXh*>9r}ebTij{8qd=A}pfHKCt&Uly zBN0_LdgO%3Ge1Xjf-aXKZ)fHWcFa}|Y0ma*)YSlHtuVQ9p^nVcaWR7&PA|l;K27zkw%89w+PY6P zR@!oHJ@s+xJ$`w^p&CH6mAT^`#gP>4dg!`!Ow8ugMGKiKYYD>N<3e zXsX~fCx&%0osF$jHe;*4z3t{?9tvIxovQ-m>@tAmZJC2&Il*d4Ivg|h&%PJc%iy!a z8Nz#uj0Jhx;+@kZ6!-y^QUxEFrMwwhKm9&o*yopE$Yqc8c9+|U0B1K6WoXX?EwowF zE(?^(t0vz}29_WzlqHKH3pw|z6TfGoo%f(E9ORU)*^-EOZwQtOxh$yS%*OWxzSOSn z9FTtD{TX(pP7(`xNgVJRIRl84EvkrjSn0~}q&(a~>Ji)WLIZAGXRiz|GsPF&af}~H z<2Y}07;Ufr7TB}u-&_l=P5DEA^}vNianh+8$B6=|fk-YG_`WZ2q44=Y;145ofaIH@ zcie@HJ`-W3N$?EiS!r|flo!A>irVyeV+=qCOW~s8pUeCSoT$O6uVb;TK9G6Hqc6MB zqupg6dol`J<{4TUcN`Pry$#}QO)@Ovu3?GNpxVuvKn5g=klL;J*rJEMBy>L9n2N8d zgIUF6J=RFK=8tiKFZ5*}gTRN6df)F~gZ5j4J8-wwqng%Z`6@W=_il$RNui!ffms*s ziejO~kkNzX?T;`dLligCm!u#{y?gYSn+~dkf^}=q8b}((!Na4VR~q5N!^tEI%VUE< z_@A}>Z0v-AhCDo0J>KggF9I=zB#(d)~FJr;|tg8Ywa1Ls@jpBF}iNm5|=T!>#U7mh46;YWitJ{!pIu zP+CJzLE6pF+hm?r~p7llvam6Lgw*3qR)sFO+W#PY5@y3|nav9Y$$zLzn$9UzJ4v>|o$8+aedhgmF*k0%}D zW6POPQ*QcOBdm`P$Fzr6x&kDWSZ8!qH)}c59X}cY^tSIB)^jXFJs7{5qOMhU;XT2x ze*B1RjsyN8(UydgMnsI0SShSAHZ-!2qr@#Ttv-MHU*h z&F;5#CWN_C*1+fTrjtGog5RMcg{oi0Ei>5nfP%IdUca-@o&P0~z$jlQqd`3;u5zVv z=2@Gj>)^6PK9_c%zbUJ*u+XEvvDxU|yV6y3knqiGfA|xw3Q_W;$*Xh+-j$Kg*w{&` zKF~V)E}5kvRwGGX>txihi-n&oo==v%I8xy*?iPCmPSW^7NTkA|MR*Fag>>M__{W#~ z8W%+kg{q{fhSA6dAZO(z+|4tz%|9jk-SERYQvL6yGRd{e2bdx)6Ba3bMb89D?%FFJ*=+Uw(&e1dz{yd@==)yFtaYR|DomuH i;Qzz_Xbza9S+xrP#suf+APV;T58PdMxZKzhn)xsIHi#7f literal 0 HcmV?d00001 diff --git a/newtheme/gui/gui.png b/newtheme/gui/gui.png new file mode 100644 index 0000000000000000000000000000000000000000..81af329e601467a046f59bdff22f450d23b7c7c4 GIT binary patch literal 14210 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 literal 0 HcmV?d00001 diff --git a/newtheme/gui/inventory.png b/newtheme/gui/inventory.png new file mode 100644 index 0000000000000000000000000000000000000000..0b5f2916dd4baf95803ef797b7cf2d7fca6c8c8a GIT binary patch literal 2761 zcmeHJX;f547OwYbnr3OBAp{x(n@x~`7GWUJfHoq~1Vl#JA}UQ}QE1s35F*QKaWsmu zM8h(O;GiH&v&s@A(!>dW!`3LnDj;iEgn7lx&-pXwOmfbgGpEk0Td%6#t?#?v zt$W@L7iW92gt7zxfb76JdIA6hA0mK6#LemO$Nsn>1Xv%l2B0!Ua?3{)e-{sBeZd7l z`Um(R3c8)r z?E4`ke1IkUN8#WroexE^2fW*Yv_Ewuv2UFXDiCrNYMl8OTAEhkJ6JYLGrc?Bdviy= zVs{CZ%ov=wY}$fQl1C>zb9TM)_UvuZf&&BwB|0I&J77P$hqll=63?6AHMh44W@ctu z7Y*e}4|k%8hD&>g`dAmNh$Nc)R?RCPBF*-T#-X@ zPoZSNMM0_=2Mxv>)w8((d3Ui>EP{O>;Qo+4x8*E zM#ZSi5({O2@Zg;nI=HhM;0PQsj#R6gv4|nwlroxx-86dReqgix~$0)NU10 zoAuE=3ibC3izHUmWOoiwCaEe{IDU1{RE*sMR@ozrLulV0z_4^|{L=*kFW#MyLgy{j zU~=E=VS7O68XLk0F4fEG0HtAjR|6aUT8uWcMkY|-#3pyHV%{Wum)9}hYBzBV3=-S@ zi``5hmh%ezvuu2dM9VI6?}pIx+zXqfsD5Y4jIol#ogudmNY!(!q{Cl3ci&(b+{X)T`?6#hupc zVUETK`hpndiXV@Kh=$_(cNe=Uk6EB7`ST*ijB9+`x0`Rr0pgozR{W=ArY*`E(mCGk zKpKtS#{~Hr*>Ptau_Fk_{O7WO?TD`0TQ8+(D$l6J6u}+w(e%x^39Yb=#wVG<)ZRto zRm8W(8W0xV+X}csEsP^;4=Gj1uw6IyMW4YTB%$@D2A_#!(!S@Z<1*b-5L^lhM@bJu zuE^oq4wKESW$np4D5~9~kSn_!9Kn?8%@G6hSUU5z0lqLNC*bpr?c9q4Ur?aZOw*J6 zVi*r*$qRomN0=l1PBq1Nk}&~aBU@D;=7XcZvsk|4#02++%!+5JxgL1E-9V_w2elC?=5yz5!2Hz@{q36S2XF?$YH?%CDRZ8J zLU&g?3)Tps%UmcW271oXvajis{@rv`RZ-Uf(MQyNRKQWBC2=nskoA$O>D`3+m(VoK zJ*`7J9e!7p73g*w4o=ycT6n@ldGQ})%s(B~Hfp*Q=Xdzz-HEO4?eQpITHBQ7hz>gd z>Bg{-=;m#s%Q$%VlkPs9H}ArumPNW`XzzGQz2M$=RRMHMW6KV3 zO&1%`!Uo9_?)UsfPV6ADwEOF1X0BIa!a&Vrn#ID_-5TSbhLrw`AM0yA0(J(b0VpQ1+&jqIPJ2lFGH*5{4EH@`0;Ga0BVLqpqQ{UJk=B48quq=%YaR;|oMVhyGRXWN6Bx&2Ah zrwg5{YvB|_m0x}e3>Il1PnxnXwiJ{(Lzzz6KZy$6RVTZ$s6-xC);AQs>K=H%-}rN; zr{S7m;O+W}1( zoVk^MVrGKBKA&5i)Y>Q&D3_;)l4uzCfA>Ec0~_%zF?Er`g_!Go_&+EB4z|um%Z{+G F`~!`?y>0*i literal 0 HcmV?d00001 diff --git a/newtheme/gui/items.png b/newtheme/gui/items.png new file mode 100644 index 0000000000000000000000000000000000000000..e415946d7bda0117b71f59532ff93841277b08fa GIT binary patch literal 20946 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 F{{hw#I{^Ry literal 0 HcmV?d00001 diff --git a/newtheme/gui/particles.png b/newtheme/gui/particles.png new file mode 100644 index 0000000000000000000000000000000000000000..ac7e39f4550b9bdad5470a721cb296909916465e GIT binary patch literal 1992 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K58911MRQ8&P5Fo{p?&#~tz_78O`%fY(0|PTd zfKP}kQ2hV@|3GpSjE2An41x5rH_4!kQWE4B49o~4888HYXIBL#0nP%C$YKTtzO^9C z$oIY>9Vp0N;_2(kew&GvM@>M_q2CH9Bw6AbQ4*Y=R#Ki=l*$m0n3-3i=jR%tP-d)W zs%K$t-4F{bWTZS@978JN-cG&Ubtr)0$eaK5C2yzd?he{enYlUe!vc$hv`fFF*4wwe zzW7@uKD_RfligmP!=J4!^b?*+r`?!eyeLlkhW-9a4|9!He$K z`-f5O=JoNvr1wZN|FRTqcqQCo>|mhebb=vdzQP>FCP6_bwgtaf9`XqEbO;zRTvg{t zZ%A-ynZUTh&e4LIMOmqZ$KfmIAxQ-ZLB$k?RsI6!7!G!DC^84sHWjdOxVdmhjv6@{ gmc%8Z|MwcqU;NlMHB4X%C@V2|y85}Sb4q9e0GVDrMgRZ+ literal 0 HcmV?d00001 diff --git a/newtheme/gui/slot.png b/newtheme/gui/slot.png new file mode 100644 index 0000000000000000000000000000000000000000..4eb39baf7f8070f9020255e457f1f835bf33005b GIT binary patch literal 1829 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H3?#oinD`S&v7|ftIx;Y9?C1WI$jZRL%n;xc z;tCYkkmEKHWYE{uHa9nSH5T?X6Adz8$ncY^4r8wiW37&6tBz%@j$^HlWT}f_t&3x? zj^?h9NaddHU3H0}lj|31e@H zW^9OLYm8uTie+q!Wp0dRYm8-Yj%RO)WNwLKZjEMbh~#RF;%bQHXpG}*jOA^MHtRElJ#+>FV9x-8;8$IC${jnUjYuUp#%|#*MeHo_u)w;{X5uKwpf4(GVab z1YU1#u4iCiWGD&p3kD{nkqj7uzq6|XgOIbpBeIx*f$snaGiF`ume_y3w(`D0y%75gt;(*sq9`4%1S zeSemLSx58So=+d;EAnPcdizxVSD#1N`;KGI(koae6y0u9zIHJ!p`zzk+v*lWh3(me zOPz0c>(8_QTl@9L@Acy9-P`*=eeX!x>3P{##+N^VgZa*;#OHS6dhez(EMZ;p(o~;e znc&4z^H~fB%J$xy`TT_H()3h2W0hM=@jv7q&3^ z>c1CN4aWLsUU;u#{L$jA_x}gO#82|ptb)E@jY>MI8ZJ+-Jd&M+kF4@0EEA1QpJ&OWXbW>j8iE1+T*yjtWW0_$u5MW?=|<>iTin4E{sg z7y{k4do#=qcj>nMES zj-ZXmHr9@5U$odyye^*-_^(kdW32*5fz|wKhIRZO__x7+?I6 zJ9zZx^8EL4^*{eS`THm$f?@Z+uNNOmD{(A{I`Fz_y;FhsS<}+rTb_E}$i1YuIPz!p x;yCdfUv->rq z5BKz**L<+{8fSQeiN5B)Q;fMDeGhIlpRwHiFY}4_>`5FlPx`y(U(31utncdq>xO!! z4;40ZxI$+?w^UM^mRhJ@a6q=9Tb_kMfWZOeL^MW2SK!NDTSp0Gc`>jp!_XC<6o5>PwOQ zfzW!d+jF)(E0{OkoBc?G3~2Fy95ajs zED8(`?Kvz)%YRwUIqs%VylQ^3@&*07jBn%}IHmK?XwFSmo`5$@6d3w|HoTb7>+meZ zzWwu_I~**gn*>ily&+%uQ|LliLUGoN&wE5?$a5X|$2euf*K2bwS;qNQvk>DnRx_~E z!V+dBYj1D|r>q6LZ`b#I6cyB5I%Ruq@s0~GWgT|i>zct6;3?dCq*Muf=WuZU$O` a0>=9fze_zVp2pY=vcl8V&t;ucLK6VCb_rDg literal 0 HcmV?d00001 diff --git a/newtheme/gui/unknown_pack.png b/newtheme/gui/unknown_pack.png new file mode 100644 index 0000000000000000000000000000000000000000..3a45a90ec3caee3cfad11c4b0f9242ab312dc97e GIT binary patch literal 13013 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 literal 0 HcmV?d00001 diff --git a/newtheme/guiTheme.xml b/newtheme/guiTheme.xml new file mode 100644 index 0000000..0b93402 --- /dev/null +++ b/newtheme/guiTheme.xml @@ -0,0 +1,468 @@ + + + + + + + + + + + + + + + + + + + + + ctrl A + ctrl X + ctrl C + ctrl V + + + + none + none + normal + left + 0 + 0 + 0 + 0 + eforen.cursor.normal + -defaultInputMap + + + + left + + + + editfield.* + eforen.editfield.* + background.border + 0x25CF + 32767 + 5 + + eforen.cursor.text + 150 + + + + eforen.button.* + background.border + center + 56 + + + + eforen.togglebutton.* + background.border + + + + + + eforen.checkbox.* + + + + eforen.progressbar.* + background.border + 100 + + + + eforen.progressbar.progressImage-glow + + + + eforen.progressbar.progressImage-glow-anim + + + + eforen.hscrollbar.background + + eforen.hscrollbar.leftbutton.* + + + eforen.hscrollbar.rightbutton.* + + + eforen.hscrollbar.thumb.* + + true + 106 + + + + eforen.vscrollbar.background + + eforen.vscrollbar.upbutton.* + + + eforen.vscrollbar.downbutton.* + + + eforen.vscrollbar.thumb.* + + true + 106 + + + + + listbox.background + 22 + SINGLE_COLUMN + true + false + false + 8000 + 8000 + + + listbox.display.* + listbox-display + 1,2,1,2 + + + + + eforen.combobox.background + 150 + + eforen.combobox.display.selection + 4,8,4,8 + 100 + left + + + eforen.combobox.button.* + + + + + + eforen.combobox.listbox.background + + + + + valuadjuster.button.* + background.border + + + + + - + + + + + + + center + + + valuadjuster.edit.background + + 100 + true + + + + + + + 100 + 100 + 32767 + 32767 + true + 5 + 10 + + scrollpane.dragbutton.* + + + + + + + normal + + + + + + + box + background.border + + + box.separator + background.border + + none + + + none + pathbutton.* + + + + + + tooltip.background + background.border + 250 + + + + + 8,8 + 12,12 + 20,20 + 25,25 + + + + + + + colorselector.* + 2 + 30 + 128 + + + colorselector.* + 2 + 128 + 128 + + + 32767 + + + Current color: + + + 2 + 64 + 64 + + white + + + eforen.cursor.arrow.* + + + + eforen.frame.resizeable + background.border + 5 + 5 + -5 + 5 + false + 0 + 0 + false + 0 + 0 + eforen.cursor.arrow.* + #F888 + 200 + 200 + 200 + 200 + + top + + + eforen.frame.closebutton.* + background.border + 0 + + + + + + eforen.frame.resizeable-title + background.border + 10 + 30 + -70 + 27 + true + -28 + 15 + + + + eforen.graph.background + background.border + 100 + 100 + 5 + 8 + + + white + 1.0 + + + + none + + + + + 13 + 20,19 + + + none + none + table.* + table.* + 20 + + + + + + + eforen.tableheader.background + + 256 + 20 + 3 + eforen.cursor.arrow.left + none + + + ctrl SPACE + + + + 20 + + + 20 + + + + + + box + background.border + + + + + 0 + + + + + + + + + none + + + Animate images + Animate the images while they are displayed + + + editfield.* + eforen.editfield.* + background.border + + none + 0 + + topleft + + + 100 + 100 + + + + + none + + + Accept + + + Cancel + + + + + eforen.frame.fixed + background.border + + + + + gui.background + + + + + 0,0,0,10 + + twl-logo + textarea.ul-bullet + + 400 + + + 42,25,26,15 + + + + + + + + + + + + + + center + + + + white + center + + + + + + + + 5 + CENTER + + diff --git a/newtheme/simple.png b/newtheme/simple.png new file mode 100644 index 0000000000000000000000000000000000000000..63daa3c01c935d8d7083fc1ab6f4761feded87c7 GIT binary patch literal 4379 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 V-=4~o@tXhu002ovPDHLkV1g?dZ}R{E literal 0 HcmV?d00001 diff --git a/newtheme/simple.xml b/newtheme/simple.xml new file mode 100644 index 0000000..fb41fdd --- /dev/null +++ b/newtheme/simple.xml @@ -0,0 +1,1121 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ctrl A + ctrl X + ctrl C + ctrl V + + + + none + none + normal + left + 0 + 0 + 0 + 0 + -defaultInputMap + + + + button.* + background.border + center + + + + togglebutton.* + background.border + + + + radiobutton.* + background.border + + + + checkbox.* + 13 + 13 + + + + + + + editfield.* + background.border + 0x25CF + 32767 + 5 + + cursor.text + 150 + + + -borderG + background.border + + + + + -borderG + background.border + 0 + + + + + scrollbar.background + + hscrollbar.leftbutton.* + 16 + + + hscrollbar.rightbutton.* + 16 + + + scrollbar.thumb.* + + true + 48 + 16 + + + + scrollbar.background + + vscrollbar.upbutton.* + 16 + + + vscrollbar.downbutton.* + 16 + + + scrollbar.thumb.* + + true + 16 + 48 + + + + + + + -button-depressed + background.border + font.lineHeight + 4 + SINGLE_COLUMN + true + false + false + 8000 + 8000 + + + listbox.display.* + listbox-display + 2 + + + + + -button-depressed + + combobox.display.* + 3 + 50 + left + combobox + + + combobox.button.* + 18 + + + + + -borderH + 2 + + none + 0 + + 150 + + + + + + 100 + 100 + 32767 + 32767 + false + 5 + 10 + + + + + + splitpane.splitter.* + background.border + cursor.resizecolumn + + + splitpane.vsplitter.* + background.border + cursor.resizerow + + + + + 5,5 + 8,8 + 10,10 + 15,15 + + + + + -button-depressed + background.border + + normal + + + + + + + + + 15 + 14,11 + + + font.lineHeight + 6 + + listbox-display + 0,3,0,0 + + + + + + propertysheet.sublist.* + + + + + treetable.treebutton.* + + + columnHeader.* + + 256 + 20 + 3 + cursor.resizecolumn + none + + table.row.* + + ctrl SPACE + DOWN + UP + NEXT + PRIOR + HOME + END + shift DOWN + shift UP + shift NEXT + shift PRIOR + shift HOME + shift END + ctrl DOWN + ctrl UP + ctrl NEXT + ctrl PRIOR + ctrl HOME + ctrl END + ADD + SUBTRACT + + + + 20 + + + 20 + + + + + -borderH + 10 + + + + 20 + + + + + + + 0 + + treepathdisplay.node.* + + + cursor.text + 2,0 + + node.font.lineHeight + 4 + center + cursor.text + + + + + + -button-depressed + treecomboboxPopup + + combobox.display.* + 50 + + 3 + + combobox + + + combobox + + + + + combobox.button.* + 18 + + + + -borderH + 2 + + + none + 0 + 0 + + + 300 + + + + -borderG + + + + + + + 32767 + + + fileselector.buttonOneLevelUp.* + 21 + + + fileselector.buttonHome.* + 21 + + + fileselector.buttonMRU.* + 20 + Shows recently used folders + + + fileselector.buttonMRU.* + 20 + Shows recently opened files + + + OK + 80 + + + Cancel + 80 + + + fileselector.buttonShowFolders.* + Shows folders in the file table + 20 + 20 + + + fileselector.buttonShowHidden.* + Shows hidden or system files + 20 + 20 + + + fileselector.buttonRefresh.* + Refreshes the file table + 20 + 20 + + + -button-depressed + 2 + + + 70 + 80 + 140 + + + + + + BACK + RETURN + + + + 20 + 18 + + + + -borderH + 2 + + none + 0 + + + + -borderH + 2 + + + none + 0 + + + OK + 80 + + + Cancel + 80 + + + + + + -button-depressed + background.border + 100 + 100 + 1 + 1 + + + black + 1.0 + + + + + + + none + + - + 0 + 16 + + + + + 0 + 16 + + + valueadjuster.display.* + center + + + 100 + true + + + + + -borderE + -gradC + 2 + 100 + + + + + + + + + -button-depressed + 2 + 30 + 128 + colorselector.* + + + -button-depressed + 2 + 128 + 128 + colorselector.* + + + 32767 + + + Current color: + + + -button-depressed + 2 + 64 + 64 + + white + + + + Current color in ARGB hex format + + + + + frame.resizeable-title + background.border + 4 + 6 + -24 + 20 + true + -22 + 6 + false + -18 + -18 + white + 0 + 0 + 0 + 0 + arrow.* + + left + + + + + + frame.closebutton.* + 16 + 14 + + + frame.resizeIcon + + + + -borderA + background.border + false + 4 + + + true + + + + + + + popupmenu.button.* + popupmenu-button + 5,2 + + + + -borderA + background.border + + + + popupmenu.separator + + + 0 + + + + + + + + 0 + BOTTOMLEFT + + + + CTRL TAB + CTRL SHIFT TAB + + + + + + + + + + + + none + + twl-logo + textarea.ul-bullet + + 400 + + + -button-depressed + background.border + + + + + + + + + -button-depressed + 2 + + + + none + 4 + + + editfield.* + background.border + + none + 0 + + topleft + + + 100 + 100 + + + + + + + + image + + + + + + + Accept + + + Cancel + + + + -borderA + 6 + + + + + buttonBox.background + 3,2,1,2 + + 5 + BOTTOM + + + + -button-normal + background.border + + -button-depressed + background.border + + + + blockgame0 + blockgame1 + blockgame2 + blockgame3 + blockgame4 + blockgame5 + blockgame6 + blockgame7 + + + + + + + + + + black + center + + + + white + center + + + + + + + + -button-depressed + background.border + 0 + 150 + + none + 384 + 400 + + + + + + + + -button-depressed + background.border + + none + 10 + + + + diff --git a/newtheme/simple.xml.old b/newtheme/simple.xml.old new file mode 100644 index 0000000..b420e81 --- /dev/null +++ b/newtheme/simple.xml.old @@ -0,0 +1,1106 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ctrl A + ctrl X + ctrl C + ctrl V + + + + none + none + normal + left + 0 + 0 + 0 + 0 + -defaultInputMap + + + + button.* + background.border + center + + + + togglebutton.* + background.border + + + + radiobutton.* + background.border + + + + checkbox.* + 13 + 13 + + + + + + + editfield.* + background.border + 0x25CF + 32767 + 5 + + cursor.text + 150 + + + -borderG + background.border + + + + + -borderG + background.border + 0 + + + + + scrollbar.background + + hscrollbar.leftbutton.* + 16 + + + hscrollbar.rightbutton.* + 16 + + + scrollbar.thumb.* + + true + 48 + 16 + + + + scrollbar.background + + vscrollbar.upbutton.* + 16 + + + vscrollbar.downbutton.* + 16 + + + scrollbar.thumb.* + + true + 16 + 48 + + + + + + + -borderC + background.border + font.lineHeight + 4 + SINGLE_COLUMN + true + false + false + 8000 + 8000 + + + listbox.display.* + listbox-display + 2 + + + + + -borderC + + combobox.display.* + 3 + 50 + left + combobox + + + combobox.button.* + 18 + + + + + -borderH + 2 + + none + 0 + + 150 + + + + + + 100 + 100 + 32767 + 32767 + false + 5 + 10 + + + + + + splitpane.splitter.* + background.border + cursor.resizecolumn + + + splitpane.vsplitter.* + background.border + cursor.resizerow + + + + + 5,5 + 8,8 + 10,10 + 15,15 + + + + + -borderC + background.border + + normal + + + + + + + + + 15 + 14,11 + + + font.lineHeight + 6 + + listbox-display + 0,3,0,0 + + + + + + propertysheet.sublist.* + + + + + treetable.treebutton.* + + + columnHeader.* + + 256 + 20 + 3 + cursor.resizecolumn + none + + table.row.* + + ctrl SPACE + DOWN + UP + NEXT + PRIOR + HOME + END + shift DOWN + shift UP + shift NEXT + shift PRIOR + shift HOME + shift END + ctrl DOWN + ctrl UP + ctrl NEXT + ctrl PRIOR + ctrl HOME + ctrl END + ADD + SUBTRACT + + + + 20 + + + 20 + + + + + -borderH + 10 + + + + 20 + + + + + + + 0 + + treepathdisplay.node.* + + + cursor.text + 2,0 + + node.font.lineHeight + 4 + center + cursor.text + + + + + + -borderC + treecomboboxPopup + + combobox.display.* + 50 + + 3 + + combobox + + + combobox + + + + + combobox.button.* + 18 + + + + -borderH + 2 + + + none + 0 + 0 + + + 300 + + + + -borderG + + + + + + + 32767 + + + fileselector.buttonOneLevelUp.* + 21 + + + fileselector.buttonHome.* + 21 + + + fileselector.buttonMRU.* + 20 + Shows recently used folders + + + fileselector.buttonMRU.* + 20 + Shows recently opened files + + + OK + 80 + + + Cancel + 80 + + + fileselector.buttonShowFolders.* + Shows folders in the file table + 20 + 20 + + + fileselector.buttonShowHidden.* + Shows hidden or system files + 20 + 20 + + + fileselector.buttonRefresh.* + Refreshes the file table + 20 + 20 + + + -borderC + 2 + + + 70 + 80 + 140 + + + + + + BACK + RETURN + + + + 20 + 18 + + + + -borderH + 2 + + none + 0 + + + + -borderH + 2 + + + none + 0 + + + OK + 80 + + + Cancel + 80 + + + + + + -borderC + background.border + 100 + 100 + 1 + 1 + + + black + 1.0 + + + + + + + none + + - + 0 + 16 + + + + + 0 + 16 + + + valueadjuster.display.* + center + + + 100 + true + + + + + -borderE + -gradC + 2 + 100 + + + + + + + + + -borderC + 2 + 30 + 128 + colorselector.* + + + -borderC + 2 + 128 + 128 + colorselector.* + + + 32767 + + + Current color: + + + -borderC + 2 + 64 + 64 + + white + + + + Current color in ARGB hex format + + + + + frame.resizeable-title + background.border + 4 + 6 + -24 + 20 + true + -22 + 6 + false + -18 + -18 + white + 0 + 0 + 0 + 0 + arrow.* + + left + + + + + + frame.closebutton.* + 16 + 14 + + + frame.resizeIcon + + + + -borderA + background.border + false + 4 + + + true + + + + + + + popupmenu.button.* + popupmenu-button + 5,2 + + + + -borderA + background.border + + + + popupmenu.separator + + + 0 + + + + + + + + 0 + BOTTOMLEFT + + + + CTRL TAB + CTRL SHIFT TAB + + + + + + + + + + + + none + + twl-logo + textarea.ul-bullet + + 400 + + + -borderC + background.border + + + + + + + + + -borderC + 2 + + + + none + 4 + + + editfield.* + background.border + + none + 0 + + topleft + + + 100 + 100 + + + + + + + + image + + + + + + + Accept + + + Cancel + + + + -borderA + 6 + + + + + buttonBox.background + 3,2,1,2 + + 5 + BOTTOM + + + + -button-normal + background.border + + -borderC + background.border + + + + blockgame0 + blockgame1 + blockgame2 + blockgame3 + blockgame4 + blockgame5 + blockgame6 + blockgame7 + + + + + + + + + + black + center + + + + white + center + + + + + + + + -borderC + background.border + 0 + 150 + + none + 384 + 400 + + + + + + + + -borderC + background.border + + none + 10 + + + + diff --git a/newtheme/simpleGameMenu.xml b/newtheme/simpleGameMenu.xml new file mode 100644 index 0000000..6893f06 --- /dev/null +++ b/newtheme/simpleGameMenu.xml @@ -0,0 +1,55 @@ + + + + + + + + + + + + + + + + + + + + ctrl A + ctrl X + ctrl C + ctrl V + + + + none + none + normal + left + 0 + 0 + 0 + 0 + -defaultInputMap + + + + button.* + background.border + center + + + + chaos_sphere + + + white + + + \ No newline at end of file From 1c7a81b00f913209777f62e72d2154df4df81fec Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 12 Oct 2011 20:52:39 -0230 Subject: [PATCH 19/49] Added ModAction support for CallbackWithReason --- mcp/ModAction.java | 23 ++++++++++++++++++++++- 1 file changed, 22 insertions(+), 1 deletion(-) diff --git a/mcp/ModAction.java b/mcp/ModAction.java index c052c5e..526c9d0 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -6,6 +6,9 @@ import java.security.InvalidParameterException; import java.util.ArrayList; +import de.matthiasmann.twl.CallbackWithReason; +import de.matthiasmann.twl.ListBox; +import de.matthiasmann.twl.ListBox.CallbackReason; import de.matthiasmann.twl.TextArea; /** @@ -18,7 +21,7 @@ */ @SuppressWarnings("rawtypes") public class ModAction implements Runnable, PropertyChangeListener, - TextArea.Callback { + TextArea.Callback, CallbackWithReason { @SuppressWarnings("unchecked") private static Boolean checkArguments(Class[] classTypes, Object[] arguments) { if (classTypes.length != arguments.length) { @@ -117,6 +120,24 @@ public Object[] call(Object... args) throws Exception { } } + @Override + public void callback(CallbackReason reason) { + if ((methodParams.length != 1) + || (methodParams[0] != CallbackReason.class)) { + throw new RuntimeException( + "invalid method parameters for a CallbackWithReason callback. Modaction is '" + + getTag() + "'."); + } + try { + call(reason); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException( + "Error when calling CallbackWithReason callback. Modaction is '" + + getTag() + "'.", e); + } + } + private Object callInternal(Object... args) throws Exception { if (!ModAction.checkArguments(methodParams, args)) { if (defaultArguments != null) { From 8b5ec2d819750418143e403342b88fbf782ee8f7 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Thu, 13 Oct 2011 17:41:45 -0230 Subject: [PATCH 20/49] Added specific checks against incorrect installation of GuiAPI (aka Mycraft bug). --- mcp/GuiWidgetScreen.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 8d76ac2..4c2476a 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -36,6 +36,16 @@ public static GuiWidgetScreen getInstance() { if (GuiWidgetScreen.instance != null) { return GuiWidgetScreen.instance; } + + String GuiAPILoc = GuiWidgetScreen.class.getProtectionDomain() + .getCodeSource().getLocation().toString(); + String MinecraftLoc = MinecraftImpl.class.getProtectionDomain() // normally I would just use Minecraft.class, but with a mod that edits it it might have issues. But nobody is going to ever need or want to edit MinecraftImpl.class. + .getCodeSource().getLocation().toString(); + + if (!GuiAPILoc.equals(MinecraftLoc)) { + throw new RuntimeException( + "GuiAPI has detected that it was not installed directly into the minecraft jar as required. If you are trying to use a mod manager such as MyCraft, or you are trying to use Modloader's mods folder, this would cause this issue. Please install directly into the minecraft jar in order for GuiAPI to work correctly."); + } try { GuiWidgetScreen.instance = new GuiWidgetScreen(); GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); From f1dd88065c5491c72f4c01100ac366578055e54c Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 25 Oct 2011 00:21:09 -0230 Subject: [PATCH 21/49] added missing parameters to stop some spam. --- theme/twlGuiTheme.xml | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/theme/twlGuiTheme.xml b/theme/twlGuiTheme.xml index 323b25a..0802b08 100644 --- a/theme/twlGuiTheme.xml +++ b/theme/twlGuiTheme.xml @@ -154,6 +154,8 @@ false false + 0 + 0 scrollbar @@ -191,6 +193,14 @@ background + + + + + + + + @@ -226,7 +236,6 @@ Current color in ARGB hex format - background 50 From 352ed618ba0905fb13e3350756facd7861dd167c Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 25 Oct 2011 00:26:46 -0230 Subject: [PATCH 22/49] Added SettingList (As an arrayList). Added SettingDictionary (What used to be SettingList). Added WidgetList (A listbox linked up with SettingList). Updated some things in ModSettings. Updated the Ant task. Added GuiApiFontHelper (allows you do do easy colouring of fonts, and set them for some widgets). Added some TWL examples (Includes SettingsList example, and the font helper). Modified GuiWidgetScreen slightly to add a field for the url of the theme. --- GuiAPIAnt.xml | 71 +++--- mcp/GuiApiFontHelper.java | 432 +++++++++++++++++++++++++++++++++ mcp/GuiWidgetScreen.java | 13 +- mcp/ModSettings.java | 25 +- mcp/SettingDictionary.java | 76 ++++++ mcp/SettingList.java | 96 +++++--- mcp/WidgetList.java | 100 ++++++++ mcp/mod_GuiApiTWLExamples.java | 155 ++++++++++++ 8 files changed, 897 insertions(+), 71 deletions(-) create mode 100644 mcp/GuiApiFontHelper.java create mode 100644 mcp/SettingDictionary.java create mode 100644 mcp/WidgetList.java create mode 100644 mcp/mod_GuiApiTWLExamples.java diff --git a/GuiAPIAnt.xml b/GuiAPIAnt.xml index 6e3a451..4219d94 100644 --- a/GuiAPIAnt.xml +++ b/GuiAPIAnt.xml @@ -1,39 +1,38 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/mcp/GuiApiFontHelper.java b/mcp/GuiApiFontHelper.java new file mode 100644 index 0000000..fefed10 --- /dev/null +++ b/mcp/GuiApiFontHelper.java @@ -0,0 +1,432 @@ +package net.minecraft.src; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.Collection; +import java.util.HashMap; +import java.util.Map; + +import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.EditField; +import de.matthiasmann.twl.TextWidget; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import de.matthiasmann.twl.renderer.FontParameter; +import de.matthiasmann.twl.renderer.lwjgl.LWJGLFont; +import de.matthiasmann.twl.utils.StateExpression; + +public class GuiApiFontHelper { + private class FontStateHelper { + private Color color; + private StateExpression condition; + private Object fontState; + private int offsetX; + private int offsetY; + private int style; + private int underlineOffset; + + public FontStateHelper(Object font) throws Throwable { + fontState = font; + condition = (StateExpression) GuiApiFontHelper.fontStateCondition + .get(fontState); + color = ((Color) GuiApiFontHelper.fontStateColor.get(fontState)); + offsetX = GuiApiFontHelper.fontStateOffsetX.getInt(fontState); + underlineOffset = GuiApiFontHelper.fontStateUnderlineOffset + .getInt(fontState); + offsetY = GuiApiFontHelper.fontStateOffsetY.getInt(fontState); + style = GuiApiFontHelper.fontStateStyle.getInt(fontState); + } + + public Color getColor() { + return color; + } + + public StateExpression getCondition() { + return condition; + } + + public boolean getLineThrough() { + return (style & 2) == 2; + } + + public int getOffsetX() { + return offsetX; + } + + public int getOffsetY() { + return offsetY; + } + + public boolean getUnderline() { + return (style & 1) == 1; + } + + public int getUnderlineOffset() { + return underlineOffset; + } + + public void setColor(Color col) { + color = col; + SyncWithState(); + } + + public void setInternalReference(Object ref) { + fontState = ref; + } + + public void setLineThrough(boolean val) { + if (getLineThrough() != val) { + style ^= 2; + SyncWithState(); + } + } + + public void setOffsetX(int i) { + offsetX = i; + SyncWithState(); + } + + public void setOffsetY(int i) { + offsetY = i; + SyncWithState(); + } + + public void setUnderline(boolean val) { + if (getUnderline() != val) { + style ^= 1; + SyncWithState(); + } + } + + public void setUnderlineOffset(int i) { + underlineOffset = i; + SyncWithState(); + } + + public void SyncWithState() { + try { + GuiApiFontHelper.fontStateColor.set(fontState, color); + GuiApiFontHelper.fontStateCondition.set(fontState, condition); + GuiApiFontHelper.fontStateOffsetX.set(fontState, offsetX); + GuiApiFontHelper.fontStateOffsetY.set(fontState, offsetY); + GuiApiFontHelper.fontStateUnderlineOffset.set(fontState, + underlineOffset); + GuiApiFontHelper.fontStateStyle.set(fontState, style); + } catch (Throwable e) { + e.printStackTrace(); + } + } + } + + enum FontStates { + disabled, error, hover, normal, textSelection, warning + } + + private static Map customFontWidgets; + private static Field editFieldTextRenderer; + + static Field fontStateColor; + + static Field fontStateCondition; + static Field fontStateOffsetX; + static Field fontStateOffsetY; + static Field fontStateStyle; + static Field fontStateUnderlineOffset; + private static Field getState; + + private static Field lwjglFontStates; + static { + GuiApiFontHelper.customFontWidgets = new HashMap(); + try { + GuiApiFontHelper.editFieldTextRenderer = EditField.class + .getDeclaredField("textRenderer"); + GuiApiFontHelper.editFieldTextRenderer.setAccessible(true); + + GuiApiFontHelper.lwjglFontStates = LWJGLFont.class + .getDeclaredField("fontStates"); + GuiApiFontHelper.lwjglFontStates.setAccessible(true); + + Class fontState = LWJGLFont.class.getDeclaredClasses()[0]; + + GuiApiFontHelper.fontStateCondition = fontState + .getDeclaredField("condition"); + GuiApiFontHelper.fontStateCondition.setAccessible(true); + + GuiApiFontHelper.fontStateColor = fontState + .getDeclaredField("color"); + GuiApiFontHelper.fontStateColor.setAccessible(true); + + GuiApiFontHelper.fontStateOffsetX = fontState + .getDeclaredField("offsetX"); + GuiApiFontHelper.fontStateOffsetX.setAccessible(true); + + GuiApiFontHelper.fontStateOffsetY = fontState + .getDeclaredField("offsetY"); + GuiApiFontHelper.fontStateOffsetY.setAccessible(true); + + GuiApiFontHelper.fontStateStyle = fontState + .getDeclaredField("style"); + GuiApiFontHelper.fontStateStyle.setAccessible(true); + + GuiApiFontHelper.fontStateUnderlineOffset = fontState + .getDeclaredField("underlineOffset"); + GuiApiFontHelper.fontStateUnderlineOffset.setAccessible(true); + + Class[] stateClasses = StateExpression.class.getDeclaredClasses(); + + GuiApiFontHelper.getState = stateClasses[1] + .getDeclaredField("state"); + GuiApiFontHelper.getState.setAccessible(true); + + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public static void resyncCustomFonts() { + for (Map.Entry entry : GuiApiFontHelper.customFontWidgets + .entrySet()) { + // probably going to want to optimize this I think + GuiApiFontHelper font = entry.getValue(); + Widget widget = entry.getKey(); + if (widget instanceof TextWidget) { + font.setFont((TextWidget) widget); + } + if (widget instanceof EditField) { + font.setFont((EditField) widget); + } + if (widget instanceof WidgetText) { + font.setFont((WidgetText) widget); + } + } + } + + LWJGLFont myFont; + + private Map states; + + public GuiApiFontHelper() { + states = new HashMap(); + try { + GuiWidgetScreen widgetScreen = GuiWidgetScreen.getInstance(); + LWJGLFont baseFont = (LWJGLFont) widgetScreen.theme + .getDefaultFont(); + + Object[] fontStateObjects = (Object[]) GuiApiFontHelper.lwjglFontStates + .get(baseFont); + + FontStateHelper[] fontStates = new FontStateHelper[fontStateObjects.length]; + + for (int i = 0; i < fontStates.length; i++) { + fontStates[i] = new FontStateHelper(fontStateObjects[i]); + StateExpression exp = fontStates[i].getCondition(); + if (exp == null) { + states.put(FontStates.normal, fontStates[i]); + } else { + StateKey key = (StateKey) GuiApiFontHelper.getState + .get(exp); + String name = key.getName(); + states.put(FontStates.valueOf(name), fontStates[i]); + } + } + + HashMap defaultParams = new HashMap(); + + int defStateNum = -1; + FontStateHelper defHelper = states.get(FontStates.normal); + for (int i = 0; i < fontStates.length; i++) { + if (fontStates[i] == defHelper) { + defStateNum = i; + + defaultParams.put("color", defHelper.getColor().toString()); + defaultParams.put("offsetX", + Integer.toString(defHelper.getOffsetX())); + defaultParams.put("offsetY", + Integer.toString(defHelper.getOffsetY())); + defaultParams.put("underlineOffset", + Integer.toString(defHelper.getUnderlineOffset())); + defaultParams.put("underline", + Boolean.toString(defHelper.getUnderline())); + defaultParams.put("linethrough", + Boolean.toString(defHelper.getLineThrough())); + break; + } + } + + defaultParams.put("filename", "font.fnt"); + + Collection conditionalParameters = new ArrayList(); + + for (int i = 0; i < fontStates.length; i++) { + if (i == defStateNum) { + continue; + } + FontStateHelper fontHelper = fontStates[i]; + + Map differences = new HashMap(); + + if (fontHelper.getColor() != defHelper.getColor()) { + differences.put("color", fontHelper.getColor().toString()); + } + + if (fontHelper.getOffsetX() != defHelper.getOffsetX()) { + differences.put("offsetX", + Integer.toString(fontHelper.getOffsetX())); + } + + if (fontHelper.getOffsetY() != defHelper.getOffsetY()) { + differences.put("offsetY", + Integer.toString(fontHelper.getOffsetY())); + } + + if (fontHelper.getUnderlineOffset() != defHelper + .getUnderlineOffset()) { + differences.put("underlineOffset", + Integer.toString(fontHelper.getUnderlineOffset())); + } + + if (fontHelper.getUnderline() != defHelper.getUnderline()) { + differences.put("underline", + Boolean.toString(fontHelper.getUnderline())); + } + + if (fontHelper.getLineThrough() != defHelper.getLineThrough()) { + differences.put("linethrough", + Boolean.toString(fontHelper.getLineThrough())); + } + + conditionalParameters.add(new FontParameter(fontHelper + .getCondition(), differences)); + } + + myFont = (LWJGLFont) widgetScreen.renderer.loadFont( + GuiWidgetScreen.themeURL, defaultParams, + conditionalParameters); + + fontStateObjects = (Object[]) GuiApiFontHelper.lwjglFontStates + .get(myFont); + + for (int i = 0; i < fontStateObjects.length; i++) { + FontStateHelper updatedReference = new FontStateHelper( + fontStateObjects[i]); + StateExpression exp = updatedReference.getCondition(); + if (exp == null) { + states.get(FontStates.normal).setInternalReference( + fontStateObjects[i]); + } else { + FontStates state = FontStates + .valueOf(((StateKey) GuiApiFontHelper.getState + .get(exp)).getName()); + states.get(state).setInternalReference(fontStateObjects[i]); + } + } + + } catch (Throwable e) { + throw new RuntimeException(e); + } + } + + public Color getColor(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getColor(); + } + return null; + } + + public boolean getLineThrough(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getLineThrough(); + } + return false; + } + + public int getOffsetX(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getOffsetX(); + } + return 0; + } + + public int getOffsetY(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getOffsetY(); + } + return 0; + } + + public boolean getUnderline(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getUnderline(); + } + return false; + } + + public int getUnderlineOffset(FontStates state) { + if (states.containsKey(state)) { + return states.get(state).getUnderlineOffset(); + } + return 0; + } + + public void setColor(FontStates state, Color col) { + if (states.containsKey(state)) { + states.get(state).setColor(col); + } + } + + public void setFont(EditField widget) { + try { + setFont((TextWidget) GuiApiFontHelper.editFieldTextRenderer + .get(widget)); + GuiApiFontHelper.customFontWidgets.put(widget, this); + } catch (Throwable e) { + e.printStackTrace(); + } + + } + + public void setFont(TextWidget widget) { + widget.setFont(myFont); + GuiApiFontHelper.customFontWidgets.put(widget, this); + } + + public void setFont(WidgetText widget) { + if (widget.displayLabel != null) { + widget.displayLabel.setFont(myFont); + GuiApiFontHelper.customFontWidgets.put(widget, this); + } + setFont(widget.editField); + GuiApiFontHelper.customFontWidgets.put(widget, this); + } + + public void setLineThrough(FontStates state, boolean val) { + if (states.containsKey(state)) { + states.get(state).setLineThrough(val); + } + } + + public void setOffsetX(FontStates state, int i) { + if (states.containsKey(state)) { + states.get(state).setOffsetX(i); + } + } + + public void setOffsetY(FontStates state, int i) { + if (states.containsKey(state)) { + states.get(state).setOffsetY(i); + } + } + + public void setUnderline(FontStates state, boolean val) { + if (states.containsKey(state)) { + states.get(state).setUnderline(val); + } + } + + public void setUnderlineOffset(FontStates state, int i) { + if (states.containsKey(state)) { + states.get(state).setUnderlineOffset(i); + } + } + +} diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 4c2476a..1cc1199 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import java.net.URL; + import net.minecraft.client.Minecraft; import de.matthiasmann.twl.GUI; import de.matthiasmann.twl.Widget; @@ -26,6 +28,8 @@ public class GuiWidgetScreen extends Widget { * The width of the screen that the widget will render on. */ public static int screenwidth; + + public static URL themeURL; /** * get the instance of GuiWidget, creating it if needed @@ -52,11 +56,11 @@ public static GuiWidgetScreen getInstance() { String themename = "twlGuiTheme.xml"; GuiWidgetScreen.instance.gui = new GUI(GuiWidgetScreen.instance, GuiWidgetScreen.instance.renderer, new LWJGLInput()); - ModSettings.dbgout(GuiWidgetScreen.class.getClassLoader() - .getResource(themename).toString()); + themeURL = GuiWidgetScreen.class.getClassLoader().getResource(themename); + //themeURL = new URL("file:/G:/MineCraft/GitHub/GuiAPI/theme/" + themename); // Testing + ModSettings.dbgout(themeURL.toString()); GuiWidgetScreen.instance.theme = ThemeManager.createThemeManager( - GuiWidgetScreen.class.getClassLoader().getResource( - themename), GuiWidgetScreen.instance.renderer); + themeURL, GuiWidgetScreen.instance.renderer); if (GuiWidgetScreen.instance.theme == null) { throw new RuntimeException( "I don't think you installed the theme correctly ..."); @@ -146,6 +150,7 @@ public void setScreen(Widget widget) { gui.clearMouseState(); removeAllChildren(); add(widget); + GuiApiFontHelper.resyncCustomFonts(); currentWidget = widget; } } diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index bebbec1..c580f92 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -382,6 +382,25 @@ public SettingMulti addSetting(Widget w2, String nicename, append(s); return s; } + + /** + * convenience list setting adder + */ + public SettingList addSetting(Widget w2, String nicename, + String backendname, String... options) { + + ArrayList arrayList = new ArrayList(); + + for (int i = 0; i < options.length; i++) { + arrayList.add(options[i]); + } + + SettingList s = new SettingList(backendname, arrayList); + WidgetList w = new WidgetList(s, nicename); + w2.add(w); + append(s); + return s; + } /** * convenience text setting adder @@ -829,13 +848,13 @@ public SettingKey getSettingKey(String backendName) { * The backend name of the setting. * @return The SettingList. */ - public SettingList getSettingList(String backendName) { + public SettingDictionary getSettingList(String backendName) { for (Setting setting : Settings) { - if (!SettingList.class.isAssignableFrom(setting.getClass())) { + if (!SettingDictionary.class.isAssignableFrom(setting.getClass())) { continue; } if (setting.backendName.equals(backendName)) { - return (SettingList) setting; + return (SettingDictionary) setting; } } throw new InvalidParameterException("SettingList '" + backendName diff --git a/mcp/SettingDictionary.java b/mcp/SettingDictionary.java new file mode 100644 index 0000000..0d9bd16 --- /dev/null +++ b/mcp/SettingDictionary.java @@ -0,0 +1,76 @@ +package net.minecraft.src; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.util.Properties; + +/** + * This is the Setting type for the Properties class. That is, a Dictionary of strings addressable by strings. + * + * @author ShaRose + */ +public class SettingDictionary extends Setting { + + public SettingDictionary(String title) { + this(title, new Properties()); + } + + public SettingDictionary(String title, Properties defaultvalue) { + backendName = title; + defaultValue = defaultvalue; + values.put("", defaultvalue); + } + + @Override + public void fromString(String s, String context) { + Properties prop = new Properties(); + try { + prop.loadFromXML(new ByteArrayInputStream(s.getBytes("UTF-8"))); + } catch (Throwable e) { + ModSettings.dbgout("Error reading SettingDictionary from context '" + + context + "': " + e); + } + values.put(context, prop); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Properties get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(Properties v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + try { + Properties prop = get(context); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + prop.storeToXML(output, "GuiAPI SettingDictionary: DO NOT EDIT."); + return output.toString("UTF-8"); + } catch (IOException e) { + ModSettings.dbgout("Error writing SettingDictionary from context '" + + context + "': " + e); + return ""; + } + } + +} diff --git a/mcp/SettingList.java b/mcp/SettingList.java index 9cefb93..714b869 100644 --- a/mcp/SettingList.java +++ b/mcp/SettingList.java @@ -1,24 +1,27 @@ package net.minecraft.src; -import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; -import java.io.IOException; -import java.util.Properties; - -/** - * This is the Setting type for a list of strings. It uses the Properties class - * for ease of use. The widget is NOT complete yet since there's no theme for - * ListBox. - * - * @author ShaRose - */ -public class SettingList extends Setting { +import java.util.ArrayList; +import java.util.Iterator; + +import javax.xml.parsers.DocumentBuilder; +import javax.xml.parsers.DocumentBuilderFactory; +import javax.xml.transform.Transformer; +import javax.xml.transform.TransformerFactory; +import javax.xml.transform.dom.DOMSource; +import javax.xml.transform.stream.StreamResult; + +import org.w3c.dom.Document; +import org.w3c.dom.Element; +import org.w3c.dom.NodeList; + +public class SettingList extends Setting> { public SettingList(String title) { - this(title, new Properties()); + this(title, new ArrayList()); } - public SettingList(String title, Properties defaultvalue) { + public SettingList(String title, ArrayList defaultvalue) { backendName = title; defaultValue = defaultvalue; values.put("", defaultvalue); @@ -26,21 +29,37 @@ public SettingList(String title, Properties defaultvalue) { @Override public void fromString(String s, String context) { - Properties prop = new Properties(); + ArrayList list = new ArrayList(); try { - prop.loadFromXML(new ByteArrayInputStream(s.getBytes("UTF-8"))); + + DocumentBuilderFactory builderFact = DocumentBuilderFactory + .newInstance(); + builderFact.setIgnoringElementContentWhitespace(true); + builderFact.setValidating(true); + builderFact.setCoalescing(true); + builderFact.setIgnoringComments(true); + DocumentBuilder docBuilder = builderFact.newDocumentBuilder(); + Document doc = docBuilder.parse(s); + + Element localElement = (Element) doc.getChildNodes().item(1); + + NodeList localNodeList = localElement.getChildNodes(); + + for (int i = 0; i < localNodeList.getLength(); i++) { + String val = localNodeList.item(i).getNodeValue(); + list.add(val); + } + values.put(context, list); + if (displayWidget != null) { + displayWidget.update(); + } } catch (Throwable e) { - ModSettings.dbgout("Error reading SettingList from context '" - + context + "': " + e); - } - values.put(context, prop); - if (displayWidget != null) { - displayWidget.update(); + } } @Override - public Properties get(String context) { + public ArrayList get(String context) { if (values.get(context) != null) { return values.get(context); } else if (values.get("") != null) { @@ -51,7 +70,7 @@ public Properties get(String context) { } @Override - public void set(Properties v, String context) { + public void set(ArrayList v, String context) { values.put(context, v); if (parent != null) { parent.save(context); @@ -64,15 +83,36 @@ public void set(Properties v, String context) { @Override public String toString(String context) { try { - Properties prop = get(context); + DocumentBuilder docBuilder = DocumentBuilderFactory.newInstance() + .newDocumentBuilder(); + Document doc = docBuilder.newDocument(); + Element baseElement = (Element) doc.appendChild(doc + .createElement("list")); + ArrayList prop = get(context); + synchronized (prop) { + Iterator localIterator = prop.iterator(); + while (localIterator.hasNext()) { + String str = localIterator.next(); + baseElement.appendChild(doc.createTextNode(str)); + } + } + + TransformerFactory localTransformerFactory = TransformerFactory + .newInstance(); + Transformer localTransformer = null; + localTransformer = localTransformerFactory.newTransformer(); + localTransformer.setOutputProperty("method", "xml"); + localTransformer.setOutputProperty("encoding", "UTF8"); + DOMSource localDOMSource = new DOMSource(doc); ByteArrayOutputStream output = new ByteArrayOutputStream(); - prop.storeToXML(output, "GuiAPI SettingList: DO NOT EDIT."); + StreamResult localStreamResult = new StreamResult(output); + localTransformer.transform(localDOMSource, localStreamResult); + return output.toString("UTF-8"); - } catch (IOException e) { + } catch (Throwable e) { ModSettings.dbgout("Error writing SettingList from context '" + context + "': " + e); return ""; } } - } diff --git a/mcp/WidgetList.java b/mcp/WidgetList.java new file mode 100644 index 0000000..522b593 --- /dev/null +++ b/mcp/WidgetList.java @@ -0,0 +1,100 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.CallbackWithReason; +import de.matthiasmann.twl.Label; +import de.matthiasmann.twl.ListBox; +import de.matthiasmann.twl.ListBox.CallbackReason; +import de.matthiasmann.twl.model.SimpleChangableListModel; +import de.matthiasmann.twl.utils.CallbackSupport; + +public class WidgetList extends WidgetSetting implements + CallbackWithReason { + + private Runnable[] callbacks; + public Label displayLabel; + + /** + * The reference to the underlying WidgetSlider. + */ + public ListBox listBox; + + public SimpleChangableListModel listBoxModel; + + /** + * The reference to the SettingInt that this WidgetInt uses. + */ + public SettingList settingReference; + + public WidgetList(SettingList setting, String title) { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + if (title != null) { + displayLabel = new Label(); + displayLabel.setText(niceName); + add(displayLabel); + } + + listBoxModel = new SimpleChangableListModel(setting.get()); + listBox = new ListBox(listBoxModel); + add(listBox); + listBox.addCallback(this); + update(); + } + + @Override + public void addCallback(Runnable callback) { + callbacks = (CallbackSupport.addCallbackToList(callbacks, callback, + Runnable.class)); + } + + @Override + public void callback(CallbackReason paramT) { + CallbackSupport.fireCallbacks(callbacks); + } + + @Override + public void layout() { + if (displayLabel != null) { + displayLabel.setPosition(getX(), getY()); + int offset = displayLabel.computeTextHeight(); + displayLabel.setSize(getWidth(), offset); + listBox.setPosition(getX(), getY() + offset); + listBox.setSize(getWidth(), getHeight() - offset); + } else { + listBox.setPosition(getX(), getY()); + listBox.setSize(getWidth(), getHeight()); + } + } + + @Override + public void removeCallback(Runnable callback) { + callbacks = (CallbackSupport + .removeCallbackFromList(callbacks, callback)); + } + + @Override + public void update() { + listBoxModel.clear(); + listBoxModel.addElements(settingReference.get()); + } + + @Override + public String userString() { + String output = ""; + if (niceName != null) { + output = niceName + ": "; + } + + int sel = listBox.getSelected(); + String text = sel != -1 ? listBoxModel.getEntry(sel) : "NOTHING"; + + output += String.format( + "%s (Entry %s) currently selected from %s items.", text, sel, + settingReference.get().size()); + + return output; + } + +} diff --git a/mcp/mod_GuiApiTWLExamples.java b/mcp/mod_GuiApiTWLExamples.java new file mode 100644 index 0000000..69d8fe1 --- /dev/null +++ b/mcp/mod_GuiApiTWLExamples.java @@ -0,0 +1,155 @@ +package net.minecraft.src; + +import java.util.Random; + +import net.minecraft.src.GuiApiFontHelper.FontStates; +import de.matthiasmann.twl.ColorSelector; +import de.matthiasmann.twl.Label; +import de.matthiasmann.twl.ProgressBar; +import de.matthiasmann.twl.Widget; +import de.matthiasmann.twl.model.ColorSpaceHSL; + +public class mod_GuiApiTWLExamples extends BaseMod { + + @SuppressWarnings("unused") + private static void addRandomListboxOption(SettingList setting) { + Random rand = new Random(); + setting.get().add("Option " + rand.nextInt(10000)); + setting.displayWidget.update(); + } + + @SuppressWarnings("unused") + private static void removeSelectedListboxOption(SettingList setting) { + int selected = ((WidgetList) setting.displayWidget).listBox + .getSelected(); + setting.get().remove(selected); + setting.displayWidget.update(); + } + + @SuppressWarnings("unused") + private static void showSelectedListboxOption(SettingList setting) { + GuiModScreen.show(GuiApiHelper.makeTextDisplayAndGoBack( + "ListBox Status", setting.displayWidget.userString(), + "Go Back", false)); + } + + private WidgetText colorEditField; + private GuiApiFontHelper colorFontHelper; + private Label colorLabel; + private ProgressBar colorProgressBar; + private ColorSelector colorSelector; + private SettingList listBoxSettingTest; + private ModSettingScreen modScreen; + + private ModSettings modSettings; + + private WidgetSimplewindow screenColoringWindow; + + private WidgetSimplewindow screenListBoxTest; + + public mod_GuiApiTWLExamples() { + modSettings = new ModSettings("mod_GuiApiTWLExamples"); + SetUpColouringWindow(); + + SetUpListBox(); + + SetUpModWindow(); + } + + private void SetUpColouringWindow() { + colorFontHelper = new GuiApiFontHelper(); + WidgetSinglecolumn widgetSingleColumn = new WidgetSinglecolumn(); + widgetSingleColumn.childWidth = 300; + + colorLabel = new Label("This is an example of coloring a label's Test."); + widgetSingleColumn.add(colorLabel); + colorFontHelper.setFont(colorLabel); + + colorProgressBar = new ProgressBar(); + colorProgressBar.setValue(0.7f); + // colorProgressBar.setBackground(GuiWidgetScreen.instance.theme.getImage("progress")); + // colorProgressBar.setProgressImage((GuiWidgetScreen.instance.theme.getImage("progress-white")).createTintedVersion(Color.GREEN)); + colorProgressBar.setText("Coloring Progressbar!"); + widgetSingleColumn.add(colorProgressBar); + colorFontHelper.setFont(colorProgressBar); + + widgetSingleColumn.heightOverrideExceptions.put(colorProgressBar, 30); + colorEditField = new WidgetText( + new SettingText("dummyText", "Edit Me!"), null); + widgetSingleColumn.add(colorEditField); + colorFontHelper.setFont(colorEditField); + widgetSingleColumn.heightOverrideExceptions.put(colorEditField, 30); + + colorSelector = new ColorSelector(new ColorSpaceHSL()); + colorSelector.setShowAlphaAdjuster(false); + colorSelector.setShowNativeAdjuster(true); + colorSelector.setShowRGBAdjuster(true); + colorSelector.setShowPreview(true); + colorSelector.addCallback(new ModAction(this, "updateColors", + "Updates the colors for the 'color' window.")); + colorSelector.setColor(colorFontHelper.getColor(FontStates.normal)); + widgetSingleColumn.add(colorSelector); + widgetSingleColumn.heightOverrideExceptions.put(colorSelector, 0); + + screenColoringWindow = new WidgetSimplewindow(widgetSingleColumn, + "GuiAPI / TWL Coloring examples!"); + } + + private void SetUpListBox() { + WidgetSinglecolumn widgetSingleColumn = new WidgetSinglecolumn(); + listBoxSettingTest = modSettings.addSetting(widgetSingleColumn, + "ListBox Test One", "listboxTest1", "Option 1", "Option 2", + "Option 3", "Option 4", "Option 5", "Option 6"); + widgetSingleColumn.heightOverrideExceptions.put( + listBoxSettingTest.displayWidget, 140); + + WidgetSingleRow listBoxRow = new WidgetSingleRow(110, 20); + + listBoxRow + .add(GuiApiHelper.makeButton("Add Random", new ModAction(this, + "addRandomListboxOption", SettingList.class) + .setDefaultArguments(listBoxSettingTest), true)); + + listBoxRow.add(GuiApiHelper.makeButton("Display Selected", + new ModAction(this, "showSelectedListboxOption", + SettingList.class) + .setDefaultArguments(listBoxSettingTest), true)); + + listBoxRow.add(GuiApiHelper.makeButton("Remove Selected", + new ModAction(this, "removeSelectedListboxOption", + SettingList.class) + .setDefaultArguments(listBoxSettingTest), true)); + + widgetSingleColumn.add(listBoxRow); + widgetSingleColumn.widthOverrideExceptions.put(listBoxRow, 0); + screenListBoxTest = new WidgetSimplewindow(widgetSingleColumn, + "GuiAPI / TWL ListBox example!"); + } + + private void SetUpModWindow() { + modSettings.load(); + modScreen = new ModSettingScreen("GuiAPI TWL Examples"); + if (screenColoringWindow != null) { + modScreen.append(GuiApiHelper.makeButton("Open Coloring Examples", + "show", GuiModScreen.class, true, + new Class[] { Widget.class }, screenColoringWindow)); + } + + if (screenListBoxTest != null) { + modScreen.append(GuiApiHelper.makeButton("Open Listbox Example", + "show", GuiModScreen.class, true, + new Class[] { Widget.class }, screenListBoxTest)); + } + } + + @SuppressWarnings("unused") + private void updateColors() { + colorFontHelper.setColor(FontStates.normal, colorSelector.getColor()); + } + + @Override + public String Version() { + return "1.0"; + } + +} From 778ff8c889fda2b36cfaf9e346bade866e5932ff Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 25 Nov 2011 16:28:20 -0330 Subject: [PATCH 23/49] Updated to Minecraft 1.0.0 Added javadocs to GuiApiFontHelper Did some formatting Changed GuiApiHelper.genWidget to return WidgetSimplewindow instead of Widget Changed the location check from MinecraftImpl.class to EnumOS2.class just in case Fixed javadoc tag in ModAction Removed some code that I added and forgot about for an example that wasn't supposed to be there in the first place Updated mod_GuiApiTWLExamples --- mcp/GuiApiFontHelper.java | 109 +++++- mcp/GuiApiHelper.java | 3 +- mcp/GuiModScreen.java | 298 ++++++++-------- mcp/GuiModSelect.java | 58 +-- mcp/GuiOptions.java | 9 +- mcp/GuiWidgetScreen.java | 21 +- mcp/ModAction.java | 2 +- mcp/ModSettingScreen.java | 256 +++++++------ mcp/ModSettings.java | 8 +- mcp/Setting.java | 222 ++++++------ mcp/SettingBoolean.java | 136 ++++--- mcp/SettingDictionary.java | 3 +- mcp/SettingFloat.java | 266 +++++++------- mcp/SettingInt.java | 272 +++++++------- mcp/SettingKey.java | 247 ++++++------- mcp/SettingMulti.java | 346 ++++++++---------- mcp/SettingText.java | 113 +++--- mcp/WidgetBoolean.java | 231 ++++++------ mcp/WidgetClassicTwocolumn.java | 474 +++++++++++-------------- mcp/WidgetFloat.java | 167 +++++---- mcp/WidgetInt.java | 143 ++++---- mcp/WidgetKeybinding.java | 201 +++++------ mcp/WidgetMulti.java | 139 ++++---- mcp/WidgetSetting.java | 174 +++++---- mcp/WidgetSimplewindow.java | 283 +++++++-------- mcp/WidgetSingleRow.java | 271 +++++++------- mcp/WidgetSinglecolumn.java | 201 +++++------ mcp/WidgetSlider.java | 36 +- mcp/WidgetText.java | 249 ++++++------- mcp/mod_GuiApiBasicExample.java | 18 +- mcp/mod_GuiApiIntermediateExample.java | 473 ++++++++++++------------ mcp/mod_GuiApiTWLExamples.java | 31 +- 32 files changed, 2608 insertions(+), 2852 deletions(-) diff --git a/mcp/GuiApiFontHelper.java b/mcp/GuiApiFontHelper.java index fefed10..3cec664 100644 --- a/mcp/GuiApiFontHelper.java +++ b/mcp/GuiApiFontHelper.java @@ -15,6 +15,14 @@ import de.matthiasmann.twl.renderer.lwjgl.LWJGLFont; import de.matthiasmann.twl.utils.StateExpression; +/** + * This class is designed to enable you to make clones of the GuiAPI font, + * colour it and add options as you want, and then set that font to specific + * kinds of widgets. + * + * @author ShaRose + * + */ public class GuiApiFontHelper { private class FontStateHelper { private Color color; @@ -118,6 +126,13 @@ public void SyncWithState() { } } + /** + * These are the font states you can use for your settings. Most of the + * time, the only ones you will use would be normal and hover. + * + * @author ShaRose + * + */ enum FontStates { disabled, error, hover, normal, textSelection, warning } @@ -126,7 +141,6 @@ enum FontStates { private static Field editFieldTextRenderer; static Field fontStateColor; - static Field fontStateCondition; static Field fontStateOffsetX; static Field fontStateOffsetY; @@ -183,6 +197,12 @@ enum FontStates { } } + /** + * This method is used internally to resync the font references. This has to + * be used each time the theme is applied (After you set the screen, + * specifically), otherwise TWL will automatically replace it with the + * default font. + */ public static void resyncCustomFonts() { for (Map.Entry entry : GuiApiFontHelper.customFontWidgets .entrySet()) { @@ -205,6 +225,10 @@ public static void resyncCustomFonts() { private Map states; + /** + * This creates a new GuiApiFontHelper with it's own internal font + * reference. + */ public GuiApiFontHelper() { states = new HashMap(); try { @@ -326,6 +350,11 @@ public GuiApiFontHelper() { } } + /** + * @param state + * The font state you want to check. + * @return The Color for this font according to the specified state. + */ public Color getColor(FontStates state) { if (states.containsKey(state)) { return states.get(state).getColor(); @@ -333,6 +362,11 @@ public Color getColor(FontStates state) { return null; } + /** + * @param state + * The font state you want to check. + * @return The LineThrough for this font according to the specified state. + */ public boolean getLineThrough(FontStates state) { if (states.containsKey(state)) { return states.get(state).getLineThrough(); @@ -340,6 +374,11 @@ public boolean getLineThrough(FontStates state) { return false; } + /** + * @param state + * The font state you want to check. + * @return The OffsetX for this font according to the specified state. + */ public int getOffsetX(FontStates state) { if (states.containsKey(state)) { return states.get(state).getOffsetX(); @@ -347,6 +386,11 @@ public int getOffsetX(FontStates state) { return 0; } + /** + * @param state + * The font state you want to check. + * @return The OffsetY for this font according to the specified state. + */ public int getOffsetY(FontStates state) { if (states.containsKey(state)) { return states.get(state).getOffsetY(); @@ -354,6 +398,11 @@ public int getOffsetY(FontStates state) { return 0; } + /** + * @param state + * The font state you want to check. + * @return The Underline for this font according to the specified state. + */ public boolean getUnderline(FontStates state) { if (states.containsKey(state)) { return states.get(state).getUnderline(); @@ -361,6 +410,12 @@ public boolean getUnderline(FontStates state) { return false; } + /** + * @param state + * The font state you want to check. + * @return The UnderlineOffset for this font according to the specified + * state. + */ public int getUnderlineOffset(FontStates state) { if (states.containsKey(state)) { return states.get(state).getUnderlineOffset(); @@ -368,12 +423,22 @@ public int getUnderlineOffset(FontStates state) { return 0; } + /** + * @param state + * The font state you want to set. + * @param col + * The Color you wish to this fontstate to have for this font. + */ public void setColor(FontStates state, Color col) { if (states.containsKey(state)) { states.get(state).setColor(col); } } + /** + * @param widget + * The EditField (Or derived class) you wish to set. + */ public void setFont(EditField widget) { try { setFont((TextWidget) GuiApiFontHelper.editFieldTextRenderer @@ -385,11 +450,20 @@ public void setFont(EditField widget) { } + /** + * @param widget + * The TextWidget (Or derived class) you wish to set. + */ public void setFont(TextWidget widget) { widget.setFont(myFont); GuiApiFontHelper.customFontWidgets.put(widget, this); } + /** + * @param widget + * The WidgetText (Or derived class) you wish to set. This will + * set the display label (if it has one) and the edit field. + */ public void setFont(WidgetText widget) { if (widget.displayLabel != null) { widget.displayLabel.setFont(myFont); @@ -399,30 +473,63 @@ public void setFont(WidgetText widget) { GuiApiFontHelper.customFontWidgets.put(widget, this); } + /** + * @param state + * The font state you want to set. + * @param val + * The LineThrough you wish to this fontstate to have for this + * font. + */ public void setLineThrough(FontStates state, boolean val) { if (states.containsKey(state)) { states.get(state).setLineThrough(val); } } + /** + * @param state + * The font state you want to set. + * @param i + * The OffsetX you wish to this fontstate to have for this font. + */ public void setOffsetX(FontStates state, int i) { if (states.containsKey(state)) { states.get(state).setOffsetX(i); } } + /** + * @param state + * The font state you want to set. + * @param i + * The OffsetY you wish to this fontstate to have for this font. + */ public void setOffsetY(FontStates state, int i) { if (states.containsKey(state)) { states.get(state).setOffsetY(i); } } + /** + * @param state + * The font state you want to set. + * @param val + * The Underline you wish to this fontstate to have for this + * font. + */ public void setUnderline(FontStates state, boolean val) { if (states.containsKey(state)) { states.get(state).setUnderline(val); } } + /** + * @param state + * The font state you want to set. + * @param i + * The UnderlineOffset you wish to this fontstate to have for + * this font. + */ public void setUnderlineOffset(FontStates state, int i) { if (states.containsKey(state)) { states.get(state).setUnderlineOffset(i); diff --git a/mcp/GuiApiHelper.java b/mcp/GuiApiHelper.java index aef3c2c..5759390 100644 --- a/mcp/GuiApiHelper.java +++ b/mcp/GuiApiHelper.java @@ -27,6 +27,7 @@ public class GuiApiHelper { * when pressing a button in minecraft. */ public final static ModAction clickModAction; + static { backModAction = new ModAction(GuiModScreen.class, "back"); GuiApiHelper.backModAction.setTag("Helper Back ModAction"); @@ -351,7 +352,7 @@ public void addButton(String text, String methodName, Object me, * the previous menu. If false, don't. * @return The generated widget. Use GuiModScreen.show to display it. */ - public Widget genWidget(Boolean showBackButton) { + public WidgetSimplewindow genWidget(Boolean showBackButton) { WidgetSinglecolumn widget = new WidgetSinglecolumn(new Widget[0]); TextArea textarea = GuiApiHelper.makeTextArea(displayText_, false); widget.add(textarea); diff --git a/mcp/GuiModScreen.java b/mcp/GuiModScreen.java index e4e66f3..a5f7665 100644 --- a/mcp/GuiModScreen.java +++ b/mcp/GuiModScreen.java @@ -5,7 +5,6 @@ import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; import de.matthiasmann.twl.renderer.lwjgl.RenderScale; - /** * GuiModScreen is the minecraft screen subclass that controls and renders TWL. * normally you will want to call it's static methods to use it, though @@ -17,161 +16,144 @@ * @see GuiModScreen#show(GuiModScreen) * @see GuiModScreen#show(Widget) */ -public class GuiModScreen extends GuiScreen -{ - /** - * Used by static methods. Is the currently displayed screen. - */ - public static GuiModScreen currentScreen; - - /** - * Hide current screen and show parent screen. - */ - public static void back() - { - if (GuiModScreen.currentScreen != null) - { - Minecraft m = ModSettings.getMcinst(); - m.displayGuiScreen(GuiModScreen.currentScreen.parentScreen); - if (GuiModScreen.currentScreen.parentScreen instanceof GuiModScreen) - { - GuiModScreen.currentScreen = (GuiModScreen) GuiModScreen.currentScreen.parentScreen; - GuiModScreen.currentScreen.setActive(); - } - else - { - GuiModScreen.currentScreen = null; - } - } - } - - /** - * Play a click sound. Call after the user performs an action. Already - * called from setting widgets. - */ - public static void clicksound() - { - Minecraft m = ModSettings.getMcinst(); - m.sndManager.playSoundFX("random.click", 1.0F, 1.0F); - } - - /** - * Show a screen - GuiModScreen version. Show an instance of GuiModScreen - - * Does not set the parent screen, you have to deal with that yourself! - * - * @param screen - * GuiModScreen instance or subclass to show with parent screen - * already set to current screen. - */ - public static void show(GuiModScreen screen) - { - Minecraft m = ModSettings.getMcinst(); - m.displayGuiScreen(screen); - screen.setActive(); - } - - /** - * Show a screen - TWL widget version. This is the recommended way to show a - * TWL widget as a screen. - * - * @param screen - * widget to show - will be sized to size of screen when twl was - * started. - */ - public static void show(Widget screen) - { - GuiModScreen.show(new GuiModScreen(GuiModScreen.currentScreen, screen)); - } - - /** - * The type of background to draw. 0 is the default background. If you are - * in game, it will shade the screen grey before it draws your widget, like - * when you pause the game normally. If you are not in game, it will show - * the dirt background, like on the main menu. 1 is force the main menu - * (dirt) background. Anything else is no background, completely clear. - */ - public int backgroundType = 0; - /** - * Actual main widget of this GuiModScreen - */ - public Widget mainwidget; - /** - * Reference to parent screen, is used by GuiModScreen#back() - * - * @see GuiModScreen#back() - */ - public GuiScreen parentScreen; - - /** - * Only use this constructor from subclasses. does not take a widget, so - * that the subclass can build the widget before storing it. put your main - * widget in mainwidget, of course. - * - * @param screen - * parent screen - * - * @see GuiModScreen#back() - */ - protected GuiModScreen(GuiScreen screen) - { - parentScreen = screen; - GuiModScreen.currentScreen = this; - allowUserInput = false; - } - - /** - * main constructor, to be used if you are instantiating this class. - * - * @param screen - * parent screen - make sure this is right! - * @param widget - * main widget to display - */ - public GuiModScreen(GuiScreen screen, Widget widget) - { - mainwidget = widget; - parentScreen = screen; - GuiModScreen.currentScreen = this; - allowUserInput = false; - } - - @Override - public void drawScreen(int var1, int var2, float var3) - { - switch (backgroundType) - { - case 0: - { - drawDefaultBackground(); - break; - } - case 1: - { - drawBackground(0); - break; - } - default: - { - break; - } - } - LWJGLRenderer var4 = (LWJGLRenderer) GuiWidgetScreen.getInstance().gui - .getRenderer(); - ScaledResolution var5 = new ScaledResolution( - GuiWidgetScreen.getInstance().minecraftInstance.gameSettings, - GuiWidgetScreen.getInstance().minecraftInstance.displayWidth, - GuiWidgetScreen.getInstance().minecraftInstance.displayHeight); - RenderScale.scale = var5.scaleFactor; - var4.syncViewportSize(); - GuiWidgetScreen.getInstance().gui.update(); - } - - @Override - public void handleInput() - {} - - private void setActive() - { - GuiWidgetScreen.getInstance().setScreen(mainwidget); - } +public class GuiModScreen extends GuiScreen { + /** + * Used by static methods. Is the currently displayed screen. + */ + public static GuiModScreen currentScreen; + + /** + * Hide current screen and show parent screen. + */ + public static void back() { + if (GuiModScreen.currentScreen != null) { + Minecraft m = ModSettings.getMcinst(); + m.displayGuiScreen(GuiModScreen.currentScreen.parentScreen); + if (GuiModScreen.currentScreen.parentScreen instanceof GuiModScreen) { + GuiModScreen.currentScreen = (GuiModScreen) GuiModScreen.currentScreen.parentScreen; + GuiModScreen.currentScreen.setActive(); + } else { + GuiModScreen.currentScreen = null; + } + } + } + + /** + * Play a click sound. Call after the user performs an action. Already + * called from setting widgets. + */ + public static void clicksound() { + Minecraft m = ModSettings.getMcinst(); + m.sndManager.playSoundFX("random.click", 1.0F, 1.0F); + } + + /** + * Show a screen - GuiModScreen version. Show an instance of GuiModScreen - + * Does not set the parent screen, you have to deal with that yourself! + * + * @param screen + * GuiModScreen instance or subclass to show with parent screen + * already set to current screen. + */ + public static void show(GuiModScreen screen) { + Minecraft m = ModSettings.getMcinst(); + m.displayGuiScreen(screen); + screen.setActive(); + } + + /** + * Show a screen - TWL widget version. This is the recommended way to show a + * TWL widget as a screen. + * + * @param screen + * widget to show - will be sized to size of screen when twl was + * started. + */ + public static void show(Widget screen) { + GuiModScreen.show(new GuiModScreen(GuiModScreen.currentScreen, screen)); + } + + /** + * The type of background to draw. 0 is the default background. If you are + * in game, it will shade the screen grey before it draws your widget, like + * when you pause the game normally. If you are not in game, it will show + * the dirt background, like on the main menu. 1 is force the main menu + * (dirt) background. Anything else is no background, completely clear. + */ + public int backgroundType = 0; + /** + * Actual main widget of this GuiModScreen + */ + public Widget mainwidget; + /** + * Reference to parent screen, is used by GuiModScreen#back() + * + * @see GuiModScreen#back() + */ + public GuiScreen parentScreen; + + /** + * Only use this constructor from subclasses. does not take a widget, so + * that the subclass can build the widget before storing it. put your main + * widget in mainwidget, of course. + * + * @param screen + * parent screen + * + * @see GuiModScreen#back() + */ + protected GuiModScreen(GuiScreen screen) { + parentScreen = screen; + GuiModScreen.currentScreen = this; + allowUserInput = false; + } + + /** + * main constructor, to be used if you are instantiating this class. + * + * @param screen + * parent screen - make sure this is right! + * @param widget + * main widget to display + */ + public GuiModScreen(GuiScreen screen, Widget widget) { + mainwidget = widget; + parentScreen = screen; + GuiModScreen.currentScreen = this; + allowUserInput = false; + } + + @Override + public void drawScreen(int var1, int var2, float var3) { + switch (backgroundType) { + case 0: { + drawDefaultBackground(); + break; + } + case 1: { + drawBackground(0); + break; + } + default: { + break; + } + } + LWJGLRenderer var4 = (LWJGLRenderer) GuiWidgetScreen.getInstance().gui + .getRenderer(); + ScaledResolution var5 = new ScaledResolution( + GuiWidgetScreen.getInstance().minecraftInstance.gameSettings, + GuiWidgetScreen.getInstance().minecraftInstance.displayWidth, + GuiWidgetScreen.getInstance().minecraftInstance.displayHeight); + RenderScale.scale = var5.scaleFactor; + var4.syncViewportSize(); + GuiWidgetScreen.getInstance().gui.update(); + } + + @Override + public void handleInput() { + } + + private void setActive() { + GuiWidgetScreen.getInstance().setScreen(mainwidget); + } } diff --git a/mcp/GuiModSelect.java b/mcp/GuiModSelect.java index 3f19f60..e2af205 100644 --- a/mcp/GuiModSelect.java +++ b/mcp/GuiModSelect.java @@ -2,34 +2,38 @@ /** * This is a Subclass of GuiModScreen, and acts as the entry point from the - * button in the options menu. This is just used internally. + * button in the options menu. This is just used internally. It is also where + * the code to enable MLProps edting is. * * @author lahwran + * @author ShaRose */ -public class GuiModSelect extends GuiModScreen -{ - private static void selectScreen(Integer i) - { - GuiModScreen.show(ModSettingScreen.modScreens.get(i).theWidget); - GuiModScreen.clicksound(); - } - - protected GuiModSelect(GuiScreen screen) - { - super(screen); - WidgetClassicTwocolumn w = new WidgetClassicTwocolumn(); - w.verticalPadding = 10; - for (int i = 0; i < ModSettingScreen.modScreens.size(); i++) - { - ModSettingScreen m = ModSettingScreen.modScreens.get(i); - w.add(GuiApiHelper.makeButton(m.buttonTitle, "selectScreen", - GuiModSelect.class, false, new Class[] - { Integer.class }, i)); - } - WidgetSimplewindow mainwidget = new WidgetSimplewindow(w, - "Select a Mod"); - mainwidget.hPadding = 0; - mainwidget.mainWidget.setTheme("scrollpane-notch"); - this.mainwidget = mainwidget; - } +public class GuiModSelect extends GuiModScreen { + static { + + } + + @SuppressWarnings("unused") + private static void selectScreen(Integer i) { + GuiModScreen.show(ModSettingScreen.modScreens.get(i).theWidget); + GuiModScreen.clicksound(); + } + + protected GuiModSelect(GuiScreen screen) { + super(screen); + WidgetClassicTwocolumn w = new WidgetClassicTwocolumn(); + w.verticalPadding = 10; + for (int i = 0; i < ModSettingScreen.modScreens.size(); i++) { + ModSettingScreen m = ModSettingScreen.modScreens.get(i); + w.add(GuiApiHelper + .makeButton(m.buttonTitle, "selectScreen", + GuiModSelect.class, false, + new Class[] { Integer.class }, i)); + } + WidgetSimplewindow mainwidget = new WidgetSimplewindow(w, + "Select a Mod"); + mainwidget.hPadding = 0; + mainwidget.mainWidget.setTheme("scrollpane-notch"); + this.mainwidget = mainwidget; + } } diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java index a2dd76e..38843d5 100644 --- a/mcp/GuiOptions.java +++ b/mcp/GuiOptions.java @@ -8,6 +8,7 @@ import net.minecraft.src.GuiSlider; import net.minecraft.src.GuiSmallButton; import net.minecraft.src.GuiVideoSettings; +import net.minecraft.src.StatCollector; import net.minecraft.src.StringTranslate; public class GuiOptions extends GuiScreen { @@ -33,7 +34,13 @@ public void initGui() { for(int var5 = 0; var5 < var4; ++var5) { EnumOptions var6 = var3[var5]; if(!var6.getEnumFloat()) { - this.controlList.add(new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6))); + GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); + if(var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { + var7.enabled = false; + var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore"); + } + + this.controlList.add(var7); } else { this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); } diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 1cc1199..65453d2 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -28,7 +28,7 @@ public class GuiWidgetScreen extends Widget { * The width of the screen that the widget will render on. */ public static int screenwidth; - + public static URL themeURL; /** @@ -43,7 +43,10 @@ public static GuiWidgetScreen getInstance() { String GuiAPILoc = GuiWidgetScreen.class.getProtectionDomain() .getCodeSource().getLocation().toString(); - String MinecraftLoc = MinecraftImpl.class.getProtectionDomain() // normally I would just use Minecraft.class, but with a mod that edits it it might have issues. But nobody is going to ever need or want to edit MinecraftImpl.class. + // normally I would just use Minecraft.class, but with a mod that edits + // it it might have issues. But nobody is going to ever need or want to + // edit EnumOS2.class. + String MinecraftLoc = EnumOS2.class.getProtectionDomain() .getCodeSource().getLocation().toString(); if (!GuiAPILoc.equals(MinecraftLoc)) { @@ -56,11 +59,14 @@ public static GuiWidgetScreen getInstance() { String themename = "twlGuiTheme.xml"; GuiWidgetScreen.instance.gui = new GUI(GuiWidgetScreen.instance, GuiWidgetScreen.instance.renderer, new LWJGLInput()); - themeURL = GuiWidgetScreen.class.getClassLoader().getResource(themename); - //themeURL = new URL("file:/G:/MineCraft/GitHub/GuiAPI/theme/" + themename); // Testing - ModSettings.dbgout(themeURL.toString()); - GuiWidgetScreen.instance.theme = ThemeManager.createThemeManager( - themeURL, GuiWidgetScreen.instance.renderer); + GuiWidgetScreen.themeURL = GuiWidgetScreen.class.getClassLoader() + .getResource(themename); + // themeURL = new URL("file:/G:/MineCraft/GitHub/GuiAPI/theme/" + + // themename); // Testing + ModSettings.dbgout(GuiWidgetScreen.themeURL.toString()); + GuiWidgetScreen.instance.theme = ThemeManager + .createThemeManager(GuiWidgetScreen.themeURL, + GuiWidgetScreen.instance.renderer); if (GuiWidgetScreen.instance.theme == null) { throw new RuntimeException( "I don't think you installed the theme correctly ..."); @@ -151,6 +157,7 @@ public void setScreen(Widget widget) { removeAllChildren(); add(widget); GuiApiFontHelper.resyncCustomFonts(); + currentWidget = widget; } } diff --git a/mcp/ModAction.java b/mcp/ModAction.java index 526c9d0..a059641 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -278,7 +278,7 @@ public ModAction setDefaultArguments(Object... Arguments) { * Sets the tag of this ModAction. Used for tracking, and is included with * exceptions. * - * @param name + * @param tag * The tag to assign to this ModAction. */ public void setTag(Object tag) { diff --git a/mcp/ModSettingScreen.java b/mcp/ModSettingScreen.java index aed265c..2948ffb 100644 --- a/mcp/ModSettingScreen.java +++ b/mcp/ModSettingScreen.java @@ -4,7 +4,6 @@ import de.matthiasmann.twl.Widget; - /** * This is the class that GuiModSelect uses to show Subscreens. Create one of * these to create your own subscreen, from which you can add widgets to. This @@ -12,139 +11,124 @@ * * @author lahwran */ -public class ModSettingScreen -{ - /** - * The current context. - */ - public static String guiContext = ""; - /** - * The list of currently registered ModScreens. - */ - public static ArrayList modScreens = new ArrayList(); - /** - * title to show on button to this modscreen - */ - public String buttonTitle; - /** - * name to show at top of screen - */ - public String niceName; - /** - * the main widget to pass into GuiModScreen.show() - */ - public Widget theWidget; - /** - * the column widget to show the child widgets in - */ - public WidgetClassicTwocolumn widgetColumn; - - /** - * convenience constructor for when you want to show the same name on the - * button and screen title - * - * @param name - * mod nice name - */ - public ModSettingScreen(String name) - { - this(name, name); - } - - /** - * The main Constructor for ModSettingScreen. Creates a WidgetSimplewindow - * as the main Widget, sets the title for said WidgetSimplewindow, and - * registers this ModSettingScreen on the settings screen. - * - * @param nicename - * The title that will be on the WidgetSimplewindow. - * @param buttontitle - * button-to-screen title - */ - public ModSettingScreen(String nicename, String buttontitle) - { - ModSettingScreen.modScreens.add(this); - buttonTitle = buttontitle; - niceName = nicename; - widgetColumn = new WidgetClassicTwocolumn(); - theWidget = new WidgetSimplewindow(widgetColumn, niceName); - } - - /** - * An alternate Constructor for ModSettingScreen. Instead of creating a - * WidgetSimplewindow, this simply lets you pass a widget of your choosing. - * - * @param widget - * The main widget you want to use for this ModSettingScreen. - * @param buttontitle - * button-to-screen title - */ - public ModSettingScreen(Widget widget, String buttontitle) - { - ModSettingScreen.modScreens.add(this); - buttonTitle = buttontitle; - theWidget = widget; - } - - /** - * Add a widget - * - * @param newwidget - * the widget to add - */ - public void append(Widget newwidget) - { - if (widgetColumn != null) - { - widgetColumn.add(newwidget); - } - else - { - theWidget.add(newwidget); - } - } - - /** - * Remove a widget - * - * @param child - * widget to remove - */ - public void remove(Widget child) - { - if (widgetColumn != null) - { - widgetColumn.removeChild(child); - } - else - { - theWidget.removeChild(child); - } - } - - /** - * Changes the widgetColumn to or from WidgetClassicTwocolumn or - * WidgetSinglecolumn. - * - * @param value - * What to change it to. True for WidgetSinglecolumn, False for - * WidgetClassicTwocolumn. - */ - public void setSingleColumn(Boolean value) - { - Boolean isSingle = WidgetSinglecolumn.class.isInstance(widgetColumn); - if (isSingle == value) - { - return; - } - WidgetClassicTwocolumn w2 = (value ? new WidgetSinglecolumn() - : new WidgetClassicTwocolumn()); - for (int i = 0; i < widgetColumn.getNumChildren(); i++) - { - w2.add(widgetColumn.getChild(i)); - } - widgetColumn = w2; - theWidget = new WidgetSimplewindow(widgetColumn, - ((WidgetSimplewindow) theWidget).titleWidget.getText()); - } +public class ModSettingScreen { + /** + * The current context. + */ + public static String guiContext = ""; + /** + * The list of currently registered ModScreens. + */ + public static ArrayList modScreens = new ArrayList(); + /** + * title to show on button to this modscreen + */ + public String buttonTitle; + /** + * name to show at top of screen + */ + public String niceName; + /** + * the main widget to pass into GuiModScreen.show() + */ + public Widget theWidget; + /** + * the column widget to show the child widgets in + */ + public WidgetClassicTwocolumn widgetColumn; + + /** + * convenience constructor for when you want to show the same name on the + * button and screen title + * + * @param name + * mod nice name + */ + public ModSettingScreen(String name) { + this(name, name); + } + + /** + * The main Constructor for ModSettingScreen. Creates a WidgetSimplewindow + * as the main Widget, sets the title for said WidgetSimplewindow, and + * registers this ModSettingScreen on the settings screen. + * + * @param nicename + * The title that will be on the WidgetSimplewindow. + * @param buttontitle + * button-to-screen title + */ + public ModSettingScreen(String nicename, String buttontitle) { + ModSettingScreen.modScreens.add(this); + buttonTitle = buttontitle; + niceName = nicename; + widgetColumn = new WidgetClassicTwocolumn(); + theWidget = new WidgetSimplewindow(widgetColumn, niceName); + } + + /** + * An alternate Constructor for ModSettingScreen. Instead of creating a + * WidgetSimplewindow, this simply lets you pass a widget of your choosing. + * + * @param widget + * The main widget you want to use for this ModSettingScreen. + * @param buttontitle + * button-to-screen title + */ + public ModSettingScreen(Widget widget, String buttontitle) { + ModSettingScreen.modScreens.add(this); + buttonTitle = buttontitle; + theWidget = widget; + } + + /** + * Add a widget + * + * @param newwidget + * the widget to add + */ + public void append(Widget newwidget) { + if (widgetColumn != null) { + widgetColumn.add(newwidget); + } else { + theWidget.add(newwidget); + } + } + + /** + * Remove a widget + * + * @param child + * widget to remove + */ + public void remove(Widget child) { + if (widgetColumn != null) { + widgetColumn.removeChild(child); + } else { + theWidget.removeChild(child); + } + } + + /** + * Changes the widgetColumn to or from WidgetClassicTwocolumn or + * WidgetSinglecolumn. + * + * @param value + * What to change it to. True for WidgetSinglecolumn, False for + * WidgetClassicTwocolumn. + */ + public void setSingleColumn(Boolean value) { + Boolean isSingle = WidgetSinglecolumn.class.isInstance(widgetColumn); + if (isSingle == value) { + return; + } + WidgetClassicTwocolumn w2 = (value ? new WidgetSinglecolumn() + : new WidgetClassicTwocolumn()); + for (int i = 0; i < widgetColumn.getNumChildren(); i++) { + w2.add(widgetColumn.getChild(i)); + } + widgetColumn = w2; + theWidget = new WidgetSimplewindow(widgetColumn, + ((WidgetSimplewindow) theWidget).titleWidget.getText()); + } } diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index c580f92..5125fbd 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -382,19 +382,19 @@ public SettingMulti addSetting(Widget w2, String nicename, append(s); return s; } - + /** * convenience list setting adder */ public SettingList addSetting(Widget w2, String nicename, String backendname, String... options) { - + ArrayList arrayList = new ArrayList(); - + for (int i = 0; i < options.length; i++) { arrayList.add(options[i]); } - + SettingList s = new SettingList(backendname, arrayList); WidgetList w = new WidgetList(s, nicename); w2.add(w); diff --git a/mcp/Setting.java b/mcp/Setting.java index 82f3364..64af60d 100644 --- a/mcp/Setting.java +++ b/mcp/Setting.java @@ -4,123 +4,117 @@ import de.matthiasmann.twl.Widget; - /** * This is the base class for Settings. * * @author lahwran - * @param The type that this Setting will use. + * @param + * The type that this Setting will use. */ -public abstract class Setting extends Widget -{ - /** - * The name used by ModSettings to save and load the setting. - */ - public String backendName; - /** - * The default value for this setting. - */ - public T defaultValue; - /** - * A reference to the Widget that displays this setting. - */ - public WidgetSetting displayWidget = null; - /** - * Reference to the ModSettings this Setting is a child of. - */ - public ModSettings parent = null; - /** - * value. do not write directly if you want things to update! - */ - public HashMap values = new HashMap(); - - /** - * This is the basic constructor for Setting. Internal use only. - */ - public Setting() - {} - - /** - * Copies a setting from the source context to the destination context. - * - * @param srccontext - * The source context to copy data from. - * @param destcontext - * The destination context you would like to save the data to. - */ - public void copyContext(String srccontext, String destcontext) - { - values.put(destcontext, values.get(srccontext)); - } - - /** - * load back a string from toString() - */ - public abstract void fromString(String s, String context); - - /** - * Returns the setting for the current context. - * - * @return The setting. - */ - public T get() - { - return get(ModSettings.currentContext); - } - - /** - * Returns the setting for the specified context. - * - * @param context - * The context to retrieve from. - * @return The setting. - */ - public abstract T get(String context); - - /** - * Resets this setting for the current context, saving the default and - * updating the display. - */ - public void reset() - { - reset(ModSettings.currentContext); - } - - /** - * Resets this setting for the specified context, saving the default and - * updating the display. - * - * @param context - * The context to reset. - */ - public void reset(String context) - { - set(defaultValue, context); - } - - /** - * Sets the value for this setting to the current context. - * - * @param v - * The value. - */ - public void set(T v) - { - set(v, ModSettings.currentContext); - } - - /** - * Sets the value for this setting to the specified context. - * - * @param v - * The value. - * @param context - * The context to set. - */ - public abstract void set(T v, String context); - - /** - * return string to save, called from ModSettings.save() - */ - public abstract String toString(String context); +public abstract class Setting extends Widget { + /** + * The name used by ModSettings to save and load the setting. + */ + public String backendName; + /** + * The default value for this setting. + */ + public T defaultValue; + /** + * A reference to the Widget that displays this setting. + */ + public WidgetSetting displayWidget = null; + /** + * Reference to the ModSettings this Setting is a child of. + */ + public ModSettings parent = null; + /** + * value. do not write directly if you want things to update! + */ + public HashMap values = new HashMap(); + + /** + * This is the basic constructor for Setting. Internal use only. + */ + public Setting() { + } + + /** + * Copies a setting from the source context to the destination context. + * + * @param srccontext + * The source context to copy data from. + * @param destcontext + * The destination context you would like to save the data to. + */ + public void copyContext(String srccontext, String destcontext) { + values.put(destcontext, values.get(srccontext)); + } + + /** + * load back a string from toString() + */ + public abstract void fromString(String s, String context); + + /** + * Returns the setting for the current context. + * + * @return The setting. + */ + public T get() { + return get(ModSettings.currentContext); + } + + /** + * Returns the setting for the specified context. + * + * @param context + * The context to retrieve from. + * @return The setting. + */ + public abstract T get(String context); + + /** + * Resets this setting for the current context, saving the default and + * updating the display. + */ + public void reset() { + reset(ModSettings.currentContext); + } + + /** + * Resets this setting for the specified context, saving the default and + * updating the display. + * + * @param context + * The context to reset. + */ + public void reset(String context) { + set(defaultValue, context); + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value. + */ + public void set(T v) { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value. + * @param context + * The context to set. + */ + public abstract void set(T v, String context); + + /** + * return string to save, called from ModSettings.save() + */ + public abstract String toString(String context); } \ No newline at end of file diff --git a/mcp/SettingBoolean.java b/mcp/SettingBoolean.java index 6643fe3..3571ec5 100644 --- a/mcp/SettingBoolean.java +++ b/mcp/SettingBoolean.java @@ -5,80 +5,64 @@ * * @author lahwran */ -public class SettingBoolean extends Setting -{ - /** - * This is the constructor for SettingBoolean. It sets the default value as - * false. - * - * @param name - * The backend name for this setting. - */ - public SettingBoolean(String name) - { - this(name, false); - } - - /** - * This is the constructor for SettingBoolean. - * - * @param name - * The backend name for this setting. - * @param defValue - * The default value. - */ - public SettingBoolean(String name, Boolean defValue) - { - defaultValue = defValue; - values.put("", defaultValue); - backendName = name; - } - - @Override - public void fromString(String s, String context) - { - values.put(context, s.equals("true")); - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public Boolean get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - @Override - public void set(Boolean v, String context) - { - values.put(context, v); - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public String toString(String context) - { - return (get(context) ? "true" : "false"); - } +public class SettingBoolean extends Setting { + /** + * This is the constructor for SettingBoolean. It sets the default value as + * false. + * + * @param name + * The backend name for this setting. + */ + public SettingBoolean(String name) { + this(name, false); + } + + /** + * This is the constructor for SettingBoolean. + * + * @param name + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingBoolean(String name, Boolean defValue) { + defaultValue = defValue; + values.put("", defaultValue); + backendName = name; + } + + @Override + public void fromString(String s, String context) { + values.put(context, s.equals("true")); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Boolean get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(Boolean v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + return (get(context) ? "true" : "false"); + } } \ No newline at end of file diff --git a/mcp/SettingDictionary.java b/mcp/SettingDictionary.java index 0d9bd16..e6faec0 100644 --- a/mcp/SettingDictionary.java +++ b/mcp/SettingDictionary.java @@ -6,7 +6,8 @@ import java.util.Properties; /** - * This is the Setting type for the Properties class. That is, a Dictionary of strings addressable by strings. + * This is the Setting type for the Properties class. That is, a Dictionary of + * strings addressable by strings. * * @author ShaRose */ diff --git a/mcp/SettingFloat.java b/mcp/SettingFloat.java index 2bfff01..0d8fab2 100644 --- a/mcp/SettingFloat.java +++ b/mcp/SettingFloat.java @@ -5,148 +5,126 @@ * * @author lahwran */ -public class SettingFloat extends Setting -{ - /** - * The maximum value. - */ - public float maximumValue; - /** - * The minimum value. - */ - public float minimumValue; - /** - * The step value. - */ - public float stepValue; - - /** - * A constructor for SettingFloat. Defaults settings to default value of 0, - * range of 0.0-1.0, and a step of 0.1. - * - * @param title - * The backend name for this setting. - */ - public SettingFloat(String title) - { - this(title, 0.0f, 0.0f, 0.1f, 1.0f); - } - - /** - * A constructor for SettingFloat. Defaults settings to range of 0.0-1.0 and - * a step of 0.1. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - */ - public SettingFloat(String title, float defValue) - { - this(title, defValue, 0.0f, 0.1f, 1.0f); - } - - /** - * A constructor for SettingFloat. Defaults settings to a step of 0.1. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - * @param minValue - * The minimum value. - * @param maxValue - * The maximum value. - */ - public SettingFloat(String title, float defValue, float minValue, - float maxValue) - { - this(title, defValue, minValue, 0.1f, maxValue); - } - - /** - * A constructor for SettingFloat. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - * @param minValue - * The minimum value. - * @param stepValue - * The step value. - * @param maxValue - * The maximum value. - */ - public SettingFloat(String title, float defValue, float minValue, - float stepValue, float maxValue) - { - values.put("", defValue); - defaultValue = defValue; - minimumValue = minValue; - this.stepValue = stepValue; - maximumValue = maxValue; - backendName = title; - if (minimumValue > maximumValue) - { - float t = minimumValue; - minimumValue = maximumValue; - maximumValue = t; - } - } - - @Override - public void fromString(String s, String context) - { - values.put(context, new Float(s)); - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public Float get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - @Override - public void set(Float v, String context) - { - if (stepValue > 0) - { - values.put(context, Math.round(v / stepValue) * stepValue); - } - else - { - values.put(context, v); - } - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public String toString(String context) - { - return "" + get(context); - } +public class SettingFloat extends Setting { + /** + * The maximum value. + */ + public float maximumValue; + /** + * The minimum value. + */ + public float minimumValue; + /** + * The step value. + */ + public float stepValue; + + /** + * A constructor for SettingFloat. Defaults settings to default value of 0, + * range of 0.0-1.0, and a step of 0.1. + * + * @param title + * The backend name for this setting. + */ + public SettingFloat(String title) { + this(title, 0.0f, 0.0f, 0.1f, 1.0f); + } + + /** + * A constructor for SettingFloat. Defaults settings to range of 0.0-1.0 and + * a step of 0.1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingFloat(String title, float defValue) { + this(title, defValue, 0.0f, 0.1f, 1.0f); + } + + /** + * A constructor for SettingFloat. Defaults settings to a step of 0.1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param maxValue + * The maximum value. + */ + public SettingFloat(String title, float defValue, float minValue, + float maxValue) { + this(title, defValue, minValue, 0.1f, maxValue); + } + + /** + * A constructor for SettingFloat. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param stepValue + * The step value. + * @param maxValue + * The maximum value. + */ + public SettingFloat(String title, float defValue, float minValue, + float stepValue, float maxValue) { + values.put("", defValue); + defaultValue = defValue; + minimumValue = minValue; + this.stepValue = stepValue; + maximumValue = maxValue; + backendName = title; + if (minimumValue > maximumValue) { + float t = minimumValue; + minimumValue = maximumValue; + maximumValue = t; + } + } + + @Override + public void fromString(String s, String context) { + values.put(context, new Float(s)); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Float get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(Float v, String context) { + if (stepValue > 0) { + values.put(context, Math.round(v / stepValue) * stepValue); + } else { + values.put(context, v); + } + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + return "" + get(context); + } } \ No newline at end of file diff --git a/mcp/SettingInt.java b/mcp/SettingInt.java index b1541c9..3d218c3 100644 --- a/mcp/SettingInt.java +++ b/mcp/SettingInt.java @@ -5,151 +5,129 @@ * * @author lahwran */ -public class SettingInt extends Setting -{ - /** - * The maximum value. - */ - public int maximumValue; - /** - * The minimum value. - */ - public int minimumValue; - /** - * The step value. - */ - public int stepValue; - - /** - * A constructor for SettingInt. Defaults settings to default value of 0, - * range of 1-100, and a step of 1. - * - * @param title - * The backend name for this setting. - */ - public SettingInt(String title) - { - this(title, 0, 0, 1, 100); - } - - /** - * A constructor for SettingInt. Defaults settings to range of 1-100, and a - * step of 1. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - */ - public SettingInt(String title, int defValue) - { - this(title, defValue, 0, 1, 100); - } - - /** - * A constructor for SettingInt. Defaults settings to a step of 1. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - * @param minValue - * The minimum value. - * @param maxValue - * The maximum value. - */ - public SettingInt(String title, int defValue, int minValue, int maxValue) - { - this(title, defValue, minValue, 1, maxValue); - } - - /** - * A constructor for SettingInt. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value. - * @param minValue - * The minimum value. - * @param stepValue - * The step value. - * @param maxValue - * The maximum value. - */ - public SettingInt(String title, int defValue, int minValue, int stepValue, - int maxValue) - { - values.put("", defValue); - defaultValue = defValue; - minimumValue = minValue; - this.stepValue = stepValue; - maximumValue = maxValue; - backendName = title; - if (minimumValue > maximumValue) - { - int t = minimumValue; - minimumValue = maximumValue; - maximumValue = t; - } - } - - @Override - public void fromString(String s, String context) - { - values.put(context, new Integer(s)); - if (displayWidget != null) - { - displayWidget.update(); - } - ModSettings.dbgout("fromstring " + s); - } - - @Override - public Integer get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - @Override - public void set(Integer v, String context) - { - ModSettings.dbgout("set " + v); - if (stepValue > 1) - { - values.put( - context, - (int) (Math.round((float) v / (float) stepValue) * (float) stepValue)); - } - else - { - values.put(context, v); - } - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public String toString(String context) - { - return "" + get(context); - } +public class SettingInt extends Setting { + /** + * The maximum value. + */ + public int maximumValue; + /** + * The minimum value. + */ + public int minimumValue; + /** + * The step value. + */ + public int stepValue; + + /** + * A constructor for SettingInt. Defaults settings to default value of 0, + * range of 1-100, and a step of 1. + * + * @param title + * The backend name for this setting. + */ + public SettingInt(String title) { + this(title, 0, 0, 1, 100); + } + + /** + * A constructor for SettingInt. Defaults settings to range of 1-100, and a + * step of 1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + */ + public SettingInt(String title, int defValue) { + this(title, defValue, 0, 1, 100); + } + + /** + * A constructor for SettingInt. Defaults settings to a step of 1. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param maxValue + * The maximum value. + */ + public SettingInt(String title, int defValue, int minValue, int maxValue) { + this(title, defValue, minValue, 1, maxValue); + } + + /** + * A constructor for SettingInt. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value. + * @param minValue + * The minimum value. + * @param stepValue + * The step value. + * @param maxValue + * The maximum value. + */ + public SettingInt(String title, int defValue, int minValue, int stepValue, + int maxValue) { + values.put("", defValue); + defaultValue = defValue; + minimumValue = minValue; + this.stepValue = stepValue; + maximumValue = maxValue; + backendName = title; + if (minimumValue > maximumValue) { + int t = minimumValue; + minimumValue = maximumValue; + maximumValue = t; + } + } + + @Override + public void fromString(String s, String context) { + values.put(context, new Integer(s)); + if (displayWidget != null) { + displayWidget.update(); + } + ModSettings.dbgout("fromstring " + s); + } + + @Override + public Integer get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(Integer v, String context) { + ModSettings.dbgout("set " + v); + if (stepValue > 1) { + values.put( + context, + (int) (Math.round((float) v / (float) stepValue) * (float) stepValue)); + } else { + values.put(context, v); + } + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + return "" + get(context); + } } \ No newline at end of file diff --git a/mcp/SettingKey.java b/mcp/SettingKey.java index 7b03fb7..98210fa 100644 --- a/mcp/SettingKey.java +++ b/mcp/SettingKey.java @@ -2,145 +2,120 @@ import org.lwjgl.input.Keyboard; - /** * This is the Setting type for Keys. * * @author lahwran */ -public class SettingKey extends Setting -{ - /** - * Constructor for SettingKey. - * - * @param title - * The backend name for this setting. - * @param key - * The key you want as default, as a int keycode. - */ - public SettingKey(String title, int key) - { - defaultValue = key; - values.put("", key); - backendName = title; - } - - /** - * Constructor for SettingKey. - * - * @param title - * The backend name for this setting. - * @param key - * key The key you want as default, as a string. - */ - public SettingKey(String title, String key) - { - this(title, Keyboard.getKeyIndex(key)); - } - - @Override - public void fromString(String s, String context) - { - if (s.equals("UNBOUND")) - { - values.put(context, Keyboard.KEY_NONE); - } - else - { - values.put(context, Keyboard.getKeyIndex(s)); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public Integer get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - /** - * An easy helper to see if the current key is down. - * - * @return true if the key specified to this setting (In the current - * context) is down. - */ - public boolean isKeyDown() - { - return isKeyDown(ModSettings.currentContext); - } - - /** - * An easy helper to see if the current key is down. - * - * @param context - * The context to get the key from. - * @return true if the key specified to this setting is down. - */ - public boolean isKeyDown(String context) - { - if (get(context) != -1) - { - return Keyboard.isKeyDown(get(context)); - } - return false; - } - - @Override - public void set(Integer v, String context) - { - values.put(context, v); - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - /** - * Sets the value for this setting to the current context. - * - * @param v - * The value, as a string. - */ - public void set(String v) - { - set(v, ModSettings.currentContext); - } - - /** - * Sets the value for this setting to the specified context. - * - * @param v - * The value, as a string. - * @param context - * The context to set. - */ - public void set(String v, String context) - { - set(Keyboard.getKeyIndex(v), context); - } - - @Override - public String toString(String context) - { - return Keyboard.getKeyName(get(context)); - } +public class SettingKey extends Setting { + /** + * Constructor for SettingKey. + * + * @param title + * The backend name for this setting. + * @param key + * The key you want as default, as a int keycode. + */ + public SettingKey(String title, int key) { + defaultValue = key; + values.put("", key); + backendName = title; + } + + /** + * Constructor for SettingKey. + * + * @param title + * The backend name for this setting. + * @param key + * key The key you want as default, as a string. + */ + public SettingKey(String title, String key) { + this(title, Keyboard.getKeyIndex(key)); + } + + @Override + public void fromString(String s, String context) { + if (s.equals("UNBOUND")) { + values.put(context, Keyboard.KEY_NONE); + } else { + values.put(context, Keyboard.getKeyIndex(s)); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Integer get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + /** + * An easy helper to see if the current key is down. + * + * @return true if the key specified to this setting (In the current + * context) is down. + */ + public boolean isKeyDown() { + return isKeyDown(ModSettings.currentContext); + } + + /** + * An easy helper to see if the current key is down. + * + * @param context + * The context to get the key from. + * @return true if the key specified to this setting is down. + */ + public boolean isKeyDown(String context) { + if (get(context) != -1) { + return Keyboard.isKeyDown(get(context)); + } + return false; + } + + @Override + public void set(Integer v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value, as a string. + */ + public void set(String v) { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value, as a string. + * @param context + * The context to set. + */ + public void set(String v, String context) { + set(Keyboard.getKeyIndex(v), context); + } + + @Override + public String toString(String context) { + return Keyboard.getKeyName(get(context)); + } } \ No newline at end of file diff --git a/mcp/SettingMulti.java b/mcp/SettingMulti.java index 92e5ce0..8736e67 100644 --- a/mcp/SettingMulti.java +++ b/mcp/SettingMulti.java @@ -5,193 +5,161 @@ * * @author lahwran */ -public class SettingMulti extends Setting -{ - /** - * A string array of labels for the button. - */ - public String[] labelValues; - - /** - * A constructor for SettingMulti. - * - * @param title - * The backend name for this setting. - * @param defValue - * The default value for this Multi. - * @param labelValues - * The text labels you would like this multi to have. Must have - * at least one. - */ - public SettingMulti(String title, int defValue, String... labelValues) - { - if (labelValues.length == 0) - { - return; - } - values.put("", defValue); - defaultValue = defValue; - this.labelValues = labelValues; - backendName = title; - } - - /** - * A constructor for SettingMulti. Default value is 0, or the first label to - * be defined. - * - * @param title - * The backend name for this setting. - * @param labelValues - * The text labels you would like this multi to have. Must have - * at least one. - */ - public SettingMulti(String title, String... labelValues) - { - this(title, 0, labelValues); - } - - @Override - public void fromString(String s, String context) - { - int x = -1; - for (int i = 0; i < labelValues.length; i++) - { - if (labelValues[i].equals(s)) - { - x = i; - } - } - if (x != -1) - { - values.put(context, x); - } - else - { - values.put(context, new Float(s).intValue()); - } - ModSettings.dbgout("fromstring multi " + s); - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public Integer get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - /** - * Helper to get the text label for the current context and value. - * - * @return The label. - */ - public String getLabel() - { - return labelValues[get()]; - } - - /** - * Helper to get the text label for the specified context and value. - * - * @param context - * The context to get the value from. - * @return The label. - */ - public String getLabel(String context) - { - return labelValues[get(context)]; - } - - /** - * Shifts the value forward for the current context. - */ - public void next() - { - next(ModSettings.currentContext); - } - - /** - * Shifts the value forward for the specified context. - * - * @param context - * The context to change. - */ - public void next(String context) - { - int tempvalue = get(context) + 1; - while (tempvalue >= labelValues.length) - { - tempvalue -= labelValues.length; - } - set(tempvalue, context); - } - - @Override - public void set(Integer v, String context) - { - values.put(context, v); - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - /** - * Sets the value for this setting to the current context. - * - * @param v - * The value, in the label representation. - */ - public void set(String v) - { - set(v, ModSettings.currentContext); - } - - /** - * Sets the value for this setting to the specified context. - * - * @param v - * The value, in the label representation. - * @param context - * The context to set. - */ - public void set(String v, String context) - { - int x = -1; - for (int i = 0; i < labelValues.length; i++) - { - if (labelValues[i].equals(v)) - { - x = i; - } - } - if (x != -1) - { - set(x, context); - } - } - - @Override - public String toString(String context) - { - return labelValues[get(context)]; - } +public class SettingMulti extends Setting { + /** + * A string array of labels for the button. + */ + public String[] labelValues; + + /** + * A constructor for SettingMulti. + * + * @param title + * The backend name for this setting. + * @param defValue + * The default value for this Multi. + * @param labelValues + * The text labels you would like this multi to have. Must have + * at least one. + */ + public SettingMulti(String title, int defValue, String... labelValues) { + if (labelValues.length == 0) { + return; + } + values.put("", defValue); + defaultValue = defValue; + this.labelValues = labelValues; + backendName = title; + } + + /** + * A constructor for SettingMulti. Default value is 0, or the first label to + * be defined. + * + * @param title + * The backend name for this setting. + * @param labelValues + * The text labels you would like this multi to have. Must have + * at least one. + */ + public SettingMulti(String title, String... labelValues) { + this(title, 0, labelValues); + } + + @Override + public void fromString(String s, String context) { + int x = -1; + for (int i = 0; i < labelValues.length; i++) { + if (labelValues[i].equals(s)) { + x = i; + } + } + if (x != -1) { + values.put(context, x); + } else { + values.put(context, new Float(s).intValue()); + } + ModSettings.dbgout("fromstring multi " + s); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public Integer get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + /** + * Helper to get the text label for the current context and value. + * + * @return The label. + */ + public String getLabel() { + return labelValues[get()]; + } + + /** + * Helper to get the text label for the specified context and value. + * + * @param context + * The context to get the value from. + * @return The label. + */ + public String getLabel(String context) { + return labelValues[get(context)]; + } + + /** + * Shifts the value forward for the current context. + */ + public void next() { + next(ModSettings.currentContext); + } + + /** + * Shifts the value forward for the specified context. + * + * @param context + * The context to change. + */ + public void next(String context) { + int tempvalue = get(context) + 1; + while (tempvalue >= labelValues.length) { + tempvalue -= labelValues.length; + } + set(tempvalue, context); + } + + @Override + public void set(Integer v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + /** + * Sets the value for this setting to the current context. + * + * @param v + * The value, in the label representation. + */ + public void set(String v) { + set(v, ModSettings.currentContext); + } + + /** + * Sets the value for this setting to the specified context. + * + * @param v + * The value, in the label representation. + * @param context + * The context to set. + */ + public void set(String v, String context) { + int x = -1; + for (int i = 0; i < labelValues.length; i++) { + if (labelValues[i].equals(v)) { + x = i; + } + } + if (x != -1) { + set(x, context); + } + } + + @Override + public String toString(String context) { + return labelValues[get(context)]; + } } \ No newline at end of file diff --git a/mcp/SettingText.java b/mcp/SettingText.java index d407cc2..bc1d3aa 100644 --- a/mcp/SettingText.java +++ b/mcp/SettingText.java @@ -5,68 +5,53 @@ * * @author lahwran */ -public class SettingText extends Setting -{ - /** - * A constructor for SettingText. - * - * @param title - * The backend name for this setting. - * @param defaulttext - * The default text for this Setting. - */ - public SettingText(String title, String defaulttext) - { - values.put("", defaulttext); - defaultValue = defaulttext; - backendName = title; - } - - @Override - public void fromString(String s, String context) - { - values.put(context, s); - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public String get(String context) - { - if (values.get(context) != null) - { - return values.get(context); - } - else - if (values.get("") != null) - { - return values.get(""); - } - else - { - return defaultValue; - } - } - - @Override - public void set(String v, String context) - { - values.put(context, v); - if (parent != null) - { - parent.save(context); - } - if (displayWidget != null) - { - displayWidget.update(); - } - } - - @Override - public String toString(String context) - { - return get(context); - } +public class SettingText extends Setting { + /** + * A constructor for SettingText. + * + * @param title + * The backend name for this setting. + * @param defaulttext + * The default text for this Setting. + */ + public SettingText(String title, String defaulttext) { + values.put("", defaulttext); + defaultValue = defaulttext; + backendName = title; + } + + @Override + public void fromString(String s, String context) { + values.put(context, s); + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String get(String context) { + if (values.get(context) != null) { + return values.get(context); + } else if (values.get("") != null) { + return values.get(""); + } else { + return defaultValue; + } + } + + @Override + public void set(String v, String context) { + values.put(context, v); + if (parent != null) { + parent.save(context); + } + if (displayWidget != null) { + displayWidget.update(); + } + } + + @Override + public String toString(String context) { + return get(context); + } } \ No newline at end of file diff --git a/mcp/WidgetBoolean.java b/mcp/WidgetBoolean.java index 2df4540..9d01d46 100644 --- a/mcp/WidgetBoolean.java +++ b/mcp/WidgetBoolean.java @@ -3,135 +3,116 @@ import de.matthiasmann.twl.Button; import de.matthiasmann.twl.model.SimpleButtonModel; - /** * This is the Widget for boolean settings. It uses a button to display to the * user. * * @author lahwran */ -public class WidgetBoolean extends WidgetSetting implements Runnable -{ - /** - * The reference to the underlying Button. - */ - public Button button; - /** - * The text to display on the button when the setting is false. - */ - public String falseText; - /** - * The reference to the SettingBoolean that this WidgetBoolean uses. - */ - public SettingBoolean settingReference = null; - /** - * The text to display on the button when the setting is true. - */ - public String trueText; - - /** - * This creates a new WidgetBoolean using the SettingBoolean and String - * provided. It uses 'true' and 'false' for the text. - * - * @param setting - * The backing setting. - * @param title - * The title for this Widget. It is what will show on the button, - * asides from it's current value. - */ - public WidgetBoolean(SettingBoolean setting, String title) - { - this(setting, title, "true", "false"); - } - - /** - * This creates a new WidgetBoolean using the WidgetBoolean and String - * provided, as well as setting the true and false text. - * - * @param setting - * The backing setting. - * @param title - * The title for this Widget. It is what will show on the button, - * asides from it's current value. - * @param truetext - * The text to display what the setting is true. - * @param falsetext - * The text to display what the setting is false. - */ - public WidgetBoolean(SettingBoolean setting, String title, String truetext, - String falsetext) - { - super(title); - setTheme(""); - trueText = truetext; - falseText = falsetext; - SimpleButtonModel bmodel = new SimpleButtonModel(); - button = new Button(bmodel); - bmodel.addActionCallback(this); - add(button); - settingReference = setting; - settingReference.displayWidget = this; - update(); - } - - @Override - public void addCallback(Runnable paramRunnable) - { - button.getModel().addActionCallback(paramRunnable); - } - - @Override - public void removeCallback(Runnable paramRunnable) - { - button.getModel().removeActionCallback(paramRunnable); - } - - @Override - public void run() - { - if (settingReference != null) - { - settingReference.set( - !settingReference.get(ModSettingScreen.guiContext), - ModSettingScreen.guiContext); - } - update(); - GuiModScreen.clicksound(); - } - - @Override - public void update() - { - button.setText(userString()); - } - - @Override - public String userString() - { - if (settingReference != null) - { - if (niceName.length() > 0) - { - return String.format("%s: %s", niceName, settingReference - .get(ModSettingScreen.guiContext) ? trueText - : falseText); - } - else - { - return settingReference.get(ModSettingScreen.guiContext) ? trueText - : falseText; - } - } - else - { - if (niceName.length() > 0) - { - return String.format("%s: %s", niceName, "no value"); - } - else - { - return "no value or title"; - } - } - } +public class WidgetBoolean extends WidgetSetting implements Runnable { + /** + * The reference to the underlying Button. + */ + public Button button; + /** + * The text to display on the button when the setting is false. + */ + public String falseText; + /** + * The reference to the SettingBoolean that this WidgetBoolean uses. + */ + public SettingBoolean settingReference = null; + /** + * The text to display on the button when the setting is true. + */ + public String trueText; + + /** + * This creates a new WidgetBoolean using the SettingBoolean and String + * provided. It uses 'true' and 'false' for the text. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + */ + public WidgetBoolean(SettingBoolean setting, String title) { + this(setting, title, "true", "false"); + } + + /** + * This creates a new WidgetBoolean using the WidgetBoolean and String + * provided, as well as setting the true and false text. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + * @param truetext + * The text to display what the setting is true. + * @param falsetext + * The text to display what the setting is false. + */ + public WidgetBoolean(SettingBoolean setting, String title, String truetext, + String falsetext) { + super(title); + setTheme(""); + trueText = truetext; + falseText = falsetext; + SimpleButtonModel bmodel = new SimpleButtonModel(); + button = new Button(bmodel); + bmodel.addActionCallback(this); + add(button); + settingReference = setting; + settingReference.displayWidget = this; + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) { + button.getModel().addActionCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) { + button.getModel().removeActionCallback(paramRunnable); + } + + @Override + public void run() { + if (settingReference != null) { + settingReference.set( + !settingReference.get(ModSettingScreen.guiContext), + ModSettingScreen.guiContext); + } + update(); + GuiModScreen.clicksound(); + } + + @Override + public void update() { + button.setText(userString()); + } + + @Override + public String userString() { + if (settingReference != null) { + if (niceName.length() > 0) { + return String.format("%s: %s", niceName, settingReference + .get(ModSettingScreen.guiContext) ? trueText + : falseText); + } else { + return settingReference.get(ModSettingScreen.guiContext) ? trueText + : falseText; + } + } else { + if (niceName.length() > 0) { + return String.format("%s: %s", niceName, "no value"); + } else { + return "no value or title"; + } + } + } } diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/WidgetClassicTwocolumn.java index f19df7d..6ca9916 100644 --- a/mcp/WidgetClassicTwocolumn.java +++ b/mcp/WidgetClassicTwocolumn.java @@ -5,7 +5,6 @@ import de.matthiasmann.twl.Widget; - /** * This widget is designed to arrange widgets into two columns. The width and * height is enforced, but they can be configured by the programmer. @@ -13,267 +12,214 @@ * @author lahwran * @author ShaRose */ -public class WidgetClassicTwocolumn extends Widget -{ - /** - * This is the default height to enforce for widgets. - */ - public int childDefaultHeight = 20; - /** - * This is the default height to enforce for widgets. - */ - public int childWidth = 150; - /** - * This is the amount of padding to use between widgets vertically. - */ - public int defaultPadding = 4; - /** - * This is a map to override the heights of specific widgets. It is an - * override to overrideHeight. If you set the Integer as 0, it will use what - * the widget wants as it's height. If it is set negative, it will keep the - * positive part as the minimum size, but if the widget wants to grow it - * can. If you set anything else, it will use that height. Note that with - * TwoColumn widgets it will try and keep the height the same between two - * widgets opposite each other, so the one with the biggest height will - * override the other. - */ - public Map heightOverrideExceptions = new HashMap(); - /** - * This is a map to override the width of specific widgets. It is an - * override to childWidth. If you set the Integer as 0, it will use what - * the widget wants as it's width. If it is set negative, it will keep the - * positive part as the minimum size, but if the widget wants to grow it - * can. If you set anything else, it will use that width. Note that with - * TwoColumn widgets it will try and keep the width the same between two - * widgets opposite each other, so the one with the biggest width will - * override the other. - */ - public Map widthOverrideExceptions = new HashMap(); - /** - * This says whether it should override the height for all widgets. - */ - public boolean overrideHeight = true; - /** - * This is the amount of room between the two columns. - */ - public int splitDistance = 10; - /** - * This is the amount of padding to have before any widgets are positioned. - */ - public int verticalPadding = 0; - - /** - * This creates the WidgetClassicTwocolumn and adds the requested widgets. - * - * @param widgets - */ - public WidgetClassicTwocolumn(Widget... widgets) - { - for (int i = 0; i < widgets.length; ++i) - { - add(widgets[i]); - } - setTheme(""); - } - - @Override - public int getPreferredHeight() - { - int totalheight = verticalPadding; - for (int i = 0; i < getNumChildren(); i += 2) - { - Widget w = getChild(i); - Widget w2 = null; - if (i + 1 != getNumChildren()) - { - w2 = getChild(i + 1); - } - int height = childDefaultHeight; - if (!overrideHeight) - { - height = w.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(w)) - { - Integer heightSet = heightOverrideExceptions.get(w); - if (heightSet < 1) - { - height = w.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - if (w2 != null) - { - int temp = height; - if (!overrideHeight) - { - temp = w2.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(w2)) - { - Integer heightSet = heightOverrideExceptions.get(w2); - if (heightSet < 1) - { - height = w.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - if (temp > height) - { - height = temp; - } - } - totalheight += height + defaultPadding; - } - return totalheight; - } - - @Override - public int getPreferredWidth() - { - return getParent().getWidth(); - } - - @Override - public void layout() - { - if (getParent().getTheme().equals("scrollpane-notch")) - { - verticalPadding = 10; - } - int totalheight = verticalPadding; - for (int i = 0; i < getNumChildren(); i += 2) - { - Widget w = getChild(i); - Widget w2 = null; - try - { - w2 = getChild(i + 1); - } - catch (IndexOutOfBoundsException e) - { - // do nothing, just means it's uneven. - } - int height = childDefaultHeight; - int width = childWidth; - if (!overrideHeight) - { - height = w.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(w)) - { - Integer heightSet = heightOverrideExceptions.get(w); - - if (heightSet < 1) - { - height = w.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - if (widthOverrideExceptions.containsKey(w)) - { - Integer widthSet = widthOverrideExceptions.get(w); - - if (widthSet < 1) - { - width = w.getPreferredWidth(); - widthSet = -widthSet; - if(widthSet != 0 && widthSet > width) - { - width = widthSet; - } - } - else - { - width = widthSet; - } - } - if (w2 != null) - { - int temph = height; - int tempw = width; - if (!overrideHeight) - { - temph = w2.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(w2)) - { - Integer heightSet = heightOverrideExceptions.get(w2); - if (heightSet < 1) - { - height = w.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - if (widthOverrideExceptions.containsKey(w2)) - { - Integer widthSet = widthOverrideExceptions.get(w2); - - if (widthSet < 1) - { - width = w2.getPreferredWidth(); - widthSet = -widthSet; - if(widthSet != 0 && widthSet > width) - { - width = widthSet; - } - } - else - { - width = widthSet; - } - } - if (temph > height) - { - height = temph; - } - if (tempw > width) - { - width = tempw; - } - } - w.setSize(width, height); - w.setPosition(getX() + getWidth() / 2 - - (width + splitDistance / 2), getY() + totalheight); - if (w2 != null) - { - w2.setSize(width, height); - w2.setPosition(getX() + getWidth() / 2 + splitDistance / 2, - getY() + totalheight); - } - totalheight += height + defaultPadding; - } - } +public class WidgetClassicTwocolumn extends Widget { + /** + * This is the default height to enforce for widgets. + */ + public int childDefaultHeight = 20; + /** + * This is the default width to enforce for widgets. + */ + public int childDefaultWidth = 150; + /** + * This is the amount of padding to use between widgets vertically. + */ + public int defaultPadding = 4; + /** + * This is a map to override the heights of specific widgets. It is an + * override to overrideHeight. If you set the Integer as 0, it will use what + * the widget wants as it's height. If it is set negative, it will keep the + * positive part as the minimum size, but if the widget wants to grow it + * can. If you set anything else, it will use that height. Note that with + * TwoColumn widgets it will try and keep the height the same between two + * widgets opposite each other, so the one with the biggest height will + * override the other. + */ + public Map heightOverrideExceptions = new HashMap(); + /** + * This says whether it should override the height for all widgets. + */ + public boolean overrideHeight = true; + /** + * This is the amount of room between the two columns. + */ + public int splitDistance = 10; + /** + * This is the amount of padding to have before any widgets are positioned. + */ + public int verticalPadding = 0; + /** + * This is a map to override the width of specific widgets. It is an + * override to childWidth. If you set the Integer as 0, it will use what the + * widget wants as it's width. If it is set negative, it will keep the + * positive part as the minimum size, but if the widget wants to grow it + * can. If you set anything else, it will use that width. Note that with + * TwoColumn widgets it will try and keep the width the same between two + * widgets opposite each other, so the one with the biggest width will + * override the other. + */ + public Map widthOverrideExceptions = new HashMap(); + + /** + * This creates the WidgetClassicTwocolumn and adds the requested widgets. + * + * @param widgets + */ + public WidgetClassicTwocolumn(Widget... widgets) { + for (int i = 0; i < widgets.length; ++i) { + add(widgets[i]); + } + setTheme(""); + } + + @Override + public int getPreferredHeight() { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); i += 2) { + Widget w = getChild(i); + Widget w2 = null; + if ((i + 1) != getNumChildren()) { + w2 = getChild(i + 1); + } + int height = childDefaultHeight; + if (!overrideHeight) { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) { + Integer heightSet = heightOverrideExceptions.get(w); + if (heightSet < 1) { + height = w.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + if (w2 != null) { + int temp = height; + if (!overrideHeight) { + temp = w2.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w2)) { + Integer heightSet = heightOverrideExceptions.get(w2); + if (heightSet < 1) { + height = w.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + if (temp > height) { + height = temp; + } + } + totalheight += height + defaultPadding; + } + return totalheight; + } + + @Override + public int getPreferredWidth() { + return getParent().getWidth(); + } + + @Override + public void layout() { + if (getParent().getTheme().equals("scrollpane-notch")) { + verticalPadding = 10; + } + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); i += 2) { + Widget w = getChild(i); + Widget w2 = null; + try { + w2 = getChild(i + 1); + } catch (IndexOutOfBoundsException e) { + // do nothing, just means it's uneven. + } + int height = childDefaultHeight; + int width = childDefaultWidth; + if (!overrideHeight) { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) { + Integer heightSet = heightOverrideExceptions.get(w); + + if (heightSet < 1) { + height = w.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + if (widthOverrideExceptions.containsKey(w)) { + Integer widthSet = widthOverrideExceptions.get(w); + + if (widthSet < 1) { + width = w.getPreferredWidth(); + widthSet = -widthSet; + if ((widthSet != 0) && (widthSet > width)) { + width = widthSet; + } + } else { + width = widthSet; + } + } + if (w2 != null) { + int temph = height; + int tempw = width; + if (!overrideHeight) { + temph = w2.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w2)) { + Integer heightSet = heightOverrideExceptions.get(w2); + if (heightSet < 1) { + height = w.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + if (widthOverrideExceptions.containsKey(w2)) { + Integer widthSet = widthOverrideExceptions.get(w2); + + if (widthSet < 1) { + width = w2.getPreferredWidth(); + widthSet = -widthSet; + if ((widthSet != 0) && (widthSet > width)) { + width = widthSet; + } + } else { + width = widthSet; + } + } + if (temph > height) { + height = temph; + } + if (tempw > width) { + width = tempw; + } + } + w.setSize(width, height); + w.setPosition((getX() + (getWidth() / 2)) + - (width + (splitDistance / 2)), getY() + totalheight); + if (w2 != null) { + w2.setSize(width, height); + w2.setPosition(getX() + (getWidth() / 2) + (splitDistance / 2), + getY() + totalheight); + } + totalheight += height + defaultPadding; + } + } } diff --git a/mcp/WidgetFloat.java b/mcp/WidgetFloat.java index 9930565..4ec9687 100644 --- a/mcp/WidgetFloat.java +++ b/mcp/WidgetFloat.java @@ -8,91 +8,86 @@ * * @author lahwran */ -public class WidgetFloat extends WidgetSetting implements Runnable -{ - /** - * The number of decimal places to display to the user. - */ - public int decimalPlaces; - /** - * The reference to the underlying WidgetSlider. - */ - public WidgetSlider slider; - /** - * The reference to the SettingInt that this WidgetInt uses. - */ - public SettingFloat settingReference; - - /** - * This creates a new WidgetInt using the SettingInt and String provided. It defaults the decimal places to display at 2. - * - * @param setting - * The backing setting. - * @param title - * The text that will show on the WidgetSlider. - */ - public WidgetFloat(SettingFloat setting, String title) - { - this(setting, title, 2); - } - - /** - * This creates a new WidgetInt using the SettingInt and String provided, as well as setting how many decimal places to use. - * - * @param setting - * The backing setting. - * @param title - * The text that will show on the WidgetSlider. - */ - public WidgetFloat(SettingFloat setting, String title, int _decimalPlaces) - { - super(title); - setTheme(""); - decimalPlaces = _decimalPlaces; - settingReference = setting; - settingReference.displayWidget = this; - SimpleFloatModel smodel = new SimpleFloatModel(settingReference.minimumValue, settingReference.maximumValue, - settingReference.get()); - smodel.addCallback(this); - slider = new WidgetSlider(smodel); - if ((settingReference.stepValue > 0.0f) && (settingReference.stepValue <= settingReference.maximumValue)) - { - slider.setStepSize(settingReference.stepValue); - } - slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); - add(slider); - update(); - } - - @Override - public void run() - { - settingReference.set(slider.getValue(), ModSettingScreen.guiContext); - } - - @Override - public void update() - { - slider.setValue(settingReference.get(ModSettingScreen.guiContext)); - slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); - } - - @Override - public String userString() - { - String l = String.format("%02d", decimalPlaces); - return String.format("%s: %." + l + "f", niceName, settingReference); - } - - @Override - public void addCallback(Runnable paramRunnable) - { - slider.getModel().addCallback(paramRunnable); - } +public class WidgetFloat extends WidgetSetting implements Runnable { + /** + * The number of decimal places to display to the user. + */ + public int decimalPlaces; + /** + * The reference to the SettingInt that this WidgetInt uses. + */ + public SettingFloat settingReference; + /** + * The reference to the underlying WidgetSlider. + */ + public WidgetSlider slider; - @Override - public void removeCallback(Runnable paramRunnable) - { - slider.getModel().removeCallback(paramRunnable); - } + /** + * This creates a new WidgetInt using the SettingInt and String provided. It + * defaults the decimal places to display at 2. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetFloat(SettingFloat setting, String title) { + this(setting, title, 2); + } + + /** + * This creates a new WidgetInt using the SettingInt and String provided, as + * well as setting how many decimal places to use. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetFloat(SettingFloat setting, String title, int _decimalPlaces) { + super(title); + setTheme(""); + decimalPlaces = _decimalPlaces; + settingReference = setting; + settingReference.displayWidget = this; + SimpleFloatModel smodel = new SimpleFloatModel( + settingReference.minimumValue, settingReference.maximumValue, + settingReference.get()); + smodel.addCallback(this); + slider = new WidgetSlider(smodel); + if ((settingReference.stepValue > 0.0f) + && (settingReference.stepValue <= settingReference.maximumValue)) { + slider.setStepSize(settingReference.stepValue); + } + slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); + add(slider); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) { + slider.getModel().addCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) { + slider.getModel().removeCallback(paramRunnable); + } + + @Override + public void run() { + settingReference.set(slider.getValue(), ModSettingScreen.guiContext); + } + + @Override + public void update() { + slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); + } + + @Override + public String userString() { + String l = String.format("%02d", decimalPlaces); + return String.format("%s: %." + l + "f", niceName, settingReference); + } } diff --git a/mcp/WidgetInt.java b/mcp/WidgetInt.java index e2ca812..cb6617f 100644 --- a/mcp/WidgetInt.java +++ b/mcp/WidgetInt.java @@ -2,85 +2,78 @@ import de.matthiasmann.twl.model.SimpleFloatModel; - /** * This is the Widget for Integer settings. It uses a WidgetSlider to display to * the user. * * @author lahwran */ -public class WidgetInt extends WidgetSetting implements Runnable -{ - /** - * The reference to the SettingInt that this WidgetInt uses. - */ - public SettingInt settingReference; - /** - * The reference to the underlying WidgetSlider. - */ - public WidgetSlider slider; - - /** - * This creates a new WidgetInt using the SettingInt and String provided. - * - * @param setting - * The backing setting. - * @param title - * The text that will show on the WidgetSlider. - */ - public WidgetInt(SettingInt setting, String title) - { - super(title); - setTheme(""); - settingReference = setting; - settingReference.displayWidget = this; - SimpleFloatModel smodel = new SimpleFloatModel(settingReference.minimumValue, - settingReference.maximumValue, settingReference.get()); - slider = new WidgetSlider(smodel); - slider.setFormat(String.format("%s: %%.0f", niceName)); - if ((settingReference.stepValue > 1) - && (settingReference.stepValue <= settingReference.maximumValue)) - { - slider.setStepSize(settingReference.stepValue); - } - smodel.addCallback(this); - add(slider); - update(); - } - - @Override - public void addCallback(Runnable paramRunnable) - { - slider.getModel().addCallback(paramRunnable); - } - - @Override - public void removeCallback(Runnable paramRunnable) - { - slider.getModel().removeCallback(paramRunnable); - } - - @Override - public void run() - { - ModSettings.dbgout("run " + (int) slider.getValue()); - settingReference.set((int) slider.getValue(), - ModSettingScreen.guiContext); - } - - @Override - public void update() - { - slider.setValue(settingReference.get(ModSettingScreen.guiContext)); - slider.setFormat(String.format("%s: %%.0f", niceName)); - ModSettings.dbgout("update " - + settingReference.get(ModSettingScreen.guiContext) + " -> " - + (int) slider.getValue()); - } - @Override - public String userString() - { - return String.format("%s: %.0d", niceName, - settingReference.get(ModSettingScreen.guiContext)); - } +public class WidgetInt extends WidgetSetting implements Runnable { + /** + * The reference to the SettingInt that this WidgetInt uses. + */ + public SettingInt settingReference; + /** + * The reference to the underlying WidgetSlider. + */ + public WidgetSlider slider; + + /** + * This creates a new WidgetInt using the SettingInt and String provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetInt(SettingInt setting, String title) { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + SimpleFloatModel smodel = new SimpleFloatModel( + settingReference.minimumValue, settingReference.maximumValue, + settingReference.get()); + slider = new WidgetSlider(smodel); + slider.setFormat(String.format("%s: %%.0f", niceName)); + if ((settingReference.stepValue > 1) + && (settingReference.stepValue <= settingReference.maximumValue)) { + slider.setStepSize(settingReference.stepValue); + } + smodel.addCallback(this); + add(slider); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) { + slider.getModel().addCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) { + slider.getModel().removeCallback(paramRunnable); + } + + @Override + public void run() { + ModSettings.dbgout("run " + (int) slider.getValue()); + settingReference.set((int) slider.getValue(), + ModSettingScreen.guiContext); + } + + @Override + public void update() { + slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setFormat(String.format("%s: %%.0f", niceName)); + ModSettings.dbgout("update " + + settingReference.get(ModSettingScreen.guiContext) + " -> " + + (int) slider.getValue()); + } + + @Override + public String userString() { + return String.format("%s: %.0d", niceName, + settingReference.get(ModSettingScreen.guiContext)); + } } \ No newline at end of file diff --git a/mcp/WidgetKeybinding.java b/mcp/WidgetKeybinding.java index 58b665f..9536f98 100644 --- a/mcp/WidgetKeybinding.java +++ b/mcp/WidgetKeybinding.java @@ -6,118 +6,103 @@ import de.matthiasmann.twl.ToggleButton; import de.matthiasmann.twl.model.SimpleBooleanModel; - /** * This is the Widget for Key binding settings. It uses a ToggleButton to * display to the user. * * @author lahwran */ -public class WidgetKeybinding extends WidgetSetting implements Runnable -{ - /** - * The reference to the underlying SimpleBooleanModel. - */ - public SimpleBooleanModel booleanModel; - /** - * The constant for clearing the existing key. - */ - public int CLEARKEY = Keyboard.KEY_DELETE; - /** - * The constant for exiting and keeping the existing key. - */ - public int NEVERMINDKEY = Keyboard.KEY_ESCAPE; - /** - * The reference to the SettingKey that this WidgetKeybinding uses. - */ - public SettingKey settingReference; - /** - * The reference to the underlying ToggleButton. - */ - public ToggleButton toggleButton; - - /** - * This creates a new WidgetKeybinding using the WidgetKeybinding and String - * provided. - * - * @param setting - * The backing setting. - * @param title - * The text that will show on the WidgetSlider. - */ - public WidgetKeybinding(SettingKey setting, String title) - { - super(title); - setTheme(""); - settingReference = setting; - settingReference.displayWidget = this; - booleanModel = new SimpleBooleanModel(false); - toggleButton = new ToggleButton(booleanModel); - add(toggleButton); - update(); - } - - @Override - public void addCallback(Runnable paramRunnable) - { - booleanModel.addCallback(paramRunnable); - } - - @Override - public boolean handleEvent(Event evt) - { - if ((evt.isKeyEvent() && !evt.isKeyPressedEvent()) - && booleanModel.getValue()) - { - System.out.println(Keyboard.getKeyName(evt.getKeyCode())); - int tmpvalue = evt.getKeyCode(); - if (tmpvalue == CLEARKEY) - { - settingReference.set(Keyboard.KEY_NONE, - ModSettingScreen.guiContext); - } - else - if (tmpvalue != NEVERMINDKEY) - { - settingReference.set(tmpvalue, ModSettingScreen.guiContext); - } - booleanModel.setValue(false); - update(); - GuiModScreen.clicksound(); - return true; - } - return false; - } - - @Override - public void keyboardFocusLost() - { - GuiModScreen.clicksound(); - booleanModel.setValue(false); - } - - @Override - public void removeCallback(Runnable paramRunnable) - { - booleanModel.removeCallback(paramRunnable); - } - - @Override - public void run() - { - GuiModScreen.clicksound(); - } - - @Override - public void update() - { - toggleButton.setText(userString()); - } - - @Override - public String userString() - { - return String.format("%s: %s", niceName, Keyboard - .getKeyName(settingReference.get(ModSettingScreen.guiContext))); - } +public class WidgetKeybinding extends WidgetSetting implements Runnable { + /** + * The reference to the underlying SimpleBooleanModel. + */ + public SimpleBooleanModel booleanModel; + /** + * The constant for clearing the existing key. + */ + public int CLEARKEY = Keyboard.KEY_DELETE; + /** + * The constant for exiting and keeping the existing key. + */ + public int NEVERMINDKEY = Keyboard.KEY_ESCAPE; + /** + * The reference to the SettingKey that this WidgetKeybinding uses. + */ + public SettingKey settingReference; + /** + * The reference to the underlying ToggleButton. + */ + public ToggleButton toggleButton; + + /** + * This creates a new WidgetKeybinding using the WidgetKeybinding and String + * provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the WidgetSlider. + */ + public WidgetKeybinding(SettingKey setting, String title) { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + booleanModel = new SimpleBooleanModel(false); + toggleButton = new ToggleButton(booleanModel); + add(toggleButton); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) { + booleanModel.addCallback(paramRunnable); + } + + @Override + public boolean handleEvent(Event evt) { + if ((evt.isKeyEvent() && !evt.isKeyPressedEvent()) + && booleanModel.getValue()) { + System.out.println(Keyboard.getKeyName(evt.getKeyCode())); + int tmpvalue = evt.getKeyCode(); + if (tmpvalue == CLEARKEY) { + settingReference.set(Keyboard.KEY_NONE, + ModSettingScreen.guiContext); + } else if (tmpvalue != NEVERMINDKEY) { + settingReference.set(tmpvalue, ModSettingScreen.guiContext); + } + booleanModel.setValue(false); + update(); + GuiModScreen.clicksound(); + return true; + } + return false; + } + + @Override + public void keyboardFocusLost() { + GuiModScreen.clicksound(); + booleanModel.setValue(false); + } + + @Override + public void removeCallback(Runnable paramRunnable) { + booleanModel.removeCallback(paramRunnable); + } + + @Override + public void run() { + GuiModScreen.clicksound(); + } + + @Override + public void update() { + toggleButton.setText(userString()); + } + + @Override + public String userString() { + return String.format("%s: %s", niceName, Keyboard + .getKeyName(settingReference.get(ModSettingScreen.guiContext))); + } } diff --git a/mcp/WidgetMulti.java b/mcp/WidgetMulti.java index 8be631a..ef66fa1 100644 --- a/mcp/WidgetMulti.java +++ b/mcp/WidgetMulti.java @@ -3,85 +3,74 @@ import de.matthiasmann.twl.Button; import de.matthiasmann.twl.model.SimpleButtonModel; - /** * This is the Widget for Multi settings. It uses a button to display to the * user, and cycles the values. * * @author lahwran */ -public class WidgetMulti extends WidgetSetting implements Runnable -{ - /** - * The reference to the underlying Button. - */ - public Button button; - /** - * The reference to the SettingMulti that this WidgetMulti uses. - */ - public SettingMulti value; - - /** - * This creates a new WidgetMulti using the SettingMulti and String - * provided. - * - * @param setting - * The backing setting. - * @param title - * The title for this Widget. It is what will show on the button, - * asides from it's current value. - */ - public WidgetMulti(SettingMulti setting, String title) - { - super(title); - setTheme(""); - value = setting; - value.displayWidget = this; - SimpleButtonModel model = new SimpleButtonModel(); - button = new Button(model); - model.addActionCallback(this); - add(button); - update(); - } - - @Override - public void addCallback(Runnable paramRunnable) - { - button.getModel().addActionCallback(paramRunnable); - } - - @Override - public void removeCallback(Runnable paramRunnable) - { - button.getModel().removeActionCallback(paramRunnable); - } - - @Override - public void run() - { - value.next(ModSettingScreen.guiContext); - update(); - GuiModScreen.clicksound(); - } - - @Override - public void update() - { - button.setText(userString()); - ModSettings.dbgout("multi update " + userString()); - } - - @Override - public String userString() - { - if (niceName.length() > 0) - { - return String.format("%s: %s", niceName, - value.getLabel(ModSettingScreen.guiContext)); - } - else - { - return value.getLabel(ModSettingScreen.guiContext); - } - } +public class WidgetMulti extends WidgetSetting implements Runnable { + /** + * The reference to the underlying Button. + */ + public Button button; + /** + * The reference to the SettingMulti that this WidgetMulti uses. + */ + public SettingMulti value; + + /** + * This creates a new WidgetMulti using the SettingMulti and String + * provided. + * + * @param setting + * The backing setting. + * @param title + * The title for this Widget. It is what will show on the button, + * asides from it's current value. + */ + public WidgetMulti(SettingMulti setting, String title) { + super(title); + setTheme(""); + value = setting; + value.displayWidget = this; + SimpleButtonModel model = new SimpleButtonModel(); + button = new Button(model); + model.addActionCallback(this); + add(button); + update(); + } + + @Override + public void addCallback(Runnable paramRunnable) { + button.getModel().addActionCallback(paramRunnable); + } + + @Override + public void removeCallback(Runnable paramRunnable) { + button.getModel().removeActionCallback(paramRunnable); + } + + @Override + public void run() { + value.next(ModSettingScreen.guiContext); + update(); + GuiModScreen.clicksound(); + } + + @Override + public void update() { + button.setText(userString()); + ModSettings.dbgout("multi update " + userString()); + } + + @Override + public String userString() { + if (niceName.length() > 0) { + return String.format("%s: %s", niceName, + value.getLabel(ModSettingScreen.guiContext)); + } else { + return value.getLabel(ModSettingScreen.guiContext); + } + } } diff --git a/mcp/WidgetSetting.java b/mcp/WidgetSetting.java index a948c56..6d7bde1 100644 --- a/mcp/WidgetSetting.java +++ b/mcp/WidgetSetting.java @@ -4,103 +4,91 @@ import de.matthiasmann.twl.Widget; - /** * This is the base class for Widgets that are supposed to be front ends for * Settings. * * @author lahwran */ -public abstract class WidgetSetting extends Widget -{ - /** - * This is a list of all WidgetSetting instances. - */ - public static ArrayList all = new ArrayList(); - - /** - * This updates all Widgets with the backing setting's current values. - */ - public static void updateAll() - { - for (int i = 0; i < WidgetSetting.all.size(); i++) - { - WidgetSetting.all.get(i).update(); - } - } - - /** - * The name that will be shown on the widget. - */ - public String niceName; - - /** - * This sets the Nice Name and adds itself to the list of instances. Note - * this class is abstract, so you will not be using this constructor. - * - * @param nicename - * The nice name for this WidgetSetting. - */ - public WidgetSetting(String nicename) - { - niceName = nicename; - WidgetSetting.all.add(this); - } - - @Override - public void add(Widget child) - { - String T = child.getTheme(); - if (T.length() == 0) - { - child.setTheme("/-defaults"); - } - else - if (!T.substring(0, 1).equals("/")) - { - child.setTheme("/" + T); - } - super.add(child); - } - - /** - * This adds a callback to the displayed widget (Button, Slider, etc) - * - * @param paramRunnable - * The Runnable callback you wish to call if the value changes. - */ - public abstract void addCallback(Runnable paramRunnable); - - @Override - public void layout() - { - for (int i = 0; i < getNumChildren(); i++) - { - Widget w = getChild(i); - w.setPosition(getX(), getY()); - w.setSize(getWidth(), getHeight()); - } - } - - /** - * This removes a callback to the displayed widget (Button, Slider, etc) if - * you previously set one up. - * - * @param paramRunnable - * The Runnable callback you wish to remove. - */ - public abstract void removeCallback(Runnable paramRunnable); - - /** - * This method updates the widget with the backing setting store. - */ - public abstract void update(); - - /** - * This returns a clean string that shows the Nice Name and the current - * value. - * - * @return A descriptor string. - */ - public abstract String userString(); +public abstract class WidgetSetting extends Widget { + /** + * This is a list of all WidgetSetting instances. + */ + public static ArrayList all = new ArrayList(); + + /** + * This updates all Widgets with the backing setting's current values. + */ + public static void updateAll() { + for (int i = 0; i < WidgetSetting.all.size(); i++) { + WidgetSetting.all.get(i).update(); + } + } + + /** + * The name that will be shown on the widget. + */ + public String niceName; + + /** + * This sets the Nice Name and adds itself to the list of instances. Note + * this class is abstract, so you will not be using this constructor. + * + * @param nicename + * The nice name for this WidgetSetting. + */ + public WidgetSetting(String nicename) { + niceName = nicename; + WidgetSetting.all.add(this); + } + + @Override + public void add(Widget child) { + String T = child.getTheme(); + if (T.length() == 0) { + child.setTheme("/-defaults"); + } else if (!T.substring(0, 1).equals("/")) { + child.setTheme("/" + T); + } + super.add(child); + } + + /** + * This adds a callback to the displayed widget (Button, Slider, etc) + * + * @param paramRunnable + * The Runnable callback you wish to call if the value changes. + */ + public abstract void addCallback(Runnable paramRunnable); + + @Override + public void layout() { + for (int i = 0; i < getNumChildren(); i++) { + Widget w = getChild(i); + w.setPosition(getX(), getY()); + w.setSize(getWidth(), getHeight()); + } + } + + /** + * This removes a callback to the displayed widget (Button, Slider, etc) if + * you previously set one up. + * + * @param paramRunnable + * The Runnable callback you wish to remove. + */ + public abstract void removeCallback(Runnable paramRunnable); + + /** + * This method updates the widget with the backing setting store. + */ + public abstract void update(); + + /** + * This returns a clean string that shows the Nice Name and the current + * value. + * + * @return A descriptor string. + */ + public abstract String userString(); } diff --git a/mcp/WidgetSimplewindow.java b/mcp/WidgetSimplewindow.java index 8cabb5d..4fe49f9 100644 --- a/mcp/WidgetSimplewindow.java +++ b/mcp/WidgetSimplewindow.java @@ -6,7 +6,6 @@ import de.matthiasmann.twl.Widget; import de.matthiasmann.twl.model.SimpleButtonModel; - /** * This widget is designed to make an easy base for menus. It include a * ScrollPane for the main widget, a title bar on top, and a button to go back @@ -15,149 +14,141 @@ * @author lahwran * @author ShaRose */ -public class WidgetSimplewindow extends Widget -{ - /** - * This is a reference to the back button, if created. - */ - public Button backButton = new Button(); - /** - * This is a reference to the row at the bottom that contains the back - * button. - */ - public WidgetSingleRow buttonBar = new WidgetSingleRow(0, 0); - /** - * This is the padding to use on each side of the main widget. - */ - public int hPadding = 30; - /** - * This is a reference to the main widget in the center. - */ - public Widget mainWidget = new Widget(); - /** - * This is a reference to the Label that acts as the title on top. - */ - public Label titleWidget = new Label(); - /** - * This is the padding on the bottom. Generally, this is to keep room - * between the bottom of the main widget's ScrollPane and the button bar. - */ - public int vBottomPadding = 40; - /** - * This is the padding on the top. Generally, this is to keep room between - * the top of the main widget's ScrollPane and the Label. - */ - public int vTopPadding = 30; - - /** - * This is a basic constructor. It sets the title as an empty string and it - * creates a new WidgetClassicTwocolumn for the main widget. - */ - public WidgetSimplewindow() - { - this(new WidgetClassicTwocolumn(), "", true); - } - - /** - * This is a basic constructor. It uses the passed widget as the main widget - * and sets the title as an empty string. - * - * @param w - * The widget to use in the center. - */ - public WidgetSimplewindow(Widget w) - { - this(w, "", true); - } - - /** - * This is the most common constructor. This keeps everything default, - * although you can pass null for the title and it will remove the title bar - * for you. - * - * @param w - * The widget to use in the center. - * @param s - * The title to show on top. If null, the title bar will not be - * created. - */ - public WidgetSimplewindow(Widget w, String s) - { - this(w, s, true); - } - - /** - * This is the more advanced constructor. This can also skip the back button - * creation. - * - * @param w - * The widget to use in the center. - * @param s - * The title to show on top. If null, the title bar will not be - * created. - * @param showbackButton - */ - public WidgetSimplewindow(Widget w, String s, Boolean showbackButton) - { - ScrollPane mainWidget_ = new ScrollPane(w); - mainWidget_.setFixed(ScrollPane.Fixed.HORIZONTAL); - mainWidget = mainWidget_; - setTheme(""); - init(showbackButton, s); - } - - /** - * Initializes the WidgetSimplewindow's widgets. This is used internally. - * - * @param showBack Whether or not to show the back button. - * @param titleText What to set the label text to. If null, it will not have a label. - */ - protected void init(Boolean showBack, String titleText) - { - if (titleText != null) - { - titleWidget = new Label(titleText); - add(titleWidget); - } - else - { - vTopPadding = 10; - } - if (showBack) - { - backButton = new Button(new SimpleButtonModel()); - backButton.getModel().addActionCallback(GuiApiHelper.backModAction.mergeAction(GuiApiHelper.clickModAction)); - backButton.setText("Back"); - buttonBar = new WidgetSingleRow(200, 20, backButton); - add(buttonBar); - } - else - { - vBottomPadding = 0; - } - add(mainWidget); - } - - @Override - public void layout() - { - if (buttonBar != null) - { - buttonBar.setSize(buttonBar.getPreferredWidth(), - buttonBar.getPreferredHeight()); - buttonBar.setPosition( - (getWidth() / 2) - (buttonBar.getPreferredWidth() / 2), - getHeight() - (buttonBar.getPreferredHeight() + 4)); - } - if (titleWidget != null) - { - titleWidget.setPosition( - getWidth() / 2 - titleWidget.computeTextWidth() / 2, 10); - titleWidget.setSize(titleWidget.computeTextWidth(), - titleWidget.computeTextHeight()); - } - mainWidget.setPosition(hPadding, vTopPadding); - mainWidget.setSize(getWidth() - (hPadding * 2), getHeight() - - (vTopPadding + vBottomPadding)); - } +public class WidgetSimplewindow extends Widget { + /** + * This is a reference to the back button, if created. + */ + public Button backButton = new Button(); + /** + * This is a reference to the row at the bottom that contains the back + * button. + */ + public WidgetSingleRow buttonBar = new WidgetSingleRow(0, 0); + /** + * This is the padding to use on each side of the main widget. + */ + public int hPadding = 30; + /** + * This is a reference to the main widget in the center. + */ + public Widget mainWidget = new Widget(); + /** + * This is a reference to the Label that acts as the title on top. + */ + public Label titleWidget = new Label(); + /** + * This is the padding on the bottom. Generally, this is to keep room + * between the bottom of the main widget's ScrollPane and the button bar. + */ + public int vBottomPadding = 40; + /** + * This is the padding on the top. Generally, this is to keep room between + * the top of the main widget's ScrollPane and the Label. + */ + public int vTopPadding = 30; + + /** + * This is a basic constructor. It sets the title as an empty string and it + * creates a new WidgetClassicTwocolumn for the main widget. + */ + public WidgetSimplewindow() { + this(new WidgetClassicTwocolumn(), "", true); + } + + /** + * This is a basic constructor. It uses the passed widget as the main widget + * and sets the title as an empty string. + * + * @param w + * The widget to use in the center. + */ + public WidgetSimplewindow(Widget w) { + this(w, "", true); + } + + /** + * This is the most common constructor. This keeps everything default, + * although you can pass null for the title and it will remove the title bar + * for you. + * + * @param w + * The widget to use in the center. + * @param s + * The title to show on top. If null, the title bar will not be + * created. + */ + public WidgetSimplewindow(Widget w, String s) { + this(w, s, true); + } + + /** + * This is the more advanced constructor. This can also skip the back button + * creation. + * + * @param w + * The widget to use in the center. + * @param s + * The title to show on top. If null, the title bar will not be + * created. + * @param showbackButton + */ + public WidgetSimplewindow(Widget w, String s, Boolean showbackButton) { + ScrollPane mainWidget_ = new ScrollPane(w); + mainWidget_.setFixed(ScrollPane.Fixed.HORIZONTAL); + mainWidget = mainWidget_; + setTheme(""); + init(showbackButton, s); + } + + /** + * Initializes the WidgetSimplewindow's widgets. This is used internally. + * + * @param showBack + * Whether or not to show the back button. + * @param titleText + * What to set the label text to. If null, it will not have a + * label. + */ + protected void init(Boolean showBack, String titleText) { + if (titleText != null) { + titleWidget = new Label(titleText); + add(titleWidget); + } else { + vTopPadding = 10; + } + if (showBack) { + backButton = new Button(new SimpleButtonModel()); + backButton.getModel().addActionCallback( + GuiApiHelper.backModAction + .mergeAction(GuiApiHelper.clickModAction)); + backButton.setText("Back"); + buttonBar = new WidgetSingleRow(200, 20, backButton); + add(buttonBar); + } else { + vBottomPadding = 0; + } + add(mainWidget); + } + + @Override + public void layout() { + if (buttonBar != null) { + buttonBar.setSize(buttonBar.getPreferredWidth(), + buttonBar.getPreferredHeight()); + buttonBar.setPosition( + (getWidth() / 2) - (buttonBar.getPreferredWidth() / 2), + getHeight() - (buttonBar.getPreferredHeight() + 4)); + } + if (titleWidget != null) { + titleWidget + .setPosition( + (getWidth() / 2) + - (titleWidget.computeTextWidth() / 2), 10); + titleWidget.setSize(titleWidget.computeTextWidth(), + titleWidget.computeTextHeight()); + } + mainWidget.setPosition(hPadding, vTopPadding); + mainWidget.setSize(getWidth() - (hPadding * 2), getHeight() + - (vTopPadding + vBottomPadding)); + } } diff --git a/mcp/WidgetSingleRow.java b/mcp/WidgetSingleRow.java index e1eaf61..0b97167 100644 --- a/mcp/WidgetSingleRow.java +++ b/mcp/WidgetSingleRow.java @@ -4,157 +4,134 @@ import de.matthiasmann.twl.Widget; - /** * This is a layout widget designed to arrange your widgets in a row. It * specifies height and width for each widget when you add them. * * @author lahwran */ -public class WidgetSingleRow extends Widget -{ - /** - * This is the default height of any new widgets. - */ - public int defaultHeight = 20; - /** - * This is the default width of any new widgets. - */ - public int defaultWidth = 150; - protected ArrayList heights = new ArrayList(); - protected ArrayList widgets = new ArrayList(); - protected ArrayList widths = new ArrayList(); - /** - * This defines the space between child widgets. - */ - public int xSpacing = 3; - - /** - * This creates a new WidgetSingleRow, specifying the default width and - * height for any new widgets, as well as adding any widgets you would like - * to add. - * - * @param defwidth - * The default width to use for any new widgets. - * @param defheight - * The default height to use for any new widgets. - * @param widgets - * The widgets you are adding. - */ - public WidgetSingleRow(int defwidth, int defheight, Widget... widgets) - { - setTheme(""); - defaultWidth = defwidth; - defaultHeight = defheight; - for (int i = 0; i < widgets.length; i++) - { - add(widgets[i]); - } - } - - @Override - public void add(Widget widget) - { - add(widget, defaultWidth, defaultHeight); - } - - /** - * This adds a new Widget with specified width and height. - * - * @param widget - * The widget you are adding. - * @param width - * The width of the widget you are adding. - * @param height - * The height of the widget you are adding. - */ - public void add(Widget widget, int width, int height) - { - widgets.add(widget); - heights.add(height); - widths.add(width); - super.add(widget); - } - - private int getHeight(int idx) - { - if (heights.get(idx) >= 0) - { - return heights.get(idx); - } - else - { - return widgets.get(idx).getPreferredHeight(); - } - } - - @Override - public int getPreferredHeight() - { - int maxheights = 0; - for (int i = 0; i < heights.size(); i++) - { - if (getHeight(i) > maxheights) - { - maxheights = getHeight(i); - } - } - return maxheights; - } - - @Override - public int getPreferredWidth() - { - int totalwidth = (widths.size() - 1) * xSpacing; - totalwidth = totalwidth >= 0 ? totalwidth : 0; - for (int i = 0; i < widths.size(); i++) - { - totalwidth += getWidth(i); - } - return totalwidth; - } - - private int getWidth(int idx) - { - if (widths.get(idx) >= 0) - { - return widths.get(idx); - } - else - { - return widgets.get(idx).getPreferredWidth(); - } - } - - @Override - public void layout() - { - int curXpos = 0; - for (int i = 0; i < widgets.size(); i++) - { - Widget w = widgets.get(i); - w.setPosition(curXpos + getX(), getY()); - w.setSize(getWidth(i), getHeight(i)); - curXpos += getWidth(i) + xSpacing; - } - } - - @Override - public Widget removeChild(int idx) - { - widgets.remove(idx); - heights.remove(idx); - widths.remove(idx); - return super.removeChild(idx); - } - - @Override - public boolean removeChild(Widget widget) - { - int idx = widgets.indexOf(widget); - widgets.remove(idx); - heights.remove(idx); - widths.remove(idx); - return super.removeChild(widget); - } +public class WidgetSingleRow extends Widget { + /** + * This is the default height of any new widgets. + */ + public int defaultHeight = 20; + /** + * This is the default width of any new widgets. + */ + public int defaultWidth = 150; + protected ArrayList heights = new ArrayList(); + protected ArrayList widgets = new ArrayList(); + protected ArrayList widths = new ArrayList(); + /** + * This defines the space between child widgets. + */ + public int xSpacing = 3; + + /** + * This creates a new WidgetSingleRow, specifying the default width and + * height for any new widgets, as well as adding any widgets you would like + * to add. + * + * @param defwidth + * The default width to use for any new widgets. + * @param defheight + * The default height to use for any new widgets. + * @param widgets + * The widgets you are adding. + */ + public WidgetSingleRow(int defwidth, int defheight, Widget... widgets) { + setTheme(""); + defaultWidth = defwidth; + defaultHeight = defheight; + for (int i = 0; i < widgets.length; i++) { + add(widgets[i]); + } + } + + @Override + public void add(Widget widget) { + add(widget, defaultWidth, defaultHeight); + } + + /** + * This adds a new Widget with specified width and height. + * + * @param widget + * The widget you are adding. + * @param width + * The width of the widget you are adding. + * @param height + * The height of the widget you are adding. + */ + public void add(Widget widget, int width, int height) { + widgets.add(widget); + heights.add(height); + widths.add(width); + super.add(widget); + } + + private int getHeight(int idx) { + if (heights.get(idx) >= 0) { + return heights.get(idx); + } else { + return widgets.get(idx).getPreferredHeight(); + } + } + + @Override + public int getPreferredHeight() { + int maxheights = 0; + for (int i = 0; i < heights.size(); i++) { + if (getHeight(i) > maxheights) { + maxheights = getHeight(i); + } + } + return maxheights; + } + + @Override + public int getPreferredWidth() { + int totalwidth = (widths.size() - 1) * xSpacing; + totalwidth = totalwidth >= 0 ? totalwidth : 0; + for (int i = 0; i < widths.size(); i++) { + totalwidth += getWidth(i); + } + return totalwidth; + } + + private int getWidth(int idx) { + if (widths.get(idx) >= 0) { + return widths.get(idx); + } else { + return widgets.get(idx).getPreferredWidth(); + } + } + + @Override + public void layout() { + int curXpos = 0; + for (int i = 0; i < widgets.size(); i++) { + Widget w = widgets.get(i); + w.setPosition(curXpos + getX(), getY()); + w.setSize(getWidth(i), getHeight(i)); + curXpos += getWidth(i) + xSpacing; + } + } + + @Override + public Widget removeChild(int idx) { + widgets.remove(idx); + heights.remove(idx); + widths.remove(idx); + return super.removeChild(idx); + } + + @Override + public boolean removeChild(Widget widget) { + int idx = widgets.indexOf(widget); + widgets.remove(idx); + heights.remove(idx); + widths.remove(idx); + return super.removeChild(widget); + } } diff --git a/mcp/WidgetSinglecolumn.java b/mcp/WidgetSinglecolumn.java index 2601b9c..e110e53 100644 --- a/mcp/WidgetSinglecolumn.java +++ b/mcp/WidgetSinglecolumn.java @@ -2,122 +2,99 @@ import de.matthiasmann.twl.Widget; - /** * This is a widget designed to arrange other widgets into a single column. * * @author lahwran * @author ShaRose */ -public class WidgetSinglecolumn extends WidgetClassicTwocolumn -{ - /** - * This creates the WidgetSinglecolumn with the specified Widgets. It - * chooses a default Width of 200. - * - * @param widgets - * The widgets to add. - */ - public WidgetSinglecolumn(Widget... widgets) - { - super(widgets); - childWidth = 200; - } - - @Override - public int getPreferredHeight() - { - int totalheight = verticalPadding; - for (int i = 0; i < getNumChildren(); ++i) - { - Widget widget = getChild(i); - int height = childDefaultHeight; - if (!overrideHeight) - { - height = widget.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(widget)) - { - Integer heightSet = heightOverrideExceptions.get(widget); - if (heightSet < 1) - { - height = widget.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - totalheight += height + defaultPadding; - } - return totalheight; - } - - @Override - public int getPreferredWidth() - { - // I can't see why we do a check here and not on TwoColoumn, and I don't really want to loop widthOverrideExceptions, so let's just remove this particular check, mmkay? - //return Math.max(getParent().getWidth(), childWidth); - return getParent().getWidth(); - } - - @Override - public void layout() - { - int totalheight = verticalPadding; - for (int i = 0; i < getNumChildren(); ++i) - { - Widget w = getChild(i); - int height = childDefaultHeight; - int width = childWidth; - if (!overrideHeight) - { - height = w.getPreferredHeight(); - } - if (heightOverrideExceptions.containsKey(w)) - { - Integer heightSet = heightOverrideExceptions.get(w); - if (heightSet < 1) - { - height = w.getPreferredHeight(); - heightSet = -heightSet; - if(heightSet != 0 && heightSet > height) - { - height = heightSet; - } - } - else - { - height = heightSet; - } - } - if (widthOverrideExceptions.containsKey(w)) - { - Integer widthSet = widthOverrideExceptions.get(w); - - if (widthSet < 1) - { - width = w.getPreferredWidth(); - widthSet = -widthSet; - if(widthSet != 0 && widthSet > width) - { - width = widthSet; - } - } - else - { - width = widthSet; - } - } - w.setSize(width, height); - w.setPosition(getX() + getWidth() / 2 - width / 2, getY() - + totalheight); - totalheight += height + defaultPadding; - } - } +public class WidgetSinglecolumn extends WidgetClassicTwocolumn { + /** + * This creates the WidgetSinglecolumn with the specified Widgets. It + * chooses a default Width of 200. + * + * @param widgets + * The widgets to add. + */ + public WidgetSinglecolumn(Widget... widgets) { + super(widgets); + childDefaultWidth = 200; + } + + @Override + public int getPreferredHeight() { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); ++i) { + Widget widget = getChild(i); + int height = childDefaultHeight; + if (!overrideHeight) { + height = widget.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(widget)) { + Integer heightSet = heightOverrideExceptions.get(widget); + if (heightSet < 1) { + height = widget.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + totalheight += height + defaultPadding; + } + return totalheight; + } + + @Override + public int getPreferredWidth() { + // I can't see why we do a check here and not on TwoColoumn, and I don't + // really want to loop widthOverrideExceptions, so let's just remove + // this particular check, mmkay? + // return Math.max(getParent().getWidth(), childWidth); + return getParent().getWidth(); + } + + @Override + public void layout() { + int totalheight = verticalPadding; + for (int i = 0; i < getNumChildren(); ++i) { + Widget w = getChild(i); + int height = childDefaultHeight; + int width = childDefaultWidth; + if (!overrideHeight) { + height = w.getPreferredHeight(); + } + if (heightOverrideExceptions.containsKey(w)) { + Integer heightSet = heightOverrideExceptions.get(w); + if (heightSet < 1) { + height = w.getPreferredHeight(); + heightSet = -heightSet; + if ((heightSet != 0) && (heightSet > height)) { + height = heightSet; + } + } else { + height = heightSet; + } + } + if (widthOverrideExceptions.containsKey(w)) { + Integer widthSet = widthOverrideExceptions.get(w); + + if (widthSet < 1) { + width = w.getPreferredWidth(); + widthSet = -widthSet; + if ((widthSet != 0) && (widthSet > width)) { + width = widthSet; + } + } else { + width = widthSet; + } + } + w.setSize(width, height); + w.setPosition((getX() + (getWidth() / 2)) - (width / 2), getY() + + totalheight); + totalheight += height + defaultPadding; + } + } } diff --git a/mcp/WidgetSlider.java b/mcp/WidgetSlider.java index 7713a5b..86917d2 100644 --- a/mcp/WidgetSlider.java +++ b/mcp/WidgetSlider.java @@ -3,30 +3,26 @@ import de.matthiasmann.twl.ValueAdjusterFloat; import de.matthiasmann.twl.model.FloatModel; - /** * This is a simple extension of ValueAdjusterFloat so that it always updates * the setting. Used internally. * * @author lahwran */ -public class WidgetSlider extends ValueAdjusterFloat -{ - /** - * This is the basic constructor. It just calls the ValueAdjusterFloat - * constructor. - * - * @param f - * The FloatModel to use. - */ - public WidgetSlider(FloatModel f) - { - super(f); - } - - @Override - public void startEdit() - { - cancelEdit(); - } +public class WidgetSlider extends ValueAdjusterFloat { + /** + * This is the basic constructor. It just calls the ValueAdjusterFloat + * constructor. + * + * @param f + * The FloatModel to use. + */ + public WidgetSlider(FloatModel f) { + super(f); + } + + @Override + public void startEdit() { + cancelEdit(); + } } diff --git a/mcp/WidgetText.java b/mcp/WidgetText.java index 43fb56b..17b5da1 100644 --- a/mcp/WidgetText.java +++ b/mcp/WidgetText.java @@ -5,7 +5,6 @@ import de.matthiasmann.twl.model.StringModel; import de.matthiasmann.twl.utils.CallbackSupport; - /** * This is the Widget for Text settings. It uses an EditField for the user to * edit, and a Label for the name. @@ -13,136 +12,120 @@ * @author lahwran * @author ShaRose */ -public class WidgetText extends WidgetSetting implements StringModel -{ - private Runnable[] callbacks; - /** - * The label that displays to the user what the nice name of this setting - * is. - */ - public Label displayLabel; - /** - * The EditField that the user actually changes the setting with. - */ - public EditField editField; - /** - * This is a control number to who and what can edit this setting. 0 means - * that both the SettingText and the user can edit. Below 0 means that only - * the user can edit: So resetting to default will not change the text the - * user sees. Over 0 means that the user can't edit the field, but if the - * SettingText updates, it will replace what the user sees. - */ - public int setmode = 0; - /** - * The reference to the SettingText that this WidgetText uses. - */ - public SettingText settingReference; - - /** - * This creates a new WidgetText using the SettingText and String provided. - * - * @param setting - * The backing setting. - * @param title - * The text that will show on the Label. If null, it will not - * have a label at all. - */ - public WidgetText(SettingText setting, String title) - { - super(title); - setTheme(""); - settingReference = setting; - settingReference.displayWidget = this; - editField = new EditField(); - add(editField); - if (title != null) - { - displayLabel = new Label(); - displayLabel.setText(String.format("%s: ", niceName)); - add(displayLabel); - } - editField.setModel(this); - update(); - } - - @Override - public void addCallback(Runnable callback) - { - callbacks = (CallbackSupport.addCallbackToList(callbacks, callback, - Runnable.class)); - } - - @Override - public String getValue() - { - return settingReference.get(); - } - - @Override - public void layout() - { - if (displayLabel != null) - { - displayLabel.setPosition(getX(), getY() + getHeight() / 2 - - displayLabel.computeTextHeight() / 2); - displayLabel.setSize(displayLabel.computeTextWidth(), - displayLabel.computeTextHeight()); - editField.setPosition(getX() + displayLabel.computeTextWidth(), - getY()); - editField.setSize(getWidth() - displayLabel.computeTextWidth(), - getHeight()); - } - else - { - editField.setPosition(getX(), getY()); - editField.setSize(getWidth(), getHeight()); - } - } - - @Override - public void removeCallback(Runnable callback) - { - callbacks = (CallbackSupport - .removeCallbackFromList(callbacks, callback)); - } - - @Override - public void setValue(String _value) - { - GuiModScreen.clicksound(); - ModSettings.dbgout(String.format("setvalue %s", editField.getText())); - if (setmode <= 0) - { - setmode = -1; - settingReference.set(editField.getText(), - ModSettingScreen.guiContext); - setmode = 0; - } - CallbackSupport.fireCallbacks(callbacks); - } - - @Override - public void update() - { - ModSettings.dbgout("update"); - if (displayLabel != null) - { - displayLabel.setText(String.format("%s: ", niceName)); - } - if (setmode >= 0) - { - setmode = 1; - editField - .setText(settingReference.get(ModSettingScreen.guiContext)); - setmode = 0; - } - ModSettings.dbgout(String.format("update %s", editField.getText())); - } - - @Override - public String userString() - { - return String.format("%s: %s", niceName, - settingReference.get(ModSettingScreen.guiContext)); - } +public class WidgetText extends WidgetSetting implements StringModel { + private Runnable[] callbacks; + /** + * The label that displays to the user what the nice name of this setting + * is. + */ + public Label displayLabel; + /** + * The EditField that the user actually changes the setting with. + */ + public EditField editField; + /** + * This is a control number to who and what can edit this setting. 0 means + * that both the SettingText and the user can edit. Below 0 means that only + * the user can edit: So resetting to default will not change the text the + * user sees. Over 0 means that the user can't edit the field, but if the + * SettingText updates, it will replace what the user sees. + */ + public int setmode = 0; + /** + * The reference to the SettingText that this WidgetText uses. + */ + public SettingText settingReference; + + /** + * This creates a new WidgetText using the SettingText and String provided. + * + * @param setting + * The backing setting. + * @param title + * The text that will show on the Label. If null, it will not + * have a label at all. + */ + public WidgetText(SettingText setting, String title) { + super(title); + setTheme(""); + settingReference = setting; + settingReference.displayWidget = this; + editField = new EditField(); + add(editField); + if (title != null) { + displayLabel = new Label(); + displayLabel.setText(String.format("%s: ", niceName)); + add(displayLabel); + } + editField.setModel(this); + update(); + } + + @Override + public void addCallback(Runnable callback) { + callbacks = (CallbackSupport.addCallbackToList(callbacks, callback, + Runnable.class)); + } + + @Override + public String getValue() { + return settingReference.get(); + } + + @Override + public void layout() { + if (displayLabel != null) { + displayLabel.setPosition(getX(), (getY() + (getHeight() / 2)) + - (displayLabel.computeTextHeight() / 2)); + displayLabel.setSize(displayLabel.computeTextWidth(), + displayLabel.computeTextHeight()); + editField.setPosition(getX() + displayLabel.computeTextWidth(), + getY()); + editField.setSize(getWidth() - displayLabel.computeTextWidth(), + getHeight()); + } else { + editField.setPosition(getX(), getY()); + editField.setSize(getWidth(), getHeight()); + } + } + + @Override + public void removeCallback(Runnable callback) { + callbacks = (CallbackSupport + .removeCallbackFromList(callbacks, callback)); + } + + @Override + public void setValue(String _value) { + GuiModScreen.clicksound(); + ModSettings.dbgout(String.format("setvalue %s", editField.getText())); + if (setmode <= 0) { + setmode = -1; + settingReference.set(editField.getText(), + ModSettingScreen.guiContext); + setmode = 0; + } + CallbackSupport.fireCallbacks(callbacks); + } + + @Override + public void update() { + ModSettings.dbgout("update"); + if (displayLabel != null) { + displayLabel.setText(String.format("%s: ", niceName)); + } + if (setmode >= 0) { + setmode = 1; + editField + .setText(settingReference.get(ModSettingScreen.guiContext)); + setmode = 0; + } + ModSettings.dbgout(String.format("update %s", editField.getText())); + } + + @Override + public String userString() { + return String.format("%s: %s", niceName, + settingReference.get(ModSettingScreen.guiContext)); + } } diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/mod_GuiApiBasicExample.java index 02927f8..ba5755d 100644 --- a/mcp/mod_GuiApiBasicExample.java +++ b/mcp/mod_GuiApiBasicExample.java @@ -16,10 +16,13 @@ public class mod_GuiApiBasicExample extends BaseMod { /** The settings. */ public ModSettings mySettings; - /** - * Instantiates a new mod_GuiApiBasicExample. - */ - public mod_GuiApiBasicExample() { + @Override + public String getVersion() { + return "1.1"; + } + + @Override + public void load() { // First, create the settings class. The string in question is the // 'backend' name, usually the actual mod class name. mySettings = new ModSettings("mod_GuiApiBasicExample"); @@ -71,8 +74,6 @@ public mod_GuiApiBasicExample() { "resetAll", mySettings, true)); // And finally, don't forget to load any settings you saved earlier! mySettings.load(); - myModScreen.theWidget.insertChild(GuiApiHelper.makeButton("Test!", - GuiApiHelper.clickModAction, false), 1); } /** @@ -133,9 +134,4 @@ public void ShowAllTheSettings() { "My Current Settings", displayTextBuilder.toString(), "OK, Go back to the settings now.", false)); } - - @Override - public String Version() { - return "1.0"; - } } diff --git a/mcp/mod_GuiApiIntermediateExample.java b/mcp/mod_GuiApiIntermediateExample.java index 29c8171..71cbf29 100644 --- a/mcp/mod_GuiApiIntermediateExample.java +++ b/mcp/mod_GuiApiIntermediateExample.java @@ -3,7 +3,6 @@ import de.matthiasmann.twl.TextArea; import de.matthiasmann.twl.Widget; - /** * This is the INTERMEDIATE example of GuiAPI usage. We are going to do the more * correct, but slightly more complex, way of retrieving settings, learn about @@ -14,243 +13,237 @@ * * @author ShaRose */ -public class mod_GuiApiIntermediateExample extends BaseMod -{ - /** - * This is a method designed to update the text area, depending on what kind of setting is passed. Please view the source code comments for more. - * - * @param textArea The textarea to update. - * @param setting The setting to get info from. This particular method supports SettingInt, SettingFloat, and SettingText. - */ - private static void updateTextArea(TextArea textArea, - @SuppressWarnings("rawtypes") Setting setting) - { - String text = ""; - // Instead of making different method for each one, We'll just check - // what type of setting each is, place the text you want in the text - // variable, and then set the TextArea. - if (setting instanceof SettingInt) - { - SettingInt settingint = (SettingInt) setting; - text = (settingint.get() - settingint.minimumValue) - / (float) (settingint.maximumValue - settingint.minimumValue) * 100 + "%"; - } - if (setting instanceof SettingFloat) - { - SettingFloat settingfloat = (SettingFloat) setting; - float val = (settingfloat.get() - settingfloat.minimumValue) - / (settingfloat.maximumValue - settingfloat.minimumValue); - if (val < 0) - { - val = 0; - } - text = val * 100 + "%"; - } - if (setting instanceof SettingText) - { - SettingText settingtext = (SettingText) setting; - text = settingtext.get(); - } - // Here's how you normally would set the TextArea's text, but we are - // going to use one of the helpers for it. It's still one line, but this - // way is a bit messy. - // ((SimpleTextAreaModel) textArea.getModel()).setText(text, false); - // Here's the cleaner way to do it, and this also works if you set it to - // use HTML mode. - GuiApiHelper.setTextAreaText(textArea, text); - } - - /** The mod screen. */ - public ModSettingScreen myModScreen; - - /** The settings. */ - public ModSettings mySettings; - - /** The setting boolean d. */ - public SettingBoolean settingBooleanD; - - /** The setting boolean e. */ - public SettingBoolean settingBooleanE; - - /** The setting float b. */ - public SettingFloat settingFloatB; - - /** The setting int a. */ - public SettingInt settingIntA; - - /** The setting multi c. */ - public SettingMulti settingMultiC; - - /** The setting text f. */ - public SettingText settingTextF; - - /** The subscreen for booleans. */ - public WidgetSimplewindow subscreenBooleans; - - /** The subscreen for numberics. */ - public WidgetSimplewindow subscreenNumberics; - - /** The subscreen for others. */ - public WidgetSimplewindow subscreenOthers; - - /** - * Instantiates a new mod_GuiApiIntermediateExample. - */ - public mod_GuiApiIntermediateExample() - { - // We need to set up our settings and modscreen, so let's do that. - mySettings = new ModSettings("mod_GuiApiIntermediateExample"); - myModScreen = new ModSettingScreen("GuiAPI Intermediate Example"); - // Now we are going to start setting up our subscreens. I want it in one - // column, so I'm using the WidgetSinglecolumn class. If you want to use - // the normal two column version, use WidgetClassicTwocolumn instead. - WidgetSinglecolumn numbericBaseWidget = new WidgetSinglecolumn(); - // Note that this time we are saving the SettingInt that is returned. - // This is a faster way to get settings than the easy way shown in the - // basic example, but it takes up more space for field declarations. As - // well note instead of adding it to the modscreen, we are telling it to - // use the WidgetSinglecolumn we made just previous. - settingIntA = mySettings.addSetting(numbericBaseWidget, - "Nice Name for Int A", "backendIntA", 0, -100, 100); - // We are also going to have a TextArea display the percentage of what's - // selected. I'm leave the text blank for now, we will update it after - // we load the saved settings. As well, the reason for the false at the - // end is because we are just using simple text mode. If you want a - // TextBox to render HTML, set that to true. - TextArea textAreaA = GuiApiHelper.makeTextArea("", false); - // Add it to the subscreen we are making as well. - numbericBaseWidget.add(textAreaA); - // This is how you set up a callback when the value is changed. This - // code creates a ModAction that calls the static updateTextArea method - // in this class. It has two arguments: a TextArea and a Setting, so we - // specify that. Since there's no way for it to specify that kind of - // argument (The callback has no arguments to send), we are also going - // to tell it to use the references to the textarea we created for this - // setting, and the setting itself. After we create the setting, we use - // the setting to get a reference to the widget that is actually - // displayed, and add a callback. - settingIntA.displayWidget.addCallback(new ModAction( - mod_GuiApiIntermediateExample.class, "updateTextArea", - "Callback for TextArea A", TextArea.class, Setting.class) - .setDefaultArguments(textAreaA, settingIntA)); - // You should already know what this is. - settingFloatB = mySettings.addSetting(numbericBaseWidget, - "Nice Name for Float B", "backendFloatB", 0f, -2.0f, 0.01f, - 2.0f); - TextArea textAreaB = GuiApiHelper.makeTextArea("", false); - numbericBaseWidget.add(textAreaB); - // And again, this is much the same. Note that for both of these - // ModActions, we specifically set a 'name' for it, so in case anything - // happens and an exception is thrown, you will see 'Callback for - // TextArea B' in the stack trace. This is useful for debugging, as - // usually you won't see what the method that actually crashed is, but - // now you can see what method it was, where the ModAction was created, - // etc. As long as you set your names that is. - settingFloatB.displayWidget.addCallback(new ModAction( - mod_GuiApiIntermediateExample.class, "updateTextArea", - "Callback for TextArea B", TextArea.class, Setting.class) - .setDefaultArguments(textAreaB, settingFloatB)); - // Now we are going to merge the reset ModActions for the two 'numberic' - // settings. - ModAction mergedResetNumberics = new ModAction(settingIntA, "reset") - .mergeAction(new ModAction(settingFloatB, "reset")); - // And add a button for it to the subscreen. - numbericBaseWidget.add(GuiApiHelper.makeButton("Reset Numberic Values", - mergedResetNumberics, true)); - // Now we finish creating the subscreen. The WidgetSimplewindow sets up - // a title bar on top, and a button bar to go back on the bottom. There - // is an option to disable the back button as well. - subscreenNumberics = new WidgetSimplewindow(numbericBaseWidget, - "Numberic Settings"); - // And now create a Button to open your new SubScreen. We are going to - // use use the makeButton overloads this time, as we don't need to merge - // any ModActions. This one calls the static GuiModScreen.show method, - // which takes a Widget class as an parameter. When the button is - // clicked, it will call that method using subscreenNumberics as the - // argument. - myModScreen.append(GuiApiHelper.makeButton("Open Numberic Settings", - "show", GuiModScreen.class, true, new Class[] - { Widget.class }, subscreenNumberics)); - // And now we will do 2 other subscreens. There won't be anything - // special for these, so you should be able to follow along with what I - // am doing easily. - WidgetSinglecolumn booleanBaseWidget = new WidgetSinglecolumn(); - settingBooleanD = mySettings.addSetting(booleanBaseWidget, - "Nice Name for Boolean D", "backendBooleanD", true); - settingBooleanE = mySettings.addSetting(booleanBaseWidget, - "Nice Name for Boolean E", "backendBooleanE", false, "Yes!", - "Noo!"); - ModAction mergedResetBooleans = new ModAction(settingBooleanD, "reset") - .mergeAction(new ModAction(settingBooleanE, "reset")); - booleanBaseWidget.add(GuiApiHelper.makeButton("Reset Boolean Values", - mergedResetBooleans, true)); - subscreenBooleans = new WidgetSimplewindow(booleanBaseWidget, - "Boolean Settings"); - myModScreen.append(GuiApiHelper.makeButton("Open Boolean Settings", - "show", GuiModScreen.class, true, new Class[] - { Widget.class }, subscreenBooleans)); - WidgetSinglecolumn otherBaseWidget = new WidgetSinglecolumn(); - settingMultiC = mySettings.addSetting(otherBaseWidget, - "Nice Name for Multi C", "backendMultiC", 0, "Option A", - "Option B", "Option C", "Option D", "Option E", "Option F"); - // Actually, let's do something nice for the text widget. It's a bit - // small to see when editing, so we'll add a TextArea below it that - // shows what you have. - settingTextF = mySettings.addSetting(otherBaseWidget, - "Nice Name for Text F", "backendTextF", - "This is the Default Value"); - TextArea textAreaF = GuiApiHelper.makeTextArea("", false); - otherBaseWidget.add(textAreaF); - // This line of code adds the TextArea to the override list so it won't - // be overridden to anything. Normally, WidgetClassicTwocolumn and - // WidgetSinglecolumn override the height and width of all widgets. - // There's a boolean to not do that for everything, but if you do, it - // makes buttons thin and ugly looking. So, we are going to add it - // specifically so it doesn't override the height. As well, you can use - // this to specify a height to override to, by changing the integer. - otherBaseWidget.heightOverrideExceptions.put(textAreaF, 0); - // And we'll add the callback. It's pretty much the same as the numberic - // callbacks, since in this case we are using a single method for each. - settingTextF.displayWidget.addCallback(new ModAction( - mod_GuiApiIntermediateExample.class, "updateTextArea", - "Callback for TextArea F", TextArea.class, Setting.class) - .setDefaultArguments(textAreaF, settingTextF)); - ModAction mergedResetOthers = new ModAction(settingMultiC, "reset") - .mergeAction(new ModAction(settingTextF, "reset")); - otherBaseWidget.add(GuiApiHelper.makeButton("Reset Other Values", - mergedResetOthers, true)); - subscreenOthers = new WidgetSimplewindow(otherBaseWidget, - "Other Settings"); - myModScreen.append(GuiApiHelper.makeButton("Open Other Settings", - "show", GuiModScreen.class, true, new Class[] - { Widget.class }, subscreenOthers)); - myModScreen.append(GuiApiHelper.makeButton("Reset ALL settings", - "resetAll", mySettings, true)); - // And as well, we'll use GuiApiHelper.createChoiceMenu for a reset menu - // as well. - Widget choiceMenu = GuiApiHelper - .createChoiceMenu( - "Which settings would you like to reset? You can pick to reset any of the groups from here, or you can also reset all the settings as once.", - true, true, "Reset the Numberic Settings.", - mergedResetNumberics, "Reset the Boolean Settings.", - mergedResetBooleans, "Reset the Other settings.", - mergedResetOthers, "Reset everything.", new ModAction( - mySettings, "resetAll")); - // And a button to show the choice menu. - myModScreen.append(GuiApiHelper.makeButton("Reset Settings with Menu", - "show", GuiModScreen.class, true, new Class[] - { Widget.class }, choiceMenu)); - mySettings.load(); - // Finally, make sure all of those TextAreas are updated with the loaded - // values. - mod_GuiApiIntermediateExample.updateTextArea(textAreaA, settingIntA); - mod_GuiApiIntermediateExample.updateTextArea(textAreaB, settingFloatB); - mod_GuiApiIntermediateExample.updateTextArea(textAreaF, settingTextF); - } - - @Override - public String Version() - { - return "1.0"; - } +public class mod_GuiApiIntermediateExample extends BaseMod { + /** + * This is a method designed to update the text area, depending on what kind + * of setting is passed. Please view the source code comments for more. + * + * @param textArea + * The textarea to update. + * @param setting + * The setting to get info from. This particular method supports + * SettingInt, SettingFloat, and SettingText. + */ + private static void updateTextArea(TextArea textArea, + @SuppressWarnings("rawtypes") Setting setting) { + String text = ""; + // Instead of making different method for each one, We'll just check + // what type of setting each is, place the text you want in the text + // variable, and then set the TextArea. + if (setting instanceof SettingInt) { + SettingInt settingint = (SettingInt) setting; + text = (((settingint.get() - settingint.minimumValue) / (float) (settingint.maximumValue - settingint.minimumValue)) * 100) + + "%"; + } + if (setting instanceof SettingFloat) { + SettingFloat settingfloat = (SettingFloat) setting; + float val = (settingfloat.get() - settingfloat.minimumValue) + / (settingfloat.maximumValue - settingfloat.minimumValue); + if (val < 0) { + val = 0; + } + text = (val * 100) + "%"; + } + if (setting instanceof SettingText) { + SettingText settingtext = (SettingText) setting; + text = settingtext.get(); + } + // Here's how you normally would set the TextArea's text, but we are + // going to use one of the helpers for it. It's still one line, but this + // way is a bit messy. + // ((SimpleTextAreaModel) textArea.getModel()).setText(text, false); + // Here's the cleaner way to do it, and this also works if you set it to + // use HTML mode. + GuiApiHelper.setTextAreaText(textArea, text); + } + + /** The mod screen. */ + public ModSettingScreen myModScreen; + + /** The settings. */ + public ModSettings mySettings; + + /** The setting boolean d. */ + public SettingBoolean settingBooleanD; + + /** The setting boolean e. */ + public SettingBoolean settingBooleanE; + + /** The setting float b. */ + public SettingFloat settingFloatB; + + /** The setting int a. */ + public SettingInt settingIntA; + + /** The setting multi c. */ + public SettingMulti settingMultiC; + + /** The setting text f. */ + public SettingText settingTextF; + + /** The subscreen for booleans. */ + public WidgetSimplewindow subscreenBooleans; + + /** The subscreen for numberics. */ + public WidgetSimplewindow subscreenNumberics; + + /** The subscreen for others. */ + public WidgetSimplewindow subscreenOthers; + + @Override + public String getVersion() { + return "1.0"; + } + + @Override + public void load() { + // We need to set up our settings and modscreen, so let's do that. + mySettings = new ModSettings("mod_GuiApiIntermediateExample"); + myModScreen = new ModSettingScreen("GuiAPI Intermediate Example"); + // Now we are going to start setting up our subscreens. I want it in one + // column, so I'm using the WidgetSinglecolumn class. If you want to use + // the normal two column version, use WidgetClassicTwocolumn instead. + WidgetSinglecolumn numbericBaseWidget = new WidgetSinglecolumn(); + // Note that this time we are saving the SettingInt that is returned. + // This is a faster way to get settings than the easy way shown in the + // basic example, but it takes up more space for field declarations. As + // well note instead of adding it to the modscreen, we are telling it to + // use the WidgetSinglecolumn we made just previous. + settingIntA = mySettings.addSetting(numbericBaseWidget, + "Nice Name for Int A", "backendIntA", 0, -100, 100); + // We are also going to have a TextArea display the percentage of what's + // selected. I'm leave the text blank for now, we will update it after + // we load the saved settings. As well, the reason for the false at the + // end is because we are just using simple text mode. If you want a + // TextBox to render HTML, set that to true. + TextArea textAreaA = GuiApiHelper.makeTextArea("", false); + // Add it to the subscreen we are making as well. + numbericBaseWidget.add(textAreaA); + // This is how you set up a callback when the value is changed. This + // code creates a ModAction that calls the static updateTextArea method + // in this class. It has two arguments: a TextArea and a Setting, so we + // specify that. Since there's no way for it to specify that kind of + // argument (The callback has no arguments to send), we are also going + // to tell it to use the references to the textarea we created for this + // setting, and the setting itself. After we create the setting, we use + // the setting to get a reference to the widget that is actually + // displayed, and add a callback. + settingIntA.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea A", TextArea.class, Setting.class) + .setDefaultArguments(textAreaA, settingIntA)); + // You should already know what this is. + settingFloatB = mySettings.addSetting(numbericBaseWidget, + "Nice Name for Float B", "backendFloatB", 0f, -2.0f, 0.01f, + 2.0f); + TextArea textAreaB = GuiApiHelper.makeTextArea("", false); + numbericBaseWidget.add(textAreaB); + // And again, this is much the same. Note that for both of these + // ModActions, we specifically set a 'name' for it, so in case anything + // happens and an exception is thrown, you will see 'Callback for + // TextArea B' in the stack trace. This is useful for debugging, as + // usually you won't see what the method that actually crashed is, but + // now you can see what method it was, where the ModAction was created, + // etc. As long as you set your names that is. + settingFloatB.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea B", TextArea.class, Setting.class) + .setDefaultArguments(textAreaB, settingFloatB)); + // Now we are going to merge the reset ModActions for the two 'numberic' + // settings. + ModAction mergedResetNumberics = new ModAction(settingIntA, "reset") + .mergeAction(new ModAction(settingFloatB, "reset")); + // And add a button for it to the subscreen. + numbericBaseWidget.add(GuiApiHelper.makeButton("Reset Numberic Values", + mergedResetNumberics, true)); + // Now we finish creating the subscreen. The WidgetSimplewindow sets up + // a title bar on top, and a button bar to go back on the bottom. There + // is an option to disable the back button as well. + subscreenNumberics = new WidgetSimplewindow(numbericBaseWidget, + "Numberic Settings"); + // And now create a Button to open your new SubScreen. We are going to + // use use the makeButton overloads this time, as we don't need to merge + // any ModActions. This one calls the static GuiModScreen.show method, + // which takes a Widget class as an parameter. When the button is + // clicked, it will call that method using subscreenNumberics as the + // argument. + myModScreen.append(GuiApiHelper.makeButton("Open Numberic Settings", + "show", GuiModScreen.class, true, new Class[] { Widget.class }, + subscreenNumberics)); + // And now we will do 2 other subscreens. There won't be anything + // special for these, so you should be able to follow along with what I + // am doing easily. + WidgetSinglecolumn booleanBaseWidget = new WidgetSinglecolumn(); + settingBooleanD = mySettings.addSetting(booleanBaseWidget, + "Nice Name for Boolean D", "backendBooleanD", true); + settingBooleanE = mySettings.addSetting(booleanBaseWidget, + "Nice Name for Boolean E", "backendBooleanE", false, "Yes!", + "Noo!"); + ModAction mergedResetBooleans = new ModAction(settingBooleanD, "reset") + .mergeAction(new ModAction(settingBooleanE, "reset")); + booleanBaseWidget.add(GuiApiHelper.makeButton("Reset Boolean Values", + mergedResetBooleans, true)); + subscreenBooleans = new WidgetSimplewindow(booleanBaseWidget, + "Boolean Settings"); + myModScreen.append(GuiApiHelper.makeButton("Open Boolean Settings", + "show", GuiModScreen.class, true, new Class[] { Widget.class }, + subscreenBooleans)); + WidgetSinglecolumn otherBaseWidget = new WidgetSinglecolumn(); + settingMultiC = mySettings.addSetting(otherBaseWidget, + "Nice Name for Multi C", "backendMultiC", 0, "Option A", + "Option B", "Option C", "Option D", "Option E", "Option F"); + // Actually, let's do something nice for the text widget. It's a bit + // small to see when editing, so we'll add a TextArea below it that + // shows what you have. + settingTextF = mySettings.addSetting(otherBaseWidget, + "Nice Name for Text F", "backendTextF", + "This is the Default Value"); + TextArea textAreaF = GuiApiHelper.makeTextArea("", false); + otherBaseWidget.add(textAreaF); + // This line of code adds the TextArea to the override list so it won't + // be overridden to anything. Normally, WidgetClassicTwocolumn and + // WidgetSinglecolumn override the height and width of all widgets. + // There's a boolean to not do that for everything, but if you do, it + // makes buttons thin and ugly looking. So, we are going to add it + // specifically so it doesn't override the height. As well, you can use + // this to specify a height to override to, by changing the integer. + otherBaseWidget.heightOverrideExceptions.put(textAreaF, 0); + // And we'll add the callback. It's pretty much the same as the numberic + // callbacks, since in this case we are using a single method for each. + settingTextF.displayWidget.addCallback(new ModAction( + mod_GuiApiIntermediateExample.class, "updateTextArea", + "Callback for TextArea F", TextArea.class, Setting.class) + .setDefaultArguments(textAreaF, settingTextF)); + ModAction mergedResetOthers = new ModAction(settingMultiC, "reset") + .mergeAction(new ModAction(settingTextF, "reset")); + otherBaseWidget.add(GuiApiHelper.makeButton("Reset Other Values", + mergedResetOthers, true)); + subscreenOthers = new WidgetSimplewindow(otherBaseWidget, + "Other Settings"); + myModScreen.append(GuiApiHelper.makeButton("Open Other Settings", + "show", GuiModScreen.class, true, new Class[] { Widget.class }, + subscreenOthers)); + myModScreen.append(GuiApiHelper.makeButton("Reset ALL settings", + "resetAll", mySettings, true)); + // And as well, we'll use GuiApiHelper.createChoiceMenu for a reset menu + // as well. + Widget choiceMenu = GuiApiHelper + .createChoiceMenu( + "Which settings would you like to reset? You can pick to reset any of the groups from here, or you can also reset all the settings as once.", + true, true, "Reset the Numberic Settings.", + mergedResetNumberics, "Reset the Boolean Settings.", + mergedResetBooleans, "Reset the Other settings.", + mergedResetOthers, "Reset everything.", new ModAction( + mySettings, "resetAll")); + // And a button to show the choice menu. + myModScreen.append(GuiApiHelper.makeButton("Reset Settings with Menu", + "show", GuiModScreen.class, true, new Class[] { Widget.class }, + choiceMenu)); + mySettings.load(); + // Finally, make sure all of those TextAreas are updated with the loaded + // values. + mod_GuiApiIntermediateExample.updateTextArea(textAreaA, settingIntA); + mod_GuiApiIntermediateExample.updateTextArea(textAreaB, settingFloatB); + mod_GuiApiIntermediateExample.updateTextArea(textAreaF, settingTextF); + } } diff --git a/mcp/mod_GuiApiTWLExamples.java b/mcp/mod_GuiApiTWLExamples.java index 69d8fe1..dc45d0d 100644 --- a/mcp/mod_GuiApiTWLExamples.java +++ b/mcp/mod_GuiApiTWLExamples.java @@ -47,7 +47,13 @@ private static void showSelectedListboxOption(SettingList setting) { private WidgetSimplewindow screenListBoxTest; - public mod_GuiApiTWLExamples() { + @Override + public String getVersion() { + return "1.0"; + } + + @Override + public void load() { modSettings = new ModSettings("mod_GuiApiTWLExamples"); SetUpColouringWindow(); @@ -59,16 +65,24 @@ public mod_GuiApiTWLExamples() { private void SetUpColouringWindow() { colorFontHelper = new GuiApiFontHelper(); WidgetSinglecolumn widgetSingleColumn = new WidgetSinglecolumn(); - widgetSingleColumn.childWidth = 300; + widgetSingleColumn.childDefaultWidth = 300; colorLabel = new Label("This is an example of coloring a label's Test."); widgetSingleColumn.add(colorLabel); colorFontHelper.setFont(colorLabel); - colorProgressBar = new ProgressBar(); colorProgressBar.setValue(0.7f); - // colorProgressBar.setBackground(GuiWidgetScreen.instance.theme.getImage("progress")); - // colorProgressBar.setProgressImage((GuiWidgetScreen.instance.theme.getImage("progress-white")).createTintedVersion(Color.GREEN)); + colorProgressBar.setTheme("/progressbar"); + // This sets the theme manually. I'm not currently sure why but unless + // you set this it won't actually render the progress bar part, only the + // text. You can use this to change it somewhat though. The available + // themes for this are: + // /progressbar - The standard. + // /progressbar-white - Changes the progress image to a plain white + // area. + // /progressbar-noback - Removes the background image. + // /progressbar-white-noback - Changes the progress image to a plain + // white area and removes the background image. colorProgressBar.setText("Coloring Progressbar!"); widgetSingleColumn.add(colorProgressBar); colorFontHelper.setFont(colorProgressBar); @@ -100,6 +114,8 @@ private void SetUpListBox() { listBoxSettingTest = modSettings.addSetting(widgetSingleColumn, "ListBox Test One", "listboxTest1", "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6"); + ((WidgetList) listBoxSettingTest.displayWidget).listBox + .setTheme("/listbox-noback"); widgetSingleColumn.heightOverrideExceptions.put( listBoxSettingTest.displayWidget, 140); @@ -147,9 +163,4 @@ private void updateColors() { colorFontHelper.setColor(FontStates.normal, colorSelector.getColor()); } - @Override - public String Version() { - return "1.0"; - } - } From bf329c9a4b741359d6b48e865792f0764c9a78d7 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 30 Dec 2011 15:04:56 -0330 Subject: [PATCH 24/49] Added WidgetSimplewindow.scrollPane. Changed WidgetSimplewindow.mainWidget to actually be the passed widget instead of the scrollpane. Added WidgetItem2DRender (Still a work in progress). --- mcp/WidgetItem2DRender.java | 189 ++++++++++++++++++++++++++++++++++++ mcp/WidgetSimplewindow.java | 18 ++-- 2 files changed, 201 insertions(+), 6 deletions(-) create mode 100644 mcp/WidgetItem2DRender.java diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java new file mode 100644 index 0000000..a1c4ce9 --- /dev/null +++ b/mcp/WidgetItem2DRender.java @@ -0,0 +1,189 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +import org.lwjgl.opengl.GL11; + +import de.matthiasmann.twl.GUI; +import de.matthiasmann.twl.Widget; + +/** + * This is a widget designed to render Minecraft objects. It has a MINIMUM size + * of 16X16 by default. It also (Again, by default) renders a background and + * border as per the theme for progressbars. This can be changed via setTheme, + * see mod_GuiApiTWLExamples.SetUpColouringWindow comments for details. + * + * @author Shawn + * + */ +public class WidgetItem2DRender extends Widget { + + private static RenderItem renderer = new RenderItem(); + + private int renderID; + + private int scaleType = 0; + + /** + * This sets up the Widget to render no object (Air, specifically). + */ + public WidgetItem2DRender() { + this(0); + } + + /** + * This makes the widget render the Item that is in the slot dictated by + * renderID. Note, if that ID slot is empty it will render as if you pass 0. + * + * @param renderID + */ + public WidgetItem2DRender(int renderID) { + setMinSize(16, 16); + setTheme("/progressbar"); + setRenderID(renderID); + } + + /** + * This gets the current ID this Widget is supposed to render. + * + * @return The current ID to render. + */ + public int getRenderID() { + return renderID; + } + + /** + * This returns an integer that specifies what kind of Scale type it is. + * + * @return The scale type. + */ + public int getScaleType() { + return scaleType; + } + + @Override + protected void paintWidget(GUI gui) { + + Minecraft minecraft = ModSettings.getMcinst(); + + int x = getX(); + int y = getY(); + float scalex = 1f; + float scaley = 1f; + + int maxWidth = getInnerWidth(); + int maxHeight = getInnerHeight(); + + int scaleType = getScaleType(); + + if ((scaleType == -1) && ((maxWidth < 16) || (maxHeight < 16))) { + scaleType = 0; + } + + switch (scaleType) { + case 0: { + // largest square + int size = 0; + if (maxWidth > maxHeight) { + size = maxHeight; + } else { + size = maxWidth; + } + + x += ((maxWidth - size) / 2); + y += ((maxHeight - size) / 2); + + scalex = size / 16f; + scaley = scalex; + x /= scalex; + y /= scaley; + break; + } + + case -1: { + // default size in middle + int size = maxWidth - 16; + x += size / 2; + + size = maxHeight - 16; + y += size / 2; + break; + } + + case 1: { + // fill / stretch + scalex = maxWidth / 16f; + scaley = maxHeight / 16f; + x /= scalex; + y /= scaley; + break; + } + + default: + throw new IndexOutOfBoundsException( + "Scale Type is out of bounds! This should never happen!"); + } + + if ((minecraft == null) || (Item.itemsList[getRenderID()] == null)) { + // draw black or something? Maybe NULL? + return; + } + + GL11.glPushMatrix(); + GL11.glDisable(3042 /* GL_BLEND *//* GL_BLEND */); + GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); + RenderHelper.enableStandardItemLighting(); + GL11.glScalef(scalex, scaley, 1); + ItemStack stack = new ItemStack(getRenderID(), 1, 0); + WidgetItem2DRender.renderer.renderItemIntoGUI(minecraft.fontRenderer, + minecraft.renderEngine, stack, x, y); + WidgetItem2DRender.renderer.renderItemOverlayIntoGUI( + minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + + RenderHelper.disableStandardItemLighting(); + GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); + GL11.glPopMatrix(); + } + + /** + * This sets the current ID to render. This checks bounds. + * + * @param renderID + * The ID you want this widget to render. + */ + public void setRenderID(int renderID) { + if ((renderID >= Item.itemsList.length) || (renderID < 0)) { + throw new IndexOutOfBoundsException( + String.format( + "Render ID must be within the possible bounds of an Item ID! (%s - %s)", + 0, Item.itemsList.length - 1)); + } + this.renderID = renderID; + } + + /** + * This sets what kind of scaling to use for this widget. Possible types + * are: + * + * -1: This doesn't scale it at all. It will be rendered right in the + * middle, at 16x16 size if possible. If it needs to be smaller, it will + * scale. + * + * 0: This is the default mode. It scales to the biggest square it can, at + * stays in the middle. + * + * 1: This scales to fill all the space, whether or not that space is + * square. + * + * @param scaleType + */ + public void setScaleType(int scaleType) { + if (scaleType > 1) { + scaleType = 1; + } + if (scaleType < -1) { + scaleType = -1; + } + this.scaleType = scaleType; + } +} diff --git a/mcp/WidgetSimplewindow.java b/mcp/WidgetSimplewindow.java index 4fe49f9..d57a3b9 100644 --- a/mcp/WidgetSimplewindow.java +++ b/mcp/WidgetSimplewindow.java @@ -32,6 +32,11 @@ public class WidgetSimplewindow extends Widget { * This is a reference to the main widget in the center. */ public Widget mainWidget = new Widget(); + + /** + * This is a reference to the ScrollPane that the Main Widget is in. + */ + public Widget scrollPane = null; /** * This is a reference to the Label that acts as the title on top. */ @@ -93,9 +98,10 @@ public WidgetSimplewindow(Widget w, String s) { * @param showbackButton */ public WidgetSimplewindow(Widget w, String s, Boolean showbackButton) { - ScrollPane mainWidget_ = new ScrollPane(w); - mainWidget_.setFixed(ScrollPane.Fixed.HORIZONTAL); - mainWidget = mainWidget_; + ScrollPane scrollPane = new ScrollPane(w); + scrollPane.setFixed(ScrollPane.Fixed.HORIZONTAL); + this.scrollPane = scrollPane; + mainWidget = w; setTheme(""); init(showbackButton, s); } @@ -127,7 +133,7 @@ protected void init(Boolean showBack, String titleText) { } else { vBottomPadding = 0; } - add(mainWidget); + add(scrollPane); } @Override @@ -147,8 +153,8 @@ public void layout() { titleWidget.setSize(titleWidget.computeTextWidth(), titleWidget.computeTextHeight()); } - mainWidget.setPosition(hPadding, vTopPadding); - mainWidget.setSize(getWidth() - (hPadding * 2), getHeight() + scrollPane.setPosition(hPadding, vTopPadding); + scrollPane.setSize(getWidth() - (hPadding * 2), getHeight() - (vTopPadding + vBottomPadding)); } } From 13afb239d31daa5e26cde5d4136e5fb24a1524ea Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 14 Jan 2012 00:29:53 -0330 Subject: [PATCH 25/49] Updated TWL. --- .../matthiasmann/twl/ActionMap$Action.class | Bin 685 -> 685 bytes .../matthiasmann/twl/ActionMap$Mapping.class | Bin 2059 -> 2054 bytes twl/bin/de/matthiasmann/twl/ActionMap.class | Bin 5059 -> 5098 bytes twl/bin/de/matthiasmann/twl/Alignment.class | Bin 2277 -> 2448 bytes .../twl/AnimatedWindow$ModelCallback.class | Bin 665 -> 665 bytes .../de/matthiasmann/twl/AnimatedWindow.class | Bin 5626 -> 5645 bytes .../twl/AnimationState$State.class | Bin 473 -> 473 bytes .../de/matthiasmann/twl/AnimationState.class | Bin 4122 -> 4329 bytes twl/bin/de/matthiasmann/twl/Border.class | Bin 1567 -> 1815 bytes .../twl/BoxLayout$Direction.class | Bin 1165 -> 1143 bytes twl/bin/de/matthiasmann/twl/BoxLayout.class | Bin 6700 -> 6674 bytes twl/bin/de/matthiasmann/twl/Button$1.class | Bin 696 -> 695 bytes twl/bin/de/matthiasmann/twl/Button.class | Bin 8441 -> 7662 bytes .../matthiasmann/twl/CallbackWithReason.class | Bin 261 -> 261 bytes twl/bin/de/matthiasmann/twl/Clipboard.class | Bin 1719 -> 1730 bytes twl/bin/de/matthiasmann/twl/Color.class | Bin 5170 -> 5730 bytes .../de/matthiasmann/twl/ColorSelector$1.class | Bin 669 -> 674 bytes .../de/matthiasmann/twl/ColorSelector$2.class | Bin 1518 -> 1521 bytes .../de/matthiasmann/twl/ColorSelector$3.class | Bin 1494 -> 1506 bytes .../twl/ColorSelector$ARGBModel.class | Bin 1118 -> 1118 bytes .../twl/ColorSelector$ColorArea.class | Bin 3361 -> 2538 bytes .../twl/ColorSelector$ColorArea1D.class | Bin 3614 -> 3633 bytes .../twl/ColorSelector$ColorArea2D.class | Bin 4192 -> 4211 bytes .../twl/ColorSelector$ColorValueModel.class | Bin 1304 -> 1304 bytes .../de/matthiasmann/twl/ColorSelector.class | Bin 12393 -> 13984 bytes .../twl/ColumnLayout$Columns.class | Bin 2075 -> 2087 bytes .../matthiasmann/twl/ColumnLayout$Panel.class | Bin 4586 -> 4585 bytes .../matthiasmann/twl/ColumnLayout$Row.class | Bin 3285 -> 3285 bytes .../de/matthiasmann/twl/ColumnLayout.class | Bin 4269 -> 4283 bytes twl/bin/de/matthiasmann/twl/ComboBox$1.class | Bin 615 -> 710 bytes twl/bin/de/matthiasmann/twl/ComboBox$2.class | Bin 1071 -> 1228 bytes twl/bin/de/matthiasmann/twl/ComboBox$3.class | Bin 1859 -> 1480 bytes .../twl/ComboBox$ComboboxLabel.class | Bin 2003 -> 2156 bytes .../twl/ComboBox$ComboboxListbox.class | Bin 898 -> 893 bytes .../twl/ComboBox$ComboboxListboxLabel.class | Bin 1285 -> 1220 bytes .../twl/ComboBox$ModelChangeListener.class | Bin 1222 -> 1302 bytes twl/bin/de/matthiasmann/twl/ComboBox.class | Bin 9431 -> 10529 bytes .../de/matthiasmann/twl/ComboBoxBase$1.class | Bin 644 -> 643 bytes .../de/matthiasmann/twl/ComboBoxBase.class | Bin 4191 -> 4243 bytes twl/bin/de/matthiasmann/twl/DebugHook$1.class | Bin 682 -> 691 bytes twl/bin/de/matthiasmann/twl/DebugHook.class | Bin 5354 -> 5449 bytes twl/bin/de/matthiasmann/twl/DesktopArea.class | Bin 2010 -> 1982 bytes .../matthiasmann/twl/DialogLayout$Gap.class | Bin 1005 -> 1008 bytes .../twl/DialogLayout$GapSpring.class | Bin 2007 -> 2031 bytes .../matthiasmann/twl/DialogLayout$Group.class | Bin 7295 -> 7476 bytes .../twl/DialogLayout$NamedGapSpring.class | Bin 1617 -> 1618 bytes .../twl/DialogLayout$ParallelGroup.class | Bin 2423 -> 2434 bytes .../twl/DialogLayout$SequentialGroup.class | Bin 4644 -> 4462 bytes .../twl/DialogLayout$Spring.class | Bin 983 -> 983 bytes .../twl/DialogLayout$SpringDelta.class | Bin 884 -> 930 bytes .../twl/DialogLayout$WidgetSpring.class | Bin 3501 -> 3504 bytes .../de/matthiasmann/twl/DialogLayout.class | Bin 12130 -> 12105 bytes twl/bin/de/matthiasmann/twl/Dimension.class | Bin 1383 -> 1352 bytes .../twl/DraggableButton$DragListener.class | Bin 307 -> 307 bytes .../de/matthiasmann/twl/DraggableButton.class | Bin 3654 -> 2891 bytes twl/bin/de/matthiasmann/twl/EditField$1.class | Bin 678 -> 677 bytes twl/bin/de/matthiasmann/twl/EditField$2.class | Bin 679 -> 678 bytes twl/bin/de/matthiasmann/twl/EditField$3.class | Bin 682 -> 681 bytes twl/bin/de/matthiasmann/twl/EditField$4.class | Bin 771 -> 767 bytes twl/bin/de/matthiasmann/twl/EditField$5.class | Bin 673 -> 672 bytes .../matthiasmann/twl/EditField$Callback.class | Bin 231 -> 231 bytes .../twl/EditField$ModelChangeListener.class | Bin 648 -> 648 bytes .../twl/EditField$PasswordMasker.class | Bin 1030 -> 1030 bytes .../twl/EditField$TextRenderer.class | Bin 3066 -> 5128 bytes twl/bin/de/matthiasmann/twl/EditField.class | Bin 24523 -> 26119 bytes ...FieldAutoCompletionWindow$AsyncQuery.class | Bin 2065 -> 2075 bytes ...tFieldAutoCompletionWindow$Callbacks.class | Bin 1945 -> 1481 bytes ...AutoCompletionWindow$ResultListModel.class | Bin 1425 -> 1450 bytes .../twl/EditFieldAutoCompletionWindow.class | Bin 8193 -> 8215 bytes twl/bin/de/matthiasmann/twl/Event$Type.class | Bin 1874 -> 1855 bytes twl/bin/de/matthiasmann/twl/Event.class | Bin 9502 -> 9529 bytes twl/bin/de/matthiasmann/twl/FPSCounter.class | Bin 2265 -> 2265 bytes .../de/matthiasmann/twl/FileSelector$1.class | Bin 844 -> 843 bytes .../de/matthiasmann/twl/FileSelector$10.class | Bin 1111 -> 1110 bytes .../de/matthiasmann/twl/FileSelector$11.class | Bin 705 -> 704 bytes .../de/matthiasmann/twl/FileSelector$12.class | Bin 704 -> 703 bytes .../de/matthiasmann/twl/FileSelector$13.class | Bin 1594 -> 1594 bytes .../de/matthiasmann/twl/FileSelector$14.class | Bin 1991 -> 1997 bytes .../de/matthiasmann/twl/FileSelector$15.class | Bin 801 -> 800 bytes .../de/matthiasmann/twl/FileSelector$16.class | Bin 1330 -> 1330 bytes .../de/matthiasmann/twl/FileSelector$2.class | Bin 698 -> 697 bytes .../de/matthiasmann/twl/FileSelector$3.class | Bin 699 -> 698 bytes .../de/matthiasmann/twl/FileSelector$4.class | Bin 699 -> 698 bytes .../de/matthiasmann/twl/FileSelector$5.class | Bin 698 -> 697 bytes .../de/matthiasmann/twl/FileSelector$6.class | Bin 701 -> 700 bytes .../de/matthiasmann/twl/FileSelector$7.class | Bin 698 -> 697 bytes .../de/matthiasmann/twl/FileSelector$8.class | Bin 1110 -> 1109 bytes .../de/matthiasmann/twl/FileSelector$9.class | Bin 977 -> 976 bytes .../twl/FileSelector$Callback.class | Bin 288 -> 288 bytes .../twl/FileSelector$Callback2.class | Bin 495 -> 495 bytes .../twl/FileSelector$FileFiltersModel.class | Bin 2223 -> 2244 bytes .../twl/FileSelector$NameSorter.class | Bin 1487 -> 1487 bytes .../twl/FileSelector$NamedFileFilter.class | Bin 1037 -> 1037 bytes .../de/matthiasmann/twl/FileSelector.class | Bin 21747 -> 21686 bytes twl/bin/de/matthiasmann/twl/FileTable$1.class | Bin 626 -> 625 bytes .../matthiasmann/twl/FileTable$Callback.class | Bin 263 -> 263 bytes .../de/matthiasmann/twl/FileTable$Entry.class | Bin 1948 -> 1961 bytes .../twl/FileTable$ExtensionComparator.class | Bin 1222 -> 1271 bytes .../twl/FileTable$FileFilterWrapper.class | Bin 1224 -> 1229 bytes .../twl/FileTable$FileTableModel.class | Bin 4667 -> 4598 bytes .../FileTable$LastModifiedComparator.class | Bin 1298 -> 1350 bytes .../twl/FileTable$NameComparator.class | Bin 1197 -> 1246 bytes .../twl/FileTable$SizeComparator.class | Bin 1105 -> 1154 bytes .../twl/FileTable$SortColumn.class | Bin 2249 -> 2214 bytes .../twl/FileTable$StateSnapshot.class | Bin 810 -> 810 bytes twl/bin/de/matthiasmann/twl/FileTable.class | Bin 10855 -> 11006 bytes .../matthiasmann/twl/FocusGainedCause.class | Bin 1193 -> 1171 bytes .../de/matthiasmann/twl/FolderBrowser$1.class | Bin 1831 -> 1834 bytes .../de/matthiasmann/twl/FolderBrowser$2.class | Bin 1086 -> 1085 bytes .../twl/FolderBrowser$FolderModel.class | Bin 3154 -> 3155 bytes .../de/matthiasmann/twl/FolderBrowser.class | Bin 7021 -> 6964 bytes twl/bin/de/matthiasmann/twl/GUI$1.class | Bin 825 -> 824 bytes twl/bin/de/matthiasmann/twl/GUI$AC.class | Bin 2121 -> 2124 bytes .../twl/GUI$AsyncCompletionListener.class | Bin 385 -> 385 bytes .../twl/GUI$MouseIdleListener.class | Bin 260 -> 260 bytes twl/bin/de/matthiasmann/twl/GUI$TF.class | Bin 1469 -> 1348 bytes .../matthiasmann/twl/GUI$TooltipWindow.class | Bin 2770 -> 2100 bytes twl/bin/de/matthiasmann/twl/GUI.class | Bin 25499 -> 24938 bytes .../de/matthiasmann/twl/Graph$GraphArea.class | Bin 2312 -> 2322 bytes .../de/matthiasmann/twl/Graph$LineStyle.class | Bin 1119 -> 1115 bytes twl/bin/de/matthiasmann/twl/Graph.class | Bin 5873 -> 5881 bytes twl/bin/de/matthiasmann/twl/HAlignment.class | Bin 1070 -> 1048 bytes twl/bin/de/matthiasmann/twl/InfoWindow.class | Bin 2202 -> 1571 bytes twl/bin/de/matthiasmann/twl/InputMap.class | Bin 7385 -> 7521 bytes twl/bin/de/matthiasmann/twl/KeyStroke.class | Bin 4718 -> 4723 bytes .../twl/Label$CallbackReason.class | Bin 1167 -> 1145 bytes twl/bin/de/matthiasmann/twl/Label.class | Bin 5588 -> 5626 bytes twl/bin/de/matthiasmann/twl/ListBox$1.class | Bin 1347 -> 785 bytes .../twl/ListBox$CallbackReason.class | Bin 1615 -> 1595 bytes .../de/matthiasmann/twl/ListBox$LImpl.class | Bin 1437 -> 1634 bytes .../twl/ListBox$ListBoxLabel.class | Bin 5383 -> 4549 bytes twl/bin/de/matthiasmann/twl/ListBox.class | Bin 17297 -> 18232 bytes .../de/matthiasmann/twl/ListBoxDisplay.class | Bin 705 -> 705 bytes .../de/matthiasmann/twl/Menu$MenuPopup.class | Bin 1581 -> 1761 bytes .../de/matthiasmann/twl/Menu$SubMenuBtn.class | Bin 1069 -> 1069 bytes twl/bin/de/matthiasmann/twl/Menu.class | Bin 6369 -> 9648 bytes twl/bin/de/matthiasmann/twl/MenuAction.class | Bin 1560 -> 1563 bytes .../de/matthiasmann/twl/MenuCheckbox$1.class | Bin 1190 -> 1156 bytes .../de/matthiasmann/twl/MenuCheckbox.class | Bin 1988 -> 1957 bytes .../twl/MenuElement$MenuBtn.class | Bin 1523 -> 1523 bytes twl/bin/de/matthiasmann/twl/MenuElement.class | Bin 3530 -> 3916 bytes .../de/matthiasmann/twl/MenuManager$1.class | Bin 672 -> 671 bytes .../de/matthiasmann/twl/MenuManager$2.class | Bin 672 -> 671 bytes twl/bin/de/matthiasmann/twl/MenuManager.class | Bin 5864 -> 6028 bytes twl/bin/de/matthiasmann/twl/MenuSpacer.class | Bin 723 -> 723 bytes .../twl/MouseSensitiveRectangle.class | Bin 374 -> 374 bytes .../de/matthiasmann/twl/ParameterList.class | Bin 924 -> 924 bytes .../de/matthiasmann/twl/ParameterMap.class | Bin 1323 -> 1323 bytes twl/bin/de/matthiasmann/twl/PopupWindow.class | Bin 4691 -> 4622 bytes .../twl/PositionAnimatedPanel$Direction.class | Bin 1486 -> 1467 bytes ...matedPanel$ForceVisibleModelCallback.class | Bin 755 -> 755 bytes .../twl/PositionAnimatedPanel.class | Bin 6834 -> 6805 bytes twl/bin/de/matthiasmann/twl/ProgressBar.class | Bin 4406 -> 4400 bytes .../twl/PropertySheet$ComboBoxEditor.class | Bin 2980 -> 2982 bytes ...ComboBoxEditorFactory$ModelForwarder.class | Bin 2851 -> 3113 bytes .../PropertySheet$ComboBoxEditorFactory.class | Bin 2406 -> 2406 bytes .../twl/PropertySheet$EditorRenderer.class | Bin 2221 -> 2221 bytes .../twl/PropertySheet$LeafNode.class | Bin 1689 -> 1693 bytes .../twl/PropertySheet$ListNode.class | Bin 2068 -> 2064 bytes .../twl/PropertySheet$Model.class | Bin 1201 -> 1205 bytes .../twl/PropertySheet$PSTreeTableNode.class | Bin 378 -> 378 bytes .../twl/PropertySheet$PropertyEditor.class | Bin 361 -> 361 bytes .../PropertySheet$PropertyEditorFactory.class | Bin 603 -> 603 bytes ...opertySheet$PropertyListCellRenderer.class | Bin 2658 -> 2693 bytes .../twl/PropertySheet$PropertyNode.class | Bin 1570 -> 1570 bytes .../twl/PropertySheet$StringEditor.class | Bin 2304 -> 2311 bytes .../PropertySheet$StringEditorFactory.class | Bin 1307 -> 1307 bytes .../twl/PropertySheet$TreeGenerator.class | Bin 2090 -> 2094 bytes .../de/matthiasmann/twl/PropertySheet.class | Bin 7024 -> 7041 bytes .../matthiasmann/twl/RadialPopupMenu$1.class | Bin 691 -> 690 bytes .../twl/RadialPopupMenu$RoundButton.class | Bin 882 -> 886 bytes .../de/matthiasmann/twl/RadialPopupMenu.class | Bin 6174 -> 6169 bytes twl/bin/de/matthiasmann/twl/Rect.class | Bin 2777 -> 2875 bytes .../twl/ResizableFrame$DragMode.class | Bin 2034 -> 2010 bytes .../twl/ResizableFrame$ResizableAxis.class | Bin 1476 -> 1457 bytes .../de/matthiasmann/twl/ResizableFrame.class | Bin 16030 -> 16179 bytes .../de/matthiasmann/twl/ScrollPane$1.class | Bin 668 -> 667 bytes .../de/matthiasmann/twl/ScrollPane$2.class | Bin 1230 -> 1229 bytes .../de/matthiasmann/twl/ScrollPane$3.class | Bin 684 -> 683 bytes .../de/matthiasmann/twl/ScrollPane$4.class | Bin 1240 -> 1239 bytes .../twl/ScrollPane$AutoScrollable.class | Bin 287 -> 287 bytes .../twl/ScrollPane$CustomPageSize.class | Bin 273 -> 273 bytes .../matthiasmann/twl/ScrollPane$Fixed.class | Bin 1196 -> 1174 bytes .../twl/ScrollPane$Scrollable.class | Bin 248 -> 248 bytes twl/bin/de/matthiasmann/twl/ScrollPane.class | Bin 16720 -> 15564 bytes twl/bin/de/matthiasmann/twl/Scrollbar$1.class | Bin 744 -> 743 bytes twl/bin/de/matthiasmann/twl/Scrollbar$2.class | Bin 1540 -> 680 bytes twl/bin/de/matthiasmann/twl/Scrollbar$3.class | Bin 749 -> 0 bytes .../twl/Scrollbar$Orientation.class | Bin 1179 -> 1157 bytes twl/bin/de/matthiasmann/twl/Scrollbar.class | Bin 13171 -> 13844 bytes .../twl/SimpleDialog$ButtonCB.class | Bin 833 -> 833 bytes .../de/matthiasmann/twl/SimpleDialog.class | Bin 4952 -> 5328 bytes twl/bin/de/matthiasmann/twl/SplitPane$1.class | Bin 996 -> 1001 bytes .../twl/SplitPane$Direction$1.class | Bin 731 -> 1088 bytes .../twl/SplitPane$Direction$2.class | Bin 731 -> 1090 bytes .../twl/SplitPane$Direction.class | Bin 1621 -> 1824 bytes twl/bin/de/matthiasmann/twl/SplitPane.class | Bin 5642 -> 6710 bytes .../de/matthiasmann/twl/TabbedPane$CB.class | Bin 664 -> 664 bytes .../twl/TabbedPane$Container.class | Bin 1349 -> 0 bytes .../de/matthiasmann/twl/TabbedPane$Tab.class | Bin 2181 -> 2558 bytes .../twl/TabbedPane$TabPosition.class | Bin 1368 -> 1348 bytes twl/bin/de/matthiasmann/twl/TabbedPane.class | Bin 11526 -> 11199 bytes .../twl/Table$ModelChangeListener.class | Bin 2108 -> 2108 bytes twl/bin/de/matthiasmann/twl/Table.class | Bin 2142 -> 2142 bytes .../matthiasmann/twl/TableBase$Callback.class | Bin 340 -> 340 bytes .../twl/TableBase$CellRenderer.class | Bin 488 -> 488 bytes .../twl/TableBase$CellWidgetContainer.class | Bin 1016 -> 1016 bytes .../twl/TableBase$CellWidgetCreator.class | Bin 443 -> 443 bytes .../twl/TableBase$ColumnHeader$1.class | Bin 1357 -> 1308 bytes .../twl/TableBase$ColumnHeader.class | Bin 2620 -> 3268 bytes .../twl/TableBase$ColumnSizeSequence.class | Bin 2244 -> 2439 bytes .../twl/TableBase$DragListener.class | Bin 446 -> 446 bytes .../twl/TableBase$InsertCellWidgets.class | Bin 1086 -> 1086 bytes .../twl/TableBase$KeyboardSearchHandler.class | Bin 355 -> 355 bytes .../twl/TableBase$RemoveCellWidgets.class | Bin 1290 -> 1293 bytes .../twl/TableBase$RowSizeSequence.class | Bin 835 -> 841 bytes .../twl/TableBase$StringCellRenderer.class | Bin 1947 -> 1947 bytes .../twl/TableBase$WidgetEntry.class | Bin 679 -> 679 bytes twl/bin/de/matthiasmann/twl/TableBase.class | Bin 38328 -> 38846 bytes .../twl/TableRowSelectionManager.class | Bin 8072 -> 8267 bytes .../twl/TableSearchWindow$1.class | Bin 722 -> 721 bytes .../matthiasmann/twl/TableSearchWindow.class | Bin 7049 -> 7025 bytes ...electionManager$SelectionGranularity.class | Bin 1329 -> 1307 bytes .../twl/TableSelectionManager.class | Bin 826 -> 906 bytes twl/bin/de/matthiasmann/twl/TextArea$1.class | Bin 617 -> 1113 bytes .../de/matthiasmann/twl/TextArea$Box.class | Bin 11756 -> 11209 bytes .../matthiasmann/twl/TextArea$Callback.class | Bin 254 -> 254 bytes .../twl/TextArea$ImageResolver.class | Bin 294 -> 294 bytes .../de/matthiasmann/twl/TextArea$LClip.class | Bin 5235 -> 5611 bytes .../matthiasmann/twl/TextArea$LElement.class | Bin 1877 -> 2635 bytes .../de/matthiasmann/twl/TextArea$LImage.class | Bin 1328 -> 1890 bytes .../de/matthiasmann/twl/TextArea$LText.class | Bin 2211 -> 3571 bytes .../matthiasmann/twl/TextArea$LWidget.class | Bin 1148 -> 1148 bytes .../twl/TextArea$WidgetResolver.class | Bin 307 -> 307 bytes twl/bin/de/matthiasmann/twl/TextArea.class | Bin 40748 -> 45522 bytes twl/bin/de/matthiasmann/twl/TextWidget.class | Bin 8860 -> 8855 bytes twl/bin/de/matthiasmann/twl/ThemeInfo.class | Bin 283 -> 283 bytes twl/bin/de/matthiasmann/twl/Timer.class | Bin 2804 -> 2826 bytes .../de/matthiasmann/twl/ToggleButton.class | Bin 1231 -> 1231 bytes .../de/matthiasmann/twl/TreeComboBox$1.class | Bin 1123 -> 1113 bytes .../de/matthiasmann/twl/TreeComboBox$2.class | Bin 1072 -> 1071 bytes .../de/matthiasmann/twl/TreeComboBox$3.class | Bin 1245 -> 1250 bytes .../twl/TreeComboBox$Callback.class | Bin 332 -> 332 bytes .../twl/TreeComboBox$PathResolver.class | Bin 413 -> 413 bytes .../de/matthiasmann/twl/TreeComboBox.class | Bin 7638 -> 7670 bytes .../matthiasmann/twl/TreePathDisplay$1.class | Bin 983 -> 982 bytes .../matthiasmann/twl/TreePathDisplay$2.class | Bin 1448 -> 1491 bytes .../twl/TreePathDisplay$Callback.class | Bin 386 -> 386 bytes .../twl/TreePathDisplay$PathBox.class | Bin 1416 -> 1424 bytes .../twl/TreePathDisplay$PathEditField.class | Bin 1282 -> 1401 bytes .../de/matthiasmann/twl/TreePathDisplay.class | Bin 6765 -> 6720 bytes .../twl/TreeTable$ModelChangeListener.class | Bin 1815 -> 1815 bytes .../twl/TreeTable$NodeState.class | Bin 3011 -> 3028 bytes .../twl/TreeTable$TreeLeafCellRenderer.class | Bin 3290 -> 3938 bytes .../twl/TreeTable$TreeNodeCellRenderer.class | Bin 2723 -> 3529 bytes twl/bin/de/matthiasmann/twl/TreeTable.class | Bin 11946 -> 13077 bytes .../de/matthiasmann/twl/ValueAdjuster$1.class | Bin 645 -> 644 bytes .../de/matthiasmann/twl/ValueAdjuster$2.class | Bin 650 -> 649 bytes .../de/matthiasmann/twl/ValueAdjuster$L.class | Bin 1422 -> 1422 bytes .../twl/ValueAdjuster$ModelCallback.class | Bin 655 -> 655 bytes .../de/matthiasmann/twl/ValueAdjuster.class | Bin 11669 -> 10831 bytes .../matthiasmann/twl/ValueAdjusterFloat.class | Bin 5950 -> 5958 bytes .../matthiasmann/twl/ValueAdjusterInt.class | Bin 4526 -> 4568 bytes twl/bin/de/matthiasmann/twl/Widget.class | Bin 40786 -> 44195 bytes twl/bin/de/matthiasmann/twl/input/Input.class | Bin 168 -> 168 bytes .../twl/input/lwjgl/LWJGLInput.class | Bin 1439 -> 1406 bytes twl/bin/de/matthiasmann/twl/license.html | 2 +- twl/bin/de/matthiasmann/twl/license.txt | 2 +- .../twl/model/AbstractColorSpace.class | Bin 976 -> 976 bytes .../twl/model/AbstractEnumModel.class | Bin 1104 -> 1107 bytes .../twl/model/AbstractFloatModel.class | Bin 400 -> 400 bytes .../twl/model/AbstractIntegerModel.class | Bin 408 -> 408 bytes .../twl/model/AbstractListModel.class | Bin 2484 -> 2488 bytes .../twl/model/AbstractOptionModel$1.class | Bin 1033 -> 1035 bytes .../twl/model/AbstractOptionModel.class | Bin 1461 -> 1465 bytes .../twl/model/AbstractProperty.class | Bin 1424 -> 1405 bytes .../AbstractTableColumnHeaderModel.class | Bin 1014 -> 1002 bytes .../twl/model/AbstractTableModel.class | Bin 3223 -> 3330 bytes .../model/AbstractTableSelectionModel.class | Bin 2162 -> 2163 bytes .../twl/model/AbstractTreeTableModel.class | Bin 4776 -> 4839 bytes .../twl/model/AbstractTreeTableNode.class | Bin 3292 -> 3290 bytes .../twl/model/AutoCompletionDataSource.class | Bin 304 -> 304 bytes .../twl/model/AutoCompletionResult.class | Bin 1068 -> 1068 bytes .../twl/model/BitfieldBooleanModel$CB.class | Bin 691 -> 691 bytes .../twl/model/BitfieldBooleanModel.class | Bin 1744 -> 1754 bytes .../matthiasmann/twl/model/BooleanModel.class | Bin 255 -> 236 bytes .../matthiasmann/twl/model/ButtonModel.class | Bin 586 -> 586 bytes .../matthiasmann/twl/model/ColorSpace.class | Bin 421 -> 421 bytes .../twl/model/ColorSpaceHSL.class | Bin 2676 -> 2666 bytes .../CombinedListModel$SubListsModel.class | Bin 1381 -> 1572 bytes .../twl/model/CombinedListModel$Sublist.class | Bin 2447 -> 2599 bytes .../twl/model/CombinedListModel.class | Bin 5893 -> 5911 bytes .../model/DefaultTableSelectionModel.class | Bin 3582 -> 3592 bytes .../twl/model/EnumListModel.class | Bin 1808 -> 1859 bytes .../de/matthiasmann/twl/model/EnumModel.class | Bin 458 -> 487 bytes ...ystemAutoCompletionDataSource$Result.class | Bin 3519 -> 3532 bytes .../FileSystemAutoCompletionDataSource.class | Bin 2961 -> 2971 bytes .../model/FileSystemModel$FileFilter.class | Bin 323 -> 323 bytes .../twl/model/FileSystemModel.class | Bin 1316 -> 1316 bytes .../FileSystemTreeModel$FolderFilter.class | Bin 978 -> 966 bytes .../FileSystemTreeModel$FolderNode.class | Bin 4167 -> 4168 bytes .../twl/model/FileSystemTreeModel.class | Bin 3444 -> 3481 bytes .../matthiasmann/twl/model/FloatModel.class | Bin 295 -> 276 bytes .../twl/model/GraphLineModel.class | Bin 292 -> 292 bytes .../matthiasmann/twl/model/GraphModel.class | Bin 262 -> 262 bytes .../matthiasmann/twl/model/HasCallback.class | Bin 1045 -> 1100 bytes .../matthiasmann/twl/model/IntegerModel.class | Bin 299 -> 280 bytes .../twl/model/JavaFileSystemModel$1.class | Bin 1215 -> 1214 bytes .../twl/model/JavaFileSystemModel.class | Bin 5777 -> 5772 bytes .../twl/model/ListModel$ChangeListener.class | Bin 340 -> 340 bytes .../de/matthiasmann/twl/model/ListModel.class | Bin 572 -> 572 bytes .../matthiasmann/twl/model/MRUListModel.class | Bin 703 -> 703 bytes .../twl/model/OptionBooleanModel.class | Bin 1450 -> 1456 bytes .../twl/model/OptionEnumModel.class | Bin 1807 -> 1817 bytes .../twl/model/PersistentBooleanModel.class | Bin 1329 -> 1335 bytes .../twl/model/PersistentEnumModel.class | Bin 3283 -> 3311 bytes .../twl/model/PersistentIntegerModel.class | Bin 1900 -> 1906 bytes .../twl/model/PersistentMRUListModel.class | Bin 6488 -> 6510 bytes .../twl/model/PersistentStringModel.class | Bin 1391 -> 1400 bytes .../de/matthiasmann/twl/model/Property.class | Bin 643 -> 643 bytes .../matthiasmann/twl/model/PropertyList.class | Bin 293 -> 293 bytes .../twl/model/ReorderListModel$1.class | Bin 1366 -> 1442 bytes .../twl/model/ReorderListModel.class | Bin 6534 -> 6638 bytes .../model/SimpleAutoCompletionResult.class | Bin 1337 -> 1340 bytes .../twl/model/SimpleBooleanModel.class | Bin 767 -> 767 bytes .../twl/model/SimpleButtonModel.class | Bin 3407 -> 3435 bytes .../twl/model/SimpleChangableListModel.class | Bin 3480 -> 3517 bytes .../twl/model/SimpleEnumModel.class | Bin 1513 -> 1519 bytes .../twl/model/SimpleFloatModel.class | Bin 1396 -> 1399 bytes .../twl/model/SimpleGraphLineModel.class | Bin 2075 -> 2067 bytes .../twl/model/SimpleGraphModel.class | Bin 2701 -> 2703 bytes .../twl/model/SimpleIntegerModel.class | Bin 1089 -> 1092 bytes .../twl/model/SimpleListModel.class | Bin 1138 -> 1141 bytes .../twl/model/SimpleMRUListModel.class | Bin 3599 -> 3601 bytes .../twl/model/SimpleProperty.class | Bin 2602 -> 2606 bytes .../twl/model/SimplePropertyList.class | Bin 3551 -> 3669 bytes .../twl/model/SimpleTableModel.class | Bin 4181 -> 4201 bytes .../matthiasmann/twl/model/SortOrder$1.class | Bin 974 -> 975 bytes .../matthiasmann/twl/model/SortOrder$2.class | Bin 1028 -> 1080 bytes .../de/matthiasmann/twl/model/SortOrder.class | Bin 1525 -> 1609 bytes .../matthiasmann/twl/model/StringModel.class | Bin 287 -> 268 bytes ...aderModel$ColumnHeaderChangeListener.class | Bin 386 -> 386 bytes .../twl/model/TableColumnHeaderModel.class | Bin 633 -> 633 bytes .../twl/model/TableModel$ChangeListener.class | Bin 530 -> 530 bytes .../matthiasmann/twl/model/TableModel.class | Bin 504 -> 504 bytes .../twl/model/TableSelectionModel.class | Bin 679 -> 679 bytes .../twl/model/TableSingleSelectionModel.class | Bin 2303 -> 2311 bytes .../ToggleButtonModel$ModelCallback.class | Bin 713 -> 713 bytes .../twl/model/ToggleButtonModel.class | Bin 2890 -> 2900 bytes .../model/TreeTableModel$ChangeListener.class | Bin 534 -> 534 bytes .../twl/model/TreeTableModel.class | Bin 469 -> 469 bytes .../twl/model/TreeTableNode.class | Bin 460 -> 460 bytes .../renderer/AnimationState$StateKey.class | Bin 1894 -> 2251 bytes .../twl/renderer/AnimationState.class | Bin 445 -> 445 bytes .../twl/renderer/CacheContext.class | Bin 203 -> 203 bytes .../twl/renderer/DynamicImage$Format.class | Bin 1221 -> 1199 bytes .../twl/renderer/DynamicImage.class | Bin 498 -> 674 bytes .../de/matthiasmann/twl/renderer/Font.class | Bin 1208 -> 1239 bytes .../matthiasmann/twl/renderer/FontCache.class | Bin 286 -> 286 bytes .../twl/renderer/FontParameter.class | Bin 1288 -> 1291 bytes .../de/matthiasmann/twl/renderer/Image.class | Bin 394 -> 394 bytes .../twl/renderer/LineRenderer.class | Bin 191 -> 191 bytes .../twl/renderer/MouseCursor.class | Bin 132 -> 132 bytes .../matthiasmann/twl/renderer/Renderer.class | Bin 1393 -> 1533 bytes .../matthiasmann/twl/renderer/Resource.class | Bin 150 -> 150 bytes .../twl/renderer/SupportsDrawRepeat.class | Bin 218 -> 218 bytes .../matthiasmann/twl/renderer/Texture.class | Bin 451 -> 591 bytes .../twl/renderer/lwjgl/BitmapFont$Glyph.class | Bin 1285 -> 1784 bytes .../twl/renderer/lwjgl/BitmapFont.class | Bin 16603 -> 17158 bytes .../renderer/lwjgl/LWJGLCacheContext.class | Bin 6582 -> 6752 bytes .../twl/renderer/lwjgl/LWJGLCursor.class | Bin 3736 -> 3123 bytes .../renderer/lwjgl/LWJGLDynamicImage.class | Bin 4179 -> 4757 bytes .../renderer/lwjgl/LWJGLFont$FontState.class | Bin 890 -> 1996 bytes .../twl/renderer/lwjgl/LWJGLFont.class | Bin 10315 -> 16166 bytes .../twl/renderer/lwjgl/LWJGLFontCache.class | Bin 3020 -> 3023 bytes .../LWJGLRenderer$SWCursorAnimState.class | Bin 1817 -> 1817 bytes .../twl/renderer/lwjgl/LWJGLRenderer.class | Bin 16300 -> 18996 bytes .../renderer/lwjgl/LWJGLTexture$Filter.class | Bin 1368 -> 1348 bytes .../renderer/lwjgl/LWJGLTexture$Format.class | Bin 2469 -> 2495 bytes .../twl/renderer/lwjgl/LWJGLTexture.class | Bin 5836 -> 6292 bytes .../twl/renderer/lwjgl/PNGDecoder.class | Bin 3003 -> 2662 bytes .../twl/renderer/lwjgl/RenderScale.class | Bin 677 -> 649 bytes .../twl/renderer/lwjgl/SWCursor.class | Bin 1751 -> 1874 bytes .../twl/renderer/lwjgl/TextureArea.class | Bin 6176 -> 4723 bytes .../twl/renderer/lwjgl/TextureAreaBase.class | Bin 1558 -> 1615 bytes .../lwjgl/TexturePostProcessing.class | Bin 415 -> 415 bytes .../twl/renderer/lwjgl/TintStack.class | Bin 1759 -> 1904 bytes .../twl/textarea/BoxAttribute.class | Bin 1285 -> 1285 bytes .../twl/textarea/CSSStyle$1.class | Bin 987 -> 989 bytes .../matthiasmann/twl/textarea/CSSStyle.class | Bin 10255 -> 12155 bytes .../twl/textarea/HTMLTextAreaModel.class | Bin 15987 -> 15902 bytes .../twl/textarea/OrderedListType.class | Bin 931 -> 919 bytes .../de/matthiasmann/twl/textarea/Parser.class | Bin 8231 -> 8117 bytes .../twl/textarea/SimpleTextAreaModel.class | Bin 2138 -> 2120 bytes .../de/matthiasmann/twl/textarea/Style.class | Bin 6896 -> 7804 bytes .../twl/textarea/StyleAttribute.class | Bin 7144 -> 7549 bytes .../twl/textarea/StyleSheet$Selector.class | Bin 1262 -> 1308 bytes .../twl/textarea/StyleSheet.class | Bin 5981 -> 6386 bytes .../twl/textarea/StyleSheetKey.class | Bin 1995 -> 1993 bytes .../twl/textarea/StyleSheetResolver.class | Bin 294 -> 294 bytes .../textarea/TextAreaModel$BlockElement.class | Bin 610 -> 610 bytes .../twl/textarea/TextAreaModel$Clear.class | Bin 1325 -> 1303 bytes .../TextAreaModel$ContainerElement.class | Bin 1719 -> 1719 bytes .../twl/textarea/TextAreaModel$Display.class | Bin 1239 -> 1217 bytes .../twl/textarea/TextAreaModel$Element.class | Bin 1078 -> 1078 bytes .../TextAreaModel$FloatPosition.class | Bin 1330 -> 1308 bytes .../textarea/TextAreaModel$HAlignment.class | Bin 1365 -> 1343 bytes .../textarea/TextAreaModel$ImageElement.class | Bin 1118 -> 1118 bytes .../textarea/TextAreaModel$LinkElement.class | Bin 936 -> 936 bytes .../textarea/TextAreaModel$ListElement.class | Bin 607 -> 607 bytes .../TextAreaModel$OrderedListElement.class | Bin 798 -> 798 bytes .../TextAreaModel$ParagraphElement.class | Bin 622 -> 622 bytes .../TextAreaModel$TableCellElement.class | Bin 883 -> 883 bytes .../textarea/TextAreaModel$TableElement.class | Bin 2549 -> 2555 bytes .../textarea/TextAreaModel$TextElement.class | Bin 1003 -> 1003 bytes .../textarea/TextAreaModel$VAlignment.class | Bin 1362 -> 1340 bytes .../TextAreaModel$WidgetElement.class | Bin 973 -> 973 bytes .../twl/textarea/TextAreaModel.class | Bin 1793 -> 1793 bytes .../twl/textarea/Value$Unit.class | Bin 1710 -> 1687 bytes .../de/matthiasmann/twl/textarea/Value.class | Bin 1765 -> 1738 bytes .../de/matthiasmann/twl/textarea/parser.flex | 121 ---- .../twl/theme/AnimatedImage$Element.class | Bin 780 -> 780 bytes .../twl/theme/AnimatedImage$Img.class | Bin 3177 -> 3177 bytes .../twl/theme/AnimatedImage$Repeat.class | Bin 2737 -> 2820 bytes .../twl/theme/AnimatedImage.class | Bin 3537 -> 3537 bytes .../twl/theme/ComposedImage.class | Bin 1914 -> 1904 bytes .../matthiasmann/twl/theme/EmptyImage.class | Bin 1173 -> 1173 bytes .../de/matthiasmann/twl/theme/GridImage.class | Bin 4570 -> 4558 bytes .../de/matthiasmann/twl/theme/HasBorder.class | Bin 178 -> 178 bytes .../twl/theme/ImageAdjustments.class | Bin 2758 -> 2750 bytes .../twl/theme/ImageManager$AnimParams.class | Bin 553 -> 553 bytes .../twl/theme/ImageManager$ImageParams.class | Bin 807 -> 979 bytes .../matthiasmann/twl/theme/ImageManager.class | Bin 23181 -> 25155 bytes .../twl/theme/ParameterListImpl.class | Bin 5286 -> 5332 bytes .../twl/theme/ParameterMapImpl.class | Bin 7558 -> 8721 bytes .../matthiasmann/twl/theme/ParserUtil.class | Bin 6638 -> 7111 bytes .../matthiasmann/twl/theme/RepeatImage.class | Bin 2811 -> 2812 bytes .../twl/theme/StateSelectImage.class | Bin 2456 -> 2432 bytes .../twl/theme/ThemeChildImpl.class | Bin 1004 -> 978 bytes .../twl/theme/ThemeInfoImpl.class | Bin 2598 -> 3346 bytes .../theme/ThemeManager$MathInterpreter.class | Bin 2568 -> 3014 bytes .../matthiasmann/twl/theme/ThemeManager.class | Bin 22142 -> 22557 bytes twl/bin/de/matthiasmann/twl/theme/theme.dtd | 216 ------- .../AbstractMathInterpreter$Function.class | Bin 319 -> 319 bytes .../AbstractMathInterpreter$FunctionMax.class | Bin 1137 -> 1141 bytes .../AbstractMathInterpreter$FunctionMin.class | Bin 1137 -> 1141 bytes ...stractMathInterpreter$NumberFunction.class | Bin 1279 -> 1286 bytes .../twl/utils/AbstractMathInterpreter.class | Bin 9993 -> 10842 bytes .../twl/utils/CallbackSupport.class | Bin 3439 -> 3591 bytes .../matthiasmann/twl/utils/ClassUtils.class | Bin 2134 -> 2181 bytes .../de/matthiasmann/twl/utils/HashEntry.class | Bin 3329 -> 3417 bytes .../twl/utils/MultiStringReader.class | Bin 1041 -> 1038 bytes .../twl/utils/NaturalSortComparator$1.class | Bin 896 -> 956 bytes .../twl/utils/NaturalSortComparator$2.class | Bin 905 -> 965 bytes .../twl/utils/NaturalSortComparator.class | Bin 3064 -> 3138 bytes .../twl/utils/PNGDecoder$Format.class | Bin 1784 -> 1765 bytes .../matthiasmann/twl/utils/PNGDecoder.class | Bin 16506 -> 16796 bytes .../twl/utils/ParameterStringParser.class | Bin 2130 -> 2125 bytes .../utils/SimpleMathParser$Interpreter.class | Bin 491 -> 508 bytes .../twl/utils/SimpleMathParser.class | Bin 5803 -> 5885 bytes .../matthiasmann/twl/utils/SizeSequence.class | Bin 3376 -> 3383 bytes .../twl/utils/SparseGrid$Entry.class | Bin 626 -> 626 bytes .../twl/utils/SparseGrid$GridFunction.class | Bin 360 -> 360 bytes .../twl/utils/SparseGrid$Node.class | Bin 8579 -> 8586 bytes .../matthiasmann/twl/utils/SparseGrid.class | Bin 4285 -> 4291 bytes .../twl/utils/StateExpression$AndOr.class | Bin 1373 -> 0 bytes .../twl/utils/StateExpression$Check.class | Bin 1134 -> 1360 bytes .../StateExpression$StringIterator.class | Bin 2155 -> 2153 bytes .../twl/utils/StateExpression$Xor.class | Bin 994 -> 0 bytes .../twl/utils/StateExpression.class | Bin 3055 -> 2996 bytes .../de/matthiasmann/twl/utils/TextUtil.class | Bin 4383 -> 4972 bytes ...intAnimator$AnimationStateTimeSource.class | Bin 1805 -> 1814 bytes .../utils/TintAnimator$GUITimeSource.class | Bin 1261 -> 1270 bytes .../twl/utils/TintAnimator$TimeSource.class | Bin 280 -> 280 bytes .../matthiasmann/twl/utils/TintAnimator.class | Bin 3391 -> 3378 bytes .../twl/utils/TypeMapping$Entry.class | Bin 991 -> 986 bytes .../matthiasmann/twl/utils/TypeMapping.class | Bin 4391 -> 4642 bytes .../de/matthiasmann/twl/utils/XMLParser.class | Bin 11283 -> 11668 bytes twl/src/de/matthiasmann/twl/Alignment.java | 19 +- .../de/matthiasmann/twl/AnimationState.java | 20 +- twl/src/de/matthiasmann/twl/Border.java | 16 + twl/src/de/matthiasmann/twl/Button.java | 9 +- twl/src/de/matthiasmann/twl/Color.java | 15 +- .../de/matthiasmann/twl/ColorSelector.java | 90 ++- twl/src/de/matthiasmann/twl/ComboBox.java | 27 + twl/src/de/matthiasmann/twl/ComboBoxBase.java | 7 +- twl/src/de/matthiasmann/twl/Container.java | 66 ++ twl/src/de/matthiasmann/twl/DatePicker.java | 500 +++++++++++++++ .../matthiasmann/twl/DatePickerComboBox.java | 196 ++++++ twl/src/de/matthiasmann/twl/DebugHook.java | 12 +- twl/src/de/matthiasmann/twl/DialogLayout.java | 16 +- twl/src/de/matthiasmann/twl/EditField.java | 234 +++++-- twl/src/de/matthiasmann/twl/Event.java | 14 +- twl/src/de/matthiasmann/twl/FileSelector.java | 9 +- twl/src/de/matthiasmann/twl/FileTable.java | 4 + twl/src/de/matthiasmann/twl/GUI.java | 189 +++--- twl/src/de/matthiasmann/twl/InfoWindow.java | 27 +- twl/src/de/matthiasmann/twl/ListBox.java | 72 ++- twl/src/de/matthiasmann/twl/Menu.java | 133 +++- twl/src/de/matthiasmann/twl/MenuElement.java | 30 +- twl/src/de/matthiasmann/twl/MenuManager.java | 9 + twl/src/de/matthiasmann/twl/PopupWindow.java | 60 +- twl/src/de/matthiasmann/twl/Rect.java | 9 + .../de/matthiasmann/twl/ResizableFrame.java | 52 +- twl/src/de/matthiasmann/twl/Scrollbar.java | 112 ++-- twl/src/de/matthiasmann/twl/SimpleDialog.java | 26 +- twl/src/de/matthiasmann/twl/SplitPane.java | 133 +++- twl/src/de/matthiasmann/twl/TabbedPane.java | 130 +++- twl/src/de/matthiasmann/twl/TableBase.java | 28 +- .../twl/TableRowSelectionManager.java | 4 + .../twl/TableSelectionManager.java | 4 + twl/src/de/matthiasmann/twl/TextArea.java | 532 ++++++++++++---- twl/src/de/matthiasmann/twl/TreeTable.java | 110 +++- .../de/matthiasmann/twl/ValueAdjuster.java | 2 +- .../de/matthiasmann/twl/ValueAdjusterInt.java | 2 + twl/src/de/matthiasmann/twl/WheelWidget.java | 572 ++++++++++++++++++ twl/src/de/matthiasmann/twl/Widget.java | 242 +++++++- .../twl/input/lwjgl/LWJGLInput.java | 2 +- .../matthiasmann/twl/model/BooleanModel.java | 10 +- .../de/matthiasmann/twl/model/ColorModel.java | 46 ++ .../de/matthiasmann/twl/model/DateModel.java | 46 ++ .../twl/model/DefaultEditFieldModel.java | 117 ++++ .../twl/model/EditFieldModel.java | 74 +++ .../de/matthiasmann/twl/model/EnumModel.java | 9 +- .../de/matthiasmann/twl/model/FloatModel.java | 11 +- .../matthiasmann/twl/model/HasCallback.java | 5 +- .../matthiasmann/twl/model/IntegerModel.java | 9 +- .../twl/model/ListSelectionModel.java | 75 +++ .../twl/model/ObservableCharSequence.java | 52 ++ .../twl/model/PersistentColorModel.java | 101 ++++ .../twl/model/SimpleDateModel.java | 63 ++ .../twl/model/SimpleListSelectionModel.java | 100 +++ .../twl/model/SimpleStringModel.java | 66 ++ .../twl/model/SimpleTableModel.java | 4 +- .../twl/model/StringAttributes.java | 323 ++++++++++ .../matthiasmann/twl/model/StringModel.java | 12 +- .../twl/renderer/AnimationState.java | 14 + .../twl/renderer/AnimationStateString.java | 17 + .../twl/renderer/AttributedString.java | 57 ++ .../renderer/AttributedStringFontCache.java | 56 ++ .../twl/renderer/DynamicImage.java | 27 + .../de/matthiasmann/twl/renderer/Font.java | 12 +- .../de/matthiasmann/twl/renderer/Font2.java | 55 ++ .../twl/renderer/OffscreenRenderer.java | 60 ++ .../twl/renderer/OffscreenSurface.java | 42 ++ .../matthiasmann/twl/renderer/Renderer.java | 53 +- .../de/matthiasmann/twl/renderer/Texture.java | 12 +- .../twl/renderer/lwjgl/BitmapFont.java | 73 ++- .../lwjgl/LWJGLAttributedStringFontCache.java | 159 +++++ .../twl/renderer/lwjgl/LWJGLDynamicImage.java | 20 +- .../twl/renderer/lwjgl/LWJGLFont.java | 350 +++++++++-- .../twl/renderer/lwjgl/LWJGLRenderer.java | 245 ++++++-- .../twl/renderer/lwjgl/LWJGLTexture.java | 11 +- .../twl/renderer/lwjgl/TextureArea.java | 96 +-- .../twl/renderer/lwjgl/TextureAreaBase.java | 4 + .../renderer/lwjgl/TextureAreaRotated.java | 319 ++++++++++ .../twl/renderer/lwjgl/TextureAreaTiled.java | 124 ++++ .../twl/renderer/lwjgl/TintStack.java | 15 +- .../matthiasmann/twl/textarea/CSSStyle.java | 77 ++- .../twl/textarea/HTMLTextAreaModel.java | 18 +- .../de/matthiasmann/twl/textarea/Style.java | 106 +++- .../twl/textarea/StyleAttribute.java | 9 +- .../matthiasmann/twl/textarea/StyleSheet.java | 29 +- .../matthiasmann/twl/theme/ImageManager.java | 134 ++-- .../twl/theme/ParameterMapImpl.java | 54 +- .../de/matthiasmann/twl/theme/ParserUtil.java | 19 +- .../twl/theme/StateSelectImage.java | 23 +- .../matthiasmann/twl/theme/ThemeInfoImpl.java | 26 +- .../matthiasmann/twl/theme/ThemeManager.java | 147 +++-- twl/src/de/matthiasmann/twl/theme/theme.dtd | 1 + .../twl/utils/AbstractMathInterpreter.java | 49 +- .../twl/utils/CascadedHashMap.java | 156 +++++ .../de/matthiasmann/twl/utils/ClipStack.java | 174 ++++++ .../de/matthiasmann/twl/utils/PNGDecoder.java | 88 ++- .../twl/utils/SimpleMathParser.java | 17 +- .../twl/utils/StateExpression.java | 64 +- .../matthiasmann/twl/utils/StateSelect.java | 117 ++++ .../twl/utils/StateSelectOptimizer.java | 170 ++++++ .../de/matthiasmann/twl/utils/TextUtil.java | 64 +- .../matthiasmann/twl/utils/TypeMapping.java | 9 + .../twl/utils/WithRunnableCallback.java | 43 ++ .../de/matthiasmann/twl/utils/XMLParser.java | 50 +- 582 files changed, 7361 insertions(+), 1302 deletions(-) delete mode 100644 twl/bin/de/matthiasmann/twl/Scrollbar$3.class delete mode 100644 twl/bin/de/matthiasmann/twl/TabbedPane$Container.class delete mode 100644 twl/bin/de/matthiasmann/twl/textarea/parser.flex delete mode 100644 twl/bin/de/matthiasmann/twl/theme/theme.dtd delete mode 100644 twl/bin/de/matthiasmann/twl/utils/StateExpression$AndOr.class delete mode 100644 twl/bin/de/matthiasmann/twl/utils/StateExpression$Xor.class create mode 100644 twl/src/de/matthiasmann/twl/Container.java create mode 100644 twl/src/de/matthiasmann/twl/DatePicker.java create mode 100644 twl/src/de/matthiasmann/twl/DatePickerComboBox.java create mode 100644 twl/src/de/matthiasmann/twl/WheelWidget.java create mode 100644 twl/src/de/matthiasmann/twl/model/ColorModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/DateModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/DefaultEditFieldModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/EditFieldModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/ListSelectionModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/ObservableCharSequence.java create mode 100644 twl/src/de/matthiasmann/twl/model/PersistentColorModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/SimpleDateModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/SimpleListSelectionModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/SimpleStringModel.java create mode 100644 twl/src/de/matthiasmann/twl/model/StringAttributes.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/AnimationStateString.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/AttributedString.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/AttributedStringFontCache.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/Font2.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/OffscreenSurface.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaRotated.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaTiled.java create mode 100644 twl/src/de/matthiasmann/twl/utils/CascadedHashMap.java create mode 100644 twl/src/de/matthiasmann/twl/utils/ClipStack.java create mode 100644 twl/src/de/matthiasmann/twl/utils/StateSelect.java create mode 100644 twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java create mode 100644 twl/src/de/matthiasmann/twl/utils/WithRunnableCallback.java diff --git a/twl/bin/de/matthiasmann/twl/ActionMap$Action.class b/twl/bin/de/matthiasmann/twl/ActionMap$Action.class index aa7755d28b8977a210070852a53bd1f4f6419923..899904d34b740e0b81a4992e975fd524c4f3fe07 100644 GIT binary patch delta 234 zcmYj}y$-=(6o%iUKc7}n>Yu7XYA{ILftUD9M^ZqkcH*uA_qiUrknoF8aRl1*?x7?EnA( delta 245 zcmYk0I|{;J5QJxq@i*}mg;1N8Fs4F5^ zEVJ`1JG-fxs>bbkxdNEL7RV5suFBZrpcXG~+ zJ(+~!JPhSw7PwI)BY|P^Ap1nfeG^6mg2JWpjVz}LO3V3V2!jlxY8k} diff --git a/twl/bin/de/matthiasmann/twl/ActionMap$Mapping.class b/twl/bin/de/matthiasmann/twl/ActionMap$Mapping.class index 05e559ca210f907d4eafb84ea90f3767cb85d79d..b4e4d37e7796b5ec5951315286b75547c169c3aa 100644 GIT binary patch delta 954 zcmXX_OH&g;5dJ3FWkVPsgjd2VAVgq82!@9s@@5qzJWN33A-KSjLQ@eTQpE*sUbLv9 z=7iqyXhBJQ96Wfm$}?X5AC}s)c$n_5zwVjt`F8e|=cQ-$`=2jg0Ys5>qZr+}@S;bW zThjDObK8wR^yi`#1JVr2aLA2ejA$6uV7PGycikAncrNZ?!iAU&CN)fHm_A;)6o;&> zLYp+Vx3|(s20ornTRS5ub9dL;WoQ(?)JAd1M#PL7P?^P0Nlaq=B&Avl4%-6yj7ozL$#`#qYC#qN>IvChH?%c{2Udi)DY)L zV3uPJZ5$7zna4v73ml7B5=E+yRf{uL?bEQ#@dzs#RyiKS)Ud{}jtz07=q?Tmn+!p! z3_2O=$(I~Y7qJ=%-1guN_N)WUM|r=bRht$gjz||tFkvjL#*LUUlrTma@?Tc%gk6C49=$JMF!vTU!RCN4KG9C6LZguq|9_OVyh@VJL@W`!lqwjwo;MQ zvt*LAj>O1YJHny#(HQ08hf*#!m7w^h#5Pb%U$&S&yaJC@ijYT&WqZ=g_9Pj32dyep zgQ14dYl?FuqlZ3%=`9y<=-~@Eb-!`}MK4t^pq|;g0^%qqa9B&Y|7r*7&_IzqEr{!M zo+o_Vk0?$N~jS{|NH->jLa>EvdEciIfr%%u77~49=t(4#jaBf%UC%$ zK~Lx~i`zP{4K_})HWQK;S*8omUEO#YA+*q;D!sQb+UUkN rsGtDKZN4vi(iellKzi1;;hG==bYGWYGT)bh@G5 delta 1015 zcmYLIOH&g;5dJ#ZWnr^{0LBn`1jX=J0zm{t0R?dp1bigOQ^h50DN4miA|+K6(F+&7 z=o~Ek0eFTIv^?nDyXD!^lNbMhW!bY>dYJ0&>2JRNdU|Ff@H7zk^!xn>0PS!zcnDGP zgrWr+6ha-l2gFNH$@94{ejQ$v8t|ix5ENgPapaBhq(yK5~1YLTE z4ESJ(6VxX1bkC>bDC#vt31P{tTPsdFXP^O%VoHhoieMt9p_x$QmR?izkbxGo5{waR zdM;s&TK!4uJfT)Rrl43;d;{`Kn}K5zKsfP=7Sh%2JP>iXS%rb;waYyatRz@(UVU!ROKh+RtF5$BHs7AeoxGFZhrY;XA z4UFTO_^yuDYM3OH|1V=bN;#R_;{7y%973gR*zev~H$lm*W*qT@A~An5XQ%Fs*_m;B zeu;5<^8Ul+lry*}gW~>_WZ-P8Bo)PNFdM39#j9LlQf!rcZY)`P zQk=@(VI27@?HgxgZnk+3b@{Q_4w|-Lm~RkP*I%KI&d zd6n}D?cv1aYXmQq_3YuyJDlIa#j-0cdq`|^txg{35GMHgWQV4_ENbBnTe-71zxg(P zitTv}(Qyn@2ga$BN8W)M>SEdQfGhG}%d?omG}Ed~IfGVic^IXb#dR)lgYm^sej%vA kj3hKnl=ALP-t}M(w_Iyuo^2WL5PFc}8JhehybFEdKXi1Yz5oCK diff --git a/twl/bin/de/matthiasmann/twl/ActionMap.class b/twl/bin/de/matthiasmann/twl/ActionMap.class index 97f237dc9f580c4ec4396ee05fb39b83f6c4bec1..f7e1babbdd31f6af40933b89591636e87b42aae9 100644 GIT binary patch literal 5098 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 Lg!%W~i%b6pNUacD literal 5059 zcmb7IYjjjs75)yH%$*E3fd)dDQraoyF?n?=w6r7$r0JwY^D-f611j81ZjuW#ccwFU zAP}_=fl{@;>IH$3**DPz;(9&_uG{e@RShz82840sZODgaP zEZwgi)WR{%913^z@7JT2z>?33A>48E&>6DVFb^gU(9J!e)*QUuR!U}6aChXOZdwghyZs1a zje~lX%X-L7-TdSqrSXi5CIIWsSgwg6pz$&f`pJx1~i7 zkTvej`L%%omqP+=g)Su*o(sy{fcNB?+(j*tgZ{`!R8LAxr4`&OuqNlLB^J|%v{++m zC=+L@*@X%=6TRHJ_Dn3+nJ`RCPi5EmQ02#c*dmEtFHlh+>Z)Ez{jDnA3@XA$8Z^bU zG%30)RFxO3ZEWyk2Od<=NV?|^wx?7yfg<;Ff17R%CkE(Yb*L&o-;_QWV{HgK^Yqn> zoeCbNgmS)Su2Io~xA6Apv|Wo+3(IH3ZDU zxfDz@x>R&ymw+l0NDLT*hMwXER)`iqdhw`&M+9yy5U9IWMIUw(KO;@rSVolm4z)-v zHskFo-hp=t+(Or#T8fGAigq1N>h#Zq@*$c=c^~=}XaZ~J7qGpwM`~F`6a$opk+!|3 zn-cLPL$GU5h=R@q?YPgkTL}R_rBP{&<=_s$lK_|DX?PZLrG=0C3pGk#qwk+$7fW$&y`zeraxvxefR*y z34STcMPHnhPbhZC1N` zNjHa3^VBH{=F{_(gxve(e3N;cR`FSUjy)IiXfz23b5587_vYWQa|QY0V29@}4d-?> zDEK^4%xSg9OlOkGM9R_!I+A+IcAfX?d{LlT%UB7fCvm2JrE(L4LFX-Z5XyQ84kl7A z2I=4-!x|3ST9Rcl?Z+8xS&T89Rq?!(sK;ahl_mcL6puU*NF|I@4}Zx)YgHRBtw9Z(EjS+})BCd^cN6Q%~7+lJA<=ndjT> zwoJH_c*!2V7y|1uO-<0RJfOYI{%h)w1e}4pJmk( zSXRAs=_{zXh|2T!`hc|Cr}n_ZvQdgha4T)9vjeMe8%JzZaJ%d6aeDL67O1{}%9=^s zaTOKqb=Tmps~yKW&$*&=oGfC9zzU`TKD{ai7>>>>8AK(9?E|VEC+-1shbmOthXzoC zS{@>QHPqp5`U=yF58?(Y75ZSmk2i6CBds2eHpwJK6%+TyVDyzAm_VE^%yFb9kh#L+oy6DkzJR9~-g}Ae zF@$g&+wn9dc><5(88$-42+OlJ5IgN#9?b$VngwDM2XTmrGAWD@9LbGQ9L5nFx>0`j z65tTQco*Ky?-Hgp@RUsv5I-rPpjAPU{r5e5RylqgxL0{MUo z#! z%7YyuZe%LJj|kz93E@w$5=o^o+{jgF-@#%iX8S$ui3r)b+*919e$ z-q==KJ~oceT*a6a=rzQd{GQ9FW%g(K%D*syFG)p5>Xm@^C45<69A7yN)g3t2bAoXx z9@3^r+P`5Bi{oi*!s zMD6$dQT_*#;g8sYKT*zqrkwvmBEG@u_BW*YY2oh_(Ho@AUn%&1ut|Cyr|{1_M8~p- zj@dY}yQiF`d>8SA1W_I*K-L`2Gv~i3AP+ diff --git a/twl/bin/de/matthiasmann/twl/Alignment.class b/twl/bin/de/matthiasmann/twl/Alignment.class index e98b4fc509dc5913215239706ca2c028aef12f9b..42300304602445562416a44ccd22e09750ed9e72 100644 GIT binary patch literal 2448 zcma)6TUQfT6#jDRK!>NP%Kop~^*&)F4PA8trWefecM1HcZgB{)YBH z^sNsSYh|^oT|W0mb@kh4VnS&uP1ZX5?C160bml(LeQ}p#sfSIVmgRy z7?<%#mdA4PnJk~n@on_1e>U~D9BuaFYRtgRDXSj%MARy72v`o2u=YBpj2)W_R=rFNt*CsQd6 zk)5*Zt<(c)=x>@y!-A>kg(u~G4cY>?2WlG}+?-F{UrLkyxGBFLKq@(~i`6_G48%rH zx7HWS+j$M`DaXyZ#Zr6rft@JY?rtLORUCJBX7toFI#cDG zUEH)Qj`*uN)m^(p-<|(<$h>DA*YR#>_^3&|WYc)Z+Lla?Zn9szU};@aLnzJ5wY_SE z@rGjmkKVDH_m)pw7`u2HS%XF5%6fU<@tm^D*@=xZ0|7T1U^G`QJ*j&6H^@WIT8wGa zGLmCZn>SE-;B0#Z4Q=JEy?oBAX(yRk-dCNml6Q6s9;5k`H>x?CE7tnSY}lHKV?AGT ztEJhdRW%0b21hBJE>|nL{IVkh5viYz%Q#s0KtA+o3*Vrk;lf)#FbmhQZ{a393kke$ zVFHsDrZ5>q)xrVp1o70upq$*qoa}}y42wD}yAj!q$Sx+!s4Q_=uE=s#mN8kzF~mF@ z!zy*M%ei9NWdUb+lZ~@A)nOJneSF*&i}wEh%rUe2yf>KQmAvlbyqcLB!ea@n+H#wL zlKo7>#bzC9Oz_+UAFa!LOe1qWQa?b+>Xl^eO0s+<*#RZl1SQ!ACD{rk*$pMx5PFPC z&y{4`m1O4$_sSJg5AlBuAA+AAwE;@`g%6?qf|l0^{6tN|$6Q<0*&yw&W2R<5jTVKr zbwQ6G!FUZ_2rd60%o4GDGkk&@>YO)CD+yUafUbew_?5m_XpN7(L@<6<|L!Hs_*sJ@ z^jt9{g>D#Jr)hr;ZA`k89(ou{BE;E3dcnLZTXs@-Kw%SDsGUx6XJCaO4 zIN!H@gfO!=3r6vzn|sPlzi(RaQ9DxXhg98;Rqo_6@4n4-sEOj3h6Ws(Pj9^8HJo}6`O!!bt~lE zpdf}q&MBnF6wkg*uR_j8N$WCvs82x`qU2ctpLbC~m!c$g89vmnp!cGoMot6K@bAo= zc}LP&=Gu|YGQTtFES-0!v-Ec^ou!N3bXMZ^Q4qUGL9m~Kz6R1Spvi3epVv4i8vN)x s`PdEet-HpjZiQ3*h!0(n@7%Y1=Dz1E_XFqph!!oiDNZ9pUJLI34fb5-r2qf` literal 2277 zcmah}TUT0F5dOB@@kG!>+o-uTu?gaZ7^~4jjW>)`5G!ax(%TV_a4Z)KM_Zrz8`}TS zw?4F{S#hgu=mAwXRu;ena?&dfKnXV2_^{{7<>fcvO<&?Rtf--wiT%PN|B zy{uO%5$n5BWT|8pDrKW$dEgZ2In+<|NJ+00BJs*`S-_c$uVn>pB;Ohv6>zV_H?#3= z0oQio(KEu+FV|04IjV#)yBJRqw&ePmPjU9&_T6gtv8DlxY@Ci zmIq657LTfR0kKT=M5*2J&7IW9?ox6mo*~7vjvUP-r0~Y_C9`5$3p__?beBXc)qTSY zmk-0Z?!h&I>zz8%szZYdy?!v8h7WLyorpCE=R(O=morw)tQ4Y&juo}oqKU-lu8(XZ zlGp8pM;3Bdg9p759+etluY|`ncx`x6YJ`2#XG()l8h&Yfq`@zZZfQKw&@By38Xs%W zq;W|apJ=!wjUH(%YUq(hKpHC=0&q($uAv_T0)eDiF*c9Odqyp*@0ARJzGOA8mv;4< zDQyM%;Xp!mavT$WFFEGh*E^3q?ynvqN5+?i0OqZ17yH|6TLx$36}`V26WklXP0Q zjIxFTSdUMy)%4SR_2^U}+}`H2s+0593VaQ5!nmfYjP!xPbbDB1OgneBwK(#2OBzh@ z<(O%YUn%MJdbBNRldx5Xd~mpW{!I0_mN(W+IYB*5?n&v$gJt+!>DF_X&XI#pV$b4Lxkmsc7e`5MijrIsCAl9;ay69XRw&7ZP?Ec#B-en9K{>EW za$J?iOm zb%rsQjZ7#c;+8%R6?IP`_dODEDP&q9GhWGT`^+k2F37MkmkrG;C>mtkki(9PDQF?c zz%iE%Jyg(A(ATPIIq3h3m9y^KnH*~kWpb=CWub&aYIXxb!NEyxN z)ov?lyj*!1gW<8^msk%^yue1d-}&PUq{96!igYXA00#h=q5mv1KVaTDUd_DX4Z|r} z@R?$hn!H>&ID_=tZhXB$&Be?aWE=S-l!9Ka@bB38m5O~dw*q5|TC*J*)B-!$CBm6N ziV0+jfMaNQ{~V9Wkt(`Mzg(bMR5Ukj*JgzQe9mfQ?f|}^)i5QWdArne0@nl}E_TCGGV{wykW>qd$T7b3XO^-a8}@p1)I1s@}1)rAk? zM!|&-;Cm?4r4JyEMNr(#84h#id_#BWMlYXF&j5O8S22NE4=(0BG%zpF6j%^whx&+5zalM zJCHm*R^XL8-{A8m`S9DFM2(eu5EeU5xJwTx{ZEY;_x(?*@{@8f%~=OC2*$sN0UDSB Fz5sBBHKzao delta 337 zcmZ8c%Syvg5IvKarj0imTVpjoDs2$!rX}vWlj6dK6uQu5y^X=PhAWsT_z!L_S@kpA zD7f$g{11it5$bIb6c;mRICIV!W^9ZN`}Onr1wep`2`%f;e#^uh!5Q&e-iW!lXmt9c zC`?V{2*qEvdm{wz#}Ofy4u*-}B>1xD%WlgnfM7G2$Xn2{$WVYo(0A)6^1exd?A7F# zJ8z+kH503ZsywT@4Bk{_CwC$|9j1fhtMe$%JgU_R>_~{{x*hW*i4vum?bENGgf1y5DOh`xxlL}FCC<_X zQBhe0!G%RhO0fiMwG9H=qzTm)1zW_8O%xRs)W^TU9|Yg;-kX_8dh^i7d7e4fTxS|Xt*IEkZiiXA4M z0xcBEaGqP|L`XQe`g#=<#q~(+ke*rZ3&k>n;(k3zdRaCmeOkFVF>~Hi*DjcaT}d8P zr#5Ia&*MT)C8?RGZm+3%Y*3H#toAC%Bf4p71%bMHN97!kML_L+4Oe}dB0JYeY&WG- z3(C*8hDNlXT#Q6ZIF=Ac;k0zk=>j8R+1DBkXwgtu-*Si!reJ}yZ1ZiS;JfuhT;_LF z%vwcCkyt9B-!j$d;qi%8jOZRClpLVf_6-rncmUwWF~VadHMVL$t4U*1qlL_C_(ayFW!r zRgSD>jRLR4COyN9^+^RKl%4TqQ~A=YsVO3biKEfJJw|fC_5fd3EEVt5TMdbxvJ8L( z!*vp_Dn5ZND%PV>#d&nAXhsX;?8->?;wLJ8iVG?(;zbod!_O5g$}DRShxL9fygA;V zitzlm9O=^slSV8m_%EsW6!xjuAVRi_xcxHRh#S3lS;a3z>?UkhaT7WeEO$yk)0rW@fA!*TD*lf5 zRJu51n0KZWvArry$AKaWMfuNymH2@FOBsM+Z0qz&zG(7Si};u{_4ayqZS@8;^`dB zOh0cLSi00mU{z%2^R8r^iOCGOrA}tLGJP^dh;g-Wis7=%IfkdZqKRJRgl^}-QX{cV zKgxWSV$r0=tAOMeYqndDCyhRtt8vn_ zId-JO&VMz1vB+R5si*U&nL0E3Yn^Rs6BRDk%tWwKTQ)Jjm2IbN(V7Z}%{09^u4^o^ zLYrl_KORd(SsRwlQaouzDy+wY?GdeCE-IOP%DiQl<=Hk{PB68On;pY?x(J?SD6Sn= zu*%s8>D4p9+xZjUmJ5MtPRl{2Qoc-^9*c#%A+F^OITtQT=MV{irB<8VK3?r38>2OhR7*ampFUWsC?!dA|x z);_f3lN>R-pu@)8#@Ga1QFlfS;!! zY}_W8br5aHAzU$yUQUw>uw}W5w2l>~Lnzp7?o^5?h2_web&|~FY?}Q;@CU|GIE?au zXADIF4^N#=P<#q={lh%Fag+>04Y=eTr>R)!B^1iTKZ!XmWQd7hfX7roqn2O?zo>Si z8oRKJ8eU5p%PD;=_V74+vIsY)2{-fIE#xPJbKtHnE8(CAdu__uwk>^*YqD*7o1<-S z#clTH)3z_R3Gs%L*lg)hA`kw{CQ*|S$3Fb3$g6!s@x<|^yxHoGe-g~XIb>*EO^N* zyu#^t1tuP^bwrUA(r)9G3)NwZ=J8ozk7U7?Plugj!fI*QX*8dh1@F!*JV%c z6|>9I2`p>6+ohcP@ZZ#BsbrtJ{hZ6V@_Z&t-~o^jE z#k9*xAu+(l6`pyf?_`N6P6r4-gB@U2%?|Uf0}SLl+=gkg*%XOAN++>e0aM*fA9;^9 ccs~oNC{5_|)Wn4^FkyjF&M!P(a&G|s2P*cpkN^Mx literal 5626 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 diff --git a/twl/bin/de/matthiasmann/twl/AnimationState.class b/twl/bin/de/matthiasmann/twl/AnimationState.class index dc4f1fb8114563d9b8ada46e5833fcb0df373bfb..ffa9f65875bdace9b32b1849dff3ae6b3dcd59fc 100644 GIT binary patch literal 4329 zcmbtYT~J(S8GgR~JG;vXEI$jOtZ5QsN|vRxh%^nQ28nGTKx`q=q_uY0J;F)hEbdQI zT5W586H}|b=$(#ZZ#q^w#+eW@R&$Bkd-YbG&Zy&se>0AwQGDL-91ff9#-#D)`@Zx2 zyzle8zYFjE=SNon^yBq7Zbv?b9k2|1QRcZghj|%n`8*}7Ct?UN=hmgV3nSv?)cm+_T2Ul7AHc-Fvk2EJ=Z!UH4WEnz4Py z6+)whJfSpA*p4+-S)8?s9=Mi?LN2>-JX^E{thX5=J+cm!?5FrhjVau5Q>sK$uv^AR z$tn}ALaP2lVIubw)ueBNg>RlvwpiRlXbYCZDPVIja+TtYy(mb>6}HikxhE#GOPY&z z?F$C>DkSEtvTqu>Z{S6RsJ8nNYgysm`cUckyj8S{HC}cR@!`-u(u|hG;abdKT{<_E z!r0R?m=Frh)mSyc{{!Ahg(T%o&lf5SdDjA#C$pJu@@?YnwRcaP%AU^lEo7a!zUgw& zcIJjoimzfC-&9sC-SWXZbb2;dwoi*6s4{-YS}IyOS|!hLez@Y4Y4YQC$!3_1I8K4~ zV#3hS{yA}x^y+<^uj~Y+dcN71V$a}j8_F3DR#6{l)~qlkEzWBi%%CS z#hmqkEw!!nT3mNZ4en|K_Q_7a9noWMx~ zFPnG;XH6W$sEMQajETb-GjUE<&WqI4l6lZQ+afr zIcnuy?=)^g0OgJmve=p?u{u&5K!04Hg z!nv8}j2@0X{CbqixKtK#`~f(2(ix&A_pF#&S}IkLu((SZI6@r46SuS z<2cMad(l8E4sw-X*51SK5R%wUYu?4T+v&M`xrzuTpZk8vZz7I!hiORG_wl?F!3{o$ z7#KEif5^Zm70tf=9~7e`={<^XP?)%AAl6sP2bLritA>}yc3By7c<_LP86i-!!!GI5W0Eg&Eb~)}mK)NpE7y?(( zW#GXk96E9Pdwdo8EvUcNY=*s zx0sXPu2LkCB6-g@m}C}6KE|a9(9#d-{f9Y5xIfKVNf+?ApQk3tbnT1wsb2aa^&KR8 zQ>#eyN?b7Zdqb;e*$RC(Hoix3Z=(_4M=MqsAMda<{6IrWy8?Yko4%kD4^o8pB}#%i zu%l2{v6EgQq+?7W*9aqoE~O);jc^GawKjN{nfzm|(5)RYUt!F%K|SW|dLHw~s7S2b zCQ;ZvneoVGHpvEbp1XDMrzHC`lKnZ!zE@@UHeY9(A8?Icz$rG@>yg=BOXim(^Q#X{ zhTYpEGw-ETqAI0W(5t-W68SZW{Dz_NTSn~rRYVd#k%UhqUX?l8N0K?z!(SVo)-?3Evo>u$=E8riily~^bJ3QrK_LWC;H<8N6 zxV?%b|Dcf{E}rUh{L*oIjp~G}da8FF;ob}B)EaKv0^!E(p9td51o0Pw_$!O*-x!O3 z*I*=WlT_wLrbO#zQf)?X7^zxVT>^{0ojh1?Q@RAzaF;g5cd?@@^f-I#qkOlP(r@7CSwpUn1uv431;dHFZaC<#zsqVJAL?&i?{5&v$A7 literal 4122 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 literal 1567 zcmaJ=T~8BH5Iq-KTIwQNM5G0&irQA8sDK}(fFK~TkwgfI8Xp!|%i_`{%Yund{vaPT zDkPft1N>3OGxs*d)YX@J=g!WVGiPS@=dW)+0Nlpo1lklbTTW@$4#REN-ru$B^-}oO zE6w@AmJ=ipQ#i9@AKE3)uGdN{8#~Tss1SRx@N7k4p!#oUS)o1j_Y~AJ<2~m!VI3QO z82Y;k@xZNZ(~+Fo^xV1|PBS=PSZCn8zvZMrQVVC1CSc!@#ZAC@^2Bp0wO}%L$Ye`dZy{2d>94C2>o^dTHv&vFnu-MsY`Uk1O=%|4vs} zmxxIVcX5wRw)gg&`WD;5CjS-OASoyDfT1}VrOrPk=!(KfRQ~^DnW5U8*@Q|G582I} zUI#wrxh}7yvIPq_F`|%K^$&tgXVI1Uo-zVQr3<*kDYkQqYJn0HwUY4 zj+M7~Ep!ogny)d92CVN;&)bjD{TV%<=x;+W&lGRq8W&<1=d~BaaU&aOo8Kj(zj%zk zV)iQy9$7gC&J-CGn`~fBPd6S5OL1ajMjgxMIbd#jJOS*fcyRYeTCea^s!prXJjsg>&Q2%De;#0 zc<~DcKhQA4>d?-4O=6jV28lu;5}a)XFGYfjk>H_L@RLaJjYx2RD|jUm%;l#L+0z=k zA(|`SG5S0`c8uE;-+zRO^!+20X=lZrHuj*{v&J40dye)I9(`=-)!HAVm1eINb=1;t D96j;j diff --git a/twl/bin/de/matthiasmann/twl/BoxLayout$Direction.class b/twl/bin/de/matthiasmann/twl/BoxLayout$Direction.class index fb9368897dffa5e7b624a4d42ae4100f4cb9d1fc..66137b054880102cc0e7498e6a89312a03e5a0e3 100644 GIT binary patch literal 1143 zcmb7DZBNrs6n^en)~=MdfeI586rmfqI&`0gWQZ7-G%R7b1pRawb(VCuN!OwND;V+?{7Z=tf82KiX{Wfury3+$QdxPBCk~)BL*2C zN{_sb2`Oz2j~I-X)!oYL>dxM#!;pIJg>EDA0>NNbgmA+xpSRm?n<48Qx^|04(L0Z~ zTU-b`dhgrMf)5V=7<8h=eq@P3uW#?}RkmbCZLz-TyxOiY&b zZUu)f!lu{*Kk+Xj``SU0Xo&Y z(5qyJI*}*;9qN8sQ%<3uAQdZy8Y{y?KggtXY0vi6E{1C-U=r=TyV1CaWn#%f21}&P WlP!V!Sd8TZjFB|RTSXS5<(WT};{-VX literal 1165 zcmb7DU2hUW6g|@g7Pebj(NgJ$pIAPMV4LU**ib8t#BE6mB|)DCy5cs=u345U|4QjY z8;y<6{wU*}Ez*6_AjvXw_ug~vxie>f{`z_eU<+F^W*Ab(dZEW%_r1aUJ#JYA_oG>O zVSm#2&>pzSmxiNvT*J0x1Q?#s|X`PRGMMw2ZLT)cN)BH>I^Z>?r^io z9Ye(4O9c|oD<~77RlzLPsT4IS7Qg&AuvTnNI!E*jF)z3k z@PftQcS=bk#OkfU2#fVIEPWxw3=;Go^}3}nhcuS4PLIflhip9Vu}L*TlbqdHJ;%y5 zI79^)gH&%XV^xSHp=-D^hCic01Ux>%QtP#py=;|)qJ3%Q0(WztDRU*|ij7SqMCiKL m#~fLz5xtZc%U&S$1MKfO30aSG137PfjJ!Y+o}qxva^g47h7KwK diff --git a/twl/bin/de/matthiasmann/twl/BoxLayout.class b/twl/bin/de/matthiasmann/twl/BoxLayout.class index 0e24890a9216675c9e4ac449a01b9f4dd14074e9..aab92e789b015c9b8629bb567b5db398f8cfb1b4 100644 GIT binary patch literal 6674 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 T+Ad?5iB!e^{y7n+oHp@)-RL&u literal 6700 zcmbtZd30P=8UNkPKDkZPz_c_=8)zfRq!OTQ1kwh&P#R1ZNKI)F&1>eh8JNt($)rsY zRHTS(6;ZSWEEWn8S!8L`0J4b6s=X&ec^LU`qx zvpag$tX{XIGYp048dESsVP2yv3^&UJ!_>}r(p)_}u+dDfGd3nng{sa}pONS`(s6lq zCcPwmsF;a4*==EXP$xhtLYR%C1E??JwHzxN$3T;ib!*m!XvJKOa%dTSM8jv9N!N8{ z`6q83vKZ9}AV>~|3KqSM9ZlUr#c>)fs8FbkC%4c)F(YHzA)+v)D`WIsu*w*8>c8|zjpb$kN1;L#}Xiqk9zPw$SC8QgY7<$GCeZx1+78JAg$B zv(7iR7%d4Sxw&Qaa3Zlb6;Ec&^ywpg=AguH5anUC;Z&jeG=)fGXMTTICe2u-ARBKk zkQJJX;LZ8(pr{w*xtD|RDU{RvRq-U#Dbp`JpP{i5%!rwNse!@ajG0|qnM%hmOeHf0 zlce6=U^^w-I+{8}(8o18u}Wda1VPqH^Ud@P& zVnwk6n}cf=*ef-zk_f4wOIW#=^~V#jw3!t9uhH0nuP|)6WX((FbhuY3Ck3g$PjZ#V z04=X|Jv?$-6;DnT7x33>d_#OLVJh)uX|v*s0tY!^jb-O9jT>ZVRpHKT6o+MN_MtLi z9pw1{RXD9=-gmg7%@}1``?xEi*Jru_RrMB_)tx}0uvf?o*S$z@+JQJ;N z#}(z)LzZCgw$!Fg3>=&1Y^n+1A8Gv90^Dx__KsK^{q{!j;+698tj10FmW+O)@q~;# z_?gD@!b&y}ta{`)--8!5UXoSo=rBf{d4-oXet}ABhR@Unz4G-T2%q1@?)qiK?d zou(IM(sgiDCJl!5&1S&*W?#bZTJB_f!_TRFYUMt~?_l(PR31R&K5OSu{0wsiIDt}5 z#7vH~y${u>;giUi;mA0PJ7w>*=mFGH&aC~I6K&p)hP<#U0s|KC^EkFg3sFhMB6Pa_ zq9c?dEbt5t9E(Ord<(w?qA$7+O?Pon2EpgICQmNF=F4GYfpcCy*TGgLFW1}*9j)1q zrsxmZ3;HoS}6^^&wRMV*91d?MDS%`A}M3l>2Q7$A2 z_REDR=VwvQcSE_7C_9MqOrq>8f>Qi_5Xz6?Bo~x(?w!Ep8dsF8@XpI=@+E$*Z+;3> z9!A@Ss>KJ;{ur5^(|jA5rOW3WjJev1#4fsh9V4!r?q1L6Ifv=mQ-Hlb$8f#$&JK1) zaz!P_OR&_@Ur2GoMDXXif?t*k(nG;7cfdDf!8f>pHwb6;X-FajY0cAUcjS7cqTS*AT1VXmkjyCe95E5F3LJWszl)I_%4ef(TRdxuYm|uzX5D7y_ct4Mc_@h8cNV zs60cZTZ@3$R0v|)83JN+4uk}|EFF%TyJT%Zj6N4}(L( zVjf*}#bQsbH^!K$>2LS6dPh-J7mawwaP=5g_qK2Ms))CC&j)|4%Uf&b<+YUXRh|OZ zk=n2E1i21TTyG&*V9Um}T$g|IoXY28S-y_GE#q5tR;YQ1{3yO1Bn9Gz5X#<1L@8Cl zAuksW+#Q4~CxFz4D;9Ycd)h~FL~XRr0%;KX;_V()S3{Jw6H)FWmK&)5MplNKi0(!r z-EEcWc%G(HV zFR2_o3@X1#xFxCN^<;7?$FZ{{m3I>5U8Lu3Qh5*2-A$zTPD8@8M9%U@S%D^91<XgvT5FOAOo_9aKdpm*=-zb7IwX?N6;)|5W z=Iz7X{k}x2o*9aSBjsbbZ#_r;NFbtn$FP4rhvAyu-d6wipo#<|-aQ}Ok#9xMWH|+1 zVIT1-o%b4_US|n=g9Yukn1eT2h~Hu__cj~V-(dxQ&uIArf1CLuyMjMq1b^ni^%vfs z-^Nb-&Ej$gI|3S>E9AQv7SbQcoU~eUYVBe*lzWh$Wqh2gUd~^`+~Y51)PFf1;>b@F zm*8QJ0>lx)_c;pk_q+4(h&5Wlqv=r|79k>9!n6odVlR9B$2lq|x_bP8BW;!82KYXp z5y1dFDuCIn$BKa7?aH8wz z&AbQ0;=v!fc~JL80+t5@k#g~1ptuMBPR9O0d;duW|3&WpO%J|9=H8_T|AUigZ##`% zp~|p9dC;r8NGcyjlpmLolO0^&sY3s!2gOIlJt+Ql_uvNJ&)hutWX^+gi+b=q`JVvK za`i5M81k|RWv`jr_(Y?yklFS0ZXBO${ia)uCm-kVZ~i!*VP7y|>bZP+Sgo*{f&kl# zX*|Z~@)EW{9cd9|w}cA|T0%BubEh&8`7@6lN4&{+EEtu9v6_EB<=+eA___2P1-D8y uqd;P%71(kg=8r%watzA&75`pykyGO$rwqTbw7tQU7ODKJ diff --git a/twl/bin/de/matthiasmann/twl/Button$1.class b/twl/bin/de/matthiasmann/twl/Button$1.class index 7222299e02fe18dcb4bb01f5b1e23f63c2697ea7..7e2390d35e5e56e6e7e8980a6bda415c1e262e32 100644 GIT binary patch delta 354 zcmYjN%}N6?7@X{X<5stBwRWv-?P=X26%j8UdlH0#f`{Hx8bNGN_SLQP=4`NGWPOWy6N-TIn+d;&N`s{jjC4jU0i1=}uaE_Phhb-%B_57xlo zpDHEqx~Z5>P}iN_U?i_H zhV|vq`MpwNkV=L~2a(Oti_dgW&Y##xt#msc%Jd==ne5(>Uk=fvF>M;g$!Dzkcm#ts zz?1eXSTcq2Oq~Ir&>v=F-m>$%91w0;2#&NVFn delta 349 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 KP#qU+Z2Bks`MK-> literal 8441 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 Zmym21TmJDyM77+$r5;P<4mpJSUjQ=W5hnlu diff --git a/twl/bin/de/matthiasmann/twl/CallbackWithReason.class b/twl/bin/de/matthiasmann/twl/CallbackWithReason.class index b54f15bb67b505eb08f443bea611ee1ae49255ea..9e174ed62c5b437d837575faac610fedfb88c896 100644 GIT binary patch delta 99 zcmZo=YGo2Q^>5cc1_lNr1|D_>E_Md)i9Qw+SL;k{(wxYz?#Rd>kd;`LsGpOVm#*)h ql$DxX!p6wJ$iM{D!N9=C!pOkPzyjp60(ndfY(NZQu`_UhMK}Ru5f9S< delta 100 zcmZo=YGvX*^>5cc1_lNr1|D_>rirsP#n>5G7#Rez63Y_xa}x8?_5G8wQj<$23Rp}m pQ=jOeqsPX`z{tQ1)WX2P2vo_+zy{>A19?mg96-zoW^qA9xB+0+54HdR diff --git a/twl/bin/de/matthiasmann/twl/Clipboard.class b/twl/bin/de/matthiasmann/twl/Clipboard.class index c5b189ed6070f8fe14a355b73834d5a63ea6992e..5454a94257f003f51ec43e1a0b621066718c5d6b 100644 GIT binary patch delta 802 zcmZ9K%TH556vn@qdtutkt%V|pFIvI!Xe)2zDUb3{Y(WwT2{D>nYD216u-3=Q{teBz z(4{N4;G+0QjJkB=AK}W4aj6^QcW*H!-sGN{IrGhTeseO1flqXKXYeq;Sc`6sB#=U{)b%V-E8Q3pN&US>cL}C0wu+Yza%;8QSi!Y&AX4sYDt~P#|BCA#F`@5? zHvLR283GYc{#{zSK@RC<8P$*EjQ%K7bPMj0ySP?#GI!PsPA022%$p@PGRRiDp8@G! zheaE?8sta<)Wi-U4mgoG&S-H2TWq2SO`O?P5t?y=D?eIr^2p!?m9Dn`HDm=wDkds0 z)A3iRd4pPs=cwnr#D$Xh0N?&g_)@V7tWe#)=NUye{S2>a8+>#cfFf1^L##234vbMT z!q+iMmT`|JLcKy5r*NA30Ci_@mTocfwlWVy`1@dVBo)q?@R!hr_9Nh@JZx|~Tm??Q zgT2Yi2bSZBLY_*H5-7IXCF3(d eEy>P9#+j(1xxEe}%4=02738MJDA382MAsiLn|i1K delta 785 zcmZ9K%~BIV6opUEOc*kmNQe?h5E2t1ngk*w2pW{|BZ>*I2pe2zjWJSz6i`$Om+=AI z#CF3IxCIx%zp~VY3zjbRA$$TY&kSUtQ#I3l``&x{>ofh;d+ha|{CWQgz&KWQDDs68 z3Fy!Se4Ez3m9AOa8|l@@o0W3Cxe_o8sBoKbp`-a^KVqO8=XLno#n!WWdTnQ?wpFd0 zxPTt{T}iT~8@(p_5R|`_oX0>v26S8$2+QYc;H7Z8Objx3pe}jbxP+LFs6fO{%3rF% z>}3qeZ)(=#K^#|gToH&e8)YVeqzr3$!_JJD7)4q>(h7q*#@a{@f2qD#-QF;e!Gw;i zoL2h!ucJetYnSWwQr#+Vt?gOmN++fS(EK6gu84Q&m>1lc9I;b@Ql&;4syo{T=5WV$ zVb(s)T@&}PBtL2o&X$7?&p5vsZjwb16UnW^K*}S6{K$b|8ETTKs^ybslj){&>5p>Gp;*~0?X`B Gu<{o$J9v)( diff --git a/twl/bin/de/matthiasmann/twl/Color.class b/twl/bin/de/matthiasmann/twl/Color.class index 54ab455235418f3046a57fd68236fc11b682b5bc..092348944c8ca14409ff8dc584769f418cd94d67 100644 GIT binary patch literal 5730 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 ZTXCAQm~JzVR3xDL$RoqRTdLsO?*irQFDd{4 diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$1.class b/twl/bin/de/matthiasmann/twl/ColorSelector$1.class index dae55c316df08d8339383382e8559028f403b12c..bda11d994f9ff290d0e7c6a671a2c61f0154e9f8 100644 GIT binary patch delta 392 zcmYjNO-sW-5Pg%hCXI=tO{><{k5m**4;7JKJoY3gfTd|1z4#9V zKfr@Oz`K7(oUKA#*qQfc-@Mt~hx}u{@%jD!0bn1E0&=K2$YaI95^5Ie7FI2+W#@zJ zYp)D~dz2({+)-jOkrTq!aprG&hXiw+CLDKmyZ0B=uB^M*K;XiH?V_Mjh#>Q}n*@I- zZbeIpWTh{P`uK-D^w~w1NM~%5 literal 669 zcma)4%Sr<=6g}y~(K@#E{eEE;A7HI+1VxadAXGO>UB{VVBWVINsp3Bg>OutUfOS{LgwEPeLN}VB7HKFJML$8l4x^hUP z&xeORLweZ}3N@+4NvnAwqBDM>1j9hh1YFg5BwgMHGp-0N5Tniz!x9Vin^eR(Ww!-O6t z8Rq|-nvZGcUJS^_ibU8s(pmh(zN&Z}ix_j%YMSns6^m|A6s73(&`o#`Mcb4+B)7Wu zM4uPd;-kun{NOB diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$2.class b/twl/bin/de/matthiasmann/twl/ColorSelector$2.class index 507fb00feb42d7106fa1ef12c0c537790a0713ca..d7035346f0ab1672fb6c1f15a42bbc3731dcc8a7 100644 GIT binary patch literal 1521 zcma)6-Ez}L6#jNCS&op68!&E&-4ZaM*u@Tkh7u>{$4$Vk4RoAIr)_Q&dB+h|q>iK% z9)OpCUX`2N^rkay(kU}M0B_NIUI2!Wo>erY5N4=7+C95__B-D>-;tiZ{`)C_X?!z+ z94_cMjEg#1pG#{-$0d9rhszpfb!ceH;j$d&gH7Bf0F`ViS zL}T5GXl;e-mghC1dv2rcyME9YuCOCNXp;M!<2g}_;f(n|{3n+gl(s(*42QdpCvI)5 zuZm#FT6Jk>wCmfJyKDuHTqm1~q{9FPqvLrZXuDPz3fejS;c%5{BB(oFD1xZHW(5@6 zY)cB>qp9Pf4`Ic}d)l7z$?huJyCka4m1x=tqI$4V&^dyGu`pP{LJ) zu>(HWHyn2$WNny3kH?S-BZ@tGz_UrBFlbJ=Y`M;0kKOkS>cAN~6kqTA8-Xnrowzt} z6}~QsQ4JS7+x0^t))Ud1KhV%N@Ff-ux(RHhlq@AFz1IMJdbT*`CeedllGNBrzSSdq9X z?#BoJxt%hl2>EyUQ!Bc{8%Crod5}D5nMSb^HK}46naK+gc|uMSr@_S59rm} zpJ3H(@ZV|0QJ^tRKHwD`BioQRbQE!%WGipJ7pzfA_MX5Tb6x1z@NT1#3dkg*B&E0>-lr0?UZervCXPdi!ROza* zPq&UkM7IuuH}El^!byG}bv}(begQZ540`+$?$G%%pT!Tn8K=`Cey4Gg{->bQSVx7{ z3MILOGqlI)3wIl5$)ZwV-U z$MgBWkex66f@~?De+*68gp&F#E}xW6Cr9uWG=3#!cw+C`o5;na;2Jf>xtO6WeFpp$ c3hXL%F6BS~XkdzF1?TC*J{IFL5-a}w3+|*iDF6Tf literal 1518 zcma)6%W@M(6g_ty9wU#1u#t^oIT&n=9>F4l5Q1zIQ0yR(%|b4vAZ*5?E_+}+lbUG* zAHYu}S%r-^Y_f=*N~-b!`HpN-MJkItsf0MUM~ZovDk9ZP-|oJB?z!jQ>F@vf<~smY zT(_VRCOe|C;YhjeIq`-Q1QmJDuhc_7j9S7Mt_-88ss)2E{wl|XjwcsA;dcmq3=vPA zX2j;JJYRsUvHPqScygXFUHBjV#WumHhaGVMgaI2S`clv_Xv0F9pcjY#h&dGM#deB0jMx~(5rXB# zZO8XGf36=zk1Fe=dY!iMHmU@>!_}8UWv#ICjJ1zv52dEgowe}}&Jp@$*iC|PxUl~S z`|3Dv<4qi8=CNc+hxXyJ=;ZO!;3r@m<5fa#pVxoU+39u)m+^rG)_V9^s*1bgN)g#u zz#_rycxxW#VixL+B4ejo;b!EDMK9@;7y5HXp>RVj1g;;(T#_Xr*Tas5YlLI3?QR=O zswqd^NH|hl5%&}9=ROs?5dpV361F2H^ zD}L?3{*q@J4yv_ehjXGIk>R<`XVmH;4Do2FM(m-qdMN4A*bcIvqF;?Ug`_7)X~lsa zqo01lApM-6jU?#l9vYCw81jrao}8jVHo1`90326O$lucE%G;Qj-@?^WIlql*4)+;q z-=cJ*yo0wc7~|*6E#yi$BWrGBCfOb6PAVT|%?IXg{^9NqIb$1Vnp+rnpizGOi`|_P zAAa{4-72RF`UNTa6(jT;Cg^ue(;qlXe`1#H1^SDN^*5H;r%k)~m=#n4&38HOrF0AL z;R0u%VFfkJ@@U~Y=GfA?Ff;6bk!763alFrKW|H~{`kr!NdWta%CCWa*A?*o!Y3fSo zssWd0s;JqqOy+A`n#+HVfqW+O5T@}+f3&B1Qa??Hr5OpmiSD62dfA@he9LhYD|$-% eK5%Bks%t*vnT9K9@Mz#FnpkE_T~MkI`1dcar#=$^ diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$3.class b/twl/bin/de/matthiasmann/twl/ColorSelector$3.class index 0afb1d398435418ce22c026c29c7237ee44d4aee..050fb15ac49fec79e29fa6c8d0d640dc105476b3 100644 GIT binary patch delta 774 zcmY*X%Tg0T6g}NDFv+AthCskT&;$fS2$Dp^2O^IEAxH?Xa^Y@>5rbnwg-EfWit-N} z`v=&$P8CGUg-aKH03YDWolAG(otP@ishYm$+`f-<@64s=yC?hY_vbGFQrL3Ci@1&s zjO&QuwhI$(vI!kYq;%ZDq>j6oa_Bt`_g#44ggw+St>KY|8T-vk`&Xh13?f@D7prN@ zJUlEOG7Q^q2jwaY3^4HGF+*T&-#juWEVH~fv2GTdX{?0pUUKnhB<+GEC?9r6!1GJjRgiaB(R7j4a))8${UO$|Lb`zQ;?s)Xr*acYZBY3?T6QHx5V!#*CLs&Q% zI(pGZmZ2Y^R)rswuaa-0Up<2-b`I8nQfE28dg_pKv^CJ)fc6QlT+2Zb?hi25Th#9% z-fx7?;ER9#TO!_os8a(U#*v`53LHTxk^#PqHlBgtEAaAF`1l$Ic@E=z0|~y4B+p}p zZz99DPLSt2P4zKSn55(ZT&Gf`wKa!>ZqSyTM)QbZkY*X8`yQy?D`JXHSFl}imh^Tyu2#5s}jQeRVq&Q4TX^6Z2hUWc& zx^mqFt1;2Ia^cd2dyW6Vy?UpR7$JbZh5eR0l&qK!eYKf}ns7lR=rBde-XXTfY_v zzJgH=Bk}`J^$EmaN~R2jd`K{`37x#x1d{{Ul02@Bjil*hG+rFwVos^Fhq;2$pyhn|v61e59w`x)67%oMd7ZYrWEI zxQ}%bKSSL;zy^^#B$6o9z#oi5(ZHBScTK-#5hCvN JkD%DE{{{Rkbawy% diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$ARGBModel.class b/twl/bin/de/matthiasmann/twl/ColorSelector$ARGBModel.class index 12443d96d4f65bbe195d9fd11699f9d04dc75a3f..d00ade08d72384291ae6b0f99e644a5a93cf2ec9 100644 GIT binary patch literal 1118 zcma)6O>fgc5PiFGzFaqL3Y3qQkkCN$(IyCvMM!NVP(;dsqDmY$$x;lCE!mq=ai|a{ zK;poG14!@-xFEGf;=m8!M**{rlcrUrarM42HKDB-I$TQRUELqa{ZgW?T_g;rPAdqUA!1U=!pb@jrjH$2Dl zH>4vw%JWyK{I>1d>JGzV=|Ae5jvwD10IessFB`&f+M@G3bF(}i*}(b><*Q9(HMV^ zHzsXOyzmG3qtr9YN-1elxnOqAIq!4MyfeRk|M&^uKI%zuhFV`X212QKwg?8obsOrV z(`b5*=XazdE#>*8^=DffJ6>NpNf-?E(*y&ZZmjnLcUi8OKyv2vxW zGYcl-NHApEwkw|u2R-RO7d=N(rtMk6=?dT0`zUDWnHg5kp5WLlntg6psvR-v3TH@U z>P^QFW40T`QdALsrm={dN!(y4p6QB-TY7fW8v4F;Rp^+uIYN;EW%40I#3d6Y6vw%! zEWS6M#(Zo0vMC&=C#(+{vZQRHqAkkwy?3RB} z*J=J3alVN(-@*loT_O=laFM?BFB`VtguIL^5x7n(qnwe)pRcrXXqs*gz8zA`aXz9j zT%BlFA}x>2DxXd%`9yhbqFkdsx@*3A0P_IXX~}=03HE0}oheX$0xF;4e_%FQ;58PFyPD&iMSei(J&^L3Gl1^$5$esMj#~ Yo2fbD5sIT48d}2&t@vI!T6#w0uG}|N#v=zY=DA2~5CPG9iB1LR1uV`D9mba)&_L3|lyK%E=t?$QQ z!Hi%0;EXc;BGOhE$MG@h=;%25!4LYsIG(fFCaJTiF!$WYo_o&k{LVQy{qe6mUjTR* z@5QkV#}e3%<19{e<75&AJjKUPvzSVdnC8_CubyG?EQ{w@oMJJ{VlIi(IKwv1^6G3H z=WsrO3%HoT^SH#T7g)T=$}jQCVCBmiObtrI6@iFVEeYhNOqH)1o>#VvdeyM)yth!v zyUI3|tK9t2Mcb%a#X{96sWE|MvEkMo*WU`H|NU<3lC6|kKV35oPYH+%0x|MdPd_9u z6l!78sW|Ses;Hvpxa2i<*s?9}h`?~>f9Q{#5r|GYCi&VlW!Y+`QN66(IpcDLPWq;t zqER_xxEAk&!zjZMi2HsgTxAI81>08cWW}i06@A+C-+t4r+k`k_)M}N*xw5K~&%toi z{?~$i#TjG7agUXGE3h-vTU(#=Kqx&Gaam9qD$F>mNd<9;2(IG`gBDzR9z zWHpp@lws-Eh21&^uv5o=jOrM~kd8-K{VJ~MsGzFDX5p}?p{n6!9WLrR9>)OyC~mXtmYGG8(5 zQvOuKwwqPGBkV@2UIe-+pF#Q$W~SN}WyflzHyv z;Y|4D^?Fn)afZM>b&fKb87Xv}oToxs`$}PYWr2-r`;*Elm8mpF!Xj)T?0luD`AyeY z5Eu}A(k~me6G?Dy`7<>Y(9^@cNc%XAVLU+E8Cs1((tjY4%`HP@ zS0O*4ox}*q80kQMfGn+bUL%1V_R<{XZVoKWAmUr-%jQ-Q$>#c^x6viBj9A;!M$&=& zh|WJoue{+~+|s-iSOog8kA9N{1wbzWyWn@gpQ(j?pO4Xb6ZQLqjZsfzZ$bMW8?w0- zbZ4W>i1WdB$k7zP4lTPvfzb)gNg6th4Ky~=*mN5`F)+l4AM7By3F1v?@>A&Y7QtM> zeR35$D}X|Ng)&JBvW1h$VW}0#_f>j!BumiF=5T%`3Qf z?+x1Tr@;^?1xN*BA2YUvDKTlWm3c8K-snPc$5Vd;c6MOm literal 3361 zcma)8`*$1F5&m{1d;Pcxwi`km@*)wbEkm60D4~WD#a_q4vSlpUj!A>rSQ~kRv@)xe zg9GLL45iRQfwc6EOCK(eKmzIM;YWH7e^lFVb|qQnC@uEcd+*HLnLG2%+`0Pt-~ad$ zz-{=*fUaR6XAc%F-(Pa9a?x_#LH}G~aJW<`c^SK4FZv}f7ElS#whTly>};km=j8IX zZ=h8}&sl558Z20DesH?ty4LA}ts&wR^E@lnOxLsBobB1(;K-_L6`jRo(aPIH8afv% zUb*B2q=wl4)~zeKww)`_Eaxnr$7&C1Xk}>S*kKI^np)TtDo?#7mYGXthsPGOiDM}< zma}7x=){Ol%v`ZuKbBox<_Y@AB#*eqaUK7M8V>e-i!=IXHAII?IlCPiu2i&kOQ@*JV7%%}vX;nx3u>_!$DWQVo9Tv*L6 z*+qu1zq!+aH0hox4fW58fBO`6V^16QGu|*WorvL}ftxk#ZkE@&0fq0PPeU6kq?*hl zeW{Hq$@re*=7;*5#!xSgFu?*@T%jEu8rpsFUp&;Xx2ba7gP@vNz`k8|U{~{)kIy6- zElaNw6i{_@=aS{-3id>)QYKt2eaU37XW4RGKP-H4>kb72Z5>>FU*T3965bJoPAK91 zKw%I&WOa|iy5f_H5jL1aViRD4F^SvPPHK4U&=R#PQ>y zem}#cOt=}p9 zJ}@+uo|>6j7*3_D5&lu({RTmL%A7Pu4E%|2^F~*lEM+Q-OQVim$eEs3@(gsb?`KLC zZ_yrgl$uqR-v0z*@OaGej@PV$SsKOV}V5YweTO( z7&$`vb}+Lk0$pA5^l|QxIwD_W-RPm#ceuI(I{(Ry4_wB!_~+RE2`L@D99y{u`T}-x ztz=Ez8?lRXR353Sg-LoK7JA|XpJQ))py#HmIH2P)`Zp|Xd! zZYSz)Coqi+-OAEZ3nJa!yGXDzRy{pMKLxp+gmyM`u3M(7;7bzMF5~tM7q&|l^(PV4 zpF*epG`8u_pjUsc0so!VW92aBy_YDlp;V9hgp`0X{{>DGkB6=xcj&LA?+Z2~D2|(} zwD4-{dj&m5;K^}O5R7tHP>QZc)=58l5iQYm$!%plFeH_+hqVU%B^=f-U{rqyEHoWo;uReWzn^zaQ@8>!VgQc{V6RBMpOjoRsup!9cHI~N;} zXbtUlwaGgY0-#+GOlaZiC7hrC3ek_}zQ7Y-{Dx5k<~g@-v?IEx}@m*76m`3by$mpQ+J zH}N*-ci7(E=e&lGaEW7B?TuGkYDSVWj@~f?AN&W~pmCOA4JjGMHxC=UZ>$0`7?`s^ a)1;2SKuWMD$nD?ociw87@8pL^d;bd^G8p#& diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$ColorArea1D.class b/twl/bin/de/matthiasmann/twl/ColorSelector$ColorArea1D.class index 22155d37a8eacd26b3bd6209969eece4553c6083..c7dc5d4b39335a3e82b2fd9324f753b366500869 100644 GIT binary patch literal 3633 zcmb7HX?I&!72WsUCp}wwj%7Ep5@LrYwi8K?qr{}fkdQdGt3<_isogkf!q6w_*_I=hE-kSe7wF;>ANa^GU|0-`4~&boC_}@(PqJ(`qDj1#?s)D! zXP>jrxqd%?`Gpq&4B*9P^x$3}dT~OHW_&n_Q_XDd^WikksExO(jkl?_xBKx9+^-r- zO_M%ur1T@aNR85}u~jpxnmIq_k?~;xXZ^?`r*3h4$fICjOdWrxKJoydZY%mwLRqa< znsE;2{aC~WCI2oT-i-%T^B!f+dkwtLz=HzKseG=GcWkFDAQA%J@_eS$vrnLVJZ;Bv zR+)3Fl(QTsRz9DNjpnoY;O7 zl1tjfd#z-aEA8X?l$D*aiWxPpEs6~7a(GJFCE#}rI9jx={bK@V!g1{4Xx1u~Y;MMG zY(mev^EAI@x@@J+PFMw3o9mN@sH9+Jobt&`dd{X-IvXQ9b|P_5!D-56oEa-yApj9q zQ){s{m4!Twl5-V8*xJxEbqCd@2&Zf(a@HI#@mC7zwV4dNE-Tx)f`E303S_b}E3kQd z!8&KfoJ>BJaLOZ<*;!kKLrYQPu7Yc^rC@>4P2z=dCN&>?TLJ) zL_0j;gc~k#fjb%H=i_!}Zk`VDoU6k1P3J4clpW8w!P~%$y~;WhVMI(s@c|RNu-m{x zCNAL-6OZD91|B!@Av|GX2yZa)BtC57BREbwOnej{Gx2fNd;()8KB zYCeZY41C_i7w|;`Uo!C&zHHztCNATvCccKRGcQbh15cayCgLW(g>Mt2iSOXMCccO7 z8+gXVvv|(H4^3Rbl8I$JZ{Vtl6}({LN2>WTej?C+!yH&oD1p9PkZ11I$tbYnh9{XI z*T-C-r_sSz2Aia4%;F7EbNL(~>6wVR2&7c*yWE~oT;fKndwgw4;J}%N zaw*{Wa9otAYSzlNol3iqgFPXWCja_!qtq(TFzW-s^U1RhPZ(IsYuoH13U z8oIH5!}3uU`r)%U%sht}ikiRX(X8QQxAQ-sUjB2XA)uZjAP`WG6IVR^MbQU=Jsdql3AOUNXx|b< zwC{On(at4EdAM&G`k>ww)GuR8SLah`>AM0?*Fba`-iuN^eeDm=@|Z+F+wCx@>DTaS zzd@_^TXbo^!%pq@*u(LF_DAfcOcXlWumdp~BN4(j?BhsRs<9sj*sGB;Rl^+|cR*gF zn8(1Nf!7NmfXy$_R9(HFHRFE;uWNi(*=u?jCY20dyGB%s_!0-x!5=-b%Hfe4od`dw3Cj#0_uKtedfx3pang$(5F;exS80NK% zA0DguWf`HLV#|1SwsoS~H&6C+K#$UaLwapY?}qf*_SZN=9y#a@dIQ6k(ch=!Li#;> zg5LhV6>K8|n-<$}?ZIVqo($L&yow!Hv2)NH(tGLAp!d>3&~wR2 z4k=QT%^r4gAY?3~do9*(*2z}1$pE@#8zQnDcgWl5n9VpTgRT>%sf8>>uO&9KXeWFue7Dg6xt8 literal 3614 zcmb7G`*R!B89n!ErH$oHVx?A$gB>8TgC!FyHnDN*kcVxQD78(o$pcafD`{=Zkyfs> z3QnPgLYhLM@Aor=(55W}Xd0WCP8r(H&`ziCnf~7X+&`f+bh%W+T}$20PMefPWH zIp6v2-QWM`?RNn5U{Qw@*qOBw1=De+b7r|<+IGTuJf9dU=8L5XD{p0-VyVp?9Vl65 z_plC4pz|iS2-IbYh1sHQ*^Yon350l5xowxg_K_R<8KC)|oSk#_3f$ST2K!X(sDL(9 z%vyC2SZ_ebx-bIRXrK-a0z1~?Bz9D7-ee$%P#BHatRpIL#|@)3(1cqA8m25~tWp?S zhFum2bi`71^t8pmt!SZ1MiG3}%vY>Y#+s+e?h`kL=VfAL+dvpwal4M&1iEh+-SwLd z+<|QZ^=39ZWajf}Gjmd)sbgfuJY^>GrahGyuh_Pk&RYYD)QuxK+aj#AReDfOlAw`d z#>^izOF1?6CpDE_fy7$Dc(P)iMUFq4Ih$}8$*4K&JFK5IbGCCVmnEwLEw%G^@JNb5 zszmQJ5J#uVU&6pHbQ55vQYsfqse(DhpxbH&RTUzO(JK&kQ#CPb zX1IGt&D{l+LceB|-9SC=!3TBp^SD}Rx!&Huhd>7EiEuP$yXmEfJ5sTva&)hOz13xN z&Rtdk?l*7%g9=|&OC(;NNQMc1*uZ^CiyP=OW!qNikd>R7cC>x0e6@baKnjNiB3wUU z=Xe3+iZ+>d6v&QPO_;0gs6BxZ1EcDgy5(bztJ(Vvd}P(^Luz*1z=WDzzii8#I@9$y zf@3-;ux+)dTAdgJ$MF!U$(GE=SuwS>P~CD}yea-EAqS=^lv;C5h)PES>k8E@h@=|& ztaI;dksQ}&co#aBtCcX)$m+BTsF+BOThj4%E~2Pvotyz1uK4XgtJ+dvVsgq|x*@#?>c-Nam(%`Ow= zUVKnZko6JlIFXE{!gvN}bUaID+=EtaHt-poRoSi3 z`z?>BPedCtJ|_?&?5$0HD331;xLWBJk4;YEBw$L9rh{okxzOLtqcSYja>_#(bU zku&%M0zGRd+}}^dd<9?A@l~p9&1W0;7TFbgY6>SGvL)kr`H(m}4i)fA!O*oz3%stduE{ph^q%a{)ip@d|IY z6}^m_&a{Ca;UfL8bbVW<`~rSr;HTcaIj0`W*9=_3>#XUr-9%SM;ge)ljRQFr7X?7sVC z+)FxcXQ>5vIZHIC&kmrWL4CV$CdidK_tLKC=n^f0Z10YD&cldzzJ(3(mU%=1dpj5K zfj;dbqOC3Gu)gyOnp=C~3urwP5Uo+|{L;UE#%%#?=l`vA4S5kkc@AOu5;n@0u|;0M zZSobw*l(jv9GW@??byLq^;B3A5q>t@$zFgTJGY{PJq z_TsBz&f{U6VDzmR!$KbE96{ zGq#f*GD-sbHNQ`Go3zPIPul&#Kws!0;+@K-NqgX~XlQ5WB0fp&t(%Kr>FEW0`dE|J z6ioMPXF?(xYS@2%>F+cyc-}vI880m2%K^j#^Z4cp#eG;$IE&2t+t@6BfvxhFh|6~v z#Jd=jzrtbpYdk7{gGr8O<$HKm{ua;4-?`8ad7ymg8}J0ai$Ox(j55B*k)&u(;``_& z^>Gsa113Sk9)5nDV=st(=yqipa>dvTxy0?dD@I4hGdk{(l9E(fehKG&MgD`%REZt; zaIL7&7o9)hl1NPr^#udbV9Qm!d=)?L3pHu& F{}<&ejh_Gj diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector$ColorArea2D.class b/twl/bin/de/matthiasmann/twl/ColorSelector$ColorArea2D.class index 82fd634f316e359aa0f171618a53301d2a3760c1..57a7cdb0784758ae0a13d3c37f0690bd8045e7a3 100644 GIT binary patch literal 4211 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 literal 4192 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 literal 1304 zcma)5YflqF6g@Mvl$Nb+@c}44kP7YcC=U^##7CMmX#^94X=3~|-Hx!j-6h)v{Z%F= zfYA^B0DqM6-suX6O|Tz2oqNwcbMCpfKYxAy0bm)`6r{jXTURS^4>L<+YACNH(X!fo6U$T(&$`^q7W(|vXHM$q$*an)hm!~GN{1&aNixrnzgiYaoh z)F{_u)vj+;Gtsn#BBzI_8x!Ov$`)+Q64?Ac>j z_E%i7Cyr70VoI;l_Z3b{8%bG0T9$E*VmGLWN^qTi@h4}VkVH9(v6#3@7(uy$eFWp8MT%&OP^> zJCA4gKl(Tk)oPV~x}9hF=r*1$NrNPFB$+G8JW1wD(&*tf4X^oWDN+}@8I!Rg# zZWWrARN7>EyOcU43Cj5O2A}Qc5O*51Tk^0pMx?tdkI&(#egJ!vdEL?*linUb)$;}^ zZS>RGyh#Rc*6F~312XPhseVIPa-JmTOLBoE7fN!G^j<8X+B>r zr7NU#rNLJje6_4|jh`BMi^13WX(4Yl_?xoOb$(jRr%Q6Z48K9zZuIg^e!7XjB?G@L z$#)FC*-xkQcZJS2Np6uU`c9X=Tm5tv-)8Xbep<`3B)P-O-;?}K>A{G*{M05O+xR;& zd%NKKzQK1Je2e zwl)Y`ek#dBLjPgm`XkcYYjE68mvEo7>@;|npDyD*FYWd7qnMAR-{8mmbT#)$Ww)0f zH~0xZKgmxC3w|bzKbN^r8~h6|@A2|pFaOfZ&v^M+FF)tyUwQd?gMV%C3kLs&iI~jB zaM+5@4h6cqt!}2g*^y8rS|7CnwGHXDDGdg{$mC0Qqg=mi-mFEDRx89bNVTsBgnBHe z#gESVHH+&P&1qsPS-o(5U_+oL6bQH1G{vI9aQk#nS3{O8n=`lZbS5L%+1?O{1(-_h z!Qo(}X4dAIHLIts&5B~Y-x<*ujxh~R4MIINrbX~Kbp={1rU?sMt(wk2EY=YWbaw{A z;hNaSP)(;mu2F#1I6yVA2MSs|+>7Kv7-wJVm=y)frBOJTY$=kK`cPL#Al2q;34}uH0xf5Qa%s90mi2_gfpsAZ0CN;a4uf5a z5txv#Cd_syCuO0en?`p~Fsx=YSuw>BC|gTUG-`!oiXBYc2%!d|?d#MqAe?+S98Rho zkQ8-Tn-sA$ZjE-8QgQ%hm2}yRUmgs{>cc^3NCXV6be-1|3x>LD(no?oLDXu&5s5)) znFIYc6*UMJi{s#J7Y5%^Ar;jCeOqW>^xD;3$(VTjLXog+Y5z zt!xw+=xhg&LMR;0=Ek+Qc9RurPk4`+(qCj=dV_+*Gv_Dg$0 z$xSsVd3Wba757Fg8VQLPV5)h^?uqUfqbsUBz!3q$O8_B7cu^o2cD9!9%?+xHIfEUO#p^Zc1$xhvPnOr`wf1@1mT*rQewJ6MBGYRLa9%+!G2diNLwBqH{L2SY5GTBn%Y%ronHS?3Kw6(oaqL zGv}K07XkMiF!0+_dYqmxxeg_sF3Cys9z@~hMyrhqRnYiKhW?rV&*UjW4SvVuclj?SzsK*J^fTH0TlBWUe>M370*Md#Ba=VoznSz4+GFzHh1fInEZ|D- ziL%r`_!E-{Ny#rs9(Kg0B>9pQNb)KF)8x+tef5ColUkd!^|GITnf!15kIA1)@?S~5 z;4fkE+{he!0GXz^4a`uB>>$CUhvb;Ju8?6;l|2@W`vwq-vMwfn#rsV@ppmJurkR?~ z`*Ca4jWIQkmSbwU{HCcHnwP1<4Qj@UFydHGgU0Nj`%L-)-G|%LZI;Uh#q8BK$aFu` z(3B?F0pP5jV5rrKnp&P_;>?e!0la*z;C~}O1?2bAFHN2yl6Ga_!45nkIkz1gJg@?0 zWqGjEvJW`ySVmnoMv@dU4R<4G-!MQ#AtYGF&MCegWb zOWAVOhKN!h%hOCg0SP@xPnoojzA&|++Aui&?i8_hQqiXf-ZGQ^OJ5w;_*z37ZffP6 zdsw570by+v?!_aHJ{}Q$VM^quu3L}r*w99s+8AxDsg2Xdn_7kN;s|;>W2CJdP>5yX ztl?6&tS~6f!pj1x$~~3Nx-m%SsdSb~>m?ogwH#m?<2EM!93R$JryiDFQHMf~0j{hR zGnRKmBOC2F&Th?o>3~m*$Qtoo%xVZC(1eFE44!7{y(8mM#I~>r3a3VKq!5nIYMi%b z&fJ0lkGx$<^0Cw2!(TF z5wWd!dr0@s>97x^L5BVF{YT8v>!AIQEH&v}i$*%_Q+UJ8&!DiHPY)cM2Kz%yboi zmD=uHlXXrH;x0Jq4u+}$;(iwp&{Sx`ya4?F5}VqRKoqCYO3?C3w;doXa|h-^)%``q zW#HGm3aM*fiB!o$BF$u&xj4`X!&sU$5Lr*Gkc_%J=E|eRXm{jJOeBKvVVj9-Ywn>( zAFg}>E*&qPEut|SbZ$!|3@e9w+s!zn9j4@qaUr(T5bW+kL@lv$aFhLNvOE$A#e!XO zc|rlQjE!>=Wp@K8rEP9tzN~i3e!Eg^u5{mjmI5jb%nfvPSz+8)lMZVqj_U(E>5WAa z7vA86Elro8p-q4_PxnEVx}$P&UQ)BByUI#!MD0|b*p_!#qDb;`mHyZ{Akz+BP?6H1 zK=NR1#pXw%!E?o(NgSbEsDX;p$_F@?=mblk3~rVqlkFl+R|hIBmh%GyX7zN2yAAC~ z@H%1b2HaC}az$dO+EY==tUF2qBZ%v$$2zr5?!d&|tOVzbz(#TrqT*?p=>!+0aJeg- zt2ABwSV!bxZ2}c}&~$9MYlLyIKq^uiFo17-@P=tD-A1?L$$A(K7ndKU;o|ipFO;}c z!<+fV)D=o^3jQ?okS%x6O28XMp8YEqgiw$Euks26eE_=JX(&@3jA3~ zFJa~o8z%jZUPcXo6}$0%Nw3iFoz2uB$FFz*{Rovjh=RRzu4-JR$e8v3hYZVu0a}C; zFOZHuL`$ppQhq-TZZ0nEqajZSsp@;^M9KG%;n_hR{lu#3UMi`o-bF*19?R{eVI#I- z>ljiLr?MSjRh)(kyUI}*Aw19(4{8w~5uF7dtik>R*wZ>1Ppwo*7EPsgI-WXcHm%3r zJ82<>!Hq5jdJN`|r%Ci01S-N>n&iS#dL2r~^affBD7T>aWZp+(SpR~&X#E5I(b-%& zXGUgorrVV>f1)>?$=z5~mK}u+js!1;L03iz3r1G&p*&PZW1C}A+Z;s(MsEa!P1x{e zDx!0#l)gb_bRI-~VVXEcB{wokURs=u=)@yY#4CscU>f!>ay9#DY_o8=kH%$h;*zvY zm`U;Cjl`kR=xici^s*3Q0_O24^(;`bzZ{sa0Ol*xFy<#Q=F>a$F37Pw5;+CIYL3{Dc$U+Dt}V7lbBA7NbjnfO*3({hqb`;b0z zCbv3F8;VV6<=?}hE*A@Nux1aT9FYD#*mpPO(>+v7_d>hxOM)gEnq=cpWe{zhge+DbcZK^mSGaltuCirW2hoNLbA}hld^|uF!=??v%VWyWq{9`vodNgnu5fd* z;qG>Y`wv&RISIJR;JU)y3%I`o+-CsyS-}0(0C446$$n}F*b zP#InV+}{E2%Ygd|;J!KlT)FKs;QrGUZf-W*H(cR<<_b4A0ax8*uH1bWaQ_0h?*Z=n zfcwD!aOJYjfcr03xJEYIk6q#Z+ZC>nfUE9YSGb=5?x%qJPr&^QaQ{63T=6L~;Qq%I zt|uGre_i2z?h4nFfa@7Z8CWMTdnliCsF-tU2zv*BE3Q!nT)fPo;YApi1&*aHk$d*Y z>JqBlNfV!>s$M!WWybwtj5!ahm}x7NByCR#eF-N@OgP>N9m4Zr`o)A7+JtvfwL8^8 zG>8k+s1_!v7CKZt^78Lcy~;72LUiOF7<(AaqofS0KWP_D)=1o|qjpf?ma(wnlG}cRx=^`<3?2*%KZMG77>#0#L_U$r(?nI}V3G^LAT40fegk~NFAxr_ zzoRCmI-tCj;+hKpsRVzA?V_VKx=8#saCaw7k?Rq~+C4N*vW3-;pQxWSa>RCcLnCYJ zJY}9Z9kWHpRrWV@Pu&Ce2bt_GPRAmfmb%y`Qyye83aCfZ7#>3vJeI0?9L?nM)PVdH zowoR!l@30LQp8* zraa0M;Az#R*lOcD9!hZnzD}GD<(!d5GohTK2)JbPz)1WoC8i5TMuklQ`<&?QlDon*xB4qX9**v+DB{Z{AK=rTHD+Q%ba3boYob$AhDY~ zYZWI^k5g-$tfOpJOtP~rK5fT=drEzveM~>K*+Oa;x)}sJvS&fo&tpW6M6i!ga4&34 zAFW4G-$s4NrtU>7+fQc$aHttwozRgfKI*0m&#eA+~udx0v9;hc?kk zLM4p{x6n|vD|?x|v^Azx3E#g_B}lQ>%%o-Jdnt&UV-0SOwdCgj6>uwV5Q`>o8%^VO zn!_D*8n35S9HMpHN$nh=_1r~Wd=72kZaSZ1bSd}HHM|jDF>j_@`CPh#&!Zpk`ScL- zoqQ2J$rsZzdtd@WDpt$Y%HlNa+1yn=7! z0N=!|d@--b*DV|QyJ+3Uck!)!AK%7(d^m;~#5<{1g1n`hZr+4{EFUVJ*OqXdP$^^G+?syR?h=QSEwuOuLzP zYj>dSZhlgGh@aBp{Is^4f1y3id$c$B8SNc@R{M~j(>~+pwXgWsx`$uT^Y}%5F#lFB z=a=+x{IXujujrHcRedJErZ@2$`YQf|-pYT}&*8WAOZgprE5E1T%lk>AH3>JRWo zdYnJjALW1OPw^-EbNs3PGXG0|jsK&+$)D@*v+{7^(3R6&2u>xU_Q7c!&V^hAhvgIM z=3=;9e!Q~nfZHX#eTiPai`H-{4}o+$X`4M)tHfumL*bD5wTs}K4TXE=*WRJ6JRA<1 zU;7H5!H+;GPajNYsx?f#65qa$gj1BSPo~*C2BiZ1dOU~;7E`Vc$1hl=U&mvWkFid_ zg2!Q;M(z3~JRT*T*6SB?1xg<3(l_%FDCN)wy&KXWjVtI@eK8-&m2d{{&=dF?6vK&XU7Os~E z>=lplVJti-=}{J?d6d=J9%YfiQhWi%03Ns_vunNK}cD3* z?Cr&SRQPb=UK)hU;}W?zF72fYQ|oR?Ust`yXhW$$8%CuX0vl~KBBZft>(`{M4<~-C z2>|%W#R1Ua0GN!mE|aw`@1-Et3Km}xrz@pU=#A4=Qs}3vWxzFYx;DjDd;JQ0AT$f> z&!$mY15MIaq^&>MS)b&KD`(X+p>ncq36O$&6hni>TRpq!o6S0!igwaQ;d`!nJam3Q3)eb`7D#oygbY)#48PszQZcJcZu| z>r2#zd^_^*BflF6>XF}rdL#0CkXV1MrM6>zNIyso8bp)!q{jpeA(BIqb4~MH_TS8TJkx(Ss5(ov_W09y% zPNu1L(-sB&p-5+w|Efq|jLEaAVPWmMWwp(VTbPR0Hf{3v`>R6!aA#FZEE)`V)-dI$ zDJxbju5Y}ANe^~+F7n6xOvUEpa4=G}@Tyo~Vc*7$fhgvCtQn1A&_6Xb3GLLJb_KS_ z-yUF^-eiZfJJJzI97^U1618fzKhziKWpb>oXUb1?HOm6@&sl3ruP&WEWvZnpsbwIZ z*Vh|Ry|vMRfA%6Kz7#w5c15IRP+=dQ5h-2E(!1 za1d%3!7%6wE7N=5dpt)42g7Z{{dHe}iq3YUTcBKKkc-@Ix`Nj0v<^qlAiO-<5r`V(rw!1~g^dmC7B5@WSi3C45C}mv zuSVc?7!;t55K2UrGF6smZf(xA$0O^z3<}aFTvdN>(!wx}D^FXI?5~jngbeafj+?^N zqf>;*YiE7by)fuX0-~%nOB!3Dnx(cnu4dvSVTu{lNBvCMv4~tV=uLS=qwKiVpouie zgWA;wT|=-fxxE4N9=Dh#&Lb~=Hhak)$R<(>6c)+!61Wjb@~F+ z*~#EB=r&LJx{L0H4M?yIHyQegtHN}T zLHAOH7}-EGe zzsI`0t^}8vCXK=1l<0Q}UjTBl{Y^I~is8yq{1iq#VbGJb8`!arg-yF5(I=qNNNWO}_KYu2bVKFsElY)k14- zMrV#Cq9_QLiqEl+p<%QtL-MXoU|qT2TOp1P2~ zx3{LkW|>Z<2$R}jimfm#1GwpmyCeO91Ufm&O9s76zk~se2GWP>qmgbCVD-rXw8Nu~ zz@3ZkzhcmD=(o5Hv4}F1S>_{WviA&nh#vOP`}A)*{Tbn^ z9rfcQ9Wh&v%KE<;^dGWCp?Qll?+JG^&9JrJW8kgPX^KW8BO}7czZ>*l^xp`|H$prX zCmSmyE_O;}2v-zRF_ysiUxPjt82M)Km2OEi`qZG0WH1NDs5uy36YPj}Nh~sA(Eo{z zHq8DdfnaA>3OeFWZ1;y6qLIEH6%p96JpCb4rlvw2gjAlvr^sOnOcfTh*%b_RAa;g|Z~;s; z7c!lB0#lt(lN!s<+$v;?4IalO@O>r&TLM@1!CT=qWx@1~;U#Qvdf3aQI!_ownT}s! z@I=`<8wR7n-y>)y8$3n2icB;s{88AlfQd!OPc!&5J{@jTmY958Wq;!1cdN0FCu}C_ zd-up`$H=gU`5oKJgDFXgO^B5C^vUeu(t;$ zM=U~ctBC3%gO_rX8FsWrBB5BY2M@d$F3zYR((-E}D!dkKznVHbpL^++I`}s$bIx8=^}tp(GV< zn+#pp7YyOaBmBS2;LG_681jBeZY;-hC_?}V=A^{|mP|a{Mmt=Lbc{B&YARaXZg2-f zX|w%3J%KR7!5JqdN()SlkmxkHOM*yOEMjhh03z|8%9MVq@G$hR@o?564{v7N{LOrk z7=j*yrqVRAX;FiF#c-FHHVvLqu`-!`(76xk9XoLy?|#b~E^cfMb_ZG_ebM%Shhw}& zq&5$JoUfAF)l4hxNkcEM_0tsXvO<(h14AeQwbl(3e0ghV3xHx#{OPA*rPVwj?lkmL{zwJte~ zVAhTuwp-=^xp*u*r9lW{ww|?MO1~c$+n%!-woSP%gy&fyNj8p^cu+^dERe-rwNIjE zkcAnhSNH9&b-O=)gz$GF;A)H72FRf;O zFl@yxxze3%>--1;2YL&KZ|_G0eU2?@o5Lu6m_dO~h&%S3)YX{n;UT`oMX;~W^9?#5 zKuW+)ACiVj<{dQnkfa1WP;VgV>kjwo{JoRf?;H;w=39iw4-GoVN5;JH$qmaAPbGCJ ze*`w3arV4RbjBkyEkSC!5fA^2f1&fw;gnMz$#Rk6hF+BHSt0?b%)K>;Bv&QBZ16An zS8y*IBT?jjnLcOZUTof?w!y>m{EET95yPj8;R|d9J&$Rz>w_w)cI}PJ-aQB zmkrE&LQGKb4F9C_pT>xzkGJV%DQ5(3r5ZF1uRKYZ7b9JPtTt*BBwvj(UsATJMCKDE zNe)nzNV2ICp*Tv1e~Hf14^U;BRyd=j%~@F0(w0>?tEDZw z@SK)s>0E2*JQ@0&4Ascc`53zJ87y^BE&k>ycFYE}b7(G|O$*fsVVgQyWNmg3a~7~kJkC%#RbUMUkF|-K(?Wl&ZMO@i<&UnObxW0 zR^s2)v`PUVXTqe<)3u-jz)FV5_R)28y>*x>lz5j@7VvEQE-EG;vQ_8Bii}}Su*k5a zqtPR5e-Ydg^;ubYlyZmZ#RIY`@lmHX*trsuN< zY3IZN$`dYZiPIgsN%zI+E5fe(P#F*&Xi6Znftm2p!AY0m{FmYT#pRIwI>>%K&7lo6 zkJ=%c0M6b8E(B=>ZC0SCn!u80Ur9GXe_=~$27L`&bkKvKn@8Dsg$wvon#$V8&?uI? zjdi%Wpdg$vhAG@8IEUzw(F_WwF~~?V2w5D9MlJRcRdI`CdvVZ|a6M`uicNddgyl{G zcGF`N1sRrnwMFhuutCVpOR0=De>aT-x}BxM?b7}9xPw-1XI4$c>|G;ogQZX5|8J() zIvLj-*%*A**n;c46<2QyRngVZ`fKPsU|5JzQ+?)Hhzzjq+v*AmlB{}$_E?KMFk8-6f^#&KK1>C^Qn^{jYs5HMDx#fW-0hI) z9k4%l0_xpqkV}$GEK$~pm8>DnaoFowTeyv*;ofTtcdsqn#spkt14b#Z3HK4e-37Rh z0?=cC`@|S<#fWCW9khkpJR0s(ws7ONaGMiwm7%hQy9aQe1>C)WI|#T#W55*~p8}f(Ol5cha1R3RA;3KhxZfWGuDG5IxchD4E*}l|h%MabY~e0X zz*Qc=mb)(j?#qDtOThgV;Jz{jT=AS4aEEQ-t{e^bceZe!w}rbh0ay7dTe!yn_jSO1 z190C2+_%PnD-J#b?g3l4OGm?f#}@7jws4mw;4U3g89o5q4*~Z-0r#(f`}Z;6N}Q4b z_aOAg^lKMccD7Lb)8Wd(@9(1@9-^NP(&5qe`yU8`K1$o5Fll-U>1XtF&|~^VlI{|? z6tQvnCf$AXqCM4*VUs^eqne+jnr~5c%4a+a?W;g5Ch>CRO$&c@op=KLzjHtR+CkeS zuD~hw(eF?kJ3^;P(N^tz;R5aa-E@lAIdOIqywe-o9XxT;u93fC`0XQb%_!hA-i_0r zQ2cw!b@<>kh(5z_1xDaDiOyukZy+4_)dMn-oJGyZ&tJkWx{TdvN4VTNLN&mC0Qs1l zpG?jXI+wC^w3&6tjB-XW165EiKn)*qQI%k0En337QgIAhVW7no~Y3TN}+0Fxbc=TPPPgN@L;ngq9f> zc`RBipF=DP%Pk7|pm5)Sif#S}!Qv+=CYtz4NayjC!xP|2OVem3kqKETG!^fw7G7%!FsWvo7A%1&Bbo7{=%-24}GNv zxNMN8s~L~__VV;%_b`{W`HI~`TrPl@573Tbu0UifW3z|2vRV`#`_38WnG*1BD|YYa zvmG?VbE5ig-bs7sk0h)e9nVZuDje ziNsn}-R@!qx^&mb6$-zV=4L^4Oo3gV09z$s_t3ej z_n+YOdOdsSLd=ZwDyhn%IJcYtm+S|2b^{x#4Fh!7ZdxMTUj;@`wQ_=_o8wg8=_upd9W{K1qZQ>E zzRPh1-|YxstcUM&^zv67*Ykkmc7DKdFMrMPAo`xbN9n# zZqjbzuc79o9_@O55Vb7o*RJA+P|KzVv{rtYAHj?FA#Ek^0u_15m8iF{8!wHg_)+w^ z5!A%^F@7A{;-*Rb1V0IX6Q%)k9zTHJJ?`eGF#1el6modiTvXO-<6|mz`9hUNBff(n?&m=|^a~6vu^}{A@Dh z%*ahlkOUH?F9U6eJ>AUV~Lg~5q>dLoD3*A zt^!IVc2q!#AHw5np@lIB#1iIJ`G$E&tlj=Wj)-w6;^*QF)5(#1SDasv$}k_68Q+id z4^lCvdfD@z$#Cd2&f%gd4mZtoq{nep7Dkev^H|$nfz!#hrwiR9G}+wosPh2-xJ`or z+p>>;+Om&diu13N<_LKz4cQbVZ5&hRG{>~GFy?e?3oBGS4M+Sfs5|&~{3^-~Wbh7@ z_=ktA@~~OrEyw(O^uLDkb?{;{$~Vw%MfoPmGL(Nn>BWzC-f}Yk5nmVH$#!!L-$UOe MFQoB4zn|^?e}fs$egFUf diff --git a/twl/bin/de/matthiasmann/twl/ColumnLayout$Columns.class b/twl/bin/de/matthiasmann/twl/ColumnLayout$Columns.class index ba012361f6556dfe9d574d80977b98cb70c74b8d..93ce5f1554f0fb9bd31e19787c7caf81db852ed6 100644 GIT binary patch literal 2087 zcma)7TT>iG7(LDG?rfF`ED*>AR*7QV3uFPs8wnDL!PSMRM7-dwSw?nnb{2PM)x7%$ ze2foP$|@@lqU8-t`4CfOl~!3k=!2IkU;PzUyquny32tmwe)#9> zYXBx8Q|QL&6lUK#(bkCZRYo9BT}7T-7qWebnXQKt-iXUkau+q7AZ#Et(pyi zgG;WgyuKheJx270p>@+G^^lX6%~9!|XmruHNbU5uses~9%0<9J(===C?Z7%;p19SV zmzz|J3FMim1O~>G_j?%!MRYt((sZd(6&TC@f0-0_VNr{Ua9k_JZC9OdVKD_ zt|yg91_rUj-ZgLm&lpIfN5`^(aXf3F7kvhv!}B`GINPpeqUA>Xm!^R`v0|VfeLR7I z7f~RcF%=!r@sfd;@rpotzd<@)6*$ojxpezOaLi>(I6l%jdsD>?-2hNPNcS4&26PFJgRt#OD@4KW4d4a62Od zehCcY4!)`KiV9mnH9`RNF863$n<{*VuKW&kV(A|uu5A^rBe_7h#3+B4(XWs>CHjF& z&|_B+)3%tXMJRku_%8^tP3Rqu!mwXFq%eiMaDvbST)msLI*?@z1F>##1IKmbW);0W z3IV+$N5LI&qNfy`f8vA}{KkVY{0#wwz-X8}9wa9e^=tdHzl~%k!t61eWR|jEnpnyL zU1bkWe!36*doSIWSP##qqexd3=kbt6^bCppEPjlzh=*k+_>awJu}KcfpN!99VRQ$b zmtgc7oE*H>hm=S8C+PUuE9~o^2@7X%kH=4^1NUNzyOsW(&~D(cj{CG(!PoooK!E-} zu~lzPcnTJjj91ZhTARrXec)5dOsZ&Rl5E~XJhSzVCa(PZ=g@9v97BQyenA(0qA@(x&Do`5J&#vOtl9;0#i3JQv05^nC9`JBeQ+3IfhbF^r7FIL zd&?ztvEFW&4!sU$?#(EBQRXogUKA|QP`ZQ#cHEgvd-DEk$S^@aYDusFbb|~)l^k2j`S-6=~iXGxoH_#EhS%0-Z0E2J2?nD>; zy180L8~=c0?gn~tquWT_M*kKL<#J!+&`k_&A$^_KZMdJ$K1BHZjL%Ive~ux1fd_ap z;D^9b9OI6`6cs8f>m2}nKpRPPYV><_<+hO_R^}?A+UDqOho+)_(8rLf)~a_hWdR zKC%qc#FAyurFU}j8kb@4A3`$g&FpkM!D>p_!%Z6D9Mbz){1jrblY_)Q6|lHOP+6m- z&tiUT8>g?JtM6$p&VDFs71^ytToL}6-S&$L>uaBEvPI0H49TO^q&!Pa`ZQ9T?`tA8{K-Fm4)4Cr75Bv(EdU~h=eT6BDuBU W0$%33k1K&Cyoy1*#`$?8BK`%lyQ=sA diff --git a/twl/bin/de/matthiasmann/twl/ColumnLayout$Panel.class b/twl/bin/de/matthiasmann/twl/ColumnLayout$Panel.class index fc64ddeae85afb22c44866bfd62257aef8290792..5672772be9da968ddc5b29634550f20d5939dc46 100644 GIT binary patch literal 4585 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%0D8h93`tJs^qZs0jo3JjO2qd2?W3Y<0YJYL|I zoQkzB(sQF$zVaFF^=j5*xIbI46V}}+J;N5cv+gbDR@H}&domfz-kvsdIV%^!w|PJD zV_CX$w%fBkyVE?2%DwyyuqTBud6Of&R4eXr*kU6E3GjYdfm*#ca8#@J0?t-(T!t{; zc{?b+8+_++&F`RxHJ8`wO@wdN{IJHjatTMrXjScQind=sLv$KTqp=HUiq2rg&@@(E zK=a(NCE7lP)(eP6gBK9{5qFj0R{mc}B#x zFgO?48Z|4Y==NDu%jpuzHAPo7_yj&ldxB5F^z5b)bQFxJ-5KVFa$<4~$CYV2KT4M4 z7CKB0w$F*%z`TGwM~`Q)NX}w~JkPuC3niW-p65ll1*4QjJ*RNc^L&MfX#rzJvBw;- znNer3-}9J0gI+q$&VmU}!5$23C9dWv9O{~MAT}?b!oxpD{ElE_@Di4A?d(irFrXVw zmdWxJ=dQi2a=B631cTtu6Z}hz(j=D1%V?HYSP0+4M)^LviDCw9-Y%{az7#^jRom}@AM*-|2?ccZPhSLN5&pE(uHeF(8y3CUKC4+Gp5qZl2 z=$1^I2QY-y9>9fY^Z;tfRHE!Ew@NL?yf%A~dI?B7RUHAu&T3UZHB|TXG)`Td^X=Bo zuPD~9naRI#e7fzc&hzP&AahNUWj^QWE6WX+BA(XT;C#o z%jEkV7Rv9@B!9pvc^j+ck0pH9dA@;l__7m_Cf1N9RIx>@=8&hdhvywq)imlS)uu~W zs1M@!O7En@zTtIzZ59^4(r(rlTd&nU34;^O3`|lh-Q{uZUpj2!f-{5b=dee4enH-$ zR)0dh{249s7ewW+*dXsRvHpfFeD0LLV~_m9;o=rdf00YS$EB8Fzu|Cc;kn|DqG&5g zvswh}ub?J`_!ZRhKjVvUl3p2J#JBitA=z`ha(stbAbg(Zskw*Gm-vk1yLdS${{=!e BPsIQL diff --git a/twl/bin/de/matthiasmann/twl/ColumnLayout$Row.class b/twl/bin/de/matthiasmann/twl/ColumnLayout$Row.class index b9efb4b3b9e4f5822c74815151b12633e7c3ea56..05b1ad72ae44440383b00e3338e050042a08d859 100644 GIT binary patch literal 3285 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 diff --git a/twl/bin/de/matthiasmann/twl/ColumnLayout.class b/twl/bin/de/matthiasmann/twl/ColumnLayout.class index 6af114914bf929026db8bf81e3cebbbb346f741a..068e89a6fea8ec2a764b9c2d02319b840f9e9edd 100644 GIT binary patch literal 4283 zcmbVP?RON_8UNkgot@pytO*+yvyj>lA||_uL9nS!00l%y3E?F`4A9nLGb96>-7q@~ z32Iw3Ra9EvY8A9vQ)~KOY?F;hjeKf*`l09aoSuH_U*I|Y)-PJc{_f1=rOj}HJtw(y zU!Ldp{O)s~=ec+PeEq!{0PArrh87H{7>pr+fhd|`syGpYf|GKPQ!x}n#9hh9I8%_# zaFhb4WY1Djj9_OBm9SNmVo2b$R5&9SM&)j3Yg!Wf0sE7P!|>c4Jq+(K@8t_MoX3hxB~D)jpGJz2DSxg@G=8v{14e z9QBUP64fdcY>#TAucFJ-Q*V^ko$G{;pVq_NXCN@M&`nBW# zbcd@Q&sv6V8=h5xmd`_x@uDzQvV#JmlmA(PfY~6hd_nwn+J>du1&d6D$^Sh62L$}h z_@tS@EqP6o_R9&0N2i#Ia$^IBt&gm}eQJad$Acn^?XyG&c}~Dqdni zB0x`}WMz#9Oc~hATmd&l@08U;!zM5xs(mVnh7Gt|V69(`Scv0Bt_1plhI{Z8nwdxQ z5?w<(IyAhDS2SG2B@M6QsD{^Yi3#NhJMrC_%NYZDZi_Wg8lnTXk7SKu+brZI_7CaD zC7F2pm-4S`cmqGuupd1d_F%7u2e3oKn;2K|V-0WNC-jhpw=tpNr}&wM1NgayU!YUN zFYzl4Iu2_1HGZSvG7jFr3yY6X!#nt`hTqA3PReEqWl3aO!@Ibm;yn#l@p}#L%e5JN zAW*l|rfwjz(6&IsQYZ~hQYPjPW;Rv@cKgTY!Xv(kI_s7%SyrpvG~26NI?prb#qN!2 z;KF@)w+#z$(Xe+GEc0w3Z|k!N8GoKW08VkY3TIgGs)%&RuxyhB-D8q$^eL(2y~4M+ za3RQw%m`Shw&&OhBWtq~&j+tJ#S(a0&y{4ctzp@pcR2l-qYlHFXNV@@X zbg>u2ZX#+3RDOz;D!TbcIbKj6=}nXkP$DXKoGD|)|L$6M46bm6<_t#Z%w2>yN2q-s z)D{|(P;m*BCf2P!aJdC=@j1A-$3GzNPZutz&WVrS%M3do7DW!Yjv%d%1LcumAGl?(Ea7{^u$C1n=l`?L- zgz#8Mj45K`vkx=L&=kIyp`B0}byHZKaWvjX{S?+P;2PSMmOrA3z1vgNUE4c>13|~u zI9fBwume{o)mtX9IvIYbj61HOzFn15DYcBo-mx$Z{gumWg2Y}EtbG?vvQr!CU+-d) zyvtKfhLh?z`dr|P(ByiWHdo2mZ;zyuR78?+z}ai;btp#UsAUQa~c~l!el+m6ML8^^azeJ zZNI_3!4No!$0+eQ+cBKS6S#mUc{WdB98dFw^9&yz7w{*J|AJ@n4?Kqt@gn}sADkh) zB;t5kRO1z~3KzxgcvWQZnrP$eYcpOKTk(e2#hN`fV*7Y~yAcGRJds|w>kg~N{A3?u0XIjejFu6I_$w3=|{BD7hDuW>a(%Sn8l zy(s>Pepe3v;+jNZT@goTBbGgxU3`>_!}P;J`Yj|L#6wQTZ51o!dyZVr<8L@dJjKbv z4XC`1gmAJj+w?I4*P#g^5+6bN1RGTJe?qv-$52*%il`7Zw|;~Sfemgufa6Sl@W*_J aV9mIbWosS3ck!FxcRjaSPZzX>#D4(E|60!g literal 4269 zcmb7H{c}`T8Gg=w-R$ND$cBY1O-qudCD|p7#Tx4_9}-GoHH44Fq#;#%*<6wfo855t zE?+HHXwqO?+iI->QW31C)v8qUQJN9^i#p>E{?uQb@h@fH(6ad<$4WrW*o$_V`Qm6nAkuwQJE3(HEhF2p-88k+-A2Jm3Ix-}P)@Uo zrY^9}&1Q4A8>32JEw+#3R*7cj^VU8sr)LFPT^Ck{(qdb3nc{FI&AJK-yS2jb9&MEK z#?n!DTDPG)ABE)dJQgfv2!YK;&ak!$cw5_g1$;a5gL(*FgjKA-N(HM)(j}E4)FB*% zz*-f41QbLC9(K#zZ4~VUgiw$BBzl9up5?Q45Ais8ZR?eM9#9cPNI|1OZJBo|w;`-| zSU;$u8fu9452<(<8yIB9)HO@rrTSRkzU=jjLag9mEA^8?=A;qm6(z4slq2h?1vv!`!=%bdA&sBkf zug=&VqemOj3n3)&WvR*SY#psG9C{V(;2tci@Dh^{y0BB?Jt?rpHK<;x#oa1W_zG)} zNnrg{I^KKusGhMHd^wuZklf#H6?@PlP~)h!ET_w)E(<)m^#z|T3buRfPon!iG zYJb_SUxX6yWY_|0(w3Gv#vWGEP(T|TJdi&raNx7hTHY-&ld_BSsW^zQ2_#)Je6KhH zhg5tC3ArIptN1#;!LE2h%NBL&zn%@C+(wwXEO&(pN><|;99EzStah7Mk-?xqm0{_o zX5~#OgG!`SX`DDmFsxvRWmv{pm{nomC_6w-KSh14UO=$5y{LvRWL1nHC*bEvni>9# zDo9BNqbiPrB$Z*U&|^E}ad0R|6gBT zD-g;RM-~++Qu3&HUd6X@jYEEbWvM2lRuO#<43YfrCfVM9WJT3j2|<}T75s!JM7h7DPZunGM8!{WjaM5@-kLJ`QP~Mx8dGX%V@jpk*wx1IGZk;kT*>mM zLS$Y2Ld7KBA*azIh5Wb+-cmT1@Tjd(Q$J#yO4~B3aX!jg%LoXAKdc48IuNX?6|#29 z8%l(-PWX||7tM_Rq#@72S_jB!laI)}@Mufra=N)As}%~e9Vm;w{Pv|o!3P2@%bp5$ z6ZG1@{kA;NL``{l5B6e}yg%_v;g<(h2+R8m-^22TvN&F2+wexlkyV^M%TIs=hF!`lc(0$ZZK9yy;ExIF)NZ>P`O>5osLaH}&giEupPpTUXC z2#oo}m|sNvk-)Y2PvQ~ZG|t57XUz=0HI4Ied&M6xK8*w^yTF|GmCR z9P~=Ojqymp#%q*o+oy0o5_o0?Z+?XFgd&Hc$_y^{jRgehU7P=y7871#Pk0+Xz!mw@ z;2YfJU^a9H9G=P~dL7(LQ03fp`nyl+K2a6*N2??O8=G$z`)qnua@L+n1ZfhKCef;d z416LIhz8R(gNSl%{#~wYjx%LH?~`@oDDOHo28?n8k5gMFi@Ja|SX5k**Y6YDDHGdp zhU$5iN_&o*eij3K*C~NxI8Tcg_rHNUoJ zFW_VRhB5nbg;C4d0NID|TaGFC1cRlqfAMN1S19Bjwr8uzyb(8OS4I92ywA6wU3&+y zVx9y1yHc?D**F{p!OY1aBdTRagPy!mt^QbraB0&7 z?US6`v+~_OG`axyHlDz|7ibR@=@5iT>H?0CB@|Q5F^74ItUs9oMGOnD2{WWy#PMXx vdjxxi{_Du6ZynS2Co|XGS>r$36lG#t9YsP7izpEr^tBb_NpYGpi0S+QTU|CO delta 342 zcmZ8cJ5Iw;5S;aMV#j%4LxAAK2`EVcPT_zAqNfR@prbcn0a0X-?WBb(7+-)ZAn}nX zC@3hn2n}Zd)+hx+Py1$ecXn3$R`^h@_pj#{0Gn9Rpb(lj`Eme(Ta&{hfdaO>r8|h%HRsvy0LW6EVz?3M#B8av1!}PkBzP3#fjY9)f z*cz4z4lk)l)N)aIe0kz0LH}YBL|Kwq_Kq_Jb9wEz!%Flq&$;BOyjsBmBViF1|7GUejCoIY?;#(t^xtEjPZ|92(5D`v Vg*uNZaL`~>`63fdX2#Tz=?|FcF6ICL diff --git a/twl/bin/de/matthiasmann/twl/ComboBox$2.class b/twl/bin/de/matthiasmann/twl/ComboBox$2.class index da3232545b02c193ca2d0288cd5155713d72309b..fcdb9ffbe6224efc645b654766a5f0b2a5a3a8f0 100644 GIT binary patch literal 1228 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 diff --git a/twl/bin/de/matthiasmann/twl/ComboBox$ComboboxListbox.class b/twl/bin/de/matthiasmann/twl/ComboBox$ComboboxListbox.class index 5cefaaac629e837a67cf3c106a7df2ca2096d44b..00122007950d8368aee9a779908f4f93ff9e1978 100644 GIT binary patch delta 434 zcmZXP%}&Bl5QWdQwYQcch@kvbE#N|l@qee01#U=4+?lw9P!bZPiDlu=#5cIs7#~A7 zl4#-s_!hp07^f`@e>QXOIhpxp?v0q}hwoo6ZvghNWl3zuvXYaN1KN)t z`JhYn;FFrc2bGEz49pV5AfC2RMn#}X*p=x`yVdTv148!CjwqJNZCQ8ZeU)sPwy)vv z)q+0)D4>wa)ns=Xc_2|6gK8P&8R`?qDiU1hSV6bYD1b?KusE}LklT?&nsxqHl3}M| z0of`1WC}NWuh7oNn0e%e7_EmGdia4f{vpF8M5@SfRj`PqNb^XsW;oGd^N|KGwXp)@ E8&beO-T(jq delta 447 zcmZ9IO-lk%6o%h(N9T^yq^4GuW7!v!h>Iu)GB?vkklcvSQfU@~InW5%B7~OhWd2BP z5)6d4{hyXa=c)^9b3WdC&vQP$^(Pts{25OG9AjTX5DLKu6?BOZA;V!RsENp_UTSyS zy)r>NJZca^j(6jl&=9c@hHhYqAUkcp*Yf%%2+J0thy@LCFuW*=VpSoBV_Tf5$kt2s z`gyrH{JPR4Hi8MAgiWLo37#n%I8;emm2TI)b2?4mcYTQ+g01QXgqY*qwmj}qoi!t* z{wdXF%k3b?LukAdAUNU?*-Fl8(;QgJk6`2z<{PY6mNmrLMpX&j^X7e+^nexCEH32l zNFa#;koqI7au&iG*5~xgIo)_i`g(-T7k;0iRe#Xq0@9cw7l}$yL=73X0yeT!zlCk~ R35YmDa@d8z$I4+3#xDo1LAC$@ diff --git a/twl/bin/de/matthiasmann/twl/ComboBox$ComboboxListboxLabel.class b/twl/bin/de/matthiasmann/twl/ComboBox$ComboboxListboxLabel.class index 4a22725b2f137f433031ab44889b1568ff589013..c61dd86df9bc1a3d0f9a6a3d606f353e28ccb807 100644 GIT binary patch delta 594 zcmXYvO>fgc5Qg8e-E3?&ZPTQI5I3};q-_eMsriXORGn^9Ai=pUOfh@2H6>ccv~&H@A+OB^p&mMR9o7u3L$f6<9^%ST0hG4*ZShR;MeL#*rVv0Ut zmOi6OUx(mAVtx!}3?@-v^husKpyeib{}ksMipX-Tu$sm!#)oIEa=+wvQNrSiS>(4- IMPsFS1Yp);djJ3c delta 619 zcmXX@O-~b16g_ulU^>&sM`=N8WuOJIEmkP?8#IPtOi1{Mw(62hbwa9T#xOO}jX)ws zjhkkE0Jw3*Mi!X3FfLsA2i*BnjQ6!H=AHY_J@?$X_x&>V&B5RQzW)F)hXox9q1^sl zR&{96Pbyix3k|=~x5WS$|O=j|`!2b^T%0*;uTtEv-LZll4V`X=Dka>eM!>&WdB#oTbR1`vU}{ z+Sv5n*2``Fn_~NLIQm1WvZW#FNCFP5!avp(~#%l!>{&-n@*EyPDB*_%NA@;SC zHu;ok&>rF(i>`pNk8c|KF~E#0e#2(cF26HQaRcr5>?Z zg=}C+19}US_K~1>NYZ&slPK}im=*9^xB%CjhU ff;m(ebDSnz!8OGAi4wSeH_Z=n1GgAe#(9YUjb&tz diff --git a/twl/bin/de/matthiasmann/twl/ComboBox$ModelChangeListener.class b/twl/bin/de/matthiasmann/twl/ComboBox$ModelChangeListener.class index 26f42a721c0813e0cdf66858293ada55ee4527ec..b6d8c47f4e87abe6ce83690c955da45a741a4526 100644 GIT binary patch literal 1302 zcmbu9O>YuW6o%i+*T6U}NGpC6Dz&JTD${i1qD>cK8cEPDBz0p{9u5Z`;kJ3lB2T{Mbh)+9U8(MYGogxLSa?85R-@1D=b|M&U)aKBFq$@< z4U2o8prFl}@JfUP)m}JDeRVh?-IeLY8%QH# zKu1YK&A>Ve25zCmurX_iQNv-#DM8bsp__Z11JU(0+@>){2@TYKOtqTPOe*13&4(Su zD3wVkgdQIDxGzRxk7dvAGb~E`h+8u3UX2n8m4h<9>M1a2V7Z){5d8v@^wn{Wyarjj zh|z~Uwe@dcweN_1p<5ht^i-K(uQ5-yp=`>_B2VYS8P6i!7%rd?Xg;Ov5t`lliopN?@y7^Q&M_L zN+V2CQRA+b{+aZFNFV=$R75G5-+emOwEx!ACn9}5wUtRvCtI1+AHy=~#Bdeo>CBUr Pq<^~{*&1$QEtUBLaDN9+ literal 1222 zcma)*U2hUW6o%j7YuR;Mkk(plt<<6d)o#-mZ)&^{(*(2XMGamLFv5`iXm*F{-!jpf zc;OH5M;Xs-7c2xxLzX!+d(LytdFSl!KRr?V)+{3=;#Dio24-n zD0N&rWY}>Rg-=R3CeIf#km@DFZhg6Hqr;GEQC<@aD>e)iEo4!$VWP~Ct!sypD+BRv z>~}@NVba~X;(u|9AqJm2zP>~dIJBUT3M4usFZ?_vA3!AuW z;10v~vX*UZVS}_DpY^#CiFzMpUkwTKNk*|^U~OvDo%EQEM3qJ%OHUrGT-Fmo-$0%o6BeD`AnO@2 z^aHHs{&(2TA6WfLy9{p9e}R0!2B?s2Yn!6huudz(Eo`I&mojAayXH68TiX}7{f}U2 zHj^;fD4|p@JyVM2ZR1`_-XSYP_WddO4ed0!sL23{V`#Eq}0IjJ{`hZL2;BRo#lIvTWA5;Zo_Bs-6NJS~`i0YKFT AC;$Ke diff --git a/twl/bin/de/matthiasmann/twl/ComboBox.class b/twl/bin/de/matthiasmann/twl/ComboBox.class index ed0698250a636597e1a067eafe70aac14a4ccce8..9e719d370d08f4ad00c6aea7cd01198a00337f57 100644 GIT binary patch literal 10529 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 Z-Yj?WLQuzjyuiC_Mm6>F2Dt~#zXUjjXv+Wq diff --git a/twl/bin/de/matthiasmann/twl/ComboBoxBase$1.class b/twl/bin/de/matthiasmann/twl/ComboBoxBase$1.class index fe4f9ab819c899c0ba1f3177dd907640008d4c51..9f7251091d3ba64f4e8d530a7fe59efb5b29a06c 100644 GIT binary patch delta 358 zcmYk2%SyvQ6o&uFr7`0~W9y~fV?odsZ1F-M6X zdx7$#bw1KM?8cGcxF0+Txcwy3oqjS(3icHOs-`3(4*@vqRQ-N7fr} z5cLljuf>d_=NA1DJbG2+5;K@%MH#4!32nxFE^8T9N4&$loDgKeZu9Q(KZ-l1n3(6D TfdwowTKu;vd}g^ei;?dS?>H?E delta 363 zcmZ8c%Syvg6r7VZO;c}etdE-d3bumAMT;V>xDi|lLdAuGyHrB8gxg?Rw=Q(yMlj?{ z1RvnS4-h}aKM=%|T2SP2@64GwGjOl8Yc2Qo_3{c}4Ym#?-lnB39Vvp@aWCAe@5*+y z+3I*FJsoL6;a5HAOX;?JkC5)2o`sbfVR0|MBRgttmJASb0y;8TsK^T#FbV4N%3*X< zQz}1u9|pTcSURTTTPha?N|+%S-N2Lk-Jl-~635Z!xs diff --git a/twl/bin/de/matthiasmann/twl/ComboBoxBase.class b/twl/bin/de/matthiasmann/twl/ComboBoxBase.class index 104cf8a99cbcfbc1b35904afbf2cb0233f963cb1..1f63119715670cfec5b208f69dab0a4e06da6f8c 100644 GIT binary patch literal 4243 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 Su2tb-wh~^=+}*)nK>arqt1Djs literal 5354 zcmcIo3wsph6@Dk#u$yEFuyQdJ%&=n34Oc9&G)t)%P-8<#OiTpSI?2u^1G6*B?kow_ z*0!Xgt-W8dt-Y7tRj5IvD)xe{we1gTpVIeyGdsIUHsq;o^E~X%cbRj}`=0ll?_1vf z*Q>7sxC4KWqE5rsjG4+Ao;Ph7#hl?dDR0J3?KdY%Q}?;<@hBo1)*drX8Y$awrc#F{ zj+v95hI-E~YS=VTSs9%!m_}y6oiyyUhQ<+V$}zlB!PKz3_O3kx*Y%v2ot?6st9~UH9$nJDU*4nmE>?NyDl=%19$LB;shmDh+D}EXN!yGVEr(s)r#|p1B;XT+I#TE@4YBCwe zO=u%_+SRb0<|@1VOpv2y%PD$>ZA-c|+||B<%auZk;${suRs0N=Y97e&+$t=$6GD4ccq3lHa;DN9V*;@=jxKZ)M^SJr*cZT%+}68xM#Jh6 z&zL-Z(8vdASvz57-GaFgXTOLj(gTu;whPDb|xU$5STG;WoTeR154KEg5bdD9^|J8Dt9g!RBh zT1*^>;~w10O7dLa|6&~liE2VWJ{-mU8g5V#FT@hZfMhtD7kIYA`c|P18Q!!M&SH#I z<+^~!zG=b@^0upX-qdQplXcTe4Rwsg@Bj%u=x0Tr6mvdLdNPJl#+1~l4?Wq8F+3E- z_%aH z9AgDla<5{H!$yuoTEzoSi4SbsM`Ccvm&vh`_6bonY1-1>SKZJSln1qI!Hc6LxmwL! zjaa$7Z4Q#+7-krWDjK$v7*5ffF9CYX8F>xKnnfRi68fp&yd+EvQmlMt+V`8q$%3Ui z96e+V&ln|GE-y(0DJf29XsudU7(Q!z;c-GkK|@<#^^&4Ym}eEu6kKO24AS>}{J%}M zubaglYp74U=86A_H-WR*;i9>q=ZM^%Ruya&b%PT74C_)iXY;&bm>JG+SRVO&G-lnB zlkuOAt`O~jRrJ#Riz8VQTJ=O2mj>fqSzm-ROm9^bp^q58$YvWRTsJ(OXMj1YYUImO zBVUmk>0iD^V)&Y9Uy-Nb=Ig6o(ZLF_GPCS;{TenG%)D((@~j)Tyy^W`Hfu@|2)QwQ zOGA?ijSWqjz;`%K>Xq_O;!ps)otZfw_P`{XLuMW9q-W9u}Pwv z@d93o;zgdps%aLw6=vk5VVBH9S-G~=kYYN9-?16?>Jri) z;`pO9|LC+)9He(@#)m?hd4G-wEz%e(F;}I5Cxnte#mWA@tLCN^(m{VCZmBS7-ebvy zz9qbh-zFZ}O!^(iEU2P1i`WKM1AhqdE%`~n? zN0*qZS2#A30$?8^Eb12QXAlR_#+##H+UOg@Eh@kp8R8B;X}C?jt+ntmh1-LedpIe+ zwZ&lXud+oEC|knSPW}=Vj^4MjiGwSc*hNPDoE;(%iDJ`v^jt>zaN>g(@u9AH+%=E= z^SG}Po1ecS#xq=Hd{Y?TCLF||itiAH0^>G~i*P#2#)oOVo5m9({OG!b2Q|p($g=)M z(SZk*Ki#(!`s>8Qc!Yjv9gos;9iKmf$N24w(-28&DZaIed*&3jiL(0)9riY~My}%a z)`mouqw&_rJf_d0nPW$d8`dW0k(cQr$7(Rn#gnqw^(My7qK(5@4!f>kYyp<>b7*R9 z*daTKytSdiWkhM{4*uc>9wM&8l<*PC@hEXV%nUzDB|Szo22oGo1TvUK7N;?#IN0lB z2|1X*$U+kRr6PkcYX z_I%C!BxnFQNiZ|~Pl%J$#%vXkRG6Don446Xn-qQ+X3_lMO{|lA)e*`QIcVERJGL`rxyIf>%_a*#V zLvO=5X$Y6_8x2=*sW%c(x%CxXW-N&}%l!ETJy);E=HF|0?%F%jDgEkB@=%oOi!eoT zJjGMu3{Qlo(T8VP-DlVxpH*S+QYXo9$m=k!QWnzDhVd5u#K2p4#{8Lc^?ZLD-e&)g zRMoKT`U`hS4R1&NHMWvfQD|BeFUSe~GSGdEM^Jq*$6a-JM}7Vkf8)2DywZpG_iqUM B7_tBW diff --git a/twl/bin/de/matthiasmann/twl/DesktopArea.class b/twl/bin/de/matthiasmann/twl/DesktopArea.class index ddc9d384f80342d1a0d09a791f1268e53092e46c..65f3aca3328940a3d6d0e82e00b2c2591fd3ddd5 100644 GIT binary patch literal 1982 zcmah~U2_v<6n-|@WRrCJVQZitDNqDyQfaVgR9Z^EX>1EfYYX)Qx7ls8G}$e?n*v^W z;f+_`FvG|w7u+yjsxyJn8NKtuf28Ax&)K9c7Yt-3&z|?Z=RN1V&vQ2U>%U)r2QY#= zDP(Xyg%s`3kwpPwt60>v^uH<8$25 z@dbD~FQ+$TSrRY>EZoqrsbdRe9X4+2*cNw1pejB`ELUI$w{&=7`2qoMQI%JSs-dQ1 z7v!h+MUf5lI5@r)gqkl{cW0gE2q-DT^;A>HwgbYK3{f;%HP~F3m$edmO-sMU z?8~RFg~3as?CYg8{6~Y#5CI6vo-RzY=6mN2@CU8RT<3w<-sepaQ}+y z+wxBHg+1tby25u|!6DP~ZO=0IXNL11)VRSHeH{b*J<0GlO6lm9DWeqw?}KB+0j|an zp#`LJPoU(YbwqyRDuUz0HbjZ1pkfe7Wbp=9dLtSqaFQ!kX1JN@N3K-*3b~;thz|XU zd~T=?_59C>JwSWrd$jz9`1L2y{>asl7|-;p<|DM^c8Yf*S45m`~AO zh(*(CUuean1&w=&LL#lD6OT~NrL{Ub&Lw-2=~z#)j@KA3&(5dlO2@@|z3EBQQ^%pT zo@Ay!j4%Zc)60Oqv?{A~=<9Cy>gZYfT2mfByMMs%2sH#Qu&OB~n0r$E70hdDtHW@v^KbkXSG)Z1PYLbOUtWcS3sM^COKQVkqrLtrwg?o61 zR)lrFrFNoF8sAWvEV(^`ukaqN7%T6xa+ZIUqSawUo-uJ!!v{+91N_aOwFJ)X5zl0z n8_?N>-a7goKvN$>jsAkzfsFAm=46;OhDhs#h&{?f5sdv0{C<{# literal 2010 zcmah}O;a3I6g_Xc=aUy8#0e0wDp( z8(Pa{#}*Jv0;%C*+4bCLM8N3jofj}CeA~&O0SA(h0!{a=O)Fovyw&_fnIIC4Xc9PV zJE0pm_Si1$Y-B|np$1t>L*Sr990}%6yPk7%qq6J-b81_GmTA9emFKO%RnK+j0p=Ii zW~}x4b7EMN%D_OYL>8$GG211Mpo0jZ6HWQWjqrx^;EGo-#_UBap86n~r`h z5br4zlpyhDW8&YDw=lDRE`DaQ$Z7 zk0QU4!BtSZYgA-UyBRAgNnFPb%2KgdhZaD~Gb3>mw|Lff+oL*D=zX3bs=seY+)=wX zFm1;5*!!rY{Bsg-D!+oOJFj9v;%;qk*Hb}D5^t#>Sxdg=)M_&Dw!}N?g;HkE`<{e_ zWwwDwd)EDsW1{IVDJWaQQ5hyPD42m&iPElvx*E7Iv8J*cn0?z1T{Y*Ffu9Fvm7NuS z0pfuoAdpzr64J4y>Y<~gsj=@aFQ$ntfy}JG5fq&%R}F0QzOm_7f}@*VGx&iL&24JR zX~mI3k{9dZ(=hMqcd$iNk=aJld<4_@3C%yyX`qE`LWi8dA=)usFYt;ZCPzs?%{$i` zQcMSCayvMjGpcA)5HStWs5zX1i5|xGYA9KYMkl%$XQ~0MBYn>&lfJ=R-ws~t`yKgQ zUlqqL{fOpmGFhG?@6eD__bN{B5kE$5z-f~0=dO7);SBXS z%UKS9knr-5k z9okA5gGs*Y9ZWrflglQnn7){9PiN!p=_+nBR^4YGV?LWu)?(drkDe;tU1(2tcIgOP ztwnkn(2+IO(>?85srjmK7d}mjY%-hr_R031zSnhcFO&5sd5=+}ah`_>c5;$^o}yk? zS@SiFpn%()_hs5ExWS2-#z&aJXS6?O+}F6Jm077(UsooMFHt52k2tL5+$^n^ZkuNIVW@EDPJ+y4^}ejXy-= z!GGX^kZ7WJPyQnD&9oK|BzSpm-ZyW)_kA<-^Y_>90B)jeV+`{)99*`rkU`Fdfh!qI zWH6bftwj~Cs!+1vTe!wxw1S9%)flqvM81$oBDWMOdJLntf+$GuP+3~qU@%wXEy*xZ z42}beqidqg;MAf>Caa<7bR>a`^(|RxiIiGI zrzN7OlJ13-2Z0FVW?j6FyXgWQTcMGqnx5PV_G!*Ysiwd4@~z3{}gz25jFj^6!rh!M+g6ah9S@8GIXA9$<=Uht4Q;8s{l1mJ0)x zyTn4h$oQV;oxrgRi-($Hy5Be8pcC*&6@4yZD-77`#Ac{TzE?O|Q$(6#%{SZc9P-)P zbzi6Q%{6mz!2FB4O=7P4hv42vuYERH)_@;6I6oZkH$Wt)7CVF@$H{sF{=tn~l@ literal 1005 zcma)4O>fgc5PiFLW5>8@6X*vxfwq*A7-%F;l?n(b&_oJwD2l{!lP;-S#}1A|Ljmza zKpgl79I8qn!JQMoh%)P#mP4iD!_LRfym@cdKYxGy4&Wwk7~l+xo3h#!alGY;epduR zHQx2B4?N+AorZWF4&udi(KDbkOm2%;qUwvFQ+?XnmhG59>v{nLt21PKk$fSeNN%dE z7&2sTd4U(-p|D(OGU#jJrnJB?ZX=5v-Iwe2y1JQYc!7K}=(c3^OtgH-P-uj0;WtI( zsW?sQM6u7X)c7C5t2D5jpzD2ak08frTBT`0!;G45892|daIC2A`?4eadr@c5l|lS) z*p|K63j-5l7G_aYO(lk@a^tvXBaXbFvs!7IFieoEJwqcCCD>h7INccu9 z+B=U$FBN2MgoCIpA9+f0{@;}^s~HS-JqTp9=8Jw`_6=NPm^)27ZJVA8^F%QUJ|3S+6LQTxz_jxbVv z0Xhy}oGCD4XY`{p{-%z2&Tbky7EEUL+~?kV?zzu7=h@BQ|NQ<3fOk-eVgPqy7{qLh z&|RL+v6*M{9-Ds#0zRqAZj(1%}1(fyR^A25OTk<8Y4FZ-pZHETt&GwSB;8toSgf; zom;k)T`lL;57nl7hrDMk$8zTcvYF2AhGA@HH|hSRYRMGn$y<)O-mL7H_4{harj@>Y zwW#b(RkwKFS`08D;(1Ti3bnfBlm#@yam@OXtr`uJwnjT%J<>i*oMUCvU9+5m^@Oer zWQ;7AMD6h<7iepPisSEjj%v@Jgd3*oqfmwt;XGumN@oHMFHldh>g<|zcd6<$T;)(T zgXG7tgS*OZ(p9o#RRo65AzLw>hE;WlUw6S(#m8%^<`p1}`$V}=ZPttCs>N06eYpqY z->O}u;WCCbr17anqMFd~I^NK5iOmq3BvN5)YIuMt4G-CDvDwBHwV4CtY~_@5hHaZ= zWiQmrO=9D&>=n(LOPmA-Pn`-b_h7MU*(I}1Ei)WS&nl(Ms+Q(T%%nAZhR@l2q2Wt> z#k{_zEHo(WXeeSwK<^~2(}oFL>*)MK7ois*b@q`~jj0tG?qB+BuTy~wL`eCzP3j>5 zR?L#stavzLt9se=V65c7J>DdwYBkd-35;d(|1H^_>?=#HDpJprB*XvNj<{97?gIUp zR~;!p;;ak#T_Z(5^b%&3(`1XWRQ1LV6;2i12R|p$l)5y^1Ix zdk~dz#APoAWgmv+MU2RPWMu+5Ie=So5F_L}No;{BTtS9LM$Ej+L(E-zh}j1`#Qgb0 z7J7^I9Qm++Odrypf(ahb%x4lJAIKr^rUBopeNznADJtz_^qg41Gh(GX#2Py%R_Kga zS31NRN3NBlK`c3caav?QHQfuL`jyf$;rucdQJ$>(KA60wj1rvmVT@qbhZhK5eg`wKyNF!UoLV@K#eAd}#JNl!Ve=p{IYfE-6i-Xz6LU{p?$Vx}-H zr!gaMV^PjvMb2VP-o=KT$78vGs$9f(atTejj3;vSrK0S&i?ZJ?%08)%H8zR@Zjs_7 rrinou(NHQzzvs9V#=F4?dEBP;F3jK>jeUd$=s)@@je|560+D|K(gBza literal 2007 zcmah~ZBr9h6n-u@FC;ECAdy;PbeCdq9Or2>zcBa3{DShs4j2)E;Gn@PDx##sc=PdvH`^TRE-p6-w^az+`yHHiW zzvZZARe4^)f8-Vx9p%<4CG}&i<&WM{^|gA#@hWjd1TJ*d50wRE)$s&`B@n4M?1x&Q zb_5bmbJ2dNTCUH_`vNhBZjQbuaJJOV^(?jL9MAEu3ykHvt6P?Je{7xc7iwiY0fBx4 zCtxHYamqj+2ANZSY(2@F(*}m{rohR~nzwB?{Dqp=^p(dPqj}33v$XYF2BL^*lrazw z(c1=kLzFX+K$0Fxj%Tm5st@eO9reJq1qMpBP35kuhNIux!iX+g;8NErUhvQIlNH-v zcDyy`C;E-#nHUeXqdlGA)hc-o?*c`&6TZZowjZJxi?K8%vR7K8XVcQ)<1&rorEBrx;TWmRQ z*>3cr$Ua!!wsM_vuA=HWUHMEdiFqvQQMf6P&X-=cp4G!Kk6Q*l2APhjdfoQQ>_3@* zMY$bnR$F{(poC>I<=4VI1P1f3no#!|7L!=T?KnOc$iBV-Z88n4;SQU|M&Ao2*V2~j z2JSu=Z*W{$VvEBe%T86GZ_QVmKP;ylK{iHc;KEW9#xW~6JlNfa%hl5C`L#}4JkTSrGn&-fe>U*|KyC(kEKa#K%mdF5Bkg>aJaN(iS3&xde^aQG>%Z9K*N#=wn3 zEMyL_bbwC|vGUjW-yDj);h)hvet^&R`16G(MFwNDgnq(tMC4_};6K z~LjK+sMtZv9khkPw%&buOd%1=Ci(XaLvgG|d&%dQl=t8(e9d!!Nbno_4NuAQ+eq(! DlMaPR diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$Group.class b/twl/bin/de/matthiasmann/twl/DialogLayout$Group.class index 74e544be433e9a8d02ef90a7ccf5ab333dafb4a8..838ed5672151205b8cc6a4c2c642d7949a01daad 100644 GIT binary patch literal 7476 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 literal 7295 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 diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$NamedGapSpring.class b/twl/bin/de/matthiasmann/twl/DialogLayout$NamedGapSpring.class index 439c65218485cf0974a7149cd913d02e26ef265e..2c32b36a979ca64a759d54d34bc2403dec3beaf1 100644 GIT binary patch literal 1618 zcma)7NmCO+6#kkC*%)?3MU99oNk9T_sKEt6s3=P`Rt|d5CK(^g@Z|ThMKi_`$+V1>T4~L& zU&ythORt=h#jLbVwQe|lik?8n3Ny$r%1Wl9cnjz$%QEb_qO4X8?oWBL89Io-T*3vz zS(aNF^CK_!MN_d9mE2O-37YPcdG&XQ9CSRwTmbVr9%Dfu;d$m@Sp`NtPwchOzh`Jsw}K_P z#fp_oOCVHXtqt2Y@&W^1fDBjjt)_!5IDU-N(q@Qb*etCYlH&;XvHR-Pa+eLHCVM7sqFQ4xTaZ9)p}BL#605w(v?Cn5O{BfauK8aN3la2V;0 z2hwE>HnK~Rp^rcDuTb^03>P9^-`r12?58Dgg$b&{@Qu;ZX!9L5VDo5olaIxBAa)S^ zg-FAq(tN!LeL?se+FJ1wp>5jR1k&89*88-Mux4Ud+jME@b+87Fs2eMWd1H)b3*tCO W-A@3WUxBmqsIS2YWjpmqsMhI&KIqb}CD5jwG*$FB`G5|L zqYsWxKKP>?&n5*c$i&X1dvea%@0{<;+5P$J>o)+?SPCM*kg14FojcCD$y;@9SsCYT zEwf&!*Gk+r<$K4eN(u~F-;NHbNPHqy;Vkp5qWPY{RozG# z5vo6^;T+BrTZ)qA47#532dB(j7zqpqae*P}r)HA!HC)69@vieN24+wTd`nVs+cGWL zmP8!YFy`f%7DFF(Rj|eDy=Yp)xQvFI}6MmEM_#^#4QqWW%cFKT!CTq|0L`~4tIi> zJ)*hpIvVcc9z$FTvRA&uYi;_LkMzUS_q@wBU*oM-uFJ8ywjs(+E_K*NlUj6md6S5B z1};);wC%E3H04OfyU*#QJYfu)VOhdU*?F=fcSXnK4XTKY5k(-XUhe{{DVr~iH#R-U3qDIlyo!3px6qD`~~ zC&`k(s9Qq%PUB1mc$QY_2@&Sm9SnUSI{=9&8-P;kLJI98g>VTYGLGa?NS6;Hz3@TO zk3vcvM0(|eG=VD}b_R8*(!>4;<OkTXZhXP*9(+e)o9u1MRa{ZM&$Nz+Vj`(*x?N}mZZ1nw e!8tMmcz}6Y2MHj7EEZ@e=)S{4iYT-$s-fTTkXm2> diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$ParallelGroup.class b/twl/bin/de/matthiasmann/twl/DialogLayout$ParallelGroup.class index 2b8632ead725510a243ab2ba4473512114cd54e6..4e93adcf7a38f8633d01b85adc2ea0cad9cd6f61 100644 GIT binary patch literal 2434 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 literal 4644 zcmcIoeQ;b=760Acd-v_f+f7LG+Ac}j5|TDaX+jGuZPKrhQb=HjQCmNN3{!}r>p0F76jP87K?i3P2M0v?_ydPg5NA|$WYpHs^>^>?rY)es z8Et0w-FNP}=brOB=lt&7{`A=Qp8&7|cUkZWoS96ujk>wqPS4Gby6JRVZqG>D2G1QC z8}4zh85_?v^rx;GPo;AdU62_Y-)%t(ES`0h(G>{LaJJ!0f%=}=mUK{iwU_pCYXusc zW>;?>5RhGC$y5je5gQ7DF#L$xun-ie=<(92zVXrRsm!JB_K}o8RnORvJ2K#AJpEo0 zO6{P)idpx2Hx6_+JeD zwt4%m)KIR&!s!A_W<$H7-*^{7BbHcLEU;*{6*ijCEHKYY4~>i`Q{CySy{tzdw|Gf< z!!X6xFzT_?#u->95c0AEMFqOs)NJP3Y*b+mqjL9Z&_y>t9zSV*_}=^hl3=_h_R;>F zJ9K5QyStRf2z|IHliHz^q1{+z<6OO!$&tIaEM9G+U5f)d-E6PBm#&TK@2HzhZb0DqVMkR-r78% zOQGAwCVYsl(shBkP2KOU1g+>tuZ?wB&ye@HSreS{icc$>$`xxj&_ughTVR#8eW{HP zgY6aca;c1)8_VboN~LD1xVt3ph~P48wQxDR>v$2DXKif5N0{w&YA>s`x@_UZV%4eo zsEvzov9>g5!_~E8F*|)+q#YWvkp%lIR`RxQEUoiQCG9l5CIq|3SUthrrSuCZwq9z7 zg<-sNB8U)%B!s;4kNA@gX}Si>8@a@vgIY@EfBL>+24K8J`T zOc?SQDuoc!SYV<4D1sUhQtJOCxRw7YxI+x?0S5OVgZmDH`!0iffWb}upM&GUPz+8i zBQQaRJFGM3PsnoeR301k*r6{bdw~Dk3NN|;8GMj!Db%V5Od=feVQHmLcrfis)=kp{II1m8iGZk<|Ub;^1UmJlu< z;R@3&9(EcKdy}s2E6pdmxW<vNU%RFq`5RdBw}kI? zG|D${uKXR=$v1JK{5|1&9b4rekdl8wM!tpX<)3kz{0sKWzn)N<2WCq1K&dntHFmJj zG_4#kMXF2lb_^RbYUE|JNJi_p|4vho8M5qgg4%>Yfmao)RGM6S8BidLl_i9}By(nD zWi9?%D6d2P9Qwd3MlmOBvH*RBC=iHbLOJRlhOWCb5pV)`Bj~7HLX)7+3c13kfGw+I6yUmlHgQBTkUb6^UDZC-^YZj&gz{i4Y$lC%7}2&<$(TjH_ch=$I3_7mJIUUqzi0bnGP2 zsNj4>d6NpgNfDA*E)k1Iw4v*r*yeqmWg-T<%Yo|b<@K>nTF@ejoU zn#3N}EN)aS;%3V4RITEWY7JR`g?LV#EnZgVh*woYyrEW!w^X}$n>xqTTGOD@ z>>`$Xxj{K9-WIg1)Sw*cdjs!G92FZhKtki4mIPKM{)ijNeE~Fy7x78l#3oxRUcjd~ z8$>I4Q{OZ~JR|x{`-U;jGiD!U5lrDVGYXO6Uc}9mh4Bo2hFfqeXP>2}UTfne{w}x; zpXP1lZJdwKP!ST0^K?WUL$!rFGc3 l{F#4%5hMF#m}qY-x^_%Gu5&vF0& diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$Spring.class b/twl/bin/de/matthiasmann/twl/DialogLayout$Spring.class index 887e4540d4057c938ebba46531256eab2d983f60..18df944d1ef3e9c39a7ffbb3d65a7d7dc1d2229a 100644 GIT binary patch delta 386 zcmYk0KQ9D97{;HO9XqlXcg`Kozx8)Hk`pQog@)oHas`EEoz1z+W+S&tp;42NO!h-) zB%+{DXeGYDHJbY(;+-XO&HK#z%rn1v+OjQ+pWkoq0M=2mAmCV-!K}o*#Dc0Esi(EP zSv_wx!a9S!7lwXoC-9=kS6|1;2fIo(StZ%x8#x<&uq764xLA@{W^h%hpEUhi%#cm3i?|V#cfIJW>c`0gbC{z#jwu`%5XlSQzGlx!79${{jKVG|d12 diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$SpringDelta.class b/twl/bin/de/matthiasmann/twl/DialogLayout$SpringDelta.class index 36272400ef02dcbf5fb5b00838a55678d19e25dd..f13fb1d0bbdf1dfbe2a2c15f2a9961aab8ea3b9b 100644 GIT binary patch literal 930 zcmb7CO>fgc5PfTJA!ePZjoJgs!Mi(ecHWye-amhT{sQm}o`VwZ+TggSmzsqYhxSzq zYZe|bm?}DAU`>XpNXEHfC~d1m<#htQW^;Xyfj81fGE_p9$XA12TV}hW9TPGarX3OQ ziA?Eu1oHfy>NAvE2boH`J3~&lnItl6#G>Dql-vv>8T3R>S4F=kk|f9v<6uXLIPHew zI346`W93^6b|>u}h)nLL3{Snus@KUIqq+qz+!yaf5R0T6yl(HyPQImc#?cdP_ei@*Ul}fCuhHo( z-OxzI{{iMNox$*z&tQHf$iNJ(b3_IH5uAU5%}+4HPf;PfHY_9B>l6_|A;XH37BWbH z+>K=F6dROt{BJNf=!?EkG*r-yf`2Yp7l*gbSsg4AKdZhVt{Wq+=OZrL-}nvw9aER7 iK8#V>=TtUs;ucYuxLrsuVY%4vkVR^YG933Yi|KzI@5(;_ delta 441 zcmZ9IJxc>Y5Qg8~i@Dt9G?xz(O`;|ye&iB}_ydFx8?h2Wv0U*8k@F09V(SmEI)DdUM zoytqucBR*AchAoT(wE1s6Rz2H0Sz-I1X2vzdgH(VL)wIngi=`(1`^@kMtFNI1T_{+ z%waxyVAZJ0`j)xld5+(8We_-lj(XJLwL^yF{=n~hy=}+6kf_i#jbaKMmIBkFmcmlj zCR28>a2j5SCpYBJ)fwj$HJ_3stN@#u_`2eBI{YJTkcqY4y>&#VryN)uLNcLFo)<|o)I%Kup8Q!MqK WhQ*OuqJ34Tie<{`4;gA$LE;xw(KCtw diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$WidgetSpring.class b/twl/bin/de/matthiasmann/twl/DialogLayout$WidgetSpring.class index d5cb3a1f0aedabc87984b5ee7680fd998e6d758a..bf0cbdfa9eee16fdcb2eb61c05bca66555d6c948 100644 GIT binary patch literal 3504 zcmb7GX^<3W8Gibk*}1lXWh5ZGOPG+53`5w(#fU8A;0R{oEFoF4u<@dIr+2nVZ}&LU z!!AT)q6wOK-x`m2gsg_m0bzDASX!m#kJm3PwbW9pv^=Uj${$u)vDD}7?m2*sCQ$vo z&v!rX@q9bq{r7X<05E`aDQrP8Nn|E5fs&xf6f7JObhjW|(3BuYkSnMx=&gb(f~tZ% zK{Y`~1x*W@5p+z@acS<6?%M>tUC_PKyd#eL61Y8u9^9W||D7qk3lF47=0Ryr$m(}X z^B!p)isRuF)}xrfd&Ry_n)fI00h#<@0v}4?!wGyOj*rU3$5QCW{c(IEj!$aPrZw~y zie~?m;dzsmQJpdzr{9~l`wv>hlId;NkTh(oJ^y>pLc*lwv{9CK^lRqgv3n>d{)8x`If$qK0y*$r9Fuyve6 z(QJML;}$h$DYsPI$n+I;`p?VN3d1LYp^wr&*=Cp zKBwcg*rwz2f(8XWDrmc)F9_Np=!=4`7xX1THwgN&pc@4}Cg>(XCj~u@Ssgp2`xWW# z60{rJG^}g6k+*HLWY{|^rJ5A?%`@X>*|S_n$bMDFo3SsBCv=>`oQ@}@c}kk6@r;f; zrFkRXq+wO-ybHp@WCzL5=s1lt(mcz^W~MD~GUH8}Qzj?QqOM_m#;Rr<*UPXnyo@^` zvzZCkw%ut)Ia8{*wQ_Y(LuY2vtysrh$1`loCv()Scos{S)!*U}`s8P>&7pbJ<5}eo)vzLa=|Vnb3C|7cT|;KERJIotGW-*^g@0O?piABW zB8dEbOXd5Py7w(r?^|l#w^Y1usdwK}?Y^bfeM^!1mJ;_ZRZg4aw+A;v!(O7>q4*zI zo?C#H+gOLnok66I=xGirypC-eQNqU%RVR^DkE2V?;uemt3^pQ<0((5dcR(W=!oKkM zUvsaFJeqvw!Sw|{_optCTTvEr<5H72uD}>AINQdwhb*vD$G&uV* zn)ErWtYejob_Juaq*>vQuFlb~?v`Hz(COC`=v1e$QqAEC^(3xUPhqQi8oSgp7*eNk zNS%SBp2Y*|EFMyI-)}wesOk4@*dKa(4q|&dp5RHlB9}cXlAs8)b?x{IZFx5+bW# zoXEFGuvWcXH$ch&y@;wsyK8gH*M1J_viQI{iFg4G!5G6)KxzV%e zj`qyl$65%}B&xeOP1#(plyAB&cy1n-6GtiFlemK@#c$O)tldGY^IJ`PJ+0yw;}_+Z>X}F8FhL?5 z(0k``#o>9ZJIDdm!`_t#XK|%;_{p|JW0F{|&}B(07JcYsEPjiG`W@r(durCYHbe}Sp~ikkWx9#nt#u?k9@~gU!FUcFiD4YmmB$XaVM1KK?))Mj; zMwrVy9C7e)#bjLl!@nR9ZK4@){)7qlpXSvP?ve9YKe~Xc3mend%p)6| zwjs@+hIk`U`dT&;nC|Gkk07-%y{Xaf2>N}}Kac)VuHL+WSGA;lIq5^az_9!aIrSfG zVeSSa3cDi_+#2a;1=3X HMHBx80N4dX literal 3501 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 X8TCTcH)Gd)1@%|mUfPNJ7Rvj7(|9Bc literal 12130 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 N3GV7MF#eRh{|{!Ke1ZS~ diff --git a/twl/bin/de/matthiasmann/twl/Dimension.class b/twl/bin/de/matthiasmann/twl/Dimension.class index 60f15ed4f2c610c0031b30b3b40d7718b3279651..aae6cb49af9b302f67268c9e543e460b448fa2c9 100644 GIT binary patch literal 1352 zcmaJ<+fEZv6kVs&8+D+yTon+!fW1MbiWew|+zb&U0Yd;|!n922V3}e&DEx%qz>D#P z2aN)WB*rHn{3c^uXJ&vZ=)>7(pMCaTd#`oQk6&ND0?1%Aga~?T;6qxPTk_Z!Kqi3O zA^6c7#2vZ!OLI4fdqLcn?t>7M2V})y09gU=^2FS%K*#i|p5D+bt6*rA4b3#u)|+B_ z+}O~~icvBL1;jSj6xWV`KWmtVH7wwZO-;oYh%#1M)dj-ShN(Z@+Q{kUXIievNOZcC z*NO{T*^p;9=w+7*i`H~&Q9y~s2`djvMAlzzX+>T(#-`V`*IK%$nQQ6U+`68(2II@j zF6GuG?3qgrQ?d$rS)g{_((*57v`xDmB@qY~v`WF5(JNg>tkS$yHq14FhFH7`&WVz6 zFq<#BG&v$khUQCK<-9&=NMdy-+Vsj%R5T%}q8<$@8l@QmrzLop z3xpGg5Q)}(coJ>MZ)*~sJ8f}CaL*i%-rt*2a_R~TdVIPoUfVbY$U z$*FfI@GyRp+RHBdqO|gf=a?h4j~&6kbcjGScz_z&>j0tX1;N_?8sq5OtprmLEvi;yG{J%~Q$-?)eQLl;k}C literal 1383 zcmaJ=TTc^F5dKcLrKK!wDc4dEP|#j!LGeP17YZ06NFs&+#)NIVp^IgU?N;G0_$zqv zjR%cV5=o3tKKPrAab~xag2abCXU<%{nQvzH*Pn0S0Zby}giT;DuO@aC!zgG(ZnA3Juy`q(LC+q^g9p#;pC@T7PVkNty<_rP*=KPBlfuW`UMyCYCK7EVy9SFG6 zxuT|P#zO%q6ka2gOewFrA>fhWg-@U*UAH?zi;Lm4RxCUD9;*d386dmR~B_ zqDq#fQcfwZDP@h{rqT@wJ&e`Hp?xx(aIw@cqZKYnNHi;SZL7w*Sp-$aj}1z#zO5=n zGIocSF7r)=HyQc5j2jpw9u$!&Diw0>427G#O(l_*O4%K*?;jiiN69FtWr6lpL&?2a zR`%*-Tm_|4;C4_!EK(Muv}%+!eOsXGLKaJ#a$;Pd_dJEAo~>%dyjpf4DIhn-_-cQ~ zjW{N`HMcKOtiy%Z*kek@UEHH?D0_RVo);JhEjBZ}kR;{811dK*d|;xdI5sU1Z*Jfj zdQ&ehW6(N?*PQ&Zj3{CP?$uJYoKqJxp0cMwVw|~RgvKe+{z?e&VvywLDVsOVm~MW# z(MEnUy(VC%6KFq$*pQ?Xw0}XzXHwYENvE4`;3m0_qRZ5R0%;lR;TvSUy z>RL?Ygb65H4s}3*YgYybE(cFt89anxg5&;ts1r;^f5H=~VI)f5M>wRT=nsfxt|vy{ zA$%kTNDLgpVLy^Mk7Tyc>cBMdN}&TY=)uFL4kQ~LNMei{Ey&)FTSU!<5Mj`d2>^z#jmbC9_u)uX}ok@YMbnu*~l|Mt?bHr$#@E6SdJyv`@zm4<}>N{tl zEu)j!uMh|B``9Vs8~(%zCOAuu`c diff --git a/twl/bin/de/matthiasmann/twl/DraggableButton$DragListener.class b/twl/bin/de/matthiasmann/twl/DraggableButton$DragListener.class index 688274b977e086211a7551685f9f68768ec2fa04..fae4ffea75ba070698a14cdb24d6175aa19d6899 100644 GIT binary patch delta 147 zcmdnYw3$iZ)W2Q(7#J9g7zEfExY-%_CWb{Yvor8d>L4YIbal42%p+Koc1lm{}MZm>F0Y g7=Sb@0~?rT2l0XO9AJ`@ffq<~0d+6}Ngg&%0Pe>baR2}S delta 147 zcmdnYw3&(b)W2Q(7#J9g7zEfEm?mZ$i?K7XFfs^aC6*=X=OpH(>-#5Vr6!k56o?RF zWZ?14%S$bC&PgmTPAz6<;G1|}%@-)@Qk0nPlUZDn3Y27HWME`q2Aasgzzj5qm4S@` iWFR{O2bksr@fnyHxWFVg0}qhq0_tF7;AP-v;{*U9e;Jwp diff --git a/twl/bin/de/matthiasmann/twl/DraggableButton.class b/twl/bin/de/matthiasmann/twl/DraggableButton.class index be2684fb5177d7a9cc69d28914b54d2150ad4b5e..6efa937a0d3e7ca188599e4fed9872cf3dfa84e5 100644 GIT binary patch literal 2891 zcma)8YjYD-7=AWMySZ$kwty|rQXxp1V#8Hx3rcAVMB8#Hl$#1mcWoEaP2JrDQILx_ zWW0`!GsW>X&d3LGMv=Bt9pw{#@JBg5?&f5${Prh+Ew~xQ z8l+`-UWOMUXh5$FeNpt|fD8vCIE2F@4amU}k&cQq7{fXoljZR!mnR};5DmWp#K&MSZdEp6MT)0NR(*K}26 zxYOcHc&kX90CF|m5hy+{(>lZ_Z3^pXnDt6iyZ6Pgs!ZSOB zMnvbHzf=%k%q0bhMS-6bbk(v)OvmyV56cxVbq;w}o<`CKbaZUk^yXr;Ezw+-!2ftV z=9YqNFHi1~7{W9*qT5Es?8%!p**2C(@lQL1dC<&LZB<#m1uX?tbnDRhK7FhhL(TQF zV?Gf-(;oc|QVQ=J$`n&3I*`pdL*`yf5@gvtV_MJYd0oR(Xq91`3_CO=(5xYe78Ro! zY_x00;#C!n1{a=&9P%30<4Fw{MA{(IYq+T4by4j`kA^pJNyBA1-H2udb@G{1Mz@Dk zoipj(<2YF&zKJU;u4=f3>l)sY;cX%F9CmAXN2GT}dJoqXtXo7qskouxeY7iBSx&o9 zbS#E)hx2?B->hKMV)W$RTq@R=yHd;zW^!LP=gy>x${ap&ag1>Z6{fWdq_KZJE;=mG z#sxp%YcP5G4jdimIo*A@bKkz6ZUs#Xr`il=giL&9Y;mkFHo4gy_Bhp$rX`K2B9Tr@ z$}cGzBBuA)JZO#&T(G>M5vFY1Fyp0dFV40XpR+(g;1u!ItYcWV&UPF2zipTln-{Qu zl>IJ~Dg>`jWV)ej2p>`;JZrqu85Q=Sgx^`B+&So&OhoR*#5Pu&!_O$@=>QN&6k$RD64TUJjYI3Mf`FX=v5Q$cMO zOf7=(D%xmefPl}Sy$GA)T(I#TLU)KCfY?~+ZyIIo>%h)3mn(jrcX_1j$y?!7aC>aW`uLp zpb(>=8Pli=f~zIt2uq}vhVI-&wOpRWW34|DH{;tT!3FAz^2VefO&}_BYy#SCblpYG zEz}T{UyuEc+7nY)c0U=KKqxth<-uvJ2tcIJG#;nqlhS0GMjeafj(ojdq7d|>(9b_u zU~gZ-u3m>rOyW-@YJ7#|_?lLI!?gUCnf_e~!?sz5Z6yqYP^uB8@iR5L z-H!=SQ;UX4G!i*<8=>H@sF};CLNd4dCbAb)?H23ykw<_YT+4YS*)_3QpgPPytqq7* M%AewXjP0)f7mU-9W&i*H literal 3654 zcma)83sW1{75-KdT9B?CLL3L@f!$cHh3p#YCN&98VgZX$5E4ch3~q|oXbbCz71e_@ zandGrlO}Fnt=lAanupUQZmHYaq<+wL(&=<2GwzRS`<-10WFkCfMtknL=brDL`<-*o z5(a!h0+lXTB3GhLPMiiXKZJNwn?fvyI8UutDs?TvL5Q1?IWTmD?Z&C?uwYj zqE#r_d8gQC7bVWDhTW0Ocw)47U}`kplQbe(D^h!`2#*yp7A&U}8GUx%(%?JFC>!@r z=WNF=J+8qYZ6DJR=*?%X5bna=IyPyzz8dhs^nk9^CH+ z6@njI6&^q{17m`?!H(PEixlmQ)?FBPY?4CWBw(w%eN489$QBQ3XfkPa4H_c1k_KfLCAIPClD%LFZ{JdA6yCx!R;ikB4G%@z>xOg7G7-3M zD})dxT(K7J;rc<}5>09&JZn1HoaGjghPL`BuC=>;GK772L`N5Ep1!Y9b3m z`Et<%7Qg)pkAWqrlLfC>A6$ol)q?JB!U6Q?h%>TvH*`y1p%;A`HVmZ?XN;-7k@&%b z2K8-qDX!T-BI{Q;hyj)gBXeWsZRf>F2-#06G$1Iek_tmNt(p*fT0uuJj6=xi7}3yK zFU(sdL17e!$x2q5iQM>xXd)q{wGZP8M}*3a6)FYBaIzt8JE?FK-y_S#Qhwfrcl*$- z(??JZ-&fdxDPFy3`_V**^qLCC0=`9cWO*eWDb1znWyf7y$1){uv0`o(K zg4jZ|4Hqo-uB>FEq)?U)6Bb^1{R<_F#QE`z!b5nN`Lz~!RqtEBJQ(94oK$$e1|>f~ zFDM#*tnd>-*-*($!YSHWOTu|c;iuJ52l5M6L5k#O!udua`xS+s<5dm81v6K+*!s3J z4eJNtmbQBdPAmLE3Oqb$OiT@r7@3UGCzs<5g*Rnh$^3|sG~yM*+X}y|xe-01slN1h zN?gt;{Mv=`?g}l3hh_d9g?DQ_dXtIXL2r|@3g>DpMrza;@hrbp_&_Ym!!nK}Mm@tv z3Ln>OGL#_-PxjD zMawzpfeQ%uzd-9{PWo{#zd?7&9^A*VkH7o*Yk*H3;J+C1V)83U-=P$&hS)WoiXZrw zal!`~1(q?-ksFv2u?${~z(t8*K{Dah>IgP*{2UAYBwE=fx8eo9{4XMom(Y(>7{DtS zeTw#*042Q9V@~ixKR0I^O4X z`v7<2L!Rs-w6mSGTA*rrUrZ}rA5v?m zn$C-91>;lERMmDtw6Ld5e1TJ!*wmWYUmn0B+7RUxUBqq{co*d(=z&4mk2FRoGk6Ne zC{3Ke9Hm2MPEtOPmstgitb#Ml@*>}v^Z1nVGyDZhl*KG7LE=vHKc diff --git a/twl/bin/de/matthiasmann/twl/EditField$1.class b/twl/bin/de/matthiasmann/twl/EditField$1.class index 728ae4beaf916a1bb4373f375443f50f6849bf86..72c409daf67744ec9213f90a0bc94fcf5461381c 100644 GIT binary patch delta 354 zcmYk2-AV#M7>1u&S68=DwzSMjO*<()P%1j<(4!y-B039NZHZ)E!=FyOhGp*{sPmv7 z=%5Se2D*i)t|9t_z-Him-0L!^Fb+i5H;$v8YUVAx>k0)2+jC5V&pMQxrp|7~QC?LZ&kw9rauO#bvwi4$cH@${Q7l z=vx)8w=rabU8_H$YR?$=vNF)338}*PAT3!>GBz1z#pO=2qBD|r#3yIT+5_r|*tFlC ikd03)S6ot=B8YfN1n)=h&*4SFQsBw|1AnvD6yD_=(N0mK{WLS(pe&i(s_nV1iz^YQ)q24D|O0nSj@fmdto3gj4^fx1yaq~eR< zxHkykJ+t%M#UWpxD12 zpA5UvOEyA#@( zNEt^dtNnIpl0RXYa!FfRbp@-W3~O-cE|5PU&3cyq3^_yjAA?UJ`0NkEnlp?hYP80& R0gp6Cf7`?sIeQKy`vU?QE^z<= diff --git a/twl/bin/de/matthiasmann/twl/EditField$2.class b/twl/bin/de/matthiasmann/twl/EditField$2.class index 96bb85294fae1833c2074a7c9bf9b2972edc499a..b4a0f2733b4539c48eb5bdf7494c9da2d29b0602 100644 GIT binary patch delta 355 zcmYk2-AV#M7>1u&S68>SwzN!3O*<()P%1j<(4!y-B039NZHZ)=70sZdu3_;Kf;tZR zfeyNWZlJ3u>IR}u2y6!4_nn#VduEus_-(xU_Ve-zY_OWbBySU^V3T9XV%ef-QHqXF zqW5MNg|n-*-){xpVBilFmA%LG7eQTQMy`J zxLxnkYXqJ?YwWkXe&<3lH`zKEYVEZHUr~(Q;^;#D-B_lc|d0TvZmaILXo`_BQ k?J?Q-!ZN=9F_M3b7+EMu$vg|vZpx=E;!3gwXNt@C1=RdD7XSbN delta 335 zcmZ9H%SyvQ6o&tqG)|h1HeO>}V{7T6#zjg6ao?3IH{w#5)*zOUl%@!-1m9rDBM7<{ zyx;{_u6!Et0mKvOLS#7e|L67%b8X(3&d2xj8-OmF0-T|)1FzQV3KSTep*mARq~eoc zzdsBI6M>m5X0C1>Rf}Mll@PFO7${2=;V>BO%|m_J(eLe&4Hp%GRR)icu0%B-C=Zg+ z`9ac)PDlMjjgR$L$CRj}kzKKESMJ4eIPOI%O~VuodcvSEvrksJ*afEp*#6c%r2mMy zTgo`*^V)BRCixQMw_L@xLM diff --git a/twl/bin/de/matthiasmann/twl/EditField$3.class b/twl/bin/de/matthiasmann/twl/EditField$3.class index ebc78aaa558474bf5ebe0c01a8e36faf91e6d07d..7ada7ea5682ffb7ab1d953f67013d081522b03c9 100644 GIT binary patch delta 358 zcmYk2%}T>S6ot>^r%A_&#HL!SrnPaS>7qr&jmv@{2!acDf)fp5iD^w*w?0G2I|#ZH z`~ep}fG^-{xDefmHz3p*IOojFz26LTr{C({+t14@fOV{tp`p&9V}YZFMFUF)Tmy~l z=s0`tR>2^4<2X!ukxbJtWoYeXcGKEsP?K>?y1I6lU$Sn^KvQ5DEdc|jKpBpJ2Pd<< zHiO-lSF#hy_^h)Z^uv=8LuImcFpgsxL?MHl*=~NrHr&ckrlW8t8C>+D^I8r6BcDrWN=JlhMew&Lpnuyi@Z29{Rglo nsFQwPkd-eO%J)Bp`NvRE1sYT`i#cl7=-=jHQ{sfv$Z7lnKCm}& delta 358 zcmZ8cO-sW-5PiF8+$3Fftsm9Y*eX5Lcu27z-V1^!!GlL(t3fO^ElKez_zyyVf+xKR zet-u>@#N3(2Z*z!2XSF|GjHa-nZ32|Z1wf?@(N%Z8v>l6nnyvU-V!Jt_DhD0(PkMPQjBAWL7uHv^@C z&W7<`+P`S`&Ig^oPEYgirY%uLZFIw0S8_i|;dAG3^(qOn!lk$wIq#U=dnP@un0AA*&#GN=P-PLe8SQ{6aEgt dKmM3F6B7#+l5wmeAS}?I*RW2RInNl<`vvqFFBbp+ diff --git a/twl/bin/de/matthiasmann/twl/EditField$4.class b/twl/bin/de/matthiasmann/twl/EditField$4.class index 3a7dd135ab9e2a0ca2f308de74712b4fc45e7da6..576d28d92cedd097dc49810d6d6c2ae2c4e01672 100644 GIT binary patch delta 417 zcmYjNOHKko5PjXi3^WZ6F!%-e_=91AQFrciWnx0YlElP8Cq^>q1tTV|Sa^a7J2#%e zL@{yU0la`W@D4_URudBKr0cz|di|=pZ;hXr^EP>T1+W7r0RsgA6Gee#tj3YiSTa#I zQ87^sPfo-4Z5s^oNGY#>=(|DS1q_wr&?+VO86y3GqF5WNF*R6lE_PJ zVoRcidYGy<7_6Rq?KXW^T{K(Wo_BV|ko`-w2THkJ-(x6-R&n&fb~EBKXnXE?OZhjt zO}#T3vg#0J8r-C@;$W7gyU}|%?Ia{+Q^fY@tTV!CJb^jS;15$xnxa7(@K4MU*LqUH zLXMEZMtitpruNKqeyU|T5-t$s USi}-xl)iceSz?0v7=*Nb0l6+ZM*si- delta 400 zcmYjMyGq1R5IuAEkxjg=*Cf8y$FA!u8^INAECnm81q*Al5`;CRaMjkr&Mu_0@)rbM z!9pxVQN(|-wNU4V1-&rLnKNh3%>5~x7uDPM{R4nC_yz=_ntW7O4CD!_6PyOkD2NZ5 zt#&8eKQ>S#*njNKNgN05C`|mliV4D?gn^QU9EK!JC_>I_>?Rkh$-Bq&7$yvir&m-f zNK`PHev+d~m?l6ss}eQLrg>3MzBXC01TTH0^)tC0$Klad6m+{`mnH1VQ2;5W*YW9s z!(S6ot>tBu)~iGMZ}ri?wm1>7qr&jVo~_3W5uFf~f?h3|TbRt0-6Tmh$0=QTT;bA#M11l1%60yWub#YmJ zck3XiqoT+MhbAk_yd<@Mq=thnx+_WJqNEn#j_IvW;6)-yRFu5>(lpq=}m%ni347{g4L;}NDnT3a{=cX$T~ zxjM~mm+!U`rtMcy`VQy$uSfC8Q-E+#W3Q~|sTs_&as)(U!XB%A^V1j58^rMh5L&cw eA%*u3;*TK$bslptj|Enjzi<(nosH(Q^7;js1TT#M delta 349 zcmZ9Hy-EW?5Xb+smviqft8V;?CZ36sBA&$sMX?ntE5X82IOPz+a)lRc1>a!F3n)H; z;0IV(SqY-g;sc1YA%(aw%*=mgelvUH-}?If=j9c^Ce|bbp=Hy!+1Zw;5OhDg%u2d-D-q7mLwJlF(YdV4c8Es zxna6GN?_QC_7P?Q3zTn z*Y{7#N=+`AC}1GO$iU;7mzP@PoRe5woLbDzz&&xMf+ZsZ2TUs)BLgD?GtguP21cME btPE^G783(InB-vK1kzkU6^uZVhm8{ew`dy; diff --git a/twl/bin/de/matthiasmann/twl/EditField$ModelChangeListener.class b/twl/bin/de/matthiasmann/twl/EditField$ModelChangeListener.class index e059ba7c6aecf3c2d0599633058ae1f63367e824..9a6bc34920546c1730240fc5f51e6a08299029a3 100644 GIT binary patch delta 341 zcmYk2%}T>i5QWdAH@#`R(b)J`H5FZ0t&94H8<$-P6~TpTQ+v^tcneM2t=sM-bS?S{ zf+)D~0el8uz?TrGAjHi%hZ*LZxp!ob?2XT#_YVO3SSvta!G(=Q7fUEfEK96Ntft+| z^n14woOW9}uHQuFS~uEBUmM*cs1w6pkE0~f3E`lT`g`6nA=eui)~)S}@jaD`3KEV& z0f9uQP)3k?hdTtn6AhzU%*@(Zv!k#2gkn}Y9~cugV@(KCKP>UK+w6uG*7;x?g#7r6 zHt(qV2J4xhVnMOyxdHJ2kF%O&xR}N)JFh^%I>q^jebRHPFQ8ZCvU!&|5RZ`J=^w-S VV_2BuDGT%P*S6ot=CCY^K~Ypl^|H4&kRc47Ph5xeZll{=S0v_qxD2(5N2xavw6@*pCJ zf(swOXYg6X8xV9c_Z;q>`<eP$na>A>zJ6{p$d-srASh``KcLd*%F zMytB5uW$M$?_F_#>6Z~D4ep&3g&FnoY&&io60U;}45dqg3_J^$1%{`&eIzzS9@6tGah1n%nJy&^0u=24wM&4P(~ z9?N;$&!Zub?Z{XO%(VCA2kH1S*matFGTKt_2P){QRe@qp#_zmfSHl9LDUf^S1zz%8 zV77W5ty$Zqb~ALTU2c1U+8FdYDtaS3K9Nd0>`H%IMxKsGU^dzFVu8|Y8OH}<lajxC9TD9{Gk{Bm4qE1Eyu7I@_4x+AF_q4y#xSfU` ztBo=o8%5YQE}&#%23G|ZPbU60hzI?C7$wTx?5jv7UKp$$c2!?*D7O(N^W%($mV1!L zLxJW08HK>)NyW|1zUs31=@aPmwWq`44NjfD;H@O$Gg#F(JNM7RnCGJ_fJ1?SN$s1j za#CC8nk8OlByf?@4l^=b%k^W3`qB}M`s@)hp9mSK@LwSTW(`@hj)J*_lDUja#OH@J zT*ehf6iCa6bf*g$EWk03$~@+(&#d}q7+;VT_{eBjA*WAFCsnnFStC_}Yq(BCH~N&T z!PTTf<}CS9N}e7jj9W4>i#gH+Zs6uf<|W(KeywjXcPhDKzA;VXZ|b WZgFSuyPY!cU^+zwXTF3fO#BAkRLyz- literal 1030 zcmb7CU2hUW6g{&n-w2ditcr@ZTA&rQ@x|1b7}7=(+M1vweH_>cY+Yt?cd&i;Bk{op z|A#LoHjSF-yFbc!XF;gOni#^~kGc2UbI;88AD_PhSjT!42E&>qY6GrR-{$^+OIcF~ zPHoe&)s`(BYxxoP{R7vtwz>aQcu|-P*?s<;*BmZ;wcXCX=&C3p4Eb5M-sfIRJR1qw z6%1yF`(zfIe=pczNDc_xmOb6a!0HTLL*I}S0*HQg?E+T62sJV}})gwIfI{*NrQL&OoX zr}_bdMiOBZQaFzbbkL=(9w_2kYLscUuq`cdNNYA|aevgA2~{XH8s*d0jbfQ$WhUVh z>5qm(*HgmU9SV;t+m)M#T`|;73^y3kJFY5Di>e7Mp`=wRGc24`wWU1LenZO{_7(St zYDh?nA<=S2URP|{TCDW+NmMlnhEzjJ;nf{_AHt8~7Q>}~N=6XBzaXN0gMMp4=S@^KUNEPI+lc)Hzp2mo diff --git a/twl/bin/de/matthiasmann/twl/EditField$TextRenderer.class b/twl/bin/de/matthiasmann/twl/EditField$TextRenderer.class index eb94c2ff168454df94246205fc24e53ecec79cb9..a22db3c920e6e61a8ad7bceaf412d24e5eb74829 100644 GIT binary patch literal 5128 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 a8^#S)b}WS_wL&S>i<-Q24*wTh4)tHP^cXb& literal 3066 zcmb7G-*;107XD6ilG~&Q3LT?JQ?!Vhrbt1ts0Bo7YojS(TZ^C~x6N&OA-OjuH?&nz zXZ$szGdjP=K00gG;$>cDEr>b~KKkH4;r}o%^Q8FgdqbdI!5O<&bAIi!&;Gvs?Q`z8 zKm7Y^01so`LYG3W=!{hCAXs+odd2pELDNLQJ9*DFQooAbvTwYpzpUeAi7L4)05wX>tu zq+eTfQZ(CRa6cX(<@HbmH@)cW*`ax{$QleGr_j4>*C+kOM*U>%lwWOB6=K<;@Tk28 z4KxA4jDWqM;RV9>y({E z(T9L}!eC6mBrA<_;7W$Y?-7Hecv7K1qJ zMi!8r02A4KJ}+D=JZ~_AS%vK^){RP1cpy9U|0qt}ykIbo(@bi3T)|#& z%EGzA{?78NweFCSjc0~M87nnh;i;1%MYg;{SP+XBr|oK3S{7a=Ww)`GT%I#{Rn)Sz zej~%&UkhZ(Hdv4)(_WhJin35NaIkdio_xhFv9>!GVH;0q#Z)RR8@RZ@8?vRr8K=zK z=aLf@4JGS})_5z%nT?@*3T1c}Dm?OL_NVQDZhUbQtGJ%Hea)Z--Xj(hHtBn$`2O3Z zsU4G;jrE{`6$_UX20Kx;!PsC`M74!Si1Mc#x3nDe;B~xd;SGh|Kj|Q3z~D08;{95z z*((YMf1U^^&Xzjg5f%TEmu6=No5UmgxKZ95MjhsuJV~EPWiV_05;NM(RJYa=?1oG6 z)v90T8x*z&WPbx{UGRmVaJm{Ds_pz_xAjlyQ`R=2O-~JHyd9xuEqh+|~Djr`)ibjX8U@#YpJRWP}X-?&vC|p60 zxH#3soIr?$5OM?oJ%yCcV~2hY2Xq0C>uF5u6F99;;+%dSfu6&gdj1xOm)j68<3*ey zw6pY>fwg1Kg1XLr7h4N2g{>Ot<50`Z8j+xOlJjm_twlk;GODA_`O$dPS^Ng4(((R( z;Mug!{GAZ45^aB4H&Hr2nutc3bo@(P3}>v?E`gU$45Y1eqR4*rE3nYN!dik1$&#ke z%s>-wZzkXjlKL$A^h?ObSS@Gg6j z+cmt$UW{_8;{8xieJJ4r_Tm`DBlwWL1RteA{F<#5l1IM2hpSj`@>aIQ@*j>YI-HE~ z9V^6+3^Soe2__$L*2Hf{<5#d-3^Gl8L~=6egb-B_wC6{4I-$=W$qamc{kxl>9~NzE z2i6Xj*X1ooXJf$a1!C9iJLTY z(!xnJL__38uGqvVw+3V^M2qES?zx4F+c;_Gq$4EbvNI^p;(lG6baT=ZlD+bbklZS_ z@za)&+%9)82xoKcIh>r!$$4CMKG$BruNU%iUBpip2jwN%@=|#jPjY!sUcvd5L3tGy zUL6#g+}Ci+YdN`&lk2(74g7Q?Ki$MnH*@kOPHqX&b@Enzx{aT1=chY@a%Z;OCGX^y zyLj@u`Dr&Ndl>qAxa?kj-OI^+JnsFRJiy6=T(*yshdB9ih(3}JbB{;3_EDY&uetIo z0r?oee3g^OL-GmvBqvXC@^qH$lL>CMpF17kvV&aq3_l&>}!H^qi^xaZvsw zAm0zsi-rY%%ESFEAb%dBm*p>*r+&#LzhX>&%}>AKvJV)L-}2LkoZQA0zvJZh4BQ_= zGA{p^CI2M<%*^-~PX5Zt--6-;mWorDJ^vn(|B(OW_W$DKqmcZ!{Ful1grEMy$q{by zUvB&3 zw#BLcA-qFtz89^Ky45bbD*cJb?g`glvUt)?~7u_;;?>+Xr7v!Gy2q^+$f(!51b zcH{Eu<@3*+-_WqEA)rQ}uCXW56I~MBA!uq{OLRheq^GAf7U^z}baYJU+156p%Ncw^ zbw>=9v3Q5>QJ(BK15lYk8|GKfTeh@rjXTStWh>`52r4wyH7gn#mo=POkHUF^LeZ93 z&)nXP8yUc`@67Ft%Y^x8w;&d6Ytg7-HoGSc5` zuILVq^!CJS;_aPnQC_uW9gWc*rYEK|%bHvV)Wpt?8vev|>D^YvI$Gk}1Won@(Z#Gf zZ7$P^VNV}yQ8c!x6#(REI@WexlKt z7Ia#LZ@YB$G{d)z5fm3mBXMI_3bJaTYk&u{_fpOG%UOPzZQ|gEm65I(zdMB%G$gp= zINv$k(V1MG5%6tKI%vn@@bp%iKxwKE5(J&wyrn+Uso~IuVq`##f^zwvNWzG!3Qn^l zEiEa=s`T&eB2u1gI)nSl<|aY^a}O+YSF}C8HJThl(C}C{G{WbyI-rE+8_^x@`J$Fq z#pw)GajZL?W7DJ~+H=gx(pY!85=$4JGJx=T^`RDzfLax`42u=%>MBRp7VSVLV@T8% zwyy=TZm%uT#-|Vye5NoD3L#l&lo<#Db(ZI8Y|5>Q8lEzQ4mC+_indVoA+&XivSZ!# zDeVnK-{W}=qO+s>##W5=MYzEgHX0d`y z*Vs<2W_i#v0FccX0|9Z$?mEq2qS3&-r0gLq{r`Yosy!rda7(P4<^Hon@e(y^0~&2H zkl3w}Zc_r~3~P!8#w==Uo8v&7G=8C2cY|x@vq6&NTR;K7P^_an+U1}aG%wK>=)m62 z7IT#`0|?LojYJ6QdPOly*+6K`2ey$ z-AL#2DyJ8PBAuOWJ7Bun0mw-IrPsBr?e&6Y^>AZ;J(ki;wa40}#&=Z^@Mw$di1)Is z>5O;B*Z>*>2NVlTRm!+PHxD&sEceZ>$xIrj0xs(90Yq?*VSm{hu{Op#F#0H8{&$^^ z1!x4mDD)1HG=iZv7?0#jHj^^O#+?Tbw!4qa7pO?K%R)`^c@U~j?TW%9?uxc}VH^CJ ziewko2=ld%6YcKS-cy=TIgZX)gb}7|Z@&N|Esw|H$aU5L71$;isWcICeWO5+X$L95 zB+OlPO=ymHz(ZzFV#56GQAlmPt1;TOHRiyW z7fmk|H0FQn3`fBDn)A16P8jA7sIHyC7CEC8mK>TUvm?4qt2Gtf3J&sj+)OukEoNT< z&c+@V;+oUl8b@!}S^oT4VKMTWu_Nkae*Z;p1dN`YtxvF%|m5ISU_>733Vh<)Hcuvu#4d9m(Js2ju_18OuJp61qQ z^A?`ck^YeOf1E8+Mn$dmSX4`l32A79g-Er*{yB?P37kFNmI(mM7TaS?U}{=CrbeKZ zf>s2j3{alBEHgoM8_YD1;;8~8nj9J3W+H_>9kj3MunI8-vnlHBhMLcSxH8pp({~!E zU`PS6?CykT=PMt^e>yeNp|``>)Fki_NY9b_7l!+%FLWO``CWGnqh3vDEpV#?I2_dW!U(JBTHyHIyFa)HOug5Ojh6 zoZQK4+qW9~#m{YkB`E^HZZGdz^11`W07Isy6>v_AoZ-@XV46&{MstlXcG$6wo@G!0 zV0S^K{_0}kidy5w?a+&=HuZuQ#lEb;O~G<;gblP6OPO#0WGwh+%5%&mO>^(EK z85^4gE!hM3SU;8e&IV=!NoF9rhB@JpYY$1Y#X|1KoxJD|2$s*bnCiDH~BrgAc0jJ3rAPHM$CELX})UE0eb7*I0W=%Y}XG;rc*{VWehNUWOi{WB~Ev5_BVM*S#RV7AMRbr#9#;NhPn!rydh>cJf zFe6~f6ja9W+iIek1TJQ05z?(aNqNcoFeAH zD*27#c64`{0X5lHQ`CvJnyRMRVjf7SP7)Y%q!?w3vjohniR?ww4Kl*x0lEq(}y zlqS!}6wUtD>soB@B2SJ)yfDs45NSJ9VM%)<2Fv+(Q-Y_(7=vPA_WS1sn+qC^Z0sFAj+Rf{#>L|WpA zJlblBs2pLY<}>Y;iNw<{F0SaxQCB%WbuS%RXeV z?-sjlaj)17Ez+#jS3s?_)he~x7SqH@FmuM%!0_7QWG*O*r1|UPT6KKMR%_Jhw&)dG zZM7C$EPl*`-_OZH0c;-Nr^RB4Er;Sstz%NI=j04^rmZ&cQv^@qs6;?rtcEJHRg-GA zr9hQnd|ua&Ku)m*awUV(vSk($@e}U* zb0q2lfsrrdZr>KK+3F%@#qmhg#a#9$7RT4c8@9ScT`FjZpD3^|hV7nTRZ8Y3vR=CE z3!6bBeZfGJp{$zQq8#}Bf|gTkb-8#0-h^Sk;fSw(VISzCE10XF5KqE%q|`@BU#KgY z|F2?VU(F=GhDrPmKV7S?v(@$B40Qu)Wi}JLfETKam+?k*Q$XEpt1t1(E$Swg#9M83 z8~40j-4RebZM93?X^Y9sTT{f?fV#_8cdOmDR2WI^;fD99du_EBt)M~fv(^0!$^+^_ zTkQiBm@(H@5AoVDM`P|nTRqHxKB6AA#i!iFmR3N0#a550uiA2;EP}oETQ?nwwMCt% zhduLakh0&*$>T9h6d}xwe0nnuyV^L8IX1@4*3VXtV`lY)deT-;F*HvzTz&kM;AB4% zIYO+*y6T>`I-np}&QU=<_93tXWqv@o+=VEBU%hbyzHrT_2Gldy^7)OBG_S`x5<^(T zuUmS67eQ3NMn-wNIA}AHW~Yr_7c?lvhU_pmM$hVvcCc$b!f#j?WaIQ!_`7cD5YEsW z6%HAsm&1}D!)H!!2Tx>y|2!^w{$cul!*J9vh`oywa^e6YN3r0;AdHQ5^q<4=_PBE~ z_lR^#OcLt?L<#~HxrkVb~P2)dmu-QGW!sZ|~t(QS(=!kW8I}WfxRIb4u%#Su+H^vcz z!QMgLLsnkmW5gj-jHVm;O=FgT_lYa87@&PytUcxgkCX9LoUf#iahAE(H}IT^sJ}Vg z?1~~N!16d4JE+fg=N(wEC!UmM=I@#aA_sz+{Q23CV_6dd!&^BfokmmN{f;a1KJt{+ z-P_cykDVa`ydnH7gdhcgO7ANOGT=wWW6YJhC7^Xl;l@}OHuKo;b@l830yqO@`h0fo z({=OQ6w&J=97k1%mL5avd*a$U^qvZH=P;g~OQYL(n~osK7@zrk(YH<9DY-<0Dr)@6 zq@y#b`FxF%8{o#OL!mlH)+hOb^11X)9)B~Er$)LW?Ff%Rf(H4Fq<8s4%r?5FHP+U$ z02@yoSFT1t4Vyd+fgOGpvbph|o_IUVD^?tVJso3!b|*pDHGI@O2vXuzk-sd$Db z&{g6EB8@+p+xbjpF2YLDu0?PJ&gR`Z#7*H=065L9TM5>PL5(0z=tS6(Vd#7War!Cm ztmd|Ow{x(t(w{L?8o-xtjZ~#OC!l?OOk}iM%papCV`mS3-N&F z$-zA==R6ovf^(o`18AS-Ej9684k+euILi~PuJ-32$3J1!>nHHMeX5Ui;7q3r6rAgo zETfQSc(i896drRd43Y(}qOlV;3HpNV&B{nyFIIz5u1_8x@wp~KnJml+V z_}sD1IfBcKbuR;s=0Msj=Qs-R0_v?Yrzy>B;^xJm{f*4K$6bzkDa0Xx$L1`L@fqXE z{sjC&lfx$8mzy1x1ym8_H<#0v&tJX#%*Oe3^J|vZE?bIX;~(|6el!1%pwyb6e=v?? zhIXw!Gn>I;)c}A4#yH#e>?)aTk!G#dAkV&K`q!$#F}3*FURLKcRQ>!(5YS->yE))TG-aP zqZK3Iv?=9Pq%o+Db01^t=JJ|jxUH712rf}g@u#NSI-PxHU0w~?;x1%AZW}nqpxkd6Bc*hoz|?XTxm-lA1f3JTI?l>qg?zUIR;`W zFHcaVpE5f}KN=x&MIP?=ms2sv*YH%#5lNjR%B6FJNs#ArXdHO~hq;kUjt1)-L0O$6 zLaTGcHjxttN%cG8srnt!E1e^>s&hnFb&eRX&Jpm{IRY&@N2~?8KwsAog<#DbDR$#Cq5$3?+9h;9H#|3M?h2Oh_)a< zg9L}uk)Db^^C^QAO80~-t^Gi?;DV!lB*VczQemr)EKV}Q`7M2vS@jC#9HPLQ!r*?& zdLdlZN1^Z`%3c!=C&=DUIenBH&JXudUifLsEzD0)0Y6v?Dh%^Of(C@~GBB(XR1_{8 zR5(~YM?(@+94;JMSmHjH7M8is!wQEv&rbkEB~C-Sl8TUSr%YN!IkbifshI{-3zgC) z8cAo<7&?bep!4ZOx`5`>g|vh&rsZ@At)t7(>T-(F71Tjjq2<+hyM}J2YiT!KCmJy7 za6<~wD3;?5L=h{*N<@13X%(18iq&{7Byki|sDM}#5T^&kT9h$K*BO#xR*NLca>A8| z=(sieY50B`!3ao=KuA~aBAf2ilMXVC-AQwtNqNZi&X7~khQY`Ti~TgR|5&@RhI{l_ zwrS;zCBzxxOlO284p0MlEk;!ipz;GW`fD_%k4E($ZZ9yr&jZ>37qkIlgNR@XA)4HQ z7lCGsZN3@!03Gi?>VuR=`#huOyQAj2qc)2c2iyrf3r5WVv=xuKw9C|m4|{OUaB+=_ zjZWv;0Ej`#443p#MSt|b&y?^0lIa4H$tOe_y-mJ=Sp5Mx=nF`zKOk0rK)wM$UOomO zEYeKpm@gn1{Q-H^7m&^VfMoOs!c z&&I&RD5&`%0|GK!v_thta88-%fHG6y%%LKVCyN1a7jB&BM48ainM3kZDh$vVA^uIp zD8w2j%h0Z?H+t15v8 ztlUFmN_Ik<9ipl=m>`5--hLX_N8x=G3=8Dp{WLyBh@qN_Kc*o41gO3b<@GZv>}F-!V;jPVDk;y(h5KLLxs90Losas~?^P>IKFV!ICxdSQ&lGz;^0 zUmSM0e7W9HL<39iVmo!hn!<_uY0?XfkxEg$P_xdbNRLvkfU_*52hM>mwFmOidkW56 zJf7_`l9$$#`_Wot_`-RP%QX@340Fv8hHP@lE^Q{KSoc#_xbVaTP3;G(7(f|fAiR|# z8Vt{d&6KeiLtI#g2=+K!nhwU}x#B#eF!1Dsb=u=7@X%BY^@a6(ae>qMe#dIe2O~^7 z3>}XQzmpEq$&$jAefkX*$8+H;;G9D=eGQmnMjxG&YC98c6ErJ@*ci%!$s9%j*wley z1YEU|ko8e?yeOy1VhqiJ0|r&>L3X~2?0h~zcaVkaGH_TvUM>_DIS_xtfw-{}^UDJ? zyAF9sadMDOfm3;q=2*0fjn(9x6j1xfcI*16I;{F=E+;jBcpkU1)P9=Jj?04n@Sj9k z;$#{orqfig^b9c*aL)qVv#DO3LJhd5kXo!p7yd?ZvAD#6e=y0-0deV3=m4p`iOV>@ zl(h^F!5xeyIa({oa3*MB|23@ftYOfZMu;oLRZjnnkW1Ejyhe*&p<&2!;eyp-tridKf+yf>s4RNFEUgX!K(IbsVHLMxYvc9`h6p4n)u@ebHT6 zLJI%_ZD9X^xala$St1bBH3b4I&sRj8^*aLF$!2)#1g?epz237*Lmdz-%y@?jLKev* zG%z48voQTmclw*1>8lL=vyrW>V}B<>>*|nH?$qu?9G#qrXp^>!K1fofYXdn&oXwnd=ydz`*KJ3oKE*HN0(3{CK zgW&`3B0CemwQLo@IC*$p9<~bTZC3JM1a6o@02iu4+(X%7FBsrH*yQ^G@&hzV?4z)F z2ut}eO~*~3lrBpuv&OSne9f0q26@gcbWq&b#Ob=@|c_}fz%XNX$Ha?Q+ z?AdaPC*epuZ2AsN1f-5c;1xXa*$dTYBKRQG3dM~yu|Xu z`t9ZfZB7AW*!o#m62ue4^YHv%fEV#Knk!!PU|Zt?R^tM;*X0w&mi2D|n|y>Sw!n#L z!>>IxjWLHWLvjvds#mc3-d&et9Dwb8?x2$~BoCUAK9CLoh}Y26Y`W6dQ}T5*hg@r& z0R{u84s2L3P8^S&=J70s&9kWz*i?zPz?pAD$$Sse`;LcQ1{?IX#zlA{8$j@FH)oQv0)d+{ulJCMf6SOo26Z63D3zZH8=;ccOAMdX7BrA-~_MZ5^#udH`x1lnl7z;0PZ@r9haj1GG-s-m+!<@ zYCm1EPj93k8*Jb^6Le)tJjPQtRAG=Z@b?>r$Pf*e*)&?(2v6kFIGIONWIoN1g)~}aFG~Lkb^$B(&=D% zCHR%?(L~0E9b;sV1Ny7#Dqo>8U{kq^2BGk3wwu5WmK@o-y2_MWuGO6^#viB|O13Pe z0$E03IgBRA;U2&zI)E2IIQF}M!;0HSXe2`@_C#}RYV}Ubc)qc9cXUYYbav`RyrJ>U7p4gwk5H5vE z%#^z9>*6J-F6J=M%4W{N?OQXsbuRiL>Lp)-CB88~>wIipb^MB*-J5pO7-Tm;Nnd&Z ze1peZlGU@pK9Hna;q9J^^4oS&m1%kVgESmZH|Ed5P=mP79r*1`(5~6xGHiG6v>s(T z-nEl5@TB>HxBnezbhj>hl6K=6rg+czhXEHKk+3f2&>)Uc#3cOo;FrMf*Qg(h#`ipe zO8mn+OQddp19JG)h|LpX_(Yxf-R0!3Am54KtN8KrxAEJL-|P6jfZv<=J%rzP@OuZp zxAEHygzp8!3EHdShPEGosqfoK=Y;b^3A%qDJp2681U&3 z3(lDqoHH#rXZ$&58gR}u;GAi|`P-bE$#-eV#gtBj6O%n+-9uL}0AP#@IDb?(ePkD% z<&?%a_pktC&Q!>Kn!eIUkLl)L&A11eE4^KU9_MCrb?^jH5`L*kzL;K_aF?+jXIilD z=zNoFbj3)*NtIki`SLUxEE}N18u2HpR#LTGMffXK)Fe-*R=JKg%QLAv#SRpSK zP4W`aA}pX~$j!~q7yrQ)Hb>3Db+GX#=CBiw z%lnQR-0C>-9Qj|$x)*Ev1V;++YBr!tJv{QH_8C2Hs{9E|*ZZ&>KZE7?IUO&5=~2ZM zNzkdnfS%Nbd4sjT{DuR=n~w5tJw#98gzaf(KUY{;IOq`daR@Szp#7^V3x^(}1N?fB zUjZRDeIqIhOApaATzbefdiD@K$FI-p*95(Qj$b=OFLK$}by>>%>P?{h4Xob>z~Q$v zO#TTz#NXjV{DW%b$JC$%tx}RU!UahA5v>khLE0eR#4)ZhF?v%yEFiu!87qS?a}06_ zAWByC@Pc&Ibp~gk@w$Wbl6I6Y-pLWQ1bt&49miCMBN0M|;{5Qq1RX{VAKP9G=sBPR z4akNayP8*KBcD>X2ToL3A5FoSuZAJ#51J1K=@dBXXKU163}Ss5~032GJ;0K;^0se_w9^O;-cy6g7luR52}9LqU=fI$f30 znW~JM)o^U?M$ma`BweJ+HHkPdQVx^&Hg+wF8W8LLK65uyz-5Pvv714}NSEtp1dxRi^lh#HwO#|Y z+W2hR6X(^Qjyj%-RRxVuV`;PsQy3q@@w%E_TcrU|b1B^ShJbkQC?FSzU9nsEUO@Z^ z;NUAG2b^ZEMDG$-lUR}0P4>q9j;`*bt5aT!-YBZ^G!!4(rKWUT2R$Wx(3LuX4Ey0s ziRiJ#U*9+rF2#gQNt-9EF4@3pooDa_2Gk_{J+sMr2IHLAF4b-EQ@uq%fAKTc9~c`S z^*CdH1TM|MSnDt}m`n%NVME`XjT4wLdOjFbj;^smQhMfak!7{$(tU;oXur?efB{U@ z6LGq!RybT%1P|mpNmz~Y&`!LX3eKBG`RZhF-*g(LW`Of%(pWVM3v&uhQ`NLg)zDge z)5a7t2a3hw7r?@ze1ztHsX1#I@G)h8-oW-Py#G?yH~nPZ*&`Hb2N1>CpBe8u;%H-*hAY8XKaL^HSW}L`Dzr; zWn;(FR** zE!4?9?`Fb<7`2EBRV@utiy_QQAk1~(^LmhUDUDO7(TS>oPF9UHM=hr%Y6Uf_RUq%_ z5ahKGdxqtkp>c>MSU-ZmLv0G+Ax+2;LNrtV4NIQEV+~NIl5r@`F`gp@(1Q95=)?^&l7S`J22(hApN;eG3V*&OdMdOOOla> zB$^wsF(}{&Fusa(X0CTM++cHdR#f1tj$^u541ZG}}QAXmVj?@hx;f**{yotuB zo53Wv&`NbH1mbqur0(#nVAALlwTeG8W_ks2Xc?-Q0EF-ru0aUbf-*P~PB#J?7=<^2 zEwf7RhPi@S`Vr&!<0p7+f8?mtH)ofj-DANGdlB(aWkDQnoDUCuAC=;CCP&w`l-`f- zs;tzhLwhLb$>9U^lj&Bm#kV#P44azajQD<0M(fnfV#vr(i>;!}qKu-9jJ5>*EQPo+ z`*#BAyKs7VHw{p`X^7eb%XlxAb}t>T?xTt7ewh6Ss9rrttJOm=_g|){dYCq=N2n8# zz4O#p=wkI4-JqV(L}I75laABzvvwn=;xoaucV1`YDs?R z9=Iv#CrGF>EP@BQmpCrUj8(00spS_IHl=y`xaf0EizdNCAgo#mWWEe%$mQw)nExQm z6wb)ivpBVU4s7#0DD@((Q(vbhW$ps8P?XVp=WHnbMCjk{)d|?35;#3#+$WR;T=7A! zgX<;e&I)ldpoOnH9_tL_Qi#kw=U~GERCa@V_{fVTqZ;*lQ>$&*{8i|~Z(_B-1#R(d z;P4u7c%82tsWrW= z!V~ow-JLLs&M{4YFuw;dzYj3q0hm7knD4@D{SfBrJzAvR_kda356m#Y#24ufm>V20 zT@?ZdSW(PvaUswy)ZBCxuEV(M=UC-mfI22RZ9K!#p6Re8<(Lg$>N~TY4fbVg!CvXK zgY-*5yn!*;V~4!r9!M`7emwq)BY?>JUkgzmKo)-sOZ_1@>h~U{<9MWylM&*->Bo1Y z_3@p>AL=@AEXLCC;ta%Wh&6_g{n`y1pxo&3Om3t8;JSA`XjAC$QWVQMHfC2@Y4 zr4L-!Vq?yq{5x>%1{RDZOLVBdN}E~Ubux@)kCxzmU{MuxD2%fM9c~By!2_M9s5KBl z$0D+=K{UV`Ohr~Ppc_h6R;h*%lFKu=reVBD(s8UqN1H~ldp6i#3)CEwl49?xFXpnnqtQ z3p5Qt%bS#B$(%f3VzozYn&Fj zsc;9T2C#3#Mr~?FkyRAfOUIQKW$vZSeKe>j!`e_3(7QI2wanUg^xbd?8f7Ht_g-P0 zi_I5V6R@l&fPNFPtdnSvHJL_OQ>el^ktSJFX}UFyW?LuI0&4~$nKNmnbqYnSITW*M zsM|6dx&|OKohE3XArsrXO1;bhT!~xnZ0JT%gUkcvS)hB}b?Ma`KUQ_UGN0E4^_^NV z81JE!tfLq%$ahWz^n<`ZqQM_iAz!$#_|Ggj>$Vs@SwQS?Nht?U_A#b-_oz2(u}6@+ zn`z#BG7M(($w~-+LctmLRba+2PvwO&PFhuIF)vWRkVR=(Nio#YAD}ndHXNisX3&O5 zOZ#)`Qp&WJQMPp|O|h11XjlzlbeAGiU5ZRKoXWMDatc1!37R&R=Be>~L8p{5G;NqT zz%?KTaGb+arnn5@jsd_5fA_(`>LA8qVQl~&Er)T#EJ1(TsZBkzVA7%8phYf0zjF%y zyn$6l3mV&{?9alR{|o*?4P4fP^w&&WJls!zOSu6?p{;=;JDrZR*3t>qI;ykIpwp}~ zU3GCBt|GCoC~xg{YN7(GnTA*`G|GxnrL~c!S(|8%)k;gO&9uha0x@Z$sMVp-HSWho zgPMboDmb|q2;q;~7=(a}3EgY~QM+a$>E$H=1fQ~wSj9>JFGqC-%JUl^7~(?Z`Lo6) z1T;rU>4qX)TFoo6N>N}z1+>iMcBZSyNQg{L9KIXfoe%*}7}#KS7L-93g{&SZwq7WM ztu)y>n@+aQflGQW)m!J&dg}t(Y+dBC@5wY#mSE|ap|&_nmq8mHMh;O#mg*%gq&2b( zC!$8Qi%1@&dWTg5lK&X~Ctznw4o^}8=O@Mu8UO@zFjXHXI}uPAcx=%4vk%N`T?SQr zIauvVKz+4`-p)r7n%;1Na}gBczd7RYPt2KMM0mg8GhfdsHQqc&t^K+Bda|q=Ajdai zx|^xk`Vvg_t)6L}yB5i53pqN1zZK(5n{@B^Mz=eO$VyFO%*!3X2^PpQ7p@HdV?vd`eIMD?`@UhhZ5jr5UpQ1|&Pt*Cb0m9Y~w+;|F`r$2}Or!`%Cqkc2r2?9U z*wabi$x*16vK(fMs0o@eA9GQD5cj-tarHTfLyufsf3|R`DpwRCFGoHoGYkKhgW;l> dig8WI{5#;}&p7#WPX40F@qfj5LUqn5{(qNt52gSB literal 24523 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 bT?|7XMEe=Y(P&wuE;+l5=BZ1OsFeL5H6F06 diff --git a/twl/bin/de/matthiasmann/twl/EditFieldAutoCompletionWindow$AsyncQuery.class b/twl/bin/de/matthiasmann/twl/EditFieldAutoCompletionWindow$AsyncQuery.class index 5ee26bb40be9f8294a98f75db1434b9be84dffa2..7fd1521b4d8c15d1ad35e6d11e7fe02483034479 100644 GIT binary patch delta 863 zcmYk5&rTCj6vn?h)9JwUf@7tvRa>h9mMPd$75^bpD_|94G|`otGMT8g8A<;bS=FT* zjW|1u2`^wmO$VY2AHc2e;KGM6o-@>x#hi2Q%{kxseK(m+^OJe+=il!?02Hx042f9- zBPeopp2GzW7dgyvxD>%axb}m# z)7TJ@71wnd<$AT*bUvzYGHTUs2pCJRZD+mp{H5E}Q5H}eZI@zp>amy765hJ@)?3sH zWr<@rE^z`m2@{7UqBtTkhL}Vg35laf>bNDbgk>Eo61P#&aYy1V4@_WEVBYI$W8Mdm zN{=6;GHcaW)qK6`KF!}>t2uUS)5*jHqJ!&)ZP%@?)gAA>8dn91q?7duisAiM-_be2 zy6VcKinkTA#O(hq9f64b%&}iAw_ELogA6^=2o#Ls5W+-HCg{DR>?6ozCCKC^$YcmG zO}0(v5CnNoQB2cmi*$6#lUB}$u=b!>(>_#d#z)9XhJ0vNEUEbjTgk8wy-TeMPEt(s zn718HbSA_XLIM^DhJZaP#17)3i?sL}AjS7Z`bcpYI7_PpvLwy#Fh!q* z97SF_M_EuFB6+b3V_?=`9lFxRUZ5-Y`vTn>%o34LQwxja`yv|gMF_7?$Mzt$4@_%) assW3NnV|n1iSS$jXDAyqDe2!h4g3QW#db3Q delta 846 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 U_X1|a^&&=SHHbNjc?=`_7d0?PEC2ui literal 1425 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 OGE1=0Ub6(7Q2HOaN;6^r literal 8193 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 diff --git a/twl/bin/de/matthiasmann/twl/Event$Type.class b/twl/bin/de/matthiasmann/twl/Event$Type.class index 38e2c6f4e9d1d56d5c904fbeadf42bb4686fba0d..79fdb010be2e4483c94ba12ef110aae93454463e 100644 GIT binary patch literal 1855 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 literal 9502 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 B4A}qx diff --git a/twl/bin/de/matthiasmann/twl/FPSCounter.class b/twl/bin/de/matthiasmann/twl/FPSCounter.class index 14f1e0fa1fd55627e1a820d7bfadde81e392ce47..c249e866368331b98c300339caafeba14d1e03b4 100644 GIT binary patch literal 2265 zcmaJ?TXPd-7=FHN(rwd)hSC%vDWt_iSfu4F*ixV^g+PH~PZR{ZX}0M?Hi^jw@i3z^ zmJw&v3ojW5M{c;H~3$=MP}e`n;Ra6htR8-{IZwdk@d^yk8#u{nJAL zyWxhh87G_2fm1q08gV)d4QCp0R!pN|oWonP8Vh3_6SA5N@g90_J%YdBIxOa?Fo*Lp zOgG|!ST4%uZE=6;>B)eYF6($Fj7^x4jin>4V^*Q5>{%sm+;MFMbyA^Wu4K7(nVXct zn(Ah}Fj%PMJszHOy@ATyoLy1~TpUy|GWM+FTDj4JBi}>iSu00J4Si1D@%m{4DBr=PToFKanp8b+)B&I){z3QOj;#J_BEq&c*C1_m_=eFWB0h0$DLJnt$e=6 zdoR~BJUZrQWS4psBKeA&%6oR!E)6+Z$Kx$A4OKIHYSKKn$b!Z^Yxe4CtLR4}1`1kI z5{zVRZ`iMVrC5F-1d;N;J_M6~P0dA%MNc^yUR8)EUzq9fiBzxn*RmBBwedgC2=Ijx z3sumQ7YD1TY3a%wF}!BwDuhZa7Fb$SrI@iin+WjaY^79XPPcPbv214)!qxBN_I0{y z_W8(6Rvm=L3YF5VJ?seZEp-gLuUOYC14-;NuoYbjU1I3TS@~>FDwngfR_?P86qW@50x42_Aa_AW%Rv+4F;8k?#uno*1YhVi!I_3>H zxMJXCykg)rBn%AWpm^J+ujwYbiBS;^> zytxErMly>C#6owl<^i)n5izwTtownnG;HTMfC$F}jQ={qIEWS!wGn-+ z>k#=pOzRQs!BPH(aE!lmBz%hVC7eJSr;x=6&j5S*?wvpsJ6NT>YxC$v4`*5Jq)qv& zU0eltdn=#V1T)w}>jngu8B)`+SMk)EzmN#3$7u5b+E)b#`*>Jf=w?G`39XWUz|TL- z85kpa<9;4S^;j*s!hXC_bJ4?DTnI9O?^hf&_{OPKmqRO;4-gQaAY5jA2^5V5pVG44 zCn83w>S(qSN5CQiX(E|n5w`ERy?S{Clc;nuT}%BetcBOuAGKI^Emqu|zK6Ep%!Ng? zNzUJ~`Xxlo?MrBXKBPmTT|qm0C`$oNXgI7vNJ57|z(*^RZ3zcFKBZPa|&-*FpB zb3t3~i0q6-!o``dCphK$76QxhTg$&!zjROBUH&z88(rG|U^Hkxyn~m_XmD?&`&;TU z8jKvASO`*af7H|54TJuREbU$BC{Zb8{@FW;I&Vp+TLQkNn#YO;^}*eLd-bV}+UZw;pa literal 2265 zcmZ`)U2_v<7(H*kn{H`ZnrcZ(QxHiOXv$XwS_p*yBiunXlM3)_uYNY^E~IAXY=^qUmgM2 zhk_q2fvq_`X=;|WVrW%UD;AU12ZiL+%-EK$~+jSF+Lg^0H}-)s~m_ih%3VxPX$=mkd)Y%#@6xCE%?tX$1oL zMvS6ijq)I#N+mJ^p7Byn55kR31)H#0z#UIyS|AWs(1L&;uL*3sqFvLH1+AD*rV0f; zuN6*I@-|0SxkX~KoHyTh9BDnLeD^bShaLh!4AAB5GZQJ zlEWXHIxR!v3cTL_&oCQ*k#FbdIrb>1WtM3ggQl6aw56-lTG`Gd%bk>Zv@xq0k6#*hOzqCrmTB>8TA@ak-Q`mCsa%{( z|5B~uxWca&v~pF?$to5VWN_Y(EPHO6!m(x$8gh~;f_a%Fk&zL31uN3aep2M<+-eV5 zF5{#P&X#JGC4I_}O1C$K8<6nmCxV+6^1&r7$(>6QVy~P#uAS0v_DZ+gD?P?Fz(|V5 zYX}e>@Yts-Y8@SFD7S{Li1!DyJw*3H=j(NB`7QcQzK@sL(IRM zl^$kAN6>>2^x`OX;uuelV?R#te*%;IKZ7X>J&AX53R&Lek>=aL0ehBK7&Xc}kkn&# zk8*dMI~QZN6UE28rx0e|03*ivW*DAzrgZxugaF$9!FG>u=-KShgM$p>BluOHw~h%} zz00mX$Q76+>YQDL;=IaIH8c`>Cyn_c0Dxqt}FXHrHtQbtM8d^2S?wdSBSQvSh;PhHp@Hww z!cFM#{HjNUJ?f*o>wh-O9O9Q1D6_Tqsa1u{R4KWI7;1>~Y&WiB5H~P{kLa6^>6IHe zhfnQR9B0kof;~s95(^Dy&B$L6a_h!4E^_ClQ=_)CJT|u>_@2Ng`k$apY;yh0%r5zn zYIOYxCslU6hhucSj}-6J$J9PKP~1=7opcm`WE#a>AdYlclxdR@Uiu#3J@p~9 j1$j`%($83K=H6suf5G;@q~c$_LUF^UNzfT`T(15H0uiB| diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$1.class b/twl/bin/de/matthiasmann/twl/FileSelector$1.class index e6d33b93857cf2bba58d0f5c1cfebf3033e5c91a..b73512b03f0a3390bb08194377dd68ae5f7ea195 100644 GIT binary patch delta 409 zcmYjNyG{Z@6g_trW*?4%;Dd+gf@l;9)EF%+v9U5H#?}mEF~JRm5L>go&1Q|p&oJ?k zSoi^I>z`N~@2*6cN$xp!=ALu!%%}JemG__5Hvn5$v5-K)MiNCEIV>0`8CW#n1cOfS zy^#Vz9`t(dMblILz8jWlPZ0FA^^@?L_6r6o5*C&v444tiN@S2FR07{ARyPUhuDVnW zPxa0khpn#L9vG++Rs%m5bkfpnD$i@F_BnA!-wD5Hmr8t>I#w;ug~P)oc?1z2Y5A*d zXuJWtR(}H3UZ6d2ra^KPTm{@NkgTMSuWQwhk3>Xe{mjZW*I(9Fh)yY31wmZ0zZ^8 Ap8x;= delta 465 zcmZ9IyG{Z@6o&t^%U&6E1yn>4L<-$4AQoO~Y)nk(>=&|8akGU>ETy$2Ycw_{K7xst z#KH$qpT*ABc!mHHXEHf+F8_Dt%!mG|JMTZQZvZw?HJ}hG$vx$h3$hmtqzF#OKlf{) zA05@2txnMH8qkwF^3rprtPfQkD}nL5&Cf)#0DyaBG(st1he6XVasoy zqRf3&J{rhzWP2V-pelZFPMH{PrIJW;6JfGpx#ahX(&{&#N`T>QDmFqKU?8x RflP*j@+op@SjC!d{Q}llIX(aY diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$10.class b/twl/bin/de/matthiasmann/twl/FileSelector$10.class index 30377c8dc97be7272601be5007b06490a50871dd..4640ec01e4a9e4847a7c75dc24e1049b12580c4d 100644 GIT binary patch delta 557 zcmZ9HOD_Xa7>3_(TAhnQRTWjVsxISFL}ITCVPjFTKb;K0q#DJx@e?NVFYKDQBqDx* zAHYV4*xT8P@0_~DOy)c9Idk6Ud%p+c-Wa|6xV{Cjh@y!oMlG}OPKA=QkHS_aqR&DLYHq}-H(S28Sqae7CHHbAtF~x1SZbP0#@B$*@ z+6T~$c)_jDAkH}r3Q8E}a%R5s&&i|uq$VD|ZteiAps7F#-dHuOAi`kutW&GySnhsn zbGK)A`wC(~UTXN|y_^PygboF295RwRG#CtWt-j-*EwhT>Ec%~CI-5dHK{nWuN*Nu~ zyeDaOyY_K^+jfX}aO4IFb{pmM^}v(X487yJ_DS2ZJkRzNEC%;dVZflaEyvllx`!yx z%`#aO%rLkBQXV1G5U1)0MeC601L9`m61sVf(R0cqjPaT{;nUAZQLfVrua0AaJi{c? zA!UQSOf}WK7(l;5<}c)hE`Jq}!mu%f&#oqE{*S45rb7MkdM$GtHGow PC1g{;_lcr`rI_{&3Oqb^ diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$11.class b/twl/bin/de/matthiasmann/twl/FileSelector$11.class index 1f12456c55f83e3bb14a11507f166fbe7d292bac..8c9111f6b8011e96ed18f1005f77e92641fe1005 100644 GIT binary patch delta 366 zcmYjN%Syvg5IvJelU#3WYSj8Rb|IQBA}aa;g5XL}aDS_}+7hy`)vfpmAzvc+Ko_E0 z|H8fKABdAss266=nPKM4;lA5%cJt%+jxAGUk? zbU>IGwT`aRRJ9XL2s1y-pK14|-svWKzncvB+y$@cGlXoh}7J;EFbh*J8S5C8lV aafc!%CV9=k6s8$1{=XUc%nEB3Bfmc{&og-d delta 363 zcmZ9H&q~8U5XQev8aLUly7gaet(wvb8o^iv^)3jW1P|V$jkYD^&=jw|dR_V?f?Dt( zdi7a~zJQ3cwFmLA%*;14zi;-{d2`hJ_wx&YJyba?hMErjO1;tG$T6r+bQ^_9l-`7A zm!0^k$1yeNv!bpy%N`h}B{*CG8?zD~6ob9Fb)oNe*@oV!>XFC`6j9<>X7CAIk|>+0 z!gV`|PufW@?jE;@9yj&ZzGD#UgCRTY%hNQaRuW}doWUn2o1O!vlrf}pEqWdVsd>td zs5XiSwjUvbA!hE!GXC6d4wwCX@q;rstjq50Fn-`VaXa^UpsJ ZcLK4oLTeT(Sf!YwFR#(j#^e`B=?}IqFsT3l diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$12.class b/twl/bin/de/matthiasmann/twl/FileSelector$12.class index 287eb74efec2be33020b0b4b91b6a6b42c1c5f0d..d00a7de597bf74c6c5e141d09c9151dad91eede6 100644 GIT binary patch delta 365 zcmYjN%SyvQ6g`tilZ?|k8nwQSU5KWOh>CuIAh;5WxSz^YEg_3W-Rdude2L%-7wX!- z@GC?Y;+;^a19Q*0ckVs+Fz@c0+xqx@c?GbARsaWc94_WLnpp6#=wZpja-n*~=jJ#V z#9@}{!G5apT$c@&)EMmbjg#`0Z8trv2n2`(Jotu%0;>p%`dXVo_SLmYQk9)0N8P?Y zy=0gil{!~hrn;$Shzc2%&us5T4s>sz^Yep?R3Do+MC8sT4>d3;%?>hc(G9?(XB$s09z| z+27(_6cJ}@58`2%nRjQNclOzNapddw;}d`eYA!5>WgP|8`c}h5fkC$7P8=n1dKn!x zTk5RsVx-q)C0#$S_+S_naN%*-7#Hv%8SK@yQ+>0^R`f!TBK@^ zdZX}g{T?FhW9)V?GhwvBi`jn1B=v%Jj5>vB$_z7*L&^?i^X46gcMuPl{SWyd^UpsJ ZZwRq5Piq#cSfE^>A1~6;#^e`BI}7Kn2AVHK362wzQLWal2c0x4@gf!}uc% z3f1^veD+5fzu7KYb%;$mGyUewne&}*X8Qfdm#+Zk@Fap3q(w6$n%O8c%taBwd=xiv zD~j8=6U7wns<;;=zgB86tQ)E=SQDbU}*?G#YnK;dTJ^zZKEgKBCxbE5(Lt372pf>R*JR`)1i~{-3Hpn$6 zAeod3xqySAb=xB`n|dWkuq&B6&=2*rsawVLnpG|P`zXg$z1ZI~bZ)kdqNRIPhx{rv zOh4N{pmJuUQqI%ZHM~+i^93pH0?A8cVszWCI(aVKW$0)$d0L34YOYy%({>H3xXHbe zT~M*4;Q^L4bfQZ`8`?F*(4nDQ#8$AXBCFvcmQ}22SjQs`k3p`cWLH5hOv5z{GK|Pp zG%BQHKvw?txNa50m~7#{UNOXFz{VY@sBXzVTDQ#tcQ&_P(lJSj!_uzjJ;S!P`0FZn zJzntRdkljz!iGCUehV|XA7bd2!2?g|Whip5ewl*}$iyBOaC54k4<9mqH zJEYNNYDFj(6J-IYr^@&})rwxW5PiFGnNU46T7rVGh@>XYz*3WEP*PK82&FzDd_r*r zSEy|wG?e$aN@Kw<7K47lD9TCgW3YPj?kgQ-&}H8fEdszF^Gcn6KfY@mkb zUBMmlx%-G6$_Z5E1KO02=uuA5r<`F#`Rwl(CtMF@6vq(p6ML|;7!6~D_D=X*Y$Ucq zVnzcoiv$+%NNVC6A~i(i+4R&wzc?cp!wsScBT0)Dj3edu6PTnvOz-_P`f1cjb1l@1 MPlWyot}plg1OO+M=Kufz delta 797 zcmXw1O-~b16g}_Fz{v1QhgzzX0);}QEl|L36#23Ui9~~li5oMt6DUqP$Q03q;TO1Q z-pUvk#-;It1Zu*so2ooC42!wE!K^w}f$pRZ=gR-4>$TzH;=Z6Rmhcas>lIS~K8cfIZ1Z4)_+7#NnG-qR;A ziabN>hEu)gxRj+KvSeZ$=M7BA-&(3k-~uknw|bXs;*)(^x%7;IEiuGydqvw_vvAa+0mj!wFpRH2UW_lOe`gn=l!kO=lEN<*+l zOl2{UtE2Z7db5X!)G&=Hm<{S2=7ZgF+{6N*2(i=&btUQ7xi!=I4*(^95&!@I diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$14.class b/twl/bin/de/matthiasmann/twl/FileSelector$14.class index 9dc4b4c69f902ac1f804411bbea5b01a6b39c352..11b3e3a12aa9773253214db1daf871714c677a4d 100644 GIT binary patch literal 1997 zcma)7TXWk)6#iCHv%YMpV_KjMrD<@3?Id+e!!;o#4JicdB*bk>TPVo#CQ*jN|V3LYqDWtkXI3m$pTUcNo&J2&auKkk1C;CXDNF^m_~ z@S+-C${>%IGk68Brf~r?YM9O9HOz5b%;I&-XK)D%9E)o4W(ERpWeBsRFmH3b!%^j^ zF=Tg4r{LH@c**;O;bgTbD=jk&w`?@+eP~cb-sN;&j zRjdnK!+RXp1#aLbL+*fRJ@iQ(F%WnkA8_0f_)uN`h~e3!;!&(32MUXB=-*~I6iERS z4Q1C7XhI5XVDk|g`c*=q{2QBI*eH|-1lKyQ+sotV!}#>IF^u1QX!Zt3Q(8(%x>{5~ zP9=)_?I4t`np#tV1Y2HL?FO~As|+JaSK~^h2HcckkB@9dqAwom@4$shBs5$9Ag)x%UfGG5I zv2kRe(_XiH7up^U&5nGE7R}jR4D|#b*+)vlS4i(8qoFqWH7?SLzK5&=7+*kK*FUEr zzBSpG`#7xO8*t+e4E-J+tMB2+9prk)N^4GoqN_vE9Yc!feov-;fY5$KN&5*?+RvEQ zeu1t1iXH8@$dysTmr%nQj7MSV#!jW+;W-q^trBTlf$;#hpmUTN#{^OwlN?j@uoUL# w;W*1td7#YqG3jIsOaD&s({YZl8qU*48WjBtn8s8_WTTbp#mF~pEN*j??p zuGw-V!w^{u^3O4xs{NPs3d8W0>Es|8J~=EEQ`9M2_iQ;dt>MtZ#(A?XC~w9A4pgnW6aa?xMsT#3=A8s34p?suMz5 z7;qQctt24G;5D4*Ao89_@-@Icf!7tCGM3{7GTP^uf5_#I7?qF0R{^~tu!swExd`Ek z=}R}f4`V+ii5RPROR;&0q580*-ItTfKnD8OuN9jaBEvfZHPorKtl7S-T9)jF3#Q|= zOzRU$df|E^x0LmPpen_t;>EJS3f?7V`?BM0$$q&FDmUFa-ELFAVT4=vTASqWK|~BA zjgb7-&2D6z<2_2u|3g64Xm~x}l5xq8MDh1~>a-#o-TOsX6^vL_m*Ixj7WhC_Q3M;_ zwi1tTf>?50=`T2D5XgYzW9pGfZ1_6^42PmXF-9#%r}q%_Y*uw6Ae&RYC>p5~(cgeZ z?+6|tslzmzr?o-j(bB{YvZcu#D`ok%smio}{%PZPLLgo}!W9 z;aF^sO_Qund)uX3$nD~p+0oC?p?UTe^6^j_-NUqoZ!oimmo(HT@8CS09NopN5-`3( z^{W0QefnCH`{N!KG~5L@Zo<%SO$ zCroKSV@CT0bK0-4XtcH8u%-PTg)|n!?uV3uhgCEvs3PjPgv*qGCRtsEaStCt=U|MJ zMv7yc;|e`2g*kdS&e8ro1!G?(oh-xBe^4HETqRiz*KnOigD%7SWFN@Up31TMRq+u_ G9RCXmfC*jz diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$15.class b/twl/bin/de/matthiasmann/twl/FileSelector$15.class index 58c103d8f7a44376f77a531e979db5b66f1143d9..35d6341481c47a0c8a56cf64fc28fc2c39762a80 100644 GIT binary patch delta 419 zcmYjM%SyvQ6g@L(lQvFG)Eb}F*xHAwQc)B{cY+`&N$voICRDM%~G z1b3^!*;4R!(%xdrNic|A&vTmFuI>Ad&yd{<^h{!tL29-}$K^+TMBTpi*wL2_*%b-@>y6+s;8?6RRnn0!xD&V>vMgqi?Pg8Q*0tu=PlG>oNM66lGE||60 z1-G6dJ^VFlgrN=iCv?&x)X*@5Br(G%jGoQuI*G6tvmU{p5a}DJVIu#6!oUBS#Cj$Y X#^@EtI3|cAn8XxDNU7u&C8qTYN>V(X delta 398 zcmZ8cO)mpc6g}@vb=v8xj!~+i$v7X`ZWyNAD~bHkQNkYIt2QCc%&qP?3;qNFWJKgMwj!6tWD;V!0lEtVAZOq%=%m zO2s5YA>1q&0@HFsYr1~m9Qf@{JF2nu*c^iy-81t_U|!BeaN=L?oVrf1S39J3*YljS zZPyM0CxA&u6{-PnU6&~U-H;jRGn^^~LDMv`E$S7*jJ4FopjGKYx1M1<^cF|x)p`QT z!#^=feMc&3A32N>GUSo%durN9v6#iygyKPzMatVrfK`2;SWC0aLkSGl%CPkB0G4bEDozR8ttnLMP6(7Sy zF#5yz+h;KvU%+^#U8L$7HrYLA&gDDboH?^!et!G}USog?C`jPv)c^GvfC64xr!~tldxSE-ZMpp zVW{FZxUHpXdp2d*?x1UjbQ0#@9)?WK z-jO^AJ?c`c$NjXvOGmRBOXY<83p;3a_q!Gw_aDmZ)VgfV4ZVg?L%=ZDI}7t_nCJ{Q zWy5iOTkdR$pyf7o+%j+*%Le)}V4x3%ft*_2!Cf6I2JT^52O$^ZhAp0nfeX0EFcp{4 zONmaKdUrbH-QFOVTinfmly2Kfp_bfEiR6PVpQbXzfC+N+=B<~<;E6}=@V(AF1 zICliC_#TP3gvna4EABxZ0OqofUyFHKTCDa>Q+!PqbL21~pE delta 657 zcmYLF(M}UV6g@LrS-M@?rIcc6RkT>?7Fh&EB{9(uOh_ao4H9GG!?a9jaoyE!k@&=$ zzS_)_p8*k!J`kTxO!y3=@fXlLOO2Dv+%tFXIp@wjunw%DZ>L|50nB011Xq7}rDP(( z;B1T6!t+J2<*hZgWwUEyfT5yJcuuVux!#kR-a@(eZe=nFhKvmpgBlInNW!vUV8liW zIR;~@y3sqCRarLAyx#k~dcg{V7D~8i;)43lz49eYkc4P<+hI_buXbeAm76i~X$n^` zX`-z5jnR~itFd5bCs1$M;#mGs*cAST=(I({m+Nm{%5@FYF{@Aq4AV9W7*`Q5t5dc+ zl35O#ei*fbtyS4=g_|bkl`zUx8@IHq9ks&UhizX*tM$ipT?qo&S@J~`$;iYVh9dpF zxW|xQ629LM&F6I~qAzMG;hN@gK+&(nKJGF`SR{1?-LYwOSN)@o?=3#SgIEk8nQYGJ{r2#A<16 z#(%=(zu@rSv10y=)K?@rD!4{cQ^Y!R`2gxde+ o2dG9juN&7T30#lS47@nb;zpdE!%Zv@%2JhP=vBgP+`V7;3p4>{FaQ7m diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$2.class b/twl/bin/de/matthiasmann/twl/FileSelector$2.class index 0150ce5743910e1351ff05639f2fcc612f66df9f..8be98a7722696f76d958c2d3f98e44a0116bca33 100644 GIT binary patch delta 339 zcmYk2%}T>i5QV>+CQTbtjYeDRPmKjZTd<-c?p+B&LD03STni;cvD$?jpCM*1`Ur|Y z*o6<^Q}`s}v!<$-Y*Ni*Qg*PIb0{%yvtYAmQ%O$FlJAWP z6z+Z;>&v|;>~?ipQ0rMmW_9g2y-`~wnFDT!KrUv<`s|%izTL)<15T~}imJV1 zJV|BX3T8zF_Y?%(A$J&OQYzVpFE}QANAf_ItG%G!$c*Nlq4R^h;PIbF?$0B`G*m<~ TLs7;}`J`DqVUF0Dk|lltJxws6 delta 356 zcmZ8cyGjF55IwV-bsxFvRin|w$40i$68%7ISZKfMB@mWXTuCRkwwLsxpCA~; z6n=o;;vWd&+?YZvhM74t=bV{0XXwa}@8LUuCK@g*!n#hvden4LBFJvqOOq_kJ4ySr ztIn=nO!RN4s-yFo55lB?3on3;X#pRSU~g=m=(`79m8Jh52$r}kmu@ZKTC^36$shG=5Rn#8Y{lj;_wkLTIQ<7y+ML_ zYXA|yV(MwMGh?vP#IWx%%e`QZLFZ86OqhoptL$+$GcP`RhIqlke~||^fBYljjYVwK VnPy=bE1XOG>?$8^OnwEq`~i|~EoT4# diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$3.class b/twl/bin/de/matthiasmann/twl/FileSelector$3.class index f9256b67199fd8560ae774fcea4877ddacf41e7d..462032107fab3f281f5d2ef85db5bd43e4b3a225 100644 GIT binary patch delta 341 zcmYk2%Syvg5Qe{#Hc1mxtyYco)>siV1uH7_0o>?HaG~JJRAQmT6s)>%<1@s(gXmK6 z0u_7!pTZ{*Cq<~|z(4;CGv6G}hu+s~UqAg%V3TEwJQW+ASsRx*lX;T`lf~rZEcxCT zL*eYjad@#41-)LF7S+0;$gQp&rZ;NKHK{sScn&6o%#|IMs3pafx}wwxu7gGt#O=m@ zs}r7HDkg@dgR3|WT2ZL*l9HD`tEOwTySv?UsR;iVPhO_We&bH7+-{@E1>3K`qWpKX zC&@G%QA3*Go}#ET@HV52OC}2`i;jqIO3eB!{{{6%?q~?G2j~Y1JpO}Ne~=uLRI^=E TOv`*;zG;S%I9qsmiE@4cp=>XO delta 358 zcmZ8cO-sW-5Pg$0jhn8zYPH(>k(L}Zf)RVDcQ1PKASif?8VaSRV8mPL)$7v#AbJ$6 zLIr<-zr}wbh_j&wabcL5H}l?`9Xs!i`urJx0N6vrg+*xS$gc%W7X^aq#CLJjjnj5? ze9=iRZ(S6JeX8i-swzO3mT)oU!N#nFfFjtNTc`Sdmjb<0*I%OKp@J0`%LJcw%Mw-8 z2*q~quy>v0>*xBr=@_;@98qf^kJ2=`Iq1e&mSphR#O827N*OOc)Z!5E7%g$N&%Hss zaC-z9zG3D$-dLxFjV1&c+Ca&mf+d~Zyk za1Y`*?CeEBw;QIOTF)r-)wPrKUTqaDmRz#!W!#W|Dv}fCh@Bx>;ui~iF+czS delta 358 zcmZ8c%Syvg5IvJL=FwZdK5Dh~kxCXC!H9~w7X%j~6m%bLP)bOl5nYK}x0n8hSg;Be z`~bhjKM=&ZwF_}E%*>fN=gbVOH%oqe58eT6p>D$k)WaqPYNM_`-J*vI=55RoeAX=sRP|OV zziQtew$oT;O+?_-JkNE6C*!J$5by diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$5.class b/twl/bin/de/matthiasmann/twl/FileSelector$5.class index 02f2d16b70f8137a643eb959d23d7abc5e9cc9dd..6b87203f49e1eb7b2c89dea8f0e080dd5d50e416 100644 GIT binary patch delta 339 zcmYk2-Acni5QV?ZPt(Rkqt({>Q)5BU7Obd<_k!Ss2nD@1m1r#?g7F8u@fl*DMA2${ z;RE;-K8ZLjLY;*(XNEIpcDHZ#%*xkK{}b4xlEa{6V=`w`WZq)IV$q_Uo}Q=Q8xts; zgE$Va_o5(4!j7xfGYWlm?WFUdwu%-@4mo@Wi|l~q9hS+b?n+JJwS&8$9tH75{ixXv z&u$b`qgLZKj)P_tD*V**J1=UtkhHGu_b;O`Icyx`%f(DtpLxNbP}O&| zXQ?zC!HkHYi!101xy?9}QprB@f@8vWBoB1i>MN>?KAN|O&L8rE-an7*pNGygltnT_ SLBk(L}Zf)PdOT@XBoDCj+Eu$B;^D|!;IUYGt7!B*RY zKfvGOKM=&(+Jkr)X6DVj_h$Oez>y!{gLeR1sBu^fbsY!QaEGJ7AX~{@5@$(%6(60q z(u-S;vCac4>+rJTfni*L!}VcfQow^`uvgd4^wTB_^+rv9dPN^)EO5*-1f*LMsF*FG znm70R*IB9#PfqpMwqw{Uoi1xU9^`r2-pdlDQiXs#YzhZVN@GQLS`;39LW@*2s5gio zt#=`!S4=z)ccu(BoEUZw)6@&%7<2|D$_%rRBb8msX68o6FAzP<{TF#7^Zp+ZcO+t? VN;C_LSfX5@XP4<{WAZCVN0|BRO@^Q&?`12M`l@x@?x>{4 zFg+ff_O+JnR53(Z5ak1Q@K}{eqHcR%)2wsJNx3iI`ZTDc>rJ=O%97;RVQI1YH?H;WIMf1lRPcXlf%=t z%DNn5y&D$j=&bI6VO)U2^^OR)B-DfQuD@5>`3ZIMz8T*?A}X-kk%3 zJT^x6nyKpdbsn%CkHOyBKFfz}zr<0MC?J;L@W(8Y*g%v8n{|e;s|Ko(Ds$O5X?1n` znqgtuI=wMQwNlLxXJMQ_u%lwTbO4dmpTLqASoc&} zkc1wIfOiCha>4~>F;5lkLqs@3{E+fk=O>R~&#<3+sr({6KI`eu z701-zhE+}6tp#A17U1whxR@0PAQ{}vty6Qi%VM+BG@n5^L=`I>%M20eRs?ExOPpW! zbz9{fo$0Rm+V?EGF&MJe?NOfVemhe|p$kOh;Zk^DQd%pz)1e3u5?ZFJMZHDBWP1pa zJYnX3yfbI9@x-!UF;Bf9jzt$xq0F!dIZ-*FY-fIQ@&NIOrT-#tWd8m~#Gi<`s1wb> SD%L2M=-G8T+M4_dQuzbEJuTz_ diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$8.class b/twl/bin/de/matthiasmann/twl/FileSelector$8.class index 81aa60e8ce28ec344e0224e36cd7e5ac4161115c..0f6b1dd9f59caf9315854709aeb89b01226bf4f2 100644 GIT binary patch delta 426 zcmXX>%SyvQ6g`uqO%oH1wOXrI)7Wa8wp3JbsVE|XQ0c;btnpDwDorUu7k)#SA5riD zF8To??i9bojUe8{4$QshUd}ml<}>k;uwH*(h5*)4RUlzWMGU5jEOIg|8Ot&X!Qedj zSxbRIJM=uayVrJn-}M>tM}cASIveng(9rj9n(lS)s^j@GR{2oaNXsZ{P*Bn!BM~B7 zLlWgcFJu^umeY4?ZO6N))lXY)vnQj%P~|(K8F&-AcI@;n8?N7J_uVf4Vg-@G3=ETh z3tN&{ES>PGu*6Q=|(W4ycRN75f3K@&xgY27v@P8#%m34(2~=LN5bSGXtu)Y# zi&CTA*E=Hx9&svFe4bIaXQj)wp0UVu&Zmu|xC(}44h3ExWCS==1R3OP?tFS%X6c3U z&hM*FI{MY9XBw7*n7EfRq~E}nf=w}#Qf`h2wnad$iXLl;4_2m*ihc1d9R&G_Vd%r! zK(j2J+<7uYGiO6xubG!^vuaKlcvBm7Te@Wq#`+Km$|Tcsi)%S{a|nqp;L8`D!1FKg z&xlD_v3t&hl=wu5I476gT}7BGqfl$4h!S=YTgMWiW9rCM)%+uP@fq<4B8zn%$NuH4 rN-RXEFLse0J5Dki?IP)HNjcUuGE`mkAA86W3en8YVIMbgD0tL=HjPA~ diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$9.class b/twl/bin/de/matthiasmann/twl/FileSelector$9.class index dbf02e5224c0af6d892ffe3ff1d30f8793945d93..4e6f6a0f1ec4c64b1f32e377922c8f0dafb8bfc1 100644 GIT binary patch delta 397 zcmYLFOH0E*5dL=4cAIotVjtG}jD2VyLPZ2mo_Z2R@#0ZPYbw;3LQ@s`FT(y34=Q*N zyn3?e!GGdG5GO%#VQ0RX`M#Oior+gce))cU01ZG+7v!VK8lcGRXLPt$PAQ_@HiFM?Hbgjf-4(w~Y?b_aX z`=~o`dSih)LnAQr>VwO`OXXVbQvAS}Fl%n&C`(1*faSplpiJHpOAaXtwUanh)T&5l50G71=4$WMza6WH3V! zLl!x8tmQ6QYvUf;zs88Vz0rjCNM}JK{+}*Hc@%zo%@X2NFA{@e4khw2`ql-QgtC;2 Mkq=J-tEeROAKOkj8~^|S delta 412 zcmZ8dyG{Z@6g@Kw437a3c?hB+59MJ3u~9n`Dib1|orw!2K(?iY)@O`Zz*oU?Pg*kH)F3CoQ;`U4s`D zFF&3Rsk@AfK-xXwg`~s^k_-{sa9Wq6kzqN9!@l7jvum#sD7d$LH!2S-%NVsx-L?%| zV3Q_Ol|Pzyvgqfq{vIk%5_k gg@FM`vof%OL>Sn?BnJZzkmdraWMtrE;AZ0l09ZE`%>V!Z delta 138 zcmZ3$w1A2C)W2Q(7#J9g82H&4m?q}wh_N%UFfs^aC6*=X=OpH(>-#5Vr6!k56o?jO zWZ?14%S$bC&PgmTPAz6<;ALb`m{_Rb$jHFqoS2i7l$e~&#>l|Pzzj5yfq@BV4l4s2 d1IRpf1`d!211Ff|V&DeSTtJmTBN_PEI02*E7f=8I diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$Callback2.class b/twl/bin/de/matthiasmann/twl/FileSelector$Callback2.class index 7752557e3eb79a54deba3c2cc43489df4719061a..edd15792a73559016caa73124aa9b5a20c846eaa 100644 GIT binary patch delta 207 zcmXwzO$vfg9K`3}Q=e9rWgpZ^a^)g~wk;#5MRbOzNMPbZBWUFr9^J-8wC*zAAbJHY zW(I!Dz%;C3?(1DY0IV?O=y5n416i%-93z6h%`e4`(B0>GQfx9&mPsk=1LGJ=d$}N3 z8>@1jpW7B+@uY9Ne8sdeZcuE>51I>DxGX058*c0kIVh zyE8kPnQS2yQuFz~KLGgX3RDR5d_`_PAWQZIi^e(g6hTrCLW_z)gX1pQCB+0K_V;c8BM?Dcj8Wu08kS1u<=JPJQm jkqH7Cz^KD06;!{whB{-PoeE4eRh<(iEXEev=%Dujg3=<+ diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$FileFiltersModel.class b/twl/bin/de/matthiasmann/twl/FileSelector$FileFiltersModel.class index bea83cc6333ac5e60c18e8a1db5a29c5ac82af20..427bf72d97cde514256482c8a4c5796bdd0beb59 100644 GIT binary patch literal 2244 zcmbVNZF3S=6n-w3EG$_PLKLGRiuDbMl^Bz@niowIZK;shVq>+RHgJh+mnE}o)by|P zFZ4q@)8b4!W8&b~ivNos53qzU?{Bb6%c%`Sb7J-U3*}w+T$+b_{nCh~T!4 zG*)=E8pC>mHg^-yaF0(mc=(jhHhHzh!+qX9;MHfm`kaSy3}3|XP$1T{Y)`ozfzy>2 z=1a45=vj7Y!*$K0iq-K}1oWD<@0i}9s{|&u&6a9Buxv#?auYDhj-%X7+w61{fs{vq ztX3MT)G|Hqxn*`*rsI^nS9Xa}YRXo1ukBtQ!d+P>Vr|uOEN@*v<_o(5(am;)L#SAe z+CFUUDfh9tXVXc#(yp8KuIXC54-cb6M)9Qjv39EDZwuTyIhtW73MRR)y#BGka=u(R z8E7~yficTzsMi9bED$Hm`;O-xQSlkhufJ_N`=y%aTFyS#pc&SA@qNfRXet$RSlk^d zB+(|##=ly)oPT$0Zb-^it@cY+LQf6SYEW*;nrGI(tC|O4FA_~kn#_E`ycZiqtp{uy zHnni5T046$NJUhw$m<1xyCbt{aq~+xt94*27Pc>j)&G{9g_o$c58b+-n7|b0cdXMJ z+#&<#Fe@-U;<^|(h0_KqSc;)4u<)+BH}C;28Q8{-fk&7(@Fl)7P{U&bUt`z66D%3{ zhPO{KYv36VS8+|?=7~)GHXUDt!YH4Sbt2`Ek_2+2JO=9{FhPb}R_DMrk68Qyr}86( z9qm}((^pAa{($xq z?IU0ujs4`LkC6%NLJY>dj4SkAunb&=3H{f2p6?>@q?pZi zG2Sm;8c|C6EaLJUrsOQn$m~G8Grf3c{3z))MaqwyrNP!#xj}eDFE<%pijVLyB^JRan4vjMD-CNnLsunDa}M!; E0QocDk^lez literal 2223 zcmbVMZF3q`7(JIucwGn~Z?uJ)zF2|A(x%oolC){kDhi28O>Mtz;F4}#mdvtgjeo_z z;0K*iI-@gAKl_^;r_Zx{3pB;a#1F}Gcb|LCdCqh0{rlfP{sORq$5Dg?ZnRaUYkJ-j z%j|be$EkSF?aF=2R!wEAme+GH^Md|7<@OuBwz8uL3zQ~p>+*_92~HIKNeDiCj4`;O@yx=Nrnsb;l4iSG@W+h$j_M_Q}vgd174 z9Lrl5kj2ujKzNe`CLobA5Jw`4X@S`ZiV{d86^B69z!V|^({;;H+lSpfWt*HW2meW>02#A_MjPUO{o_q8bNz-#JXTO>t3ojd3L@t2> zt{8X^MS(PJ+p_uxwt2+r1?Gz50`*=RUdNA(z{=@u2<)VZu|7-DP$&U4Hs_jw3YIAg zed|Z!PMPho(6H;LCoAnT@J$0B;1&@PA{+9y=cUJN$VUb~#wQfKj^!#XujcfX>nYkd zRjk!Gsu@>xd(ZgX>9fZas|MCUX^#3s*y;QSjo;@T0~;KINC3pln+CR+IXlL@MW@^+ zmR6g_nreDx>-&azpc9?w5EY4_!~Z|Mp`6462^+S}O?+vfjs$huvX$wwu5AN5{3gx1 zsA}^G1y!~A)7J(r;G#gH**kPwz8wNH?8@uw=^95{;P%9^O}vm+$0no0#&?BLa~$Pv z+GfA6`cXU-SUTx=(3nO83Jx;e6~~SwmZ%R&H!c~^w+TI?v^5s`)u zxD=EQ0h1aqLI#vjrfPw!Sk}-h^yJ24EOdbPe?BI1daTjdu+i(dq4)0*8%xXS{cHTZ zI>5@qay~!6ha&^C2$Rk%VsaKUat@1feoSv}s5j@Uq#F(yUpedjbjbHy^A$8tbuIrB zvb-R++X3laCY8R^3)D2^BH}WKlstn4c@}w@A0sXdi3^%IPG9fQ3_`e1I5ew&_$&*2 zhR=1=YxIq$8-Fe0xNGNqf?%}qAwgUd0JUN8)(MjR_k%LP7v%vOBhP}+T|iV`L{eVz zQG?JK0cvK0Vv^Ugu4q{ij>%V}g!plz8jdW>miWg1)zpXK0luYmmc9w>;yZG_K+i{r FzXGKu+hqU% diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$NameSorter.class b/twl/bin/de/matthiasmann/twl/FileSelector$NameSorter.class index 9ce702fb7f73ed3a04101edb7f2a3533d59591cb..6847aac619f6a9ef37ae7cf496a45ce9d0cf8a15 100644 GIT binary patch literal 1487 zcmbtU+iuf95It*$x=Gw74W-;e3Z>1ZjcK_F67?l*rAQ$N1ywxovQ3xZ;!9;ap#Bpt zASzTI_y9f%F}n$kTl`Y-VDIdB_RP$gv;Ot_$4>woc$&d9meMeAKaFLqNUNMh1=TFl zs2Nx@P&Z&P=|oyuM-?~V}iJUZK9}8#8Jv#hb@|*w0Pvl(YH2P|& zMAk|H3r< zZ&nhzY%sLCQvKYK+M3)9$`C58$6b{qki;uUgBplPijHA9VNjLWG{$#|p_Bw4X8?=z zlb8lwT4*RpPU%-tkaUu7mTV0<=w#kZ`fCg#b%Fgl1UxJEmIPzjlWzfRvI{0CZfT5}Wl)iJn^33!XZw+MV2 zv-*w#FO80!g6GEI1f}}XaD!k?N;dN3DAB0Ho8%+SjQe{_#mfSU)o)1Aqt#AuNrSXj zm34wC9iJ&eQ}s+qM7-XvIW~2}#A68sddFLmBJhevsX*hX3S^ zMq=>7AK;HNo|&$6!S#Z8vF*&+Gv_()IcN6gukSwqH1W`Y#!%ZAmdm5)oy|j+d!7}2 zbgXB#Bf7#7y~qz1cepFMeh`VkK!#!ZfPdhY!@a)sV()-l42&~eR@OmeJJy!(9`b z6IwemW$wtDj%1p+jvQ4tR9TMfGWHDrz5rOD zan$J0tS}D#cSGQU!n~)wPCoe&rXE9dj38}- zJR-;@ru4@OGCw?a3dzS13Z-;uxIuj{u3=25HVw-1_Lr{i~m-qT=TD%nikyZ3L#$Evl!stlgx(KeCBnu#Pd6FN){ z>p^-qFR&WkgI8{Pt=sbHRl~pTYS<9$1y*+OEsh~jw@MenH7rLJlwv;DLy;RMxV8d2 zG-YRpzC;zmtSQzEPnVofi5d4D;%*P2xI06rucQ=MtTv5+W7ZlBoKRTDG#MwB@jlBF z4Wbx{I=#mvg$X&#j&jPx@G{}PL3v>lyC);^EOIpCfsvzN4)bKfCCA0;U-9`r;-Z3l Wl(B$GqRljePm)T8KW+sxFn$5=tT-b8 delta 474 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%0AUuEyTBn?`b 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 G6#gG=EF<^; literal 21747 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 Iizxs90LD{brvLx| diff --git a/twl/bin/de/matthiasmann/twl/FileTable$1.class b/twl/bin/de/matthiasmann/twl/FileTable$1.class index b0633e8c9fd490014eabd9adbf41b3876a107887..a535f7032037eafee1d6cdbd5a4222720dda7bf0 100644 GIT binary patch delta 369 zcmYjN%SyvQ6g`uq=HWzQQ?)*7A1h54Eh27Qb|nach`VA_9n=!0&{(&AL-0!kAK=0d z@CW=3{Q&VK6zae|_rba69_GjTwpyRR?;im6&~Ra4-9rgg4{O-4v1wz=MlI_PvafCh z0`f>}HR&aBnyOTwd7K4x|4_i3Of_+5_xy1zx@8;N5-vgs8;(RBVdl5m0>LQ0k2^`M zuRABhk-EGSD9=ZyQ?27+q69AnwFlBum5_8h*1a3di zYM*^R@uKz%MDzyZso+Q=w}^fCL|N1xmaxo@J`m0n4w%V1gA+YNyuzFdc!l%@4-fu{ aI5QCw6-pUc!78)GFRUV9m0Poz`ThX(7&2i1 delta 361 zcmZ9H&q~8U5XQerVmFPejrCtstu4|+jfX}L#fzt&go5C~n`o+wZ3$a2)uWPC76wk!{jbV z-Wx10!xJc_*HkM>lr!6nRm6k(L*4H2Ty>U=1CJp0v{o1GD2!tjqsC;D?^OCq-pvjS zK7iwIK0^A>n7!x9z+9&NIQ$bwC~_^iD^usOz>%;Bm)~j5TO2db_8%ahu=JmC%!{1- bVb~LfxsDZXGq8#ZM~inVV2v|p0_5}?Jft@R diff --git a/twl/bin/de/matthiasmann/twl/FileTable$Callback.class b/twl/bin/de/matthiasmann/twl/FileTable$Callback.class index bed99fdba4f93f3668e57000b216de966a52131d..316576e9412475ad66b02ba8e4eeba9bc50b31c1 100644 GIT binary patch delta 138 zcmZo?YG)ES^>5cc1_lNr20nHMPId;Ki9R08>Y&Q()In5vQm>v7#Ub83I;AVP5>^T7I6Ro delta 135 zcmZo?YG>j-^>5cc1_lNr20nHMrisy-V(bhoj0^%uH|8eC}pLdeRpxL;{z4yKM{dnHzeKNoP`Qy(3UP3X7 zVVsR%5O2tGt{dlZK~4*@T$E)|?v`|1lKssnBFM<~vY2m0v4T}u*1E7RH)RD)t;>D!FZi zft79ZV>4YcovrkGZrjRxe9|1VY#n~fdR5!m;#-&PE>%hetE!+j=<3>c>8h3$jFRbk z%x-VmRzab^k-6sCrSwJ9vlttmw;kI%t8hO4KcM~>;YNZzYYS{dp>M@@thHJ>XH~D7 zxsngNk~d4&%&IMR^HL)zu0m+h@v6JTnsFSfxw}mukk|5Qp!lu2V$?{!A(=9go55^Nr6U|m?)x0H$6?$91XJohrj^RB6PvL0; zBY1{L4P3{Dfl-VZ7{{{)p2tx+oo1{rht|*xypJ1_-~$8CVZy+NxS``C12@6EIph^! zU{+KS9=@eMmmLV5r4)hSUcri3vkXZan@-yCvj252?Qym&^>$fE!oaA?9nBS!^Vj>2fVxk9srxg61YVdc?+TSS* z?jdljIL>vF*6*}6?z!YcsAQ^+Kytc{U@|rR2wDJjgvR&KpVaCICsiH#J|_IPE_n+l ze?sKCxJCnbh;F_oe?WK--N{HD#y)y|-yZQbzGsynPH;Vi9zf-xsRAO(La*Ayh}y!q z+Qw0J3rSVRta5Nk-Nu@_!*8MsQ`IoV*kl7O;z-dVZohj9mnZ2z;Gd@1c@Qt~JPhqG z3DPm6Bdy~_x{mcm+5Jg=(;FNV=__$#1Rv_3IY96H=r_bpYgD^=fW8L<{SWxwKtCV| z)DEI*m&orD`KLaz;YN-ovM2`dGG1W?K@o=fgO0RjTUF1{UvNvE0Dr+phy@^Z0zONO zVV%$X+(yH*nOl*;)4Y-SeN9wB?sKWf%yfW(6o20$6uh7M1%s=Sdz!!RF#4nnO_n+m z#2$2QA6oD}!`oZ?9DV8w#MC_ut1tcX6O9rr(&uo7R4bA@iB~y@fZwD6t&eR^k?M2O zDnAHKkjvbq)gfu~F?wV>z|cOzG5q#V`9{ZIwRJqyEGZm@5Qtq+tTj&~fY&)yKn6L8 ID@b7EZ&hxWod5s; literal 1948 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 RxQ!xq@C1t-yMtX!{sH8NDIov= diff --git a/twl/bin/de/matthiasmann/twl/FileTable$FileFilterWrapper.class b/twl/bin/de/matthiasmann/twl/FileTable$FileFilterWrapper.class index 8fd3acb4c51345fcb92b60dcb023ebd4024e9787..d927daebc1fac6cbf2327bdde26f8a5e8f2cc25e 100644 GIT binary patch literal 1229 zcmbVM&rcIU6#iy*>C$#vXaRpgwJK`61y&HfR166T(bz(?3JJGqJILa8+jJL+e~SGF zyl^qGF?#Um!9U9QW+^R^J*bC$^M1^G@B7}&?9X4{z5`gn!vx~E9mhE4mAIqC-6Zaz zphPi=1S|s!1{Mu0G3a&SONPXz<4XDh*<~=Fd7kWUxWf0P&+w?yly*x5!GRMtmIc(~$?-M*l z^+H94R4ovVw^h*@P*2p_N8N@xWXebnc`d0_6Is|Ml1Q7Fz@&)`CJo#-v5XZH50tou zSp%yKcGP7UR=YSQhRHv{F|0-vi6nWhAdRS?PQ3Wn$qeI;e|Fzy3KyrO=1yDA?r1Km z@{k+y^pxVDYYdI%MZ=;8msRr$R~i|uoZ?wbk(?&WC0nO;+WG=!mHOb;Tpya1>qGw( z?w%oe31gJ_96GNc&Z|iCEllxk@&ndsJ}%=bSyUofEoQl*8j7~|++QE4%b4;ZJAc0z*xKt?SpVrUdG^pDWB6YYcwXc$3!fee3%Szbe) zzebtwh7j|ojfN1{Fozt$pys%a8w4>=dK|G#dRkj2KgUgSaNI(Q)+}iW`Zbv`^{Xo3 H3KG8oXE!J% delta 604 zcmYL_&rcIU6vw~wX4~y0u~$ruy=CE}aK;9=hTe)l^w?=$;qzOY{ zyziZOoxmIHceeNX{+nYH**KwQPyyj!v%F|MFc5|9h6*A@iI3MO(| zRTM1PTHR8}!#=xOj-QFsd>(bom}m&J;*ZqID9oZ6S7fuUlluyDXbR*GqSeFTtsmx* z!GgjxYVi+oS`kodgMlAD54H;^N9<}NR6nJ=Z*#5kjTq7k81xbr zt)WQkDANWeIdrctz#UAnc!X?^T z-6LEe$I(Q>#rcWyPJ&r94O(k4o@g(=!bgLbe&uTsLs^_&~R9$HMT n343T`kqIBL&cY}atAgDUJ3YM=L;$tFmSvggcv z*Z2LN_jxbhoIUpL;iCXr@P{xK;EpgpgU=RXKJF~U=kR&yeId-(7v=RO8Gc!MUy@GT2FWonm*?Y3}Fn1elGG~-?i-?ng{EPh88 z?-z*&EPU6(gR<#+va(lR-!H-s@K6X3Ti7QDKT<%%@(YLYC>|5J;V>S@h%D|G6ApxM z(88#NF$;$*JYnImg(odM5a6o#mPAV8T_XXy25$A<^tQH@eMB z^Yil+LQdMvCY_u@!7}!?DcEi4w3BU3C2~2LKBv3A&uOL-cVjY<8%(6r&FW*tyEL*&E**b;NZVyB%ksfG{^VIZ! zh{fABEW37nM_Xr{XY0Z8#jTxd)^TWbuT%&wNT!qSLWMxxoGTQ})=ZzHFs(hAb~=Uz zdz`F>p%87)^d?eQB(h0?rRi6HbGlD z;JB@s)X-phg_9sPopgXgd0pF_skjLC>aC=XVl>W^Bz~GsLPMg=NfCZUUE4_-*7R(0 zdR@W{X#LTtln1hzt#k~zoBbiik9)K@?k0M#U!B;j$z-@P2o=sCiq1?X zhmOkiC{&(u>XMcui)0t1#;{;*-gDUW^v6KwAjE6TCd} zdAuIN?`^z+H*H)lcE2TnBk#AH@gbmN>BJ!YVRmlYER7cf#V4WUF|pMQl|XD2-$snD zxgU&96zdH3Yu}XHNrIDVUfh#&vx#1J^7gW+ZVnb;W`e|8TRP_^(!GQ`qt1`9Q*W7? z4@4+;&+4_ET~yki%sNsbmNHpfr;jUA=~zf3<10MR$?7F5nH!G=wSl3L*u2?EQ>1Zn zUiGU1gf#Q1r$ zfS)})d` z4vrvP)iTVU2R|qh>H)2>!rPJ87{nFS!!n60ah0#9S&#W$NIggQy-&^FN!AzSt?$AH zPgrdvWci>xTz>!sRV^Kj2T-&VYpNgO+zLMO)9kRll#e)Z(UY*d#!wtB8O1aTMA$^n z;A<4o;b`e_v~0MZ)8%8R7>-UK*1E2yoczXh)v~{mPh8}O8%Hr?o>^&*qH-6k=$U&l z-9JO-rbVlK<)XHF3^ga|*ILEz3o(tvJ&cgrN7p=px$04@P>*4i8b*hD99OClY)}Vr zqZ-96>JV;MPvAlIBpy{yVN4y-OkGGeZbvP;aWzcpJe;TgFs{+m%bYmD;P>}_d>q%( zrt7%#EEJ!>+z=8~hG7{s<_SbY=!x?=&giztckejsI7Z#VdWX-t7%N1K;jDQkJ4L%t zQE5hJ((G}Q*}al0<DG||!!`YUM{Z+3tlB?jhP2f!4WszTPImTfH`Lzu-ZmtiJW9R1e}e_(P0Ubl z;Y{@gV(O3j@EG?P41kml3+m0osKp=yL}}W>2%LbSrXSa?Pb1@_*-2>$wZ;iFvph7C zjkSDcH9Uc{1DF8z`XpdyvZzA6O<;dQRQ(yV)L$^0;|BFN4X&QbqbT(~X<$wsW@8>^ zBQ|5p$uMg@m|5g}m?MNOG27H|^s?$*2(ju8S0BObj=;rcxmkTbDjLg8!QD`9HnqgJ znISI|Aw-jLUx#@4paH|3;L&* literal 4667 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 W6TzGzRS=;Ok)z~M7LY?P(tiL~kuj+N literal 1298 zcmbVLZBG+H5Po*=+N0MiARx8^0`k@t%2@=A6fp)hX;R<=gv5_ad*b2sj$E%A|5FoV zG>~Xw{KN*CXh3J^KN7Em?Fs+T-Z?mOs*!;>!;rEz zBiFM#c!nO=Z$!ecIt;6o|2eWmIo7M5>$}kggO<(hGw7Q^%`w4{vd{~YA-=Bs2{QFt zFwn!$S8;u3yIDVQLdA$-pb}Jtw=Y6hGE_zr8d8*xy3k-Ss){I;x|RJ$txx8#`>$(A=Rq6Eiv51_KiCdU3FwW5XtH;75ZZjm>WcC7v z!R+tRxiSL}iVQPX;vm6G)P1i`AtXsp?M9;da!VYyyF1rDqiZfo=cjgCa%FjK^A@gS zn8Dl)nqk$EQ%5u|hHp_4A_lwep)aClNY0%=f2}^u41k$2F3s zbn+#byodp1B_YTABAAf|#PX*Y?1aUou^nQa12Ck{X0plc;J1`KM#1^{54f?tKw?cV zoS`qHpTR6-^b?G=XdlyC(h}n>twm@}6*fx@z?aFof+SzX5Wj~Jejnp}4U>Ewv-|muwTmwh xSd)DbXq_N0>pO3p>HtB1Hci8V@)fYC{xfgc5Pj<;c9J@62nAZ8kdl_>i?}UtN>m9&AeDyn5LAid#xG*h-#V#LOZFl&NdpvMG27O-$%WFH__bs2H(K)t^ArFGLHur~I z2qXC57%yzcdd>TewJ{mqWKdhSu!B8@M7eUrkZilhlxC@83#&UC_AM`rV<>c7lRHP; zvn5aLOi~(3s+nOy6qkA~0`DWktMY&92yxB1K$U$4#ob}poC_|&y9`_9&Iy0d4Tp6Yol5@mY!K=5GXQKyHq0g-1E*p6{Nq1IeQ@6jZ( zJ$K}pmYfyMc|5X)EKJ7|@;VG`YuM50{yf(3grRixutSk`+`uh{`qj|Md!b_iiwyZ` zO&FF#*Hn*mZ3JD*Nfmp6XNv*#Wn7k7GWbSUipiax>jmeEQS+h5+=+a|J2A|d_=5hi zM-FrCvSec|QKa801Jat-ifod8#w0CLmps>KXOLxNQ`IxD&$LlcptmZWN)gv-uSWnZ zhv7`>OCA~glF$i>sC|V}r}Z6)PjtS>Q3^SV5iaJCoGVxjd3D^Tosxe>ymw;W142vQ zT($Na$vUlXNKF$*#YM!qF>wxeu@(~NaF2Eh(zrkFwnS(7Ec}G}<_y{wq-D=ENqR>; euT$nCofNF&L1;_Jku8u%MVTs3lZ0j5#OgoWI47b2 literal 1197 zcmb7DU2hUW6g{(iENqt+u`1PK(YBVavX)m!6GJq?Abp@|;^RO!xXm(ab{CER$rq!s zMib++KgxJ#7D1s=e3;pt`*H3$ckX=u@%bx&1{yjvhT6Gpjd>WpaCk80LRjHz*Lvc( z_9-8@_Fj*V?Y1|5$$cJrzK%FU_JY6SmdnM+IvHHp!%#<(VN+Qrq2pTfc!rcCf{=@$ z%~0?DPpKy5wuY`FobZ?-Rw|z{#M|DvZGa(TVjTuUvZefKGG$HZNHJ`59bxw-ox-<2y= z6L+vpoCI}TlAd?DANr0MH4WTFQO6F0brqa!ePH!?IPtmL_xx~v4JPj4KEt|*oRNcy z9F&%;EL+MQ2F*KS*k4Jv3~nr7M|0Br4SQ-ScjR@JOx(at2BYsy{GlzUkJ!$Jur6D{ zknTGprGT6#%TSSJVE|hzQ9h<&Gdn`qe%s|iUvG*CB3#d?P*A@Yjm=p(GIMA0egN4^F21+(NV)S+70Q{3NW;76fJQxmFhR-YqUP%U;&syf9Z*#tcq4pRo@y8>6;@OdDQU`TNGQz H5mG+^NYx&O diff --git a/twl/bin/de/matthiasmann/twl/FileTable$SizeComparator.class b/twl/bin/de/matthiasmann/twl/FileTable$SizeComparator.class index 1ba47ed2a002c7b2217b97460d6defb5e63839d5..9a94e7a406fe0c42b096661ebf0ee15fe5b9ce71 100644 GIT binary patch literal 1154 zcma)5+int36kTVy4A5zdwO*=LQCiDQrc`}`G%-YzwrC$PO?*7i2~IQ2n3+MV-{gzY zSfh#Y*^e@=GZ1PaK}gQ*J$u$(XYC8W|9t-mU!s{C*2cy3x=d0puo zN#9mHqhOrZ@KU`S31VL2sT=z51)dlFqa(uA=K>Y?1T?QEusIi8fp-M93au0QR+^4< zd*)&1#Oj9i=}5$Vx~PTm*`zi zBGdK;e%Dg7;+)4Lt14jzmXS4JVp~Ve;Ql<+@kk&)d)QHv4P3!Bfy!*?#l0}FfF*(K zWKRTEqtHZ+T$_MvDIoT#{5+}Uxjk-Jz^)DY1QqsGzt?9fL5`cB2HU}NUFqQeCCfgc5Pjn$b>cd02nAB05NJ#DZJKMMN+<#;CA5d2N*p)tD!6iNWIG`EOgtPctY0k!bo_w zB(w(qQ>w$cUE6g$C)y*VD%B%Gy5}ED1BASZ6&Qr2uDZ`LR4}0upzJWU^>$po;nKyjkdt(##aG$-0&e)qyIHR&(?GrSAm$1E%v^cm;*r^QW z%*m(hTtuq@!aqak>)*z*y}Q%ENHv~%ilmR zPGNq;>IXh*xWc;;Uutz2S`9^o@)l3zSu%e>Ml!WiT%D&a#o#Q(Oaic`YE#_YS@Kg> zlH%li{S$69c*!r=c+WsmJ0WSRy5%HrM#3rB#Fiq?W1HW!!XqYrFe7eqv?8w6f1uRh l^%*O;SVBlt*g7b{-~a)0bV>!EuUd11T z`~rRsxC3QiVEUOK#c=M8N$p_lRv)z5y}M`k+}$1h_4jXo0$70=gNmzhT*Gw@Ne%fp z&fWua_DaV~~i_*f{FC}v~0jZcJ9)v&2R-CEl$ zD~KDOACx?&)o>N)71y==l4CZTR#QQydSGQ6W)OU1o6Uyly4m1cC%a)g){eRFSjm^6 zIpXcq?hsEkDti>Cs%ys1{mt$5%0{KU&NOwe@!0gu!1EO(s*lVkX0{dBPPTMxCq~S$ z4_z~8`Id$)1>v$A_)itw=Pp`$&ZT$RQMR9Vkm$|#^zpwriygQV?R?eth!oL$ z-RTq;N(n>0i$K|JHHLw8wM{gfL*4T0mY7rpW5)x#B*sq11+h#?9ox90;Zp^vSDkVl zX?&(*35JgIcuT{Mj$M2%ELj~1Ol$Z;SoUBvnII!viE|X zf(wId=qy6G?szUKO{LOZ7qq?q$f^gVeSRQ_g4OQE%Pr4!!5j}^Z*9a)bjNkvDxysb z0~0229Fn?E5c3b= zZrI=VazAMpM!46X2`>#MTs51)rgvaJw5@|~&WZm!xIBb*|F~RnnZJ;;{6R&E(_-cU zN{+jfoOCHUJELT0?m7F@$SxX!wBWOC)WzExbN?+7h#Qm&AzN{=^+)AY{aU9v1v U-X)85${OV@$}cHzQ{G4PA0Z$_7XSbN literal 2249 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 Pq$1GOG>;U;14#b{S=atW literal 1193 zcma)5-%ry}6#g#V)@_tu6NU^Be;{lHnWzxs76Oi;gl>B%n`wL?mr=2#>rB^Tc=r#| z@c_|CeD;qro?E6gCMN4c@BMDi`Of#x47rMw|J+;9VhR7 zwDUXdrr&wREyp}6ald2Ah%gMF@Kc_*xpSN^JAR8Hu~RG6^@F{#!LXq9!&6`ws?_Rw z`QYV#b-VVaO1SiTSKB@asLI<6vC3ApzNIk?maFy3d}B+imvx54xBV7~7n`=_Sl$MM zl+865BBl0`8Amh;hA{;x+@dPQUPwBt-PqDS*K&>vySYY!VkZ;I;x;fVcqD z3gQAJ1h}Ihftc9cRglCW!-z%~SM^(mrn}D%ZIdCTwVT{-aMuzzI7~vq7>T2c?~tBT zZu=%}a@ky;PLs$&m62l@4LLaLcxFq%5|*hy+;#a`v;Ee9>w z9^8<`C;+`ACD_ZD7uINyAJX}?p>--H($ihc8GDj?WfXX{Dbenj43=3*v*vaDhFZ6yW(^QwUK5EuU2_|b7ufE8RfR3DX<$`i5@m_g zIHRS95^GpD@R`Kt*pPUH#}XB68rYI}f-fYtQIpugmlCHiA+d{x0)-?ZCIgjtA5-LR zlE(nzT#2Q9m;PjNlH<|Z30zGw9N0l%KAB!^@}CEZWvu-WgsNTD^QhrNdCf7yA^+;$ zfxzW|YY{tgF$qLm7=e@fDn9M1DZtnp?2r|m{cZK4qquiZ|5V^a1d2Yr6e37GABp=9 zWSQ%8Afj7Ih>mq2m5H&pEHIhhm^sR3wkc3yx#RoF?K3@UIKwnf^`(3m_Dnu8>ZNaO zU;T3#mRr08Rr9dZnBvtr&PykY6dzI%$YwQ*c_$C?KZ&zkeUH+;$O146v#%ivZ;<+h z+7!-l9HtGhh4UO`B%8Q^%bW?#(>TH#M$|Dk3$GwvVW^9A>L*Okc5&iIT+zzj!tmSm zE{rZl_OzmlOm&We`7_1~bFYabQl8W(h9VT#FhY5o8P$k;2PN!b0bgMSUt=9lQN=eA z!l@pL7$NcCDy|XZ0==%Y0x9GeCxcY!Ph2!`BfG*RrsE{;$7RSAW`Bq5Vl=r5XKAKm x^s1nxo5(Xn8Z*?VP{3^Tp2ID^)BKPXaf#9eVjJUI|0KVFS00?_hi{(P@i*-++9Ch| delta 884 zcmYLGOHUI~6#ni^%h>i(DioB0@~X9+7RpQHA<9EQv=uC*CT`5oPOv!4AT2%;6MlgU za^u2{hJ`V4X96{GVchCJFfLsABTS6(+-VInnYrhlbME;b_kHkPF!b&3r_TU}v93X3 z=o5!(&-v((1`k7M%Xn<0EyLbSuWW3Yg^Gp-h8VSk#j4VLkb4pFfuV`R2frUGPICm% z%%H{-`GcQ>qKAzr>9{y#DSsmGLj;`~I>c)=>g70x^WwLv2mI(puZA8*6&lPlrE+D? zdCJj;sF?MHsUe2AhKmfki~O9mB{>q%3E3!AN{*c~AMKgtidl4#?@6E(M?VG_yxU^m zGe$E8F|1*TpP?2F#H$<{PRYI* zj#)H|``#|`k}WQ^Wt@Ux<&E8vv0<6(&vwjp889@iRgA*Jtg%zyx5P6iZZ6n++f#|W zpC&JJoWWUfphQKd@}#|K!7f-%xnyr<&B_C(C=Fd@7?38miXUoZpD)|CxjSze<+533 z2rN2Q(cH~CMblyk&Ks7sLBKiFC_6S;OP0{*g+eb$074;oTXf|reF1Q)Hc~Y1b^v}o zd5oa`5up#1RnS6zKdo@5tYAM(p*$qht!Q%#q@X_LD~*+dZ|g@09-+O8F69kk$to_q zLYGX|3dxgt73nH2-Ia+dCbB6Crr)ATPaR{rmb@mZcw8#IBGb_4a_Fw%)Hx6$<}gnz zCMa{Ageq8|Q#GdlYm1ceK^gjk4h?E(maJc@6HnCj`}E`&#HzS)BEP{^%OI6YBRrG1 k>4vwEan~$?OM(%s;0{F*q9zTJ&miq`w8rQz)@IuO0dpFaF#rGn diff --git a/twl/bin/de/matthiasmann/twl/FolderBrowser$2.class b/twl/bin/de/matthiasmann/twl/FolderBrowser$2.class index 43c15d8836c9fd5bd212b5d7f8361bf2274d4277..07eab7e58c71e0ab648d23867ded9eea6c24e400 100644 GIT binary patch delta 534 zcmYk2U279T7=@qNjooZIG26HmZLD8yVzT{6ZLJ>^1V1PU6~PO8;nmhIVp+D3ZA))T z|ANb2>Axr>5d?eXmA}CYvFOhb-&q1WFy}q*aOTW;=d}E#y!P$S=Tl&r2QDr*4a^vr ztx%y^;W{k?w_JgCg${wkoWs1sLiT<&+g{ARzRsVkB_D-;mLyT{NgSqWlq#AVnKx5i zQ`o)zM6lg?m4CFJt~e}ex-4mGcp6PrbKbxN4b5$qH7f@0u{|9A9qKS{!^ILc4dY<^}v%D<~lO+uwnEYkJecsuIlZ7Z-9jm-0% zjd$tZTeH$VmR1FT?S zfE|3IbW*5&!7)+84<-e5!F?`rSvtiOjgi-JBxXj~3i{&J#~O0(1GQ0S4;kAuypJ=a zylL!hjD5X`@Kb`GiQO-n{QmE$*667#grSSGgv&BvaqulCW_zx+_H1UkWo& Ai~s-t delta 509 zcmYjO%`QVh7(H`u>$cb6s#0wgRf^j`|0H7JClV_=61(C?B2|fsZJ(i;SXg-mNn448 z2e9!35+S^UjW}~-VUn3S-+br$&dE2Ap{J1Z{PXYxU=Ax541tVV6PdV$fPiyazABe0 zel8TurbtbkLEn-RS8S8bqQ>}Uzo0W2{=G8DtXC`+LrsHVSfD_S{ z{hNk427_Coi>z*<4aNc9Q8(8@kDG6y*DbWr=ia0L&SwwuwEZf99=svWShAWmNYs%e z5Ew%2uc1e(PG;RE`!&(qM(V~#I_hg9v#&EvWZQ7}wS);R5%F!j)6@qN_~eAX{z+x| erj=%VzDTfWme3gDug(($IK2fd6WLVP`dq(mhDGoI diff --git a/twl/bin/de/matthiasmann/twl/FolderBrowser$FolderModel.class b/twl/bin/de/matthiasmann/twl/FolderBrowser$FolderModel.class index dba7ed0ff86d38a993d10217a9e10bf7fd12e805..838061bd03121c8f0b74bb5e2e93a886c75c680f 100644 GIT binary patch literal 3155 zcma)8S$7mw5dQ9LcV^NdVG;r4k02U z?z?}$cV2i<4g}C6k8+N`i6hp%-I?ixW;t2&MueO0&a{rA5=?*rJ0UsFh7ERA*8 z$1yG@`%^f8gKap3w^EqE+hX(%M>&m2Or>!c@1}4BN0X?C$uW-OLgD=sPU2J=9XOrF z2RM@^qz}cvkJ7aJu>esyrWtt6GG;W}Vdy$tKBrz(ONMIJONXb=X;pWKA>p3Yo&G_F zE#(=l)KFcTt4>2T&5}EBlnzSmeYQ34Xtod^)=k|VVR$L`9P;_&46$)*Mq}tG>!vm} z*O=DqW9qa)E19xYRgL4St&6$87!&R=w0U+XN!4IbCQMVa#|_nSG}#L@O=R$wr%9Ik>nT;!Nna0v?> zpD4JDPZ@fus<~~On-y8ldbI7%ULL%n;0iwDxXMrrwM2ncG=t8CW%p014Xt9?u4Yr< zt%-uqagE~(1z+Nti1jOuuN8cQZxwt8O~Ed_s^EM4px{UR#E=g&6iWJ2Wd-Mz1;^DI z{*maG{LZ<$Q5v@zRI4gEEvt-<+>2pGm*tBjYfgiBcuG;Mut^1w5`-SLELR?)d`Lgx z_?cmMn0YVe7UnTq(_}1uN@+)Ot$2PeO_RFmxT;yDk{W(4U&C=l^|pEd$1gM&zATwJ z6Vei%%bXuV6KW`o73zMi;~?7@^<~i?sKyw&bHO%Hp?+c3$=`LY3>#LxPK%{7eMLQr zF0wS<5%k%9iB96$(>ev}XyMt!p(B7x@N z`x994?;UY5WW<BxUIgQWxw-Nh8YG>(xnq){EDMmez z=8BjggU#4VUwX4(n}^17h$BjC7m5$iRk#Iq3-NnMFic)Yw?8l51iy!56q5rF(9?y~ zBGPx!b`wgby|{=~(HjGQq2r`4?R`4`LAyV?j>Ju@zJttNvM@k?78cPRyFo^y6f{sE zcfsO_u>`tV5?fgsdDey@reF_Sg&JFp^DG04b;)1~h+#G9=7=N;6Bqoj#3)Z_jDjrt zyG7bRfOz*qbaD*zJR%089NRf|&=fI_QW7Kd%Q5(fzyf>m;2y`z1iKTjc&uTNzJk#N zg&4apLW#&w5@MD01UOGLIj8&3*B&Bi;W!uCy*qzjq24Ri*Lot&*f?Ip>(cBSO`szr zBa+uq=v~B`Nx}EPBG$G5y*k)L`OHettS8?G$@x o9>ECq%I_%p>ARVdEuQ&XXxxGKaDrwNIFAOMkqh*;w-c%V0f4nEDgXcg literal 3154 zcma)8TUQfT7~LlcnGgnnfOvt{sHh}CW7XQ0pn`a5DqtlRtJbzdGT`83LMMYrt-as- z7y9mt53Ng4+f^UyTK!F~+I?oGNetsxs%{T>tI0}9Hx)z#Qb9+`@^iLelow5X!l*i~xPUU} zLRAI2FHS6ISGBCES@YS`vkQ9B$q7WMxH_;`VEaT6>Qh9d_=sT{&S8O_gD)YUnh}VM zlUOSR+Epls#Sun_idJ+Aga=bI3K9aH&BUa9kBSyV1v(}SOP^XQ&+7JBZPwHU5)+l8 zX3l7~A=mz9L>eNHeKD;@f6}Bjliu>|^o!S{AaE%l2rs3` zr%cCsgmXczh_m(%DA>=`s^{Ifsa2~gUdKV!%)IVQX=R$%Gni^fhk|1p)_g9GH!-Z> zErE^h`6b6Nvu0&}o*%Ol9Hpaj7-3il?ydqe;nJ49AF5)T~{*oTPMg((4Mt$?JP>NOMl8IElBJv@}Ct z)TbJNwALF9JAPASL`CFxhQQ<}46Yo^pwKdPeOs;asXt?$Q?$9u9nv2h&>?r_bO z;-*|Km|$uqj`wjv!TJAtoa@pt+tyZ?Y!~qX`(u^N1cn9!iuT#40w1dQNH)=RbB3*t zndbOq_I16)7EQP579kUBL&G|=^yON!YcDuj@yevO==M+rQ3Z2M`g+3EJ;VMjt755q z+@jBP_8E5XyqDr0p6s3Z#&W6MF)fBw(ys{!%EyQzAy(pS@f8&Y7UB&4Cn{_ZR4Vb{ zyaMDkJ8zg+!~ptf7H()K+H{a6B&??KKrE_>}IK;sS%ucK=hVX+hX1(Uy3j zvSb%!n~@iir_aBy_ejR{Ou?A9Wb#qq$aA_^)0I84mhoZUQfl6^bldGxdR4*K0?DA9 zZ>%qptXCNCIgg~9uL`~wI1mI7nBD^tmVc~Ng4P!betO0OrWvMo1JDwWhX;ow(;&>} zP>4Ug?t#uu`Apyr=PX2-CT*OJx)MMlow*A&eGlu>;lI#z7u~|55@U5Xgkw5PXd&8-}(eBS~B6=IA@8RryoJ$XpW_lHuBDbhB49WE% z+DWN}&$%diL<~DboR@POhK0(TV;!bN2fITjW;xeI7ZyYUmgsivN+Tk<`*z9M$Ixh5 z7qMsQw-6r%r~FxwlE=}~^BA29O1)3`I0-8d3c9#Ng#ThV#9sy5p73D9x0c3l3Un%% z$7Rof*vnBmH%fE6A4;=Au31sJD>gK^KU#A?OWi-6qclSWMV{{4_gmBPKKFR9CsMOg z!4;UU+Hwu(3}s{-JJNltuqLJNhgPvz2lP^63*V7R7c}XK*FZab&?r;Qp%X(?u!O5V zPm|ITzTXRKpQM|4faNd__5TVbbQ6*OdPqH81ANf#XwcPP)79^4V7FkRUZ*J`$l$~f xdW_9tRF=VKT!(N2pS$B1_>$u`20M?h@C_LXcFJ$L_Z@eCh{`A3kN6pz{sXr!D&hbD diff --git a/twl/bin/de/matthiasmann/twl/FolderBrowser.class b/twl/bin/de/matthiasmann/twl/FolderBrowser.class index 1c630dbe3dc6d6b3743f8ecc0dfba7b5c684dd35..98722e07f391a76bceab1f02068306402570f2b9 100644 GIT binary patch literal 6964 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 literal 7021 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 diff --git a/twl/bin/de/matthiasmann/twl/GUI$1.class b/twl/bin/de/matthiasmann/twl/GUI$1.class index 009c11f8b693499a200e1e8270ee08c26167deb0..a2ad5d24fc15131c099694690e2e77ded4864e44 100644 GIT binary patch delta 411 zcmZ8d%Syvg5IxhRdG%I#H_5T1)W{vI+<;6w&SkvnXf;Lzm(=g#3mZp*|O` z#b5AW#7TT0Ubu75nK_)9xlh`o)_ePSegQB*--M2)1p_S;E*4BIVkr-8iwny-R&=bU z!-Mp-?|>k}IF2rZvy&u=5<+t~wcV^n_3WLbr(;cE9UTD^mOup?0$p%g3i#L**vdl> z+iA6>5d743(!k9I)X1#TzN&P+!)%W_*%h^}3EKI^IEju36#kH7f-y?MI2oNrgmO0w zy&>8>r@_0BZRdR%mH1X5c-$(Z9p-t)lKve?KA?14Xr?%7tN|&QW}NF;1sgSB%)~+c x+aiEc6kRDNpb3--)L&G-hj#PNQUBxUemSzmY@wP%gI|?Ddmb}IN8$~N^9h%FGOhps delta 433 zcmYjNO)mpc6g_vQ^XXyGs%d=`MLR9ZN@79M)oe+Gg+vpxXu?Pg7B&+9;AMUW8%cdG ztgQSTKS10!sqm8b?!D)pd(M0B#e6lr&+oT)0P9$_pb>o8DcaRF3pqkVcJk>p`LeZB zazGdmFkrgSF(_bRh@jW%d-Ap=KU%hfaZFe!rjkmYfR7Tvh_0gef>4%6g>*|Z#HNEu zOk0@BjPeTG7MMYWV4j{`Cec2DLPeSrnE!(hT((~jSi};+?j~WJbdMu8sD+{YY8nDf zET?z0dn3X)j?UXBog|48RCrA1*OBL`t8=FDwqP^vaJIpRqZ|oi$oEy+?4f#o5FGa4_E6}d9QOA6T_CK9w}ySBHX@Jl{0YI5SsW3L}&ItVK;UxgY=S849E&{I|0 zweEF~>Q;MK$|i|uHcY2xwryGa&WOlU2yL>H&IZ4)LXop??tj`EVw|6_Z&;3>^ON-t z;{J~$43PSnpj?MdoG*;wj#?mOJyAHdju)8HZY5ffjOKt za0!qk9Q4hW5>WQ_7vs=PbGUI^%`N2IfaFZ z_YM2(^_F2LE0h9X5_EZF0(K}QZTC_0(5jlA)#ml%ch;MiloTrZz+?jV73Ri6Mu{j( zOuR9;w?GR&sdJpdXa0U z9Z035h>Q>Ow}cDyzfbE|&Kl?W;_@+6@lS+`7mpDxt{fv$%tnr({odb`=Qt~o+AiYS z9!_gDOl#jDt9^?CpA``i6wVhpizRGBeM@-CTj%>sBUqum=zEG-_0EI$S2qw*ne H6U)FW8ix6c literal 2121 zcmb_cTXWk~5dMy=6UDaLxK0x{p`mGUf~_=hFA$)10>(5Y;I@#9fd`n%iW-#4a%#)H zyzw*m2YrQ^2F87WHy-#=47-x-xYLnmnBhS>d-m+*+i&-rzyEpl2Y?&c*PsZ@AK0aq z>H9xAX18T}UdeyzmhS9t=c_dhszBz*d}5Yd(>pBPZywo}uVF%9A<*`G$1PcH&+2tL zw&#~>rt6wb*VZs8kUe$W>3JUO1=OQ zjNl5Hq_7FXPQ}{KEc=)<3e1d{-5#jPW`a7@&0iCki$lUj6~}Y@O@W^Zu~y^BERUog zvKJRCUyb3b*bsPJ7@sL5=>JF;M&g`mt$ko8A@H`294@4gz@m;hTqdRq#Ri|eqa%qF zOG`S=;4Dk;>X<@CV5;tT_Pt)KX?OO*dCk__mgzRkj>G#%sd6g>F2>VRqh8Fu?)vN@V?9$hXg zywB_~GwKl0$#aw1ZTC8sy+vW^rJ&bujTseqP-)zHvjLlLszOcNdl*0J0{XT`k5bJw zyIq@xN~zNGn2WhrSfmyvpioQc6{b$oB$Fmh&$$BbEX^~?S)S&h{v4fA&xiZ-w5Qep znGD|%vQN<29Og+MMtTbuN&7SHC9U(u$_W;X-*L&fdV(v)>Iw43oO*)gUjyF){b$)y zeg`S{k(3RbmET}mev2ZV8BjS2tt+&$#Hf`(V!Vk!V#F%0lDrsc46M>FwAUm1DV!rK z!P87u*XWdY*CX6F1KfSG<>(v6OI-O2(+017yeDvi^%u}-oA2X80TLFB-%zG?{g*md zSskcW{-m%VII9#~1(&!?upz&PCVxOqKER@Eq984-$^)!P8#m=cl;vSi@@xnoDtV3C zQ6q{(P@Wz{-k>us?=$))k;qNfHOeITO46U{e@ZbJ!xCYtav3kN%wiw66}&(u+OPNV zr2_6m2s2A7q)RYc1hb92d>lXu(=J7jnCDZ?0Eh}DrxUOD=~Tg25vyNghxXY3P6fLp LZ_#tHH5cc1_lNr1|fC^UUmk7iJ|cm&uB|>1?QI*C8xS&=A<$*aJYwh>SZOC zC9*RJPUJP3tjH*(%E-XunU|MZ?^>5cc1_lNr1|fC^riq)4#Ml{F7#Rez63Y_xa}x8?_5G8wQj<$23dDVZ^E%+(d(@yyFhEppCDEG|whW@iwXtjH+E%*Y@<@tn9D z8zTcF12fPH1_mae$*c@)Kt4N&$G`#Pb24xN*~|>wU=bdu3@-y8kk18F$;iOZAjrlE E0MGp$qW}N^ diff --git a/twl/bin/de/matthiasmann/twl/GUI$MouseIdleListener.class b/twl/bin/de/matthiasmann/twl/GUI$MouseIdleListener.class index d0e2f3d7a4b912455634512d9f6fdf94a24d74ee..3f55e78dd1bc69468087c3bf920582aecc8eef70 100644 GIT binary patch delta 144 zcmZo+YGD#M^>5cc1_lNr20nHMPId;KiT?J?>R%&v|#064jY>W(y3`{^{85o#Y j7#WxuSQr?9G%JV(inD=9b_Q-B%>`7+$iTtC#l{H$(E1vt delta 150 zcmZo+YGL9%^>5cc1_lNr20nHMrinp1%Ovy?0$t*5O1?ppCWME`q q1{%)5z{JAHz{Z*!1r50bMwGmv zj5pQmTS~p1z#S#;D)YTK?x)a#ygEkJ@gR;gk{(k*j_mXa-a05ESZIb=zfT+4J8OwU$&-58ZCc9o%FzCf%+A-Ff` znAIvLTUV*fjfyGB!>m?JAq=_U7*Admd*=&8n-qLw-cOSulL;mEvL=LL$Y(>wz>~rl zHKRTB;?SF3$)gn>#w129r(R=f&aHVCFW9Q01SK=5`l{nRx)`$m-D4Fnq2nw%7&`o@ zP){dnwo_I^ixPfL$0Vk7oI!_<$0#WE2}4uP7VGX?K3?4t7Wq6yQO7xSGPM4I3kpzN z&vZOTNyjuM;+SFRJh`<;5N4NFxkYX1`DbMTe!;Y)>upiGnW9>Nn7OvbMVTQNo=SaP z!ZQg>^=fG}Ez4Yvi*iv|90jK?Y5TzUa2m1EF`u5SV7~Ml;2T{6fi+hNro)y9R31b7Xj$y9GxdE#Goh1+24uvu zht}xxz+tCMl-h=N&)~$rM@JFow%W{02pjIm7?} literal 1469 zcma)6Yg5xe6g>+KDIo|}@ByNzs4cG`im%{=PWx?$2Siq81>N4_YI z&iDiTQI2<$DrJBfJJW7)D_et-W7U=&YuG%$1(xm9wceC|2rk|TsAU;5U} z<6K`pt0TeCzUr(ymhXraYhihnyHZCJ!|CX>B0b-71L0P}kPB($pNHHjW*t`s;Rb`T z76kr$rL@dLhJo2VLmU~DJlC3tmYk4$g@-nSDI=)A!A)x+f9AbnNX00ToJARWVufB# zj=R1mJb9C$F`X$eB&LEQ*U`?9`EODKZAh6ogbs$L@futroy!!O!Eo4wjwD0dtS5M^ zD(@`&Tqz1%$1gacr}ojIfkt#Gs8$tv+(a{yI!-Vg*{)?QezM~EMII*6OQNahLk4@a;>%j{?QQi=4B*ao6BMd`(3E3A+(T|$Ah)dKN8N`V)bfkCl+p0d7O&DmQ z{KVREO6TfNe7~f&!_}IWr+}3ex$5kxX!~`Z8 z^mWIt@P%g#=jy5AIoLr|^P&M8)2e-U$a?i5|J3a&o2^=EW5&c?f{zqeMV;$eO07WgH;SyabXi<+XN{BfVP2zwvKk~HHNh}5s?|g;tH-tl-F>*M)?{| zk>rsdu$KlDP5)PneZvjnqNnbdjCi&%H8+^3B0HF@;@;rLNWMxc=6s7j?Hw}Od*b{M marVZzHBMEUIm{DlAC+qX4=DKtJd98tVUbpY?ilhYAo&O1B3k|c diff --git a/twl/bin/de/matthiasmann/twl/GUI$TooltipWindow.class b/twl/bin/de/matthiasmann/twl/GUI$TooltipWindow.class index 077d340e45d7d666fe83b0228a96809b6ce4d4b8..e7b400205f4e217a0cb4f8ac18674491f961c0b5 100644 GIT binary patch literal 2100 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 R(uvV$YKN3>!7ldD{U0rWg4zH8 diff --git a/twl/bin/de/matthiasmann/twl/GUI.class b/twl/bin/de/matthiasmann/twl/GUI.class index 0a0753f666bcfb33ec236efa203f586868fce9d8..7cfd551915edf8f1ccf796846dd91b21b5506171 100644 GIT binary patch literal 24938 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 E2S+pUa{vGU literal 25499 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 t7l!|aPh7icw%7DRa@$E#1s8Ul z;ZI=0!WmdFY}`0Nr7j#-E?l^9-06%9b$si>*WifpJNMoMrrwstJvqN~zVmy2=Xdh) zzwdtlU;ws6Kw#&rnJ%kZZO&5Fva;=T?e$Xna78W5^*H09im4<*0$crn$E?|+Srdrx ze6{C3fzDAsn4>96*g?y-YQqBClI!47lLDcU`B^gtfffT{MB)fyg8_++0>PvPY#Oy} z^T=X(+N_ML>5?hXHab6}N|UN$Y1vy0X~zV1t!?gRm~^mZL0NXK5mnb3UQXn*smT~N zV~a$)K*yRP8|c7RfpD3@lmvGBdf{xkDKBVTHcri52D){y8>^@786E0a?R3ek#<3lD zOY9J6_cc0^H*gPjG7y&KsA8oNu*c} zn$uo3^a$*|oyl9_G~0*05_<%C{LHRSk%4}s-5^N;t%)@zFY;Q?{RYXsPhbmu8Y3f2 zXFtzeEHGSUldgnLg_f4;^-!IIKJ=i0Asi5pULZPvynoVeaYk!)Yu17+9+EgHki1O* z%`*mu@vs|2!Llb+X^|wRXSp~IVMO9lR{w;0O{Gi9E~X2rHfP{5JWfp6vPr6BE|J{YVwJkJnqX3w*zQj9pX8heAd8GjPbn7 z0=+4)ZtU#P#w0#Uok zFp(E%wQds0VV8iIB8oNfN+@z#^y`pTxwuo1eoa%RId9u$Wu&C4Rec|0 z&YpfhIBzPz4mR~5A0W}%syjPp0e%uuuE#jrPg$?Td;6|(cn`+A4rUX_2rJBL#9gk2K#;gN*S_ezg7_6AKEh{uwv5icWo%nPk3hlOT0yVCa8uv|HW+H# zKNN0zU?`FZox^Z&P+r1-2S~^j3lC8P8lox3}ck@RU274dw6XoCKkBGKmDouNd*y z%*8k8#JB9p-(e8nBZD8YuW6o#M6fHS}?r6U%wexR*N2bB6<#o9z8mW0MdjV^RE>ZH&hv6T3+GVvdf zS)2G5G$FMvT)J>qb?3sw-(igBPHnol?>Xn*InRC1&HQqHI*qS?KYa$yv6v#m35SzO z#yFLv%&f^gBNc~@2tp$$S0|m zS#IsMtPJ{{-fF!u+fZcowwL`uTVXx*Ukaw&h>nGtdwsj_KWkHx*T~3wS+ZmTQH=R0 zihqeQSu!JvykyH#%edsdO_b-xMp)hl;v*8C9N?>m@C|5)lKOw(iR`tz0aZ${;{T(4861i lU>9DAhBAgLa&}D2AD7$`>yl1O8e@h-5>w(~O#YfFoPXp(SxW!_ delta 578 zcmYL`TWb?h6otPtlQ@&)Skq_|r)n>z)pjPDS}(0u?SnK}P(&1bP>@jv(-KE8!OK&j z|6s`f5EMeK4?gz6x2WJ1{T)&e_eldCIA^cfv-etS@A>Keaq}Plz5f8rvglwb%E@-Q z=#Wz6SHtIFwGqaTt2Z93Mh{y_tv;E>W}ha9b{SNVL9t(xW>1D8N)APZm&D$<<{+*j zedp@(?Ilw+tZ{G+I;^EFo4lS${yxpQI5{Rc?r^Mq-zujyQ%twlt$V|%`R+!^r6MFR zRvxwLrtGBoTy6ihyh@f+oOYO14D1@c9=7V5Gn`e}Pr{edI#sJp*V=V;cSxa^<2ZVD zr4crpQPbg)vAXT8DKghq;^`3?pDEeASyzV2}7O|RjI+(n^-E-5|<&1VMrBDpRjYmzo>!ojHMn`fM(eg1W6 zGhPBe5bDYn6Mm&o7KKeFY>Z4n5`o_2gv~o<`kFSonqP(Do2>l1{E{E|{9;51$98BL lUFd5Dy?Kp~fOE{rT=Rl$lrQkSK#L13NX&{g#YHaT{s%0LRJ{NI diff --git a/twl/bin/de/matthiasmann/twl/Graph.class b/twl/bin/de/matthiasmann/twl/Graph.class index fc008aa13e1d621e2dc391376c9abca148603220..e6cb53034a560187ba06da348bcab7da6d43d244 100644 GIT binary patch literal 5881 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 literal 5873 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 AjsO4v literal 1070 zcmah|-*3`T6#niC6uLT)Dax4p;Wh_s4k79bWEmmM5j&QwjD+}fVHLZSVoI6ezf$(F zMdRYLf0Xgu4y7+jAA0-U`ChEUfXaQyloi_ajoCsR+BrX zz}}_;2{H0Rmp32_m)sf}^s$l7%q&a6CZ5UIq6&O=M+4XBsn|xEA;KMpk2?L2BZjQM zsFU`E(Q%74U!8xps89yk^KtT?;iW%pau=Cd7cPq0RguAShF5-pip2+mqA%-T#c2g% zJgDo6-XA(09{x=Y~=z0JE diff --git a/twl/bin/de/matthiasmann/twl/InfoWindow.class b/twl/bin/de/matthiasmann/twl/InfoWindow.class index 415aea842b0db9e7460094ea08d804706091b192..d0b1715f5a106cc2e98b2f3e181671a971e6f691 100644 GIT binary patch delta 771 zcmYL`O>a^`6o%iqA6&RxN{b*=rGTXrE-Ij)t*FJ4m>8=eHfe&|D5(@tyeLrp9b^_p zw=TNrQmLs)jT?;J`UBj!_7^nPGjOAeIdkTmd7qq*cT?|;+XsL4_5qy7vJNlKXgKS{ zqz(z^T<{>HlgSE`)9KFz9eEVQ^P(`L=OqmbBA3;$*uPWdI;%M-q~S7u#)^IhXZuCn zx@m2;8RW)RlVO@irRji%B7Pq3T3^nXyh)b_Dzrw6{>@kw1WQB|U^UO+Q?8bpA`NEXHt}I0C9ecDWA` z)G$ktIOfQT&ev_Smo#oca0-IKpF8s5|7s`LAtr=YL1L`s`;Kf^7kjly59k(s2hAb; z=2v*AHmY-giCf!8zvUfD$q0}=P8|YOLfwNK_h~ij6n{u@z!)Qt8ZBu&4H<^mmPu&| F>A&`KbJPF; literal 2202 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 literal 7385 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 &wK$&=71K$MUVB@QiqD#n}Z#nKn|U*{XA< zROKUO9aYK>6YV&YPsNZZe(obJ+b?z*AgPH(;;$X|KPf>bOkntM$UBO)qS)oWOD-Gg4(<_sh2J%fYn$95_r9XtHypFu%{y^V@Z)m8 zjr&jaudtbOygTtcLKda8S z(28&K*M;vOfrt4beFRtGQCy1yxRE{gW<1WF<6Jp`Lzu*~Y?ZIz3B1nHZ}BAF!c+Jg zp2mN0m__FqrQwJQ;#qYvo>Qmcc@@D6Du$QTdN!5~ctCB%tLifLkzTxJv#ZzP4f9m$ zDj8%~G`4rOiFZo9TckD;qnAmsShdTqqqHxgF0?DN2TRrYxD^j_{tUH_c09<`YF2Y; zjh9uTRR!=6Pxjj>vkbx6r5|vp`7pqL%KihqhepNW{L?&hy=7%{=A0BMc^jJS`Yt`< zWWU@X*}raz;g1}L;p2Gh01n=tkJTZGRb&!Rt&)IAERVR3j#w=*0>7h0Z!%)Pr%iug z#NMK3{>TXZ31{QaMI~V!znMGqydiaEHda*h|yK-;^jY8r79`#kVAtJ^!|#eeDJcj@EzS@!h7tpWQRQwOK&p_A! diff --git a/twl/bin/de/matthiasmann/twl/Label$CallbackReason.class b/twl/bin/de/matthiasmann/twl/Label$CallbackReason.class index 37fd2fb3d3d12ee6f8413e76850da3f84a3e2ed0..7ceec9a7513b59bc1e7e2567a341c4bfef1af4c9 100644 GIT binary patch literal 1145 zcmb7DZEq4m5PlX84vs6OP_aCr167U=!sX4C4r;UYPN<~aXMuU#5ymkUu(a4yS z9{B*)q%5d-#NewN&H4+5aGl$Bm-pVkH2HWa81$wP=BRG-@z@+QWQ-%TFyM~!&f?<% z7oy;NunPw7ns#zAv`n$jTL;gK#+w!$+2cp5ZHk z4=7FaZ)^sC#S)fNWw`#2)Xj8~lv#s8a=p)}t$cP-0v5Pv4Pn6X?d(x&V5dw6Sc5HWxx zaRVX=Su$A^1hI~5puv!Km!v$}6znrR=kR_cjo}8}e%F>I{|&@v{v~+a*H8>f<_mo1 zP-K8-As|67`h^>AV$-!#zsO6bEW%44pk}h0XYhY=&GY##!&Tgo+_B~QY$HH?w`WZD zsS`<3-NFYnv7TG+w Thomd-W0j;v-U`wP*W$kc?6m@K literal 1167 zcmb7DT~8BH5IvV|yX~?-tpXNM{HWSbDkS>Sra@~>8Wx&Z+obWq+?H!y+-}Y87Q??% zcz|dmKKrALbC(s?2NGzqy?1uz%$zel{r%_rDS!=ZsF-5N?uzn=d)`NryCZJfW$%ks zHh5oHnL4+uJ|BE~Be*-ZRYVwO_xL_9TihO&8}?+x5Um@{`W8dpxN4sYgZ`@3d1*A> z2iWPxPG>vQePMJOZHB_T>$Hkj2bO7@UX4M?=DG}#`gm8w5!Jvjrz43Q46$lZvXC_{ z1hhTJw1<^uuA89Rn>wP1#i7bzL5GT%yxrCjM}k@zrY&|RqrPz7^1dY)QpR||tuA*= z8T&6aD3~J(v`m+#?sID*=u*n&uAxc8Jv>lxpCK9Idf<9uq~jqn3<>Ty{9rKtd_a2- zD{A%k#K5aGLn8mZB9#oPi*p%#V(i^yGl?^0-1$0Otzo`qZ0E$+IN(ERh>7h0ro z$OKw@JaGo%wJDdW`HowYMWnB74sGsD97|4 z{lDWk*U111{a2LDv@{1mC;0+ME=gBVCPJr%X{ysH>QXE}Yd^qxsTt)Mvqwnz!L5iN z%twDxN;yQT-HRMzzI}wnZ-kgan!acKX+_MSge4T{ks0}rje{BMR3ka5`NGOEmM_3D zDnJ0z{kw`4NtTG-!QBA~frfyx+5cqJNgKCXs|^C}Vvy{TGf23|0UD diff --git a/twl/bin/de/matthiasmann/twl/Label.class b/twl/bin/de/matthiasmann/twl/Label.class index 81f320dbbca99c7b098212366beca1e19e14bbdd..5b49a214bbf84a77ccebe02061f7d207d5d5bbfd 100644 GIT binary patch literal 5626 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 U!MjTw%Kovwk>51@bA99g05XjH0ssI2 diff --git a/twl/bin/de/matthiasmann/twl/ListBox$1.class b/twl/bin/de/matthiasmann/twl/ListBox$1.class index e1d0d9143d3f7e2eb6c86e4d19f67f823e95bb22..64da4c6ae96de571f70fdc40f662a1e374f89245 100644 GIT binary patch literal 785 zcmaJsWHyUE^|cW5q{XVAdY$ zqVrT>xj$47j`>4*<|2zZM5AIXs?z=J~L> zlKFKu1R9PnN~9S@uLnmewj9Sf^k!_#*^HJ-cm(DPW%pIWbe)+!jyVxnyZS{^cN*;) zt41oHgl@WKTg9n~|55bvES;R8%^jKHBg{fH8m>96PKAFR0nux;dh{I;(|JiUbr$W3|zx6qt&zNB`UweA;)Z>XL#29vu!vXW2#vDPlJ bI>fP7(W0#2HWsNp?)hCbXu0Y=YJPtJbFs3Z literal 1347 zcmb7EZEw<06n<{0V|3+3rgL*_V+l^7z&+)OuxY3?5!IKpLM6^h<8EW_PqSk8iQ8 z6zh%7P#D{3dWg{gpHjB2A%Vpp78vHo0Hk9HN$R^T++D+V+`8cyUf(oNMW#sUSdkuK z@}R+XEY~)KBQ4i-tl~Pu6roxZCT&o(7>b$7%dunq(ptby zWeJ8*&1hTP?b~GP{84tm_0q^ehtQnyd~>AV@FETU{he4;mrd?Cg0zwIDUqaU1N2;g5{pUl1F^WIKHc>IJyX!h z8YXEAil>R@@+XMo5+{h|J|q5-ObRa3TcZ=?tSJf1kR$_vD6U}E(-We8s`pU6R4chp zh@4`cj@YZM#NccB1Hw{D1oEdy%k-+3K29f;MTC_l%qmHwl$2K{IY{M~0g*X_tXF6T zIj^bw?`DR!HPTFg{XmMv9@DCC_>E<01UW<~m;Z+KQ*4|~NA6@GF49}NsPtDTrCYe| aop*58(j@+cXs0T+A(PAjY+=D8!8t&sa`oOdm3eBZ5Gd2V16n z?f>aRF$Fs9w8L|MRHx^x9B`(cPNRqY_UyTSXOH&JzkdA#z#Z(2LBU!I_whi*vWh|q z7x9pnB5S_ZFq0xIu~619$5_!Y&uC~^VBFBK$Y^R=G#sfKJ}bl+X;ev_?@4(yk1!8e7|zq zd7Zp%vvFXXmT5FN`uI+5&o&PXt7>cuq$6pgwpXz}9BSKUvr;S9$$Ii+dr&tUd-Ywa z_DQGPa!;}dh{poz%6{3}Gi`wz-=3|w~wmrmYyg5$g$cD>+uJ$tqS(^jYD`1?-R$C2vo!A??}(`gBwBtapt7bj*%6wx!)Iuags>1 z$YY8-KrqJ*B{_jHe2x_eTp?+hkiXOb;w@tD5&wxKfiGxHO5GaSUqxnUzlxYV9lro2 z_X`s5p|C^jltY$I^vDc3T$6gb0kYzhTZj`GvdCRqc!y+e@eR~h(uR{xkQOLY@(RXb zfMd;&Cr7*~3Gt38#gV7e7;aIf+w?R>gz|(;DUtgb>W|XkBbQAXE-EcC45#5P?hTz^ zQFr+J;WsGFv=)!Q!`N%2q%^KXk}joliAb7|(qvMRmQzwXuSUAGlrCtIZh9*DJ4KBT zXy}{DfF8tVVt@&|nH*rsZmI*M?WQ)swEY@_`w?Bj5>(pXr@lO(iCw3D7O;kg*hCQx Z+MRS^6h$i)Nj#m>Y4VV}XLaxK*|YcV=fD2=2;f^hRdI^J*mW~a9)>@7 zywl`CkO^P<8O!U0E3H>^Meh4Myzyhz<(*cbBE~TMoWI~1p9gyxGw3!MPOn!=rnOyM zEo?k7OAL$F|7XlH=(btgwoS_{)62WzFe|U)Aqot)2g!;)?{u;Q3Xa&1Pa`IRdOBsdy3~b_J#is=f0&j;8lBPh_5vPu z+w^I9fK8O-FP`D`ikZ_zDcm!vOZHHtdcn~+SiSR zsdu<;OuxmAW5!`=-6OIiPh(k-3}aMJ`SiL9lf+8cq!8bCxYcLPP-OHiZv2iLztAEQ zn2?(#Nux&zeVQb0lfcN?JLIgmv9TV~&YEI;baKLtb!GAZcNc&C2OGV{atHLHJj8OJ m!=PUj0#c*QIKZP%U|+6Nup$|XD9LD&VN^-=3{OzbPy7v5i(FX% diff --git a/twl/bin/de/matthiasmann/twl/ListBox$LImpl.class b/twl/bin/de/matthiasmann/twl/ListBox$LImpl.class index c42292664573d3f27d46e066444de7048fc49995..d72de07d04b1189c6ff4690cc7ee6288bb79ea96 100644 GIT binary patch literal 1634 zcmbtVZBNrs6n<_CEgKakDhlIeY*WTi#_-)CB+d|d!DoG_n)7?0IXp%i3IK@DBMdTiIpTuSmjXWu*Ts& zhX*UgB%iH>IiTCijL`Bj10+O{mUt$@y!-?m)06nt??HQNtfboMJ$xNf_4upy8s z#8xgf1cs`eZ7DEbvt9Y7+ips)ZZ#dsOw>9p%V}7i&F3gN#1aICYi4`T5im^Gm0s1c zd|y&J7srDw&w=| z!lbv6Fxrkq#V@5Jd$mW2>W<}p;>$_PagGmafpJu?>*^r65ZH`WR*8Lexx#45KG~-1 zmj&kkQ%z#tce-9nZrSXD5xKguYkjs1j3Z^>3dVSs)v<118fgRb95NghkTvieS%HO^ z840}*NHJ>3p)Qo(Hg{z!&_PqPHt1%X#w47v*SyPz?P7J3Mu3{!pO`qoe%E!~aHwVn zK}S!_Q+Lua-;-Rw<#imVX?e$HEUL=$_SSkW-uFZ&CyO7$VJAV$2Hu~HAh_Ym*ArLI*&{1=UO1H>?OEp zj3cgBv~tHsxQ7SO`8TrQ<&VE{8?6+22 zK7=^IJUu_5&)Tui8Ww39`Gpz^SUTe~SFv&h#a>*-B(2lLk)VHv8E3QZ|cKt)^-gcQkuL{Tre+ayct%Gn^>0bUCU zT8RrDfEPd@5C{a1ftX2L5<(L7#=Gm8{dV@uvEToG`wqY=ZkjLz<{GNplu@+p$*?K4 zE=Mo?vg?J>oz}~OTWvn`O-u+lJMy_K`%-U}AJ%qMJu;CJSRJ;x*=ndR;y%v`m2KLk z7^$=hOr!eAnofye9kp{!+YchzF1uEn9J%AQ`XMr*+ zZc`;2t#(jX_dIU59XE8Dy&#a;@V2y!+5v^0xIKS#-L^jTtnp4;@1yLyjGALtHQBI2 ziiV0hnv6YuotitWDFbJa(*OFIe^KoTZ|0O-e5iDjKACWOWbttpl z%$UNw8Jvm9XK7~8oJ=!{JU2-GOyn;ICX?qzkqd+5uSEWKU^3Y@Ca=-RN~KwiU0fLC zeuruN=u|Y9utHA*m+805 W;}voQs1okPB(Bkz#2Rj-GJgPgb|e!3 diff --git a/twl/bin/de/matthiasmann/twl/ListBox$ListBoxLabel.class b/twl/bin/de/matthiasmann/twl/ListBox$ListBoxLabel.class index f4661bba41ca95e24b2713a40c6c3949f2e4c7ac..f19b1622cb4a848f0d936fd9ab516aaa664deb2c 100644 GIT binary patch literal 4549 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 T{GD2f+JBJ4OYu+q8@2xfC(=OR diff --git a/twl/bin/de/matthiasmann/twl/ListBox.class b/twl/bin/de/matthiasmann/twl/ListBox.class index 2060ebcbfc3452922acd126ae91ce60b9d53b1bd..b0fc9c7bdae2e1f3c0c77f6e0acaff78a9602625 100644 GIT binary patch literal 18232 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 LYy&y%c?JIuUj|G& diff --git a/twl/bin/de/matthiasmann/twl/ListBoxDisplay.class b/twl/bin/de/matthiasmann/twl/ListBoxDisplay.class index 7f46df1a99f6056682e7a6f94e401760fc22f20f..8f55776482330673c2a074228664835e54b652da 100644 GIT binary patch delta 269 zcmX@edXQD%)W2Q(7#J9g7-ZQQB-j}wCwhEVXJ?RRWZ-j7%*jbgOwJBUO)SpOV`Sj* z%*#tHa?VLCE>10GWQf$5ctLcs6r<4OG{!terHL0s)O|9GOPum6Tr!IbauO>U83eKt z%M$f-67$ma{gbj%lS|kcWEdH=fJ!IVFp4oVGDriN^-x`Gj0}tnOhBhFFmSRkGB7i+ zFfagVRt7dO%?{;rK>3^uTwrl-D9yvb3+D4N@B_^e0Gh(YAOh4cip&R!iGgLr8H9l} P7f_`j8-o;skb@)ulQ}I( delta 246 zcmYj~Jqp555QJyd7fd=czrl;_Gw00~nzzkcw{9s|#cZ=0+anFpz3JoO>I8b-0*sjj-&`q6gX0n9f#V zs+7NX0~v;XD9|DdICCOJWnI7_I6piQO0En7Pp-BLUxquS69{SU1PpG{pySslkd4(y rIG1o9h1f49T0%Ky6BYhbVPz`xNYp0v)bYeL!92O1> zxB3Ha+-M0_x$p!0D9iggF^aZDxk$g^o_o%Hr|;{0`~KxCfTNg*paqFAnsGor4$8+N zxtEOKFpfkRaxBcV;}M*|Nx64QMo-JfnF!8eP{TP5=LyQZXA`=Xo{C1ctmS1!&AchZ=*cqf{177T0Ja80?cZK_;*i4d0Qiwr&Z#{_*ve{Vlgqtc9CY>u&e3nrHpacDf8Kserf0SAfRL;G%uR2kkhdhVT%Iy zV-U95TZFCLx+&Y_rZyd$jq%unzW#wg1J~pDm9^z3QXJW`iXnd{Yfu=;7pA6slh-oV6;FIdL;MqzH8k=NT7&ixP3juL zzY2&-5qgXUdIFuEqLZHa;_X$6x_B3MV-E|c^2+@sR3~Sta8)rP)i?bq^qf!l0x^2Y zLa#Ou;%i+Kn&M*QiDHsde~UV-g7|l&1_^i==E>3v3mV6^kF~8`x)H` frA4_&OgX@-5F5RN$0*O5`LC%PO-N%5Bk1@6^RB5v literal 1581 zcmb7EZBr6a6n-wCE4aP^87LVU880Qhn3b4CiZ2t86Nr;voJFp>wd^{}LgQcYH~6I{ zb*2yffPPfdxeHm;n$w5fJ$vst&-0vf&$-{efB6dF0ahir7$$2xT~{n?UsW1)Mc32T z2Q6LTdNU?o>&8LzK!S%M>g2biDw?sER}PJ)#o(@5IzuGy#6J>o2x_A-fz&^adK zDndR)Fd^X@!`Q`Tk#QYSh7qbzR#)jXR6{RWibcw&;t5B6-F_J_CJ~cxlOg0pBeIck z3sVfiQaM}BZLela+ppJi#qC0_xKU!5b!0KQUgIV=)7^A2Tih#tnDHTwq=du;ebgN$ zBZWJZX5;TP=bWo~DgTye4fkGCWe7WFAkKp!Q02RZ$=~q0(c;UdQKw~bM)zf;5n|}y zSM-|3b1kk@A5S=ov3E0xEfM%grU82B!(%*^@Px>ns%{6!n1fKDHVQ_w(WWRGoBLc0 z0rl_}y?KjR#~t;zNvZv)w8Tx*92%P|7reU@vh+Gs$ zgV>>2CvO++1(T^Wgp;2!bc*p$xZyd)?O$Aj0+W$o7C?XnZJyC~+&NDWcQH+<9??R7 zp`Qc030QF5`x8Ax8H5Ra>=Jb9vvYKptsx-rW{x1IPBD9g9`~{5m{M}vW$Gnou!-M5 n1Lu+hn8!2PU$DK|2%$YE(}fqv($`NG4KiL*)fSP%3c^1CPCIv1 diff --git a/twl/bin/de/matthiasmann/twl/Menu$SubMenuBtn.class b/twl/bin/de/matthiasmann/twl/Menu$SubMenuBtn.class index 531e3bd424b4c23c1ab6d00fa831bbad5b01849e..4ae75fb6b22625c6abd4905bc2435a0ed7438b94 100644 GIT binary patch delta 515 zcmYL_&rVZ86vlsNZehx0u-6MpD^#l#3sbbf#)T_&<-(07y1pchf70BAwZ@g`BQ$pf zMiO1P>%ydkgar@a)A$6&GsWQM%=gX7IlpgaR34Rge*HN;19sV+!%~kab3LdVp)_JG zH)C$GW?8qiEStj*qvD5b*W+h{y(is#@bFzOxW{?kefy}F_50nvus-}$D}GD0I5M@C z;}R7|f_KEsI~)s+Hd~fEj=OX$+rrxLb5%#?XDvHIE4WHz+szAvy-?|!?0wehW%%UV-)uhf_Hyyn{z#J5i{errPH>k~@eA2aiFIH7zO7Fq@bVLPBmdfB-cblRRjIC}66L^Ct9gQb=RUg4p6hp;=L6q&J3a4Zf0$VSVOe4k(nJI+5^<~&oa&ioC?4!w>IZ8Q z24WheB^F?sjIt8z*a%uey?ix9Nxx4ACzOtva8Nc-3Z`ORwq4)tdiN3)RD&mR8(dQ= zNsy<$@7*8w+3j*qX^6G8J)cMU7Z%#8M+xk4~_C^`~dDH&6pMHA4yc(=w9~ W*kJ;Jj6#ip9S&AUgK-2+>;vB%{74A^ diff --git a/twl/bin/de/matthiasmann/twl/Menu.class b/twl/bin/de/matthiasmann/twl/Menu.class index d9794b6dff140f90b5df3d306d3c703ea81af085..097990895c884167e36753016fc9d6d83809c1b0 100644 GIT binary patch literal 9648 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 A%K!iX diff --git a/twl/bin/de/matthiasmann/twl/MenuAction.class b/twl/bin/de/matthiasmann/twl/MenuAction.class index 635fb910d2d8fed86eaa3e3d319934d2c6099e98..5049b3b6b6ffc561f2295b8e5e2dc57d811ca952 100644 GIT binary patch literal 1563 zcmZ`(T~8B16g|^!yL7u0L_V}46h-N7Ddj^{D1v~JkQ5SyV0@gmld`&_;oV#h!d*#rz&%CdFj3}{#yLcySq z%LZ1kYG4hIbgb)m%n+%R8OBTR_ysSxT-FM&+fwqfD~b&9Ek`=uHbXRPoiS+pjjCW6 zDLGOcx9ermJXJu3u~MVL-80^F)IRvAdFM`xAycY~LY;fGcPpOL zkQ8Pr8x~$gwE9m@yrv^-#X(q2@_Hwio|M3YAz2gNK6l+Rue@iN%vxb21Z(xfMk`Ih zJ)u&4<5Y=(;dyqTnjDRsL4A7Zin@^A zydv21B!k|y%tI+fbKm8ymS`!S4H}wqCnXb`C{h|GwlJaNnTc(r8D<7W@uz`db`T&) zgCQM;@aw=Z5i&7qlI90@E+8%{Sc)dVZ`J8Jsb*LS_Y2zDH%7s%DUu|wR(sPnP*Bin zhEX-0ZlfixoiImtHAxqm#zl3AtT@@!FnW*DZjDw(Ys|g^`$9$pH|TB93S{ZRTNoqD z^g+0ZaoQ<@33@An141gSp$P2UH$-|YDMaZcM=Xm-Am3q{^w9y6ilov~Nu)3taK0jp z@=V&fD@5(Z5YlDD=m%ubk4mMN@!?(4B&KkS$cUmtA0hiT(gA&eR$ud1L_QP9*Q^Qy ztcU8o)7868Xr(v)pH{zO8&Ng+{4jgQlIQdYN9({AyH_(wER zNHp=$2Y-_>-q~GBW41nYXQny#+;i^7uRq^@0N6lTLxdsS5XBaE-4mO4TU^Sb`@tz5 z2-(}NyLMY@h%sb_VO}_*C8Wy`sn-~0DsTBIFFIT{i?4c8@|q(`4Dl^n+HRR4nlq~m zvE6n<=!ha=K*K1*WW|=^u-B@I&anz%n69+z+^O=8t=_?(F_PG2$X14l@dZ=D`COO~ zvpNQ%HZX!XgE@#fayzzcmcpZy)LA8Uj$t+=%JU?7%hP>XfPj-B(G>13cbpopzhjuo znPF)N)*XZ;>m9*eq5AOJZV&^*v)oYU2VC-|=#=)&P>9b^(vV?T9#*}el}jq+jw^Mf zv8Y_%WLO%WIfyEm)ln=_t7|>iZBsDA9RthAF-(vzU%>GR4GY71I9nicpg2JV&8iLy zD;n|)sWA0BUQPoAB&m$N(YUC#jw04Ito>(zgUT7S4k?DDYL(OOiVFrB>{g3mF|@3z zQWuqH7;(g@a2VJ={b(5$LSuZbG^683F3rOMe;-V@e$?)D>SE7U^FOJm{c&DZ6UAWc zODQ_L4)1maErAwv35!(eC~Y$dRdY?ZINfQj=sQNQyL2)-N33(`pXm~TL0_FtAcq)C zjML5VL72cKy%a%`zKURvkP53S0xSO&Q@P7ho1xQVPqP$2}-B9I_=F+tY4O+TRF{()BQ zgEAT-eTFIQrsd(i`cXxb6wq?5T_>*r(wqkZ4lRynCHKM zdHyT-(=aJPHcCmr4qUQwh+{}%k{Htqj7l7hN~E;f@CGnH5%HeE2t@}FYS*kZwFpSj fO_R*P3^9%jX33lM$@7>XG)^&#ygoLTPyzk{03tY^ delta 477 zcmYLGOHKko5PjV8@AR?^ShGUxjW%_UqT<6MzaT7C1v%T^jK=m!`>(Bb-zv zE?SFKzL8fSJgTm_+2%o3`*jNS1MkrDPiuu826OGG;f27^FVTm9fPn!C3xf>VKe_l< zv~J2Q`HFTv+QELa=`}5s)wz+rV6e74|7`Wt zM~Vs?G!tgqx(z~{wuK z`$@A+Or1F9xLt&!P6x4POgQ%t9ZYrTCo*P!S&N8*S>#A&AWt4g0S;M{M&M$eP?%!6 Lj9vyxSOC5Ol@dvK diff --git a/twl/bin/de/matthiasmann/twl/MenuCheckbox.class b/twl/bin/de/matthiasmann/twl/MenuCheckbox.class index aca969c568e87180faedd5fa7037b805dadb971c..afd961951829930e6de134057a7830ffe49beb56 100644 GIT binary patch literal 1957 zcma)7ZF3V<7(F*_-nMHgDHIfy7Kdrw$+daFblqh0R@OvqAmn zKhhaZXJp17;E!@VcXyj)hV4jZviG?+=Q+>Yxto9f{p)W4xADZndE6>u37f{cT|mj= z=1v}WE#z=7kB`m%6AJ}wS#a=a0S$9<-@*fIo0Erm?BwxCAUp7T$`dHJda6EV6|N zN=i{t9a;{etY2dhDD+hrl`r6wD{sn5zv0BM;CsDF+-7Mwa!waiv-rGRI|{-pC2yu)LPKwvZ7I}zthX351g5zlOAqIiKN-i@Z` z4^>loUPpFc2(0k>O)u!TBdyKLh1y$?z1|ddX|`h%RON_5SmG-a;C(Sdq?MyhUGllY z-5su!8?w#`#P2jRxWuQ$71+Q$YPd|xjzM@E?{H@buJCCH_J}lC%Mdu#KarWTEMkto z)X8!SMQlb)D=|7@GLcMLCW#ApH{tw-7~{F%R8KJHY^0FhMHU~?`Cdf28p9`~3wRIj zlZ+G*eTFtKM?zoc8rS>>GQSZN*K8UCY^Bz_HmUb}R%3EocIe!W3U*5K8`Uwg)51#x zf&V>OY%|A)%wcCH&*e#;%SrKBEaDp5kfGlPSWoi&l{>>zd4=3Fwl{xJdxgR?XN=+r ztTEeDE7@bbRb%kQG0xSdwX85S_`WIf#$QH@#kX+-2T>AEOgc%Tg6sG&s=Y!?nMoAc bstPARNBbsuGMwQC*AgvFTK$$?u}@CmF@R)=%h( zk+(I%rc8g^ekMC{?e#B8d?EC^nZU(PB;8o5y#MHRDO_MrpL7Ljx`Er1QSDIgDrKk{ z_>A?{_0@EFOIs#NxT5l07C3lw(9_P=S5Q%AU0tiR4A|@%UFfvZ$6>GM%l%;-hiPA{ zJa1U|5FeSS;HpxyXkruB3~UKp(J@U$EUEo|99X!3>#EvsEA}KPg%)s=b?9W5R;l>H z!k5?w1WgCMJ0vXkPcQBBgKt@(PtTFpD zoUv4@#s_zE+;gV!d4_M-xeBg%`z6djxXHod)8q34!s&q@Wbt@V3h?Dq-XC~eC&4>uFT zcJbql^$|Xq7%vh8>@fB&HQqrHds8}>$2ylY^Lc(*V;XWicL|p>oxkx-@z}3WdTcYl zpC46Uq4L-sfqAKp;MmpTjS+5D8U3pf_No&zD`W<~X7q=2-oPrFDB~zmVW+HP6*h7A k67x38`3+T=#NWpujpp!xJUOy7xE8r9aaF%f{@Vop2Yc((djJ3c diff --git a/twl/bin/de/matthiasmann/twl/MenuElement$MenuBtn.class b/twl/bin/de/matthiasmann/twl/MenuElement$MenuBtn.class index ccb035d8d9878be9ee518b068394efbb4fa6f217..d9f8ceaac2f9f31b0da5079e18e3c4db17102054 100644 GIT binary patch literal 1523 zcmai!`%e==5XZk)S`Nxl-Y5w2s?Zjth;MlaR6s~YBS;LtUE8G`Y46D0w#uJnqOCE? z4{Dgk+6dQ*8FWulrp@|}6!twyT?Iy4Xl4zNhE)XhP_w6Mb5-yOd`Y zOW{ObDj2NgN&-3uW|Gni@hSg?m9vv#*ZhULBk?q8XjUv!!lMhJOb%7R-*}yC05W|&2up)rA3t+`mYFa!;ylj zs$ifRpzKyu4?UHtl<@TQ=s7|kdzG~Avr8rWAE(i9mP~HKR7vJ-lGzdRWXT)aX6f6~ zLT*}CMjHDu%cKiX`8q@4qXK5A^wB4YJ(1*Zq>YZBb?tJKE%#)sO4xNhOXaMDZAjZN z(*#o)CSFmr3WU2K-lCEQ=yRubfYRE^9YB8wAI&?^Nn;ny=Ha0S2t>x;LWvaNi4;)x znpQmM=5^H3SU@9+XvRBSpqWNzdFLW7(c8-`L@3q#xocaCd=Pv+LSn zwBaL5J4c5)yX`$A#n7724Y8WfC55%FC9{GY5@t%vZfKUS&d#Mb8W~ zsXCdwPEa+|QwkY6l48rW#1oM-3u4hSb9Ak=j&h7C8GTmCQd@~iFT@c*4@1jt)nqV? zoFXz_pcyPH6a~pJcyc~vS0yRJF^Q`TO}ZU7R1?#s_HU~8U*our8w@^M$U~z$xT#vu zk6RqKafhKTBjmbiW~IIxGYy(tqV5ca%H&xZ=*Xkwj!4O znd%5{tSTWPin5 znowiFz?Thrgt4q<+k(c~>pX56B&rboJz##ndO7rkpgp}DmEc)A&A~-Kpd~#113Y{{ znBfalbx-lYYl?bFQLoTNCr+`-(v5Spy47?$Xe&o(2j~rdC&VK9j-$OHw6|!+ zyAoP=ncqQExWgDBJhvLF|8UEYm%`%*2p-3MPx*Zy+>fW?GK4Yi;LgyhviDRc?JHe= zA_<=>pge~XJ-Cc3C5iOOaiE@2j4I1;SfyRWL=jWY_GS@xo$YK93rDisi2?XRjrdB~ d`xwHviUJQid@d}KmkUdHK&xsTqmf<){sL1jSvLRx diff --git a/twl/bin/de/matthiasmann/twl/MenuElement.class b/twl/bin/de/matthiasmann/twl/MenuElement.class index 288024db88422b05008a1ba4a62b969f914964e8..64a9e958465c0c8142582a4f4732073fb82c9f2e 100644 GIT binary patch literal 3916 zcma)8|8G-O96hh=)~-CZwhS1ogAFEZ-JpQ-O}+>Wkio`~jsa7FxAko+bg#92+ceQ= zqR~WSqA}5!XiPN5UyMqWnP}pVnD|E-&*$E^x3+t8`{myIUhh5U+;czYzW(#?AAbQj zg4bi%39A`9Fe%Mc6uV;VbMjzE(G^9vJWtE>OcZ;ipN(R_^!W%L#?XpK(iEhblg5#z zD9yAqC24XoyoPcFl?dDj<_$zfY-j$0>liSH9LFvX7OYCet{4bA)|_o1IsDLCurdY9 znaO0`a^9IaWuVcWwdKc%?O2lqJ7>U{Fwo)_iv>4d8Z0`l?YOmTM<*ZJQ!dvwl%|Nj zN5f9qmQ%^xC>Kk1*?nVhmMnI5zEmofWoolk$j>-)3TyXp&d$tPt~;BzDsz_OWZcC< z=KS&m&TcxLck=F8GW7P1Q~zKwM~SV&dB?s!KR0QY$3&~BDo$C2ajTq{XYXa0xRli$ z$RZY9Dsab+sM^}Q+7cm*%-HUAxeC5*e;m{BsPmJ^YS3SKGeH$Q*5zt?g5YD{Nv}z(ew2x#H6aKB^P?vSrLp_TMZ^PRbj@b%C_a&GUs+aM~Mc`1=Gls z5zDb=?DDChU?z>glG|bBaeS4%-rTAp=E>N8sK*X&(8ef|;yo3pMp z^=QN@c^NqoP_-KX5^l5PMO;^Js%*~{7womRl$_3&>wYw_J%D{;LT!vkFm4s*neC`! zFM7kE`9ni8-xxA*G61bAvtD_wek1E!SVsD2ysRA#K4I_pszAI8REbzLkP56n|J2Q# zJ#Ebwmct#(7U#=T_T{`>V)3dfJSaD`i9V!FbYqW+UD$0Ri@PSe^k~e)Ui6sQk6shc zV4s05b*l%}jCcJC-hzp17?$RSiJQ9NV-~j~STu1QhYaiv3SE^rN?rMYXj={JUuRK| z0H}{r&1JiMY48ko1|ewY!rlBN?&L?c2_dn9qmUS(ditY!+M#-yp?W&Qek%;Ik!?Sp zPIH~XK9>F+Mmqcip~q_O0NWNcusw`02GGpU_W?ecdNvLs!zV#H z2^v=5k^};t^WcsW{+NQ?rk8n;1W+4d36uJW2cBUsG8@ysq2U(}LewO?mzO82lr{Rw zo+Xvu<2_Q!PTFMgh*FhKh6nnW2)BZz<()wz&LV~vkir1V4+tibcjN)Qs}icgi1m1j|_#L@PwYk^PVZyj)s1$ zb96LN=qXmqYDYt7(j6?DbTXRiSVHqEN3#?#MxnPTbbJk=Qn6a-8IHu!vpfOKRV_4D z@90FJ&~rE+AT*{Njir;Df*rj_q4z2D0fky?2))2aX`zE0iO`F<6d=^B7itFzy^I$F zgqljInNDsF7FwZDmqO<$bYTsll65Wg3P+)En8k9Hr)s+GnTMR~)cEO}Av zT#IsG3CViScggu4Ip0SLA5`tP)938OORCg?PQ@OoX6L2uu|MEe`O56Sou;`q3VE#b2ze6~a_Tbw*MeS2@wT(LK<*)}P*CA8I(eL}KNnbFUx?2P+l z@mf1uX<(Ll(%E>#C%IIUnqsq}NOdk@Ydy*5B>4gfe5pv%dX-O-^mmkGP9=fFWLo#o zF7F%@ium?=#M|nLzasJ1B>rXt#CLq+JN3kO|Bra!z!J9C6MswM?@0Xp28bofddEGr z#1nYgBQ9`?)J{7+ZhFdaNWX;k9}w+l3AL}#>!AEZ`k!gyV{FH-N`n57wEL#F;}yJ0 gbYkM3x}U{rMlva}yw7oncTp$%7-x0xgP#Ka1NrIfasU7T literal 3530 zcma)8?@wD*7=BM_*RH#Rwy=$j;x>kZ7PjuE+l2jK>{lnSIT&;3<}U34%G%r7-j1j- z(U@pVG$tD3pWqiiXd*Sy#E&!ak1{^*IfqMIE{+fMo_jg(`#kS+pXapy{QJjWM0AFn zFa-o1&dW^6cHNbNT`Sp+lX2IInQ7_NZx&@qI&PSPf?})o3p-P^o#o8E#Z{Se1qB_u zBn2g=Hvcv2RtwJZn4plmf?7dg>DY@!nHMA$1a-RQa?veRCd-bC#;vuwEowU|xtgE> z-F8vhPAzl4TCT{d`{CpY2*}xbrBbfC*t%=H;1t{|s2NVpgVAI;FQe2!35z8)_RH&igfcC5Z@yqQD!l=ok%RqNPGrwn`=Fl27L*E=KjOPgu`z zxtP}jL@>%6zfzuW*rG7c7Xf|sFhXJ6VY9juw7XEdx$)ldX7J{t*y=qR99~H6V73U) zc7|s=E9ijF7z+zbG74O;b)0#&nXFZOGceC_(V{5r5ftY++KO6Uh^g5L=_ph)F4xpd zVHUsO|t49<=lM)>l4Ns3BakD(JY;%r8S5 zyT-I-CoQsQZ9=RXa@yYn<_$Lm(;Tkccaid8 z$_YB;cTDL@i&AtDxNCxvzAp1DWaZ_OT`%e=!?d&IdNn6+75I>hHGL19WMe?etOIvV z7VTP1*1}X2G~~yksc?|j*IftEFstBE#IFP2K_Lq8S&3DE&lGjVd9ALp?; zBTBQP-9NV}I^#?9BykbDrdiSM%jrJYCY?By>}$~JEs8z>fmslp1JQ@u5M`%oqUW$; zMbFb4K146HEBe@%=p}m7hv)^R=!JA*%wN$bAo>(U-v`lW+YlW`lr+)HSOtPX809Ji z!B-GX7)%MfaS)QQ+x5SZhd=4YV}#Z4VKty7Wo zY?q|BXbK3^s#0)@aUdJWig9@Vc95eDy4Q|b0;U7Z3Uc;A)4cs2W)LOuvn{{T@VmIj|{|f-0@kJ&=7kSM6$m@kJ>>#1;}R32&kVy`zkcp7a>2jtwQ_3V7jF!0)yLe*xex0sPetfS)M682Cv$@ZkRekDh4I z({|vm0sIYszuf^a62dA1cuzAhA!5%Aa1mSBJH60&=p}WI@U=nqPZSw}h3rju9hC0? y|2xte=l9tdNJrOBBpE)v!WP)S4f^`5fTg8=s7C*;diReE7>5SR{ diff --git a/twl/bin/de/matthiasmann/twl/MenuManager$1.class b/twl/bin/de/matthiasmann/twl/MenuManager$1.class index e740165ba6fb0804e07cd014fe5e629803907372..59c457ced8eac912ecf8c3268541aa9ed2cd0c28 100644 GIT binary patch delta 382 zcmYk2%SyvQ6o&uPG)*#2CE94c+g2BCT(lH#;KGF~K~P*&aU*Fv6iY~pY2Eq^ArGLh zAb0^6K7jAwtB5C|PzUCmf6mN&=bw4jpY+Q2@8=hQCMp)PSQgN+B2dJtfi(l`1~#JG zZuHY|K#-?Fpzcq6FAP;k*gA{sa@-&zN6@OZRvc2ZXkb&qLP^4anW%z98HFgnT_xCk z@4>74UeK$bxBIFyBFs-qm*XJt+P;d9siG4~RpvX7S9jf>8Xeu#S_IMY2cfzc497#1 z*sji|av8L5(*Q- uKIl5#G~HLwJG3c4r04@~eE1JyP9Pc_MrE*oMb26N&n4Kb5^Gt`JpKSXKQn0n literal 672 zcmah`+e*Vg5Ix&e)5fT=-mh&j54D0(!3!w9h=S0ns3`chZI(7A-IQGPy96)bgCF2W ziLcfN+B}Y%9*^2wN+*8wovM&Yl}p|bp}nOe z&0w|o19yBb8_q?oCF-$`VTRlEpl^Sul*6(2+5qVcbL(7K2t&1>+S@iu0sh6X8u)Pp%Twxqr(;Pvt!@twb`c4jO82 zkw`5}q=8w?>zHH657^4Yf|6s@{U8#TK_}@@avdaLU7UK#Agj;b4do!IK9Q>2lZ~o~ zn}MrV$}<%HH|5TA8zMfqSNoc0Qi|}{=TRgg6v!Ek&JdVoDTC;zQ*^R02pyr@KIIBA z%IhyM%WoKa`l*>v*w2gV-a(FXlX?_7i7AQ<)3AChyA;)1ru+=^6*GT1_GtEgA4jIg Yp<$7_Qdq(=#WZ=kLYmc#E+1XL0kH9vq5uE@ diff --git a/twl/bin/de/matthiasmann/twl/MenuManager$2.class b/twl/bin/de/matthiasmann/twl/MenuManager$2.class index ecb1d2f4b15824d1b82f4030c6cf16d24e06cd0e..14f76119f830b1996d299d5217bdeb50f019bc23 100644 GIT binary patch delta 382 zcmYk2%SyvQ6o&uPHl1`#C7Nixn?@IDU9=Q&;RP421VIp~;zrVTC@nRXrgiHxgg$`2 zg5U*Q_yE3xuOgm=LLHcM{y8)Aoqy(8d(zzR-_I`qHMlusuq>frMWTRJfi;13fsN?4 z75!9g5RB6xP=k}6ABHLD)Ah2m52giVb9xKa05muDn_6TOz zfAA|kKWJCZ8(q~L66U9+i%}5xjh-4GldBONkNNiFRj1Wf!-Jbrogn-7{Zaq2bEgJy z*sjK=vLMrpoAE1BJadp-onf`h>$oDzJ8z)!2U0J|8G|F=;<%4IMWSXSIq$kXx-zB(!2S31% z600?!h>$~5U9YQNy?Xur@%jd!f`W+@L%|bnkH>LG@~Fp^a^rj7tqGOXxZ-UQ7Aq#w z3{IEdao6Xn?Ory!q7|DMWyt@aSBX-*=?jKY;);qpL|q-ieL%&BQpxz3p;#JPz1d($ zp9G%Bf??c-iHrpUIU89x3`R*8AMi=@{SVf|ZAz8bW+-{7It`2b97kqjHdh88O% z(g+h}VGau><{8$8Y-M9n%dz@FKk3(HPlS|Q2T9lxXHpyF{IYjjJ4mWeRm%?|soFIW zcLGnZw8pUhzbQA;Ym4~cR_|+{D<#4cpGT31uujexbVk4&M;k;xouZS4Md%pa_9)kg zRo;4nU4FsD!&l9u#=c&3_dfEJ+tj1cDNIvjn1M53*`=u8GUZ3u&zSwoaY(a|esN?5 Y90r!CD}`mOP)w7jtE5@a_~xVQC&w(6z5oCK diff --git a/twl/bin/de/matthiasmann/twl/MenuManager.class b/twl/bin/de/matthiasmann/twl/MenuManager.class index 40d6449740ceeb3a01055fef27b7c9f41c24b00f..331ea24ea9b5e80016deb6490b296e57244b2518 100644 GIT binary patch literal 6028 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 literal 5864 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 diff --git a/twl/bin/de/matthiasmann/twl/MenuSpacer.class b/twl/bin/de/matthiasmann/twl/MenuSpacer.class index 1fbaba1f754266f41c5a3f368cf0fda86f81f8fe..8caa3aff73f6cc3150221d76c5e6750003ad0acc 100644 GIT binary patch delta 302 zcmXYryGjE=7=^#tYg{+0iPxxWTu6~D1kqNp+1^sI44NX1iV-Y*hGjcnz*ZXr3O;~s z-bXw;k%9l8bLL!T?$7;`pWn}K;Fv5Tq!Y3e;m~QY8xgPOtYA)@w#WhuTKl z&u5r-`@F0fSh7c~d%O_PBoXphVO30R9^nc@>kH>i5QWbqH_1&JYf@YPYO4XkHc$k&iks4Hmx3E1Xch%iMZ51al)QjDx4N;Q z;sc1gK7lVHo}}H(x%2a#8ScVbSi$$-`xk%{L=Fr=J5QvZKZ$2MP=ftcs*VP?X_k&B z0{d(<9!<^#W~X~0Q2o1`)Po7vhXs3f`fNG~^DAjJJp^zy>SP}8lk4=sgJ9Fg7Pj*r z8EAo#Wr8UGl?GR;*{9AcGMpmfoXMjAgD<)=I?Rr#Lbc*K^lRDn7>hP=hzg^>9H6c- zQ>bE{l>$y^si@%xg3CE-!?;)5ctfN2!lHq~s9J9Acc9TF7nhFll3F>E#}0POEg_oN QBdXz|g*IV+SZQ|f54=k$r~m)} diff --git a/twl/bin/de/matthiasmann/twl/MouseSensitiveRectangle.class b/twl/bin/de/matthiasmann/twl/MouseSensitiveRectangle.class index 6e58b054605be3118971ea4fc8e186b1f3005bb1..db875f450f20b16a7621a258d7a29de367dbbab7 100644 GIT binary patch delta 165 zcmeyy^o>dT)W2Q(7#J9g7=*YOm>Kxl83foF1Q{9FY%=pQOY9gKm^C!R7#Ucc^HWkM zR?g$#VPIikWn|Ev=qNIAzxYHu>39}J1}30R5MW{es$^gVl59YpF_2~i(yUtB85lQ$ rrP+Zb7f=}kgE~;51_K9>#RE~qzzLLLU}0q728u8M#dv`v69XRrzgZHi delta 167 zcmeyy^o@!4)W2Q(7#J9g7=+jvm?oanV`FDvVPue)cu_` zLoG tYy?Yl0ZA^PG6n{91{MYl25umW2cif_^D=-e=VRapiZU_?07)hWK>&|B6RH3J diff --git a/twl/bin/de/matthiasmann/twl/ParameterList.class b/twl/bin/de/matthiasmann/twl/ParameterList.class index 202fe4262836363dcd29b9c9b2a5b5d90f01c048..522146bc0e7b738bc31f6e485ccb50e54bd7c0ad 100644 GIT binary patch delta 152 zcmbQkK8Ic4)W2Q(7#J9g7!=qUl|Pzywsxz`)1C$iU3N!oVTn*Y{7#N=+_d zV`N}tU;-*;VBlk6WMF1sVPKd%lSMn8mw}&w0Vu-DAONKWp|lW`76$4R0qSF75Cy6e aV-N?6i!n&R#U;VwQgFUBkR=1wAqxPw5D|C) delta 177 zcmZ3@wVF%d)W2Q(7#J9g7!=qUm>3xpCL1t`OwMEB5o2dyVPp`Tn*Y{7# zN=+`=DB#Y*!^X(K$iNKL#lXNfc_E8-IzNK|14ubPgCLX^g3`iJS_Ddq0(FW3^)WGs d1Jz3~NP@*B7^L9h(qM5JIA0dXk^}3I2LPa=5~%i5WM(pRLy`fK(9i%Wg)oW4R!bj2jD&;)5)w&x`e<)vF3E+-Oqd5L z)Rt;}+n2Rf)B31dq1LEvEdh#c)z)CEuH|p_hyT^(AN`{)>$lInGr23=;H)+KJnlJr zfBV~yd*Au*tFHsN6~Bw&7ED*;y*Mc%A3-6CTVn{JDC?4lQ!&ioUO9ML#F-fG!zW^V zaKDHLM4T1zpomY3_>_o;M8ua<7Vmvw+D}#r_9cbnVsm|U&?09@r*^y z;q7+TF78lR*LFP!TMjCOdU9g3cF@jR`$|*eR(?#BC?p1RDKm4>%-gbdH$!x#ps>ML z>qu_8G=0dy6tu!yTiK?o$fdM_v*y-XV6J~%RpS0|W$)Z9`XO3$q zY!`-URw16!I?CJAW}a&XX`JC2%9RS%uDm&+unc^X9Y~E65~&)=TgR+C(J)S8oRDZf z?r3!P65ezDE-=G6QeMU<&1^bj^`6o|TKp4LKkbrW2dz`Y+w4o3b4sDkqtf-X#x7|0 z2C`0V)w^}1AM5N=SUDvGEUm)pBVrU{qq$N(W%b!oEp=L$nb6Gim&S0~ApMl$PM+DCqIFIKI`~dw1UO+!{!oV7d1 zD~lr-V;AykgC4>ZZuC3Rlgk!Owk3Ab8~mO-je<$*_mE}84(qMP(PG}tPIO7(gqffE zK=U#^NQ#gVW|<$f3%2fuvgp+fmUXz%KV3aOX*=bvz1KQDo-_05zFexr_E~#O#y&gG zem-eus4r%wkCzI?QTq&YsamS1T%eo}WXXYBSt}N^Xvoy%H)XTDbw{AXE6T^qRTd#? zN2@-oQ@}*Eh-)Mz3XA1NsD=85%w?+Ix4;;6Tsb-dzgomv1g* zox+mtCnT>jCu32&Q0Xvsf#GJCB-FI)PmI^N>AY$aiy8i*d*L-ferz_9^}{o*dlF0LLzkSBrGeTzmaUe zfXGWc6~uPR7DOofY3qZiMmJVqfL8ZlEe45W2p{0n21hG)@QnOgH7do^KrPg}JRFGN zLlNxchC&Z^xqv!3D(+P!UqR$WP6FCySZ|JK-G+0()veHrKJJJ&-phfxC6~v1FYl%! z&gC66B~*ly&7?uxbxg6DflL#~$z^~@ zqy@-cM&epVqD$#4`T`lkKKJq>BTRtkQXmfy$k}CpNU8}CzF=HkkGkx3NL=SpJ=ng0 z4av|-l~lk+h6uQ^1qLPYJHCeBH@O-wZ4VMOr=3_ONS(rZ7I6;s{3jMuKEY%M&N1=N zBaY{p!Y_EZt8;CMg&-93o5~Nk%Fpm>kPkLH%3G5hSI%Qq^ChfyrVVR3okyd1eT~ga zw0W83a|N65nzp&#QCG>o%{Yid8vkY-<}9E+C5}zplnq?IONzfL$`?X{YEDH`Xk<{CWa zT7As@i{}2ljJfnubF1Xb&oy_Rs3pMt!sSh~s0z(-vhiiye2&@5=_dX+&!g>Wwhm6W zgyxvT!C5qMk(@<6hxX93s3todp}Ei^54wq{2%;*An2O;hWuQ&fAjyjDRtfAUGU%(CWZt_%7uHzeU?`$fEGNyAsI9+lqrhNE&7j#u<-qdsvy zpkaGneQL8uN1y^L;KB;Y_p^)TFh{AlCejjJK&=dyu~o5kMaW6#Vx{ZkRND|yw_~Nc z6OF1%TX9~nO|BJjIfTHatWAKn}m)7^8uw*xrBMz2<)%iLZhH literal 4691 zcmai2TXVWP(I!tw@kkLP8=52@Qk-YB`xXBnKul>0G#J zue55b*1K(5m3nDwX{^0Kf>c}Ug=%Z{^IiRX@x>Q?(HHw!|FzG_%we3+hdFzneb!#< zU;n!7oxJtmE3X0AjJLxmQ&<(ZJ14DdcEYhTlU6d>nLU;098OK;rVcvEc6ks0byCR+gd%9bGEudhklO|d@*~-_lN|4Il{aaGP_9rj z;3Vz6xydm*z26#35PJPUDrO}{t+XTW-eQpSW)xPJbjC+EX{sK{TCo#@)|9ukf*cRI z1UI*}msH>ef_odCOm}ILNeXFRma(%72n5>>3!6204fCO>E$o?Js!UDUNrPH=@6gzQ z4=`o~y8A%CLel~;`LRnjbZUGM>l7l?JnCc|(j?29HEx<;?nw%H@d!SI4~KCJJu8)3 zRH)I8Eefrr)5Ong`)GuzuvMcAtqKik`>vdw$?mbwjHRq}yf+ogWklek8rwyn=9sMX zI_XTdd%{T&ioy+jEOr2_#I*= zsgaUZsQ}}Nh~A}GE*e zK4zzxF@;b@@E|@D#zP7>l&XiFsnY}2nN*H!d={UhP%Je$mCM?BO@_r$JDqjdqTaW; zGKh`;hhv`I2l080FNl?vVk@plUn=dKO(nBpsLrn@AIdLjd{Kf{FWbCf@V2xqxiDcR;|bdfUvug3nXe}D z3g6QBHl9$Z^=WG##3wnrGjB}XnYUfXQj}m{b%H0TeCoKG}5gi(^ZM5@oX5+ z@UU7?uaVUFA)aGO4h|g{>AACepuc-h&o0KJWIOU1h~PY)*O-|v7*hhQxbt{HJWR9QRGhX2}jn^f{bzb{6fiNc;JD7cv1=+N)_vY~VrN*>`v)aiRzY88+ zm7XN6cqEle$LwB5PV-u0!MzD>l*Y*nG}+Xhun3rEdQgIf)ubfATU7w{axvhnOl}`$ zT0FzD!x&_L8H*Zc@5Ni6fO%xg$-Cg1>>6pCKNiWfO4Gd9c3;*im;T>($G!i{L=d8Fj#wOHqE-cD0OMR~M| zG>E&d>4;f9N(U^TYvp;@$_>GSdVNVC^~FHqC4sb+22x)PBt;-o3jmP_3lJXao>Px{ zPHhl6XAvFfxQf-$;2bu}V^c?T7B}IOrwg! zZvH-2$h3Oq81NVgew-OQ&7DvBxU2PSiG=`^sNID@Px%AfDuuA#RlX+5aqlelHC@I5 zcY0(cr?dE^c!K}{*vz|$QKlO%C zZK!pFY0|gWP2UHw-?Q7vQK$_?FXLQsjsML@YRFTs@Nmh^j}&kId&$kbqj;7rFPEAn z5Lel^-PC>-<#qSIx2=h-{86TMp^V)Q_75zUNS^jd z8az2INzci5Ud9ie!E#xa3)wF za-1Qj5uUEO?p9n_k*+q zF&Yieew1m5-F;tcpL6Ed?{7Z=EMVIQ84G?aVoAY-f)zhPc*x5tdmi!f z*oy%_$s{W&FNRq@@nVGKnimn4PZgvEq(XjIz_(>qjZ)pL*aB+SwvFnhrPpdkO<*~9 zXe7#dz5dqJYh~TG6ZLmiVz*K=IegtV$!8qy>b7A`Usg#9$hpjRLBO+-FBJ061>7&Q zJI}}<-qV|<_k(~ky|Fb+H!eQC97RPigN5uN0W@*D5tt2vPPTi z*D8%_$=Eh|TBFwyhIUGF@Ug& zVO~afi6AV{`*+8fB@LuxRcrz}7>#vIAb)U7N1w>V{u>hAiq4&I?n<(w zn-E{%x`6bFG(mR2-Ll*`_@Ly`Y6$(D_2 z%9tU)3-{s0EauvvKT;ij_P;|ehJ2FbI*0!h0Y_D3m*l8Dj@s*%WJe7;YM)1LdHaC38(RVoDAq;nhDiD; KOU5z=(~&=(&`J&f literal 1486 zcmbVMYflqF6g|`3cKcWbs}v{?5mDO(sXRqnv48~|3ngx8(#V&kthl7zn(Y?lKlo#` zgg`VBKl`JMcZLG}fQf0E?d+NRI`__*{r%_r8Gvc5DDW`M?3#(H;kq9zqh2*^JK=t+ zBsObx%e89ul5LUA+}$*6voiL|a?CQ{Rv_Q6b=SdC>;1X z7*^ruAi%*r6#@A8+kF)`aFd}cXW8aPqq<`{1!JdTGK6!rvQa4-j>WOq3_`*q&L_qY zxsJv;2~9;1A)b9gg^Cb0M8{dD9uAC3!=#smSiG}g1u=yg1=9@OZ9_P$yJl6zEan&j zhT|BA<=RI&AFZ8ZerKQ5lFYVE?_!IF$Djyu`S%Rj_ORB3;~kwXAJ{V$^LS1|Y|pw< zG3xbX8lMsV?t>Ki-Rf``=^xB&+$%CkM-P*Gax8acET3c?ODAf`FMXIl6 zZQFDNVY9Aai6Q>qH;Oo2Uefdw2|}WquB7|9NC8?&pJF9xij`DJ9^G6&VkPwujBW^a>6L?I&6ykUwJh&HK(-yOB>XUni zwei6dJk*Ac5!ZU;V~k(r3sW~BHT&qx7s3p6G%IqAh#7?`JD&vQ5VPQO3-h}~Q2|UM z(W*30b+|3k#AxY_q@9&gyrFez;1o|LzLMpfy^s7s&js56Y4T|+hekf!8Vob-6brw= Z{v9VFDRQRpLad8;$s;MAA&up9|6lsDQG);g diff --git a/twl/bin/de/matthiasmann/twl/PositionAnimatedPanel$ForceVisibleModelCallback.class b/twl/bin/de/matthiasmann/twl/PositionAnimatedPanel$ForceVisibleModelCallback.class index 1f9b273f3eb34d003bd64b839765ca92a383b653..712692ed4e97c2ab95a5086b4b253ae0639a0b51 100644 GIT binary patch delta 308 zcmZ9Iy-LGi6o#MkwP}8u)|l9;wOVly6Nid}vrrJ63J&h61fhfsR>e)cgpex{M8UyX zybkZ6yLbwM;&R^e`|xt+*4*0p_3UeKdaSW-)3e#I>6Z_8RU`-1!1UUJ ze_9mT)hJJAv#dInaYLx>#pl(hB%zOu8hnkODiY#KL`!R57Z=?&%c{yI p(%97eNOduDk|*Su+J8m|Te^Q3&JV+|qF06vfojuJNL_!j1mCorDs2D& delta 322 zcmZ9G%}T>S6ot>7I8K_5I;OTYvDMav*dUF#@CAa1E5U{PRDw{#ER2dfpCQc7w-7|Z zg%9A{NcZBc2#Sk)&i(zkGdYvy{qyw=zyY=t1R<-_ksDAvR#+gIX?~lhWo|Fi)5)~B zxK>ysgumUh8*B4PS=8HiaRY=U4Fx}dhZT(m48hwSo!1ZhbX1QM1`m1IMWnFqK4?#B z#4xTedhVE#kf2YjEv~XMud1RVL~ck?fB};|4(T$nbFY&ZEI;zk0;{Y6JE#RoAwsS- yFV4Fytg#c?Fsx0^583B4KY4} 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 CTi>t% literal 6834 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 diff --git a/twl/bin/de/matthiasmann/twl/ProgressBar.class b/twl/bin/de/matthiasmann/twl/ProgressBar.class index 575abf3dac373640ebdf3560121beba13d04a2c8..425fe50df7280d290c26a84be2e963cd22ac0dcf 100644 GIT binary patch literal 4400 zcmbVQ`F|AU9eyTz%w~6zkiZ6WaKuCm8zh$6tu~Q1AX>JPo1@9gYmHraSIpU=MY9^d2np6?6)_|NBm z1+WWCQEbB_QQU@HJ%@Z0778+(5B}{eAhSnh&lZxR3P-*RvVAgwJ7YM7)3S3$#5^Xm z$7Ogzh9_hA5uTFSSs8vT%by6{Pi1&o_MVa9TogaU&t>lyLh`KaotNcvGCUu_3sLmq z#Ry(f@v@3n6s(_452Z(s%nVH&7(FsPJ~Xv=bVS836-1^T-7)Sr&M44QmSxz(IlWjk ziVBhw8KXb1JI{kCCc4BN2#hb)taX2Eg=^pwR6RCJ}LMn==4`zKRV z)Xd$I?iIVrn1Y7kf>m^M%bC%03kKKob|GsU#bPS2XSweAVjwOR)rL-%*u#USWjebR z1bVm6Cis$0%Jxq?wrOQ4LM2OyAl|$B-1Us(^0%x$r7aX+HrEToHtPAp zj3@^}{IG)e_TI0;Dxl)}{Cw_Add|ojWf^q0f?I1#a0ye^@xp*G*E_-|O9fkMYFwsQ z5M5TKAU3a?mh*s_q2UTTYirwkAm!?bnv$6$cIFf)DPPKZd$A%@%gA`EKz6}Y&{h+W zh-B`bD#;4Z8D@6QajSNbpa^Etw8~<7w^LPwx#ext9m}ft6$`gSHtzD$3#2H|TirMs z#|_&yGH!i)y!G?8aon44Tt!r7j|x?J5gDA#d8HMdE-cuy#+WIEw9Xf(osx+fzKOdu z{2H%mxE*~eUf1v&yrHpq?$odYeHz}x1q~PR7P(jEu7=;@Z4Gzg8!CRM;T^oI;Xd52 zVIL+nOvvzi9MBk!Wgv%O^$@Uc) zuF8;+;W!S{jcx-Oo?{sq84aJ{8Ut%q7xb1|72va9!RA^NQiyam{jB1;g1c(bd|78z zu(1{!6NuGO>!c#kE8u3TukJJo)+*|1I%a514b@a^sqET59ceSq^th*XEmhD}3t7HM zq@bJq;@m4n!FT>oc@K)fCi;L8wx^9p7Yu8b@Y<`|r~iyrH&MTTOF@Ufnfj01#;~bY z94bAhbZ2)Kzj!8Xtce=Rqb*Of};M!C+*X9w9B%JW0K7BjYfikbMeoH>x< zpSV#F?BNZSwF?VYhL^jn3pQT{;|1G%tYA5MjKqN|5_^-~vBe9B#6~V5)~zjGL`WMERNafOqchR%ftuVwP(%~qw;EIe zQA*iQXw!%xjbh8`_rCIT! z#IY1|nT^rMqI;ZvF3Iu-Ut0+z=L51FeBPa_fn0~S63F8O^28cIB)!=)#&5Tl_H;F8lUxvY^d1QfGK?670FxO6S>#(Q!LTs9=Mx&M2#r;Q^8POgRl4X#l{oVZUdz24*6(JLX*Y4GTmk!JeFGc#FP>m$JeWy_ z;-PbLc;b9A91p*V`am*#361e^JoGNqcqkbb4yhRa;{3J7gYoduO*gPH48eYjz%Erz z5)GU`OW5ZL`#H4Zd3Kc-*hOAs+P%c0ewl^w3M2d~ox6xEUrjl@=9)K7;I}akr&olK8(&!N8nEYw_GKyK2K$=J-v2Q`(zf`5Fcu2($75M|A z|0E(sUP>i*;Ym_Uac*U=Y8#|&?UOrhVtvOB*Fju&9Q_QPgB>4{ret9&HG=QC5H3*T zMK-Xvuo-W=7D&lamWMHf4jdsKzP!ztAqV&ZlS%tz9d$(gQWM-k{dcsrAp)`j<7dW>;yA zFlWlQ)g9C>f6XnoeunN(5NPRfzp5lPYlLH|aU~F8Qr59~Njp4&gnOd!KOSDicC`Hu Dsqfhy literal 4406 zcmbVP`+F4S6@Dk1y<~R+Az_2L5WxV34JB1D6%(nkG~AgoyRwGs&RNDn*0Aj^_gtoH(#fSAb77(1aKfn8&{k>Dw0Yh=Y^Bns ztD#|Px^H^u_)Oo}p`qggqkR)2LxUQ+$13e}Ogm*drqk7DTeNKD>?zl9&28%Xh z0GFH?9GV_FIG&s!I7dDBvQceVL+wD$UT_WDoiQ?tX7%4L0vw$8y+~$_w5eg+SF=&8 zXghdTFf>GZXET;1Bvqo2j$X!#eW7+ARonK9REfH&|K#PtbLJ@4H7#2l$O($#F)LJI*)DcEV z!}>AHHYXOdCrxMCIGLg6^<%kNBQs+-mc09epELrdCxILj%Xqo;C8n#wMC@Kb~ zM})4bEK_MQEK2Uxu?{sF>PRYCEVKCbEgkn`A0;YgtWsUW1Gh=}m~dWal$6g}`CTd? z9jK-8*~iC?c|Wib67wCZ?id#2FkO`5*07N=T$PX#_z@&8C2ir%@=ghf`avB!YQ3nJq1^p7arHoiUfh_U&s>;P@z4g;}EDtY~HZ!LPu$>tiZ^jBz+ear*%Az4D*>$Oxm{Tuot;= zsw$H*Z|lg({JQ-7sA;9=+!)SaAq>&Dl4hlW*5L|-)Vx9$+_O5)$zV+$_lS&M(D6jc z=ut8Bl#cJ?2W%ZF$2iA>qOwl~n`O0{wUE!K4?A zejYDrC%0&`HEMWG$Lk_Y1NZjl9CrTEoMSzavt5Hbm+(dyKWC6uPK9y9ozw9Pyh(Sn z#(BEbK^bU0!rtX`t~!}!7xvhAVHG-8b-ay?=>97mzs^S^Kd<3k9q-AgbSsa_jOn-* z-Dflj?yc0&$oWafJY_nLnOaFLG4X+p_Z9Fw=Y2ApRxQt)4B#UjznAqIclc{=LLuaLstdTYpO0^e$NntAk5a7pN5KZzWz^5i@ z`syBmoMKTvS0Tn94>R@5R>pfBB3REW)#BSe-sNvYef<~M_$iv}Th+bo6Ao5k3$N>x zp#-;ea$5&Y%Zz-7@ms-%>Enn1txtT8_QW!_Uq|yYc9w(Oi)!p4;9doydt1f&ACf{7d0^G7~-OhRg~r)YDqu=&0Mmqqdwe%oYoZ0Rj*PSnRf!ychE)_EOm z)ywGSJx?&8ylhtD4N#&%$}@zG7)C2b(2k_C*XUvT_BL|O1Lz^2URnx3Yv<#G*w3q| z`YwkgI^FHDr7MWU2CpI3t}k6hP#+Xl?MrW>HPP;q8s9}y0g~dqlvF}R@gS*9F_P27 zK73t?!#k>(7uq4n!__j}2gcrdh z6shm;82Xsc#hRZe(mYbod<3KZ{{37nnuijd%Sf(-J*r0Mn4(sZilG9*5XLc~Y<~xn zK2~w?50n$h6cJeoKAYBRBA?+vIguwx1<)(BOXT!tK;Q)(!NaEFQ6GO zVmn^qY4I`>@D*0ctLVdP%$3(M#=elo8_2K?Y$d{|N4(%(7C*#~=vI)<{TP?1Rur?8 z;}UIcM?Xcm#1M5djep9gAo1_PvwRAv#J&T8|I$=A3@wc3H2DLf|0E+#+L_9U&ZNytt#w$4%;lI&FR%bZHR#t(^l~OA2Xdso}RHpJisa&Ip4@l*Ar1Ie! zRDSz)RM_%-Dsz5jwo;XAy%POf*w9kQn=(b}83o{D()fh=&tnTW6b0{;Y%Qp&aiP-u=-({RVq-?>P=exl2-prtAAO;>K|5Ft%BD_{zTSH3fhm8`=@C7 EA3s9Y=l}o! diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditor.class b/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditor.class index 0541f3c120eefb5f3ab2d9a362b3ace1dcdfb852..551e0f8c5b9131570ad517048bb76967af23024c 100644 GIT binary patch literal 2982 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 diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditorFactory$ModelForwarder.class b/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditorFactory$ModelForwarder.class index 6dedc85dd53819f2990d4de8e4b831336100017f..97e5abab32ef33f5066197ff4b03645bd4a88b70 100644 GIT binary patch literal 3113 zcmbtWYi}Dx6g}hDCicd8v`HZ;kWz=*P8yf;C?O#wO=D_s+7yQXZFy|$NwUS>jnBz~)UhZ?P$|S!8pO<1VpTVsn|z+X_kwmKD4s5UrUNSrr&7 zR%EWG+4hF6)oYqzUDdO!=?qgOZvK@*;|$r$ab=4W_fvfmNv#Hb3JuR z!Mg&3^JZ<;JZIiosOYw7<+U=|Z2`4l7}A=rYW2FT3rq#(U$V?iY1!MQ4JqwZU?zr} z(GA_670}X;oF#B$J0+PFfyg|uBhXva4S8{^wkoYUAv*>s+zH$yR>>;mTjsisv8w~OF&R~jABStMEKsm zWz($M`ldjFBwXHDvgDdh!9(eSFIR~$jrHlw70R&bMGWj;caP&#DsUp531qCTKsw7r zXOVmD&{daiPYI+u;&9rbuVicGPZqUJPfESgC9+`DsU>8EcuE%v92s5Ht-4Lpq-LTa z=>?vbRq4d-Ip#NrX5JXrs@2AXu7z?W-8r|vq`nkbdk7bEt99F=Ms7S7Zlw>|(TGg7 z;t-kflDTD-WnOohsHFuaSsW^cFsxz(XH~p}msJelkb?JAJcko1(#WVd$z~Ec74PGU zimPm{ar_6EQt=_1k1!>W4|?}n5QE>Cwx$yp4@%_fWFI#Irw@)kh!+JP3!Dks*THcG zjtA{*)3Lx|OV-RAvh_v?wj+(UUnGmDU#nEwvn5HKa?Yo>L+tP#g{GDVeBOp|{Z2P8 ziT7AgZ7r-|lz#a7K<7b-{zxzMeVBe!Lm2GqV>!`xf_x)5O1`IPwoYT1#@_7sR}k6T z2xTXB5dMN(VLVMX$;;vny2aN>if`}?`G#l{Z6Ua4Y2+`43gI|?H`h{)wLw~Qk1)@$wl!wPCO%J2c^MVXvaL&s#^63(sb7U8> z5I(1=Kk2u=A`*=v63AklQZ>`_8mD)UK0#~LZ)AgDl>IQ@{ZAOdo$RH*Mh7O|p*mGe z?4m2YkDL2W{!ursQHJW3!5p2!^Tb87Ak`~~IukE=e9aM}AfzZGwKMg=M}O3VXr^ON zlb;tU4Lws{+D~cZYZ&9S_t3*bb{E|tu+SpjG)~hUBv@?`M{UE1(RF?gMf`w%@gs)B zPZ$+HBPD+Eu{q`)h0=Q>=R>*5<26@#yf#ROIzww=h<=|0U%?bD@I7Ajh*q*AM|Yq$ zbsy*Bi(e5FzxjAp8psM>b>spln5Hj3&m86Ia^?V_o_3($3Fwc<0DA2JpkzDHp9J*R zV*t(KtVi7fje;nQ?p>kVV=i%jBO?BBVBA(cSUq9yUgmI)l7%pjCutm}dpUv?JOTdq Q{|Jteub=+ae?8XyABab)cK`qY literal 2851 zcmbVOYi}Dx6g^|d+1lR3N!l1l3MAB~wv*O0EtKMrlBO|raoT`Qpyj!-C&?Cj*IIAd z<{$85_y7{5Nqh z?!mht5UuFzhGuVCQXtoh&uq0?m?Ou2BBh-=C2+2*R}UmH$gFPY_MCv0`QIpA9bI01 znhMz!ffL>L2$;I(WBa}ZN=_64BP!xhV+iAjiUEuYgfrQd7_B^};&D77aHuWa#0g}2 z+QkVdQPvH4WwW^|t*W-#pbU(Z&6?I&(JY(Zux77g3dCGAP)EHMMms8Dbyjuf6%kQO-BgSb>YjR~TLAQ^8kxL)L6o0nL-D7=B8{ab!rwx>1+61w=_8v5QbO&4#VF*zP$MC)qAe)mhtEw&a>l z*2zq%1HVFtFxCs%>+Enw#VO3tUM9C{OwoS#;(6|}&fG*00BpeRn zii)f3KhojvEkCgLB4hhER8)fYe&8{!;}o%qxoOp8QFlsdPi35B*$J#YB&GW}+|(Bs&fUS`-1Ih* zpV3qpWAq*5W$_gv;x3}%ON`T8lAOo|NAV=J+~X}nc#8TeZR5_wXh!f2LSNqM47I!# z%YBZ?9UK$*ghnA}mwsLm_Z)N=A?Be|86!hhZqQi=={$`&f;c0M?;sb#rva$1I|7aS zfyOb76HXX(^-#-U1;O(B!M=F}7+p&q*kxji=~SJ_rgv~Uyzi9XIcO8EogbR&g~kj% zj~D2CBsje2pZuH?Y~BeTh%kQe%=bI!i}>`>>*j;FIscf(OkbKozQq7HxgER|0*heM z8_v;i8}qD$J|{C1U2dDJPn@uS;#mG^bE!8(HYm3~kC*1??O@1x+dlT;A;Yt&=r$_KzM1z~?D z*gtxPT|NNz^&sq@1p8OduvLtDB%G#}Yb3HueJ2Hf({Ip!98kAJc5@uYn+{nkUXi?o bw`n{^d|tylRN?&mU&H$hOYh4E{n7sb-`#|S diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditorFactory.class b/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditorFactory.class index 80063e86df1b1ceea292f96043e5584afe8d1bfd..ceab459ad281d48485737abfee184c6b51af9a74 100644 GIT binary patch literal 2406 zcmb_eYflqF6g^W)w_96z$-KRNND@`{MCH z!At}SW);jS$SBA%3@n(nk~wdFcwW(M)5>dQdhRepUm6Ct7OGmk&g%^47tIQ<=1pr` zvnt#oL#@s5qEO-Knr7SUx>m1ghLN_ntLZnExydbiXK9^tJMPI9Z-veNAUwrVAA6}3{8 zEWHJ@tW}paOBd^gF-R4lip_e$`=|#Mpwr2MVb~L+Jw=AW);xALWiB~S03S&>)uT+3 zo&aqb$l!5bC3T}kUBheKtun(%V$=^4Wi;k5Qsxw{H#wqZi)%J_8(qO8YGPRl*T(Sn zGzBs^yR9x)E;8jE-fSENhWIH`2JFx z-erq(g$?b!mab~XTKaWqgO}}0?xg9=q>Yp(t*nU%?ZG$+O~9leOM@0{SV#%vph&H*?%kok)`+3tok!~_@k@yz`d&uBaE^Yx;`P(mL*LZ^ zt%5Y~LqE+2$g+V>ngPAZ1F+;F0xQYX0Xn`R_=T(;7^LTU8o@py$UdQmeZ~c{4Z6E< z5tnF1`*9gp2>EJ@?^@G$y_vxcno%z{_@B{=QB*j&hu}UscWLgjhJ>B%I&4ulrokpS zjx2)1)pm=bsKFb^t27E_sz6TdBXlH4{D}bjiZI(dCPrL+|IrSK)m=c-ImecahNCP-fZX~bwu(wkH< cO_fo}rqWvjhG~5#q*5PDV~j?H#)nXU1BJ_5re^z5}?8#Snai*_x7T$cC}0%B_anZ03yJ zdhWHZZ7aI5x3Z}yMq){8RJ29y{j-{CXnIku@^>$U0AXlLekbSZa&sg1sMpHI+bcL||udoZ{a=tL#gB@H@ zo2pSDB$KYlW>~qB+A_?o`P3>Q>&et4H0=XR98na03`yw68G=8VS`FbWq4?KkHl?=b-p5Y9^oAxs!7sZHhOPNSmeWw}!40>w*ORj#kfx+>OfVSo>5 zi!kTP;KemUpIHgQgeyjOnFu3JKlZk5Uka`O9-OcWN=Ul`ba`MKhc^`KNK-Y zPIN`v(W^>PHE)$8Gt;7Z6W%VA=S$svJYVP)xjN@SOxP<&Ten@2UNoDEzEqc6Eu|I0 zJYoEgW#A{l`T7usor3mr#D>d`jvvA!Pjz;>%rM=8VW*(YhjH#-e*X3GFD}{`j}d-X zeTX8!^L|J?wmq@#(2dYs3)>@W)hJ_1ajsO$&-MhLP1}+%O9KyCejHe(i4o(2_lALofS+P znNBcMW-#lVWI-7_Ms_VDc#n|lj_B|dWvoLP6x}zkNhXuf1PZ8ak+x`(LIV}$QLIV|5{*zvX|>;`&7~PuGRc}uEcG|} zLD$l{@Po_G{wS9F-kCgFBgL*Yb6@A|v(G-~PWt!jKmG);g6~bF@o5Ss*3vNWnR-cK|(L!-cAXe!#q`;Y)u=$qtb znDV(ovG&6L!7jIKcfVZsJ;&W==yWfjy>9!qzy;DBvwE`of^oGNQLl4AQhPcs3)#^2 z`F|S=Sp6n2}TDq6_ntc5Ic7M@_k!nb&8pl+dvg22UrL(qkzwlJ_M zaQ*+@BMZ;4Wnmj+`WDW|TVG&mRQ8~t2EG$0O=6)h-hI0#7e}1cjkAs~%cuJW`d2(@ z>yJxL0i4)VtvBlISYbzBI(F=!c5`gmNs)qcHt)OteJXHy(&3;mx{^WnZ-gDgtHrh9cp8er?l;z(NLsBin)B;uIft2Y1eKR^});#!J6L{K82D(|jk? zrkKNd&aJ=z7w`^OObhSvt(-sR6H$979p|;<`QR{gRIW3agiU64BOtHyefwQQdEpisqvn%)jaaw+e zLKylgN97rb{iNPwc^Ag=jtukW-3dK!g`S%9E5rnj5I+gBGzO9xf|Rfnf?NwhqWQ!q z-$3`}G1utO^(vH$()}6Ps;p9_Yk$G`4Uv)lfnYa~6e}8}6c`Q#OJO+_EXCRff~9aB zHz*i?y6{mLVvVB`(^PfQDV`*GQ{x9UHi!5oZn7!cfwldaF??<>92A> hf_s?aI8PxAtm8~V{S&f|i%7Dwze0`c49CZb)IUWx;VA$B literal 2221 zcma)6?^7F96g@Y;mV|_ow6uyqEl>@ikQS@7O+_vJgv^(?m-F@%gv-h5J-~0E!zy1cWgdZ)$1lMb-+^~b7?%3^y z?Rn+k&@FHH&6e_mqiS8LVD>@H37YoSKYJQYIaq*ZVzQhP=2@nwo}_z!K$xprXWZulZ#+!eNb$F-kq;7{|ck;I-V1( z2;#-LEkR}<`pq=%n;PN~C1?M$eU7kbs1T)1oK09**!$YS^ z8iJ3qNFy_hNnExt^ZS61ReNk=b+!vxETT-VxZSCFs(5C( z8Qj2U7M29#gE}ch$zmQQ!4P31$u1DJ*ZbALcf9?|5S9fW^fS>DA*4fp-?sx>aEW4^ zzzENekvi@-56Q`%DVx02jDO*6XF>L$#a-1Y_Rio=3b!j~5+N8-ubp4&~;aTGYCbnKjQ-{;F%Y+p2Bhx!}qmf%`&PQ~ycjLdPN8 zu)q$U90b(8-}vjE=!%zBUVnxhMHd)P2Rj)tBw^8t>C?u$IL*Neh$}f-WzNDmS^5(r zztMXhAecib`t>!=Ix?2{MZZtfT|7~DtXnrvXB4>{MVh4F;F{nV*H44Yp8&~qL2i6N1-p6t*$CvTKET(e_*`Fe@NI349SuKDTR&^h*tkj zL|7V?h_E#7;!6@HSix7(FIG5fGBa8iQ{w3)ZyNki<4hMngRk)oV+HrH8ets}TWg%3 zpO`$x{q6a~nekGFeik7&JQ8J66_sN6Qtq1O2>bRORsXaX74b$WTDy4E_6^+@YH pzNeLB`cJqX!&7WGV*>Guz3xr7H&{96VFL1er{ne( zmYe;)+ZU)Wsx>Qj@8M(hK?KwlqZSJ-y3O{5Zp#&@cuDod7^yjNUtKe^>W^7ccddL~ zVhqP6qDV-bz)6WTGB!?0oW`7h*=RH*&Y&o97DXEk0Y~e|!Zvx;7Y?U?KdkxL zgxV07CIsxhJJ78H*38w?Wr4hUXQb70Go;>_xg4)`ySaSJUAWQgTz6XniS|;@)l8d+ zdS(??k>!>m+^9fOPfpLIKZbD_M1VVtEuP~}x$+9anSBYvu|_c0ywV-CNw44|g7`#= z&uspJ3F405h@IHQh!oh3JtWs2S3?1;($%UaCJD=}Z%@L%U3^o*zyVfF8JIzw YPMQsp&pH;=54nyMLi{at9JNCK02_I9djJ3c delta 723 zcmYLG%T7~K6kX@u)80N#Z>3PgB1(&*T-s9VTa-3w9FQ17;ukdOMM+4jEodC|0~}~Q zCd7dQr;chO7#tYKj&V`Hn;7AW@)%DtT@x@tX3%37=8$6zC&;K0?cyfqeuz!8NI!ZD(h z!YIacU5@IaD2jaVU`9U@yZVzgoi>#@g-INb;}m8coTjf|ij00NBO!$|IIDMLHX4B^ zU{@*?{o9(0$FYcW4$1;0BkrkmOA6<)AfWEoH@E%ToqF@O-!SAC6)u@Xa($!iuTttT zr>E>(n)NHqrr)k@);k@)+_iS=uHW8zcw@M~`WG;HOq0gu z;kc<;naCz~5P^j#Jqt0!X&*2yX-B;I{97omu#2Q8_b~E0Xi4);1qGj>S3;^g&VV=Q zz)?)lV=s;&!|4X`Xq;`3VYM+utPXQ0m=ib|s59)_^h~uk`HC+v8@xs}I337(Z;;)` zj6k0#*-v%n`V8Cnuj>m%d_@l5_$}XITPCYq=(#+hx`P~AXHd^wjn-+c4UoH@I1f4+PT;2g4zXvT0H31l>kHj(AL zh6{0oagk5Pcy)ZVcMoUDNst) zfe(ZfimS@Xu#P3UVyOk%j_(8X<&USA1tQag7HG+uwpu6`R+Qs$2()F3d1)<6$7If` zF~YeC#Ik0| zV|8c`3^*E8*nM@Pi+&6V`j3Rr&YcOgw(_$eO9b=?(McyqX!jUVvH)pgU7gdtKK z$4Q!bbqc2`B(Las&}lcVb&^uC^pK^O)*&Rxb{2g!vb;%}*(*-b8+Q>Gc;cZre$?~+ z?8W1B2=zN&9Q~w)J|_GkX=JW3Zx6)wWD@c+iF@8(py8{>R?!u!vPJkAS2?B#$(oy~ zC{4^`JcrIDsSqW+w7*eBzf*EQ_K-DK$wCm_@suqG7v7{=<`yWY}=A#7VhEC^Fr+%8xQ6Y2U0 zD+gVY41S_lijFh%*LRlY)4HkKGYqBJG3-4}^2FUpNFFPE)eth3UPh%0A=G;2+_qwHYUZZ;to`!O)^YK_G-iw5kZAjbZt}2Bc^TIv5gv*|R2e;go`t z41HdnmGs@BsW^>phRC|G-K{J)%2d6MSUkPSw|K(f=6d46>ZZuqNd;#a2J6F0*@n=L z^RhA*7@l}n#trFc{Wv|AxZZX(P|@W~t$gBH*|A;~C*YU7`c*_Rz|d%wO&ViTIxT74 z6iem&s<0g0F|?%%Ic{XRrAr-FH+}LxFpPLAvX+H=dF8bza!Z&tL)_EPOOp(NV)ZRx zh#ukQ2Bk1vwT!omF6*IV_)CQ|C?tgxw>d*+Y|%pkvXB>5j9^p>?Xrp~T&Z|1@%$gU z$=H@|uFC@C3Pw3k#b%2P&6da)w!|Daj8&d{B=69)it8AVy_r!li<>0Cs?mmSthts{ z_^D$^$)o=ap-iD{<;1*h5X&~VXpZ#8q|h1EMU$S&IfIumul=04XQ;If`CUfuH+52(Mndz_JKYju@#G!!+tm}BDV?)QLik=(Lv87BdgF*(| z8SD_!$ByrWCxk>U-ykGQowg**R2*N{`d(88=c4KIiB;*egxe5-qvH558D2U)LaNF| zF2OAOz6?sP==CHY=PPY#dm`i{(es4w+u=voJ_|Zs8HAtfmr{lsQRNX~?m~v8j@$SA zw^Fous{9lZ=5ytI<-NEPwk!M#yB-FPf5F-5R+LJhGGVG7iq?m!=*FO?xD`VmbYmDy zjI(9~>2rp|RjMj`fI0SrhnQ!pio5JJ z_M1yz*aBHzDptQGUaD@z(ypzIf@i$jZP9R=JOcwFq_=7JG|h9eK>MHQ4W_ F^*NtPJ-^G z45Ba13n`=Zqi#p49MXiHQI|daw^Ka}qd>Hy(?H5oai(OFl_l(s%DPQ)(j4R+GaMm% z;QDTKNJtfmEke4+rzTPuw~#}gFx7B_)dOR7(V|W={^&>?2Nr%3V0@JFBrw-fKic;#>;eOmef^E)pLSUhL-Ast|X*H-@mCNaf3!UIh6tdkW- zgX7xLSDwM;>i;z0JdZ`&zP2A;+jG~vNyWf6(u{G41*%|)USWl*G09vXC?R1;EZ`Bt zFLGuEsRhH}%@URq<}ydkVr0JQc}Vk{AGdEI_`7+7WhFAU>HZ?!h`GbEy1dtg3 ztg@oM>DTN;n>I_Er5ilG!SlN)4UEyzkSlZG%0v+*#xbxN%PwP!qs@E5Hg;HKhU0EF F{})50|GoeK diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$PSTreeTableNode.class b/twl/bin/de/matthiasmann/twl/PropertySheet$PSTreeTableNode.class index b65e8e3698bcc81174800433479e2951b308125e..b0285453a0d9c967aeffe479c478db2b872b16fa 100644 GIT binary patch delta 160 zcmeyx^ovRO)W2Q(7#J9g7zEiFxY-%_*ctdIwv;imGYCxNH8E#o;1386DN0QZNleN~ z^~+C5Wn|#-%*#tHa?VLCE>10GWDv+oEKAhSNz6;v_fN`7O)g<%P@gCuGI514Gb4lI zL;*z$HU3xhCo3{4PTU~C%+A0v@u4sqI|CadgE~-9WHL9S z=tR*HAw~us&%C_UBIlgM;^Nd|b_V{*a*Qfoj12q%!68MdsUe9;IjMg6DXDA>42%rS rK+Fm>pNWN$ft`VafdNQ!GH`)J7`VYC4+Afd<^rl?WZ+{EVB-J)#y}Xs diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyEditor.class b/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyEditor.class index ab1dcae16a84b56f77e09421cffea18a0a877fa0..25628d71c50114e6a05453c62fc6759c6d243c1a 100644 GIT binary patch delta 175 zcmaFK^pZ*7)W2Q(7#J9g7=+jvc-a{QCWf`Ku`>uVG8jz!sOY2;P?TSgT2xZ$nvz+P zU&P43hc3Y5nU|MZTn*Y{7#N=+`AD9|Rv z$iU;7mzP@PoRe5woLbDzATaU2N;o3}UqDfQL26M+rE5xNNq!LcyVa1 zXXKr@oqwVO`{cij5@L)D0$GV=iTXK-dFlH8Nm;4MC5#LP2zAVi42n>m8yh17BLfrA zc?=AUEQ}1y4D3KY2aw0azzO6*SX>O;U=bb$HXtnolw)DwWng9F1ghm_;Ai6m09M2> AumAu6 delta 231 zcmcc3a+^iq)W2Q(7#J9g7=+mwm>3z%Cm&=qFmy{yF3B&dWM^PuWDv+oEKAhSNz6;v z_fN`7O)g<%;7Kk@O)N=uP00kRVq}QW@B!))nHarcvKgboWKKq10Upo1ywoD+oW$bd z)M9o9zRCL-jhWdQ1SWrERLN&#;0q|qFGwvase~CJiYfrLpN)}$k%1ZLItB(tpi5X8 q*noU?AdiWG11Qc3W^qA9xEXkWd?BD5F9Sb=AR8x8EkA=08z%tf$1>Ca diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyListCellRenderer.class b/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyListCellRenderer.class index 4b0de72b04e79b996c9e855358c1e22d91fb698d..4d0ed16eaa4822a1556218ac08135e1468de7587 100644 GIT binary patch literal 2693 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 Y?K9uOIE`64l|%t!@g#Xs!17S?FB+SVUH||9 literal 1570 zcmb_cTTc@~6#izr(6U`X3WDMduu8jB7DPpakYE!Nl7q#gKi*;c(x$ieD?lrmNnEngf z+;v-R;rfT=h7f+Xd)jH$MG`858JE)}uWfEsJ>TUuf6opJ~)O{I}*r{Eyd-BV!9~n3`1pW-{F486%6y|NZBwpDQj@U zax8z7VK;Y1PM^5-GXi^h@)d^ie}$BKC8}DaHfTs7qhlE342AR4WI1A|)2s?N7#Et8 zQme-83U@6zB9T$0`Sci;VvE}?>)+EVTiE8VaD0Y*Y;HIx{T*bO?ALJE?&=tEMYDAv z{@g5)%U5KrZtIwrHJA$1=I=5`Q*s$z6>5`o?bmWkwp{DW$c8$7lN5>*ehLL^Y zQ+c}a3`Dps1D17q!Yd4E%kk)`1_6|I{%&u}anZ`Hj$0E?ESug%rmv8TvSSSTw&Mu5 zXmigKUJ?%(X5$8;FO^|*_wECU8~yC>MB1xUUHDHOBA;*T^yxX5u<-&`HM4 zV3t_qPI4=lqrKj<=wwlG6IrrI?ln5g=(O<#6GVC|Bvk@ZnGU=qn0EnL2$PP;nCxx@ zvqGzc88D8Km#R+!yeGyFCjbU|01Ft803HWb12kj7I6~nFOQ%sj(S1G#D3gIKt#@ZF cy0e0N0rP!4pfy8LNvvXRFhv}zc%-I&1E*Dwga7~l diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$StringEditor.class b/twl/bin/de/matthiasmann/twl/PropertySheet$StringEditor.class index cc80583197ca8d24e7130a1c577e7a26f6e56bfc..f8be046c09d42fb07a6aeb130c144883ba6bc9a4 100644 GIT binary patch literal 2311 zcma)7T~`}b6x}yTGf9{N@=>us3y3rXBq;PlK}w~dD3sdJP^eNT$t4U-CRvjS(&az# z$+y1Rwc2!5*K+ynk8-*1Og;!^SspTT?z!jez0bL4ZvOt~_dfxAihK-xSd5|W9?Ko%y`0-+UZ5$M`5 zZTX;5$Vg|~$XN9BY!tJGl{Oqxt!vH@i!KZ3KBua==y17i+tOLFjB;6WceX8ez1q~F zlSN)=-9=cj;Huu#}C-o@eKO{WA83Q z$B!z2H%q_hBTWsZ0f9JhC4)Di0g+j-tG(GH{W zNsq5I&NR|AJB(bexteM}sQ<VW zpeTw!zNi)|e*!!z^(8e+8Esd5oyxl}Fv4rR4*~S!3ZFe{WO?`ZsQHG#AngE#pwS-2 zHQLwd`I+~4fbY@78;HczYXlO1Ah`Pmq1U*Sc*S28VeV-!85AT12o?s!HbUYtq9Tnx zv4bJ;1S4V>quf{I1jHCV;#*n1fC<_<$$igIL(&aeaZK{51SR=aF&_DEGy)!JSUJU0 zkH81HR3i{bV5*ip*GR4@_LE~uk=Uo=XKewd8vwT%so0~n(j%(uvmgc{B69{L+EDQ^ zW@;*KdO2ilCj0VpUZUS0UK6$c2-ZC73IBwD)P5IUku*q{<-yReh^hX+z%6PDyk*Pr z3lhp!8moxCMMnV27FFmk(6y=T=_)$8d`Y|kqR;UU+&{euM5*k6(Rt|N5Ch@}adC`U zVPj5Mm=^`y6(vvU2y^Dq!R&eJp_+!~W!%IqV&A4Wf}nn&;Z6r*csJH6$Z(}PIjz+2 zN9A1tf1$gI_v&JsTP&)Io@T##5TZ&4y`qdk;bKZu&NO|xrXzsQ$q>K-#`(TVwY_+N S52>i1??>S%XEBKFaP(jCuND3P literal 2304 zcma)8ZBrXn7(F)$d1DKe0!I1<726PyP)lDFL@EVAq11+kLbY|1y$uVSO=hz}82^c% z{MN7Sj7_IHl zdOuPVw}}-OxY{X7%`chKGDa74%PQ!_J%NO54hmdeeP`5+K)f1A5E$*axLh%0ODH1} zIkRNzZrzarcTN#9yV`QWcW7pgFwt4lHr+XaYw1&f%#7s)W=^xR<8~@KvOpzCgwd~| z7Xt#}^jJOtfe$rwLyO@ffs607D~S~PRm24i2_#kbl7`C|7UnsoEJRj0STtEMgQ*UJUzZ0H4xBYmrtqHg7N$5j1bFv5zgv8Xzl*sP28_^p8}WCV;zzGd7^0hitfS=i(DF%P<7-zS#zDrq4H-^Lst3I z zdP%ePQ0m6IZ5?_U-&U-?)G&vy1Y(r9ArC0CpE6IBsoL+ZhOe=}qfEX{H-iKXq}xLL z^X=s`g+&cZDyWx1i;h!q)?}@wmsowv_%?p{Gj1ST<2lo+E!AMxk}wB$|ch)@g^IuVkeb6 zme`7IOJ~8-Yc0?`9#ueD?_>IWwk6Y-QxpLGP7I0CrMm5Ny+ zko>8V+YX{5E(&cRi6a(MxE`>$>BVrzR2`o+KOWXvu`mUf@+Hf?!7?onrcrp@D01Kh?l|?@t1?FT|u18 zo}){Ypotx%#4gfe4>yE`X;J1;t$Hkn{r!(v&SMp8M4M(7?_-_(9*|!gVU7PQmb=;K z)gQ1gu%}#{P)ztE>+c2r#-j!{n?zev6x6_zmREguU`g}yT`OdkA!}-qr`f6X@`TTx;2e5^LiYY89NUPw;C|FUjs$h-5Q*N0p zyTTyl3pED0+HDx_ODPvVv#pldJZQA+u63x_X*vwrk!c!MwWIfXMvr0l*wr&)gKKU@ z5h)f5D9ADdPOa{hVcCu-u)65-J8{pP1Vi*!{}(EvQbT<4v|ob)uYw%I<~TJ@3nyy~ z9C?QAzolV@P+Py&iyhr;7EdnQM%{KV%BVx`Bcj3_J zjS>lVk6EgO6K3i5w~a=)T5h~!wp xG6k-XnueSN2}I?IlCVl0$67dNomK^kkWqkv&1jtVF|b9LAuJ(A9s^~>z5#LdP&@zt diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$TreeGenerator.class b/twl/bin/de/matthiasmann/twl/PropertySheet$TreeGenerator.class index e4608a38529ab8f679c59a51b34d4a01213659d0..8fc0a04e05c6bebc06e3a6399902dc03e7acff6e 100644 GIT binary patch literal 2094 zcmb7F-*XdH7(I74G(WmYV=Sm`Q79?2Y1$O3P})+#C{RpGC7nJxvq|pI#m%O(*`Pi; z!}wSD#EZ|)*gC=AgTp8~{v-YcI)a|N*`@?`T6oCad%wN+ob#RUyPJoP@BIMa4A$cq zz)S*ZoK~|lYMAZEVZ52(>@77rtA=w?oKGN*g?=pJf*O_*n8VxZ-Nh&_Me$A)MS+NI zH9djxQcV`>rsr*1X0vWOPQm-wF4P+}X&2Vq#+G!wPfOgnAkepEy3+BYcvoOxt-S6^ zxo%c$xysD~#eM@68J1U zjUKv%P{@!>L-+MSJ)?YLgN7D;9|lU6BUfAXigbN<1Tv*Y)wDNE*HUf;!HCLKAgNru zBI%szHC%zy&q3aEgf8fA%i%b#L=3vJ-ncD`o0eTGnzmgrs~?f(>~r`Nnv}2v#4>+m zNR~aKt(aRu3Td-eE4M0vGnT4)#PL0t2+g8nbx+$+eWKiGxm9`Dve`tL9-F6cnYT>? zuVKi*FtP?Rc-g=pUN!KZT289rGOif7isdM-2~3AIa}Q>AcNKK)lS>2dBO67@z={H0 z#dQN~_`tvolm!Y0WA{`>Ag%NlY}2_}xL&y>tGsTRz0i%8Z%C5)G72O z+xBbCiz$%0DLr=HUVuHp+Qk_5V*>f{tpM*DiSo`hMr(N_HF)YR_(Y1OX@ZL)>v4La!hNr=@ zLT8t=&-u;Is8$EkX>|j*j`003MmQej>O*LZ0E4;7ZHU}A&~o{0=((wFM80BN!|NO~ z{+@gMKlm0Yd`H~x@do3^$iuUIj`FEyic|Avid84e31kDVi+l>cOXa>sq>V!YxgGTF zv7~&oAIb6)lK9zYFgho?3}ZMMpnV=FAJs2Rwh literal 2090 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 delta 2762 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 diff --git a/twl/bin/de/matthiasmann/twl/RadialPopupMenu$1.class b/twl/bin/de/matthiasmann/twl/RadialPopupMenu$1.class index 25e192a9acc432d3aedeeb19560dec8febd2b0a4..54933033dc183e52cf3e04f90a9bdcc312ce31a7 100644 GIT binary patch delta 375 zcmYjNOHKko5PdZa4AVAbbQJu5AtEM1jB#V)#!uo#WaGl!023HO8o~feKS!917vKnL z)Wn4c@FrfuSjs)(635Hmp+aj$n3suDa^>hP}w_hLEXshpKVfcbaD- zR}IcR<@qhQ!R9)z%sYZCYcho&qwzH%xH`q`fb&U36n9@i#dl~=QIBL~72_>Zj56W^ zX@O}@2{W+6s%BT{4Y5Coh|KPJ)Wbhn66r`4!z^nx%pt>3=Z~C+#cZ;S&XLbAdFVFq delta 384 zcmZ8c%T5A85Ukz>7I08RML|U*Xb=-29*8mCd?cP!4j#NMGU1WUEMbA8j~_7E>=*b6 zz7r3AfG7PQW9%g)8Z()x>ZPIeFLzGoB_={p~AL-03qHs2WH7KRikuN zYs>SVfe<0_t5*9;nKeriLcM0o$(IQ$?q}Yu?xZ6i!~_h4qtG!S5J8-v7uHVQo3i_{ z!SXCp2Ijn5TFnTgeLGpR`>MXzH5>Z_sd@)3)pDA$?ggk)7Fa@-5V1Q_9owCLXP9M|BNeM^ZHLlc$A^%FwbKe7O=<|;Egj_W)>XB8`bc2cFN-z*0ArNIqJcOGG2XNuS z3;0P~cmVI=1zc!iqOqT!MORnV>+W>ty?Wj}tIuDLPXJbs)!;=$hlZ%mEGA(_LR`YE zhB+iu%&SN`CoShC6Y&*0y>@l8XWN}N!6>xbwezi3rQ5A_3E4fzT<-6X-%Fqijza%~ zHWLPP_zW0G8L*HxupnVk!V=OdmJMVu;S8*}2vd&fU;7{LN~R78qF%F01QrE?m&H-D zYBzrUV}i!cZmn5w*o3%a#Vg>-S^8D1TgkjcEwF@_VPjN9xe{yZk4O+A!cq4k5qXP4mScKAR1-s z7IX{s8mhQ~=)Ws-r96fqr}7MpV}j>OHpxukMUt3e=0cdAATxmwziUuFkt5n5E()`u QU>c*Gb#C|a4~;;417p-l@c;k- delta 480 zcmXv~O-lk%6g_u*&ZIp}EBnw)E$zd;R3eBV!Zt~pFtDPH#z-TCVKYKMqRlYN77=Y* zT0x6`KtHEN(4y$RJ{I@AbI&{XzI*Pw{-%dszn)(Jlu$IFdAC&34G2Qq-5MS&cOB=v zP0$^yWoHY7oZHE{=0-dKLcfF`dJsN@Bn*TJzPb6DdsCpI+sS%SN*@PVHX<>KF@iX4 zI)^`+ilXBZ2}SoYeb6!;OOZ*5$$#yUBGM8WMFd#2(`=nuP5{%$8OVAWZ6+l#gIU7B z$->WToA1UTmK=Y`bam+|~1L+x)f0-FYOoPmzdn!$^Z* zH+{?pI9ugh<2#sNc;Mp+(!0{qyMw9(Lm2*(U2~CN$rJfU#5l(NXLWOPf{}`p%GN|O zX~jfLSoM4l!5*gW;1~DahnB0YA_~=0eK?0%?yAr{BMo6TnP=ofk~g`)NMMoQ4bUe_ UL@Zh2RKqe>_*QEpUQz+#8}GkNEdT%j diff --git a/twl/bin/de/matthiasmann/twl/RadialPopupMenu.class b/twl/bin/de/matthiasmann/twl/RadialPopupMenu.class index 896bd2431213c77eb1bdd2faab5697093c07c497..3ead9eec233af4e38515e230abb3ece6cd715e5b 100644 GIT binary patch literal 6169 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 L?7tQ=Qw7fl>r_N6 diff --git a/twl/bin/de/matthiasmann/twl/Rect.class b/twl/bin/de/matthiasmann/twl/Rect.class index 2db22154d490be6af83572bb05e0bf0abd7da34e..6dd8dc83449da8f61e568049ae2b69a805ada3a2 100644 GIT binary patch literal 2875 zcmaJ?OLH4V5dKyVYb9@F1MXV-}#G@D#^ADHW9t_;lA3TAoPtlMIHixH<}H#8iXFItlo)1hTHDrU7h={zq_E?5QU zqJ~&D&!1pxO^$7j=Nu&s!`Zj{$^LMoUZ8)&avrX(%!zF|8sc`(bkD|XQ# zMOmJ++${;}vz7!WPTL?(j87KruNiGDI}w=E4ZC8IP^~Hju^TrlTMi4sl9QS4)E1q( zUER=dfbN^-SLS5dtZq!YtMo`L)}GZ1)-78OA})13CA$n9#W4fZ$Qk$$9~rnH;-ZL4 zB2LSLcQImM6eBTwX~c{KK^J0= zn^Tt!JVjXqYZ*N;x;=GS&CO|d-kw%Fss?W2mWD$?@dZjle>>Lw^-Z;uY%kq4<%Gf& zlWnC=nFkxL*j3MB1NE3&TUNEG;beAiS@%}j%Y+3_XY>F6c=qj&S>H6TI}kxgs!uH> z2cTxwUd=2&=l#&+2r1vAb%wLXIhuO~?N_yJoH9Xo-~{1L;(cm{y9rrL&=PSu&lg9rWu#$%8ZNIDX0tG*T0^3`9=^VX#5c(Sn zeYDQA^V|zlV=8hb#)n)sBWa=X5(mZZ-9ew&#tveUpAZTE%$+Wu9{K}oD(0w*;Kv;I zduiP3C5g@}a%@JLn(t{ZxE!LuL?yOhhg7aEc2Qw>Uv<9U1DxaC&ZR(Seis6qd%K;> zfzJG%1UMVr&Rc=b{DOGSXPKnroRIoT-owedPnf5TT%Hzxq7eYhh5#E-v6Y9BP|Sd=kkG^6hlbE(V}Hk zOvfqNW}{+OtA_KeY%E#@Cx(cIo+swdrcpMlo5t;pCtTGK+L_Rxn%j`aN@_Y-#A7uNBPlvRSuf?kz^h zq@kgI{$spmG{iD_{zjJ*(9owNg+p9xSk8mhm7Cj^@SdoQ}Bbe_lr?IvCZi zI##{GlM$?09T#0cyGp;BQ?lwBx|STXu(e=rdnu0FjeNCX7kLBN&EZM&hVmLDznBQx5#bT6NbtZ;yc?v=2>F<%0&Fh%Maj|ac zxF%K}ccggkdOTTGF}rcSvhDD6S!Kf8sVzBmySl02FnR1J(OqTe6%9w)m#;px%SEdm z2Zh9?*4K9?W)oP(x`g|lMU^=SC8e^AA9OszV^+Jly=_&C8U{1@gK@n8GjVK?`^gi} zUHGCnGiBpJ@CPF9gHRnob|z=zuwA@KMR!Z^%EDpp;~a!_RmVNt=MgT|p4JQ24O^~X zrzk%qxxp}#9_B|Of{+v_t&o(b8d-2^WVvzdS3enqac#^`T&qE+3V4n5@KlHa)mA9GJ zJ6ObBtg+wV?T|Wk54PaTE8vnk*vtHnb@eY6yP3=@Oo&^(Ta+R-HZtI{85$HSFVQFS z>0NZmJhzKz@c)6L-LLC0vjCNd&evYa!BcP zk=GS+`<>%U7T|2OJ3k6^=BpRrJl*bG2z2J_7~q_1cis$i=8NDtPf?_3PDpOq#*6I; zTP+9)FQuBiBmoGjXbvFM0uiqJ2xmPGy2KYAkE7*w7L67R-Dhzl5W^rwE&$_MAjUVi z=_xs{ZWYk;9{JU56W_5dyv6M|ZKd#Q3r>&EWf4mr&Vr|>U$ls(SLhK+Y{n}@!>=Qv zuC;7`YeDSy5HG7e+EIe?mGPiArE2-d?0YP)_C9!vHNkJu}iL< aquukci6>1|+V#9>i9YM=sWD6l+y4VX!oZ0$;Iu zAaG0IYgR3R1%X3WYXY|gj##w??g$*ST94sGfm$+3c?DwAx9YpiBU^!1@I2e!aIIF$ zZYjtVkL+B-3W5{IYBem+%LU)Lxw74Io?C~mz2#dCd*;pQB?a;P=63#|nBS^UR;gEv zJp~D=mJ8cEWFL@V-KbQIT{^L0luP;YL8Tbd%Ww7duud^z&oB#>f>ENZwYJ}C`X%Z? zfnGedo>@89^6EJ=@ExyC?ZjsG*NTtxrh@F#3*IF9%yQdI!F(!x(X;A?F{YO{eZzLEEQ>$IdyOrckk5b9)6MDK^{>rObQn#`1;kvO=>;n9a6dv$q^3YUJ#S zWqGz5KIV7lt_BCEF?^$7?gGoH;T~KKYiMX##7DG-jb^)LZ^#v5`?`h{<`g7D_N;3k z2O4g&eJE@Xn%`>3uz5Ia_MQ3(#b?=}haHE_AZSwM9D7E?9?F#IR+(qt*uQhH`fF~}qalo@(xIsuho^Qepg~Rj zKkEt>!;2$7CrhDRy%#i`o=a2m@$k7`SRuW?I#1uM8}u#JRxk6I0FpEoDQON;675nF z$x;%bQWAGk5=T-J8B)^iDPxk?fy5-Q7hx4~e1cD*V2RKaN&Y1|P+p?%H6lL}Qm{wnxKf;x%XZn zI-B_!v7clN7ab%oU{LWr4B!zs*EpTzj2rSotnrm1*d%Ko@(|d-v3lyInDPf9o}p&r#oBpj7+ET)f3I3eLBpBtKOyL8}l1xxG6(yusC;tHtJ=25$ literal 2034 zcmb7E?Q$Ab7=BJ6u#jy+w{6;{HEJ6bNP!q_tA-{dgd{Y4M3$gfH7;aBHZIUvmOAMr zcnMyG(&@CLW5?g#hWFw4o;P1>8pnYj`=00UykF=2`19{yUjvwf9mEBJnH@9LHe7el zGJ0*J(@D8M*r|%yvz{3Z+gx>wwmH4x7_DM=#|*+RFt%?zHBz?GX{B!Dd?_aby^h8Xs)zXoUSbuwsN{a^6`+_DCwqc zbu4#5z!#0x=vA`xUGw2GjlC<;Ch823`#?i0y~sZb;%q~NZ=B`?FVT6=6IsUjpf zVFe%3vw1mavQ9k~*e<`tRB~)MMvsD#j#pT*0F=&tcfM%%Y%T907SMsnBqlSOu$N zmiq06=~U$?$iC?|4ZCJImc)D+h7T24OzN45^J;ilu`Lx5T%x9+G3!y;pBi@Gq{D19 zHe92H@fE%f;xU!o)58Zn*KDi!2H(;!7>;8cG`mj@1mfO^%8h-q>CSt*>i8-z8#c&6 zm3IY}ylO`S5*unBJ)PSaeqg?+lR!YY)!&`n%yh7O8zDQF+<+u z@2}q=>e@A*cKszLpJR&QJAUn5hIbggH=@1IFv>6<&}JAW7^Z^SEWzhRT7~AHuUEx{z7S9K$*TtS|>o7ruHGGuz&;>31zT> zC7O|C>?4b3Siz6T;U~;vlQpF_ZQjF&!#b7APxoqk=GIGm9#6bL_0+={7jvBokSAY{ z*un(q6CX7$i#*A~_-IXjfiI7&-luZNHkcToSl{r)U)R$z`J(UUE7b4)%yGyJ0>r24 uokSL*dHL?hMx6Y}f5V!Hzk=}x#DDAgu){V@?6PcOPim6BfQ9cflm7q^y4K(T diff --git a/twl/bin/de/matthiasmann/twl/ResizableFrame$ResizableAxis.class b/twl/bin/de/matthiasmann/twl/ResizableFrame$ResizableAxis.class index d5e0bce23283d3513770845953d5e36ac2b49e23..ef72f223e65dcfd2517b9d73ef259d7e94cf1e4b 100644 GIT binary patch literal 1457 zcmbVLTTc@~6#k~2URfxVI|3r0wnZs-P|Br12~C`^XhOi9jqPXR+x#oH zQkgvgr)n6bvzG!Q{~P24T$9;o;zcYiF#qZ)fK*N18ND0sr4U zXiO2^)T`?P1OK29&*y_#8ZR9Z>G!1dV^gix%2dk{Xt>;wg3&Bs4{+>GOOu#cD@Jaw zVx3PqU8b|}Q*0q@CQ7IVVyE>{MiY*tm1!iu0p%hGDM?nBF1w*)}V3?Nx zf(p9Pr=Xvg0bT~tC(!Zdgjg8OpkS0tqSq4$wunw0o@j+CNf`e>AHGv9sn+9IZP~cK z2{&6)@xIo)W>`F!-JGRo=%-ih+8ksN09n#uS(0K|QbQ4)tl6?8o8S-+l(2*c_b~>6 z2ZYAS^5?BXe1h!?_78+e9IZ~vw?Od|m~6%`!e;HZbwh?e!*K=43AP&v4{1kfgy9h$ zTYeflMRCgm*x?}S4^0hU!WkO5fGgB1FW~-YMRIFD(F7tyVGV6qM;A80RmUioy&+2? z|FOu%9?O)NBEJn!;Kox-H%Y&zI{Y1ch0OUqcDwx&-gC5BP?53$+b!7PuuIG9vtXxF zHei?Q8ztN8XiMj09qs9yqYhs>=d7bEeGb9g8)NIU)Gfk?B^vlL@mL`x3&gU)EsPn8 RwP6;$WWAInv520{!CyRAMOOd- literal 1476 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 literal 16030 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 s@C&AE&+m`_O<{H2`2+B(!)hnsa&t<8 diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane$1.class b/twl/bin/de/matthiasmann/twl/ScrollPane$1.class index b56f12507aebed0987566c5d5448885018bc89cc..b5062fbb4c27b39690f03eee00a723df53100b9b 100644 GIT binary patch delta 382 zcmYjN%SyvQ6g`uNd2}M9iPmQub2wm!4bSL-# z7vkDa@MFZAP^bfQ?zxwH&pk8u`kfwp|9*S|I7DDU!@3O}8#bEQG_Yl0+d!+ljLV;W z4-EWN$|UQjQJyC`LvU6K-#KAWvxy|^>|IQ+*+J7lo5O<7VZf}I%drEubauN8Vies( zy)=?ny+J%mh6Tg&ymUU1GK$lL(OS{c8QL9M;!VF;H-UTMMPU$}aVd(M zCXx(Ji(hj$;IiSK)>^_-CI%UD-{^TqN?r>D!yr+`#SLPv{7=10wR^tw)jq@WO26XO zDnqgy)*~i64NH87#99t$;ONplZm_jl|!k7R1DTd*oi!G=xcwn-{!7s{|GsdUJ%B< zY#a;K4C{KOJVX9(Pph{^$vV-cf3#u#)4z#K>WL%*D$lZHj;5Z!ht z*N9bGdxBkh!SF-3W<+D%7u|h}9OX9kXmk`~6dA_h^jNkj>bF$s5%x1CeskQ>?E4=a asUC-cS?Wq)4)YX~fgc5PfUAF?P4a4JkBrNz;Z8$1NnZ<*S7gy;!OW2&sY#!ZcQt%1Wd-;)KM7 zKVbPUaN~qTio}5*fCT&_#2bw-(SB0*v3N#4z9Uyaoxog z1QNCcg@QH(ZHc*I|-xqXx0?G z)A&u?PUAtZ{rL51ax%8@K%tX+)%?|3`G9>6``I|59))`D)r$|tQSnjLB85sX89zH2 z4b$|=Fzb)|!@&zCvwxG%6|8_F|F_42=HFK3cWCfpTuwg^lUGR5v=GUF=gCZrEUraV z$httZ3xhx4hMN9db3MWn7NaiN4uMWd-I+@N)M`hD9dwIlfzR(y3NE!J8Q`vK`koKJ%7&UDNzO{H+Dv&=i?h_}x*Qrb$;( z2%@NUXsIntNL!S$f0dSUDKE%jw>5WYn?Fv??5l%xj6^XTQY<7v7?24-a)x1q4P+P2p;b#`lSe~$!yBiZW&D0Hc&q+7A zm2+Yl(vDfT6tT5>_lzJ9HdiIsGA%FIuslK0kz-hmI@{t|y`6J?GxD}N7UjzSVu#=5 Yp6s4n{CznfR3um65l`mqhnhWq0m`CX&;S4c diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane$3.class b/twl/bin/de/matthiasmann/twl/ScrollPane$3.class index 64fe7389cdefdb2a6819fba4a0ad549836407ce1..abfe2bd9ca181665c5d9dc614ebc4c91dbe88716 100644 GIT binary patch delta 371 zcmYk2%SyvQ6o&tki@7+FXsY#EYr4^NQ5EUNmADcVLBXYv)F6~Fk)(0!T67co4sLWK zcmWqafREtAh$m9012g|WXXbqKGf(=X?tlG!d;-`;%Yudl8#)$k)Ujk>*}#f{MtL5U z-IPN?nphJsUrl2BfDj-!6u8xUs3rISL+FiK+LXWho|fx0&r>0U8NPkULKBuv#fAYlUJx)q+I zD?BaOT%BaM!~3dY2klo-@DAnq?~dS=y8ya{!(LRLyQVPB$|2y52wm3d%nV*YZ%0ta j0J}od9Spkv2Qfzw6*X>CFpD`>jX!Z7F1sq4#>(RtmF+T( delta 393 zcmZ8c%Syvg5IvJLO%rc5#`>xnV|Af*(dwcKMNnJ`im2c|ZG&1u3Q6nMjT_NT$XAGN z1RvnS5Ac87igQar@xm}OXU;iu=Rtea@}J-D9{|=-(xIeVv{=`XAy{qi(yIhscvd-V zwEbpRN0wm!qQ|{3^csOr$ac>!;-xCV-A}j4Ne(uO1_*fp9XS&!Mg$C41a*1kG`X%S zCCPK`IwMgpG%<;39a98H$_oNTNfxcnPOsZJX-1tONWRuIfqA&;J=L!E!qAU)122yK z7%s0;IW&-E$&GxB!ePK?j>TDS6?8?Zy0{+b4DfBpRk&4U~?~6BhfJwI1|QU v4P0uRz- diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane$4.class b/twl/bin/de/matthiasmann/twl/ScrollPane$4.class index 77f5725369153dd8123ee4f5ae957f06ac8ea434..dc3b56e2629516a724e3dbc88d4975900c03908e 100644 GIT binary patch literal 1239 zcmah|TTc@~7(KHsUAio^APALvTeTFW1q*U9J_uf#)JsxA^vO)yu`JonHoJqDpJjrW z_}~xlM;X6aR;Z*xo9>?P^vwBgyT5+__z7SQJ4p;8XCaAv5{tNP;STO@~Ua6)J70 z<@0u3abJlRL#&|lo0@Cuc%V?NY9`SVuHtVQSoLr4?)weik6dln^XZvqE)K%pNZ%2>T3c@F)!TlEu^H;2l6tu6||JOnShEefZ314zow-D~N zHwEQO^$Nlz-{@uPDq3f*U!qH6!veiBNqX`uuyk54lHQ~^{f03@Y>H3?27Ljmxcm*Q z_#MVqiVURbnjj5~6^s(LH71`iOwgU-CMF|?=XBTqO%zYSP7pgq{0t2cx-c6-jLgcg zj8%*qYdxkD=cZH0M5gaaO?qS^)9IO0BqG}oUpB75Hr6p^Y=p)OXNMzWvcWA(hgD`U zL&zXJdqoH4c?ag@M4QyX7Im=Qr-K;gsAdE6G0uo&hYnQscM8?FeOLaDs|uV+CKzU~rp9p_ zQw+&4>T*>CFBs;o$VMJ}Nz7o*#w^3k|G~+TW8M%RmY=l@l<-XVqxwvB3ml98W~Q## zhC*FB4E@!j6S0nJqaYq zIzZAkEV_YYZsi+z?mGs*l4fDp*rF4Pw$?C0I;R+89Yvbn3}Z;OQJ&M=oQ>s9!B27P z4AbY*9g;eLgH#Nx0+QA`($+>7=-35l21{+w_vB6fm~4YiO`qXz8#a6GU!e$6q%?Zsldp<=U7^jADmp2 zpOcfAl#|NHz~h;hms;eUlUQ7wT0GG~bmBpIJvK%LMg}IJNem2(EQ}1y3@ktv69X%l TWMkk0(p*3lj124yoNSx`;&~O` delta 133 zcmbQwG@pt0)W2Q(7#J9g7-#5Vr6!k56o?XH zWZ?14%S$bC&PgmTPAz6<;GTFv(Vmfk&#|;5KRCH4KPM+KDJPYUk%5tc8E7U010&EV bRt7d8i;009OmZ-A0%tgS diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane$CustomPageSize.class b/twl/bin/de/matthiasmann/twl/ScrollPane$CustomPageSize.class index 8f6eb2e19076e89224577f5cccb0e29663844564..f68ae6ba8970ad400265bd8061999309d382be04 100644 GIT binary patch delta 127 zcmbQpG?7W*)W2Q(7#J9g82H#3IN2F^CI-7Ovor8c10;=pf1{H&H;&jE#|jk%0+l3IhWZ3nK$F0}BHKkY)wZKyfxO T$3y!C+?M-SivvG&cMRRAdr<MTn7s$1^W4wa7UqvA8(3n4N)V;x0vZMg~6T(&Cc*+rHJ;$`i3n~Ew);%(l#XxjU)t2uaZ)t{v_ zu|}imXMdD&c1wgtW4KFpZgys#dFJJQ{`&d@z$%_ap&@G`hb0{;9S=-QU|Ak{196j# z52eS7fhj3h4J4&}q~kGzR;^V_4B=h(gLA}Sm4$Hp9glZ9PKRNka^&P&JP6*oywl=B zn>hc~!C*7T=7D6*=Kv zS7y&fCoFY#&<_yhSMzf8#PlHeBHbTMVgxq%CLb)OzYFRT;J2rr<%>C!|nD8jOvG z*AHGFf-Z?}YhyINTXH0JyX!ZcT~~G?KA73EY=VWWa#d0m*6>8fQ-<^?leRF6bqlv} zyMM%yurMW$BoYi0g9b~sv{wzUEhv97lO3w0c6jVG0^&IT|D+6S!_8A`Ss23kGsMej z3)?HS-xKt6Xxq~uiU3JssU#5vCTC;=qz9t7hU;LMChZPM`ItSh&lo#L=p$(iGjv9j zZIk?GG1vEB!dob>c_daaZ}IVc;IpeI^c7BA?mg&)N^Ns}Tp+{fhh^l#1W0~P=P literal 1196 zcma)6-%}D%7(Leo7I9O=k8g4{`z_W;4wCIj4`ARM7GU+|Gmw-ZSJ~R|D%(& zT3*L-UUOHZcI;2$Ku3sS@`xYvti#>IY|-tt8A6q6rO2>Y9)%*u5PMnOE4`^!YK1aG zv|ik+mA2({qFCAAP1OtK{i4ON^mbIfXujpxuI+C!Xlb)fg0?#cB8qSf4ATa#BF+%W z4rY`db;Yd3{g z<4s2}#LJx)ck0};Wvv!t&@fGU=vKQV;g~x;K@&4=j%Y516c%+nARhtICtY8(4J;we zFwQ-XpR_t3P8c#lYt`nFX!*HP!0n$Uvdf?=HPv?v&x37)8!<<_d}(mSfQg3;>p_}r zhj+WVz}bI!hdyL_WE`wc&ufVtTVCSSFmkIBNd_(Z(B*#5qupl#LfM@kP30z?Vw7B0 zcuJP&>Uheq@c+0ngjMFZ*66Kk^reKhk}@6ujg$;EQYe7wSs4k5ppZLp3B&! zFJcxYO27*&s9lMmoDYs(Bf(O#o>`th!|fqKga8;cNu3129qEA_+{L{?`v&=x?TJ3- z8n3j>MI$e@?P_!9xWDq5b}r>yve8Yd70F>DGvLS&M)JqvEOUfPg7vNBZ_OqQivR!s diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane$Scrollable.class b/twl/bin/de/matthiasmann/twl/ScrollPane$Scrollable.class index 80aae348a60d4760a6ac20d6213ac01fcafb507c..83f9149df035bed2a604c55778cdf4f4b3260806 100644 GIT binary patch delta 132 zcmeyt_=8d4)W2Q(7#J9g710GWDv+oEKAhSNz6;v_fN`7O)g<%keetVr^m*~z{tP^G?IaVk%f_g cnSlk!Vq#zglWYuJK$;7vf{}rpfs>6B08~C0CIA2c delta 132 zcmeyt_=A!6)W2Q(7#J9g7-#5Vr6!k56tEU$ zWZ?14%S$bC&PgmTPAz6<;AUiyn;0l(&B(wNoLrQjlarW~lgh@(z{tQ1G?IaV5oi)C a0~?UV#J~P!9tS8z%sI`WR^d diff --git a/twl/bin/de/matthiasmann/twl/ScrollPane.class b/twl/bin/de/matthiasmann/twl/ScrollPane.class index 067871c5fab430639e91d2ad546beeadc45916b3..2ac9985bd5b2499f6579150a1bcb22ab45e3e2f1 100644 GIT binary patch literal 15564 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 literal 16720 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 diff --git a/twl/bin/de/matthiasmann/twl/Scrollbar$1.class b/twl/bin/de/matthiasmann/twl/Scrollbar$1.class index 0f1f7f61589b17c0bc3acca1b7ade0e82d0bb5f0..e6d17e6617423da1ba9876cfa1e8e65f846268e1 100644 GIT binary patch delta 415 zcmYjN-AV#M6#kC7t*&d0u4PvKR*-t3RCLo#&{Yr!A>9>@HH3>zv98_r42uuYGX(uW z7d=2P&?D4SL}x|Nf%(pNKF;~(ocT3=jOy3l$0vYYY$p&y-hzQO3puQt*f3ErQ4B7+ z!FMYQf_osG1Xy@4VW0#Qht*dip`USDZn`u#gSexkjlvn z^n>o%AUe-f%uEti$=zN}2g59f3eA9wc@7;GgY31A^Se&|=9va6sH#|DaLCf;s0o63 zeRUCL(NR2#()_!l3tf|;?d9#pCxqx{zYiLE3$j(pu}?0fvJ zOMb;^nnUHuAo5lFSj3&6WujnX1w|VsGB&cv*;qx6wlQ!Sr3!i z>M44&um~L?YlnP|Smn(pu<{F14@rzolCntNVw9wv*cQexK^{>;u3ur7w2sS^AHklH m{>itJ%6HWF{#T7mzeXBUl$F9XW=I?K`^~{2OHXEyrsoq|ahdi2 literal 1540 zcmb7ETTc@~6#k~&w$Lt6QB>}?Ds2&pRS*HWgRB-vgb?+~p`Db)?QXNX1=RR=^jRaA z_}~xl*`H&KXSPeNgg|VwyJybjo9|p^e*FIS9Y7Wv5d;`|3nEkEuDhpmr^HP&;~pBB zt-Ng+#xA!L*$5Pd_&z`28H1a}%;xUC$h#4Q8OF{FUAB3#$af8~SaDs;OvrUkcU)l# zn<47B+;(@kQ4tJGV+hm6PGXFB*^O^Q?b7OlU$1waKdrJBv zDn@12F`~cDkGye^`Y{!EYkJ+R>F=qyFZE5-p8WP6^=!cwTt-Z&cz{VNjZL#jEmV?P zN|S~u71NlZ!aB9WN*nb(To8uKpPvdZD3_8|am2Dz6Ow19KvNw0bJ|2b&A(pfWq&06 zK3nCo>`HXYs@Qq4s>=~-t_|#{JTf$8D`wuX9NjFg3wO^d$Prv)7`nlDjS*w~! z2WZLQjw751o-z!c*RnIGkK+D4f3dnwqK~F5NKXg>`qQuh@whxJbUi5a#GsP3iKI!- z1Bj-FkI|g|iufne25^<$QToC|F>s9}86&lAxbEq1pw&m2B2Q^k)9Ej0KEcgn^qj@9 zXxDNbj#|U%L%)ynlURodN2|gNe8%k$Xy}~%h)~yTRd=WQ$rQTxs#4aNP^3gpPn+`U z1mhDSxo!)c;GrZD^pfeJG5`)G?Go(+B65Tb-e3-Iv4(dZu{F;}^NA4+JfhOc#5By3 z6hI51&5;x&|8ZZ+pab)yQ)nH<0!bk(QVdB diff --git a/twl/bin/de/matthiasmann/twl/Scrollbar$3.class b/twl/bin/de/matthiasmann/twl/Scrollbar$3.class deleted file mode 100644 index 86911fcf004dab2bc74d2e1c2d12d8278815a2a8..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 749 zcmah{?MlNi6g^p|b+x)WzrUSUm=mn%A3+g86vU~Z;{U7*8tGCYT46~(wY8TEJ zvfFV@>Cd346LH2D{pH3Aum?OXb* zB+$|gSaYKh&~KJo>UsAEi-if|%3u;xv}WmnrctD*K$u}PW0p{VYxDzWQmy|0 diff --git a/twl/bin/de/matthiasmann/twl/Scrollbar$Orientation.class b/twl/bin/de/matthiasmann/twl/Scrollbar$Orientation.class index ad69940938b041c0eace33d88ddd16d062917ebe..4b966641bfd6fcc8210c2bcc4a8e50189043e80a 100644 GIT binary patch literal 1157 zcmb7DYi|-k6g>kA3(J;Ls9LbqR#ACWkSf&#tZfKJ5&}skj~1C=#sfek_XwZ?B*Jc0<8W|r- zk6ZvtQsz}WV$fbS_iJyOjrLxhA=I=@Lpas>e)lf>T)|d6I)^kbgKL9T1946lbyZ#>uQT(^X*(Y{KwoHOXyrGJzu0! z86Fx8i*-{Njq#vs*lpgm=tXr?Hs3M4NY#({G0$6E^z$vpHbuXbo{L_zKJ0O;!);UM zo&qR>4+tmvXL1IA*%YR;!*KmC*tK+rL80bSy}_2*7u*@!l*yZthCsPzO@p7$q^^qb zpgafZ9h!{R8jkIr@zRw22w%)EC%d5|DmN#lqkt_Hj~UYcJ#-x_c%owsx2D$uB0823 zA(YEbOU4Yoo;4H%znn_XRMYGp89j$6uKg2~p*Y(=cR@=tX)cC&6}7Zmpsm;GSMlz~ zLF53E#1DuhWZh&@5X3UBfks5y9g^~B6R^+loWc8%G=>{=`(4{M`L7^8^)JHXzJ_8@ zGGE|3gCYYwR{|3BqMy6rCRSZL^^CkEWC33K05y|cJ%#_1Yo5is3|Dbma>u&svw;Bd z-Iy|IP$lx@zCk&Ns@_usP7rhzO>vcw?>m{i6WX-{Wr9%a1WclxR~L3kJf$u@Ljv2R Xt&`1zyGXk79u`SzBSD`otj;c_HKok(UnzUo zqH*!rKgxJ+hpaCeY0}<%dd_#w_uYQ|`RnT?fDLTOm}1b5%wm`O{s)Wqy4-P!{wKR= zbUfF#+uU2LdzR_=+_zjuMuZ`8!cTe8=FV}k;`F-=%Io?;^=-Y@*wqr?L7mSg$b3{pmGGDP;=BQu6+1q^d4lDNSTEssjl z8U0#=;d_>IT&il#IMv=%F^y;pvIx>DWJJa8wu%_y)JnG;v)1pnO|QY*w#ksv-43^# z+_OX+yi_1zjwsN9_Gs!UxBDh-3K?w@Q3~$ifsFeM$q?B=&o{d&9%79l&OMJ0I_}2- zLpCg_-aauqeyJK#`R5hMWRL?&_4f=f!?4jwXcL^gkeX5P2pYp?xYwS|d%aSKz_|If z7~vlBfMU3PuVcQl#BnCZzAK1A5@}e+4)^;WC0~U432=D=rrR`0tvZhB1=P%*jAsn1 z|1>L^GGzXpbuxlP|BbY>C`D5q#;s9D>B5qafXF2gqXr2JrlvSEzIIMmas{;$cUTlJesjiHG-3z&8?hc z`5GLh0*pXvu$QqS$P&?2+!?{QNQi)^hgfL6k+PSqvS73?Ennbn{xfB+s9bepV+wKl p^GzZC5<)*(eexv@TyEx*ZS-f64eX{fu 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 literal 13171 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 TYTd-f$m-F?C}XtYqS5~c6+Qb) diff --git a/twl/bin/de/matthiasmann/twl/SimpleDialog$ButtonCB.class b/twl/bin/de/matthiasmann/twl/SimpleDialog$ButtonCB.class index 233e823baa8a8fcbdbafb0f9a860e9d95a24ec5a..9b889a37411f67814426c10b615db9c51574452b 100644 GIT binary patch delta 464 zcmYL^%TB^j5QhJ0v4v6uD_FcEph6`4A{t$o zuyJ905HE=uAHX=LkhuB(GjnF< z$A-wv!BnwHDEb3R`b|m|2#KbBVV7OoYm^UaO{d-^82_o`p6A&$*YPhY8zX3Sx7BeD zTkT%kk4w2eGQ6=0;%y}ug2*Qs0?ICNK89)5I7eq3%j|LM4rFZ&Az7s%#Ssq(FeG06fFwA4*@Sb-E(BF3!UB@)8W$-F)-a3kA71}Ka{vGU delta 471 zcmYL^%}&Bl5QWcefkIpD4b~#0=XK8s0ymJb!C=v} z)n|y;dfjf@uh(D^OQaKp0F%S%XC_CJ3RG91Qk4=L%RTZ8 r94KN6{G`{u2=+~YpAg75ruhkQCG2MzT7Q+S0AmdWGIGdS$0p)`fipl{ diff --git a/twl/bin/de/matthiasmann/twl/SimpleDialog.class b/twl/bin/de/matthiasmann/twl/SimpleDialog.class index f3d6fce912376aa00d44f9267199c11a6072b793..b26944c3fb3b1820a804f4c539939c73aae85e60 100644 GIT binary patch literal 5328 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 E2Q20T=l}o! diff --git a/twl/bin/de/matthiasmann/twl/SplitPane$1.class b/twl/bin/de/matthiasmann/twl/SplitPane$1.class index b0d95da88d639c3ddc3516eb260469cb4ac58a69..8d9079b3dbea015dff41ac0fb34cc296f401a859 100644 GIT binary patch literal 1001 zcmah|QBTuQ7(I6@Eh}ZrMFj+e!PK!S9mXd$K8TnsnYd(z=;Pgb*)DdsOM8dE%S15o z!5`p{GJdz41IdC-+J5Kjx#ynmW_8tu!X{)4}&n z`5C7<4pldd5~+IcgziUygPMm$EPGgh=ixD)c*w!^u!21b^TsU8`wRsm>xW$R{P&$x z(bW!ohWe~^Z_FentJfo~BULuIDHAOyC(7$zxG_s%It;^VPw2yw6WUOoiE*E%(lSzM za^^%(UTI)Ev!t$>q2p!KiDQ^YhE5?R02B%)6G9fNl_pWY1w;YPhL-pZ1nlbiAp~3RWjN zEpnD6oxG8u+ge+{z}$7E&*VK!mA1z0i4v{DJ(|-v$zzQw<7$2CvX;6g=a+)x@zfPt j^c$q(WwAl@4DMr--WJ7K!fmRG)U)Yru6a~YwR3*}zXHtR literal 996 zcmah{U2hUW6g>l!waZE=^}AoRMFpze)+eLJhhiH^v65hjJ`U_;yUj97b_e}kCblL% z_yhb=#(OCuA*60H*|~SlJ@=fs^XvDIp8%f0wU83n^px9|#+(H*=}WC$^CfiKgD@~H zsa5&FLPnr)EP#q49iFBFcW{?=ARV-i!Ixv9@ zTTvn)8Uk5roRs%TM{^$AM952mzT)E70^61UV5=R0Og-|{A_SHkEW);t#zQalr97nPGtfTi3TNACSPDM_$`T#zuKI?qk)$1A+Bx zeK}aey1ol<9UTLn+#L zDm3!r-_56qu4pjeQo9`uGeB=fw6nHQcWoYH#(CJOuJtqWX?Aq=H^0n_Me5ELb z70!)LnB@?+DCQc@-o_pJ3*1F<%<_VeeCE_@-;lq=y$fv2@*Gju<0&3z!c)T5n5RYR z(!`Tz8d@8xYnRxbWqM1>8zZLD6?)7>b$Cc#SxFv`XveA^PgL%XRFm?5gxL}JWJ;D8 elciB1cnVe2=%1n4FM|n+lv}_P>}C0_jJ`i*{>f|r diff --git a/twl/bin/de/matthiasmann/twl/SplitPane$Direction$1.class b/twl/bin/de/matthiasmann/twl/SplitPane$Direction$1.class index 1793903085ebfc4c0546ac93055414babd94cb0c..7e8fe2e78439a8a7fdc4f8a4413c9b25fef48fa3 100644 GIT binary patch literal 1088 zcma)4!EVz)5Ph4(ag&CY7ATOWv_K$s($+0E6hM($kSwKDrJ!=&#!IruStHw}g>T}* z1tbo903U^zwJob^qbQcVGy7)t&Fq`~`|tN3057mxg@H#^Y+_3%FfhQQ2`%;PH^U0YA-}5t{kkx)LoqGBFUNi?i{`#~gQW;Z$NOIc7V;YU6bzR9s6JaR4EV40;B(Fr% zni+5I_x4bt7p=b%{biW+z!u1RO{hjH?M`Ed{Q~zRIRrDX+t}RC5Ec#m?dHt!NtYFMXF>dXaY?gocs(SyWsBP zBsi$E_znCn;?1S_;J$kf_jk|zw0}(R>-X&)zyW*O5aDqEH1@w}3!G`m&(@Lljo9DszPvE5-A+Y_4IQyCM7r OtES90(H&{w5#tY|(Ar;r7Ho#X3#nxE ziotQZpZFKv^0*qddQl+NuW2*ZU4I}L7Q0f3cgN!+5xnO|9wC*k-{;;T52RjC zz`QxLYm!yXpMP9aUPDjQmyF3YxO>RGCJT&*n2V%{Yd)C-flDG zPB--dmuh4%h9Y7x9oMb94D6JKwqF@a6xo-mC%;i~D^BKlALM|t+VR#ChT60whIz_8 z2*k&PvefgBgT8np_2n1R$~Sb8q|a;B_xzBA+!xWvACytRngyqfIvQm((O{_0EP;h5 z3~Mu{GZa(xEUYuQvvoJ~^695 z7EO8<^=oR}-s)^3Pj6a(c^U;+^u*@Kdr7E9ij8J%o&5s)L5m!UaS}a5`Ws3#FA+vb zn8yNH?JeRe4Dzm_GNI~_)kv=PUC-w@c4CgzB${&Ma2+>jkIubGo<3m-wzRIRrDOK1nN)YvLIW{KEEaB*>Pkt!Jqnn0t2lb<1E7u;Q( z1P292@f-ME#G6a;!F~4}?(d%aY5$ns*YDdqfPDlORQX6l!yxp^C+ZcQ$a7GGc45LH zoEG6$xvM(m2kBbWKP%4nRCvN~$Ce!5Vc9NxW7sOYpr?^bavA0+qvNpKu?a&|4E9@6R>ij!`?!ac$W#1OB z;i18fS1^wS30*{U78lRXDF6AA5rrzKx&;g+q$>;RKSW^(%Q9DJu~Iy5%jODJxf{Z- Ov1-a}9sWoQj~IWen<=6I diff --git a/twl/bin/de/matthiasmann/twl/SplitPane$Direction.class b/twl/bin/de/matthiasmann/twl/SplitPane$Direction.class index 31398d482e79b8225d956e78172c36a6fc8af2f9..1fd16ed2c1879c184b0c8221defa1c774c4f26cf 100644 GIT binary patch literal 1824 zcmb7FYg5}s6g}&gWFZU@BuyxJkkVi~AudVNmkEUe32GcnF>!|UlQ0TVMwUCWoM!T? zT9}qjGwtMaepILD$_Cu2CkgtntKB{K+88YVS- zXJ8D=(yYkJs)l-gS4t~>QWLq)+@t8Us)s_R=z9AsC#&}~Fs zD^M`)AaKKF-)XnqwnCw@>z0~M6g~5tcGC%hQuMQ5s{Q19(S{Sa)5n%&1--tyxn(a4 z<8WILksEG3bDOS$ReA2ba7w-t?3HR!=mmSkYt!|m%A?hqLh;8_xXHY5{EozSBVRa; zU23_t%TPutUf`~GnmY{6+3`7}#e~(T3U~AWkMlGNSd~`8@#{|L33HD=6*wY6X5I_D zXh9)Az==J;Z(Sip*_mjz=IsSe)Coy*c7Sz((Bz&QDWvnZU9h>m96j`cn)iw(m-7SF zeeCTLRTlUVe>Ot*so*s{RDgm#z|nv(2U4HZ$6Q&0OT7F{nmGkUZ;6+;q`9py^X*nFxJtDS!;#ft5y&>zKL;sbP5)#I(o!Xcf-hI zEt)tl9J!O@Cz7!y-W?hPN;mvgK#j)pg+9TnJI{GjP{)h!Bv821Uq115(!X!LJD{Ig z;v(<4e!CvbF4R}1c)^YFDoib25Lp2BOpP<6A~w4T**K1MUVayGi6wlQqpR%YGxm}A z9mzLH{lbyL6}Fjp?Hch@F;4Jzkcel8#*i-lfy^7E#USw?gHJePc43$n=Uiv$uoa3m zB#{zC@%rQ;wBqb<(0`3FSJ>vb3SQwEEMf>t5Uz8y6vml2A^DS(lE`y5fda{jxX#>x z8<>szo6?VhUgsExczwdsoTPEU6blm2u#Gz9J@h*Q~ z;7juA_zGY5{A|Vye3M=yyKNasYv>T>0ft{Aw{4B2tkFZ9Ie?Y^3+e6TK89=CseM?r w10*D(uJBzAW-vnUm#EuOrr)4UOak*%M7B;cTEbbrZY7T8%SyATQ^mOd7c}juBLDyZ literal 1621 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 literal 5642 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 diff --git a/twl/bin/de/matthiasmann/twl/TabbedPane$Tab.class b/twl/bin/de/matthiasmann/twl/TabbedPane$Tab.class index 3d0b7a47bd2d2556d5e3fd908e56085dafcb41b8..5617798905f376281f530dc671bf6af145876592 100644 GIT binary patch literal 2558 zcma)8T~8cU7=F%vulYoztQKseRx@h~nc0$=D;uu6 zW*N1z;W#<>6+6fHqFK6ZIObR*HLno4$rXhIfjP@oY1MQY)wyCwz3yCaDR$1d z>4Ub{8Uc~?H6az<@ZuGtV@#LsDh#G40xLGU86%JvIuxwkkCYNpbkTA}>BH%kt}nP% z%UR6_S0dq-y{5LP>p`UMM(|6lnPrxUy55+in8LreyqBs1H$6#)|B3BuW!mtE$k9rb zri<8SSz4&9S69qwOEh*hsUMSSI)*T;;}9lecvd0(f1NEU&*|txzmDgT*6{*f)G>eq zI$nYiLs7>HN;)QxiNVzIGLGt4#Yr7&uykCP$3YD0xPeI>HqPoehe?Hzy$L8B4hkyM zzjkiMs5SK;**$KmQn5|LnUf?sDk!koDTQpXkGz_#Sb6Dq+*om~4LK_cI(P3vb2=Uj z)T~uMECQ0S>X%N%aSa~Hs=`p9=?gmnbm74u8I1sij;dL%Y?y^L%PtWwn99!C;F0SO z!t=h|C}9hScru zEzoB@yrUI*5kXQ6#~%cU)9NEV1SFHJCXOJ@QHhUz)M;kPx9-d))F#?8Zz2|X z3z6{KTnyI%+ay4J(gM`&17#T#MX2k%V#s|s%BL`$C#Ep%9C#faf}7bwObB{-9>Gr$ zQFoxL&+53nUV@LyR2)N&a8e-*CH#-$eji^x2k+E`vy+QxQ&$X+(cYvThNxJ$?e%~^kzxEV+*?fJ-da@rj!x1vo&9!U44lz^%Vxy z*BDjbU|fBRoca!@)%Pv(@(p?U`i^_@xT}K$B=-PL`4p#oiW+N1Sul}liqxc0>IYW* zu?1OcAZvIK4-tp=|E_plcj5g+yq|Z$d&I{(jl9pVwg1T`HLw4_1or<7&ict!U)(Uo zCAU%6xJCQ1-%0jc{34oD%_jGwjgo&wO#Oz0`W^e!ALvtmVo3efLV38+f?>IeSxvmd z<|dMS@;3JCFR{Lur;mlW?+F=pw)i&oHOr=$h7hlTPzb3|1ihhXi?lw!oNv$+QP0<% VcmelvlzEu{zTLw^+{1Ak>K{xwEk*zU literal 2181 zcmah~OK%%x6g@Y#<9ITOgCPkdB}wyW{D8VV3ZX8ABv4vNN@;>a!*ddkl7aEKvL}H* z!h#FJU?wWATC3P@@toCIv|M+? z+I%O8Zo#pGLlUA@rm?3T&+*R)rm}|x=gK6oNZKg~?lRE}(?AS&o9M$mf><_JPGX2v z4{OB0Anw(y`visPvVp3dQk8OLtvhNWiJl(ZFG%?uQBxTO95*q6qk^7>?XPazRmwD& zU3%NvwTiCgZ53Diy5nsTMUY-{Jo~~ILO zh3ujBWy{?m8kJa2A%{W|dBIqu94&X5cmOkO#@h6qT`eu>Tk+|mW$Q{vL|Y1>V&x!d zJi2I@qjSsQNfT%Al%U`7JiESF^L&d#s0;Fu^*RW*VoL_*v6#eyAp8HCPPcMQJcDNi zy>+`<+qDq8Jq;8QoH?n(j&WW z;uSrz#!79czGFb@ z00RU1df=Tt>q9@I(!6>ZaddGV&lj#^Ab$gy{4ES#=Ed-JjO4FjBy(gBW1ldj3zPiM zFah!z67nfhaub7c3sZb<5|A*M#tc`!Z!sH|SYW2^rHM9h4cYuhNW`zkuJTc=3E8dN z@q^|o^wb}b= zz1zdnYpV8KVIM;Ul0UnLbK!nr56kUVCUscyEqdfTq~&{z$q$&4A2BOG(ceGgl>E}s zUa8eysX6kXJ&t#5l;kerrI4b|L-jLQbA$yi<=agfx+A}`;%^kj}+*a|?#f{H~fDHv1mP(>e>xme+m zRX@Ti={0UV@*~3aV?TztPWUm*byC3-2C0zSV+ay-4*wp7s1B5LN| zFr=f|W8=ioZNoX#^KRX84imBN2!^w@ieVRxy2XoMbdVjRN{zyQR;T?WEyr?G3`2iu zp4pETX>+uB8aa@+4jsd7)~S>n6%l{3Vqc_7Q4URYwAgl<)nqs9Q*?T2zSgW)%pHqw zrswLA=lNnZ+~l`yOhXFm3epVm|GydJZ*sQq3dE(zB7?wL%EADloqt4|)UvEo=Bb|8{uuQC&UZm&K zM-S1L9^nH3q-h4BX$+xh5<>LyQAv&R&5(ZMp?Ha1NJN4V@tLtR_~PTA zpnMdVNs=Lo0xQ&f6+x_l*NRXkuNV~r@jpJ2gcx}}h{KN=%u+vI{XM)Sfmh!km%@HY zK11LXs<48xBrHu>H@xjwNLW3-cC1(VPKi>Bu3<@TLCcrCErjwVUkknYQ!vi7y`G5Z iv_Om(X|YSh;{oy2FL}*jp0FPB43JhSOD05rdgM11$tQ*Y literal 1368 zcmb7EZBr6a7(Leo7I0Ie!cfdCE5Mgk%a?+Taxj@toEDj|PZ!*D9ax%Wv9Vv!&ncWn zrzWS*{ivqrE*SfvnqUU*J@-D(x#xNAx%~L~d zss&yy>wDYW)F)}WU2hn+Q8#6H7zPgc5m&3++*dPZv&JA5^4kp4x&P-$GI(;C^#X(U zW%l_7jlO63LLt9N>j!n~Jpfr3j6gE_<0x0&Nx^+AGc3Bv)~dYGNV*jKX75%bTuBZK zYW1d7(bo;p_`$BBXGJ8HsTunwx0@F2uDS?CcB&Vxt8|ua;)B}y%XwUVcWh*t8p5Yy diff --git a/twl/bin/de/matthiasmann/twl/TabbedPane.class b/twl/bin/de/matthiasmann/twl/TabbedPane.class index 48467c6c292bd5a580d34ee78cc2847ddc49231e..ce1e28a562257fc00ae3bf3ef95e0d5aeadccf5e 100644 GIT binary patch literal 11199 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 literal 11526 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 nyX94qsVL7zFt>^GG@Zxq3Hhr^KLj_ diff --git a/twl/bin/de/matthiasmann/twl/Table$ModelChangeListener.class b/twl/bin/de/matthiasmann/twl/Table$ModelChangeListener.class index a0a860a49c69870164c11939a64feacb23b6b4a4..16d2c056ce1af70d1e363944f80064dd7c04504f 100644 GIT binary patch literal 2108 zcmaJ?Yj+b>6x}yX6EdB)A*noUiy$$i!8Qo^1i>0a0s*98eSVoHSDG@JU>;Omx_ta2 z*MhqAgFnC@<#L}p(>r4bU0HMHo-^m}eeOAXCjb2V*WUonIPai{3prfGn=^O| zZ_DZ(hvr=|?}@o2=CYXgCFP2wTov~NG3#PJ6jK*-EsKw`xSqww3Yp<{XHYt)u-I(t zTGt!W_Xb@r2x`M!zxKe}^7SRAUG4;(;T44wl>_otHWkwKURx{7H#>p8GwN>XzQIr^ zG@L+N{=`f!op*!<7jilA@*k=!ASaMM4F~ONJ^^n{&T6>bLauj?X4Krb}x(-V@Ko zOE}`jqg(9Yg-H-ynQEvZGoaG=gy+Ts$0xx=TA4O*3gwA9 z80X^nOOwFH^VsEwdPt>iPy!rGWre!P2K)YDlP}NWfzP(Kb?Xsh8=_aX!{%6##33t) zyxCPZVv07-hRk7%Z!&2%=_05~?bt^uc#>#r12J z@Nq;~-bc?Kz}AVdw(Mog-i+9tefC_;;Fwl+$q*!v z_nXEhTV%%~pRvf#oy$-Njp^u&bkr4hi5;DdS;KQZChNC6L!ajwB-jr=SH-eV9^?N> z=VH=uj3bWm2}ySogv+*(lg7A$YNVTWHcOP3GmYHCd<-7;@p~M?4+i*1m}r4>IBWEw z@Vc%4xw+)W@qT27eo7RYoXcvYH^(50-quiy3T=~JUW7F%)Q%$-xDCb4+QZ?PJ)FYjfK~6g_J@HdZ!?o0O1}qy#X=Nl9F2dA76!mr{e%LR!M}iy|+LQdusR+yDc^ z;~z28gnZYP&(GeAO?ZAW+%2AK49$>y10R`^pJRC<Kk-{*>=ydy&b#nYT5B(K^G>_crx8Me^{#Q_YQ)VAE;qj0HSf!a0F+Pn0RKh$SW%&je~?nU5QKWfJGHQo?fr)p5wj<0YQQ3j)@C71D!k zmTG)y=>n?~FQFz-@`pR3WpTYOv5I+tGX_lOr1J7^=X=)d^ag$?FsZfQP@bZ6ow*^= z(3w-to^l>Ab6Yo)-g#BB1G!U4FypisBIsqM}e|hv@8&CE92SEM&5e#TFw3y5uM?9!}%ZCla5gE;Z9lo-a>@ z((IA=&m?yAP|O&v&18>(cYA}rqi(vM;)fZB4L$K}?Uv6wpy}B`px8HaTPH6Ff$7l^ z#|mdL&u0RnQqd#H%cpD}i>s4-yNn$F0Bh~SA>`VhnEr!bIh^5dkukt7X89}4yM;NN z<(I(In2!-0GUU0oy!My?d>-SOzpyNDh!^$e;?fabPC=(laECw&OZe7+uS5VbIH9nH znju`q1-|9@{z^jlFea=G(brF5zL+x4qQEluXn;%Rea_p140|nMuO;lYg#A*&-j3O= zA^YW&!7^5M$>3*@ho;fw1ldZE-%OBC=z42J7q7QNT+>TSbaXRijdVRE>vz=Er>-Ew ze!8w33H$hC93}lAC5?`8K+_(P^dLjHoESOo7;m8!_su5F(w$c}Mjqj#6g=|r2e#{v z26#RSOn}SSGW{WNJE{M~x!gI9_Y)oZIa6r%T(;wWvkbECx4Wpsg?7lU2VrC6IMN2! z%ckd3vyN~tWslD17gql(S$@Mhem7M_BefB$%HeZztgwT D>=>Jg diff --git a/twl/bin/de/matthiasmann/twl/Table.class b/twl/bin/de/matthiasmann/twl/Table.class index 6e1d262dcd533d883dd5df9d013243dc968f6dd7..661fdaa5676d589752f004d529a83a5c10706b27 100644 GIT binary patch literal 2142 zcmb7FZBrXn6n^d|kR~iI0mN2Htrpv4({?p2*fv;fgDJs4U!aJ7ah7DKP2KEvlBNAg ze$^SNgU8?o2B7H8>J(2Ej5sHO@>i$|P68_9HH`J9W6bi-D`O&MFc#Up`PV>8U=VhGX2m!0E z=dC!Qqp)14*G~fNx>02tY(k~jc;UQqY>zK$KiqxcHbWMZ>ISbBRGp1$2HsxBXUlxu zvJG2W)i)#x7X}kD;;XQ5{xq-( z(_Oa{ymF6rM&Z_A`2R>t(?1_^YSndGZa1ET@=1i1S*&Uv9`Yegb3(8^;TFe}lTE&6 z{D01)kuvh5K1WS*$UCi8e?{Xu_j_Lad211j5HeN@`D0YX2mC@#@q=q{CqpPf_`x*; zC2Zq*fu}0clz_bTGnDl!jISxA_L2UPmj>SFI))V2n>1X&1Qv0TCo^(lm=Adpz)LY; zja~-ta>N<3N^daSk93Df6=bobk!B+67>Ry5O^!F_@llLvbC)ECte=qifkKqnu)bVA zl+aL;5CMjbZRaGR4^m%-%UCLVG09v^DKPSS#% zxCK|FWTd8VX4$alBd;+DJXds(CvF8t^61GnQTOt!*?=a*l)!3(d}>_lGRwH20YgJ5QB%)KtC zxn5XFA!D{ETs;+@fT5LU(2VXWr1FJrg>;#`Hc}YX7>1q2S%n*eq?iQfjEY_nHpY+> z@Pxv}{6HB7TPkc1Lt#oIgCT{pwPxUL?6r2iwpmt~sD*Xc-*($g@iLiA)8>xC>EanvE2HDq- z)VPXkbffLH!Z%*8qY8IUmr#E>#10oU9Ly`^>Y=~a3LbiH!)qrwF8p6w<$g>_61$;s z6Ga7^7V*xWhWoq|7Eo34|5&p%78SC=KP###pk<9)0ve4$F>^-{cQif`giS;;Er627 zikOmf8;xE^XFHRP2+P^m}0`LFiqA0o9RkB+-H~7jgRcFfV8a8 zQ!7vy6TgV6v_o-P;d-7&olsOg87Q11ek%<9sQJ1a27F(lgh@PpqVc63Da-M4XYS$aWF$C!9roMP$bL z3739g5DObJldDGrWx9g+FeTvM6G1xy{sZIk;s4|zKCs}-A0RJ-OmX#^Gk=Kd3J3T| zq9uuL|BJY5;d_iaDOu)l+j)ymCB2j}YJs+hqgkwB3Kc5&f=N8Y6;x5gBlhcKM(fz% z-zH1wIlek#!A{qLoy3CA$d*BBYH65`-N%C@p)DSl=8_g&v*!;{PNCnFXNK5`_jQRi z1uYuWG-WLs=QSlgGK`N=OHR1OuiT-f`gy-OBG~HkS_yBO$yE{#;gkaGs@yoP@>|1p hDc;v*JFe2AQF7@|X&YG37Hd*ri}5qIrL3 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$Callback.class b/twl/bin/de/matthiasmann/twl/TableBase$Callback.class index 1c1525f5f1731ca958b15e536c56d4afafc5a990..b3e9e7af297ded9e19c0aa47d9ac7bb6c3524eb3 100644 GIT binary patch delta 146 zcmcb@bcIRa)W2Q(7#J9g7zEiFc-R^EC;Idl|Pzyvgqfq|KYk%5_k lg@FM`vof%OX?6w+zh;IoB(6m7m5G? delta 143 zcmcb@bcKoc)W2Q(7#J9g7zEiFm?kdJ6k}&#VPp`Tn*Y{7#N=+`AD9|g! z$iU;7mzP@PoRe5woLbDzz(4Vuf+r&bhjU_1PEulWHX9=YBLg$gGzJD{pdqXbYz!d7 h*cmv$G$#WWP=<+t8%**r@B(Qrpbka`J_Z3cP5`W47^wgN diff --git a/twl/bin/de/matthiasmann/twl/TableBase$CellRenderer.class b/twl/bin/de/matthiasmann/twl/TableBase$CellRenderer.class index daaebdadf61be707576698e4a5f2170b713f1f3e..cce69530e30ce462164491b2c59ff2fc89da56fe 100644 GIT binary patch delta 151 zcmaFC{DN8F)W2Q(7#J9g7{u5a1lbuxHU=;)O3h12ElMo{ zay|3%Qj45(5{rvdiy0XNvJ%S@^>Y&Q()In5vQm>v7#UXj3b_IQay@qC1jVr*P-d!an#XK3iWi9T7A=K*Il*0>!5=b1ml0e j#=-&%UdJ++kOo&|!Tj%fgc5Ph3Ec5qEoQc|F_w9o<}NLYY46(ND8N|h`Qv?>y}ZM;ghTHDCpgpYs4 zrAQq30sH|zE?l^9;ldp;y9t4VA>uN-Gdu6in`giK@#ZanTe#}O#rXzSebljL!UYc- z9xgJtcV#B^J%+i?wF3qx$`irRjAbSs4%0(X?DIoKl~$bhxH{m4H2I|H=z%O5mLj3l zW0~}Yj`B=%!WIm{ZboOMcv%W+x*aDXOt~fqFH@dnp?;=9OZ0%3Vyl8H>=~H)}7@yXv2&eL~K|hO2KM`!C zHNbF!vK`du1}t`8gLPZAW6X7(V>qvfgc5Pg%lc5qG8rnEq5X@LT1kgx!8DnbHFl`2IXXq8Ibw(%<2YHcHX6F&YG zmm+cC!p8wFT)1%IpCHCg2pmju@Oox;-kUeGyI+32dk^3)ZaSzC?u62hgfV?3vPi_S zZ(eBsP#kOdSY&cLkXj$9uqREB#73xCrVcE^S{ZDVNU$HMSeb`}YICPUu!1C%E~+@= zVGec;^8~mcob|API-!h_fm_v4|^DilVx z#j9js2%F7Py3rt5IAN|p64s|B66Q1YS_XaYT80F-06hxB-0=$Msf?0g?mF^ikc;6q zh1P|c%6PKv9wdXbEBBPM0BrGjRQVDC zHh+Ak>^p4jp~4oh*m{dvtKpu)YgwmQe8aH{&hgrS#h?$c?2mBmPpI3UvBGh0gu^P% zvuEJ~E{-|x7g&J)lH}!Je=UHkOw5~OU~aA960a84C$er886_0o{;BvN|MQ1K*v1Xiegm2V#ajRX diff --git a/twl/bin/de/matthiasmann/twl/TableBase$CellWidgetCreator.class b/twl/bin/de/matthiasmann/twl/TableBase$CellWidgetCreator.class index 3823d90964581b5aa8a34f9ef3da001ba4fd4358..d2e2546c83ba09448dc2b48450a1289aae6430d9 100644 GIT binary patch delta 182 zcmW-aI|{-;7=<m^Cl+uufxX6G&$#q_PrhtXK0B3`>M0*jajjJ%ZOT-~l|8xJfZH zFwDmceBi6^@BIOgBN6ZfmI9%EzPLcFgM7;n7o^nbT2|B-Ey@1YGWh$Zp|()6>!@Rh zYI&ELl1-Hz&NW?nhK-Ka`r(Bme59tNmJFBbDBal%3^OBcZf6#Qg*jl-h8P5n90@RaT$?mI|A2j~o)C3?1) z8D?PkIi*`#^^YP{a1A?E+yNn81X3_qVb5aY~?UL5b>=6>& zU0Je<3t3fM2~67)tr9)QToeZ`Q&y}9L0^y8G~+r}EbE)H2?SHi(r`m#1cvBw4o3Zg V@!wr|Iz!zpOyJv&eoPS9&JX7kBjo@9 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader$1.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader$1.class index b6b00fe9b7809aefc290224dc90eb15c80a47019..7402812cf362c24463dde556bfa662bbaca1f6bd 100644 GIT binary patch literal 1308 zcmb7^TTc@~6vzM5E_-8zQm=p&)GDPQ6+}^~Jb)6L6k}4w=b;^8&33oh-75NK;)4%9 z==bo&1TgWz58#I~p4na2N)V-+ojGS_&hOl2`{U=g?*QhoWWc}`6DF=2urOiLP%<%z zvXrLeFfBK(X_(P)ok0z^?4UTSVUEFC@tkhkeJFTK_@vfcSNJOq4+0S|OxIhY(&ix< z@Sx3Iw-UZ`Do^-^BbIp}ioM2*1g_ey9WF6cO2;vrTxU>Lyp~`XtlO@5)NOAFKk~wm zuX|1ItaIO%UXw*dX21Z3nPWIA&Qgr#rU=(;w_(2_cS@-?S)++>OB^GypSBAyq6H$1CACzm)nwG!jz@M%5W&ob*Y%rX)pm$HkQQm?1%JsYvj=X|@dDf3Tod7z z*Rs%$K?^zDurQCC7H(ld!)*(9Fl^y27A!2vp^8!J!~eHI_Vpga#9sj1IFp=G3i5MxtweXNqzL@FhsX2PtrUx z^Z;ggY8R~h6`3!jWpI*4mCitYi&G?9QYO-AoTV8!hv9^1s%crC~Mlc%D&!@~P=`t!khN%Zh?|VpkO43tO;cq1EAnC(DNEa}cLAv~zs9;vne*qKp5EcLc literal 1357 zcmb7DT~pIQ6g>-RK5B$g5fw$N25AdY>bHVESY^yiahyT%d1+UOlO{}(YSjlHe9#}` zi!*|b5B>mul;hnb&2*TG(oD0vckey-?AeoFzkmD$a0PcYj4&*;MXkf5XxrgohkITv zdhOPp@=aIV=b^9~zT541j|6Xvz^ZFd80LmmJaD+{Z#DTFzZ+TWJAvbEF{p$ZT6JpD z99A>D%QDriIGz*TW2lu6Q&`zxP#S()7+^SJA_p~(Q5-d)VT@t4EEC3?jwc>>JDVbi z`!f`qev7*sJaFWx)1V@$Gb|pWzf~vd`7IHxIo`VSRuGx8U9t0+!buG$7^?p-f{9a@ zX3%-7CBo2JVpuzz6bJKOmZZ*@n88_6Dxv(`X-C_!N<_JY3mVQd%p6GB#6?Up6k0Ct z>?BS}Q54>j@-aJse-elnQWDv=Y@#CDPEcDJ7eOG}X<4iu@AXp`OkBM`$0rs_7~e*I-R}l1vFf;VHDj6i7GLsLoP6=nYq@?% zzFia1w%=wjZO;=y!{uQpLJfBqO2gC`bUsPP76rx>o9Bxb~njF^F|bXa*b1J`IaO3(FJrW?3P aqe8Bd7XwVkd$+Ny=oBkqh4$nX(C-gjOCeYQ diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader.class index c2efc08fa46582d09985db4383b21ee08b589ba2..329cc810dfa905eec060dee152bb68fcc09a483f 100644 GIT binary patch literal 3268 zcma)9X>$}+6g@99>CQ~r00F|1fDj`lGr<9cs6-G5TXcd*SlzIbX_AJXo;cGJ;zq=M z-w+iS+&-X|RZ0~E5KBL3QEHX`B1$~ByE93k6;svky?*cBbI-e5PyYD(ho1o4g3l6I zfL%!}#BLpXl8E7c*?Azz;XzqFB*Vi=?874o+yOJeRiDWBCy|3Cd;4V=NMaDS$Q_W= zgGo5Z3yLd4L53k29<4X}B3aVS7Hh9@>=e$9_ zm4=G8I}pBU!JCdJsnqMAC>Y(YYZbd3vsAK53T@e(mC2i)H)xxsyy?0b?~s$(V4F^1 zAZtEWD0?k|W+yQyRBBnKaDAlG4ztg()|(|uMDMg++gqd1+$M-J6L}BvtsOMooMUYqwp>qP zVRR7u)6Ta0sbmdPtTFNiffON!OxyKno%|G8$Zu%4+T5@8aS+DRL9daQ7p3tlD&m;vESNcJG^^cB?WIjU=EuG+K@7k#s;QG zRGL@Br({RVas`Om5d$q~HSi3cHPDR31{Ptlj^_+Kj~5KQC_697a2ro8Qv59Q3LPe0|UqLp@EO^v4KxS z?*uv&QvaX5!u%-V^<~d1&|mf9n2ck(1DWk**Oju;@hM{vr8FgZ#~Vn?H6{IWm=h(& z&@0>+b#hg-6=qIQ-7#1!91^Yyndroe4yB)qwPr5YWjanDD@|ceYjy&6+y%bef+$`U zTsE9a%jntG!_LXh5Sh4Byf&%i{ocU{*_qmX>Lxh#n9|8(d2>Xey0yDo+ER>N zfaMfLFf8$zcB!XOE(I08wXl28vK;EQN_E%gqKfJ;Ah>b<@{4#~#|~dQ#syZ^3(nZFHS$^Lt|#T(&-s0bTMh zrl-nD%k~>k*6g#K9o7hKEQ?Ns3g;^jgn&;gYnj6|JhOk&2c*lf`wv<QrhB+9@7a;bxBY6o&Q`650{W)(&I7Hi``Q4T2E@%lJbDT;GZnA$*3j zoK>ezL;seG07#Qf?bsyc>WcD8bcD)lC@tKyRO1=w6Eu>ts~tzR_Mwl^5J-gxJn}st zhS?26tfQ2P5o?7IIe{9V4+q7kW(L7IV>r+tEquX(VtbBThNyD9`n zLW0c^r0Py09*dw;CnmM8NabtH)4rKRqdBBupdq9&k2Ka+XwZe1Fo!JG3X63W7NwBI zf(RDVPC}b8dUBRmY_7#@(TrbIbr10Xk@AW=}ioV-}y;d>Z)7Igh#3kgAzChWYL1 z(Wr0|#@1l9^ygEg*vPtUCqg^#D|3)p3!yWVzc8nNr6(`q2JJVrX}_bL^GfZHNuKSf z5beM{$dXqzmZJw-i7k|Qoy!D{>9|+NHk}o&bZoDoTyMq8t0*g8HYUQ{G~w`|zWzk5 u_SYn*8=>7Q?4V{9cH$<^&Gg2Ncmhk}HS9(E$Ry5xGM>OHrkm6o|Na38r0$#m literal 2620 zcma)-+jA5}6vn^KZe}-|AtWm#gaimN$X<{Qh*1e3B-~ba5eNpsYiGBU49w2Po!J@hkszObA-l8Slnsl6k_nuw2BIj&1C0#W(UALPx=e&|tMfmz$2Gg#?U>FC!p|0^PyKRjcYP^2=RnSk6NDWdvUW*;3R#r!8sM7fSN| zdea-5@f|0rPIz~0TwqV6Q|mC=^qA#X-U)%x%wue`vjXwydR28n;0Y63(33(8+f8gm zzd$ULolRhez=0^v)|Q*%H+Cq60qoQYLjr}z5NvXt%+6|#T_(C=rueqU#0d5>e6m`d zmbN`7D>nrOGNp&ZPhWwpCCgD4nzcFA@Zoq-rFuo$v$A37I|?V`I+Q%rql2>icT1gC-J4rZA4f2^`|79~oj3 z&)|rF*IUi0ve%%OUVZ$!gg8BbpD(P`%l(0YYkV18!*DLQ zj@>_VxdWqorfCdg8J&iQE@K7TjV7Mtyh$-iU<~^>vL>)UlrM19Yn{2<$o#;UK*-RO z#z$?=oh|1a@}ctyT5C2VH?)S#21ZKH8Xptm6JMb}unHBp;L{FKX_XAAo)xXX7&@jL%^jUtouE z3wh&9pJF7?4=HwF7-w*nyXQ%BjyKVP^VI1^%)E#G1SZaEz+wwHAt(H~+A5~JM0Uv%nvzk|0P1pb8=_$zvhHD5DGpKYNg74QxuRrPhTxO(_H z*Wx?MO*Egm5unNjYLJ<~quaRKhHD1Wy-CbtA;jIs@qS^Xf1+S}VK~0CK1~M}{ilT+ c97kDy6S#>Q@6zG86i-rQ9Pe^|fb0DE59{4GUjP6A diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnSizeSequence.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnSizeSequence.class index c423f178be5e47133a16b83f7e0fdc3115008dd1..a419cd208d4e047bc202df17ff90294bcb9e03c2 100644 GIT binary patch literal 2439 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 RW5QoUPg^0$TrfU>|34!y9)SP= diff --git a/twl/bin/de/matthiasmann/twl/TableBase$DragListener.class b/twl/bin/de/matthiasmann/twl/TableBase$DragListener.class index 6512d349b124b8fc0da507fc0aa051ff8975c642..b39774e6f19ac571ab521f53d72a3a80f797adae 100644 GIT binary patch delta 158 zcmW-Z(FwvZ7=-U{YGP}vQJ*`46vPb_K@jW;Q9`klJT%2Ux{ePSz(w3b{K?CGcW`$> z1ff5_cL1=*R$-~Io|>;v*i7Z_KqyXwX|GQ|T4x827sovI#(V1tx-&0R_r|sL?cUkP qNT?=Voh5;g@F|d{1c8(dVFnqgFptcTb0fhbY5~p6c}Xa-lGz_L2^q8i delta 154 zcmdnTypLJn)W2Q(7#J9g7=+mwm>3zfCI*O1&S&JDEXBwx#?HXP$RLoFSeB@tlbDyT z@1K;Fnp`qb;JGLx1CM83UTTqZPGWI!YB4*5AR~h;RI4;l(xoUd-6ylSBo(NJjgf(o pff;BA0|U$C9!3czprPChJU}iJ12355W8eqUTtH<&>llRCH~~hm9l8Jj diff --git a/twl/bin/de/matthiasmann/twl/TableBase$InsertCellWidgets.class b/twl/bin/de/matthiasmann/twl/TableBase$InsertCellWidgets.class index b16cc52d2e278ca10ae9ac004dbf248235364296..a37bf80fd8bde916f24e631ce9500198818eae90 100644 GIT binary patch delta 509 zcmXX?%TB^T6g_u<4lT771r_lvsMH5)bmfxxTDjB2l~o!8X$sP6!b(5D4fab+d?YT2 zYd^|(2gzh+&bf2XnK{!>_tWK{->*J^T~u|XFlRu+yu_k`1uRRHB+3%2z2~b~qwP}m zGzh&;RP%iQqEWx~qL5&o27%Y9`ED3`On2fdk&pXi^tQ6&2ZWT{Zu?z{3d6%7>clPD zkB>y%Hj##I!hj>OPN>AL$gwUzLCE}@tM;ym4Qvvs!((MzAlOa!!L9mka9cgQZhAM7 z#Fo0-73JQOWt+#HM*ZkMxQQCAfZ%Z5(FuvQ$~j?nXr;f16Dlz&J#yF-2Pa67ZL5dz zmk6E)GF&wo?J*xzob`8*^9k`f=o#TvDWToLVr(kRx>1brP8i3;(BTqE9)RV%fr>Mm z-$;BQsa!$MOQX;$zk-mDXRtBoxtsJ%b zTH6#MFjVbFo|g}Xz0UrP-Zp#Jx|P331i%oIA;K@ggE<)iL>N4U;)!*?%c@p&)%r== zX;v3REHf0X^K>kC+Us;Rb5A#icM=kytx5ZXXM8f!Shc_Tp?%C+bq2Yq>)Nm}Pz^&f z7@|$x(1vD18w@52#06)xL@4$HFVm)Nh8)?=jTn6H8q%6|jttrMQ24+i5yw4!1E&Z; zA~r~3nK$F0}BHKkY;6I e1Jmpb96%W+22L=^#lQ!oxqvzt8MqmE**F0}N)=B4 delta 159 zcmaFN^q7hF)W2Q(7#J9g7zEiFm?lm&6Juv!VPp`Tn*Y{7#N=+`AD9|Lz z$iU;7mzP@PoRe5woLbDzz|Y7aJ8_0=7$bwIcWPx)eqvEdaB5;va)w7@UP?}C5gQ`| xBLg$gbOr`yprNb`Yz!d7*%>&%G$#WWP=<+t8%**r@B(Qrpbka`J_Z3cP5_7M9nb&( diff --git a/twl/bin/de/matthiasmann/twl/TableBase$RemoveCellWidgets.class b/twl/bin/de/matthiasmann/twl/TableBase$RemoveCellWidgets.class index 6e7fa3437efd7dae845e8e75479564bfa88ae31c..02b5a8d0a0fd668b19a134f0ca1e3437e36280a7 100644 GIT binary patch delta 610 zcmXX^%Wl&^6g}6D$MGX{(nr9}qfkO=T-vmur4S@G6(AM}2~fMmO|2-YaiYXj>Z)Rk zU}4RQ&!|*DVo|YT!9O6rgo^9X#dyv=K6CEz^?a~D+5WGK@8m78%WK3|M#c?>=iGuMsRBNk0v{WJ#UL`^2@OdzN9qdOThcIzh zd3sH{uwc7zuxVn8&`4!X{ni|&uH%M_d)Q73Esr4k!BNnRg1Fm!vEL6niHZ9hCY7`4 zU_rW1N4ELKpK{o@2s1m+FFqMbMWUyM$^gtE#1KQ+*6-H*NBQq_*VACFi=%XMGF)bpLMLcQp=)cir6Sl-P zc$3Bz%rnY@R#4`pv$BLL7Leo5n98QgzKi_c0sTeU#7+Jcbv|*6ISosg=6#XXf^SHX U@f@1$kX@PvYCNDk*Biq62dqX~mjD0& literal 1290 zcma)5T~8BH5IsZNyS8khpi&D(5UaN3V*x({h6jn5Ca8%u_04#@y}`xpZnL|E@KgL5 zCa8%I#wQ>APa5ZL8$x77A9nBT?97=nXXgI+_2nyobv!UILa;i@>dGj3>&UPxJDS1Wu=-UpsxzjvU`32re8}Rta;vN!cevHaYa6<2lh5VWIku*jkH_-u62x3qsz6 zfeSgLFm57?0wGn^0pq)lr=In@Z56~-2$Q?ME!~z39NqrVnbrikxARM$)rkpbWUuEQ zac;HINK8MY&0{YLjy7v816K&Oa|Njk<`HLPQN*-~8I)P2!+1`Fa$?Cr)@BY@F>hdw zFnewl6W6f7^A7%41D;p%5Qg|#;8frr5~#tPY~Ss7dD^51ONqSxA_ZY|&`;baVKFiJ zWJ^wq!UM=RBWb^TDtmE&fhEFpQo94vgk00_2e#UAT;@4;g1Vx&onSURPX*hq3`4~m zF>&T7jIj@K%mlv$$3VQsB-^I8IqM=W@kzLhsUgC9&KK+}FMmUEBV9@# zqqLDJWxg}qG0alt6J|AL3L0~Yxj?*u5E6OO#-y+@BUD^tYk)JX!HBqyN?f;$8*FKw zW!%Iq#uAKFMGa}>F|PNVaqIkl6!a4_28sq2IboSyBUpjO=K=>4Z}}?QMLyS9j&&B` M9?Oy8^S;Rb2KPlxWB>pF diff --git a/twl/bin/de/matthiasmann/twl/TableBase$RowSizeSequence.class b/twl/bin/de/matthiasmann/twl/TableBase$RowSizeSequence.class index 09b8857c5c3027c228460317affdbb266e93f2c9..99d54df7c2a2505b7186234dc236216bd167f2dd 100644 GIT binary patch delta 476 zcmX|8%PvDv6kYp1&egiOTJ`FSDyrg{U_eAdLPru!OpK~dxJlijZHP$|=?~oa0w%^1 zkHo;li2o4(AcB1wG1+VHwb$NjpPU!*D$;M?PtO2mF&2P{SP%knl_i2mV!*O867bX&5y&N&uD2)87>nha zSH1k8$sQXPT5JR`WFw7X3nMm0k@4H6{gv^Ek;#p1v%Xr`EwO>NlOx1^CtfEw#q!}% ztt$D74e9P5R0&F*!vLQv_zmPZYBy&Zhz)`qTe({2T4!v{j^Bf_u}5gPO_9y9UA4p< zOfiq3SU?+d-8{f@?sYP%EL2CBNdsMo{B6D9%HU>FUyjGF(VxA89_2vM2N;_TofdGp;p`*UOBWnbkg1(S)M|bobR1AF^2>}=^h@n1VP%b=}022Aw@_H zD=Ec923apDC1UJqy2s+2vC;0iT>>?|ZCdFQ%$ny(lFu;jN2V}Wokge>D5?XC`HatDU#J8*KoU(x^ zV_MxDrIp5G{?js;=P>d|BR7h5B!004KFV0+Hvh^u6pHdfOH3u?vCOFR9b#hv_ybIG BIqd)d diff --git a/twl/bin/de/matthiasmann/twl/TableBase$StringCellRenderer.class b/twl/bin/de/matthiasmann/twl/TableBase$StringCellRenderer.class index 4dbd71050d8cdd9a355c27edb5b8137cea30a2ef..463c6487d4769da3b895a4b6c32f32bc248460f3 100644 GIT binary patch literal 1947 zcmb7FU3U{z6x}x;Gfg^e`az3O0$Q*pQy^Fom14D|K_ihO6R7sZb(>t8VNE7=GNItR z|HcRPA-H_-2l$6n9>9GkAx&wPT|DI8xo6Ja=bU}co&5FUk3RvdU^|ToTuH;i`+8Z? z#}CrDiVyYinqEHA%g1{8B!%l(P2&bWHL+&mGZUW+7&lzs4c7$Xx%>lxM6p#@0-1{I zt2>?MjtZ)B$D?JY(yB@Cfec)I?i&+f!)^1O69%roTU4HRPx*Bfs6fCf`@RZ_o@}=j zeO4-URcOkP2-$8*-!FvwULoSSDckD8QHoW8wA|bCo>m*G$qW{Aqbc;;vj4EPs`F2U zuZ{xej`0^5Z>vyey&*#>a57geS02g7vfxR7x3IbMNY%oKH6FC~1w@&0)mmPs=~JkB zgqb-C5SZ8{ZRF?dN%~S+LdV`T1ODuG&rqJP*b;D-NMO%+Lv{e7BZN!a1%uf8+v&Q zr%aSA+`<kA2Rh2R6e8m z8ZvOy4;|-(S_I{Ydc96exnTWvRVTbzR=yPIcMbXE?BL13C)U-w#=I1uh&8$NS0Th-2Kv zQE?BuvohBBy6yVt8+>d?w$j9R0#`=`J`OFg{01<*!!P9oC>}qs26x^OuG2h~5aSb& zv7bTM@h)O^qKo*iG{rE(bp{Dy{zk(12PxxUOd8KIOS{#B;RH_dB=kM&Q?3yiqs_3F zpCNI;l-5?`1(L?gh+)3x)o0L&oyGz=1kNDa=ekcH#z)G&^gEJW7_ZTpF^rknjrDmGcz2-PGW|7D z93<5PP7MLYK%phPNB3z0eqss+_pH5erVDe+&dyQvu`Roc)Ne@7vCwh*7di~Jz?_9? zo<1z78m3@Xkd*RME>e81u>Y(B+xFf8*)icQBgDf`< zd;SdzVBs<>_yPSJJQgqmGprflyOQcS)YA+LOIPRdopZi(&h^v3zyATiWi)go1TM8? zv1r%-F4e{R0^>$#k%_fmuoN1^?4Rb0$F=& z%iXDWWS6O&$xnt*+N$@US5k>4aooTW92Lj}&lCcu_VE;$R%NjTt9D=u9LZO!wTJd2 zyXe|pySTRbP&R`Q{}r6kaa!QOt~Sctz*(FlJ&$a6AlDuUEaoR5jEN$*lHzvJz-!2p zQI$l;_AUAOKzdEqyf6+ju3|E5q~F^X5LNcJ*>eY7kNs+e1Lybl>?x654CamcSupGaAKc)CA6wk7~71m`Gz}6c%#Dz?--lv3a-GcLJx!IB9wp z8miE@4ZNfDYKSa`RkD(S>v)#~#>gw4!$qN!71#mGU(8Pqx!10g!40hFcuyer!XYzo z6J>!JtG-gNd}dW@m2$nZDsXjTU4Fcc#l6wEugvYX++oEPyszUHM{`oxy>13R0NFms z%J(V+u1y~7edBX8+5N}-?U3YcrxkQK2_5OQI{|mc>08p}+^V*U1_f4c;5X$h$0f5f zqxUq*HyLP`Xxvs|U5J;b!{rr0BVDu}K3g0hr9iIp+{SQyxNY6;eX^u>i zzcepcjc;CEd}jDnL4qe>)_j7jnH<6}Q$rm1hN1)x@i~VSeSSnr`w1ECXUu57;AP5< z$PM#2%r9;~j>eG7^h{8unM+S_Y!@l3q}s1YYrlmEha;;PK_#|;6U5*^;$)0O;3aYmLrf+#W{Q!SDeG`xZ)gYJS9~ye8iI? mGlx4^<18d_H;nNy?(uz`R%zY|mX=|fH&7>A_pyObaqM5w!pYG9 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$WidgetEntry.class b/twl/bin/de/matthiasmann/twl/TableBase$WidgetEntry.class index 20615593cf104892b43c8612f66089dd58696eb5..af343e9c61ad383212ce446d2f6db5a4b8dd75a5 100644 GIT binary patch delta 284 zcmXv|yG{a86r8hg?`7Gm?g}g-^3YHS4azSV3ln>56E}p!Y{Ak{`3;-<5wu#Fn7{{E z>6iEi#MzA&XJ#@pC+BR`MzucoA3Fdu^y{dgWzaV0)or?3u3b;=1B(FG;7l-f=Q7p?J;8*s>8uw`Q< z&$p3#l?xgD*IqD$$6r7Ms!&8gqfQhKPmm9&rsTp=lXu7)g@;3;E=>K6BkH2c0zw>@ ad85Q8eDW!e7{sV)pPMlv)aaa48Th~NRVax7 delta 308 zcmXAj%}T>S6ot=CJ2Oo>)l?f(e^M)SQR^brR|qbA0(U~eL4^>>&&HKcATs13x^`6% z>;w2v;%&0H=bZWOg)?ih7XI(w_ZGknCJGMW(&m%;nFif1VPW%8{Xt_JE<1#4dlA$R z~;N#q2vG78~d< r4i5HM~q%b0elRb{XwIL7_pylNq`W?(&ejAGw3loMFjUBU_~!s diff --git a/twl/bin/de/matthiasmann/twl/TableBase.class b/twl/bin/de/matthiasmann/twl/TableBase.class index dcec12e7adc219ef894f2ae7d2418e9bb8afaf6e..fd127bf1f6e54ab047d70a289fddfbb41860ddc0 100644 GIT binary patch literal 38846 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 gJ+IloRJ!cuFGHst$2^4?(F^NdN!< literal 8072 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 Putb+_W0#ni8xs8nJKZvo diff --git a/twl/bin/de/matthiasmann/twl/TableSearchWindow.class b/twl/bin/de/matthiasmann/twl/TableSearchWindow.class index fdde292c89bc959c338943552ef169675b0f8864..b97396e55f8ebf8c536414dea5815c2977c0e1bf 100644 GIT binary patch literal 7025 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%0Dw$%8p^g_;?Jq?nVV=yQ(P$q02;D0X9Ga&}`u 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 XW!i>~s?X2fTJ@`)C1t#pn}7cY*l@I; diff --git a/twl/bin/de/matthiasmann/twl/TableSelectionManager$SelectionGranularity.class b/twl/bin/de/matthiasmann/twl/TableSelectionManager$SelectionGranularity.class index 242596284693492e9f37c4a738c2c3db044ef349..2fff15500d7cfe0cbaedeefdb8194624433adf5d 100644 GIT binary patch literal 1307 zcmb_bZEw<06n-vr6uOQvHg({1o1(T%L8g3y5Eg=FNgc_Un8i;QR`FjOq7$ZF8BC9lU(ENCQr zA~kYREJ>PI@svT?Z@g(TtTb)c?)Xk$y!5yjy4-X8j|}>*5Vluy`CwoV7^>Eho$qnq zfA8=?j|-9aKe+h=-gfPY{VOhb*Y+}#hbf08hPhhZvM8XMY3*3A>-4wtc6P6k6YdTr z!kS_J2X{)Xe`GT(T8^;yhP}4!1vwJxAWq{Q!+~KP^AnzTx#;GbzUPQ;$(%irq}A_m zw?*ZbMIA>~1n&`?3EmsD%K@- zYy>)+h!Wn-F_JyXM4sGtD2GWke1_;LVgaKm0W&}MgGAvGP3xgD!hG`-Oh&uNE*^j| dsY+R-VGy@LvJmbg6VL}(B&w0N0u%9S>JK$(M|1!H literal 1329 zcmbtTT~8W86g}eti?}MKibd_WRzM5Iq6&F|mc@pD)#8Ju zO--Nsqnh4XsqBMIny|_2%$>RC-gEBU`SttT6@YDQ>zHELIT85|_q>lb?{&D8dGE86 zKjg=bu!JL8p52u-E_qwHYd0HjTrT?#cWrN=Bg8Ow%FlS-;j*2t%6^9-bWne1F_g{8 zf)^RWm8xk{sF~{iQEjcUYaUg}+I>HHxN%0$oFovYv6LFKAIoXC_t}!y`P=@t7eVP%!9uqGRAG))=O_>+(UX z`)RNRs^qRGDN;M%sGxZ-3Usl~mCn1_+m?1xdtOnWY%Y6rHCT6t@ z%$+0Q8w(-dSPcK5BW;L;)eH@>Xq{u}Du-)h;bW=S!sX)Bj_xb=ljuBlu{ vqf7O7RE%|seJwLfJ}Or%!Lpaw_zCuJoQA9)VG~>a{2V!jBs@bNg>vc-4sB6c diff --git a/twl/bin/de/matthiasmann/twl/TableSelectionManager.class b/twl/bin/de/matthiasmann/twl/TableSelectionManager.class index 368603a06541122b79f77fd7e549f43ae2ae2b46..2b9a78a12db207c6ab02bfa0e6821b95dcf85e39 100644 GIT binary patch delta 290 zcmdnR*2OM%>ff$?3=9lL49e^b3hWGu>onZ(q2JoEBWi=1;3i;Gi>85soA zQ%izVb5fH_GV}9%^HWlD7#R#TG<_xth)CsvxcVW9Nja&gN~|~fe`TD=uO-IFAdr<< zmZ+bTn3t~apOghOhLOQ;qJZY)1}4#ZHbw?U1}3087#R3i7#Y|Y*cljrGzSAGnC4>O z2GcwYykMG-fgel@FbINaAqHVEEy5rQrp2JNID-V3FUcSUrlp~@43w4y(Lj5}<-n9Y Q11pf`0y>2mh*=yY0Z`p6^Z)<= delta 210 zcmeBT-^C_y>ff$?3=9lL42tXwOpFYg6K`uWvoo+vUce-}vH3HjFppYF)}bRFaz~7Fz~W4GO#kRF)#pWb_NbG&B?$8rnwn- zz%(xdADHH65CGGH3_@U97)pyUh=TcI4B}u~0!m9lX(z>% diff --git a/twl/bin/de/matthiasmann/twl/TextArea$1.class b/twl/bin/de/matthiasmann/twl/TextArea$1.class index e7fa4ebad41ebd84fb373563781e12f18d3fcfc4..46bd549058aa8c27de1086349b183965ff37b3a1 100644 GIT binary patch literal 1113 zcmah}U2hUW6g>mT7FY_R)V9`&?P`IoMT{{q7!7GKZAvvM8y4udc!NA2y3!3FF|^8OyJ}CH z(j{=$lbw)0?bljmZP+^#gXm5$P3=j0_`$G1GFZ|jh zI0~`GfsM*0!2~M%2F7DK$OW@km;gwrgdDa&-6rqg<{@vPh0VJK2}H@rjPPdrtNBUEaSt-Ja^j8URb z%b>4}<@2hTB*o}WBcn!?q{pPkY0p&cZ(!Bc6U078PFY%$ANv3R literal 617 zcmaJ;T}uK%6g}gbtJ|8JeV3Vm4`$G24-phWL_uH$Ccck4>B>3_`%zZED(C}x=m+$p zqB~|3JveZ=bI-l^%(-_yKHuH}>|jktj3M6^cAtk~*Wp2*OKFFauSkVz@ zuzLK4+b)+K`?A>+tx!jTA^VHgA}M*(6$}X?3X0prTOCKdPn8FbbizZ1_0ss#jRr&f z*lUXv7}6$mBn@cDm`K55&`PQxQ+1@ci26<8*T0oyt6qz{4emQC9)WQskD)O3#bSlz zX?`RPEMQ5;B13N6Fea9jko2|Zw?s|2{LYI)2II<$2sm}rUeZ4+-BMd4y(hBedVwQ5 z=OXNSZ3gp9O5q>7JP1U90?n$CO@LXJ8kxQ=p^0tC{~D3-h75xe#O+|ux46e z!;I=4AWN}HJqn${EO~}GSRlWVTHP4$YGUyoEDWq Lo^DE=;-m8gT=9ft diff --git a/twl/bin/de/matthiasmann/twl/TextArea$Box.class b/twl/bin/de/matthiasmann/twl/TextArea$Box.class index ef3e08ccdfbd601e338523d6fbe2c142d4ff9942..a6dbb0582c4a42e97b4244482064ebd21ba7ed34 100644 GIT binary patch literal 11209 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 literal 11756 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 K(0*rr=Klk|uO`X> diff --git a/twl/bin/de/matthiasmann/twl/TextArea$Callback.class b/twl/bin/de/matthiasmann/twl/TextArea$Callback.class index f288ab9a310339fe951ef4fa8dfbfde0b9345724..513d5c9bac9239f75eb62a9bd196c4f7ebce61b5 100644 GIT binary patch delta 130 zcmW-Zu?@m76h!ZmU?(AwJU|AZB8U}IMHI~N6In>Xa)A+hcpVA`U?>ZV=H4rwE-}%3 z)B6M9j9#PG*vHFUYILzboQQf7=N4J-L^peHACr?1Y#_`gFBzTq+jw0zyFQ5_n&GGj ZqR58;E22b|t-$WT3TYnI)W2Q(7#J9g7-#5Vr6!k56z~*c zWZ?14%S$bC&PgmTPAz6<;GVcq-jb1l!#Oc0Cn+&Gn~jlyk%1X#8Uq6(&=6JzHXw_M VfgMb8FmM8CE}#lVAj!kV2>=3J7t#O# diff --git a/twl/bin/de/matthiasmann/twl/TextArea$ImageResolver.class b/twl/bin/de/matthiasmann/twl/TextArea$ImageResolver.class index 9d7fb48f999ba1dd0ab0f8896104a8edbf59b4ad..1d41e22b2cf77663ea0437045d5962300ee88f8f 100644 GIT binary patch delta 135 zcmZ3+w2VpM)W2Q(7#J9g7N-fUMDN8M4 zWZ?14%S$bC&PgmTPAz6+5Xed_OVrOv%uCnzPs&P7E@5PlnJ6Hm$HvIO$iM_Nm4Shg fg^_`ofd$B7VqgW6Yz$mLnhU6ck%66olZ_Jqq3Rgs delta 135 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 M@}JUc`4UzC0VUA>d;kCd literal 5235 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 diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LElement.class b/twl/bin/de/matthiasmann/twl/TextArea$LElement.class index bfad1ee163a71e228d91a1d27a46f1e13faa8ef7..b87f75dfb23826dfe02a2aa5307fab15d0514bd8 100644 GIT binary patch literal 2635 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 literal 1328 zcmbVM?M@Rx6g{_JL(5ha0TC)FwAwC(Dxy`3AB1RFtwsZ>8vi)Zpi@++=6&ot<;f%sDgr^Vjzu0G9DcAVQe0tCAyqziG>kBVD)T@3%@@ z>cC&~l+0EwM>do|jF3Bd;^UTblqawQaTiYKgg z-IM!-Lf*1M3#_>|pE$eiZu-(!m9DCJ0|mV~I?!8PFi;G#&svTp138okE8(sk8$M9j z;wNywy}SE{m&M&%LPW9_;m30TPe^UH_q-kT#MauT`%*1^ke?*Muv}Mp>n+*osE)uL zLMH4a^igbo_4tw``WI`JupEXuS!4meGUmVI*wh|1F0;B(zW>C!@-gNp!m+>*w@J<% z&h__MbKx6OX7Lbdvv`CN!Xd_WbWul{F9C3t+X*fMv4Oa-kP=TZCZ1tNRGA3;2BmNX zbDVKe%p=Q0I@073j&iu#qyESvG5yW_iu58k*QVcdYi4vi&Tr-jiwXRpPU!;TCDXkM z=*%wsFS_fP?9tueNYl;opYJ9wD}oiyBDjUy+)wdH6lL5EbSUE<_Z8g7!&ve+wi!>_ diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LText.class b/twl/bin/de/matthiasmann/twl/TextArea$LText.class index 6a22f759aaac56361e80541f1899322546234070..c1642607111d921e565e357ca167133aec69f9d3 100644 GIT binary patch literal 3571 zcmbVPX;%|x6n@??$qdO*wniIS3WyN`7)q(OVynm^(YOJE+C_)(LZTtT$>7#~uia}G zYil>V@VTC%C;iZme&}E7IkoprCQ)#TwVadt-gmqAxzD|GXZZ8)-~Ry6gGE1@aj+as z7%j&b#{DD?@pOX4B#Xl=js$QNPqX$6YtORwTmZ*#oHc{jrpl4PG*6`;Gnn<0mSmA) zqbFFLWRYeu7eEGC7V~`L6bqB><=B+P+JcJHD$WQfGuezKus%L5qjQF3B~wOj&d6k< z)|qtFl$mL1N;5i4hx!D(iEKJ+3e>rt9^g$nrC9PTnXHMQFisoMw2_&Oj#*|ZGs_lo zmSNJShzXRDb+&0Fl2V|})#fq;1ALN<__n1oDeEZ}=LOWEw49S1f*#9cq&bi_aygk3 zxZrM(u^FZ`qT{6Wld?BEEz_-zmA-p}a6eLr{qBfkvGxgKWPqFqRK`;oxo=@^N}A)w zRGL<5;@O0eo-oW5&z(hul0X4?;|x)t)fH0_eye?oNKs{xh+fwV_Xu2|V$3oUC-)lj zHVnHy&Z~G{#S1E4q$!0lZ5mWE2ijsWR~P-66qQgan;}bp+GeU!VFHPtfZYfs>lQxE3ON)|HmL1y*e#( zmYF?ACEdnz|5$dxOvvFBr?{e+sZIPi=;*>rI$E%vc-8STHt2W-uj*)JEsTvi+R&~e zf_CCw$7^_9M+Z7}yn#1$yv56J>v)GJ7x>`2cu&RqIzGV1IzGWg6`$((44>ck59;s*BBeiXNq|QwvxM`F0(yt4TfVc&H^pFLWR?JAp4TwnR5DC@comnUKCqnW|#+)-)h9bR?@daxrGo^6@4nU zsd!Qaea~$dREH{d+@cdMTOQh?bAMsDk`DA^XMt8+B=hVb+;t6AL`3y<)X?C)iONV_ zeOE}if!akPjr1FM@HQ1|_?A|UfL4PVtrm@15F50$cDTI-i=}YG7$EQ*ZWx24akya& zVb~5gj9o;KVuz-{)99mpdjC53u8=Jso$qE)TfHGAVvlU6{w4nD08&00O$v<6C6qmA^bg6$I0?h?}O64LGx(ryQ-kCL&QlI0~2^pW5o zy-G>uqz!U8-9$YPT_o!2j+3mfKb}W}f<=UB=2^Bu3qJa(^waWaR55v*=Nh)DHAB@} z(4@6uKnvT*BL!b2PdbU&#c96&dXE#!C;&LOIlqlx|v+YF7mK>}xK L{189kBZU3|4a$Jx literal 2211 zcmbVN-&Y$|5dLo1a7$PqrG!#`SfGGm38Z3c)gVekvC&X}K%uo&S&|EhhE3fp(*8TX z^x1Rd^uz}reejQ}ezOVGVkAc&a%b+{nYrILGk5aG%U^#3u!w?2L}9XM(g$u3l*(@H z!1cUza8yZeny0~vZ``T8Xd0Hn^!avoD(1j=fr7PH6>%-!%HB6#(fGzsuhA$&+PpE0>A9-^INnQxIRCsoI(fvcv5f+C8LmRA3H0S4AQw&_R7Jsg4fzf z?srM_l<|7CXev`pHktMpW&R00mz&)pwJamW(1Cs%y||=s>wh7b-Rgou!bTLGqFuJ3 zaY3{zHo6cKZNx@5V%-?SRgE_kCfcUn#yBPvy26A?i4`iX;k{O|MppmEI9qc44fDgH z@d_qG-tF_%2qCDi*|5ij7KXfC7 z1&w)ynYKj3>ujVY`~`;JE*FE6#C*%<3t-IXk(>yM8#Zp@9ff$Idhp~hFp`$gTwyGE z4rjJ!pP;^Xc(7~yO?S7#7VXbh3vOl0^~(rNejtq%=H%@AWPcZZ_lUJg=5j6Jt$1aQm2%Z1ioj$V zeSF8pnq*x)l^Wc&kqdXvq@{H44<>gf=iOAkpHid&abjn z-P?OW;uH@RBJRJI@(eQF-7G1m@y^rDYzoV%Cw5wFM2+zVWEQpXr@=8rMxB&=f$If>{ohMkm}Pgsd) z9ivekW70|0F{P*_onJ8dJ1#jQ>zI?X>(9~eq?-0`TXOPqcQOA|G351CJkk?*mp;o4e0UGIyIEWvc{OkM~WeO`Rz8c&0PG%%!%h}gVv~sc`mCXJ6t~=-Kpaf z3(qmb-N0)fcreJ{5P!pUtZQt);@mGW^)$4e!MIK$tDTUS)41!D*DAgsUg5QhFR2Ny zRcv6Byo7^=$oM2B8?uS_K5fKau4Wl7il}3ot)y6`vj`T5AdR@b&WtaH2<(P;6M@{p h-bgU$L#h#cg-4XbJnUdvzhQzE<+qf}*uk#V^%s@ZAwmEE diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LWidget.class b/twl/bin/de/matthiasmann/twl/TextArea$LWidget.class index 987b28cee5eb27503413b81d62a5ba842b3c7058..722af9fa56ab7632e6fa57652aa9224af92fdae8 100644 GIT binary patch literal 1148 zcmbVMZBG+H5Pr5V>~XycBECVZs68wPQbkJDqKP4zG^s{YLe)g58*BF7TL*rDp}%aEbe?#bFfgkfKaU?4oN79P5_ZnWDZzjfuQ@Ciqafj@KQKzbBp zwLDJ_H(U_}GGORbQ(oBtsffu$IavS8%Fws_?d^sBI z$l<2gamg~(_IHK5C5B3`V`Gj8P$|59l7V49HGfh{CH5nVTqd+uQ$zkigSsJl2csZN zfb-Q>E2`h$+k3;nT117^w+v>-9}RcqbER1nlTwxs#0O!ah`SaFuq@m|*`hNobKJME zin@h0ZE0xn0CkRs43)G~OEMF-OnG zq<6+JsZWTs42>erlVysu*R;;kTyPe@fjLWGk@*}sT_AZ*Zy9yujWw7?1Jh)iJ8{QF zT&5KT;tH-(GOcL@!()Ka(-PkrpGe3sW{TsN6X=5D~ vbEk{ zn)rtwzz=1dJq}`;vl?@`-Pzfh_h#Pi-H)H&z5}SD#t~yEbY!I`l81jv%j3Hu;;vU(qtsXNpi;;nfiV#%9 zxSHo)M>>U&rxuwLf|pth#wLZQ5l6-Zhsm(=Uo@pw3JjAb5=b&kHEdVD81!~ze@pB* zl3}{x?Fy$Q`nFz&PJ`t18RjEvJSi?o!R1K2<;ax3NWox=&cVP}!}b{x#d>{M_$3pU zkz-&-^wxDNc@tLx&xbUw;X210L+;N9W#R^IGGu(IUV6T*Y|jnx-)c0=#JomJ(4niY z_7qK&v?tk>_I_7sk_8is8iW%_)BZ@R8Q$LB>*4fH%_{ayLY)`Dh7`YauY_kvoh zyRPhSI>Ps*&vB1Bh^ls!#W2wrUqwE?zbg#YsI=3S-|i5;VaVR#V^Qy3WBC+oYY%<6$!qEG_Mf^2rvl8SxnQ45^)YQ z1g0%b5F_h6E`;#!Ur!CjhjL>#C8%W}|b758a=fQMK!QojJ?uo+zd diff --git a/twl/bin/de/matthiasmann/twl/TextArea$WidgetResolver.class b/twl/bin/de/matthiasmann/twl/TextArea$WidgetResolver.class index 70087e1335d662be0005bfc2231c93db74855683..1c58b619705f4869719df349b47773dac44cafba 100644 GIT binary patch delta 136 zcmdnYw3$iZ)W2Q(7#J9g710GWDv+oEKAhSNz6;v_fN`7O)g<%keMhTqsPX`z{tP^G?syZ gk%f_gnSlk!Vq#zglWYuJK$;7vf{}rpfs>6B0PqzVkN^Mx delta 151 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 literal 40748 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 HUsCsXb^!}2 literal 8860 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 diff --git a/twl/bin/de/matthiasmann/twl/Timer.class b/twl/bin/de/matthiasmann/twl/Timer.class index 1c7d1a2a28f78ffde3186f666ff6ea1325073a9c..f09d87167c64df8c74506b334cc21f9b423e1af0 100644 GIT binary patch literal 2826 zcmZ`)Yjaao6kR7tbJK83OZucOwSr2UA`#!VwNgUCNcx}&MGB?dCYSW$%}q&eS`gnb zqk4HwP?bqf-xVq_~FL5Tu;bhzZ@nN#C(YRQ7bJ6Fy+TVyeWr6(md_waM+I{m|2IT zm{o90f#$~?5`HA1*Wx%*KFrI7q2PqT#&~3OWO6n_a`&u#4i05J6n-FKA+7jIc!s8^o(Wl*@V8wkmUItF1E|gsOUq# zil@*i&{b~LSl%=zGKTE)$f<g}r9yL{L!4oQ;M5l_a=n>dlc8Zv$p3=$R#9lWdHJr(cc1F};B)NNSZs}fc5AwCjlD5n{pJE14o=GJOCcn27% zvdb|$OVtcGJ=PMov8X#ZsKa7A^0r}yhO=4ibkxY%RA8Z`wcAvcmP|enx`1TBkwR8a zXBOGJ^<|)=nmtdyw8qxg^h6@Pgcc~9SFan7Wb+m;QP~tWwHyH|Dcv5^(u~^F(_5jP zVo3sRj*ElT%%oDRGZf`4FMln4SATD>#z!Gu6<;#YS|zT&sGF30Y-DO=azs8sk2phj zH^B&mi&@vEkYNTMuBBq9BqR0=JNO{C^Lh7i>_8_3HgV-b7uSzfth>2>ykfl>4e}=N zEaYWyW?mv^=Dl!cikh>ZG5fHMSbvzM?HRLH%E5u3Rb-(R=x7!Weh<@ ztqLRLtbrPq;*$y}geoZDOa-KxVi-Xw?tBOc+w6M~$XNn8_Xr^J(nviHV^=ZOzm$d) z$Bg8(Bl&9QMT|*I7mDf}3OYSrDKxg>?q&EL+TB+-okyc|YPff)v={V9rMr&Z!Uod6 z3}3L5v!^WaAvPcQn0@#J>+mTr&S$)3pYzs#L5{v8?5}voz9v)OAdGJ@g72u;?=giR zD4g?7SwRABqb$NK#x0?jn4ZCIN52ZskMNhvQSt_O@1RBO6nC&uH2#MMDocI_iwvA& zIN8>%L|*?FHp}TZ1O%4R5^Y4&O*G#^%dcn+wDsM@#%pv__%1c_zw-6C$lXiazry{? kykS4{F8xw!LlXkni`VJPL=`Gi;EE}T1Za4JCKvYo53nXZl>h($ literal 2804 zcmZ`*ZBr9h7(F)$SqMu(UKP-Sww44-u(fXnQH*G#0hC0nRKz8$VR5s;WCOmmwKMHZ z-#cw*IvqN-+D>Qq;ukwAwwHM$nS+<@LsF>DG?XrL`k+y8Z%B6Ezf*Kd7OlYP# zr6n#1G)7CDMst>>O_@4_c>4^?u=@qtyEaVa9~1C|)6=>SZfsG}gjV9~@{d)4=Ty|e zt6-bJwo-=SoM|3U8xr2&rG!3b8)>T&H9l-brwp*2?7PYk#q5k>B}4g; =vGXk|y z!_tRysVO}Zmv9B@qiHf4(=vvf7ZyFNBKfwhi{Gg!dDg^i$}ptOIfoQ<3$$z?tw5EL zl@bw=!*g8n463MwSN__qViW2qZdSJs<%RcjMf_t5UJ=+{(ja1*dQvk7GRa&@x9l<< zUSkTUWF37SyM5S$PS%j-$=Fp0Af%!X`vg=iVH@+h!+`vn@^a;D!we2>P;+k+nlU z?8ktD0|E_B=C#`@4kAnr+Vu1jg6C}=^3x=qteu{daSp3EA|Ll=^i+DDa#xdKxagpk z@`4pDlrPya6%A-4W+Tf!D0;9)1}K|*y2c$d*@m>FRBhZxMMqV{q^Eq->D6>ToWv;w zblx*1MTazdM#Wn=O-d>45=HBZMEq<%*#Nf20G7TGUhN9+bUH?6)i{fD3MT2EQlwS* zDm2H;nVjWA0=fbURa<&4Y--u8iu0fol%#GCYbol|*yVrPyFM7WpkP*DbEy($I+>)6 zf>DloMumwKYtKOW1%aM&QCGX5tkP=(gsPCnMFn$o?>b5JdEHcz0o~$_4UP?t4$2#3 zg9k&E$k7xtr(aZkXdvzi5muiazs`eNx^CZQiTM2Z8Rp*m0XrxbZx{Tb-DD;XyAWg_yAqo6*lpa6fi(zd0WbFQAJv#&u8$ z`1!jQ;xQj~DG&-T1rWk6yjTD-%!7h!t${n}xsFB-y^E-pGuI7NxNmuGaW@Y_$^smA z5~}%Ag@iJV2d-wmEBIo3nctG+*#gO?HqXzJ+n&?)uP)>D2Z1)yEpe;oQQ$arKS8W9 zsueHe)KuiuBwr5RV!WqgpLD|ou8|TW{?pn)so7CV?5y8a*0>8}hBU%FPHR%V}q<^$d z`twYmgo+uov1ztrmbEm?()-t@Zy@`1WXH{o++ci-B&hz4hE-PZ`? z8w}!GjNv<)X3?P($b&6vJArY>v3&dR882m&J$r^U-HwYl!TS)+;(&OFEu!H+)Uk); z`>VkI8pFww?j-7?f1y(jzhOdPi5FbGxQD6xnE4e}z1@8e^S60QVT&~2N}*qysWot& st2elMlV$#imiVPi{hbAcX}E0hTy7ZvX%Q diff --git a/twl/bin/de/matthiasmann/twl/ToggleButton.class b/twl/bin/de/matthiasmann/twl/ToggleButton.class index daa368b8c61e96dbe86f6171d22669361f20859e..e7200a02b7b3a302c5aced7e9870e3d53d61ed60 100644 GIT binary patch literal 1231 zcma)*UsKaS6vfZBp=pxfFsru3mGx8SNof;=iX4)&^* zl;~`{quIw&Rl!Rt7@ZrwV>10DoIausY%&ORx%WgA; zVA#r%659|9QoYDef6(LsZwuaGFsbV}!v?)yi=H`9phrwbQJkgh8S=COEayAe`w?;@ zz5#)N6$8m=oQU4O!SoiHuu4Ej$n zq82Zx@wiWD+@~p`H6dCPl`B|Hh`XwTR7u2hlo-B{me@XNHBe7kH&(}R18WK4Akkz> e!pb>}9R8N{l5XNvN|HH|Wa1{)m4pq|cJmKBiS#xA literal 1231 zcma)+U31bv6o%ggN+1cXrMA}AkG5JHf)Z`Fzj#*d4}?=TRl4cJ;Q6Uqaz2y z#2m6Z(kO_pc?R36{hJZzm$&yt;)R+Q@HfNWG4D6rW1lk=Yhl~&^!4Si` zi7QxT&;~qe@Q)GIIg(TH?`sS>ic)1|*fg<)8?@O~n+zqZG}FG6?Ia5;Ty2}UE?nij z!9hFnPN=ff>Xv~L${K8j?Q=EB#BJ;_=-!~tecq0Ehapcw$IOh?Dm4Z4u8Di7ka0Sk zhGt!ro3#j14~P9WKk`JI7n5D9h$>=}N|vT)4rJ+zUKNcRtsc`ZquI2-BKLL#eFXC} zty5T_QKuQOVW5l)A}Wr>B8s#UoF&D1g^Y|XNKSc#i!(qK0yq-15(g^~P{0Z<5lSFe z74nE;M0(vG;j&#m#oAQZyfm{*N%xRPHNn&;OdVHoO){xjiuqD8P5TrZ-;pEg%_%ju z`;hEDN)XKn(VVEfg&jq#$_zp!5zk;Td?L+p`9zU{{Y2@;>KN{zq6mjdlOYJ}XK+&Z ZQ_?f)#PftCVL%Ei;2He{|u-s4Es4V**jahLA=~fKmpcJ6^!e zIB&q3g(fJ01xdHQfN|}67|)&HP3Gh~-#zC$-C!(Phc!k-4jJ%M2JcbM1K{N`}?s<)k!~ z@C3UvyDBVnlF{M~?|uK^)#1*Y!N)keSWcf=ku5Zm;duJlDjf;l=Jp`&zaH!z?$Ol6 z3c9USDrUYSOTQAnn!l##sphs}g77;ML}ysvvZCu6^I8Nelr`3_8Y_%xW+cX`D(4vM zS7Kktk$$ynNA@x0;1oH<`9aP(38tp&Rp*TSiFVo;?VH*OZ&l+R4c2I}p3PZO4G8%^ xCuD-j%ty#=MaF)}6w{gQkh&s=JIdNfOG5+AEM2^%oTE>AS7)KCi~fr2`~xUvLxlhU delta 493 zcmX|;OHbQC6otRB9h^7@T;7j_Cc&k_P6Oc~1T0yxK?tc;L2M9;*d%d;8=-E>Z?OCW zDs|1K5)X+5J2w0S*8Lw9cf4Sv8J&CQoO{k_Ui1I*-pl{TCt!_D8$(e`b}Ko*Wn-n= zMk`rOCkiNvE;)uAOom--M$*LCN}ij_Pj;%F-`W+1f7Xk7KfBQ&PMhkm?ucr}WtKUG zbJ6~BFz6mdSFysZFYgy9v0zhHRJ5JTM=I&7(a1a0@NE{;oLQ^6d}2w|=bb2SA4dH_ zKU06xG3qXpOr^h6_gV)Mn!DfYwJ-NNXK~z)sffKP&r+VJlM6Cr+vKHR5VR+?zApyh z9Zt}A!2O$%M&)!evJ&A}JgKL$y2uB{q!JP1Oi0ht87w_9{cV=7r~fb-+~V9ae^1rA z3Fb@XN$Y{nH=;4olgC5@-$i#UZ$6>QY38sYUJ$-Jge()tVBHG^>F^;9zGR_8nu07= cq-&z8a;(CFuv+qu$W4iLHU#Nk&{Jf+0X70XM*si- diff --git a/twl/bin/de/matthiasmann/twl/TreeComboBox$2.class b/twl/bin/de/matthiasmann/twl/TreeComboBox$2.class index 1097a843a9a6f3d346c5c724051c26b6a86272d0..878b15c809b5b4c21feadf5b5309b2cb2da89e18 100644 GIT binary patch delta 531 zcmYk3%}T>i5QWc8()=~n{#vb7V_R*LR4d}fg&=e#2;I3ht*KB$L@O>t=rfeOhMX2dTSV4t{s)Cw=H3jwY zO@I8gl>>uu5Cq<3+joaUZ^%#!$E*fn`94Z9s)) zz(L-?JQf%#VMfT4GetT*aIf8#?*^x>PIut-t`syGnsJ2`ehSHAt?l}L*X^A#sQ=Q8 zYYdq|Y*?Fyf6kyi1LH5yp($|6=(20_I|Lk(5B1 zzEO4j1dK;{0uQyXVWK98 zi3blJy%^rWCo#^Jp4?`$Gt>Eg`^`Sd&$9mY`~Cr77j+2&L&=|(3KC)rde6SK8=l=i zZ?xJyw{s&Q!BF?7x!_JP{Hl{zz%Zvlf~-PBN`nHOL9A3y{resN`yr_!hrEPk2GgIK zMGY%37_!~VfqUY5gmj(bYsYO~&?T-D*vwYBq@dxd7bVg7|O0Smkq{^9B~ zq$$@(!>buA(#fy{BcdD;m2*{VJc3rMPmukOY15^h5M$0-BMb)?uo|J)C=w{986)%o z<=miRjfp(L`XePXe~D1k4WY)Y37P%S93OE5o75m;D-@KmO=parFog<5X%g^p_==;7 HT0;2)mJU9o diff --git a/twl/bin/de/matthiasmann/twl/TreeComboBox$3.class b/twl/bin/de/matthiasmann/twl/TreeComboBox$3.class index e89f8dc0a14e45c104b88236b467b9a8f44a2918..6e017653b07957407cc4b7508258e06e2a094b46 100644 GIT binary patch delta 629 zcmYL{Ur*Cu6vlsVJ18yPED&Tc(K!L3AOkl40*Wy)?1GpGG4alV6&O5p?{_dU-uWfe^A-thdfw;!>FINx(;xOPd-?mHFJFNr?%CK}ad0TvTxP;y zk|~X@YBTLHgYO8MwV1QGW-;G>_M-iB;T#IL7RO=ZK@>EbVUktzQwno>=84$GoA(M; zQ)D+=!Oq@Bu)h^-M`7BdoIEuvixvwmIr1(pS(inYEGjNluDjgerpqmETikJ3X2oTd zyY1}ceT7#K-Ua0-h-9QXThzP!saAeYtA{QnNem~z9K-$8XS zyJS`hAF24A5S2NiN5@Zcy@f7Tmp<*8lKD(-;}p+*I}{=#vd5}46MfUuL=!2|CpMBX zUJLP9s`jO>A=_wDO%5`{>zY)*yfey}&?<;GfbmyPXK_JRY%%T#%ZrjQxFotjM*fx( M!-BLzww!YP120fy)c^nh delta 617 zcmYLFO-~b16g}@v>tm)*I`Y-R$cIo7rp2Ozg4)I=thzuK5cdN#np!Kgpi6#3^OnYi zE7v5YCN6aE%C(6b{TU|cc_YS|+}w|I&wc0KAMSV8|8oBE6M);ODoBBOb1vqBLZpxq z@SE|gxZH}{Ps@*Yn~l9Ag-hnE$n~oGQ!WH9YbXqPaFEq-;R`rR%TIdmR(n5-LoRZd zRLGlOVj-Eb`vAaH959AiZObDarhTg`h3L!PEZT`(0xn{aJ3S=L1fd^8Ro73 z3oQl%gafR;$MBY|I7CaI|3#-9m_vy_IM9k%q*$Ouu`iHCo9F@2L#&{KJLqDa{vnPN zf!h;_;@XA63>(&H0(UuL1kP_VrGnsL71lk)C+-oExQ_?)DGtw~!pL67?#k~EpWs}o diff --git a/twl/bin/de/matthiasmann/twl/TreeComboBox$Callback.class b/twl/bin/de/matthiasmann/twl/TreeComboBox$Callback.class index e1be52fae74d8c69bb0180b86982f1f1c9ceea02..dd77ac6257d675ba36c30c35201389385c3f2f13 100644 GIT binary patch delta 127 zcmX@ZbcRXb)W2Q(7#J9g7BLh1FCmSaK!M7Lf delta 139 zcmX@ZbcRXb)W2Q(7#J9g73x}C;n5AS8-0v$w^8~&Sqy|VPp`Tn z*Y{7#N=+`AD9|s&$iU;7mzP@PoRe5woLbDzz&-J|vLzz}2TUs)BLgD?GtguP21cME btPE^G783(InB-vK1kzkU6^uZVhm8{e0I(bd diff --git a/twl/bin/de/matthiasmann/twl/TreeComboBox$PathResolver.class b/twl/bin/de/matthiasmann/twl/TreeComboBox$PathResolver.class index 7c7056479ffc472bccd0db414b93858e7e8b5db3..7a20476d1bbebf730a13f79bfa1fc85064cf0319 100644 GIT binary patch delta 135 zcmbQsJeOJE)W2Q(7#J9g7zEfExY!wZCkD4O@=an?WM*gJpU7(<$H>4FkXVutlv9!U3 delta 167 zcmbQsJeOJE)W2Q(7#J9g7zEfEm>3y!CnktYj%4JSc%N5{oq>gsK_Dx!EKxrvF)v-; zKPf9Uxn!b1J0s_0Sw{7Vv*bk?8F)PN@=}YOa}tY-Q;XRd_!t=!phma@B?A&mGJ;Zz z^K;5li`W<$7#Wy>b}=w80u5$mU<2~mfjkx<&B4ILzy)M8F>o{R0BJ6u7$XBO13w!l E04=#54Zj~$2?EwpZVvz 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 diff --git a/twl/bin/de/matthiasmann/twl/TreePathDisplay$1.class b/twl/bin/de/matthiasmann/twl/TreePathDisplay$1.class index 492f07e7853af58d781c4377e0e13724513004ea..d1a28d6300d571d3ea7cd14aafb96bd961a3822a 100644 GIT binary patch delta 447 zcmYL`%`XE%7{;HOU0q#67ya^G+ET01)=461NJHX+qwA`rt+j`CLdcu!@{S?(nEY#xf-aqhVcH1;=vF3x_8SyXv(M5-dGv@jofO%#Uy4 zXZ5CiWO=n+$G)^(uj16J7xpPq^ahP48iryRG7cc8#K36=dNij!206DuRhiBzdDL9% zftmRpxVhegV!l9q3cANhL(~o2VuDnFU6VyIi8wh!0?9v^5;PiSmsnjwb)h_C=pUp9 i@plw|KY$U#_+=@Wq7%n7X2@0ghB?Hj(uo=(r}YDVB0fq0 delta 434 zcmZ9IO)mpc6o%hB)4Dpnbo4{DzDkvL=v1(_z{W}n6L#|lW}+Cebd*Wd Tuz(74jDNC-DwRQgXv*;oxd}Rt diff --git a/twl/bin/de/matthiasmann/twl/TreePathDisplay$2.class b/twl/bin/de/matthiasmann/twl/TreePathDisplay$2.class index 13ea85b53559c2beccab8109833982d7f3e47709..16eda7c7a6b7c3bf49f9d0eddce80735fba65380 100644 GIT binary patch delta 649 zcmZva%Wl(95QhJA9BiB%Vy7;lDTM;PrFKI?Df9*s#bi+ts6Ya-Lr$;)#dV~*T*Rj0 z36MFw02|az7ofICED#G;Y(sd0D4Hq=b#yd;#t492*ExW8?fkCW>p}*+{UKIHe!;~zs z<8qgcT1D3jg0|Orde`@&UdT|Z%GZirn7+@TZl*c8!fWz3pB!S~FB=SIYu$V9)dMf= z)|=t8jb*u@ypUyOeBNk=ouC&z3A?xat;fAb8ZHXV;gY~H6a@+p0tPM%%wt4g0gD=z z7^?A|L0REtbqK=@6G^noN)`$I(^+e;`<<=$w!_A9NY4faae^WSn!1m9K({&NEaww)+aFN0_lUL!et;thOG#P9R4Rssw-moi zndPjn&m;m)VuYxt(k?b&u8_>>zRcCWjBY#MpdLW`@0=}UQ2j4d$0+TDA&0YszxIq6c}6y8v}7PD3OBWKp-oTMvg&Ls;j4LN-wY( z*3k1-UMrEyJgBawP{d6eHyA2<-zw-6?&c(JVT3_GdG>N)dGS?id8zeO|6q*)2csz2 z7}F=BoRAo&O`6t2J9*F!qHd`Furdv0s7Vwstj~B^*ZI+qyBKbCy3tO!wbDM^?ruuD zuBktZJtddIuzk?#1X0wEY|QFCt9ZO$l>ZgpM@n%Fk$30?6+3u?JVkLM;NmK-8NGnx;XZ4PO5@^e z?GvuQC)yWd>H@c8o-n+O8P}twPT}F5Vdnq0^_c{~ggK#Nx|pZt>3gdEDb@azlwbRa t;syMb%Vm>hIcA{oCKl@CIU1NW?;T7Tbrg4Tk0Ot9Ma5cc1_lNr27Y!1E_Mdqi9y?$*%|mI^6E=5GH^I2=Hw(LCTBA;@Ob9s zr4~8oBo-H^7EiPnWmKLhplrs*$iT?J1k}&Kz{JAHz|6qHzyPFK8Q4G~4D4W%gMkM~ Pa{*N{GH^0*vvC3d?MM;8 delta 138 zcmZo-Zer#=^>5cc1_lNr27Y!1rirKY#n>5G7#Rez63Y_xa}x8?_5G8wQj<$23Tzi; zWZ?14%S$bC&PgmTPAz6<;ALb`o_JQ-k&%JJIWZ?EDKR;ljgf(off;BZ0|OJ#999N4 e29SB|3>+X422L=^#lQ`uxqvExMl$fRaRLDB5EwH6 diff --git a/twl/bin/de/matthiasmann/twl/TreePathDisplay$PathBox.class b/twl/bin/de/matthiasmann/twl/TreePathDisplay$PathBox.class index 70777f8403c1357ff08c0ccab5398c325fb9ca30..20a51cc5a717a0b1baa4c45671f4e026e1da9753 100644 GIT binary patch delta 618 zcmXX^J#Q015PiFM$L8+VvB3#&HVKI_Nqk2j9|U3pv7N*T2m(laMHC&I_ zKq+V_IV}xc8lbU+h`^C3_yLss0Xm?dqeslyF80mLYTkP@t9@y|vRA+T`|=gQ3|37@ zjF=cj#zG9oEM##!f-w{0n255R1s7ffC!)K_sPCk}DS@f*-iCV4rc&a1wfShV@svSc zs@MIkrHyJ3_yNPDs`9~bJFdR7dG$kEUyaLWYfpI0uue|TEO zwJ}xDit2?{*k-WTuHCv(xqs(krE&!$^oB8dPL@bS>ruwRXt(`@2dFAi%_+uQ?=zUY z3%&>KW2Y@i*bj~HCk*@|q2CywN)nX_7{p>>^1o1j#|-cLw|!g3dSz>y+fKZ zVeBC3ej*n-ZS=Ka>aA{v^%g>Z4_#}y-X820>1s$S$4KAK<8R0HU{|>38V#Pt5%L|P mUI9H9E74RO!&Gt{#UY9*5|Q*bBI+m&JX3P$lVnjSIsXB~=41;1 delta 597 zcmXYuO-~b17=@oZGiB)XR;yUFv=pRh=~NM@ihvaaDw;?%5#vW<3?UO~LRv$s!IfLx z(ag%YaignlAW{++{s4c23wN@2YZ~9FUEF)_JNL{vXU^@q+ihQG; z@3FBIgZ_JCu(7fg52J`^LiB`*a@^*aA}g2KkS4|nf5(_{98CH&HmCeOW3q8D-uU~h z*C9pP7NK88%GC@ptkC7!YV}pkE4}tAb%i;Wdm7M2G#N$}_6x7>r_Ed>%z4IavWm1{ zR0(Hv?afP1lf(5l&4T!)xS+Ynxc|{iMjR%XvYAw58tshaDsb8VY0e98f~%TouK7u8 zb|g@p)y(0_C#~Ll_@MOs(d|;{ZVWq?QPV{ z)r!Ijl1S3~>-EjW>JGzFk0}kRSS;vBPKG?O>6JY!)11tPVARbY;JEwfLr(5>XmQz{ z&gGH3`kQ{4HEJVZbDA@PRuHPIwA)oG=368`P!Kq~&$%xo<&+P7qR;&*4zgNYYH`JC z{%6d5CS*0urkg+HdQ(JA;{H%5xi-z8j%R--L$PZKMQ$)JrVGLiA%8;&;ie1*i!2Ea Uh(uJ@@~0Yr1z*4m zuS~QgUibjMkcmd)nPsDZy=aq}IcMjb?|kQH`tA3ZuK;H7Oh-G$+h{X&7?_Z%CAUeb z-qmprQ&P%FXW5tTd9rBQL9vpJl&4q8B+_o>oCJ*;l?V#%L zlLc~Ev|T$~Vld67JSKJ+k}F~Psq-75<9DgFw*rY%|fbmoSKZ*MT@GdEBoQymBoldO^sLFeS&-R>;c- zFL*U(p;x>W?l>j-NC}wh(k4OP3~XJ)90M3Onkzw5O!Esef^tl)P>%Bq<4t-o=v!XR zFN=aLE1J2|v8gxwh#Tlc+CT~&QtC5s9}f&X#Jqt43~G2};4u~qEaHiQB`h0wiav&X z6BBW{!VE)=d@gixtkL}y&RI%7wa5&XD*>nu2cHRk8uT z;~MQoBxmpbmT>8!Xe3TxGO*T7$IutxrUoRvlU$t#!1WB6F_m?`8$P%A3#sBZH9{t#ViZ|IP%uWCf;;G?vzw%L`pfL0^A_p!`vV;vIMDzA literal 1282 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 literal 6765 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 diff --git a/twl/bin/de/matthiasmann/twl/TreeTable$ModelChangeListener.class b/twl/bin/de/matthiasmann/twl/TreeTable$ModelChangeListener.class index c75e67603556f3c68f40413d2c9a4ffbc5bc59c3..27602d7ff8101502c3d242a67ca34bfa039f9438 100644 GIT binary patch literal 1815 zcmbVNYflqF6g|@?-EK>vh$yW*tWt_n5EKRckbOg=iJ9>d-&_sYXFyUF9a163L?0m;36i4$qF+SA~PMP zlo@fF6|u|0ToGn2h^s+d3*tIMz~0uYsVRn`LWyU~noYh|Eo-KkwVxW`Ny)hi}JSC>j9USgPZ@1QK$n?0|QJD<;s zZURpsXxGTBaMFy{4dd9%=4E|!JCT^>;h=;sf*%f6tuG22L(PG7@mCd|a<(4hp z`_m44#CfsI4KCwx$6w`IiRL1wMcKZzQ>yclI(}5CSw+608?=XLW0R9R+ODRe8!;6< zSP0^VibV{nxGBsnVU}<^h@6UL+)=TDAr*I#Qn4yb9%BsC9kt@N0fw01%^I}Y?1Rl6 zUZio%xxuu}Qf@QVE{SM+z?&9pO1c3yIwv(saIx1vO6X}u8f$5ZHHPb#c?_AO>|fSQ znoGNtBY~PCler9$EpF4tBqtR>BBy>xH;UO3>XSF?8BLMITf+^B475c5(g{ZBJ0k*8 z1XwI4WI$gfLHI}uy%dd;HwzE_0ZL|KA1w0%p6BFw&_^~vIbd&ag3hWqLqR`I(Uajc z2I~lq3C~BdaApr|B9T0Rw+W#LaP}4odnaKsPHG*7E+K)Wgbw2jhGZ#W4AaR=(UA@$ zzIKxLMDpPnB%>Wj{Ou$kiR9BUNX{ZvA6Jn&^U}DIVqD^X4}q5mGVG&ExPyrUgqpNb zk<1PeXP=Q^UnKRg1JD>^QjSjSCn-ngA*yr#MX0nBekHC?pk< z?HnN71b5`{16}N=1nzed8=ZuZrqwfwjuU_f84S>~mrg4EmYpQ=MCo^KJ`nm1;G};Z literal 1815 zcmbVM{ZkTA6g`(uffZ5AEG0jp0xa>XtT59slLl?39Q%2NH;S_?4J_85)YR1EF; zJqttgwOLvFALKm#9Q{>ikH19+qvun{quh1a9{6XM>@^du6Z!>W45AY|(4xlBD5ZvQ82fF#+!#SY$=;3EgK66zV zy?iHJLZ6NBn(4u#9JX@8KsNA*}G>ar1W~pzA#g#EeuSb$_&4PW!Q!pn1LA{*upuothhvBc<{Z_(Y@dK&N<&b*Ps9W z(Wd~O#M@CsaW00PnBu4NJY3-6Wgey#6yi`YqhOZjSK0WQf{QU+!es?%o?mC@u0Kqnu2)+3j%G+T1B@Uf#{T7(hH8}=mP45W$Bf?sa30b zRUk82(sO0aaTW}%TGlKp=iD%JGZkH*(dJBjpTBcdAfn$~)~u3V5)hXJ5(`>&%FZts zW{KPg#ESe_Fm5w$IuN(!7-lucOA7k+nr;MOcQd?zR!6k~PYL4jTW?S!_qjTx5V92IbaL5idYfw)#G<-G(8Y)c2_m#IdYRS?)3v__!4qL=LzeH|<^ zuRF7vS)&L;=?p0;QuPgT`VymtR~p~jxel(xJYCTS`m7RyYn`@laOCL>)wiL)yj^o8 zUohq^&8bz$$@_stYH0C{R$UmkoXV}Sz(qlM3tSjf$)mwVZ(yFVZBy5*b1W57T&!T% zDnT!o3#RN_r`_)gcw zsG#Djd{Qtl);gKoG5s9e@KHSFsoSRNTZZ6}NeK z3#V1=!ES-Qo5T3U+r-(%Obhe{!TF(6Cuvps`ME{C=!~-DI$Ff-nW<2uLpqZO3+ZAf+TUrk2j6G>o$#yo~+6O(F8;Q4A z+>2l|6R=I7`|*Q&s$!QLZjSsvH^HdM<}H$6pk~dN$tFqii?Xgqw-SkKM#b+Ybo#eH z#>Q{{T(l%LmXrE5t!6eGj+~z04+-uohGx=Dbljx-feSfql`hy-GTRn*(>=Nq0zHTz z#fOeAbFjeOnRMySq*-^Sqv+0bPTZN!Cy+|id4Pz(Cy3S&<}aRg_yJ-PvV{)` zHiUyT4iJ5aFAx@AA|}244RT@DSsHr>+ z$+dCdAv{CRhaj(^53+*83Z7N)96dlNcz%sOK5muBD*8Jp-Xj?GqCQJ8Gh}Brdl&Jc zPN?^hc!>5o;>=odS;u&Z_z4~2XO~%bV~fwM6JvOR00oZvz-Ndb1E(6m_mK=n{e^Py zYYS@1M@{*t$MB*@H|Kf*!o)Up$0yiEW{BTh7?qz9_Fx2#csCZReKd%IR5+SSg%z#fk6CDmHh(=@h7^(U+5KUEnNG2u6@Xp^n_cH5JWF|If-%4 z?-fb~a~jNkjLwVqu(ggZ^42AwKX-gif!w8?_fbn65>(_osx_JDclm`pzr+@ zPJ6E2@j@J8+((G>w2JL_T3w7~d)|d2H^jW7hqKraryH;ofg(kbl;Y@>=th$gEddXC zE_;#089GaifJvyyHFSaWb(lopX|M6-YK}bY2`u4`f0a<$(h^^@gdt22fP|ND)}1Hu P1kEvW9;LtDB>jH?u$k4N literal 3011 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 literal 3290 zcma)8YgZFj6y0|SNeII$2;!Rxtw}(z_-GZaR@53rv_?^BYaPgyj7}!$Wa6vu_xt_s zALti9*e*e-Yt?@0hyJLp?mIIHL4&KyMdr@Ty?dXt&pv1T=ifj61TcbMBG3dzvT`_Y zxNgogN_oS!huy2z@F_>iQ^vF<`_*b(8W+c;Wu26ERyxv&ASBR!$+%(+TZTP5e0=(n zoN*%v3#96zDWv^IN%q&G2*g~1r-^C10wOKYXvr(m5@=N~_Lp6^U}wx5QeeY)J=_Ck zUfLzIV2=tkm&((X_yh*)?)Nf!C=MPDGy78imgRV=YN)NdP1|&z5!jfh&rwlsG&v~{ z8Y^UF69iW1XhmBL4d~X;fb1sKuK! ztTF>XQU`RZhG)z&N~O`72YyeCCLewz(BxJ!Sk`fs4GbsBa02;OBx>=3+?1)F)v+IA z{$4K>fzBm+{rF-yi02|W#L_QHA#2b zQ8peI*tCdv+Afug#e(C??D3*>43{l>@Y;+lsznqNtkHpjy~*vR*Q{RUu3pwISIEY2 z6epC~pBLz=qqs6{gHyQ5Hk>I~<-E=6Wxdei56302uWr0`ZJcMH){MOg-qMSz!OrS9 zhbdp$aeq7w)^Gi~7@qH5)X{`!j1D}n<7Hgngrl&T+KII!-HLhC1hE;4K=OY_O>7p? zpQ@hn-l$2dIdW0QEV9JphO;U+Q^zG-rW^QR>1f_pt9~V%x-l#>R8_m>b?9hmB2hs{ z5m62UyPO~MDpzVoBOD!R9N}bQHGPYRh7788gd!fj-(Pot~;+3V+k6s_}<9W{_3fAM1Dz@AKP6Y;m3VSIw-OqkD5+ywt-i zWu(QAr({NgE(@E%=P=Bz9_!k=st0sL$P~)Xj67sobV+M<V6K^}z~-_~7@S1*KyAYvjL>8mavML`YfOyYkEAU0Hjeyp-g(N1xW|adi7Q0SC~J-Pl7GfoHHcU>ou7foN(T`{r@r7NhYa5AzMQ?wV+$)o5w` z;QUGQGDF1f;pn;eu{$_^{{e*69zx3BRgEP^9ixhY>Snl7ipFpXr@iW=F&W^SeACEx zZK+kEyErq47gC$&@zR5ducx>hn0&8Cw#`3MC2OmawN=U50y09wz%;`PDenigyGg5p zi>Gdr@is*OAUVWU$t6=n=p2|wZVncg*5Bw+7yc=N z&fBmD7Vt_4Dz%0h?`(puCD5rQkEXhAf;v0oQ%Dglfo^ zuPfBmxPXts*cDk7xh0g9{p8lO(V^`m?Jl%vqv+6fV?|${+3%ce24FO SjdRtAAMjIHeQJ8~Gw>gu*x=y+ diff --git a/twl/bin/de/matthiasmann/twl/TreeTable$TreeNodeCellRenderer.class b/twl/bin/de/matthiasmann/twl/TreeTable$TreeNodeCellRenderer.class index f2b2fe173b6f4db7f54303ee8c64ded2da09ee2d..b9e0cd66af1b08b8984524f38b87a37dcd95078f 100644 GIT binary patch literal 3529 zcma)9|92GC75}`qUuH8qBqU)|mM;=Dlw~&|h)QijDUzT~%@;}{0hG!lJ7x#=OWd6$ zi1eHEiy$hsS`1hewY4hIRAE6qRrp2E>3`I7T2DW3W_J_Hm^SC^%zgLWd*6MZ_qq2? z{_)LcUjW#Gj~cK6hjb)hDrrJPT7#v;Cv_w-6-5vk9U<5ad>q!%h$BkMDqT)PUTN$I z3hF(r{GL*eqK*s&(%u5P|^wI_Dc=F(s3tj zor7l^n95TcPU`qIexu>H8h$6xkT0aIQO9&F4W~F9t_=l@fqdR7_GQgd$tnqK986o? zIn!}6wpq%V`FyuClkFZWTGp63k+nMNp1lIC9m=Wb*oAzl-!7^7w17Au5T<*nW3#}z zrNc2uc$=NKo$Ug5CH{x)#=Qc;K4vb^G-&6o;c{-mD!OS2vaVS>>aH?_WuY3DhrM)XE0|9JJ|U1ZEijn*-{ zupcj=nZyg{dj#Ty~s7o|el<#>pc?=CpfKUL~6ijL5(5K+hw0OuHS<&5BNKP4j)C>EGRc(RZ!=eXG* ziNwGyw?`F-Y@5thD9J#(G6=QW+W8jC&0BsCx~Z#tRx=6zKLX z-qH|#s!`XnW`NGawc0xh$X*~?W1vlqNDb4 z2KT?$`t6*RFR^)j8*X(2);@2KeJ)&#AIPaztyKF3R{0%u4HDIoc2`?uH9x|wQR^iZ zVT?WYREF(MiF8xDX;kwIwD>P@s+~;1-?V^(`$-_smbOZE(Ms3LM}0<=d8;P<(sbK- z{bs7s2<`kbN$?{o0I50$uzaPePrjF{&c&IK`-ycgcr8=9pLUY(XfkybBAL1d`8N(F zCx9@GAWvc|Wkbn`;(Pc$-@J{{>xB@zxmb|8Gs!Cm+(d8|`;>G8!67l6x{1&%BB>h) z4O1JgK$}H#*H;LM!OqmDh)B$LeU0en2<^Yd&!w&_&^^0oS0@LCYf{0ouKBuqNX#={ z<51_O8QqF$-Y`e_XVDULF+kgt%bkV%+_!q7L0|{*Rf)&7SpJURnT@F-`N^Tt%-#Xt&N2| z-O6+*d#Hl=IEUWBJgy`jOizP4kRCm*6Yid9T(3urg(_Gz9*@Q%)fg459#>|@S6Cfy zaHV*(f;DSX6>z0baYvY!LUU@7!@6-rArJoTXd?XYAu8WToBRMB@-lkm9CpbMF)TmA zn4HIBq+C{hjA!I0I4Q5-g1m-{@;WZd&s>O)6M*3=#0?n3!!E=+9>WfG6OxpKrw;ZU zEfv^GH;fUN-E-JYNgc`@enLsnbq;$dh3NejMk$3!lyi(e0u3EFg-0nx+=J2)_y!k* z5ONvg?!~xwG`xEy{ei^CXg`nT@u17&JITkpzD&l0R}oHjRd6@OE9kh2mIYMWl%M=N zTICmr%P(<I0r`et^0l aCh>!?`j=}x&mh7q*5f(qpQrvzxZyu-e}^#u literal 2723 zcma)8TXWM!6#iDeC{aYn1*ZumKttL%c8IyR#VG|G0tP!!5*!G(DE1NyWGR(o0`z{r zzV)e0-}_2iFie?gc`7sgO`T59N{UTEq}9w?N4saw`ObIFp7o!9|N0w%UHDdp#IUQv zGd0b1tGedYG}FwuD@JD4=6qILH2AQPrmYIkal<&x%?h`#1PGq3mM%EgKI)j(2InO4GinAYS*=l zp_xmWoI!q6^x*}Dz6y7An^z94dKS3rj^}5-9Sj31I-t`2f^PEZdTo*0UQQT#3RYP& zN}8<;q`~Am+F!m_)Ru$q_(XtvDES}pkCueHtt#4~D2QN4#UM6QsDeO-J!@|dEfL~W ztuI$7XMQpn_J^bJm$Tt{4HgBuqzV~r3Q`!8k!BcKll8$JvewF875nfi6^O&#*($G5aVC<5R;p)Q zTQ`@oqa|VHbrt(ToU~D07pZ;>s^nyN%r&u`@%?zJSs8CIq{Gnqy0cGU_I4|)dX$|ErTFM43fLZFchluBtRmebJ=oq zanx2VZwm(&n9kGVS7=_vahza?8T`7SkmW^X6je-%Sua0%>QJVu;1o{Fc#C|s5>nLM zs)`xR(g~|+H^@wq40|R@D&}yOv|A~j(Qi>k!#l^MUgM@i0b~`-E zF2GPx69!~5;0F|6@p>z9M+C5&G*)O-safhCb3`LGD_yi;mu7`$(UB)LmyjML!k(z` zlZ#h*+0BNhJftI!mSm9E{#Htwt?!6!TegA~>{KYD@2Gee?@>Ag?E2#Bwe!>g3*3v+ zNFh(G+7`tUFIz^vW)j!bdD@1G1iHLq zG`kL+q_v*DCg?4m?w+m&dTv9G{)lMg7xe!`lM!sB-?&hba(IzsiN+=xF-Yn`v6Gs8 zU}-Ncisg<}`X08V()aO_upvETL-kyCU>k;Mo#AD?5}5dbv?DaPJ9QT$4UB$|7`u~x zgz@6oV{|{n___PoQ5@^p)xe&y23~uF319QT*d5yD!yOV)OGlwd$Dm5b(Jh@oLMmWT zDq@>-5<8_+UMO3AR{;!iio?hekZufN5=RJ%2(+C7{R@3EHDZP-91W2E;n4_8k^f^f z3e|n_NFthuS03QxJ~_Q95nmWg#AxMA1LrC+W1)e|bLoWa&+rGR25Svmn``mZM|L62 zqC+}^KB9%6+!zxjJ=AbJlYsqGEiBJnQXzlUS3 z3h_~&N3V1N1JXromM&pLy6mCefgirAqy@x2E7(U0BadB|F@D+VW=>0XVF?xRk`~%2Fpp*ar diff --git a/twl/bin/de/matthiasmann/twl/TreeTable.class b/twl/bin/de/matthiasmann/twl/TreeTable.class index 556e789e104519776e6e6cdbe88a4937e8a5738c..9f944fab42a0a4a93c9ecdbd9773c52935880185 100644 GIT binary patch literal 13077 zcmb7L34B!5x&OYIJ9B3yH+v>wNWw0JNdhHev^Yx`=KhltYucka!dNt{sdr}v(F zmhXJa|69(P_>H%oKS4wdJm#Yq{ZXg?^O1x8_kIpiAnDN058UG_5?8J1|^4P_0Y3cIt$fs9Eee#*- zB^Mj=$oJt+$N9J^0`JH zYi0M#rEgsxE#!82Tp?_&mq!PT!ksV%ZxER`O5Y}7^-9^JOCH@m-pp4CsV&0B)zZ2~ z2DVCTo6gtzcspOG^Yu(+o0E~qhD12h7Kz2WBJpq}8A&o3?eTad*%k|>QjwI-H!$U0 z9S!e{q}%#J(YUp&BNDoC;xeyL>Q0B!5vI~kv}2eb-x=wMrqU4*WGYy5(?BR5&UBRa z=bCnLM>w*$Ka@`QMMJ6nP&~dky)U*{c-rLAx1T$G}lWh^7C4h>)8sgHVZs zqYI-lS%IKZAXJnp6vs@#YySZ|w(hXHWa8@X=*`e5w==nvx|45LDCI*etd4i*4I+}>5R!37}!7#+x#^hcWjYrch zOwO8xTbQ&qC=GjdMB|YSgZ(=qNlSSp9f{shY)dE^mBm)426TX*ndg=U`#VDYQ%!5_ z6|Oo%1DIA{lao?Tr3$y6R3xob3=PB5y}LoiVy!q74o_4A(~{ieGisl>pjmAZvpr`~ zPUfau4IfQL`V)I26R9%!LIVS_{hRwD{m}HBDR`36_V|qn#e_FK{yCKv6*V;<#?H{U znS(nZc6257txYES1zk*axp$tVY?<4<5V&{5VQFVHd=o$tR|Il{IM;euY9Nt{ilKqH zflx9MPb2Un(LqTQ`7)J-osx-th?6GY!h|pm{)O-M3)wlZHxY}422zpMSPYPl0xHoI z2$>s+8)zU1PbdJGCiJ^%+P5hPM3e){R9DIjttFU?z!jb_U#n5m9VuYFHaAwpce*37 zh=uuhXlEqZtaFd4hKi-Pwm8U#d3=%WMk8fyG%l zdGEGoNC=6*d|D`(oQGE|635FC#lzK`7>t9SmO_X|Q36BuCi({kp~gW0jG(qg0Gubu z6FGKuC>>&2QPbX@bJJY-UD&ZJv^TUkhD^G6UQU_=WmiAr)Y>5XTw|Ad+eghsB*1oj)dZ}oc9=< zDR(vuko!O7;|FkKznqRv{-uLI{r9=B}&OppeYUDApJj zkn;9A?-(GAvWa;bKb z$EXNuSK$-S!8(5pad~1N)3Wo*M~d#eiEEX0ip`2(9SXxp(%QY@Tt$XJp-oj0S!={5 zP~k-SU{*4V%3oIY)sfH4`X(RNN3mm40vddh=@eN>lS(TneocZ%ghkQ#-cT$m>AWMf zKQV~nDJQB2)6rOJaa$-B+kvB1_u#-lLP|NsoYlEGA>oi|eN7I7z1@UaJ?dtod0~!a zOy%aeX?$lXPRwnZ&TpG3sH$U8cAm11V2g8GT^%IfUT>)~1PULomTRZ*F{Sp*O@QP` zSaxnM+?tAB7fSW5iKmnMQLutO(+!aJJf`RHr`%pYX&Z1Oz)_HD$F&o3y{}hlD+^z_ zwPF&HDczAhgOPZzNHu?IHnV4%HTWj`Bq#?j6y|b@-x7)qqEK+|jzD}lstTTk8C9$m zWMWijDBXv7{c;C}1DZ(y^DPOaDpTt~RtcllYw^fUQ0RgwOqD}1y?v41-S94ptZ<6* zvlP@PAK&EGBDcO3fF@6ewtS#smqO{>YPKuJ=A0171+JVEZ90>VW<~v>{X0-Nr(j6y z#$@Ap!mS}w%)$z zf;hSW5>xp}F@%_SREEM#SWh^{bnnOgI_`bExS$B_?@bIKj0Ll6pYbB*?IM}Vcbhp6 z`8uO0l_QZ3abS)nBVoIqm%E`sr1nd5fpL;~I^`HSsaT=e_-QDHpP#%`BBx2TO60Jo z-Z;A9?T}-mdgEw?H_4$3PY2;_rQSF(5fx37qX)jLiRDy_=LhliMe<-KQ8;*vIQRlN zwxZ!2CM{UB@wfif9c5Xf0htm(vnjM~!p^HPd?9NFCHmopcvw zmYY1%-EtkDKu(NYiT%2u$?hzgK8q&S zDZL3zoLo(sJRR$V<~_lqG;NHE9LoVzA7w+eHGq3U6p zf!-O8VVWs#C~%g%M`(5sikve{bAz>`G>>VRE*heeAj<-foGXuuFl9deTOeXNNz~Xy zWq5AEFOOHFwH0dIMl3Uj8H&8qEK==@5>_DrR`X~%A-3a*XgwTC} z$1VV3H&hYJQq4WKYVNUA^HJ=kle6p%>M4MR?xT-cx?c~?ik?b?kf)}$lolSR;L8Nv z)MSj{Q&SQE@IclsrS>kR^l`c$1eqSN39qvZP-GH5PIbAdrl^q8SyYQ`sznx6P0sxm zyO)C#VK*;WdyMMEG>bB9npnAsT(}zXK}8w-<=I5@=pa1=Vw&6|SVTK5qQ%0hcZ3$p z+rWD=>09A)2LSuqvPc)(q>C-mEC+a#G%tb{+~7CnSPp!=gK0zk81;a>yZ$&Wd6`^I zT0lEVF2|92j5j!_(dBnNEZ+g`C|!J#{PLdlAms(%o3n@P5x;AMmNvSo{4TAhXL)^x zMSbY(p{gU;&qUblI zp`5EB#r2S*haLsiJ_VdTrlf9xJk#Oak0L~Aps*Zc2cUAuXlo*dxrd+u2UdL=qYmue zi<^f-;7gD=jofdNmvwsl3{~j##2G5YuiLM~16XctEVG=pbhpWrZH(5Ljm}`*2wl=r zXDLh*ZPr=ZbOl_{Q)9rTl;;UROS7xB9`)_V$kLu8j*NcHVD>n;djeJ+La_P_bn{tw z;FHuqPf-&c!LQ<C1H4D7{ne zrYnzAQ%fZT4KEv_fJ~_zq2`uKX;njN8K``iimg@EqqNLHPd`h`4^kQWTB;jPQr-)+ zV(T$l`I6buIdt{`Y-$2&5#^yh3^N}mxzw6T&r=OD&=PtP>UfD((aR9`%K*w(C{ABh z%36xqGoe~hj1x0Wphz^|V=HElQXq;+fJXr3Q1B=u*BNp_D|60}pNq?(ha+~{JB&#} zR|(LY13 zufvev0Q9~|bJ1RezNPevl3*6*mQa<&nFEmc9Atq#=n_i;F=(l9>tJ9Q92cD?-)V@$ zK+P9S`yt&ql>KUgFv==!{7G@(ioEdzUsCC~1z3+q3A5aDTP%#!X z>Dg+mvDBD{5N9~ahVx$q0*+8V5_KSt}CG)ZRe;MSv5sr76_k#n5dU#2UhJVbv$ zJ5K8ZT1JBT&?C`nFwvjU`U_IVUtz+(Q7xUKOX+oZ`Dqj*Z)6#LyDimrODdhNvO=U( zY+r<_omhJjVuhp((Q_X0n^bE85?v<{LKF%dKY*wRHN2+QjBlOLa7PP1kOK8;@s36f zxIiLpLZ~03tCSEfEBd-gPS0I4MmHO-ohDV45hFRsaolztQDCM z$z?6TG>%ZT#M^Lf#mlWgna`IY>Pv>IrDVKG_*=Zk zc_rX$)h{#QucxW;3@u>K8?@#vD$}W!5k~Nr7vDThg{MG9lOM(`cfJH~Ng;W#^bDXC z2$X>DP{#td3~__fk6});c-QDV$Vz6Y+>O~1Dofz!kg(nNnP68`3Xz+4b`Abg;4tVd{nqnWc2Mof+*ER05D;SNtev@$ecr5|gLR7;r6Kp)uMlFR2J67T6&H z!LCK6gxMGYzIIp>RIT{vggWoyYKgCAJgn;&I(v9L_zB^YG`Sv8$$_`RCflf#aa!f= zw4Se{ZG1fpe*@jXJ+zZUw%nySP2l%NNU{JWlUWEt23r?t%N<4TBG~Iqx&q#WgFtD? zN;#ta2mQ>HpYMQ$1$nOkG~+2)DwHvLNgb5NXsr^t0^l-*KAaI$byXp3_o_Me6eLts z&siFgi7jJLr5eB`3X+U;IRh?d)o}`|kE(#Hs=7xtPgI3fZveL~Ex~|xj3N)xqF^o1 zf%;k!hfD2P<`?A8eJsOL(C?Bol8Ml(pa9|sqVrBbr;ny{l$P=?MCRRe9rsg&<21kt zx|Ij$KHftIIYpo5G$1%gC-IZ}cknyA98uOGa}OXg{v0<;F2sWw3U1;Guh?pTMMXF9 z`&X1v#P46RqF_Gata-E(qZCVRyA(F5S#}2AcN#X($aQ|BYvjbGl zw^22}8@hN8HQ~LI-*3D8Qf&T9<>+%D=NKe*pvtIJ8NiA2$uyM##BEw_*;}(9hqCxB zs?iZf_!Q!YhT_q}o1+P&anZ#Ulkvv76nz`D9yzF2^)$NWS>1!`LU1=myOqIbs4uvl ziKObDERgvXrY=Tpy;Ln%Q-LV;ZIThJ_MIPA!_G#J-vg~y0Dn+)mEY6TAbRycufH+3 zml==HQolzK?N!s90dE$f0cUSjz-zfw(7yB|d*aUVU1zo2-G@24mE0XmNN34V~q z_#l0gAENK^!}K%$B)!Iu(Chpt{)*~T?7-heTimM>PJj}&MB*y) zhrAGOe=oh6aF@Z>PL z8SogPDDHO7jo;blhGzx?T^S6hYZQJ47O`B@Y&;FiF$60SMN&r0EOE1^$Ph^R9>ZY5k(Wvnz^u2!yjyOmDC zl|A%Z`(kOQWt8%wx0VHQH;lW1pgL2mA3FP5WyT)r!0RX{r=x;&$29Ue0#xRx%(6?l zDj=i;D3w2j0$s6-PL4C=MCt6o5pevvUg|#ir=*m2jnM9cR&srgmWv{@%0DPUh`7j+ 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 bJ13F%^E!{$2RWvZSDs(U2g&q@e8K+*Yw=z+ diff --git a/twl/bin/de/matthiasmann/twl/ValueAdjuster$1.class b/twl/bin/de/matthiasmann/twl/ValueAdjuster$1.class index d2b963495c2ece87ba131b52bd2baaf0bb43f6ad..66c65208826d4ba026d5a3d5bac6f9ecfffd7e0d 100644 GIT binary patch delta 333 zcmYk2OG*P#5Jk`HZ_?>#oA~MYiHQTzWDt?y1{^t3qBwuiMh%@t@^PpWT|m<-5&VDy z7of{-h+K_Z+v{ey#u?{@>oziE7r+H>#*C4&PIyT zwAC3WiSEXcqMiozP*E6PpX*U{a@CIp)Z`*t_Bz?8s@%0P`mJ_=1k8 z;E1B2Kj9uT%t{{XOoIRT5XV3Jz3u`W;`ge`TWlD10Elf9Fc zKJ5w&^=_$b8qJCa!mxyZ>%&G-!b3=~mzIys;~FiR)w=oi0v}~W0#k$tpdx13 I`2!%^A8-yUL;wH) diff --git a/twl/bin/de/matthiasmann/twl/ValueAdjuster$2.class b/twl/bin/de/matthiasmann/twl/ValueAdjuster$2.class index d44ded47001e17acdabe3a56223b4bae97f20c39..d31b1d74d8392c6564392996ed1829f0956ad956 100644 GIT binary patch delta 336 zcmZvYyGjE=6o$XqOV*4VT@x>f@v>_naZ{{_h`m*?5JZBO8(GwltdOW}YVDSN62S{t z_y88Zgzq7qq)Fop{O6qEKi`>|C;QRf`uhF&1ojAuSkyE&Rm}>k4t0k$hxIJJ&VF|1 zQMj!%O$JB3csNXQPeqo(Y~&+#PjMr)^yFITc{+dI&v?qDd^vsR-Pv>hyk*NbkWRzFHET8F2- z`0U1EVsxh}S#Vx0pqSD)OuCqqGzC0`+1%`A!yUDeZLeitg`!IZ-(gYF5N=shrKWJM zlcUS4c%ZPFo$PzpSLjZX#Do2Ql%{b?UErp;J^EDs{T_xKaKo)P zhDK0{m#EPX{wTxDc5Q()!4ExW=IqRK-kI6$pTGNG0Zd^@g^FwxQH)1%71!9EU@OPV zBrn%_nNn~=!L)*#3T`R5D-hKkxt_1M=8hpCUI>KU4YQt_6c{P#Ms8cWl}KUGY1p)8`0j45cGZ=RYv=+Bd+Tg< zWr{_99@Y)ZmCxwD;y>rPK#VdfTMuN-*W^>GwHoI}NVHX^04goxQG#2>YwGN3wc%8Z z71OKjNZ%$l<&M;lz$pz$3@Dh>a1R3-dJxwz&(;Fc8t$`|N1BFl;w)0sp#*btmbBM% zkII`y#igdUj~+K{n>(vuQDCwYaEbfDA&U*yt=cK}OD0X4`cC~n>?$bG%sWArb<qLEc?zSkQXX=r*+Yr1sll~J4SvQ2YHZb)0V49;rb z*0FEL$`lyvq^VU0hUjaGB8YBih#^2<9L)(xBzS`4h3S{XX$YJlYnmcBCYl}Jg~)zD z;4OIpoTW8PF%a+2OSZ-~anGTTc7c8j_=FkS`B^0U9%2u{c7Bw}ViyV>w;7QZW3a_o zph#xKvY}msnxL*WsE5jd_=qm?37XhH1dFv`7jelK^pao{j|6c-Z_v%S{yl`57xW5i z@;;NWFNlk89&f0bDpDC5kwwqTlIn)W{S%$aj$X8Y^+!Dj%oSkd4U7&TOOTe|LsDeK$PwzKXF zD_fFQL*f zHA8-i-8haIS|IqMX`AjH%9#ES{6tA0kgpjk41tq6V(5*)kJCEh=o9d#84xd;wz}Wg zE-U8|d!*VFYZYmgq+{~Abs1ox0%OOgO%+L~-)Yzp4C11O3j)K(debq)lEQUYIxbgE zAj-8`=d&`{z^INWbS53sG0x~{&E{5k7y*s(Rb>eDqzi?K5+gG@CNU+TH<6Eb4C#`? zK$@OYH4SCC@(FdK@b~akAVz$Zt$T8(<-Db%wzH!Q=Dez7&ePiDT(v1o5o>4AnYeDuaq(SbyQr-x2K`o@tU)CtJask9f^3wRC)mT3@ep*CoClLou9CqYD1P3~lml&+|^$ATC9Jz#2GI0^2 z2%_M?1-K0t;10xF5$fcg!@ZmjcVG|f`p5U%JAiGhmQci;2OIMq7O*H#6<87ohu!w@ zYb*5kFHck5Qd-9c}s5C|+wtRNsnd5xk5 zq1;i|D$>fFMF(*wP5OkH@#^r(7!~U@KcV$1!Ow0?a(v!z|Au3YE7~A9`6q4MQu7to z6PLFjc{+Rm-NR=tM;sm|G0n&c2zX8~-(eix+~zar1%%qaQ{3k%(BWt P1!YE$Jw%b;GzI(sTO~B1 delta 330 zcmYk1Jx;?w5QX2^IO~{AFo9qQzlkD5QedE|j;EB7|vJ&-zqe5SSqNJ$0=@t;|_? z*zLv9P@s_AQIIxIYef)B5(2IV8&eWR_yl{Sb(G$2(RRAo$T^igz8hQ_4*{4tPpI>T zszfdCE+r!q9bXL35Bevu&H`$*2y)+;c+k-*N#cZiezK0zx~rl~tnpf#kCT1U`i*SA zqWr|~w=m7MzyatU74|as@Gyf}Rzej%*Gcxfta;|PpCMl`_c!k`2lN0zkN+6%FT=tj RPgz*PGONc7LHw;1;2STlG5`Po diff --git a/twl/bin/de/matthiasmann/twl/ValueAdjuster.class b/twl/bin/de/matthiasmann/twl/ValueAdjuster.class index cc3bd610997b1ac1a22bfbc93a5656f9abb07f91..c2ea31a438d6fd672f35044e1aa4e0dc937062c2 100644 GIT binary patch literal 10831 zcmbVS34B!5)jubhWHOVNgoHI@AwZBY2?P<5C7>Y*5J&*YCa8s%nMd+qG81Pe0bJ^a zYt_2f;99L>l`bL~L|dy?(Q0kg+S*p_qP4B9)^2KB+kW5w-1lZlc=`1A!Ef$*?m6e4 z?VfvIp8xNoj}y@X{=`c+@Pr(?$wU1-QHn`YOm_1WFY011W%E=SDRFbDm%LmiopLu% z^HQEQQz0YM1#m_V&y>0{hi3_FWe(jhV5lE(^Ko7(=Gktp@=^)UmPK=9(wEECT;t}s zUaGK$=LwElDdr27=UhQ6x_}o((05k6#d*KaH@NnOrXf)&C=Q|Shons>Cy%B z{d|UW&y?bGvJA56=dDs~lR}rZ-BS3a8<3VE#dbk}v22<3O3N#)e(v#dFPkz^=iwc^ z)6GG_+b44&AsF^@Kc6L1h{#w}ikOTINNZ49yQJ7H%l3HrY(7W2=Sp#&jD6nA=ko

    =%T^t2~&vTE?ysR9DHw7jyVpFWt)5 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 literal 11669 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 diff --git a/twl/bin/de/matthiasmann/twl/ValueAdjusterFloat.class b/twl/bin/de/matthiasmann/twl/ValueAdjusterFloat.class index ecc97c727bc21e421a4f1982dc739844e335092f..c5d97f1e43f4710e516f1b87864c1053dee592dd 100644 GIT binary patch literal 5958 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 diff --git a/twl/bin/de/matthiasmann/twl/Widget.class b/twl/bin/de/matthiasmann/twl/Widget.class index 2a956110483117b59258e8db82999d6059b56190..c3cab49ee46f13823a2ea2556d4c8eb66f9a1dc7 100644 GIT binary patch literal 44195 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 HDW(4pzPnxd literal 40786 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 diff --git a/twl/bin/de/matthiasmann/twl/input/Input.class b/twl/bin/de/matthiasmann/twl/input/Input.class index 6af0536a8e47695fe6def7ef3bc662570dce984b..ce5b3799d3143ea3ad6f67b8cc483b4f95dc1fb0 100644 GIT binary patch delta 77 zcmZ3%xPnpO)W2Q(7#J9g7&zG(*x4C4Cc3&#3!4Cn}0e%;6SeXJBDu5Xed_OVrOv%uCnzPs&P7 iE}1CcD#ymiz{tQ1)WX2P2voz$zy@M5umedZ1`YruL=G|l diff --git a/twl/bin/de/matthiasmann/twl/input/lwjgl/LWJGLInput.class b/twl/bin/de/matthiasmann/twl/input/lwjgl/LWJGLInput.class index 95ee6a651ae2f23fe66826f93bedf2a2b614697d..20b17d2b9e5a9914c2127bf6f4c15c66efe22810 100644 GIT binary patch literal 1406 zcma)6-BuG<6#fpGWXv!SRE(nFPixx{lu@)|MQ9ob&GQ-+l)$g`W&$F=5~mE~jw< zlLjnYVYtdL#c++`x`EGe!@x9Kr`bAc+GZbx!W6c*D6=;mdZ9OW{5)5cipZaFq%6w zw)EJZ87Fqec0(z*sN7HzU7J|e+m67<2ZN{}8CN&363XhcW!a3$8Y_M~sH#PW%gG!t zn%t0E(!^<;(Q(JbB1$GsVMNE037dtx4EInrv5fmB9-yS-YZKq#p^g<3k5Ja}*u*L> zny9eb6NaY@YaIG5zBBPXi$CB;f&Bk(mcS5`vs~%btq1EHsu~KM`*3{R)Kh*?j~nkd zl}G(AI<2NFp9>su_NPw+rw+g8+Z)(D^?cozL5=3*vIN9p0oMcHk^#&ETpYW-`;9l~Db{P7e z!14bo;!^s1gkwf}&bI9?=l$?vg%2;a;XTJ#rRD7LHC&(zp9M9AzCJ#4^dj`po{l2n zC`lHrg4SgISBN)V^B7^OtGtY}v^RSWIEV8j2}=4AAq9&JlF&%^B0}G6{%0gQ7#w{G zBcJ#MiNx#tC@m4R4o*i%b}&2B`G2l+@VlYCc zrqx)AFcjhFE{;_q9G@HOz?>Kx+HrR=O!0qcuj%gzFyjRb5l#`GYsla_hUr<#())CV zUa$+eh0id9o0!KOc@|MX4J9}oD~xRN26uLxRDH<*3nV2I-*1~s)J}UFX#2e?NW#Fp8HkL>N*fX{-z1uUMkC zE*!`3H*Ldms&(J6H`mIxkj7S?2uwCxP%56=>YGQ>AU zZMNuJ8hW~8pE~h;Q;<$#w3BMy0+Z})|WgmcHyZxIgrO#D%Mn9|j((hv;oQCy4TA5>*9BL2C5{U!Mck^TJt=%y zQZbh}F5?Qrk+SsXH>Bf}cgU8htUqx4h$KT#%bKnTPZWLWg+6KJlj0audAnOalwrlE z{5pnU#4yZo>LA*vbdC{RCqxzDlx!KE+@3VkdBsRS#yG}RV$G3TzK#i1-%W-SdlWV5 zTXyR;I&1>BIqs-h;w>c4;<$_H7^WD84}#!HrzAb;H5q>#iYs*elH(`LFtpW_K&?b< z3}KEV-O9fxt#TzqHP3Ocr41Q;uCOd}m`dB(!ZKI)eb-T@`y5$S*RlPkZ=5~gc!)=I zB@J4_@)%-C(=;%T>^2&9K;mn~u zNs~j@9FCE`sd8te?F)tkp)9^y7S-lp=qqmBE6RJ8VySCyh=WTd){zBH+o2-0mU&|DVU8=VvTfv1UNpG zdXL_1boT8)PeuPiZ}e@dkA4CAw$b|rJ%a%*2DlnvU>DbN0Y-Pe{vF`PHm2TSoQ${L zVbUJl#cY5~Nh>KSz(RnfT`ZIP&(r TWL logo -

    Copyright (c) 2008-2011, Matthias Mann

    +

    Copyright (c) 2008-2012, Matthias Mann

    All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    diff --git a/twl/bin/de/matthiasmann/twl/license.txt b/twl/bin/de/matthiasmann/twl/license.txt index 28cd5b8..df40044 100644 --- a/twl/bin/de/matthiasmann/twl/license.txt +++ b/twl/bin/de/matthiasmann/twl/license.txt @@ -1,4 +1,4 @@ -Copyright (c) 2008-2011, Matthias Mann +Copyright (c) 2008-2012, Matthias Mann All rights reserved. diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractColorSpace.class b/twl/bin/de/matthiasmann/twl/model/AbstractColorSpace.class index a4c2d2d1f4d0fbb0af9efefa49be0f17b57d5ec7..5b723fa52903cc1d3c9e41e1a771bbf68226c35b 100644 GIT binary patch delta 483 zcmZ9H-%0{O7{$-bx;v>`nw8aB`6q)~S5_n7ZBIte<2}Cj?x(a-T@HHZe@}>(P zpevs!Iz|AdF42r(QtHsbru&6wneXTT&${^uNP4s1#&h%o|N x*pAJu*lg(-vzNsbU7Y^0TZ!F4DYl=m>tD$1>!KCsp)<-all(HtzZ2?re*w1zDAoV~ delta 472 zcmZ9GOG?8~7=_QhNpo!*n>6*+)K@ivO;b{eh@dkU;LLd{A{22X&ZKK7S%GsA3wGk5 z3vkqpxCQa#L9h;T{{O$6^W`kmLfKzGpK|~M94SbFAhx7C`F5HLx_~{3o}%zRdbkU( zhNIh?M+GA`WoP0&dlhJ~OjKbDXvdxFG6WnG3MA){8~H>f8~IENG~rTL`F74*aw`7= zjn?3uYlb({NIyZ2DXFJmDzvaogTM}Ub5fYzK#8RKf6hr-&7_5f93!yDvRRFO9yXF1 o^Vj7TL!AAI8%4a0gFJr9nKYEux8*1<(qz_O7X4+>|1kA?zlq5vivR!s diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractEnumModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractEnumModel.class index 1439052c8ee86745cbfa454a6a9a1c3ea6367bc1..412a2528e454616c5aa3bbb77f5e0e5997dd7209 100644 GIT binary patch delta 438 zcmY*TyGjF56r6i^H+K^^=HVLi@D-zRv)knZ0#Ph&6a>47iiL?*Hfa=lk>&n~f)X$g zOTj_}f50zMXR|@EIQPz(IcLti+aI>~`t>vd&_s}eLRDeKhMR&!Er|qH71k8$3hUwR ziDhn{A06v!(Mec`-GhE#e~OMx-4iHz;iw=RdwN%H=%GB-TGlNGX*9Gis_6*%4w6U- z1Yx_Z-$X8Kd4@oZU2^N}qPI=&u5L@$G(7rrL~+NgGJ=AD&B{mH{HK^!!eN;-o#vk* za|442DEb44;05U+)qvh`yM<4C__`g#U)>IDv%j+;+n?;>w3GQo93=w zKUCmk$XKZOv`w-8k+vT1^+i434^~ce^Trn6}2FA|ORoHyGkxC~);|YrU_XP=>)jURE*nc3X7W zswnWR7_g&lIZYE1nS(574N`Q|PaG3|Zv< u#4OliRtROpIkX4F?kJIvAn&xn@-i#|-eJc`fOU3^q^ROpw0(Z`X5km=*FuE= diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractFloatModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractFloatModel.class index f98b4807a4e92073bd1763650b412f76f4cc0bea..8ae1dce242015d96b1f7c45ba47d00d72968e21f 100644 GIT binary patch delta 154 zcmbQhJb_u_)W2Q(7#J9g7=*YOm>Kxk8Ti>51lSn_Cr%WbxUr3uhk=!WZ6dG!M0*Wp zMh2CM0#eCtIr)htzWFJsIV_3{Oh8SH3@ktsKqOEtkY)$+jDa*GkY?4|&cL`4$Y5gN g0Fqolnt?$bs8oZ26UgF$C<2Oe19^-3y!CMM{xu`{qRGN?{WkmB=5EOt)J$w^8~&Sqy| zn=HVnuE5B^W|NthSz^b?z^tJe#>l|poS%})#lXzK&BMUXz%fy;Es{l%0VoT^tU#lI zDnQ~uniI$~2GWc`npJB%1J_0%gNcC$NOA#b1_pJYQVj-PAd3g0h=GrRAIM{55CD=) G41xfvSQVfE diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractIntegerModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractIntegerModel.class index 1c3131535e368b87b57ad22742c6cecc50721c9a..23ad9cfa1dbbdd94539dca1fccffc44e53795001 100644 GIT binary patch delta 166 zcmbQiJcC*9)W2Q(7#J9g7=*YOm>Kxk8Ti>51lSn_85!7YGV?M^>=+rCH8jH*8Cab2 zQ&J~x?PBF&U}a#N$ZI&!QG=P0L2aUd)WlAnNESr~CZGX8bwJZVBv28MW(V?&fixqK rX4Trxz_<~}U}E3^l3YNVfk7RpRD*#N$l`%00*Z43d5l0lNF^@-X>1aU delta 182 zcmbQiJcC)_)W2Q(7#J9g7=+jvm>3!KCVrHfSS7;D&cHJ9odz2_0~;fQ8c`LoKm zfhs`aK$;WCGX~O(K$=x+I|J87AcKj42S{=OX$A&$pi&J6ULcDHqKJWyfgi|YWDo$7 HObmhm)O#6O diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractListModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractListModel.class index 99e106f1b1045fc724c1b8195fdea8c4d19effc0..2ebbeee4856bb530c7704d4ea4a9aef77e0f631c 100644 GIT binary patch literal 2488 zcmc&$QF9Vk7(Evj5X1z6plOn7YT80*0>zkEh{P04%!o;+Fh11j!vb4fyDXXA#ZKS- zCBF2vooT1qhfJUP(EgCV^au3G_S|K&5<(o!i^FigyWhR{obP=1u*07(e>(tB!gdUC zd>X}Blp?qq!wRlNkd$%tEP_~*!*w})CWmqal?c`&xFHZVblcHP&9Vh1YL8U&p;q@Y z0`VP_D>Xy4ZH?>K9@INpp{qL1BVDz-s%aLS?~FpX*U^lEJatdb7LKA+1j6gOsXJAH zU^aJOK&f$?z+_!FwcUQVrCCk2WiT^U@3mFqzG~_6*-I)UBlps4s5e`-W2tS&FM*ty zqgdbXAL5nX257z6tW=4XR6CucvIN$$uR-!l8SRE_z!}5u@XBd01kPJpxA#OFEh+Vl zZfUno$I>->$Fw!e(K-U5?9Ps)4YUn5U$v|S217F$#17LsCn27+9hp~UIM;C0_P6)c z{ll9X0=}ggnu|L%lpIt-vI&{oGz>oxZRih8)#+Qj;4jyk<@#gwiCQpdw8CENvDS7f z)#Ir*>B`~V#2UT6)z-FjX`#$9FDy&GIHr(_V**Km(%XADf@&NaxEaSLK98e@`8aOL z;kF#MkP^tBjC!mjfy8JN1g@M6;G0PxH*Qzo(G9y$Qw^iVTWj?9_j?vE(KW4?Z1yCG zz}@VFG2I@mrZTk0{q{mRUu?CCChpcmzC*IlNE6S5zsk z4X7^pR9~@FNtGB-Jx6#vPYIK_I>eLkc@oEX!;xJo%g`XrD6S#y0d`N^86@SE;#3=f;7x6K3@?wg}auyismfR&(@z)Pee z2nq2o?@7VpX@#9RNm!K|15#&bwmh}9Vp^=w(B!FeMPsSpR4a8{N KAgwtWj{Xl&Z2^}6 literal 2484 zcmc&#O>Y`k6g`g_z$Rk{JAv4a-NvcYGEke8Bz9^X5|`8|3bCt#ELB+zFi9pI25T5n zb)P?yRW{vJYSp9*tE(>BpVCc#LFsugeAu|i@g@uAecb!*x#zxfAAkP)+aZ7q?uQW& zNY%`A-SE6;meH&mj+6Gjx6}1T&9u|om8Rz!Rj+6@y+?8<3{@cd+<0N6ZNqt*-m5$} zt6mr(fsg(_O#isRq|H#KW4cX&TaSyUIJ1&}MkG_lkms@jp)Jd?yqtiN(Dwz@JTr?x z!IXwcLq%j0#?_a`B6NkbSDVay9;-o3aHT*guuivs#dhg+Uy zH`95;wkt;UyHe}mpy7HNKEQ`Q5#Lg7$SegOCLR}$Yb85&CvO|gW>!Dp7+DES^wcA8 z^DH$IxagYo#tZXk$tCS;8a~D+yk6hIr?TTV>RmFMrz3Mx?gAH{Sg!e{TnvU+5%H0k9Y9MIOs`y2;shIn*@-7 zZ)&(D15f*beG^+^$iG{Sj{j{9pAY-{CI*oH+qOOAyQSfd?6(MO)%S~(8ZEbK?pU(# z;v)^TCiTE)pkzID46o(V>6@+c=BOxgqg$uB@m^nP1&5DCM@}Z2e7c*Tyh-_psLN~> zg})$w0ogHp55t`E{owZ;SKAx~$6)eTXg_hHV4B}hXH&;{&b6)sqL|@o_Q=i!uBbM| z_?6+FKqU~plF6SDPtDG~!NTvj@(bdF*pZIM8l$B<@#EbSete0rjH`?%kp?!2G_dg< z?qk-Nv&4*cG2dY2WW)^7ZVVwt`-ssIL}}|H_G~H=(0!JF5iv}}>yqRjNXg;b&Cua` zP+3=BOaSiU0(H<7?HI=bPjhBWxME5ngK)p!4 z4fmw9NxcnhQg2IAZ!rYrBjc-Ws!fSecv8R$a{LCUiF=)K8((mgZ_ylC2Jl^>U@6 ztP``!wUFx}-H_hV_Ivl*4CXP|Cqqf!zwUETpXU$?cYnfxo za)X1{*mKAN;^sBUHNvUHpkqx9+KR{m<&Q2SqcwpSF{<~VmPGjKnG zWIh_@yDzfwUhX}6FWoQGDH(c#opYU_?lyw{K5g9)Y0(OSZj?7vt9~UZUzx+7QB^jS z_LX|lKgA?p2$JLk^O@2qArv))TFJ(HN+wfMZ>W7j%u`q9$fBziH_| X(3A?e#AU@Yi_03XD~;6{D(d?SM{Yvp delta 479 zcmXYu%TC)s6o$XC19prFE|-KfEjZk9NW*2r0xB*o5-TJYEZ7-jMM6ktkWmCD@kLx~ z#Laqb@8~2sK6B{R$|_u~Tux_E4ESX6JZwJr^f9Qg=jIPQhRHjOD60BiRYRWwqYAg4 zoE^lC^Cay$H2jY~4(`>%qPEqlmla;wXM#!Hwx(QQQO~bHj~rsM%-#8Eke<>W%XdmG$IW_U?K`Kl|FpA?U&Ox!KN}8Rl4M&zXVa` z4?|swzti55d~>2js`!taRG0VKi(z7s6$S))?_c1uEnAxvZmM} zyk*K5*cgMn1ceQWxkfgc5Pj>9IB_<`O=_ntB_#v`v4ND7@>xJ4C)z@gDj|gna)N~@mLr-9am$sf zwf}$vTzWwwG*G@yRN}_J;8!4K<501Oc{8&!^WM%5vmdjqpMO4m1<=4P6BeolPN%VG zLcy5~j-Y11HIc$O8JsszHwl+aTtLG>LE^H^Tr{v^;F5vM@!(PX`&E`9-Sxw;<9DBl zvRbwo@=v4w4y87?yUl+$yXvaS;fUv~ViMvCM;-<7i!~M)z`*ZBQLx<%{eC~_%Yv&M zGq6QVv5OohP%?0h<2qJ3Zr~9mG}jm+?P_0;X{+Amkf`WB{Q>4%*wWR#0x~0Hzk}1I)SzNcjI_#N4I5(xPQo%# zKzvxFr!X9+S{>?CZJL7ep{$oQK+5ux=_BNl(TS|0Wd8wcqGHNrByYk>O%6>2TC~9X r;-Q|qCpVDrdx!kqfBY(#t7-B#0YdsiYEW=;Y)|1Vp-JjegmnG_Xq07P delta 703 zcmYjPO>YuW6g_Wd=+I$kM`Tb`LG+Qq>m2NqT`eTw2xqc1*BQ@sAKaM4}cuy^k~By^ly8 zA@3a`T_bL0fShN1MZTu{)d5l-^SM3Dy+d3rQ+_Oe0RIQd%qa;v9Qnn_?yh2OC?GLB zMP)1is36Ic2tEKMOP?t?+$>B~y(EA-wm$+t!1WRINYyDt{u9nv#4S%y-I$e42_gdP tn8joHG!%WL1~B6HC;a|@{G76980u~TdR_<{G%OA6GVanVscCwCe*r6eX~zHn diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractProperty.class b/twl/bin/de/matthiasmann/twl/model/AbstractProperty.class index e16eaec9a6b9281d715d003223ae6aa8ffc5e1f2..b18704c6ebc639b6ddcc066cff76e62be1ee6138 100644 GIT binary patch delta 530 zcmZvY&q@MO6vn?hGj?^n=IE4__D@UGvB{L6dVvTxLaT^^#;`y{T3EF66&mhSv!77JPIjcgB zV~r!vQSfi}{QkQ<*LLNXmXaO)RMzxtSs;Q*fiMI^yy;zgrIy#eC>>n2+g`oZ;BW+r zSQl`yAyC4mA8`{5){nJTZ#K?43>n`_`j@8cGe$dTP7Fs#+oWh1vzR076urd&Z&PoY6hjg-6cy@-)=(&Gi0XAQF&=RJkAgF$+2mbd0+u+ziOdbca(RuP|Sis^SFMR{DNQ)kvDA3qkC>g64YxTXqtn zu@D;@40a*_PT(u=!bu6-0G`eVG33;`z9jJ~-_aM(k5hZo46_q6y)s3iC z^&GV|hQW}L1zw@^Or0ZEtTUS0hL DFUdg= diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractTableColumnHeaderModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractTableColumnHeaderModel.class index 7f53077b433132bee5a068d8f178a0f7ad337f59..f57a977293d0c7e5632096dc6889a99cbb31efb7 100644 GIT binary patch delta 481 zcmZ9H-AV#c5Xb+sySA&XsaaX}r4^+KE%bpGiXG5mvE8 z@MVuq3dK^skS=6P>0B;dBxw1j*|ZLpg5wnw&Up++H{T3aVs)&)fF3!KFvd{;z$!c(MJqSJ z3m+?C9Da@h-e46qo6OGr^Qb_SQ)?*nC!#5tg?XQ`+ulm+lG48J}HJzAz<4{ onC47^hMB=0A-e)-@*Cu5NMe;W8rmhoK+ratg_G4~+b@VAe{Oj=kN^Mx delta 469 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 diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractTableSelectionModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractTableSelectionModel.class index f30fe30f0c86ebe736bf9daebf62da97e0fc7a0e..31af28499220ac425fcf15303c87ab68c6badcad 100644 GIT binary patch literal 2163 zcmbVMU2hvj6g}gQII%a5V>eD|Qb+-V?UJ|+G=;dNq;AuiIOW4pPz6XG+e@=$y&LVW zTV8nNhw#n|5)}~-h-ZEj;>_-P?KmzVBx`2&&fIg)J@;P!`PXm11K30}4Gq`lkin)} z-c`$cDcne73pZ29tNr~nKESp*)l;~Y!iOpB2+Wzf>@}^P{+)nm3S^|!J+__Dvh3=n z-t`RIY8*@JiQY0?Pq%bOVCl=&Q~6BROqy$-4=hV|Oua5JbIY&{kHGPAp8OP`5x^dy90H{=-DT_w>zEySuiP$=GG|BtUK{4QEn=-Nh8ofCpSyRNou~K6tK1Cub?t%W3Cy=W+5PrFo`kY# z>UGm{b;o~R_{MN1p#=(qlb-Z+mDjGtpQZn%h7xC>muN(fowuI`f6Ul9L^hX82CH*StOCnM+8sm`%U=dG#E zm+@*Cd55853^-F=Ig>-$w{9bex{pu{UWMWL9WzR&1n4fVD%c+y8=f1+Ry^ z_NkuYRj5*u#MJ_lrWGN%b zEiXLsLwM(f89HQmV0iA2V%RImvf{XfnOKsK?%A_v&mQOHKY#uO;5wRVBm{2s^m<=< z-jN~QzO<~m_uQ=a?VfJdcRQ}<$gX!FJEq>&O}*?G8M{bn6XinjP8w zp*=W0wjEDH4VMK9WHfwpV5^Y{JgCIy75HU4#_epRVM^ECu1-ixBPWpPb~wNoLd*jf z9KCNp8+rD$Dyp+<8aLp5fyLnDknNsh_XECL|Bvq^di1bkKX>oaxt`wR+$v4ZFN>S_ zD2)&4f|1z!(mT?y1$radm)rpVEG;qBwFeeun{9iPcV8Zd7St4S({gpkhc10@IOA=q z_I5SgL4)b){jfP&_uQ$jBE^)uN`vE`^mJvcU5kHe3As(a=dKPPt_ft@_Q2`tdxohC ztiHzY8>-FJMH(&1&lImIwRimONvW;#@AMzG<( zJTbX2p1e6Rc?B23$~!ETV8Q9y@~IxOesqhnZ2Jg{!Ktu3&*Lphq*%W_8LKeTBf#1r z*6shmT7?>i68ST#r+5`>lw|F4@zM$2{To+aU~L@t4hm?*aElSgBK6gHw&7r7-Fn zCg~eyk|zZqgn~fXY!VhD4K##68bBfmMG~onwtBLA2nSAfcff?-=KKNGJ*ct36o$-G-j{X9j(duX>+yyXzpQi8_3JDZbh@jAbZrIYCOJFvI^KcT#N`FDNFG}MkFehJ>Qf$fz z%%{+TLL*FkL$*CxuE?k=qXijVYD65DrMV)_i_*L#&CAk!Gl6fV@CvRb@M;3zR!A1k zJ8sdlOA6_U3)Uqozfg7D{HW(yFHSg>>VAcWDQC81RTn&4;ZUt_h9`=4e$J{^&pTFS z&MKAi)yr;vu3WU;{IqA=)7Fe@pWt-=h`<#r*PXEn7b^vH+I}w-6?JSE6tC)(OO?Y;MMxAC)ER~Nuv2oXBMQ-M&uIl?i~tHP z6HduKu`oAddz!IA`$U;!Pg|ZN!oi|JGf8dW0nA2cDpk)aR72x6LsDw9ip6_*Dhy{I zfOIdyY8!=o(hU#q$%h6~Sm)VuA+%GOu&s02P4rqbf#{yG zFktCD>P&K3uPO8i$9iLtuuk!cLerA`c&TV}-dC4DG(}Ob9R6v3Oed1UXCcruRb?Jb zTJu3@H992;*ua|p`iYF|FfQpZZd~#t^O~{EBVm-Z`HQ2jyL^1HLU}=)(tOVGbb3}s zi$zJ1U7ta*MvoL+YO*|UJ3H4dv5Pot;`4#uTSFD6beK`e@{%8OTxyrE#&kH1>w^$7 zvFx~S!Sd!|+qJ8*w_$nhm~9nVICMGTPI9>5205OZDld2i`>5kG$1}B4bC*;;6TRqT z*{D$kO>D*IOzc2bVQ(D)R;wZ<@EsGc;hKr>;&l^mVARC-uuoxU9e@&UCVG%FaRf&d zHfoYO6GxYd+!4I=8;=IIAjj}GW z<&8l_+41{HN?yl(22y@p+u{Y9k|MB_$fllzDd$ha9BK9|_j0N=`3qrsb@=mDsnxO^ zdire0jvAS{#V`_C)~X8?V=Lbzk3nGzqG*>4;&>Y$LJ@4|pUDKYZj_+r+B)tr{n++% z_7o))`_|ltP`Qs0dGC0d@KF=AiXnY~SJI?PS zTR#*%=nk?M)QI}Ev@{QVyUBq(xdI~+Vnnz;#C?VRbzmHLAV!-M z5F&{i#2upbejcM5!$0sP9ttBkxLPuLTjW<*aHOW>A&dr+1A)#YJ!RZMYPJ0M3i)K{ z>ZdRk$RDCMIXhG2Gk4JV3Cz`}IJx2k%k;Gl%XIoFWLSs0Io^iTT5V3p;#Pc-$|6Xi6UR7` zXx+9%jI=Vo!_?Sa$P*&4oQHOtj{p;&(ezLuoutMr7vjKlEYLLGCYVAnxU-8 zu|+gjX4(1;r1dmT1|%o7wLn|oj&;xEav7>kFXx?~$`%?hgH{w)_@*sX*B1E3;6W}G ziHiYrCh*K~<`=%2J6NB~Md^F3WTkEAki;zO#CayOgH5=&LRltImgL?k9SCyzOuK($ z6Q4D5n+7)hnX@GK_E2%`PsmF*WON#L2V>E}csibr-NL3$BOM&E++s*$Grr1ETzG`X zvqps4ZS83E$8ui+vHR?GgqhFO5>C6P(zS|GKUg=Ks-yJlfgRyihZQR1f z{&Z|$DBc;*bS+|26xU)5y}zvvz1NBI2Db1K+QUB2m!jNy$GEzMxhSC*XR1iq%2H!1 zuW|`JgXz(wLr+TF?lAOr2N^1B5^#P&&;i#G1YCx~FFdRnnYGNgPQo`x`E8nUgC@N5 zD9rd;Sm18cQc1#o-y2!!Cj0J=LKeAB<&)tVa+1Z)nYqI z8|Omfv`Le+ooPDBOgsM2`b%bd4T+l>H`5RO&|lJ-PWubm((}H%EP|+v>Y0WaX{Fug zInO!I?G=Cd_aE*87{rfa2nh@n%>EU_b(buoykZoK{q8lpf2C9~?f&tFvg;Umch)h@ zS!2OAr{(P!G=WEI@RA-AC3|h9c-}M$rsI1@1ycXrduJ?xy8M!57aX%FkeIq+Ts8XF zT#M8k$9R6qD!Zcs^)uFD(QwxsQ{YTBo3W`H;$5J&(NhvGZ`k&NkzXzgj9jY4RS7#h zv1Ak%P07hDnht^54jbjN>9|&@Se~@XG93j0F;7urdD|*l?kRzADm^ElO)z=`+K`B$ zUEn??)Fxj4giR0~9q1J3D41o-F$?2curn@YlO{pt>mkskqY2IQpR$VPg|(Fh(@}L3 zXq_ri)|}y3l7@e?iT?TJX=By@9vxGp8W6^Q9X)7?;UHyH$$A40V84ubSVs(X6u|x= zk--r?^ol>`b1(SZWWXojtNU@##59ETf|ldJMe+$7`s5wGuX<4+Amu3#6+d z$UZFhPx#F;v$ncga$Fr>#-K0Be==K=Jt6Q|>XO%-s;-YOTru~}?MKs9++xt# zMYi8-0w?Y{TLSHlxl+1n?yP{+{)mnf7-8G_2ELwiPHDwcG*X+QY61jei>5nixCZAs zl}mp<4+7D=S{@vk95YJu*;2`Nt<{NAkt4>8*7M#I26qELXH)4~a-gQ1&{lcMG%gD? z6M};>5iA*wQciaFIUQfcBpbVIy}-RvM>}OC&@1UyYls!KG=t_;p(NB}I;JqjDJ4b> z7X*&h=uH=^a9yBjD|oJ0F!{Z=rr}WW(@b4Ntx$Gx&8(Sni!binMyn`Sm@oZU?SXUY zxdx8mMIBGz$rvsP?Au;y!2&z$I3=e6^Vr{rX*{Rn48~>3zNy2&0`+q>umMxK&-aIi zU(jJf*6}hIqf}fTFBIgO?fW07k}C^cq&Ed`O@n0XUB8upDC?5dGnlQvl7Yb z2S%T4BW592r&bLJFvv7C9W}DIf1q+R1RO znauBz&bDSh!LiRU^bykAh*BMR2F3aNPSWe}JbX0z;vqatJb~c=_dHohuNDvY6CAIO z`Y<^TSDN{D4T)dN_lm@wsK5vX%tAPcQ;ON?8Zb`oi4h0)2(cuO zUWHkW$GF1q^1a1Fuxg#VJ;NXFQgF7a=L9Bw&p|(C9Se1617~;p=PLZ`f=Zu9&i6mV ze97GD(m%O@M?b^#?krAMWIzwHsN-=zi(I=t+FQiZh;}4=(&uyPHrnOKZbD~&iAeW{ z>mkwIb8GYOAxYKi@(%Vi2-1Y7(1jU>dlH8*r^04Dz#!}q+RQLq2nR7s0&>i{@HKu4 ztLdmm_+MxeqDeBD!_z*q_xMdt!0F#&-}`9GWH<2j57782<~b_Q{88OaWbfcv{+|2A z_I*X2w%^EPy0s1DW&2lho@d)%;y68n<9L=Fo>QC;c%cH$r?IFwGrUS#NHOJzb##)} z5-gwOG{4DW#QkDic{-CxGVF>BTRF!DH_QTOAzx9Mcn~h`S4P8XupyRx=%inlvEiBGkfzy9RpS)ZgiQOHJhKD1!(b*MCLl^e zFHX-Zc-61ZuQ+=#w#9(gZ&|P3qIZWQ;bESy?OoA?HhAG!vilBR3u9dq2`v%1wfVQ* z&GtG`Zt{qIgN=0){diM}@wU-G&};+#s4<>uu@F7#REv4r=%CkPF*eh7f3?W|3VXL? zbG?2qnxxCFk1f~cC^6> diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractTreeTableNode.class b/twl/bin/de/matthiasmann/twl/model/AbstractTreeTableNode.class index 834a2d25fd6570b62c21086368d1216b714008cc..5f28a60c87a625bb55c646a12eea49c3659af448 100644 GIT binary patch literal 3290 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 Yk!CjeM^yzl!0)182EfOpY~Yjs0W7DS0{{R3 diff --git a/twl/bin/de/matthiasmann/twl/model/AutoCompletionDataSource.class b/twl/bin/de/matthiasmann/twl/model/AutoCompletionDataSource.class index 1aa139f2d7e885146371074f6619f59b44b64d4f..accc7a7223b8b8ac9e7a60dc0c94216184a1814f 100644 GIT binary patch delta 77 zcmdnMw1G+B)W2Q(7#J9g7&zG(*x4C4CPwU<$ZKlI$RLoFSeB@tlbDyT@1K;Fnq0!h c$iT?J1XRnwz{tYLz|6n`Vll7+NhSt10OLIk;{X5v delta 84 zcmdnMw1G+B)W2Q(7#J9g7&zG(m>3z1Cgy2O+|4D%&cMRRAdr<ObP?$9+q9oOv!4&eNwO-7v*o7)Iv6*t5Fw5GsvUZN_s*=atXV#-LB=Q&J Nu^LB+CE* diff --git a/twl/bin/de/matthiasmann/twl/model/BitfieldBooleanModel$CB.class b/twl/bin/de/matthiasmann/twl/model/BitfieldBooleanModel$CB.class index 0cea4588e97186ea1e0cad692963ad38f8301dcc..57f6c334d8056745fcf2338d2fb4995d261cdcba 100644 GIT binary patch delta 320 zcmYk2%}N4s6vcmcbo`IwSd*6aU9^Za(7xyaaupOti}rtQ2y7T3t8LI54D%#m6tsxe zJydjyz&7XH&vOrV?2g@y&#$+4V2`yTd1^i`b)R__42y;(!*V)&%u2FTb2>*taGWI3 zO((XaQ8W_vPttHVOT-j}+*acv`;bN@z~BWGsTx)SR;i}tgKZ%k*n8WKZF1G__6AY^ zR;Wx$=XXhBdvPSR(y&z*{L5j-#&OT~uUS`bEs z6ll~Yt?KGFHd&UK{!Q7WR-K?vtxbng(;tN!&BmaxnbVFfw=tH3>-~%ZI4H{5T(ri- zjk{)6)kKXkVdKU`LJEm2O#NZf?j} zkg+IZi9wj3W6(0iqP0C=$dyV~i9vakFF(m!wRg|$Me)_J6TM9EmQ`NM6`olPVl=iv zK&cH#(G6RcR$UqlWb6csINnXW%m!x|I`hSyTp_<{QeiV++_ZLOENi%hEJLVCR@fY& z@+0`Co zsK_u>^M`7$b^DkNr=51!7=qF4)7(yOw2&)qjovSB=ZjlYF~Yt75j(M&7M9y}nz4Ti zlXkxtuS(HOYz+|-HVB4pI*0&oiH<11yP{Pj+(19sGXOIo(FauG2VjZs(2pRj2gCzN z$Kki|g#G=WIObXpxDOy7CmK)~>Mh9Af>ef-VMq@v^;B!e%XbVZy!){QXdH+q_MyiK z-A6~_2)=b9^*7Kd;EU6kX%D!TsuA+z&8Bb`=je~xbB17!H$Y~+6(tz znoyKMS0PGq9#7x|z06Nz#;BSzEV7ixYxKmwLT@0zKu$-c4q4iRBz~qX5ml2Gw-Yx@ zLIPSdr_~E*b3q8E8NmshCrdiw4P|m2lkL*ep*plMCwQ?3uj2?WE2*&Yo-`nSqk&WH z!6~zw$^r|pEw}#x=WS|`Y-^Cj1&k1#N)wMd8kq1S+15aVc!D0b#7^L&M}sk{A<)b0 NrB$UoA6<$b;2))#noIxy delta 972 zcmYjPT~8BH5IuKy>29}MDXj&hUEC_g?N(?(MU-zU)GGK9BMCgYhT7CLjiE@Im=r(a z4{Q7v7gG0DSBmAr2nTmMF(KZgpo^icSYESB#bx7Ran&f6m-AH>9SHlN zj;a0x}FH{+6hJj-}{5_dz6)6nz=`J{aX-MV8 zFKHOUWhWz98~d+D85H91kKhuAOlz3n{gp~HB$-Qz1szl*lTV5p9h zd(pS>Mg!gNxvyg}c&d)bUb2BG!{(9eOda#CuZLk=*QE!wd6Y^yZihop4@n@Bp1GKx0l2)*TktDUa6(TVFtvOfitrN2FV%ZE>3dB8IUJcwE#J zI1?@uWgIc#y-2_iIWxFMf6@?d$i+2GH_MJiHlam%@#i1ma}D8TZ9J-P!OuZ@12fH` zDYKn!3YejBW>GMZMVz>%aMNXQs71P|MVewcYOT^Ez2RzMAVAn-Ei{M+=wMlPfL3}A Tn4{7H=5dR5mGV-wZUcV-p>Un3 diff --git a/twl/bin/de/matthiasmann/twl/model/BooleanModel.class b/twl/bin/de/matthiasmann/twl/model/BooleanModel.class index f6e7460eaed49be6a1168f5759f7f2d7da41aafb..9a6fae2f0cc45d34c44f09c67e843496df5af5fe 100644 GIT binary patch delta 126 zcmey*_=ZvV)W2Q(7#J9g7Tn*Y{7#N=+_d zV`N}tU;-*;U=U(qWMF1sVPF8#tWcT_O0z?04k*pZzy(&v4W)UYG%u9qgVOvA0$_E5 kAleFOun>bVSU?17kSJ7v7?c)=%1eM~pwlFQBol)a079G)#{d8T delta 202 zcmXZW$qm9l5Jb`6_TVv#!PxA}8O~%w2t+{)$dUN!0|87>i1DZ{{nV;btAh)!3cukC zJh*zY?q&Dff890-|1)aw=zX&LZ_Hxs)qe%Qa2vwQ|EY?K|DM S?G+s4QH9fJeC-@(#^n!+t_&go diff --git a/twl/bin/de/matthiasmann/twl/model/ColorSpace.class b/twl/bin/de/matthiasmann/twl/model/ColorSpace.class index a00f99a772b2e722d67957fa5ea529a460116e3b..1d50fc91b5ec0ab71376bc91d313ac257becdcd0 100644 GIT binary patch delta 141 zcmZ3=yp&ns)W2Q(7#J9g7{u5aMA#WbCwl#z$g5t+$RLoFSeB@tlbDyT@1K;Fnq0!h z$iT?J1XRnwz{$eMz|6qHzyPFK8Q8!yI|B!p=7iE*4BTKo50vJG(tHg3U~vHkL7+*D L3_?JXi9r|uvF;C4 delta 143 zcmZ3=yp);u)W2Q(7#J9g7{u5am?rZwssm{jMh1bb#Ii*FoW#6zegCAa)Z~(h0)OM! z7#SEDn1QMp7&w7ySQ*$DKx)|;IKVU~0~eU)hSEF?ykI^bl;(%h0t|v+aUlj_ph=7j KB0!RfK@GT%5C$m#Sd@ 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 diff --git a/twl/bin/de/matthiasmann/twl/model/CombinedListModel$SubListsModel.class b/twl/bin/de/matthiasmann/twl/model/CombinedListModel$SubListsModel.class index 25e5c0437ebfeb754e2a4693b361ac7ac5926e9d..f950738746f8e2bd471d3f6b63f2dce315043023 100644 GIT binary patch literal 1572 zcmb7FT~8B16g|_HUAke zDHV5;P%xu$fuW+P;;w)aytVy_qQG>eVHr&`pl$k1({+vDy<;?64a+ggt!B-3twzQ6 zgBQ|M;>HErwSz^0Vy>^9`89z=nIHmZD+GPnZq_Vs)vP)6WGbz?>8zQaE$zsekP-z_ z)pkt^@IwUx`ikpXUfD5y-{N$s9~Bc_SUgR(n|OP3kNinLunViJrNx&crL#pFi5X-Z42abEBO;>4o7{!b{p1~fFMG$YOlLy(DoR(=~F_43VGfUxqicZ zXBv*_t{bmv8&*A_KeokEczuGHs@>dltbIufCoDZ!B*Vf-K&!UeUfo)@WwNtJ%4$X` z(lG>GM+&nl=5*Y{eH9OMJjAGuM;I5F>!VO*q8%2EfEtZ-%;T|+OBfTF?-NO$Xs`V8 z$M5ZlQJ8U7{nYV0jzof?GV68A=hZASBTxIhW1ZBt1KTl{JkQ*g!WsVIFyq~B-bUa4 zz;wh}kTg2cnmkQjOBm;;MB`^iq|-8M93}Xsa0a~H94#Zp2ha*rUmyx!5&KLljx<|^ zYk=Q4$5s!=8ZsE6mF@Cepe1k-qY>tF_HyS?VF%(H;=4$Eqz(n;nKNf+{qyg)?*Q)Ok%1K9aYs6yh@w|Ygr4wy zCwl8TUbiD%r`Gja%9owG3ZrM*Gu7y|v=PRZfefK^a(Y8~uU*+sCSQab`4mLS+yFhxOt{3R^PbQcwLTP?FJ@!G?(mTrzNxFgJiI7B1roAt%~x z8OEYM8Bm-0ws<3)UZh-SEeOPpKB$U`tGI698sWl!UR$_SG`7@?fo6X8<%x&7j3}#t4u1y%%`7uvd_*>44*0yX%6$2&0 z(g0fOV{*CsJZ#KaxQlu2Q9B6JXY6W7`5pO=Kzy8pdlqiu7Qt+EdqG>SD?L>c$0mD0 zQzyJUrN)svR6QlMFY>-xtE{!P;rlYExgrepv=t6rUxJbJ&16|o{w7edsP72xGW<7? zV}G7^%SiDLFw1kFdHDkC6I&^a@S5cq;1`O#TJhe*d5p5fGla1OVTGSMZn(S)^DD;p zF!_PagAl(DKn(XGSVxY!9mn2@$*i-j$&4mYlY5x@0ectak4F&y#E297(Fr2wVF3=e uy2fqKCiG?!%xsy_7LVdkjH7F&`Ln56FC~nYv7(u%z0-$_xFqIXF>_)ri@73ZK85#iRpN@Wdtb~oF(onAlem$@LJ~I>x@@cA zDx54;bfIdx?z&|*s;1)<+|TSnwN}w~p~Q&mvYS@uEn91j={Dx<^HP0vuNwqn{#X5EtSz}Y2vC?w0xWxte0(Q$Nr&Ndqj&4Z~ucstS? z2~b$D;b+P2Z|)FYI0&Fu{>cb+Vy~KoW$>FOwaCt((r8mUGSA6yiBK?Bl?! ztlzBbRf|m>&J{}=<~_4uGqzB6>z1=NJ$gr>+w!}f*bE|vI^z@$t!bClzT)tr)QuFJ zl74!{b$_u|vt4Ub;YhAH+H!wkc|)(btXI!YBu9%O96R3DK3dUf=(?*b)RHR}MSAzD zRhPN%Vw!%v(SQ>JZ4ALUxJzM|(XnTp|#E>21r3>?J^2C~Q*IE+jZ z9~dZO(ZDG&qsSYWM8UvmoH6*k&m?i%z>-8ihvyA^h$#afiTPN}9pn_w?fynPH0(^0 z!a&p%zgP-qcLxe*V5Gh0>2}A7eV`}|nw3iX&GY-3!Zrod(zmhQIXg0E#%lRdymEh7sQPF%@Ld;P6NfvaF2S@(QH5 z?aSU3d+hEOjA+u*Ug*zA;untWuPv>~hS_EDM$nop&U5F_o8KCV^7DN200IuR3;2x! zey4yx{)d3KLILYR1u{~BXH!o{%>JDJ$tUzz3u`7!I}@gz=}23m{IoBGkLoJxuUPjU vVckN1JJa9H@gI-LFI`W-6b+4d1T}_f&(7dgu0#AD;Qw*2c>9aEmFWEs&zce= literal 2447 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 diff --git a/twl/bin/de/matthiasmann/twl/model/DefaultTableSelectionModel.class b/twl/bin/de/matthiasmann/twl/model/DefaultTableSelectionModel.class index 250ab385c25ca0b1bf224cc0bc33d55da3601c59..39682c03b28573291e465756e034015fe5a4146b 100644 GIT binary patch literal 3592 zcmcImTWlQV89lSJH?L>y#KtD}dgCOJU~h^y2}vN3n1ozlVM72@Qzrp3*`0VNtaroi zI0>ay16Ww%CXl$q&`L=RvIJD+78^>NA|%?1K9m=bctGNrhpMk!6m!0RX2(O6JW#1h z^zVP0?>pywm*1bB|MNKj>u@B29^_-#oj?frCZuq?{=514d716ePw~i)d+ZnQ)8#Khn>`Jauw2o`gaDCNW|Di{RV%7eTa+&4;Q-Tz))+p8ft z*e>sQp=_BoD&n4yt8N#mN3?D^YPZR$j*gZsHE&Uu z1O5!&3M?aixtz!qRmRseCTleqX0aH!sM+*G@ntmWt<|m^wQ50Atud>alvRQl~kg8!1%BD?DzN?H$xp?Iwn*^lSY}|k42Q7Bz$mUUP=amXu*}xUutA1j;A%O&!oUME zl(8v>F$06B7`Rb}!`NhCqg<^bBUib+S%w@oX;}ZiB$I{>m;P+q!Mam33l~d5#)WE& zdXgO)5*6z>#dkA8GKk9SjJ<~TLw0Q;O500jWt5V(j~^+Tj+M8};f7BHZrO$6pFBpRz<%FN$I&?F=rujFc&H#PqD zWagk{K166_4*FSyGi{Nxh-TViXAys!=OL`**og?os}aTkT9HKu*3jQttm3ZW+QC)m z<4Qw6GMf7x)RTe={YXm zPa_tdL0A_pl*h4WOkP&L#D(JIh>MFK{HbXpWqP=ix7EKp|+Nx}Ix|cj# z(y`Z4epZ?!wP)%}3Mr<_4O3Gnc+*5m;GRNXMmA&~J}`@Bi3#Vw$D*GENG``uVO3^? zzu_WdCL40|wBjxX;)FUi|Fs0uWxkFf19qSpJJHTsN#PcjS&ry##U|XwvdUvC?%?iS z{5QnH8xAll`^?H%ub7EmG3ei8YitE+v1~n>6I=<+0isZfy^NLK)KE0f5NnFm6pdHi zg~~b?=u(;mMhJ8-f$k^Jd+G3g=Gg&8x)1<0;DZ_nfTGCkFCpm;9-@MWsH=f!3eB0+ z9FjBQd=4!ODz!02U~_6_OKFFVCDcLE-HmUT@38Bq4%@?Yb**1!hv-leu{Se|)+uxc zqbC?<8PHiQUU1uuD6dz@yow}_(Dj4pMvWEiDEDr)^?L3_de-q$`nZm#|@kb`OQ8sb{NHOzy+po4JuF@!|9EYjz~v%8m*a*2m>(@(PrlV z+d$;z!wSSn>jZ5)!W4d#+C0WyH$kx7qFf>%$%}DW#qI_?PcAPoSzjcVmzb<4`M^xEkDp|!yuwuZ zgU=`J2c?}4mMeQVzi?%jq;Ve+nKc5{NF)hL3-t3yyFvMu6g1p~?OxWOQOCpWXmf^u1@#tnb4V9->iO%m)*Q_Ywi>hIL(lpVK}Ar_fkm#DVibATnS+UYbe^C5`Jj#T>` zx)vIX+x1^(3BAFLev^Rz$Qb>Ju-~B8?~um3*n{_Q56;5G`|Nrj_~et!N+~8GU-DyA z@?JLCyM?DNc>|FjkkopbzC&acS@X{@m%G;KMQGCF{%~qAO)~LmH)e`3*|#XdihHv+ zC3A-CbM++Z!Pl@Y*iUDa9q;v9DxZpVD*7@N^&iNY`LC2T-3!uO&*%bwr8MU#&EFW+ zk0{N@e6Y{4t$xB7|DDg`KX51h$(QI;)bTHNp?|aEeCA7(VB{MTP5Kf|`VvhBBuXOs U0}@(qj1nzhNp)_e`w(vX5ex!ks{jB1 literal 3582 zcmcInZEqY`6@Ko{uGe0Vy^d2S>#QA{(75&{@und*O`5oQtJ`gzq^*mKlRz`s9ebx8 z?}puR;_@O2U9}RW2qY*Nij+4Li3agj+vP1F5HBhp;3IrM;t#+Vz96WwJm=1Mya_Rg z4=B;jy?5?C=XuU~&bi}vZvF5kfIT=LM?_(7!OqTEo>z3N>YP<7Wxb1TcCK8o-Rv=Y z#+rA%r>%3YJ!!jk-gC;O?LDZ_Jm-{hrGmYnpmH*`7J_Nh0jK16V+zLL(3C>-D1jtkpxs0Qt#NcHblhn$ zfh5{nps>+I3{A!->-D-!H<^f|*?5t0kZHHcN3%k5!YSD&=I74Y6-`<&mh+Z7WmOyr zLa-QRu&N596YB?H{m_wP$E@v*JC!OaOHl2C=0vthzL>BY*Uh3;4MVTDolUzZ08voWzZczsLgrTwkiy_zjI1Uw}W%HLB>(k!K8(p6}Jzz1`=AyQFz)I<*B zJT`y6V0re0Z50le_&;APR}y#}$K#kF2CWm9wz9`9uV~@~P7*(*7ud?l-X~2w<*!={ z0`6(yN!v|2l)G04_Y;m)C^W!P4pZrrF4&bdkOJ_DUWcd^yvCLcOy1_vNVysCo?rk_63lI0-^>FIW z!w=l`FeMv!K0;UGIZ4kc@qQVx=nX^67!4Q>G?+;S7~ZS*s5YLz7uy4S2Wc`V)gFrrcFii^vDVooRu334<9~ka6_vGP05n zj^9AXZOM_%sY@8hO!FBnFkiADJ1=7cA7UUysEhSKOCo*VqiExpb&Q9x5swh{qu9v; zeIFjfK33R6n7|=C!PTeuZxTg3Ni|M2uyaFpE>8(NiC7%QKXE9&jnvpv0;)C6gzB)M zk*IwY+k@eVrg{ab7mBqI*aL`EDb5!&P`62DCS=wBqB z1=jov48TWOoF8N5f1Ek~ghtcvI|_p_f)8j(&^blZtjRwU0$bv4=}f~uFpXfLT%yh+=gj!5>#k!)`>VI2BLnK1%hbdx8r7KZ zB}6qGq8biRnd}rNXw9IFG=<*GkZt1lgB-=Qpj!~Rg>I#kD17>VrEuy$Q}_%4zDf$8 zrOVey;d7+$8Yz696u$8Pp>QUo@QWY|tMbso^hI))Wb9jy$pE_>@I^BD5{3FYnS7Z- z{R#_o5d(bg#@8s5uQ#w62@~?~GTF!r%umP`TJaOods{+G7`MY5)c>;MJKXFm%CELdGAK7w|pPgG-Q)wGIgHpEd-N^Uvc^8v=c(vV;* z>Q;9ZXQb!|aZs@JN|$DLmthYJapXF$sxG~-{xN%Z(={b$G-7>oWxsr221?1d7Itt z2MyGVVa|%dT}BRgj@BZ~`mP4*{G5N6U;LX}BLC3smftWwcXdyYpIX3uAx+`~Awg1a z*Aq>=H5ih%>g70ft^Nmn9U6@{VNYWp6=VPX4%BgR*W$9DsRMpOCO66Cr&Qg~c-{Y; zoNn^M_$BYiU-3TtHSfRQ@cQ{J3V4T2?{{o9zi)_7EsResj883yPl6vyYtm>({9UxE S&2h$Os3pbNl;}T#^1lG9ZDB9~ diff --git a/twl/bin/de/matthiasmann/twl/model/EnumListModel.class b/twl/bin/de/matthiasmann/twl/model/EnumListModel.class index f2da0cd848fbdfa63ff2ae1110b0f6c07563813e..31d30fd9a82d5f3c54cd55f718e7f2b9fdbb7569 100644 GIT binary patch literal 1859 zcma)6-*XdX6g}VO$0lJbY1#&`MO(Cxq}X6lQBqPuTOgXsLpq&7p0?>47dD$tvcdB1 zU*U^0KHv)vIwLTnGw8E_3;zHQis$Zbnr%8dbf)>f@7}xT+I{Hf`d$8_DY z_pMXz5XmVEeZ%g1TXJFp`J*_G_J>%@ZwfLTd7|l=tp{7?zTb?m=7z$VV{--dGMv%2 zJn1JCd#X@8rh&rgF zeRT{Wn5+6f!Z+>CzGEHwHxwe%><)S@>!$7Bj3X8=%LO(tjZGaJ25#b(!nx6-Tctz+H?@iL~%Z$EtUx~~S9h-F3ZC9i$JG@?9x9^#*N3UlJ#pt^j zI)Vkh{|3Jp8geooNbR4pJafpy^AwWYPh*Cac~<pCPzi$%(qJ z=swiLMLo`c4Zv+N@Otoa4?;tT_DVeLUJRD0&_(Q#qSiMZ*Y|+ zlS1+033t)fE0NZd$6A+&;3`UfF>LuU*EnMfv1>kJb?)qsn33(=%F<&b=AL|~sh?iI z)PyQ2WY{;IiZbCnfhG zbK>L)#QsJ~sq8Bf26C@tYn1yk3q*?sDMapMY4#a1<7zKP)E;WVT6{F7_D~fqY}j6g_YJF}5=ysZ*P#NvKoW#CA$t!bhM^-G(%UNKU(OWC^;OID?ro9!K`L zw0nL98-#>l(*;Phl|U-2`)BwCP|khhI1@)jUD)&P$2<4jd+yAOe}8`tU=5#{Fcg*# zoJz+Ig0Eb=-?4qa5`5!TI^6@ut8Dv&PTlPXyJDG$E0kWH+;BUGo-;~UNISf~<=Oqd z!kPMg`+;5YY`6Xz8!9w+X2p3}Cy&0c%Zar|KWVaquT+^(O(JlpWQLBaM5(psS<1Il0)Z%OeB z3b`oLM$mKpcD2+@Lt)WE0!bnEwuMW$tT5en0wJ;0_4|SC2b@u^Sc*>R?*4tJ6;w@R z1fggljSO3=yS{U0(Ajr-d-lFZ0kZXO%l4Xf&lP*aPJd5})e?BpF z)!a!^L*X)1?Usf2@IK##Mt9I_Ik#Oc*on!n%IYcXZ0ubds}r_g`=9BLy}028EV6Kn zp9uq5**aRLwo$EH~E#kfeW~$DTtl~8#T9x>!^{qfdyu*^O<7)O`c-9;ZSAC50#XB5l56v uBlZs_l$tQ6H#uyXfJ|bEATs1+dG0B;WX48BJf&$!+`zW}zdc;nPyYi@$7v1# diff --git a/twl/bin/de/matthiasmann/twl/model/EnumModel.class b/twl/bin/de/matthiasmann/twl/model/EnumModel.class index e6ff188b00c1da777cfa4ba7f1a89635cc3690c4..c4ebbe30f1bcc0aec6fba47533dc8fefd37c2185 100644 GIT binary patch delta 206 zcmX@b{G3_%)W2Q(7#J9g7)00^1lbvc*cpT;dM;p$p6tk|&FC{xKt#HFn2GYcaF3j-^V#|GpvF|Y&q91NUrJ{OSB&AgOcprR)1AWu+#UOcY*V z&YhT&;+&Y1la!d8&B!3G;e${VRGOEUn3R)htr^D1z*m%-n_rd+Q#zTSQGro=;uh^V zHbw?U24g7dk7d>#f~IG+#5=VuUL069(&L<98* Kfk|Pg2_gV-C?n1Q diff --git a/twl/bin/de/matthiasmann/twl/model/FileSystemAutoCompletionDataSource$Result.class b/twl/bin/de/matthiasmann/twl/model/FileSystemAutoCompletionDataSource$Result.class index 7db9cc8875ed025b575b97ca6b879a662d1bbf72..e337411788689ccf662ed273f205cfa204041d7f 100644 GIT binary patch literal 3532 zcmbtX`*Raj6#j0KCQZ6PtTZSMwPLkx3KXzndL@r4f* z#rJ#A8OJw{qcb=o?Wi-3Kly|IfPafKzP@vJo2D3<&d{0Mz0Y&Ld(QWr-TwCXk3R$0 zh_~ZNe1(q~98BWGA1-l9DINF3`$R{{gke(yGqUy5MthYrW;g|($m!0>l^1>ZsUfFggxudacxs|-?b*mMh~c5zWYo>w- zb{|lP3=y5evJu;{Mk|GJtGwSF&vT}Eq?k4H2h6f9<6tr(Hzmw{I;;xDu;WD%C9!iP+_ZQz9rNdS<0WIBnLW1KEa^aN?k}0Nyxpdk zof>u~ECOxms<}o$#BPS9ks9$vsRV_XIWgh)Qgt>DOTHU(m3-dc(@3V$x&&b<59&MU z&Ml= zCfsV^4cU7OIt;vtgW~Ni0|#(WVdzSVT_AS3(OLs{;~s@||8K8elBiTn+zkQSguKHKk_8Y$+alSf|32_$8v4GeJ>AL_pj`U$SX|%7SgAWR`EOif8Rz zP?i&}#{%RYw8dYlYk0xgK%x9nNb~DL@!5c+(3amFN#U!0lF(f1WIu#1&Xe2o<784) z!L>N&$QHKiIC_U)6%Bm$WqK|`W!9{kMJV$V!iQ!Nxrm1OZZvZ(Ct}<&gT@)eFCy`s z_SDO^4KcPyY3Uf6Fo_gDPp(IvSPHlq4%Txug9zI`Y~WA+`a}&xDm^NMIHV_ciVz!R z7a;sLK-i!89_o8EjjsI_OV{?S`2j{4=dd~>-6bK+V(F$xOXNc&^~|ymS|YPZhQFcR zFa+gFMA;rkBg$9-m)!x&KPw^^GlMK&bIjh?$oYwx@eM?n; zZMaMOlT;4#`XPO-2trANebyDWLYH58PJ-AM-bQa%52ROpicC*>2Frgz%jO6FADK)AozlWX-9o;^RQVL4nCV|jjh$;04W#EfsFIVoxz97DvXh^nT$-^rG)CWkGKiqU81@Hto+K*4)fw2?)|&nVSBbUO^n@R&3$oN2^tshf zShHr`yS(muSc3P_N_vZO{A6`jlhvui!H*Eug8Qn;BAxz3t6YGul>o|NS{4Gf(_e}| z#iXtH7|lKGUo(Si&mk5$k4TM1d{Ta-{raSAuljA*iuHrZWV8+P3kLV&P~hwnW=+ec zCrm=D9LdmG>p8H5qz`G|0f^WvR*kOZfYfM{XH=dS)P-sw{BrUci^}I%hA+s1FPZQ2 zEDv8%tY2$zQcgsy4{%nZT`N{8EE0%*JXj4+7-|z^@erp&c$icJ4~JM!r}&>67~^BO HJsSTPr(!Mp literal 3519 zcmbtW`)?Fg6#nk+Y`0woSc(OurGQl0ZVQWAu~H~t0bMNxsTRTKbUSSac4ya}SttsE zi1P4-CTh@xNPJ)nCYV4QH8K8R{J}rLzs1*g?o8V)6w`z@Gjs3Ez2|)A`_4Ic|M=&p zUjRISkK%|Z^bFbQyyg3&j^*Vo*G>CJa_M|w$j+sAIyt-lsOQ`HZDqgEQ^*%{w(k_& z?Urx#7s{oq-L%*C$~iv{Lt)+R4b9v>xu;5@T3WfH-!D1t2v<~>G;HsFg}T5(*>`g3ZKaZRwAb;( zNKL;p;#z*WWGl4Jwq{d>>(Fp_h3N-~lAL-?>lM0t=Mv^jlBPMP(W*_3>-gOY!!37a z>Q>B|idP|ntpf^14@s|q!V(inEJ`4XyG_*M9=>U**b+vbX&s28USYA8Viy z+o%w2X&n%&D^1LUDWiK$EDT0XCgP}0U=3R0XjVv0OB;AG(TWt6@ydgqR+8$qWI}Ot z3WR9HM!Si%Sf?=0FFaE$+NB=Lqmp;E%(7fytT$1Egu=pJ$F=*)`9Zt%v^ALHmfGGz z*2)c7B}eArOGBhp*l|Z{gvCRB4c{JPHk-wgJ?xD2+U|%ys-QAd-pXd}BEM~&oASC= zx+(;k)bv0Ny0AHpO$wXtBpXe1V+(6+xS||4%!!7Z%eZSEV%TP)6OYV84|c?{ouxJx zY}%5Eop?+kK4SZQtapVqm3cWCb_Ekt$)S)j@dTb!n9t3-EI&J%afj?NNvB)aw`K(0 zE)#u|?)F&zXo5Mj$HY@o5OHg0D1ZUzP%i+G9K3FM|ACV4o(EyLwpF2GsMhR>kI*#hp- zZB>WBoW48cU}h0_NmFQ__0z14uysIy4VxGNGuiN*R~aL#KO?UXnmB|U=cNCZ8V(Ul zQMx8J;9-UxwriGz!^>q4npu=bi<5;Zin4rzBZkq`a2`w)VuFG#zb0$Bds%2MA`1lUKwYYR`2?1xe#Wx>6KJ@B z71P62se6nYSj`pVxNjU>o&G_4x}W!DsN&tFr9(V~Mz92`&hAO(Z>4m`+9 z{yIcwqLdNSkr-qo@fgI#?iHf@K1A1U}V!dK{_gr)G%1fR;6>3vKi?9eQ9P9f~XUi1?Mh~{bT zitt*GXRw9#n#kV(Q5)FD?=^`0g{5)C8o7uqFoeF9GYQaaBUyx>9>=o+C!*n0Y17BF z>m|XuDc2^RBROne(h5UshdC3H8XG>tLRwovtIzMdf@H%bn4GWDa}gv6cZm+?1R~B!&Q&^7E+TY5+(v-hOysZ7vIxL12(P0^gBu$Q)=e!3=HKbGKH|`g?JEEKE)$YE6 z=C+1$IKN`eMuS;GIC3+J7z|pe*3!f%Gr89+%gzNHiC7f!Z~i7xt2y_W zq(KpEWP~DhQkZ2(LMR_E->laKjV!R543Q}&QYy4_oLEGq=FraO`i9F`B-ZL1h60AJ z$*1~o%%y=`wIl`jnD9O!)t{oC$t`sgNYy+=LbDEz=MGjdcPFJ{GW{jL6d{c&gz_9M zOZqj^U!GSTr5gJJNlC@m#&P^2V#d{q`Un#8lJ*)TWaE_AMqRA|f$TmFba9e76>xW% zItlpBwkVU}RBwuo-ns}j4z*wV4FRm4z?r_aoUE9@IeD&<=QVYWdjk?0*#LkqdH;&7 z>uZ+TH&plv8^gCO)9*C2ppjITsWg(HOyALjNO8W)JyESU;cg%g@6m7s@8bhLYqi*2 O?0jI6^x(s)n*RVh&MR>M diff --git a/twl/bin/de/matthiasmann/twl/model/FileSystemAutoCompletionDataSource.class b/twl/bin/de/matthiasmann/twl/model/FileSystemAutoCompletionDataSource.class index e5af756cc5ee1f705bde910f72aba1113f7bc0fc..aabd574a1fed5e500c97be433a4560ea6ee0626e 100644 GIT binary patch delta 1277 zcmZuxTW=dh6#iy!D#Z68r!j_y@f5&;n<6qY4nR_Ut!jzVn?kXU@9O z{z-fN$3MUM7Qh&G9VGDr$7}?h4m7-IBY~HcnRD{ijIr|Op(CS))3WQ2Vn|6uQP(s+wFU;n11n5>yc% zm!GlTZiUtbI?*N2jiW>rxQr_T&mkvk#_TB$Utj|TflX`)Y~yW#Cox8O1d7;E@g;$) zxF+z9VwDxEf}B7Vg+_Eb$q?VpzndQ|=1YaqrS)z9GM#L!5$}{49&3Co*oj8GU;d)C zvY`-|?!Q8otL3dyfk8h$bWZ-nI%LWi&>2QTg~O7W9kS2tm5b(p{K6cktqs}32IZpW z%6{vZJZtUL8KMQhy12U&cD6#TrS-CZEnm)8uTmFVsKwQ}(iQ)`r471(qF*XhH_=O1 zngl~TU3Xmdhz239+C*=Y{5`~Ac$`)rL8l*(^7g>e_Yu7ZZKYM;gYli0z8iz-4c~?J z6)|-5$y<@5^?t%VVGIT^NGpmCa{Bx1;*K0+>4`9Gtr|3**#Z}cdh2!q)SWr>hTEvc0f7;G@K?yHDVfVCeT4RMgL1jEcra9+4=l%J-?|Z)9jqXH4 zKmPI6*8q-VQ^F@Orc$C;{VKY8Bus(Odf|2S%>PmkWs&jk;a5!ciZJ zcg>VQKO^_s5>E@{G*m%5@MVWDE|Ly17?c?J7pH}4d9AeSVhCAv+wOB520Z4nm|@jt z4l&NN0#koi6z;v?Rc;ll4o2|2#B%~e%{n?P7kP}TpX@G%7{LoJ#xbFOvs1igFzMn& zhOuOy(~2BUxj2n8Dr+2c{77QP#mhLW(sG!_In3!o |&t*(8=#d%y%Kgf-4t-a{t zRg4M*R=w)ETN@2R6*Xu4Jgs9DTr6Wkz@>V@d%I9BR5#0-!VMQ5h6Vh^LZv!Wy5YSu zzoO-={icp*7roMI^`=@dr?%-nQ!07oDcV-N3YCpC0?z5RqQ_PB%1E(Q2A2gNLV6f{ z1R*^No)+bPxZDH0y-z!XXCl3aVCEqL4{%^H+`fm7Z_=6jh^7bbBlZOi48*ys?^}Ad zdkB&ZFC=h~H~QDJh&s}Fe0YjD4Dly7LqbR-B@R(0(2Kri_AF2BW2NsQx=Y}zXR+(T z5$Hsks3zS=BybqpM<~+V|LGn3ulMNxdLKo9!&#h#U2n@)#^|XbJ)6$d@XQG_V?<0| z^VZ;Z$lXEjU=1fC=BJ1gjK!=PPTtu@+u*mz-NSU={tO{aJ!b9WB_Hy3%zg+<>^?wl zF`bE+F?$cQd098HV{#w!1}?{B4GSM>vzXMZ8=W0T8}S6&coIQOB8q9Y_7slrJr3gx zH8Ysy?>y8+r?WnTE1W2>^<)NHxP;5~c5UG`EV7we`#RoWiXb*|g))rSmi5XV@IWdrV}~IHAkj$CAKY zW}t@aTq{fCiH~6!Iaj}a#k ZLDf0~`0y5rJi|meGT9(Lgd|FK>tAuDzD)oC diff --git a/twl/bin/de/matthiasmann/twl/model/FileSystemModel$FileFilter.class b/twl/bin/de/matthiasmann/twl/model/FileSystemModel$FileFilter.class index 6bf337929f6d4cea4818c6ab0fbf2f31a062dad0..d1d9d90110aec47a5954f248c6a18639b5d29341 100644 GIT binary patch delta 132 zcmX@ibeKut)W2Q(7#J9g79WZ-hk%t-~}lGGwb1|HA6 zywoD+oW$bd)M7>kfvm)`ME#t^ymWp4q^#8B5=I8ii2|B>Y>W(y3`{^H85kH@7#Wxu aSb!`h239c1#=r%nxqvDd8Q2*(**F0=!x#bp delta 138 zcmX@ibeKut)W2Q(7#J9g73yMCdz3}T+c1W&cMRRAdr<1~V`) e0!?CNU<0z47}&ui2LmUN<^rk!>S5qv;{*T!gBeT! diff --git a/twl/bin/de/matthiasmann/twl/model/FileSystemModel.class b/twl/bin/de/matthiasmann/twl/model/FileSystemModel.class index e3d7e188bd686932b6476043971c3b5552b67ce2..f2a1ea024e52235bcd3fcec0ad4e1f449c2fdc18 100644 GIT binary patch delta 197 zcmZ3&wS-Im)W2Q(7#J9g7>w8%blDm7*ctR08Mxdsb5eo0B(;cf@}n?iUPgXy>f}6TF)21i21W)Zpv{a7k_>DN>_D0W$YWyQoSeckT~m`m3n-!v6k!3< X8bEPvu&fRPE0E>_iZKH*3mYc@o)#y| delta 202 zcmZ3&wS-IH)W2Q(7#J9g7>w8%m>3x}C(mWl6k}&#VPp`Tn*Y{7#N=+`A zsBg>5$;iN2TAW&>myw^Fx-s_(lei`$gD_ZSX1>0sziUNuYC%b6e%@p!<{|+e&%C_U zBIlgM;^Nd|b_RpVADJyxx!f{yQh~T6wTO+8fsuh3Xgwo?Bm*l08<1uP@|YMnCa17W j*VJOr28yTyMOc8e22flFEUU|)2c)@xV){UA$i@i(jy_|F3dCa?b5!Kh9$7cW=$Z7~75ymX$1Qs;NNT>`+ zfklBOg3@r@j_K4af?jFab*o)z*d43Q?Y`q!?XqpUuH_O+2VG+;woM3?8cw6LOOUg< zV?v_OT3DdHFW5R2rTPJV?`j-jqD_JCT8FTCE#t^dS%gpSZt=pDA znCvfAFohUf6iojoN^$Rh;U~x^Jp}F%^mEZru1}W4c_v{78grB@8S_wiD){fELh3In C;zAYx literal 978 zcmb7C+iuf95Itizaq76Vq+A+qEwn&F0Sm+vi4anyNJs%5T2+F#jk5(;>rG{ETk%i4 zARa0};sf{+koX3~>^dr_^uavrWoGA`nVmD=etrH5;2}BzJi_C#j5A@(+f)>p&^k7U zD$XWjsp3JZvQzIK8kQGxZad>eM_T_?_-HVP=Et4?&oVa0Vfv-gob_>{^Hr zph1`)rdqz(&qgxe5+lV`w1$&JsBMv_)^^SiKIWK@J614@ND{ec2v0ke3U+_)4No?$ z*L~f@5-tU36S`G??ua5>#ueMPqSS?OzH=Hkp_W zD;-BH+2h2l+_xY?^h|4+Zzxd|k{cGD( zecoqbrEann!{Z%jegVBYLi7>yAK3J8miN#-{^0XFTFwiG@pv4AiElvd&Jh;>!0OIf zLZUJN=Ui?U02ij<0h9X-Zmi$^go_^Dy973EiT~+Ru9PuTJV)ayt~t&Ima)Pd975?tN#$J!@*ohs-v5O6*_3rvX43rS3hQ>*V!`cb8NpX`>#`ZXwbYJX_ zn-~fOn$k8vfdYL1Z6QD-wUJ0m;*dsIfFPAXyaWjGkdP{V@{d1&8p?O>jCaM9v^`o*B zWhsfYD}u8%=)k=OPE?}-C#x}skBQ#L<=uU<_lY<@iTe$FN_IYN;4^Ww;sFDvMC`#h z+VEKe4;gq^Ay%-8cFt8uq^Iq^tmV4L9IKSIa=AYDM5ZsBpSCl7<3-yZwtCpMGMOxs0;#`JOPUaK!-<&O3pm^^MzxqMqSb8FW@)l(2rkcY zWnPIx3Xvh5NPXJL*`u@BNxP_#6ddwXR_2gZbOc#{GeY>8=Z3TVYdI zVr5tg21RyTuBFh_HN2`sY$~6b&9WS7SfO^zwWjVFu?l{a4OAb`=QFNT7|Q2d&7V+d zQejJlvoW{mDJ% z4bak=KFMGg^@nrQHlMrKU+e^PRSy4|cT_V{p^oNQHyx4YXShqm1muH$>!b+s`lF0F zrL=9$u#379cM=vFDi=~=+nTll%9T}!Y$T^C7MF_`lWy%=mN3Ki(xH=7^hZ9%O8KHI zeb`)4fT4VrbHH-*QmC4oeIiJ=x->hv$fk{lE9zVB-H@Q%RPkod$tkn zGk8{E`x~-ZF&ZU_ZiS6OqU8#j_!h?51o~AOUK8KO8PWOEQ@?o*GlqK&Ni=l20@+{Ab)2D^sg^C|_5j4sy;>Tj6j3Zt*$VB25GC{bSlwr40x`$60g!l|> zN?w9WrY<6s?7oO_vgaZqFLFPGUarlEa(#%B52G57pbn?8krS?uyGc(UZ^Je|(USJB z^qoWy(svR=m_GaQcHeU!uObyqUO?nLZ#-8qz4@p%ZF&N}X@Y}ya!10xkJ4gz+twGj zLI)|&^0$@$VmLv=VKIIg(Gbov!Pt2vj>1~JQOErlKV>-@@i-kmshu`^hRgYE!!39h z4Q{7q6ydho2p`^Ej^qiN5deFyz?cX;R)ug0)g$6`wC5`7x*Oy3sOg!9c}Mp=YJ)I5 zXrD$CM{p~i#SNU737n~bwznKguOCViwqOSa7-%cu-ice8l7v?Sbqxsvg9hHiAm5AI zxC&e%D)1N#ux@Mra+ zLUNQS$`R{ZuB2&bIdCsmSc&>p6w(;+m8HuhtWa3us3iD8g=VO%$s^gP&tNDy zkERP~9_eO?sqP#|-LGL#G-igD!W8OY? zM|dw>@ig!9k!wfn8u|@<*udSSrGbyA|DxmHi0onp5eo6^k4n;jM`%H8lQd|B)bpRXo8P1AOWp(l84)#)^#i=%puzvUli M%YB`xd?Qx(^b literal 4167 zcmb7HYit}>89jF&9(z4;5-00dQivf3S1tb%^*@xF_%S73o zJL7xLcfNDa_ubiF{P*=m03$f7!Kbiu)=cCK+dgU;<(!evC+y?dM6NJvW)u6YtT}nI zY@4~Ml4(xJv+er|*;%uc=2$~OVZ$-waU+p6@<$Q}W{#N|TSJS&9V=rB(v&fiH3dSU zrD&AQysZ#Pt#M6K!9Q2dDa2M;QDg3~=9-o{hqyv#s*y7P+L}3PWoOAmA$fRBxXl!i zFuSe1WsfRY1FOI+5h1zC#Kt_9bB|0b1jeXk2!3qRu^yW#&_HCm4GLX4G_=a7M@Jh% zGV0UO4qah=%F3JR`P__Ia`r=%DP)Z7v{ABTf4qkQ8l$YRYfU6q5T)&iX}i8r*gOzf zo`izNDSHgtPzVohC&}kz_v+WpI9=bl(q+PP|N0K3` z6x9(!oGOu5)+pPwku_(Tvs9^)z`Si`6Xa~lwr2|2`5fJ&#ue60+D7KF38UyqxRDrB zg+kW0ierVmO}lFtQRuGu&<%X=JUwWZB-J~0ysN_fpkW^kVHoe0&D|*i)n(yPj!d^= z7ppOpBG+xKUWe?iZL)5+j=Moewiv~tnP&!r%>b5RdTgl1Fy1E+_cW|@>pi(#!1|SA zI`&{M3(PLKR2v=OC7|Fd&nWb+NJBwix(^%NskL3uaKA!_BWm>_15^AlDQ<<7~p@ZdQ&7R=4R*=T?vnKE3Yp?JKT@iFz3>{+eL#K2Qj^*cYa~cnec3iA? zNXJ7`#Ovs(EIX<*gC!_cbkOUTF`96#nQ-T=a>_L3oWAf7g(Oh5QWb_*#j4d*bxE=v zLCokljE6OdpH^nlWHsAW-f8_Ixwr|nA%mkjED^gsec;it`^Hmy9@v|1!(+&4$g=iqUPeq$7_4jbP==wvo@U5A0q=yC#g6pfUOF_^6H&xFw;iRjzinN9xPUD~>e< z@(xxWwl3jhn`1_%h0AB88*K>TNqkPjDTPh7ZnpPC#w^-a zA+O^pG4lE%+p6s}#i^1Z8_-sspQ#)Oo0ByC~xIcvbctKQp zktz@DmxDSqS(q|BXgsK#AeHim0yS zmD`YeEAL_G=Z^aM2_k?_d1v4YVyC<@@VY_X7kGs#A+jl9dk$9rIN^a?to zvC9ZY+S>(S~1PH@rlqr!Px>lxaB;*g@pT0 z0K56QouJ(Ud=+o^;UbfZTvQUo@8r|zaDEOww8RcP&v%6voq$~~Xf>BX3}T2O6I>aD zzh_;5H}9yjc!4k?-q1A+AF4%srw>jS%<1rhCC`^^kN_0PojO4`aX;^C85_2brTT{!y0|7kivu~Rnn76 zBf<2Rkw&FosY_g|M$>T6NnGIrc)$ZXO(4m(-+#A2Esma}V>sA45_<)~trt%D)YjY1 z-ukES0w=jTy9u5rx$iT{3*4IXbifbl66~*r?8hX1%NGegnPPAs@4E3pj@$&>;J=A> zrP_U*G>r#6Rw-U(*Eb548_=lwha7q}79B(Yen?+lB9jFtx@)bCUUU(V?xcotDtgHE z1`RjL_Ie#k&_hvp1RwSm$9WZ6KELp&xAtP)O378KM#;h8t$d2Jg>N6T2&c{=7*EBn zf?eg%#Eo13iv0wcMg#qf-h6{<{hZbI26etsr*EGZA;{;Zqi-wm=Q#4QL$rD$$-e`> zn`qS#g8?E0*z2C*yf1RK zxW=9TCC(Sswxi`HMl?LD;mfqAhOerwf1~{t|Ex65=GT(}-tgB5@1%7-Ohj=;zwGZ% zk$DM0b@3YZ*ENvmq=7tN+h*6mf93Z6jTHV~XP`>?cm~!P=_O+O@J)P+*FNU*ZE`%* RBClc@wwPYV&aln2{SOh}+m-+T diff --git a/twl/bin/de/matthiasmann/twl/model/FileSystemTreeModel.class b/twl/bin/de/matthiasmann/twl/model/FileSystemTreeModel.class index f1da9c4cc40c5fc3bd105501ef2dd6d3640fcc51..b0054ee28b1ebc528e25b8aeff792c32e118317b 100644 GIT binary patch literal 3481 zcmb7HTT>Hf7=FHN!sf7`1cRbrX$t}g5YLr^N0dT^Xn|rytzD7@7dHuR7M0r8cE&&9 ztuq}j+L_X+hoPN1y=rHA)j!bx(djt0&$k=Gp@|c@_|EU?d7t;q^2e*6UH~|Vufy1d z=@53}k{mt`bGR&rnINtNaW#l*a`#CD*YT+eJ&XuuYjQhCO8Ig@REK2z$4we8vz^<_cMX#8}2i zW_8E8Vd{mfp35bjJ61Bw7gmy5jLGGKV`RtWen6nX%%!cRj4`Gc9G;nTrjZd4GXgb* zyzQE799z(D>&Yd@w30*l?4oY#PTr<$Xwsa|>CTc(+wroG2E9{D&&?+<%q|#dXW#?{ zBdH75hek%n&Q6?52@G7R%Ht{9FkG+O)?=ownn5#XIwu5@omHvv0-x!c7Vr{oOr*Dqyi$#AL_{w`SV(4VZlyTP)h;@#3Z2*1JvCZ7PgemQ6V``}?O3^J; z5a{Xbsw%WK=0wa~!LXf)eBSYVl!)5gN&H;KY)m`vblYwt;jWauw2T}teP)}A;{w|y z0!+?u-u99$km~%uTy+kYaVG`NMxn=}jr%B4Ym`jfcr9bD=roSq*Di{|g)0&@M zU}8KsR4l5v#hPN|lf}Z@#f(%az3vKE6$&m?Sl8NA1afOVOXf9hCjRo`8u@$53zan| z6$J;=R{_Q?37K9QqlOOjX=uS-4R4`U!!fz-KqnDeqd=`}Qmxri zmx2ZxeJTnX94rYOtETal%x++VG;~|T9qiX|7t0zx!#xeBafT_;@HxKF@FfN`+{afM z-o`r`+Odxn^G5ar_E&y?dbZ%$dfF**&8;$l{>ma{kSvD88@F+9-&%zN9hLQ!OnW~j z^|q1C-!@KL*3b>p%CJ;eC6%Suy(xMgvdqF-bBJ|zm92X7b)9jOKLb@2o7bAk^a(Pu zPPP;_)lx9U{^cIX?)MrCn_U@|1ebMs(QP0C`^vVat>CkB1SwRs*Dd>WWjHrmWDU%@ zUjbYgx0ZB^4Y#9=(K3wulmF2}%R92XKLM}t#U9Np-<15md>oCt)c^tdA z(|M4?uY*IP7qlCOQdQ{xHcIRfh@!tU`g)S%B*+vq(jsa1<=`4de?Jm1f7mWFEM zPoO-68h8x9|2rNikY3lgmxHc4&3jl>cYwD6_#&sI{6QSzD6v@NES+oL^DRdZTZx?a zw}+FowKrO`5>;2C!4+;iJ5k~SoI*3s5c;zOeRx9%?WGXfiP{k=@vJM&J_*fHyvI>m zPjZ$P0*uBdwfisqo_QvOU45rU?2+glCF&F1a2Yrj-`*p&tXh zujAPuj?;&F66yq_^D+PXaFQ!Ys{Rdl*TVM-4Ju9v@i&<$WCQk`XV41W2d1TGiB)X# zVZ8fy1mmg445s@Twx@c2L!WZgAM^LDqF&$;5W>PVin@kEBCK-3p|%mh_U5+je2t(@gwQ27OsAJHfY h#{VQZdWCtP4o-3BBgJHOMY(EXH`~oI!nqlt{{TAjG#~%~ literal 3444 zcmb7GTT>KA7(Klg7M4+Q5d=gciBVWCt0o!+#0y9yE?@*PqQ=ZF1CGw_;_RTJN#(`= zkn+)olvSxbn2MJosaSbRs`8p&kiU_#V$RnyEGUb$QpHS9cYl|2&i8fiU;q8`0>A-$ z6GKR$XVyyPOwYS!o5h@&&!@cGPAXTJwVc$5?O2mbMbFAjxt291b1_5|_HAr(B2)BS zGwX@Ll$mjSD~0e}F{jX#-q>^a+-RZueuRmFnqS*}83 z`nq|`Of7o0lNu`I7EIUl3NCGHChhsW=`FgJLbB|p0e{vp^Yf{R%yld4^$*gpc6{RM z(CN|i@VQgt3jLQV%D6<&?va8sYq{g3ioU7`vW}g%y+Pvd=$uxF3~?cbdWFN45K+!; z4HOy-Y{F)REonP%jW6ahmaDl|NTdr{)0sA1TeuG$I=7875oilUW3lCa))Nl@}r*em%p zD{Pv#JW?@Ka29iU1}EX8oSpQ{?2R#VA)un3yZkMuEt5h`S$910*)iI=rWz(a*Ur!P zSEHAe<_lVleRL*;xGNV_Vl@sZFoCM94#~n~yafHfQONADj?Rjh@Oc+dhYcJNTDQ7Z zu5imb;W$IrY-iTB^0ny4(HI64IxDFl?b5&?jiySSoILr3SOHHd@yk0XH-!skf^ z`)yK`x?30eJAhjs(^qlWz$tVpYz|Zm&5c1s&nXx(4KTDfB2OPpZ~%;{54 zziTBCIoBI~*nC($O>Ih^w_6hakrlFGG&wT-|~?u59I3 zH{bGC9sUi8pRw&HjzehVGtM{gExmPOyPlO}oR>&oX>wg6*C(H&CE4{9t;yD>XiGlB zu2m~SowOu+9w$r1d~L`706^ld{_N9LKqH=ov=thg9p%hp+w- z8GJmx(&vb33avO#y{9P1g*BM^f(%;GfX{G-IS8hDgkEt|G$ue)3~A7u7YHW&B$d>+ z)b+GZVHsyb80-EM)yeTks7ZD|!_;`sA2<>|6nTV>o`%RWrbGB0i9St9bMy%=cP-;; z7!Od@9DRI0q8cJS%g8D`eD$|l6{J^p$_$^E*&kQ14Oh{^Q@RZq7HF1$W-$bdGGz$O z*1%4)P?=dttZD8MV6}W&{0~v1Fy=7NXA1^`kw|)tqDoUV(9?B_AXIEe)k|!P;l@j$ z}L&yeWK6XXlshs_-s~B`2PClH<43ZGzk`bbSv)`gmcb zg(JEd{6bygsd1Ml$UWM9qrLlmmMCFQ$eB#+i}dG5mKhldwlLIIhPuUJ2)A)Zf^xLP O<$F9*5`2G+n*RYPSSJzy diff --git a/twl/bin/de/matthiasmann/twl/model/FloatModel.class b/twl/bin/de/matthiasmann/twl/model/FloatModel.class index 286029a2e1dac0458939f4577eb465a91bd396bc..80339e5941c0db56a027f6f85c8b48d946ed5ff5 100644 GIT binary patch delta 169 zcmZ3^G=)j{)W2Q(7#J9g82H&4c-R?u*%|mIdO6B+1?QI*C8xS&=A<$*@Vn*YCzkl; zr=;fSWhIs+PUKY=V`LBjG4*p2^V0SGld@8iOBfmSCJKlIm6l}Y6zhj)mShB#=H(?O z<)k_%=Hw(LCTFuTGB7eQ0WmYsMiv%E1{MZZAcK*C4N9{^X$}TXpbAC?E+EOozzqPS CdLq>T delta 205 zcmbQjw490e)W2Q(7#J9g7zEfEm?jpgi?K7XFfs^aC6*=X=OpH(>-#5Vr6!k56n3oV zPE1L0PRz+kN=(jXWDwWzK`06;&C5$n%1O1>3}a;AD@x7HFH1!zl|PzzlQ(0|Oh-W>y9^29OKbp)?1S=46oN0!wf+@PKJv N5DnDI2PByo_yGv^Dlz~7 diff --git a/twl/bin/de/matthiasmann/twl/model/GraphLineModel.class b/twl/bin/de/matthiasmann/twl/model/GraphLineModel.class index a12dbca7fcb3093c57ad7e875f64947408a977e5..385f44d54ca8ea4d79b0df5ce27f9c398218ca23 100644 GIT binary patch delta 109 zcmZ3&w1i3E)W2Q(7#J9g7zEfE_}CfvC;H8p$g3U5$RLoFSeB@tlbDyT@1K;Fnq0!h w$iT?J1XRnwz{Tn*Y{7#N=+`AC@_PE ijgf(off=Znfq`}6FIiC@29Q!-1|SWT-~*CO4Ez9hh7ZsH diff --git a/twl/bin/de/matthiasmann/twl/model/GraphModel.class b/twl/bin/de/matthiasmann/twl/model/GraphModel.class index a0a9ebfd7ab07441852978ccdaf6d519278a1be5..8f9ba2977938a4b3773a3f2eb76c89a7699c96b0 100644 GIT binary patch delta 93 zcmZo;YGV>O^>5cc1_lNr23~dsZgvKqiC%pZdDR^m83eKt%M$f-67$ma{gbj%lS|kb o85kLufNB{Sm{}MZm>F0Y7=Sb@0~?rTXW#(JFfwogNhSs^0GWynkpKVy delta 94 zcmZo;YGdL(^>5cc1_lNr23~dsrit^^#n>5G7#Rez63Y_xa}x8?_5G8wQj<$23iRo* oF)}bRFas4cFfaqvurjbQfYh=xaDZt}1}>lsBLg>(WMbd}0JSX*=l}o! diff --git a/twl/bin/de/matthiasmann/twl/model/HasCallback.class b/twl/bin/de/matthiasmann/twl/model/HasCallback.class index 7c7c61b933dfaebb3534baf5866531b32c0728b2..2303331402d14d8b79fe025a5c587d1ab16f97ed 100644 GIT binary patch literal 1100 zcma)*OHbQC5Xb-P7@QabhLq5E3oRuM4@-R=8rn-Fgo;I_g2JJvP3#s^Kad~vb5&~9 zsE4ZOeyFOmapD+oB@W)*S!bu={?XldBMCd1mbDx_Q!+`HbX(@z+-%RvpDNaM!V3(t2Z5w$8p;z31etnZ1ipv`dOM+*Gp4Qo&D%W z`S9oo-Mj!B_oQufu|hAs1_qTrNz9D?0-4S?<84=(MV|1DoW$ zg#|iknG+UKCyO2ymS`1#eew~$^;YW}q>VZ%1IWKI^&Qe>+;a+lF~l{pkP(i8(ZDhR zsg@kPhsw}P&%gsrms590#_IxA&#C%|D&tmO@5^Bppeoc3pj_7Y77CR#DY=@Le4C1t GaOWS!as1f; literal 1045 zcma))-A~hC6vm&km31oxMumajA|mT%Y$C=BN4!}=5Eo5^?8d8iYtdpqNI&rJGSRqr zVZ8Q_GM<-iwLmYpc|Y27p67SobN>AO`3t}^bX8OcTef5QB1t~EBKAcPSjiX9@}Heun|jdBX^<@yDW99T|?b{MA7*x7UCJTwcF_*6Cs z8{D-jPcfk)TgNAb&pb}NHu$!~JMli(`2p=KA1cs!)p!TG9Q*_eeA2TZEMkdoY=mWA zrN9Bl$XKJ(`39qFtW41QjXU3ATvprRoag6itt?}z#<{qQd#p#epX=^3w$yEAx)VGo tSM4#;Zb7w~t2U>q3LfRJoN>t;>wB`DqRc71#5MO=hW}^AA@S>L&mI diff --git a/twl/bin/de/matthiasmann/twl/model/IntegerModel.class b/twl/bin/de/matthiasmann/twl/model/IntegerModel.class index 9122c9f29bc660386bf9e228e6e27f74d677d0c5..3079923e5d2815d7ec14a9ae0295ec3c32850486 100644 GIT binary patch delta 142 zcmZ3@G=oX_)W2Q(7#J9g82H&4c-R?u*%|mI`Z!KJCO?r^Q;d;8AS-#5Vr6!k56n3oV zPE1L0PRz+kN=(jXWDwWzK`06;&C5$n%1O1>3}a;AD@x7HFH1!z$kbM0=|=`!q{c)B64c-p%=@P6;*BijyxVTan5 z{9zd>l}n>2V4@@t$F#r{gg^pifq7KCcy)_GZ`ys^a_!cwb$Z=&>OF>J&}y`;$!rw_ z-5rfHIHSjUMdo-r#0$l9d8Qo7CvH9M28cn+^WC`eWJ44w%)!grx zr2&{(9zZeQ!CwMklDtm?ykeHT2=WBxkfMr__=Pb|jYtAw^9@R!94mbw#PLix1rwe@ nz>^w_81eXW7GV$*M>@bSVVPnG8LS{iS(5M?HW7{Z9~PW{x57g` delta 477 zcmYL_u};EJ6o&uX3sg#l3W^Gds8ykW1w-6eB$_z6u~$%8AIJzX#Qob=*F0`HHpRg1x%c&`GPE51!fzQ4ylZZ_cQJQ*qldu|Qz2tc zR0}G?P!w<^R79}I!1INscgQNNN=s?_z4yR!kq9!#%2;Elk*iuz#VXdlD}LmCvSwh1 zp*%B7lROIEx75|tlTOF(H5{woxBD_m-V-m~GARE>ks}M7A_z&-geO3Y3rF+}5=8_m zP3NhqQ_m^KjN%wkqcnzQydwVW3zz6r`~||}1xf0~BFV9g70QhKrsy09R)a`_9y3Nn z86jGHLz?4}t|SOn$lo3NoaCQ$#u3CEHfYYV>Fc+kQx0GoyD+GVlRkqY$|3Q-{`U(Y Cxk!Zo diff --git a/twl/bin/de/matthiasmann/twl/model/JavaFileSystemModel.class b/twl/bin/de/matthiasmann/twl/model/JavaFileSystemModel.class index 3307849347573c4a6affb7936f49cf82372cf050..edbf213c1986390d60d3b69c8e152ec60ac8386d 100644 GIT binary patch literal 5772 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 baLf0&7Qpw}F{Nq(?4EHv9w{MB?LYqq#L4Hr literal 5777 zcmbtY`&U%g75>f)!-e4@h=54NBEEn@CR(*d)EJ3YET{pa#l$4n;R08O88UNGOxi}X zNS`)oT1|`Ayjz<_TZ}DWXpK!;ZEaWojsDgjy82U>tMuFVUS@^?G!GWTojK?1y}$kK z$JxW3|9x-+z*_uWgHK^~ml^IeY`fPol6^)j7Pe1B!+r5CGaBA)95;4aQM2P@(l-0r zWKBbkLh(^kw2fHAR0y}uEjJ5*CJJwkM6H-* zZ&mQu)*VpDX(qHF6bg0BLr@`iv$LPirD7c#@)U|%t(duIpzny8*l!$((r`&@JYqx- z7zs;0JBva1QAm9xBdJi(W7;h#oNH?9J~dLE8am8=BVpL_ghDA*q^aw$6IQIJDIb+s ztl8T}r``2@GmNSHA@3!aB% z4tQZ54`2<|rNmtii>LTYTg>FdQ!3e&+!>E{nWTK0hf`J$iH93>d|5m!u#%5h2_|to zagzR0l)lM_vw{r1l>9FQjF(iKdy_XRc&M-zx@5twg*}!Dq*%pbzT! z8afq%k@!H&ZZ(gaQH5=v4@g~$hQ}2aW>@0&0ZVcwh(jnWKmbqbXuxXu__PiKM%cX#%Xg-GNE(N5hK>3)1bCB9IaHaOx4y8CdtY@8W@;#~T(^AZ5 zB&zGki8N7mIp?|7X{s?ot*w1LL*3lPO2>1e?9D_ri-3Z%B!)cD9*;`{FRQJa<(yFP z6CG#qQ-%4d6Y2gM6b)0&^zdxyH}~zG)f1M>XTEGR(KHv7pXsdrd*67hbv zH{OEx8zsE%CCPJ5$8VhrF=E8pO@j&SKW0)z0d>WidpS@_%Wj$_bG+UcBO4L-Trw;g zq_DQ1v`tT#brjq&7%}^8D;{Gyd@xmtlxx|W+R^a)sh;l9+Y;*^u!+<(`hu9i4atWO zCClCNnhHW412=&`>i7sB(-i4UphnHJ>4rIIEx-NAHv{`w!Ox^PJNQNGCG*-J(o<_=}7E7oz zABCtxJqZd?R)_B{N;On&+!wmiuVp?BsbDazU5eL>%JnGn(87G&)Jf`bc88J6bc~DNAnrW>yWjiZIZP_t; z>^@%X#XirA9rQuG(CR}C<9IY%QD+8JEfs7H`<-A@43F`hkIBVJ+*PT%=&+RS>H5$( z4s5Nb-UAzQ{2KxjIK+Z|VpHxVG?(R6b#2hfw2PQO6i`F{$@4y!#?x5D>31=Xpav1FLKiE;WDRs^OOIqO5>?<=zE@ePZ7^)Dtv)0eh3TjBHPv} zUIyQGaMio2Q@EDlSug*V5xL}_k7os;-=QxLenA+JuK#s>!-LqvQ^HcATd?1}(pHKW zu5eS*IFDvslIA&w&T!=i1oTn{F@>oDkWMPyE}y`@MUXBr>}tC->QVU4Tt>fpPormP z^c)6BaK_(F!A;*@j6bX=SRbK@n4UAZuL zDbM5L%lM&ZUVn3b^YAyCwyv2Cv{p4xAc?bstHpz>ibGW(;!g@4u8WDhT4xhMb;`kNFPUf$zaR-dr};}-x!KHm)AzY~^-CUc-Fumv zlFW^&t>j%^IqwalSO$fXcgJzr85V9~0VDtZFmyiFGXWY#GNuN%72Ke)59z>7GWrpj z|Cn>YpEHu8F$J;_zjLMtA5WyGhw)q+jb?{HK!fr(CG za14JK#m(%1+;MEWGeuF#W|2pX!k>sLTlF?iwVt6mTkk(I^y(?Sx~JENTZHJtZTyAL S62AK@!}hn_e11uDe*OPJKLg pt{n(fG}TTK2!d|`DG3QA7s70!ny4{nLm>TUhLV}_lCVIb(jSGU8ZQ6< delta 157 zcmcb@bcKoc)W2Q(7#J9g7zEiFm?k!uim@}WFfs^aC6*=X=OpH(>-#5Vr6!k56v!1~ zWZ?14%S$bC&PgmTPAz6<;Gg(HEu4{o&p89AFx4lsxFi)Q&Bn;U$iNIVlYxN+XcQ|0 l8<4@szz(H3pfo1~7f=Ng12>rDVc-SQTtJ;b^B4r!I02(W8xjBj diff --git a/twl/bin/de/matthiasmann/twl/model/ListModel.class b/twl/bin/de/matthiasmann/twl/model/ListModel.class index 3c33c32a8e9d89aa95ed11a7a99a8a708560980c..dd62874d96907d230b90ebd6d96bedae024556b8 100644 GIT binary patch delta 197 zcmdnPvWLa^)W2Q(7#J9g7$n#kMA;d{*crqb8Tgzt67$kieKLznQu9)a7#Vmx^MJH- zPGWI!YVkzRcauXIwI`c1%1z`~5oTl%$Vx0r)XxEG(f3cvN=+`AJb}?Pjg66kk%0+l zHUk423nK#?13Lo)kmg|E1d4M3MVT15fqWhyA0*Dpzz3%J83e$zAc$sQhN=`|5C-cI RVPFN)TtE|;ftZDj69A`C9kBoa delta 197 zcmdnPvWJED)W2Q(7#J9g7$n#km?md1s)?~PurM+RWF?j*>gOcprR)1AWu+#UOf-Hs z*@sbXvLd6l0FP&0UTTqZPGWI!YB4*5*yM$brsa$be9jp_^{GCY#U-ggc{WA{Mh0e} z*$fP9KoeOR*cd=2voml2#W{hZOblE=J~xmL66ayy1=D;C{9sxDL<98;f>jDZbqF(v P0Qp=%6GVYnoQ)Fzvrir6 diff --git a/twl/bin/de/matthiasmann/twl/model/MRUListModel.class b/twl/bin/de/matthiasmann/twl/model/MRUListModel.class index a2501f149fcbeb8bd9c316a91ccd03ff5f8c7ffc..8373f7fe3d97b404b08e4230492325234dd0d52f 100644 GIT binary patch delta 238 zcmdnbx}R0})W2Q(7#J9g7-ZQQB-t6H*cqfJmTuNyXOLlJ;B(GM%u7%8$t*5O%}Xs} zWZ?141JcepiN(dK#f%K*8a@*Rq$WRLcWf+0$GV=iTXJ} z{rdh%S*gh-6a6(NGcy@iurV?)GB5!#GtgRg7DfgZ237_JAk7A)*%>&1vYbF!CI&8` vI5z_ioX-p7^D*#))eA6)fN4<>4Kxj+LySQjtW$zP7)WygbqWIIgxEL%)(j(# delta 248 zcmX|4y$-=(6g{`JAEo~PN+ra?B(X5qOcII71C)G0BOO$%oO>t|AWF!1?%wTgTz}b}&ON!<2^i`@?PKw*6Z-9mdQwXb zw6toFqmI;6Lz?B2W8atC(Z&q|83@z}y`S$uNR3w9CnxJ*C)s8Y2oXM=_XTeX#PHdU vf6+vO)g-GLEdHmE{__m;EOMbgk3xvW4{~EEOq9RL3T)=4$!?R!sewS zcU?1h?U+R`Z#m|&8(0O)UlkilRHMWcZ5h}yL;bAn+QA&d@PDH$4`vwT2%>q#cCEE? zF>Coxc-A3MW5vsHC&PVP>??;dNh>joo+ETUtZ32m9E-chavQ0_+^bc-6XJx`&oaad zR*>ONnb=~9!EHJyogB!CZ6U92H}W&`8n#;sxZ|Y#T#8;5uzC?Sr(jmc1I+7Kz&t}=HD%dxtO9oy{6e{CxxuM418q9m(V?SPB=%uZM+yTv z9%6t-Tl;#PmCGI4E?p^Pv5?9Sk&K+)16NTzU>ymzH2nqRokr& zmTqTw#`h{`aw5EX8qepegKUaMa(sYm^zF3L2PeUxr;S#I=nTEV^ zPIdw^CTTTAl+)5nN+*hlh2s_Mh2RLHDH85L&1QU|Gho_+!( z{yJIFlcxkM(c9>LgBAfUa1YTap;~HFSi(A$xJhA0v=~N?Jt2B4q6ZSwjMY1SBI_6R`O#;4=bzel8%x5Yb5( F{sUOGD^dUe literal 1450 zcma)5T~8B16g{(T+0t%-E?+8$fQbD7s;Gbz`D)ZODIcMx1oUOvZtCiGmu$DlU-3;7 zA9*2>5H!(86MvL?XScRZ2!xl}nYs6#bMCpbzyEyu0bmvx84|-(SxZ&9(h$|U>hUv>I)`~U9<|W6gbW0e*mWz{jxT7(|a+jB9 zO-HL}wp*8G2ziAWVrF1jhK?oO)SYD#eQlI%yujcW5Fz*wQP7Dl245^*kkP|1@{S+! zl)=qPYO`(_+m=oe?B_=%&D9)4AcSu8in2b2{#dS+pLcBCtfb?GFa~f##vsGw^;%PK z6Sv5hiso$SW`P@Z>W?I41=6sB+s!CHa-%ZtFpRgTvxcEnxUpte>Q&8j+T_Y1jG(s@ z40ja-&>?pB6vzlNbmw$a+pJfMn*E9w4dPUDR*4%0ZtLRQxb)Lgs4>i3F{g_UgQgXs z0hiuy@Ph_UklJhYwl8{{QIHh91#8WaKeq2VIIAFqM>MOLJF>u`XA9dWnYvkXxMAe& zQieW7qG1?ppT$nyG(`)IX*^Z1hgRsZ?a>Ynx!RiXm!iRqIe|V-R{*6s!uI zE-%`G3gxZ3UD96Y!o|UhcFc%bVT{c8(XS>!6|BJe7 zq;3qh}cVnMj^uJTZKVi4!XKVUpHK0tV*b z$2?Ij5al9t!=-tG324k}7D4l4{#8b+uAbO*3J?F%qS6 zK{FC-X0^1=R|^d7X}xHwcGaR7pM>D^8}+r;_P)P?Dw3FKd|t2<6X&U6+fkOULwlE6(v;_=pfMa|BtMwOcN zL}S~uQE6<5(QOWC+jY+worZO@VylLcw(_g=$Wa{(ebE+CpH)qhi{)e&@;QdcNv8}U zODmOkwIi7xCNuLbXfB{z?a~=4t>h}UrRHr{^!l~)r^{6V2O3Zdh32?} z?%?VhxJKWN4*IkRqz}midRZMWL_R6j@FQrWbq{(8*++;U@X!y4D+gflpXm4s;d$6| z0P*{1-D~5X65oec8Qq8UncyNWkR5`L>;!p}w3;HKX-YhULCn%*=Ad967YQ-wQs5H$ z$s@8_iG0P26L9$m>PiC@qGDZCgir&tCiEW)@<_NUVNjyRsc*N}Ap#HMI$7S?3ku-D zy~-ZEhw#ydZx7N3Na9C`o=Rk*qH5 zR*g2mDdUImyL=vJHvC@&*n}TXTet!Zt^jF2dW4IgaV`;Kr&0v|rPv~h?0-@SwTX=* JL4*P({sKK#f>Qth literal 1807 zcmb7E+fEZv6kTUpoYD>m1@V4CMSDStcteYLAsRLHT5KY3(=x%)>6A>TsGs5w_~eU; z#-NG5n3(uc>e@4<9Z^VqnK^sTT6^uY_CE9D=cg|KX0V_`Q^+n`g}UkcPi?bVH(j^j zziUSm95mz|1HT+t&>3e3)4`~5KA=Lppv zh5oX=;+lTTBPZ7jXKrz^I8S0Slv`lE3PYu5=9*b>On0Rq*|{GhPGQHK?b`ml!fd9O zlP)!C zrc*IJTjKV|I7gtVkl)6UO#?wE$NtRpYIP&qbnj_4dN;r!sXf1It_B6^IH7Q?hjG!7 zQ5ftRD4kYFtXO`6?yI_G$}!Re27D-BH@3mg|byY?P#)HEc@g6rw-|pa8qzX-jPxK%Fy;();uLokhj@U<5HX0IM1CV%`1#yN4CTLL;4?;^ zq<4M9*w@L8Xs<-M{0HpIO@6?EcZA1rh|i-)@Hx%sG*>f}Jc}`$!x7BVp^M1j5)Kn_ zB$VKLoDs#^rOHZ*)R-xXI@UoYSagU=5p|sF5oo_C6w{$}Oz1cXo{2wGit)k`@Pt4i zjpp8C-#YUAkG;o%H|UGMjlJdfuyk<>xEz#cgm{GINh#egQi{mNpwfg*p}?oe*p$)u zPVaw>A(0Z5bxdpM`ZE}u`!*%-U>K!9Y%FB8#mL7Qx~2jLLfJI;BC^AzpTqgK?Blj< zN+k2^xDe{af_{jTzymt^Frt;}Xr*J diff --git a/twl/bin/de/matthiasmann/twl/model/PersistentBooleanModel.class b/twl/bin/de/matthiasmann/twl/model/PersistentBooleanModel.class index 407226a0b19495dbb1b08fea67a4372b392f0559..a3c00d4cd7957887e5c8c18acbedba156880e658 100644 GIT binary patch delta 677 zcmYjPJ#Q015Pf@Rd+p0!IE;NjoB+ne346{5fdGM!Af+KS6&)c&2oWU$yP^pNf56%T zAtBKtnn>7|Kmt)A!LOl40^Y1mL~%23W@qNTx!uEP5N&?{{qZw^CESiM4y%zBkwgg4 zDxzFMj5#s$5f-p0=u$+pB<8Z@u4pW4T-CVNef8S?QZF^b>l!Q01&xYA-0ti@+qt{b z={(+h)K&;*T{WD`8>E&7p=!QXp;|67%V6(wZtQu5MHE3eS;Fg#*tSc;bpH6gb z8Y)Z+x0Sg?*H)?fp_;Km^l*P;Yj^j-*7g(kGiV;5PPyYyIEIiUCf8_D7_~LJZ-@zS0SXv9SuUKZbl2V@u{Ema#*yt~Y_x@Y zldCSO`f?6Z>sw2VC9mHoIHYU*jL} ziwTcJ6a8r7k5cdKmPaDs2X^Mp+8!WEc)9hQOO0+um|5ClKD+hlXee zmg}UTs2IRCS$3Tv*F`@|v{*}_w-*d~4GL0nH>9B#s)`YeDHx@jOLWk18+RDgU2$v< zgMJQ7y;zs6Cp27v#?V)>9I@GHZ42)e-?mAnY{hMGyT(0B#@)jNJqL1PrgE`&=RXe8 zUu%jT-m!yPWJ9_d&`a3h?Xb0idkmRV@gmn4QZz@mfHWrOQvS(7qCjS-G{mfi2hxSK zAGn^ViXb4zeR(sl;i0@yo9^-3lQJ%9cm$%Pwmbh*iQHDJZpUkg=a!TufBt+^k~+o+ zGERR<`evnj^n1!m?`Vxlp=nLfeHvHk+egt6#R*#Hj3Z=9Kau{1f!EpG5%eGBrwA_^LawqtY3yVCGi_oa zsh;p~DFoG`gf1xkcOjBdaf7lYq%Mo|pO7)~G#beToiW9%{`(`s7EBuIYhv0hdFIKtTJX=spQbz=v3nP!aJ+gLN|K#ToLM6Y@)8 G=99k;i5vU? diff --git a/twl/bin/de/matthiasmann/twl/model/PersistentEnumModel.class b/twl/bin/de/matthiasmann/twl/model/PersistentEnumModel.class index 34c7048e02d51ced654d4ed3022b3520a02dcf53..88858945fa95fb30ee8b90972d4e0cd4e4cbb3e9 100644 GIT binary patch literal 3311 zcmbtXYf}?v6n++xY={eLKr~)cO9cX$){3=&D54+|ff_`qt#%1Zj4qor*`W4n@Aun> z@(()wT01p5b*7!^2RqXrRr{RX&4r83F#V8s-}jvJo^#&kJm=lbKmY#z2Y^HPA%rQs z5<(Nshwu!NDyDq>E@aOWzLP5cv#C3g1j~DHX z8FxhSDJqP-VWo^hzXDZ+4G zd1FB@n)Zx)(AJgCZ|BMZ4sXo!01+9a``(R0!F_W2uT#V z7>!9=Pu)1D=bWOE{3;46Y!yWnOKb-PAZYU4LVA?3xHQdozla&Jq+1=6U5I0z; z*fo0zIBihDEzse4)SP1`4clgakoO%@tMP&9zE#fMGzOo-nW4FYo!3)UE|x(GC9}nR z${5KA*LSQ#+Jn;31WdzC+|m$3uMF(qy-uq;nNJi=b1Iv$Y$IQ(saU;Q+XA90?8I$ndRbzr*(mx}JQPHN{b|%Sn0tdzAO%>I3oOs*1cWYN|?vS!^rv z^OTV?d6ijd&!~9?QOnKNQcFu$D9qbdEB5YEk=N6)f}`tbYj|3=Un}Bk!9jd-p?ZNi zv~nY_-LOt?sZ3!)UnGZHR-DL-N@`aDHM8k75r`-FGv!xlXilF4rks8Kj$%YQQl37&9#qDE!NfDQ-acS zA9Z)Ru162Y5Uqe0u!$c`2RVzmwus|-uDHvIr8qN*Ce|A5+qwS`=dGS3ju*Ldb)D3? zxg2&f>2)(v{-W<7ZI)xqp}y;HG(LoHHtfHTz@Odal`5-cNZ=7hdm@1c(E9v8W1vrMMpFr!A7IO`*!mFR+52b?x0J9g65tSS<4P!i;0|*9ZS&9>%X?P{nZ- zCsYinJOdh=9@DA1N=_ARpr{x=>eclWu{zBxT!syCB@FS$e#7oxIB}^JaDVFh$qNyaYHO>Y7@-T+cE$zQCxFCQCC{ zfnX;gXn2He^58Edh?KCeglILxCZ{x4nCDeQ`1eBE&P8MA8hk_|c}R3dh%l%N)j3R1 IRENp`051b02mk;8 literal 3283 zcmbtWTUQfT6#fn*Oo#(QKs4SO6$JtqZ>R;N0*bX%E&Jn>2%CmF=I=ad1=O`WGI`vf#49F?mAA?KuNq?56@l}n|QRQs0=vmgZ; zJWAyjRkiU{GHqCe9M#p+)0EWor_w2FKwzl-rB*#yt|5=aM(>yr=y_ET`k?OlhDliv zAv9}f5~#Q1x1&4tpKK2he)Rv6;sDvX3!)lF6xpo;%`UE;I42h!Ga8Nw9IPaCqF|a+ znN-@6xy$zxGHazW=>Yse97Tu1i3;rU;<(k;F%y6mKy59Pdt8SfHEMN2hlW6qEqX@7 zX@Pw&X&fCrILoqU6$zZ*!h|Q&C8L`~sz}f4cpbg$L%Y!?7b8F$6huD; zG+YqaS>ea#O~)I!NCWhB!dPN`HE*bM*S#Qya7n{3%e@k}nMo$uAF(mMWlqOsjIi$s zsE{(}WiEgzDzB$i2Suz*Bx~gIGGcQaX$xW;9qJL+F^%gSTt+r4)AJn5+sCun zMqdCo1cGgm%tGXzT#d8^Fk9MNY^;bfaZ8za_XXt1xw|r9^?8%%q`~!`V`m(KPBeL$aEFzK zl)&Lid0jP4nKaD7T(YpFK3Am{WQ|CUT6e5AdJH>_EU+VQWpZ-fok_LMj!_C!$@>DW zo-5lK;p}Pg9J7&2L#Zxq8Hs!2M%Esl8aOx`DsDS$GFle0>p^HkOW5J^+t=Q~v7|=B zeI2z3vQFCFIVJFsj*syP$E)poTv`?zg?VXr82wDg=Sm%%&kP%;IY)O?w|}YQE0t4U znw_Xd%{Mx}#do}yEpU>wc}aKN?DNFvO4LU#7|#@P2|1EdAB;U)O#b64UXJJf>0S?l zip(Kt;3eaJ)87f_3J#HqYW|6-W+WV%T!qxgko#)vk(pMU$4KjOB8Xkw;Dz!d$kZ1eUCBtJFYy%_-tr$9dCzg zintb<;iF3}Zt_7E-YMd}uvWzT(XhXW`G@p(6miU8k?|{DM$pJ-4?R9hmd~MyAB^4T zWj6Y83>R>M^SuWbDH*~5hI#%H5k`n`1vfcxA8_{*#%xZnIZ>B6T`P0CW@l1yx`w;B zN8Z#*vFju1G)%7iL>8fj#BOL6byYK^!N?i`G48AC5)s2qMkeJ}ja8Hitl z&~QpaPD8)OYC>K8bAG(F7vxm&j5@n`hWuD4l=Hc4SJoho4SH~sM9ty|ZrR>A#oAg5Ixtgb)0o$+&F|X=r28rfJfeI*}n&L_j+tGSm z%HQA*AXP|6h%ZPakwBu~K;kFyfpX^BahhTxp(t}_?%tVu&Y9WupMU@I8-O`%CeV*- z1{UJDo~yC2CkRWTe%V+IKERWJB=j;LpC2cUn`_rCq27X$!!I`TdVMKyz17r zZLjGlsDgy{lXe(=+}e)i-I^OLD=dtid)2?I7Yc>(ZH35ceUIh)if+x>Y*u$2|DnC> zaVK4@mu+v`_FakFn~~s=OImZqJttSS14eeEYS(JH;43dzWhF0Ha{Pwd2%K6_s0B{N z@i%0fWXwHh-)?$An?Z6bu*+X=*ay0_7H-|ZJ%!j<8(O^LoE#31jgx;bH#Rzo=%^z| zywN!v8Pm+nMo{;iEhh*lrUFZlZepw6^vlk=D-^Tcu}(|ROblaI;fn5`?n=S)oQmzO z_?2dr?AD%?orA!w*Ayi3|oz4B}N2ui=u3 zEG`*XH&MWQCZ>@yF(lhFm^JZ0Oc5IjGyhk9h3WrJS=ns_zFj`kFN$-{X_Pkxr1CJjx&pW=2H~6;o^Yx7)E$Y!ri-3Bi zhI*xpTtgxrR|9+#ahdjYMt>oK7}xi$W2j7I_$iXVBD9kZA0zT?;tz?UJL%XljAxT4 zQCuQx;t)O7q8TJGOStm{cnw$h zWE6|sy@3VXoDHd;RhCw#3|8XD0@Z*O9@q)gq0PlL&9|U498LQF!?r1 ztkAo|rragEH442>?DudL_c6&i7EV^{q7J7i8Fs?pQASeUDzCJ=nfWMv%n@SZ|JQ2=o5{T^DJA literal 1900 zcmaJ>Yfl?j5Iq+^)>+oUHQ3M?Cp-!W8K?*UKw)5aQ0SVLG~?(I=awYKkB^;0nd zkzG&jv<0%2Z>*}Y^3q%`|`zDa?0kJ$&)+z0rfgOFbXe`8zjSRLoEaD2nJ>ff$eyDGJY4+Ij&3U;T4SmlD& z#)w`3nVMQ=k!~3!N$Rh#9?^yWRslrT=^LiBJWNOIT7OLEVZrH(60 z{U+PTl*non5yyF22Wa;X!YXRrJU}89&OS%{PYiA)QwJD+G5eBt7q*h42gtt2AMP&l z&Ya!DB{RQ=aWlJzNi!AR!<0FjPet}|c^`$}D0v81Xnmi`fu-_+Ls-BFu3>_1 zrg5E4Z(tE0(%((oL5ZZhg(_~-ZxLu^O6wGHjVyaiQYepU_9>5vvIy%u+Ej*sli4kF#HqkfQ*kON{LHDKniW#`2OwTk!Z6`i z$mvs-s@uOJS(YPW{*KbG!>doNCJ%i~N zB7pq^;bfi*8NxmF6Z+Ydenx`#lg|-jQ=+Am`4I`0y+n<(hp!1nO+iU_%N>cnpad35;0QtqV~9SW*Bs#cgvNno9VQ5u{zj4w m{f{%EeXJg1IIjjz(yQ7*8c$Bp9u8{p2vV{%<@;Fm=iz^acxev+ diff --git a/twl/bin/de/matthiasmann/twl/model/PersistentMRUListModel.class b/twl/bin/de/matthiasmann/twl/model/PersistentMRUListModel.class index b1ce3972f32216032d2d2ca63b30d24b2aa5cc16..88fe011e92d4d2cbf9357b74507e579b5927e790 100644 GIT binary patch literal 6510 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 delta 688 zcmX|7O=}ZD7=C7VlS!tN7`L{Gi7}0Bns#^N*0z2}i{#?PgH#J1M5ZPdb*ZAM*PQ$T zVQwOL@z{d}lY)X?1i_R4#DfTepuV$dy1O&;yzk6DAM;!M5V>!EKYRkPj5Q96A=GcI zqP}NM*&L33ZI!dv)$^8$qD^)GF-MYGUjOFXNdX%<35lZ&_QK)@$E5zrs+knHfQxCf zmDjthu$n?Tg(8D&cOIynsJo$}olY7ICnPvh2Az~hLkP^^6i1bz)ZZ;7BxW(E|5(?A zIWjLX0nz`}p3AIv$;u7&^p@I;Ivfp#+#~fug^}9c3fH^O9&T^x9&3=534s7B6010? zn|3u;I4^Ml7xi6xDKCikvP9El5bY=9l==(vdZ^N-O(Q|GYmCw*xyB}~mhnQX*_X)B zoTchJ9D0G4w~r(KS7biIz2hF+$JFOwTop{!7+1$l<@p1YykLN`=Ld};Dg)H^k}-Q- zSDcmJ0%32&j737`X~m9MjEpBMMnyt4e8PFy|H!Vx!8m3(0{VcAv3eTefnl>6iiGzb zwRZ$8)M-w}%_fYl1iNic90)Tk5%nnUOOi6O;bGJ>aUA0Ehgg1vf=N~*?h=hM_0D-i lT-u{wY}EC9Vm34i(<73@WMO=_EKcFT%2r733Z1iX^*`e^X5;_> diff --git a/twl/bin/de/matthiasmann/twl/model/Property.class b/twl/bin/de/matthiasmann/twl/model/Property.class index 9bd6ed711d3ffaeaeb6eb64e91cd0f3a61f0d0e3..1055704b96728d72e6ba74bc3818dd42dea3312d 100644 GIT binary patch delta 195 zcmZo>ZDtiX^>5cc1_lNr23d9nDRu_wi5@!`WhSdJPM>^>QFHQcM)`^S%EF8c0$GV= ziTXK-dFlH8Nm;4MC6gH$RqNRp85kLufZ7=tI9M1Nm>F0Y7=Sb@0~?rThteDjoIrJ4 zKvhf(+(3CA23{bG56EW$it|Hd1b{Mv3_@^~!a%+VgDBV}F%S*Z12IFKK?2NUlmq~4 CZD!>?^>5cc1_lNr23d9nrpe0~RmIpDSQr@uvJ%S@^>Y&Q()In5vQm>vCJO9e z6q65z|WhW;vYSyzcGB7eQ1GO_SZ~!&2GO#g#G_x~sfN4%B&BeeCRL28U z#l*l1l;>mM2eJf!d={X%AXG*eC?mok3Rfux>yDF4j_vY%;Ew7xPuMt delta 94 zcmZ3=w3LbW)W2Q(7#J9g7Tn*Y{7#N=+`AD6m?O mjgf(off=Znfq@CAhLwSh0i>3lfdeSc2@+-C0cIZwIBCz(%L1%z+Hamcc-}t{HxG%z@Waj`>P?eoy%wI|z5!(WHA1ZPyOB1kCbj zF0Sngq*{a_knh;8dVVnID*uh_I^-#KJWD#e(zn@;oheRG00Ktab(P<8WDqFwR8PTM zs#D76kHdd@KcYAdQk9YN$_;&61#LG_eyDl^>2kZxwWZ(Leh>Ke%~ z?WoK~nXXr$eA1MSNt;9Iq-CjqX1YdGT|epGG)*(=p&kR&8DL~I*jSyN@;C>q&{wC? zxMm>=1?~iWjA?r3V379=owkvnAD~y(zd}^LA@P~4B<5+&PzrsDn=3WV z^?MpG$o|m`_AqJ^S7}X9`>)ZSqQBWy6zNnXUxs#mvRKFMOzt=1uq=N7 literal 1366 zcmb7EZEw<06n-vmg<1#VyPJv*71*Q$mubYzD7u7%Y2pmuFXakdN}IGrf0v2I#Si`f zf0Xf@QUOU=wl>W@=iGCi^W5hi`2FYSF91#KYDfrd50p8UVK}m7FqW=shF=_W>J(DqkQ&ZG-X- zvFNTYU#8Kbx)-)GY&;vmXajOkJRUj{fBaQO_$k^lcS%+(7xE8VIB-oldo<;|6YNxG7LO zyA%f2u_2I^mZgG7$i}$@;l@PZlkEqgfas7sj%0H!X8A@ribyiK`vx`_n>FTH(`%)p z=+bdwhf5wAs6e0dYf{FMH}NfXV6(7Sm#?spQ%*zWL9g(Gjkmu?DFP7`bf*J7QFj!RS9CWQhOXrR+s&w)GuG?FZJrl9#|Gjzv3My^A9G2Gwx%GOo}{qT*VN z(xom*-m86svA%JF>&qy6)bnYCQkrJQD2#U-cVgtbWF^Qhtwz4LjQpICTW3Zt&yZgd zU*;_4fSHKK{sNeo(G)Y90{>_}Kp_@jk5(2Z%L1I>;T&@+;wuvW^@51m7&nC~RV7fv cRD#zF7hR4*JL3ckg}o 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 Py&!J~weA8HIZpi_CqGB5 literal 6534 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 a>``TZ1kN48xf$HsbW+R`V1;20@16j7ZHc%5 diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleButtonModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleButtonModel.class index 65ba3f078edb3db86f757bfd4b9c3c7684020196..e6e09f5547697843e2b542864c3b8dfb22d0f662 100644 GIT binary patch literal 3435 zcmb7G-*XdH6#h2ZbVHi7X(I(~trbPv6o^_tq@ev3Y;8)RspY4XZM)Eg{HWOt>Wnh# z;EWGCqcb`Vyzt12FU|-uJ~%%4;2$M^XLqyNrkg>hGw0rWa?kgj@1Aq-_V0gw{{z4q zs3edoJa)u78_O~a6k>l!vR7#glA zNEeqUm-DL&lg0Vf*~OLok^*H;L29~Mv249!ujr+^5oI2Vg5JR1GfVkmF+U@}M7E<$ zE-kozRY4{YF*8@3oGQ3K#T9hx>$X{~OzWl6n!bM1Qn33{;f8)o&z1Db_1sduQqk8+ z#<+qmCSn_bjWNfepyPyDG3~b%M2AOK6sXhH4THc1vtpdCm)DHivLG<;LUmm)t>`sV z)}B+fH%*crENmFLvTk#wTV=gc$=M&3a%Ccwaz(SeRWhdPwq30(h=<7}Osi;=jCI@C zaCk2&*kxL0YKCQrCsnj5W#&StB(jGD7Q?`Wg9(=zNPo;rL{gv2eM zK_PyEdwhb#HM3?+I!8y$tp+bcY>z0WyM*HM7-O3*vmp7@n&BqlGy_vft~o***iL40 z@KdI(AT~Vbq^6d2>n4R0NI{R}Lcz`A@T{BpH7dr9`o@Nf+w|=j4y(2!pT%-|Lcud( zd+4qiWh!cg?A_F@?LHPbP41Q)Gj4c`S6i=EDl9Aye8aSwi(<82TQ^Rb(n)Dv7-OIw2+}zEd)L5knfTC$R}Li5D=$qubg2N!-BA zBuXeN82ulOO4&`Y#kCubto`i)0zIx^By3;ZHcM8nQNCh*YpYu0QKh8Z4KGi7?{MfP zma<9{G6SG<5@hipW^FLH*v zC9*sFD-Va06+9IBK8X_-E7^2!1apGx+ zyqX?j-cy|x)#>={du?Rr1CZ(Mvb!ck_UrsoyCpc{96Za?TDv(1qmPVIGq-j!8^d8* z1xI{{9}(prFxH=agy?-7?7xTIoT_)x#Ua)x&dF@7{}DRq(gx_`7#C8vUW4pdpny0Q z*lnj-!$mgA85Za)iI$yYhPZc#9e$K4NLpilT4Q+ANlR+mf#~3b(#sT&`6*szq(o#S zMfE;XS*?*uGlgEZI&h9DoJSWfkmyq23^G1h25^o?2mNz0-L=5^M{B$;5By^kuPs^*(z#_Q6HiQ79X&>!yt`96kpUJrk!U?d^406 zfi#MWNKYp%KX@MhQBOde_p9?UlC2s(W|Mvr&=B_+6!}VqV5CAYJ|)Iyp&0LC*29>W z+?Zh|%S2M68FW2H_n$~VM5;BV&)Ga*IB@P&4YuhV-g5-a`@pka&!k=8$LI-1y@PIi z6+mq~B0w4q)PnykN%`b4PD!?ZwRw}i4roq!=jJ`dof8tj;Ago_erHgAXRG{gDF53) zqG9q+`@q}ecaApX??C;I^1lzDhRI*_D?Uo;B7esd`a?i+;|W#xrZrlnZQxI#foI7P G!P39I`!h%Y literal 3407 zcma)8-E$LF6hAlFbVIr=A%%jrrhuYp3Jp>~q<~FJu%#)jO%0y{n`EI2o1|tps58nS zgEKzpjLzsd@WLZ6yf`Ds_~7{DgMXCxJG-0BCfzVTWben`^ZPjW+`IYb-#`8&qC;fJ z6cRL1(K1!lvetFgtg5wI#`?_2RO=PZ$Q1PIhM~kZK|3zz+g4Va zwVGNov}r+u5MpV*g%Nu~P~Qo?rdy{3g;V22LDC#@5~DD^rqB)=21Q=4Y3G{NlGa#b zEI7#5%c@aS8#<5ONeQ_I{egV%lx@m9WW{u|pc%-wRA+Q?Gs5}S*f9+v=93~OAf7^n^? zw427bmr>{~r}wTxZ#%syg$~mZ7npN7t6PF1sRbZ&%zFwQ<9uzqp*J*$Z6}-G9#?3Z z-zp`$@Ur%{LHmZ|6k0f}H4UAX>n@@?E_uqf$!N0*?V~ZUuRF%si053^oE-4N4;7kc z+C&?@RRY-Rs%qXw))CB^&MP!Ti5Q)u6`7U=jR);y)6xwy)50h;H#X`GOQDYlB|pF< ztyidpU8%rY94|84nnK$sfpn>rietMKDQIUZsD{UjGF^a`&E?ISFDZ1Ht~hutq_uip zH?c{J9YUP*J?*2|JTqsgra3+C*Y7TpS#-4Q9ymeUeK@}3w!NWMu{WL0SZ7J0GNC?) zodqqaXBzdYBlh_J6C0!r$yry;PEPDY94YQ7NL(ond)KU7uGeZfi>StmZng)7db3g1 z&ggvjhc}(#N!}3JgFOx77a^HO@r$Crh3_?rVchQ#)BAd^^M~sacLk{;)1kW zTmfi@fr&c_&z%@$&j`=_aT#z>rgbei~8kb8Dn%o2J z#H-P86$GJ4J1Rj*emu?fXpX>`)TbNt8!LE#baDhx>gQL@P9jTkH_6*E#PvR9svXLQ{IQbZ5BDbWpB_vSVMCT#l0u9ndfL`|HV928#q7Q6Z zH=oQj6U>xlCaD+GRWMxx({(VFdN9p(GoALB9=M)H+0((tG@On{N08SraxJ-e?lz}^ z@&=CDP0;B+%2ChUDCIoLy%c_l!yc0PACmoii3B;rFi(m;qzqqBWPp$F6k6x(Kc_S8 zdWzYpH?Xv7Q+A$zi9g^jKm%*Il9H&8c={p=eB|CU+Vh0AI)l*tyBKzx+CbE&xSUK> zdDCWa3MJ{8O40(1v$Q0g^$JCz(6)ZW;tzt$e-tgRisEc7zM!RU51*q*zwmj8x(tH9 z=K&an0E{nz@l_zk$5eDN&O#NJYa$IHg^9%Z7j*G2`s5iEx)t4n@2_n%=cFb)&k4GU z>S90FJ=}S>Wa19)3sQqoAK>c$#)lgBP~#q|=G{oAY!;$^7W;SLb@Z*zaK8)Y9v}YO zal=#C;e65Oe6id4cX0l_Ph*htn;ve5^Tmml^G&Ef!1<3p)F9{U-d;~&kGNhoU7kPr Y{I)JnffLs%lAeLT1P0y$M~H6!2P0}N>i_@% diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleChangableListModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleChangableListModel.class index 5ddb6a6fe7e512bd06a97c9041c6e46e620cb39a..76ceb69938be06010487eed6db85149fa2118f0f 100644 GIT binary patch literal 3517 zcmbVOTXz#x7~PYkNs~@XnwDZyk%}T|C93kX$U+DzN2lL;nMpva4F z{um#0Ee&4Q@(1{%T<&kqWHPx_mcE=h=X{sF&v#4y`uq1k0i40B6vlBUft3^@xRbcP^v3Y zbCzSd^BSVLse2k?3)M1B4wNj%yt!LhH*2fLy3LzRsk&j<_l%k)Xa6$hZd-K?=SpR> zP%&JdjC#dzoPzt@E>!5rF05FUr?$DUZ8%$EDD;*@K)kNM0Mr@DP<=(C)%`9gzMWXh=Hc^IS}lO(2=$viNH6sL@GdC@j2sy=+~ zoy-zuQzO$0F6#M@=X`<#EtiDp_iecyw4AzGa|5`sT(R4oJTYpO$v%-Q`W}bc4CyJ` zwDd~3BXLLe5w=orC|B$eYcIHz_@IL|vr>I#25jRsv%YJyi&Awapc#-)YG9KY3Va;w6?W#PZ^Jf?nucq0t25mm=igZOLHjgoGqqCPt!7h65c>q-qbK8mL%Yd@GgHT#`yz9LrE*YZ}SwvVI1I| zHNbU}H>-$p2c+|_q2>QTfpgEtBqhkSU$plQvrYKWS%;P)4 zpYY*rAAYn2|109X8C;<5#~8uI5QEWx!6+F_w=oczVj!}U0fSTA6&NlRfMtFq0LlE% zh)pz*_>l({+c*`0xe#13fJ-vgXM8vnZ;=U{dgfWm*pyr+d3Tjx@zpON4fOxOeHi0% zC~y5fMk{Y}qw@9s}V{E0X(q2hSH!zr=U}X%okX6^+BJyo^-5n2oQrQGiPUEsyA@t+LI}(a_I*7N( zW{9ieeTDJn0QY&kV!;cKY?H@<`y?{`8`2t{#L7Jw-G%(I9mo9;qinz^8!*a3vJqw^ zTB-s>HWe_s%68?iiO*=;k4!2*G0i@0psNBNGA3&w^l;TR}Ff`nxJ5=r@-qF%A6lF9_B5iQ}Q zv}VXcmCfg5S7H;WVbeCzI2jIhPMaN%j2hG7iPoA5?GsIt{|CPFTl~r-)8*+6jB)xL k>g)>#3H~b?;2)5qqN()#N4KV$?mw%U>t)=cb_BQo0YGA71poj5 literal 3480 zcmbVNYggP<6y0Gc!-SMqDYalX&}= z$M`|lQtD$Ze}F&A9aJlH@OLh=E zbM0!$_WgYD!poP+MaRo8xutE-nSN&boA#RL%)8ZKK>}&C8yGq0T(sRldcEuijvp8} zI=^K*c2^6?<29jTy)+xtqQn>{J{BL#_6VFE5WxaAU`~>$|~(fmC*6#X$Qs z37JUYu!RiFGMh5(VywE=Q-B8I6 zsN=#dZc`$Qf#H^c8v0;%RmVNLBEPt{MRWz7&aP4-!FUJnrSYzT-WWhhUA1r)?^8m% zDykbe+cH-IJ~YRX7LW!yH=SVC4=THKRkkqF%!)`{Cn+g=)WQXf&^A0};E?MVotFlT zf`P+ap%EmN>riVNs~{(?Sh$Kyv{==BMSGZbu{i5FC2ixd&y7v!$c8;IaMQvExMb3D zV;08o5rJI4>QsU#$zZn7Oj=Y-J2jmC<_#oB3%+v!E(=itKo{ zP>>8Mx5&Pq+J{rpsP`?b;DOksSe){_|0?8B7arnD8jlPN#HNc&Wt}WZF{ca_r&NCK zgffWIk1aeAZ*=I06k}UhlVbW4#mul*fz-l%)g6yEGOM&;O{;UYn(9o^O2CZnBKZjV zGYc+guoROC^fwl~Mrbu%1iEX3&W#|Cwz8oz@3w_+;nPaW=!+W^VBK@j*rZ}T)#Q*S%ugCIZxgey59VBhEs~gX(6*RrvW57+uFg*zG3SZ7 zurFr45o(x*e59g|ex^EFA(Gt4US)*QJ$#-UrXTLac>1Q@CEh*Wv@aCqX?-T@Z7JI$7@4`@QQpZtH0l0`Jy}hlC%sndhe?EU zA-cYnu^L}BUCU~yMqhX>zg|#kJROa%rfgc5Pj>lv#Db@PQNGtS^^D8Y?nZR0&St7h#NwjiVz26C_*Zs6{;x5{Dx@N z3kPo8L4sBSiE^uiI3e*PIQ1U@Z*8kN^fI1#^Y+b~@t@K`Y3aw`FW&&n;g$;zkwRRA z@4~{Yi}PqJTyRmq><~)0=rYWia7p2^!j=BoW5@1ntUlAf#DO9*uW+@$U(>&>`+8g6 z)34-=R_!#!Egc}}iV!7|fQXuLFRsB;|76i&`$yUbfoKJpp%hqmy*IPm-rE1Z1hhyNAU!x6a)doPN2;Jh_RAw|?) z7=K3bBk4BA7^k2Z^#i-w8)tGlQ^Ev}v7#m>ah%gkW;|G^G9R!`7*fhQdB_ULIz@C8 z);|WRFr_f9_=={p6>21(!P$I)+pGk7fD?W~@dKaA)LS8yoQE;yrMZ(EGbRRzF_G!c zkX6UITz8u~7JH3w2Sd@3LvU8~9$pynAY>HX{3`m5GyTZSoXB1u9;1=}1~Yxo%T8c= Y0jHbAZCK+$?x;bH%v%#J_AG?|0c3AnO#lD@ delta 726 zcmZWmO-~b16g}_Fj5AE9Olc|g11Jc!?aW{i1wT*{Q{5RC5=dN-IEo=^Es2Or`v=^R z7Zc;kjXM{T@R4XD?o9j@Ze8&Y)bplIXW?e%-gD1A_uTuAGru$0pMSo512Bgr8&ds} zkzvDBo-w<#w5HyPvTrsw*B`quFz8_bzFIR%qztLoa`Kh~%S8^ux>6J<*6uuwU&W19 z+}>y`zkKney|Gwdby3188z%+)wAyUNTU#DZkCpGlH9ri(Lu8{L$bLocem;MQ!ciCf$4Y7vNF*X#T2HQQ63eXqX8XhTM|{qDXXSQ z39H^`Ib;Py3y^>L;R%I}l1&zdNSeX<{w|GVmzzWdI)D}Iq5PSxMq*Q60a$=G<|VP! zGp0?Xh&CZGiwk|-xkUFZbtG%m-~boH|8Bxr;YWBu$lH+NT<#r6ZCmAKJ#(bn-9JXP e_cD5VTI-%b*BrXgi<^+e9D5fTOI+{0+l_yHK3s_a diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleFloatModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleFloatModel.class index ab357b89f3a67431371afade02ceee42851688a5..03e143e50b61504ef4b6cc78d698d03f3b0b4d5f 100644 GIT binary patch literal 1399 zcma)5+fEZv6kVs&%g_!Ki=ZefQou4IgLp+0l8z}I zRu|HkR^oD!Vn%6Kly)_VYq+k&jRbBcFe{*Yj=wJ5ZCgO(l__^yW^AYFj^B2CCzuzA z=kodd#JWIqskXuRbiwiMwQa9#*B{HWOHZayt4McU)*WTHoY7#@X$VXfHf+n20WI0^ zr0-k7E7$T^$+b$3x8>S-wX_?zPQdADGBa7KZPzPy-cf`1AD&?9h1`(_`f)3PIRm$GM_@$xELZwf zYsGc#s&p6X)osuAgZsM`dn<5iK1n&?bJ%GNugNu4gWRPLcx|}_`r3i>!v~iJjv-^9 zPl-{C891)AyK0Dg1{SbrU~}%Uqs7PbZ`(gH0AEXqMtbQY+Ai8|V2hd-^g%XT){a1m`PmccN24%#Xa1@3bjE- zo6Tu(3a4ptt`LO?HH9M*Y6^+QTHvkri-n^JoQXtu*_$S?vpCm+XYo|YG4lhu-cgB! zlPL~>`LLtW3}|%}7(OytKb*XHWb*kVlT(M2^G7C+Aj?_QR-SWCg>=x&lGJ4mpUS>| z14GfBGC#uTkUW4G16R4$2V8xDOD+=P!?3|Xvq+oF!SD%)kT?zEB)R5)(dsG5sOmY? vd<8n2>hF|L)X~?yj~<1ix!WF|z#}A3f`KQ0v>R%-8~VGQB6^%j5nT8U(o6UH literal 1396 zcmZ`&T~8BH5IwgoZ7B(93z0Oqg}f{#Jj*3~Mv?Hz+Rs@$?v z`;)0wYumc17L4kyscUA9+j$WPA;2(mdH!0dVb^)tZdWjbtAaTinsE8P=l1Nm z;oyp48FrQ-C~KOQE;0l*2rU9X`X%&YfWa@PixCVW7Qzri^aJ1Hs>!X2>L5uN#t1`? z(b(c!R4r@icOi^2Otup@O;fLMbFE%!R&~pMwqMqFZKGy|F-8r~XG|K6B=v|Oj;jLt z8be&pwYwDTx?xo^>0%hyMVYsYR~E)ihT&GPZ1ViR7Yq{;dJq&=Nj?b|=?FN?Jk~K|;tGmcG@jmh}2-UNVWpSguy)W|7wo;d{XViPs=ya+gcfDP@MC zzhLw7$2{Nly7X0aJKs`=C?~m`SWCb#Wq9I+8!c1tP3kZ#N_Z&Lifq?5xM`NCdjyY= z31OLGpv_{Q+dC3g@R)=pwrGD6KCOw|ClXfOINzs6g<7*-)-^+H9`9UXR&>M!0sHAW z`wV4dE-PVr&qB$fmPa-d128;AtLWZ_n z#WFU@xH?^>MfEMD(gJlC~Y?kv{27SH1W%_3BJPjiY*$CVV3 z`jm#3QwN8T1l_W7f`vB8qePIPDTo({B8L&=F@~28z^L1#MdrBk1eimdA8d@crazpA z$%#>cnQ&i0m_U<9;v=Y|*wPuYVh>l_0Xl(K^tK9+@a6(sq6L@uA5IXxMnyiX{{uF$ B_~8Hm diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleGraphLineModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleGraphLineModel.class index 4ce893c379038d0082dba004b176da271c8e5161..353241196ae4d9e4e5178d32f7026c52a04fd7c7 100644 GIT binary patch literal 2067 zcmb7ET~ixn6n-{YvLP&>NGX`2G>9Yt30C|BsVyxSOZYI9v7>h8CD{pEH=9hdQ1HfI z;UDnYadbv(r*`VC+3!4UpkKN{x@`}N!=WMB} zV_;Px+NxF=)7cW!XTy>iYZ2JK}d^U9Re+eKpG}PzEAj(;QoIeK%M&FrI!9 zB)`6%**9RW)yhN}-gJFu>!^C*H1^bir}NfI%G*~BSMF`2863Jz1B;twCs$PgZ>m{U zzMl&odbui*yj;<();(vVq3VZ%Sr8)`_cf&?=4-m&3+p^9t2n{_#d1f}nHRazx7ow@ zQjfBvrom#MO5YV!z0KNYBG$H3bNztqqv;H@$7$3Sa!ThjY**ARpBNaRy%2VnzWkzX zVT}gMPX-2F>Ez!&c;J)* z1L>DzoEMQE99!0f(RvRQy65oRl}~yY%m@<^X)^x<5gCBqIRm|O0^A4aH;xIeuk-dJ{rb4i zW*@=G4xAy99f_X7%+CFRzU-B!u`|T7Gh)7M()^nSN^(sh&UKy%)BJyAnEoB6SwIpw zOkojk<6T^#$5IO(lX!zSCc>MfXXw)uiAVHFs7Cck$eR3~!gQNrj=T8xWq*hDD-RJS z0b<&?q?6b!hjtP}1V@Y1rwA)4##v9?{0W19qW|7V;t>Y^%Fdm^l7gZdZ-i-qk66~n zB)H68t!V7AR(x2%xbCmP0wvOrT4vdUR=P#*!Zk*&v1dQ?)J^t!7ui@yHiK+CdYRrr z){^Mt;x8A%*Sh#vAs-8KY@?)|=LlLfx?2{x2(!_}qAz5z&@t>Tl77G3W ze}R9%&yJ%r(sr~{zdHUX$Mas&O@Qzr``){|_uO;OJumAp?z-zcc@;Ea2%LW+_hr_TekHrP^Ta6yCgK9= zvyqNt2%Ot@n|snL1c#opA*+r+a=n9D2pX7|KPj^@=Nv|jyt~$4a26b-=EUcfc zU9Txnn^;qc$IhDW4@#dLsaASW9ZqLXtD;)XSTNC-z$~tsm^(Jq)&MNbBTIQb$FBst zTC$vpYXYgxsB)g?RHS#iQQ50HesJ%g|h~~rSJ2y-qyk*eJZw9bNzst^zo?o>@l6oaL`e=d>}Bucs}$6=g2oY7Mi0^mdjx# z$DhD$teCiSyvM_4;8ZQ##XW(3*=WeaQmuX{V0X{9W$&e2mxQlFIpwPu8&vijpiA;0 z0euQ7T71{lmuiNT*0EtCFEG>*GcSW(3!B(tt8_lm)45!RgYEY_vY5W}^sY9)S=)CS zo~#Qb3bnmP$ys%kA;x+cW?ognI~;qIzZeWe)b#m35K;cuD~+#L`j_hfzZ=3iKF{;? z6Tgdbow1+e4SV1S!*=rG5k~CUXBe|Dy^J4W!oIA+BL>62YoNFJOz9$XESP4Y3<0lV zn8q4M7E?6C6_3qH zjhhG*fw&GX>LOO_gLV<2E;u8qKS@|sVwC;Z#?Ki13k#2u*PmnYZ+rF#Y1L3v<0V-Z zxIuCsA&Di7;HJjD*vbzZ7}fd;e4sN$l7&8G&#iI`Tou$*(6Q2x9{ncmvqd@&y1Gn-U8b-~W2i3I!dlC1 zx#ITpF>59?gKZk`VHehG!Ig8A$rRRSy|IQn+*(*)66?_!SjxHzD~HedRG#~hUn?)o zjK7TMb-&{;aDO@Mexf`#K2e@fg3R%Hb&5^WTEN##{)SidTa4j5OyV&`kh~8&ntL)a!>1P}iQjqGm? diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleGraphModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleGraphModel.class index b197cb87da9aae56d6b5396483036413de3305fc..81f4f0a6148d8ef757c9aa2fad0983b3271ce911 100644 GIT binary patch literal 2703 zcmbVNT~ixn6n@@(Lf8~S1=>O@twqD~5v|r*p|OB~C?C~S6x!M@WTi_to6Kfu!8>Oh zFZ~1Fd7(GG&>2e{J7c|b#-HLp@WPMhY?cty&;c*9dEa->dCqgrdCt4P|NZkX04^Y( zKo6$lm`Nan=~i@OHi36Am*DDMIrAUy#W63N1u5D#XSu$MUiY;q>6LLS%|w3hiRNxK&s)-Rs7h&6CdgB0-i7*OGm37$E`XG5icV zIjc~zO`lYikiuyC#xoom_zS6_BiJjPOxKlcs%YEhx@Q%gF+u8X{z_i_C%v80UW$`V zJ&xFb>E@JT0nQ5Z?j4IaLT?5>sHX2a(c+K9o<`fBjI&a)Fd%Qe>sWkHpk zC?9ALNw50UjC_8N+Tn?bXT*kClv(wc$1fw$d8lFeL!to||fQFMe700TE z8@MTUX$`mVi9-6YbFbkxE@(K7GaAM)u5iW=V;jy!W^v25uN5uFGu`R!b+aVXAwlkF z$l@)9bNi-qoSqHCo^Us|3Z~=L%y}P3*ZK|HHI4jEKbvpnH5gdaur5UPgNZg4L!o0o z;L_SA$5r9{!T$Sq$)4x_1Qi@l?uX-5c$FPI>+ZRS^y)6U=;1h;05lqst?X%fVDRJm43` zKEI1Jd>tLQR0o}^L8k~kNMM~%Rqk>!#FJ`uhPfJHe$|>>Wk?CC=|3XUyNi}z(fU32 zAwOP>R=}HeakN?-jrDn%?-gEQqE$5c7mpS}+ePAG15&oGqAdZEVu@Z0{4;@nl>Tjv z&XaY{(VFu`mZBOw8>AA`dmo{#u@^IlVzw@kSS^v5FBTzw32y{g(-eY~C8-CQ4DCW| zgj{5Om+BysHOM3`vuXm#iz0yhl8~YoVdz^#`yPG~Qs4daM@afnrPIw?0v1PPlcKuE`dOsm z_*8TWLp@)mI6_EJdJ|kp;sZ5$13`I&R2#y7A)!>~p9EE$(SwxP)kK*O>Z;#NnNti9 H!rT7>h+t0_ literal 2701 zcmbVNT~ixn7(H(i5(t~NNeh-jD=na514OYODl`@l+Gv2f-l zd;)4-PZl-Dxo>EdqGnl1=aHE#mh!rp%o@eAsb9CX^8IDG5JEuU#J2WOOPZQhNUm;e z>p3Tcpup(CD9w0*F4M5|ia=k+MX5T5nVhq2Z8u|7oEd?htWmHur)uj0bDj3gX8t2l zh6!ARVW35`Lvx+|upa+LlS?u}q0+*EHLZ&)#By3bXQw=M>PcHw&1G z-+4}eD{Zsl@wG6{;>8fo?YF5Za7Do|&a-N*BDEG6BXWByXU1DJcUux>p(9d|QGtPY z%iD#LX|nl7$(oVsC5}K-V6ijOk(w)ujbVg+=*&vK_(vOd%loaE?-+5U>;j>J?nvnc zCgbVx!#7E?o>Gv+D|8+)Xi^#fuU3RGEf7Df+lgi5cWCUiKrd10N7wbPyVEk~>k8h$ zW%|5gd`i-%xhdQEaPT~ANP}Nh&Q%}(My&Lrce~)noFo^)B7?H$jJ}Hc53Ckqg4y<7EYT>}TM7v_3JJPqk-fNvIS*@*Mv$^ZRIif6 z9_HI2SE%c13uL4L8Nm{hNl4Be5Aq8_N_VLfzasJ!H`ZhC)bQ>zbz%=IU&)nQ>#^H4 ztUYr(!PO6BzIwmUAjtc5_IraKy^DT)#82%edwb8#KU_y{ zhGWFz^d*Z7@XeV2s#j;~Tbz=&L$pHT8*~jl{@f>q&VK#Z?>^a&I-P!M2^jS5Hd8*} zfiN%v%cY{$0UK1tJSluUuy<(~c{~S5|01y@sUGx JBD@c|zX4tPOnm?V diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleIntegerModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleIntegerModel.class index 727a1cacf8a5d372423b2f9911eaf4078368543b..6c451238eb98ff4f716972e6034070a7f0647e51 100644 GIT binary patch literal 1092 zcmb7CO>fgc5Pcgbv1<}iT>1e?AWdmWOo^p}_)sGRDpWN}xCBK)oHmIS47L+FPU%nK zhQyf*5}^`EaOXz>vzw2ik{-Cs&dko6dGmIE{`&eIzz!@OI@VPbHEigJ;o1Tguqn)z zFxPc5B^6~ArivR3n(qcp?hPFVW{Z#?O~STlV>$tzwbGA z5IJ2Ztc%nxL%I?1_M1BI%RWSz;at~=>NA2$sZ5MzZnlF)6%+p2VCKe4lDFRI4a2sx z?+UJ~{|>FZ=7&6mMQk$^g>QL0=vubtIbH5O3cEw!38E)QZKof(y?|k9s#c*|nCd9- zH&aL>3Z@E-E*{u{(N?qXkrIlk<`-xuS{hQP18A^Gi>LH3 aHQ9A#jGXCb$mgT~PyG}y@qSmO5QRT-PsWS@ literal 1089 zcmZ`&U2hUW6g>mWM`00JY>NddwpwAWY@)`Glo(C5=^F3_Lt=ayV1lc=3xTEfr}$># zvo9uM6HWBpAEn+|7HV49WM}TZJLk-~XJ&u@`Ti5YZB%0jG3<7Q;c(A;WATy0UDxp5 z+lJHc3fpK}&cGI?>xrHiHe@LVh2i>g#33K;bK7q7&bt_*3_Hu0{!hygcPzKX?Xh5B zrcC*9kVcNC};D-tuzymKn81)aGhbbTt8)MdPB?Y?NwSUV7ROz zhPaIKDpsaZQAGlAhIHL>#f!1i7Q>gkZBt8Hz2D(>iw`ZC2StS}A2C$x%RM@O0DBCn zrbqTR_#og(_Jr4%+eIFbe|~N5Xq;9AZpKIRP$`p(3F<&saZ}ot==NuaM@h3k9(Kfm zCH1eL7gCkR;3~nx^hRjZq$6~(H0cM;A?XIq5&E8lN@I$$542LDd0Rihg+l%lQa_M+ zrDadB`b*DGkkbnjZ0N-a3SVeh7@IV161BXs3hog3U1V_&IowAP53q%YxI$m`DJ@DQ zNZ87?R!gaNs?=79h=ep@Az@wBR7FP8Oe9wJR%8;t!h%gD z7FJ^6SNIJQI}xYT3A%aT`+hy=+z;c^SbO_^dInI$vI!kY6JexGOk>7G8ndl1rz4|d zULd?uck1q{fXdA83uqf>N7aX`knl>fq;zDxCwbuA%9(@(16>w!h_Y+JMqbB)g#s2W zETMQ4v6Vp1dzZPmK;KFEyj(afJGH{@;YqdP3K+GjyXm-%3-3jwQXMOMZlmth=;gHP z)ZAm=%eI%0_NA7jb)8=U6v#jqqseNWSulsPj}Q<3xSKKTH`B2Aw%QAbpodj&N2iaK zKtH04E!-BfWR~KdQ6XSmvdH+b;r2LyaS;O;W*{G7mWJ5HgEDYwSaL{7Jcz-8}ch23&aV=2u5ipOvy1GsDFlH YfuRWs7!Y3=*SRk-$yy?ggrBE=0BW8+)Bpeg delta 542 zcmY+B&o9Gp7{;IPx7}J*Y{te`W3#cJ#u5jK5J5sD93-5FrnW4VEhTaCFPQ!djyu?8 z5(h^Ie+gHK8{+NSkX@c9Z=biH_i6emf5?H?pQmR4Wt1gwhHR^m^-B;L@~uYHzT}~} zf3<2>tu+QAlRaV(H!sd~1p)?C_~7rX``EGqhKPy@1Q}#Qx3*2Id95G{O+t(zP^(;3 zO7)6qlnzd6`l+R23UT|MCs!2AASofyw{&PVtEQo17AXdQT{jKuymx-rS)WrekBt4s z3-%VRbSWcOX9mBYXy`@4TF|=H)i|~H& z1)*XWlcG=%3SCThk!}lZ%0(#lw-Bi~wR7$pf0s1x5>b$)loK?Ge-%FJzx3-L}ovm diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleMRUListModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleMRUListModel.class index 1faea2cb5c107072ab2b7abb2576339ff866e81b..5be5c67fc93204f36bd1ed062dd9830debdb4cf2 100644 GIT binary patch literal 3601 zcmbVONp}=g7`?Bnr*tY1(sTl8R3cN-0U9HNX3`KqS`vb!36p@8bR|@%9<1(;faAhH z;93_B3pOtF90@Atpeq+1|A+nr7as6_Rn-IOz!4W+@6{XbH{APu)xSUd`2m0-d>lhB zvJsq%VlIXN&PQ+|h7huC*ouqtxFoNaA{ zMJz?IOUCPR){3@7&Ci=o)|j`s(lu3FFzh+QvEQ2yV_v2u>sq*ASg!9zRaJ!jb;}h z?9ow1MaPTSrK5@!9dC*cJDPkD{mxV?GmA%y)k3aZcOruK6o#I?YeaBU$1U8}@jgD# z@u7J05mprTJ{hYuV+x%OA3dHFc0U=RnH8zlCQ57Spsa#r>oytEs4n(qw{&L~*Btjn zA^kvOWvta&ZCgYtg-6k53T4x&m^>Ql&$w-J$CDkc*S5mIdZ*+AQBF@9wmr|LHCru} ziVmH1i_~At76nA%RR86sFn!0Ky5fEhMh4co#xVVA^^Kfxih0k>@P9M2K5E!Qs+sek=$50-z1`TuXFuOQ2BW zxR1caF6|zIzohOXbnza-cM(Y??;`rWi!#7xFT#8tAm&SG<3EBp4$|Hs?7(59xYO-n zVi0@zMs(K)g?*fheOVdAevWDWI-njAA`rm=*-``@^4*)@C~KkA4~Txti3YJBb{AiD zZFzVh-&VtdtcV4Lm+NrHe7Gp#BCBXyi#XPV7;Qn66%X+sV-2|Zo8c(=YZJueDq`QQ zadM(5A#FY+k26tybf)31>+Y#=)f>%8w>Hx!zaBo?R46dSmY}@B(PiLC&a9H+-8NYooh;3R3z(DNzAa2jKn!5q%u8b=dZSUBfKe3Bl|@zyX# zNY_!`8KwL*qP)O6eUwgyLLKKUB$3rKvy9j9I-_rcfeG#g+#Gp=l2ei+IsY0ll`Eev z1ph%o^*lr}!cqOrGVroE$rH!wQvbxKsxSEkx@%ec3hno?i7M~b89D-w6H zL6Yz3T>f2yiRi+7lg)VDW}JkK5U?R5+4D4dvTo`U(FCW{Gxa07*SBLb&c!A>opn2% zEp}v2>1rz|?$pCL z;wq{+U9wlBr~`q9gnAhnzwSO+V}x;AQ-d0>1(jWYycVQi4a4L8Bu615 zpw@PZm8R4O>OKcrWF>nZ>NM-mLp{q;6I5+&OS|o&ZufRuP~{Ub!|L^_%!{LjulZH< U7S0MXX4$lX7%jz-!;WyX`o5Z;!F=&eDT3Q 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 delta 403 zcmYjMyH3ME5S+cUIp=U7yi5oIf)a!rODI9&Awm%;4b(_<6bPk5DdG>vFJN6k3oTWk zL872W6yc8$duJCkJ3Di;vwJ^krYhgRAD;jYv8x~md*)d*gH~6;BQ!0^YH?XZq7=f1 zCiKjeIF-HlIvaFo-#m#{_Hu5{=*FizLX^#_M$(CSq^>T3Pz$k%x_J;s=8HNLLU=hE z4abA~+cX`f{RUek?}w{C=9nvH$MBpIw39l$BY0&^V4kaH1Y&k^7Iz^d5TJ|&M#3U0 z>{#MnVA*9|uxe*SGMz9;7h@LzZ5I*c&qahCT)`^8udySKw@SncVI5Vj_QV6n0q+eP fQ|9@3d2aIWG_S~&*usvrZCfb**WgYULFnTTah4}P diff --git a/twl/bin/de/matthiasmann/twl/model/SortOrder$2.class b/twl/bin/de/matthiasmann/twl/model/SortOrder$2.class index b1c638a65408b3827a0e35c50e0e2e7b1d4a4120..67c780a5e22213b2ecbea1cd1f3511efc8d5437c 100644 GIT binary patch delta 466 zcmYjM%}N4c6g~Hw(HU(j(=;o~$}uy`zaWAN1Xs}_f@l*&QnN4yg&A{ei(Wv!9;6~j zTJ!*IdX`=wx}UmmG54JBaL&DFp3H%n{{H*?0#HRhi~v$$tY9?+9ccq=2G;x6`TkEi z27-0cYB^rrZTP<96LRug*wUsW`AZk_hOT5??8$dgj#~&KW5BkMMa04;a)hiT%4&oR zV>Y`OcYl=Xml_?2}q# z_bRnAR}64(K;th6gBzO6s;n!;+%BZ(1N6#VAT;z4&s~IhTI^;IrZB@um_>wLDu2o^ z!5AnEAYPbg6XD`8oIr2r7^m5bIYc=ZWBX{cQs!BSvm%gSwtys0b)m?puIq2m)Pc!% grHOX>c)y0lp=$}tDy9B9iD{-$j_Qo4nb;WNKX$Y=%K!iX delta 426 zcmYk1y-or_6ot>s?y}3e2r42f3IhHh5q}C|vV|lz8cpnItcY%BD0UND8ed>Dt%Z+( zHWCY46C0nymmr>H;}gIMc5FzMmwOo-ra(hYWh1V(axM&H zJy>uBe03*J4ZqcoFOKByH6zV$oVQWMf&q$a2xc3JL;V7(51H6x@XOK^Xt` z)w4Kuvk<6ys9{Te$*%eloe`6l!(kAfKMbNMhfr$n75{sI3MK`%)wI?GijoBHRl)MFWG^La#W)x;o z#wyR(m`GnpoOL<^6>P93TXysem~Yrjxao!|_we6#=8S99QP;5sn$+}*+w9yK2tE7( DgXk`F diff --git a/twl/bin/de/matthiasmann/twl/model/SortOrder.class b/twl/bin/de/matthiasmann/twl/model/SortOrder.class index 0c3cec29c23234028f7642ae3aa93257d9a84520..8c991de6c14749151006e5070a2f89d9d162412b 100644 GIT binary patch literal 1609 zcma)6ZBN=z6n-ugTCk$x%O-O#PE^2+3Y&8ZIvucugun-w3E8KLovSIul;ZZYHcjR- zv&GN*QOnLPjj)X+h2)-l?>Xl=&w081`Rm&c09h2n2w)>b%d;>x@m$2Lh^;UtvCWs9 zh`fZUFr>cGj)+|e(_zT{^9vDs459scp;RrFtFIZBD@U5rR&D#eu6En1X)5*yLuq%8 zG()L(EW2hMX;zLQTr3To#Q4E}Y1t-s(Gx`ZA&+gb4ibsqLofdH4aou=cq2UV5)735d9aH zA(+=q-QH!G8xggfJYW#0jFe-jt{WG4Ap#Ndx%Nx@I-6bx!ut)`9>qR`yZ^nj#ALgGtIIYRuf*!1O~ZmnwnKG)NYrz zaA#EdUWy*iqF94bx8?6vb=K&V7C&Gk;tYH6=@ zK24FEIZyL8$heOOGG_S8nw7DSmkdiD9*K+?3XU_qDi8MYjEpHnJsM|aOmpMNVBC4i z41t!>F)51~YUn`cP71@uaIc&W=7!8}Ud+Igqvnc>^o5zEFOGk2o|6PfQhZ=C#w$Y_ z5h2Xs7EQ-(Iz1%Gf8lfZzQBJC;S-%0=4lN&x&+zBaL2XZfX}%dn?@k@6~Su+xP$Kx zhXuNk`)0U{dybxZLsmRw27dYzk<{A4CB)B;dN|&|UBn{iPAqwdC4nK1WdiP>SLnQo z1my;5{hG_LM&QB?JR1$4>YKRmyeN-|CohGF$4FB!zEiMHU=lH2a>1*PACSI+)QpDw zmk3{A>sY3EBAY R6e*HX+DRm_Cs7?8`5RqvcCG*b literal 1525 zcma)6T~8WO5IvVg7S%7zArkSz77@1c4 zP%|>swq@^GhngkB&k#Q5r#xeD^C(j^yDf&$cC}Ef?360+8Rp6!V6qI#POf!CxS{GQvc|1B=;}Acho-U`$064;TVD7cG`3 z_cc~+OE-_QrDQz>hKDMK5Rmc6V~o`xWCbyd3Fk=_G6G`tL`4uGhS9QaYL#y5K(lK6 zz|a_?<#v-Bb#Ccm?;I+SFh=SqH64=L;wKDgmtxn}jZC54I^h<#+g3K&WB%_kC8??( zncVJL6r+->Z4D^gJ2=*wb~b-EWUf}r=I_Dn-OZ1Ms8XBtl2&}V@M6=&{bIaUv!D`${;&r_C7Ie4!XIi z_a;eX>6MC?c+Idjh*B_kr;{BBeGA){AsUIgB0K2!x9~hYXtJ(QSy7cJ)pplvYVUMW zOyS$kO^a9z8v`^%%$z6iJW*3irm0zu7Ok^0O~EAkJfyc1q8|X7skDJeTog9l$TTY$ zCOegOb@*un($^SiL`S7dL@qFXjaVc4*nf$M3&e+hfHkCZj8_}}bHu9`nEFN@K0Ku{ z>_kgavo0f!1fDrJ;+8tsjj=*Df|HzDoVvvGzH@*K;5wOP|>b%+SfK12;$e zc`VR6MAk_ccAW$Y*w{Iy8Xu(8O(Q3m?n;waNG*MJJO#yG6n0B3M5VCeVx)+u;GjfV z>I$nr!S3~ofF!NCehU;?JX}xG`rVRzWFTRKMjzg|QZ}(g`zW1^(2Tc4zc>E@R9bAm diff --git a/twl/bin/de/matthiasmann/twl/model/StringModel.class b/twl/bin/de/matthiasmann/twl/model/StringModel.class index d20dc229cd69613621c415d4cbf0b0a06230bf04..2bfb0b020ea8c000b5b677ae0a2a2c339b9d2e43 100644 GIT binary patch delta 126 zcmbQw)Walv>ff$?3=9lL47}_NTff$?3=9lL41DYiOcN_KnAsUvCN2=2DC%m?otTp1oS2i7l$e~&$RMua zla*MOsGpOVm#!aFnwOWDl#^<$8OF%KSCpEYUzQ3}Ix#}QjE#|jk%1X#E&~G#3nK$7 d0~?UR$iU9P0j4<_xWF_whz6?U0g_A%ya1%!95(;} diff --git a/twl/bin/de/matthiasmann/twl/model/TableColumnHeaderModel$ColumnHeaderChangeListener.class b/twl/bin/de/matthiasmann/twl/model/TableColumnHeaderModel$ColumnHeaderChangeListener.class index d054809456d3c805205ca20a67931a8bdc87263c..b366346db62cc972e239da1e99eeb18bab0cec66 100644 GIT binary patch delta 142 zcmZo-ZekWV^>5cc1_lNr1_5>kZgvK~iG_vC>gOcprR)1AWu+#UFftfS6fm%3V`N}tU;-M(z`)GH$iU3N!oUEe eS)nu=13OTLiGc%5ax(A&X)d4+Mj*+<#t8r5cc1_lNr1_5>krim?nV(bhoj0^%oSNIB={l;-Anq$Z{SWix=fQhhRuOHzSq*%%oZ v8JK|0S8CWC6~frKTQNe{sLIkN5G?%x mz!<>>*Fv`-ZRo%?%pj{B7CbX^h->Ec9@A-NCy_)6Db)VMBqLw| delta 195 zcmey#@{@)4)W2Q(7#J9g7$n#km?rBp8jGgOcprR)1AWu+#UOtjaV zSiMb{$1^W4wa7UqvA8(3n4Lk8k->WslgQ*AMssFH2C2y_8D&^R7#U0^F=3~WFKBLh1F2bkt$-~!X!3_L&; eObonWl8=EONDBe^0zlnDY@7_j45AF;43YqZ%^@%V diff --git a/twl/bin/de/matthiasmann/twl/model/TableModel$ChangeListener.class b/twl/bin/de/matthiasmann/twl/model/TableModel$ChangeListener.class index 1356e2e38cd42040a41dc6e34ed53560875df247..c631ce402e5711a3d1963d0dfd4a9288b97e681a 100644 GIT binary patch delta 201 zcmXZVJqp4=6a?UT`CFq&jEO%Wf=y}z3W9YiQLwd*vZx`XaD%01aN{jJf`te0P~s9& zy!o18US(89`2D><0OlAmcnm#;P`-rDFp%zYMeveyTAcXyB1&HHE5TV8$|O&P;DX?1 z=`D?O)roh9j2}yeAz>r^sl3l3yUCeBomWM^PuWDv+oEKAhSNz6;v_fN`7O)g<) zV4G~uXgbm2yfBYvUS4XEb53G$acVI;gD@k5@x+W(y Z49q~xI(ZYLIlmy#A}%0L2#7`4I03>$9v%Py diff --git a/twl/bin/de/matthiasmann/twl/model/TableSelectionModel.class b/twl/bin/de/matthiasmann/twl/model/TableSelectionModel.class index c9c7522620677e0a21233817e7c4269e22754b7f..c2125845be46eb8c4a7fbb603b119ed81a89fc69 100644 GIT binary patch delta 215 zcmZ3^x|~(u)W2Q(7#J9g7!=tVl|Pzywsxz#zoJ$iU3N!oUEeS)nu=13Q?{0p)W-X)Y+u4W)S)c){xUpfo>&0GKZb srG*%T85pd928%F=f+fVD3dNzc1cM}4T#7*&Ov`|1pwnc5Bol)i0BCd(IsgCw delta 217 zcmZ3^x}25w)W2Q(7#J9g7!=tVm?rOIG!SEFU}0ns$Vx0r)Xz!GOV{^L%1TWx*(k7% zv7U{Qfsuh3sGNa82&jmafsFyAm>o)UFmQtTTu?qYl;(lbyil5tfgh|+07?ro2!Z*+ qP+EjR6wDW65C_u|P<85(P=*wPG+080K^9EQfoP!9GSBWLQ%bMG!os%3_eF!!E&_TJ|_=RD`$-~amcHvnT; zj-nkCZHOW#t;r~@DQUeStvBUxF^Xx-$l+21vk_btFjm*D6_*N23+wr{RRNI~h%MBd zhHEZ$(AKajR>`$%jzG(d?bz>$Y6`PTk$L8v?mP*~(T;mn*YTH617G9#*ndB2}_#XVG?cDpv6*>Wcg_ zO}_QoVI%J}th#HJ1;Ru5yyOtJow9X{bE&rPxB`*VuIcQ^9b$_a6sG%UAi*`lyVnYS`7aD!PcH*HAR&H?!}d+JuTc5uv|#6Gd>4HDBU zrktX7!`m(?>O=WqvNU#0->It1;?mi%W4X)n=<#-bph^jTC=lz|Z_v}kK_43ako%&= z+J3!cE!$F&vnQ5zyYo*CYCr`U2f7;&D+Il*IJz@0Cs0Dp+QD-r;{~w^kR3%Y?EOc0qQ< zba&aTRhzx58ir-js^%>W@J_Vz@`TU>12OQFS|#XV5ok*vYr?Uct1M^1Ih=U}@x9vm z9LE;r9K;#ghPMGpJkOPoW#lLie+>;f=Rs{Y^AkdScag|!(nwwZ86kZ()0cV#t^YP6 znTOCNxCROS5?VQ)C!-Ov&C)kY@G+z?jx;9l3MN(Hj0f%qW*GD;_R{L372@w@p6Vy= zSt3RddV-{o2~uF6;}1T^set2v;+ndC5AB%{iQY%dV_iOG9sV!t47maq8FQM}3|U`d z?8`XE9vWi*j9`&DERp+LP3)%v_EQ1-sepa1iG3UNCrF7l#XlVg^ezKRfjU{kmfJ8C z<)`b}rRwxH^M8k86{z!SlW?6r16d&rqJwAyL3Ot1()gi+T0NvrDVE>}Jfy_(z^}3+ z-eY4Gk-)kFPkZNr^g1Z3tUR$OiWEms$Ria_8|Qt-`G9dY8E5O%aR!4ppZWQu{d{CI z-U)PWeJVe%8G9KK_=w}jyeik2k4bq-?4WW}{B)3KI>k7N?& zmz>W;sYm-4w9d-0ZBmzg*ngMGaz3Mfi`Hjo>)n+d(%WTGZC<+@?4z4}yehmk4sXkz zqB+4}-4ym!?$WrUmpvI%eUS^O=K|`vChAdy{=}#dfAE~ZFfttFr0!B^*0hd+Pj;Za=hBVT2SWhO~4leqpkx~WNf l?Sb|<`hZ`&V#PTFU+{{4$(#LE6Kb+4H3}f#6a zqS?_^0b_Sux&{wLLrL!s(%Xb#!R=~ScIi95)^sBs_F>wk50^McDl8rDo%I$d* zFC$B?RoM&=eBFp^HZ3pQRJSjfctrvAZ*NtkXO%2jnRfYCuGSk=-6uJ=x41+AS*e5o zl-+iBC`Ri}!>ZMH_Tx?93JP(Ilk07{Bl8Z!&o4-?YT_y;$g5_%fs#da_jMC*=zXcw zp>|EGV>nVx2|EZ$sc&S9qYNpzX?gSNmL{Q2SR<^d9v+lvw!d$3r-iDK9sQX163g}N zM%kLT9j4{vk?Fsv=u>sVvw0#off(BO75Bf|xx)(Jx{G@(NscDJ@|*?dSneshe)g~S za8!oCIV3rn`T}~<$1kP=100p{cXVZ_d(o-fV+;=8M^A2zi}bBuF=$NXhSN{+!pL33 zb5C$Wfk&ahPotgVt7LSMO!9;qLyGO5ro0)9<1Cd|j&mA3aIEO0Lt-ObMfiILC-D+- zGrZ5&;yF@61<2wHIQ|lFoCrCd^0}sO{eaF~ghYQrmu6krXMOtrtaIcF=01W+uCCF+ zo8)sH=P`{eW*EyXW0)iNcUss_gzP6m_7m7+Uua?90pmH+qQmEZHcZg_bf|LCOAXK6 zh3Qj1sAr$A)4PoSJ*K5Z?~5&o>kSwvg`yBiqK$^?taD41OOm;If?O_53HHDvezG+9 z4a)riIW2Q<#Rt!5yD+>Y6RN8wNhwrvgr8bnDaZBmAuT_mpEdefKenH-FrF`icrrme zsu=Hud2T-tpDxBBdIUb<_$j(^lZ7bxES6bRl@|Y*FwRUEXC{bK32PvdG8pltkjW!5 ziSeWmF!8g;^>4U5rN-B;8mbOQ?lZHT2aO-men@V0uWXWDm7Qy|`EFwfcW?m?yT)a= zZ22_DwX=|BA*5LdX!f%yCW#ZJ{SfQ7jieRz1R{T9Oo+dDB3RQ?9944{nZgKX({Go1 zh#3!}5BRNR)2VLyzEk>M=-Uh`J>%aN>KW&YAHXVjRnMIY_WMIocYRd->~sdG0han- zb{%g8So@C`u@pC5vYOi$Ehw=7MX*i5CSA z-rFA~K8v7unRyIv-pm_1LuX_3`ThZ*iPaJ&Fz>;^f`ELWeFEWi4p=A%MvRHGPM^H z{EoiW4WsQv<2dRhai38Bl}-lM>c}L7F!RG2L8bRLKD+8)j$2@j%Q_%T=2cN|()Js~ z3%?;C89ip;ku#s5c#^#MtxjQvnR5{2HzL@lR}}ucGOqjl$5s4s3CyxrU=IHH7IA?J GrhzZY(l!(T delta 343 zcmZ8cJxc>o5S)GI<&xu_iHR{Leijmpq6q;DIlE{fD1wE8-Ag?3;rY~DBKRki^Lqb- zje>=J?EFLGUJw+E-C1U5X4#QBGM$gFw|4+_ELjlICGEHtCJ33Hx>Z$Q>2~#~+4EWh z3kgE@mpvY8t(v|^NDMmNV5LUbIEb!kJv`ejr9f~bEF^6hNK2%UAsDNblklk~+*r4r zcA4o9wT%Lb7G|SQ+RRIoVx<$@>DFm?&^f$1_xxy!$`yj#*V^khd=&&SHSPN45Rt?7`k#h^V5>*~^@7=9~HEtpEP!_dfv~#oai% zF&4*r7#H*DHk!}GOo%z3zy)OG#iW>vVlK&!&*kc}m@8s(;x{Ebz7R8QVkV9@T$RVy z#LSAxMAX^fyT*F!6}Z~#p0Zuzh}Uj@I0qHTC^(_r(&QzH#Iypc58Atci~oU zEIT$jHFnN`F~N7EJSMK%07?UOA zLtCUiRhpkKIwMQIU#jMxerK+d(!qE3o)!1FTgf>^&5oqVxRLDh_a^Q8I_*To@oPS@ zq}ta|sqV7oRJy}?-z|Bn>o*KE%sW9T4WyC>wqU%jS;T#_ug$GYY-mYi<&l@4as36= zCj(|aXbzba+)DMP#V!<-N3HGcWoNPUz*+aSB}7hlJ)SEqmGjQHD~;^h(2>KU9t-=C z6qB)VO3W?nu&@)mEbPHv6SpncIA&o)%n^KGVNkA)%cfy5XT^LXW=`Jj!(I!!F<{{2 z+jYGml|5_7NIH271vnP&h?&QN1s6#J>Hh(`rFYI|-DU4fwx=~fMXl+WuBX+A3{b7nNA%Z*a2eqz?GqEnV$n);`&VMg#0 z4XNH&Xb>7fgf;X;S-C_lSWvU`Z2ARsARD698KTvJNY=!Oe;LUzS=k70gyl(mtiwrz0-2EBFZ7Fq zs&y#@Tc=?S9zL5%WKBl{mE~CUsZa^bY6)r*;Yp@5dB)Hpk%3g-GU}z;>7UR-)>bOL ztYqAnUWLi3G}X$m8x7nt!~R`GBd(zpv*^Ng^xy{Tf0O6iZIwVEr-5n$164T*dFn+>;qv4+DG%g?)r^M8M{3)i5;m{V%ny_3N2?})3Q9H4pEL_0xb|wb zPgmiFv@+tU*s>~2542rl2iup`WY)>!*XSVeHBIcHPJoAK!dK|TBOY>(DY36P zAWuT!2Q?Ahs9h~A2fu4Nkr`c_z95n95^9xIVp>7e&IoF<38v>8Mtq81d>e|=7mC8} z^%9mJR2}4|J`y^6Wj22#L7p|eE9m0w_8NL{5ImzapL0IH<9vRvA_NEJoB0H})(!&3 W;;>>=N$ebxlB1eG>i9M20saH;TLV4- literal 2890 zcma)8-%}G;7(F)$2EzhTKr2uYu^Ki?th8z?)dFIR1}!E9#rk7OR@jc^C_pp>HSBiEildmi+l?cOi3i$#t#ylFemF$9-T|J)cL;vpk#O<`i0-8uM`N zf@c>Mc8oZ#0*rY8}Ousej!I=cb>XEE^6^_33zPVuIegl27vAJdkf+!@MTFx$M8OVNa zCj$%^ID{Rn3hN|-wNkjky(#Oy=Gnsija{)6;bq&Pft^UmUD`k^+FEc7nK*_N4!>Ph z4IIajAU)q4LiU7#VR@Jg#ng2qjkU~;dEc$01<$Ftvh9?C1L&8#j|?2f5vk@G10PB? zn-}Wz&D7vF#aib$!8&K)Q$gsc+U3dv+c(vk1LgggfpK}Cw2H+|FDDFKke98sM{Z%( z@fQ6Rw31Vs+~84BZqmR-^at7cYAD1Dfn`PFDFf|jV*!g!E%f*c11&J(xJu%07JZWo z4{gYH8hJ6cU$xXv!44r}@->`iUeqQQcxyn+tU|(>gXZLJMcSw#51!IyY zL3O-j)oM2Tw{@Ku=w}W*rqG05{&sK{=PZI|{^)oAo|^k3UGI-94aX$c^8Da+H)q2f z6~`v?6*_+Nmv!-)APkT}jOO3NJ0n}B*NBSs;#MMq#HM7do(Ta@#qW0Vk;Y7)fzNgcm8w z2tLu_G8_YoklwFc7YS)~B?Q}~VHFSbt?aR`nt{V|lsq4jAYPZCVGn*CbSBRjTI?}k z_AbK|wbQ>KN!Dl0^fFSs8BMR!i7PnYkl`SE0+?l&T%#qfQ^h$3yn$}qr2e;X5O@3p z0xJ#F6BwvlX+T>^SEE~G`mAoMuso(%DJ)N63wagPGnY#(<^aSu~$N^(mwU5a}hLb6LimajQA8i z_&yY+Hxz}{>me-v4Co-Y^pVijBfa@E3G$rjS;0+Ctp<8<5Imzbe_((9$o~Avj}ROL cYyAmwZ5#xQ#b!m(x0sE)9OX+i&EEp>KZKb0asU7T diff --git a/twl/bin/de/matthiasmann/twl/model/TreeTableModel$ChangeListener.class b/twl/bin/de/matthiasmann/twl/model/TreeTableModel$ChangeListener.class index a0a3da8e0b54cb94cf265e9f8f06d90a7ba31a51..d0d4f0ba172c5097bcf48f10efc378544433e2d7 100644 GIT binary patch delta 203 zcmbQnGL1#})W2Q(7#J9g7)00^xY-%_*ck*SuB&HeXAqjmYh}jBz~`Kin3taFlUZDn znwMI{$iU;72c(^I5{rvdiy0XNvJ%S@^>ct~^!<~vQj<&A8H6V$1jtD_=jW8>=6R$h zrT|r=nV~UJKx48!qp=4YBLgD?6A&{4-N4Mk$iTwD%D@1m*`PE#hz6?Q0F#^yyg*tA Stb>bzhm8}ckDo!1jS~P*StnEg delta 202 zcmbQnGL1#x)W2Q(7#J9g7)00^m>3z%C(mP)p6I|aakmIFI|Iwa_o6Ipj11mDQG>}A zjIt9&YlRpYcs%p+Qj45(5{rvdi`g0YC(mXyR$ye1a?Z~w&CT;jO-upGW+djNr}|_T zm!tyKvNH%xE@0FR=R*|+8qLVS48*KJCor=xGO#mnFfagVPAJU`7=3dC$|oB;YK B9(Di# delta 160 zcmcc0e3e3x}CR;HobNJ?`q~@?QuuS|Y%*M{Z#>ij*6qcT> z#3;(l&cHF*oKa_@b*})AXI@@vk#kOBadB!fJA=UFL`ExbMg~6TjKsY3RG-Y^l2o8P wP&Xq3GXoO?D+4>wA|@6_22KVp1_mI_4WfZEJYbTSfe%P?0afz@u^<~K03f>?AOHXW diff --git a/twl/bin/de/matthiasmann/twl/model/TreeTableNode.class b/twl/bin/de/matthiasmann/twl/model/TreeTableNode.class index 96314bc99e49c5f3a975b270eca0cc1ad69acc36..0d263c7d92bc31b54bfefdaefd6fb45ecbb1d4ee 100644 GIT binary patch delta 97 zcmX@Ze1=)z)W2Q(7#J9g7)00^gxDE`H~JbfPUO`xWn>V@N-Rs%&q>Tn*Y{7#N=+_d rV`N}tU;-*;U|?rqWMF1sVPF8#tWcVbfqn7}MkOwwA_1ThCI&$O1mX`^ delta 99 zcmX@Ze1@6#)W2Q(7#J9g7)00^m?k?iYKgHkurM+RWF?j*>gOcprR)1AWu+#UY!onL ulwxCKU}RthDraC|2P$G^U}FF&W@liVynsy#d2+@-$>}(rZ+8jd@}NBMU4Hw!o!>cM`0Jlveg$w5%Ni26 z+JY!1Y^DH}a)2Ob^7#s9z zDOe@P@MBw7-Ia@2QnC`r>V*BH+6b*a9a4mTcjZwnpq(+X{k$_q< zy;+~llY_~_9SJniK@Lb6Op?@Q^ZlA(vtXjJ{kfHOv*?W_@6x^Et(h*}D=X{!6%slL zw2_12J?g-RKy8wUH7X;(t+1ZJt;Y1BwvxxisE}rXD}%XXXXubqs+D)eL;SI9(GHp9 zWJsGT@~{>-o}u?z~1}I*|u3S z>`Av&E1QmY{iC9}AyqG{F6ijRDIFtN)bS36r0uMZCEV3<8ZYR07a95WJ%LU?W8-5b zm_1wlWeA+us~s>akp3TN_9X}irn+p?DS2xL)U``LhkUM47Q3ozP;Fgf(W><^c~CZL z6w~MtQHO&X)nCt}7_0m_OGxP)#5;xy{HaXv2RDkiq?M<*WR`oc95@8}c#fc-H_o|! zA3zJO9NF{!o4H44UtMeK_u1p1jEiiN*?WF%DT22RH7(|jc zCh*%3{z*0xVSyCVVVMkf`K>ASGa^6o5P?kI>>HQ;gnHl*CKNc2AzEaQjls&p1Hq*u zgNOYf8T?5Ius{6=q7TrM{vFX7cA=c--*-@>KOm|+^wTPSPXS;XD$3B|;5ls60qgvC z^fCcQn7F?Vy`OAcWUsH#+6Lt*PN}#wA^zr7;PQWiQ9A-glJDZxa0cI#09kb^wS}f{ z(YAx;rMS9{*l&-}LYqcd`ShPSvxDeTincAZZbQ$@ujwtcEj~g!_m0K1oPL0G05P6F zCDPA`>vJmR3)1=}NB0#*@iiuJ-|wnBs2u97k5d}u3!q4Mg*R&5t1)*1O=h2qbpUxwMV= oW3=p`i>H&1(JsXtglfLq3^dH~^g8VkjN^Ik8a<+zBHKOx0+%Z9lmGw# literal 1894 zcmbVMT~ixX7=BJZ*btVlP^c7wwIU@+?OLf73!;dv#D-SI!J#u=EXkQI=&YttW=REKGJnwt0twHqOMy)3(6t))j#r%%h&dGjQRJpAdA}(z6mDt-j%zL3&Dx5+&0XEA zPSvx6mQR@XJ9o@?B9~4>U~Yl2QuAfk@tj~mAU>U2V`fW@iZn1NFsKQ%=a$9*hD@A6 zpFr2VKGqF^5fj}=3-p&9Pu_0TH>Cfrz2RyR8fDvEvwcUcBjd<)CxK#aEsZ#a6x_Ip zB)ZgW!i0eob7Ezv*0s~o6fmkXxUH*lW;)jyTp-B}#n-h2EKZmFpk=!ZINY9TSl_wa zU2bb^Y#yy}J=?JD_;fjIhj}#tG2u7S6g-I1vl=M<+f_{6q0Go;6+vH*<&*7r^8lbli3%lP3Xv^j=XGQL8X*vIv>k4i~OpJGOAp!nOK6V!gh-S&7OeS3E5uG zgCfLvyV#DZ>aF_zePun|tPi7nz?h`~#OU zoaNZ3Ay)`gBE&MD&>rQbh7rIzS1NFSei!HRg-006k3T~85F~>H-FG;?#Z2BN=sOzd ze0U5`;ynEX(0L0zQ<=vY;3-^)!dQGOUo!tQ#vXDKX4s{TcQv3HZioN{p2j3Cie&rY z?1N*6D<>X)22;`DdlA8G;SY#!aklU~#0s;>UgH0IBohzf{1G&+H4EuF)NGStZ($7e zHoDmZx>;PrG((uoFh>bu$P=RnvBwxSApWL{-SFQi_$N@v@vb}@QTT@9t1@5D@8I%x z=-tE2dgg^)T>I@u4Ab@!DU}L;Vr&m$Jx|*X=6CT*NqGx9SbVRb6c71LkQwj^$4@bc z&oGY9nf({k_)E;9M!sy3~^tHxS U9AbDwkIN|Xts0wOH}>b~zv$qNZ~y=R diff --git a/twl/bin/de/matthiasmann/twl/renderer/AnimationState.class b/twl/bin/de/matthiasmann/twl/renderer/AnimationState.class index 2eabbe1f404442b62a5eb26366a00d6aaac6ae80..1350b0a8585dd5125dbc244d2f89810226f9ec4f 100644 GIT binary patch delta 143 zcmdnXyq8(`)W2Q(7#J9g7zEfEc-a~F*ctd4890JV5=&COQ!5!6cs%p+Qj45(5{rvd zizf!&naHmr%*Y^+l~|UjpOcuEuJ50em6}{K*_P4Vj*XFlk%0+l8Uq6}3nK#?13Lo) fkmg|E1k+p~8Ys^VCV3cGfixFT2Qv_}Fh~LbOj#HI delta 146 zcmdnXyq8(v)W2Q(7#J9g7zEfEm>3zfCwnt$i?K7XFfs^aC6*=X=OpH(>-#5Vr6!k5 z)V(9X;vZ6GSsGF>rxNZU!D8%>~rK3&i{kk^qz*7*7BI diff --git a/twl/bin/de/matthiasmann/twl/renderer/CacheContext.class b/twl/bin/de/matthiasmann/twl/renderer/CacheContext.class index 3c55544972bdd0ab43fd71799fccce622e03465e..1bd5238595d0a583c1cf69da6bdd1f96bce5e189 100644 GIT binary patch delta 97 zcmX@jc$!i8)W2Q(7#J9g7`WLPIM^9D*%`PdRvAv@)e&Q45Xed_OVrOv%uCnzPs&P7 vE@5O)ohTry5tLe-Us{x$%ErjR$iM`|%s>+uSr{2u7+66p1~wqc#J~;!cA*jg delta 98 zcmX@jc$$&-)W2Q(7#J9g7`WLPm?paD$gnf8Ffs^aC6*=X=OpH(>-#5Vr6!lKGq5o- us7`d3ge4=va}*^8_X| zGQN-=r3BJa8Y)&9l;i#FErxi#=egWx&<}*Lyd8)4`&OT!+~`;a8T@xP@4H+G!+-A> zo+Ub#XL-i%2fsSm^4O>`;1GjB?uXx*`8#O>addpDHH%|E(HykdyM$`9f(XAB5A)9IROzyO}XUi0$ zJPLJ((q;b6K^?E!!uB^A?*4E+#h&^6wOORqG~#$;N1}Po*1~* z+jHNfiD}K=z%#A7ExVHrPqif5qa!01YDUKz$|}|wR&To&I_B_F#{)bZ9TS+=k;XK` zPqP1&%kdosMOZzedzS4qO~lD zC_s|90@L%d6=YG6#4PTB=11BilJe7rV4o4WMD!zR4EN}a2eu;l&mlYV-#{d|P0c_l zenIRKiVTR{2$-iE{mKpZu@Km)f8-@ot|3Z4pcYpaE)f3|n8W$5!&NLw?pO+ZmXRR7 z%OfU-REhjb-=Lgi)aV5g=ST*MrUXhV_MJ@8AuZyGGDNC*4koi*RW})sC{dTnm`9Pc XC9*~E7`Z?`!4yf2ycHBMSl6m literal 1221 zcmbVLT~8W86g}et3%DZEszvQLZ2>JSHth?<;0G8|)I=%?>C=Eyx@LE2mc@pD)#`($ zO--Nsqnh4XsO(FV;wHN@cjlgZ&zU{*>-V>702|m)F~zWcB6N$p?ni_7ENk-g>-GK zqwYF}-6>QvjR@u5(GWx^3{?gT8dQYj?4E`&B2=no*y5mXwS@DIw@ks1sCC=iY;ebr zv9}n7f?1+KXWOH$XWZ-yn!HYDZlNuTM|h&*F+<$PdC+r(rQs=33=!@)e9-QG8Zc!2 z$_`tnqU{!{KCyq7NG*fvF+2RgQ1Qb?2a=imKS<$e4bPB~YJF{YOy27id<+6mAY#Wdw<6g4Q8PwqQdGcluFB6fj<7u*ea z!F=!sZ7JtS)SH2G%-1il_>~Y-NYXdvb<1If?(`C}^vWIilG{f;@{}VvsoB+)ODvDU zAxgjqq$1u2Oosf-L>8j~2knY@9dD3hnpL;=mo_KZ9ee+4r7Py8(f7tx)_uO-IF zAdr<|Sh)42%p+K*-F% r0(2k?3nK#u11FFHqPd_nH_D0esGAjt*&HMRBd{ri delta 178 zcmZ3)`iWWK)W2Q(7#J9g7=+jvm>3x}Co#!R7GUI&VP{}rWDv+oEKAhSNz6;v_fN`7 zO)g<)U}I!Z0;=Kg%uP&BWoO`+{FhN{qH);7>w%N27!`$iJoEBWi=1;3i;Gi>*%<^F z84MsM3Oh40u({=ZFlYxr?WFaR5H%Nqm2TbxZ@BwKq MplW^~7IcsV071ha)&Kwi diff --git a/twl/bin/de/matthiasmann/twl/renderer/Font.class b/twl/bin/de/matthiasmann/twl/renderer/Font.class index b05277e02b18184b6993471e8b0286119de2f775..0bf23a31a9fbedb129ae0ba4125138a3463b5b7b 100644 GIT binary patch delta 242 zcmX}m%L;-}5C-6X)HJ)8-Ryo53aX9Jixe%}Sx6+Jq1Lu%@KM@CwCDkPf!-!M91bmJ zKK@}C=AnP|#rykw0a(J;Fw`*8FeVtsWF1GRC{B-2=mrFNHs9XjyPTCL7Qyu0i|Yh# zcyLxb-`l5zX=VJy4X9ff1Bn3iIY2GW9z3{ng-K&u%UWPv0TgB$=- CpB6O$ diff --git a/twl/bin/de/matthiasmann/twl/renderer/FontCache.class b/twl/bin/de/matthiasmann/twl/renderer/FontCache.class index 18ab38272b57cb2693ab332463ba9607ca9e56e9..11823b422b812e1d7b0cb0f09cb3ea9e52fea2d9 100644 GIT binary patch delta 102 zcmbQoG>=L6)W2Q(7#J9g82H#3xY-$a*co^ymX}ZD)f8rA5Xed_OVrOv%uCnzPs&P7 uE}7`BVZg@7z{tP^#LPf#%q)xyEDWp+3_zL?h*)W2Q(7#J9g82H#3m?m~<%CIxAFfs^aC6*=X=OpH(>-#5Vr6!lKGq5o- zs7~yaN`HBR-Q&;)0ceg(8+dD#3D%i$p>q62;C|u+sez1w~ZQ zQt%J#Ec_1j%tjHx=FU0yoO|cYoSJ85<>ll45x^{56A4TxOvYiFkeG_YN+6DDT?z_C z1?PO@JsMeV?)X7Uo_4TPQYZ^l3&EnyUKqK+6Z65VyqmL-MnzzF&pYzmy4Tos*ADCT zjb^RU@()&ytNwng)@*3kj0F=N7AzzMoM1^hIf3-=-1_#OUu_8#DRo~MS*poUJ#5wL z?y9#hU=)g*!JFtkL7q_)e2s*yw-VWUF$6lpZVCo*8eO3SxFk2Il$=|L(le3|kXyEK zi^x;?heb7WN;il(}OjaS9fgSWkGAG^ajkcE}iyRr(hhapBbR3Bu zVvA9RcmsNg%^SF$kYz4mw18 gee^qozzAdMfB8GD{!CL`_-D8sAJCb~c*MncpDx-)D^T#CtNx19Z~)H(JTOU^rt3Cv?NF~-VUb#Y6{o9&E{wyPs# zo@iXf8tp|20IE5cc1_lNr27Y!1UUmk)jUFtF%!~|56ANX-JaZG%QyCcqvJ%S@^>Y&Q z()In5vQm>v*ccfY8JK{&7#LVt7#WxuSQr?9G%J*5V_*mK*%&y$G$#WWP$eS+H;`mv G-~j+=un*e+ delta 119 zcmeBT?qU`=^>5cc1_lNr27Y!1CPoIOiFvZpp1FzXsq73aj0^%~rCz#K{zy+qc8F+vy85wwiBohN4 E0A_^`qyPW_ diff --git a/twl/bin/de/matthiasmann/twl/renderer/LineRenderer.class b/twl/bin/de/matthiasmann/twl/renderer/LineRenderer.class index 5dd77a2f4a40c9c36269b3413eebbb49c0043697..280716193ff5cfacff846274c7e44583a63ca0e8 100644 GIT binary patch delta 77 zcmdnbxSvtr)W2Q(7#J9g7&zG(*x4C4Ci(|W-#5Vr6!k56bO=I cV`N}tU5cc1_lNr26lD^R(1xqiGB(bd9^he83eKt%M$f-67$ma{gbj%lS|kb U85kLufNDX2k%1XVGBL0K06KyUyZ`_I delta 70 zcmZo+Y+>X*^>5cc1_lNr26lD^riljHV(bhoj0^%sL^>$jP6JsG}{!H0B5M-Rb3pYob0Xmz_@$7Rf!8q8%b!QiJ#A@Ub+rnGaBj%|(V zjz7&q<%U?5OM=elDa&7#NIo{r8(w`d@^1*zK4<2b@pt7}A(VKE^hq_GCM5gj*sR&6 z)2p?v`mE#gCKdT7X7$?lrX*~)% H-#5Vr6!k56wsAp cV`N}tU3!KC(6i9oGv8B&cMRRAdr<*MiUJm{M diff --git a/twl/bin/de/matthiasmann/twl/renderer/Texture.class b/twl/bin/de/matthiasmann/twl/renderer/Texture.class index 61b63f68e56d8b3999717d8e9b3db53726e733c6..510dd8393c8c0c965e6b7fcfcde3ba135b5c77c7 100644 GIT binary patch delta 161 zcmX@ie4fSN)W2Q(7#J9g7{u5agxDE`*%?IG8AKTwID+y^5=%1k^B5U;JoEBWi=1;3 zi;Gi>Czfh4mQGxt$mlasK!r;MrpkKa!9x>y)rA=u1hNv#67_Qu^V0SGld@8iOD6hi tG3o*p3&Rz&F)}bRFaa_13yUCMJqZ{Kq-@JtMmeI|BX_$g}GcnX+{QSAZDG+$)w8( LGy-To6N4ZCt2Y{P diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/BitmapFont$Glyph.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/BitmapFont$Glyph.class index f3f79b0bfab76024318a497713e985c8829cdafc..bd65f444889286318d18118bf6521a12be723c81 100644 GIT binary patch literal 1784 zcmbVLU2hvj6g{(Edu?|^>b404$4#LvP28kz6ACqH15H{tX`QrbLITPIp4b~_8)qG@ z*N!70#8V!~6F-1wc&I8NL6H#f*h>5r{sJPL8Gob_1y$JEGk5OXy>srlcYpuu=idN~ z<6#`VcrS+6@Vc&RR2?WFv zcYB>(v?)ss=@lJ1w;bPdy|O@PZEad0a^3aZU`il1Jg0vnD+1N@m&(w&hN)>ILU?mPuC7E zG*?@`7|q$XyJsno#jSa{(_vQf2+2+L*-@f~F>hl5cWvBP@Ib*S^jTOGnD`$e3yio%yQ6=zVU6wdldVZ8M6f`eWi=4ozm&wh5ojQ9sFq|9t zH?>2-9#asn=yb%fSD<>NE6(uC=;gO%@}aOqC~ft6vb|C}?!#c$@jCGh?w-Kn9~ej{ z2m8!#V1>Sgnd&q9!ux%Z{huJd=V1r~#5fG%ExvXeZ_=7=y@(`EbH@}IA`PLfw`i&8 z0rvI`-&fXIT8iEP&d~~M>pZOp-l2US#vyE25utww(Kw{P>oC;`9Tza%=Dx-xI(0gk z{sBf|kQgcuOg`bKh$!v`@9S`%CHFbay~F9hxL?3X`=UR1jbeVFZZHZrQu?B)i(IUy zh;oT>8QdqN6s*2*67QZcEL`XwAETcheazL=Co1tjV|4PP7@gv%w9~o`dEz{0V1eq~ z=V$Z)TUf+bc&N)wx9E3Ub$~Q3vN)Eco2FWI0M#_5=P1V7g*UiYo*~|DKjV;aNgj`V zK0ZJC497;3332$v#N*IohO}m+U-$K6l3C%)#~6+J(~?y^}JdybQxUBbXG(N7na#x%RZua}P| zxFywRWLF@&b>3fO`6cq%z%`U#kSg2dmL<2=RA(_k%g`sPhLGkPgOT_XDGNP3dY3#6 QTxH2>u4Ei#7nP%&Ol5n$RLRU(?uOjVRc&{0wz9KX4kIWqet?Hds^Qihb<&-dr#w}TZP_J(z{<*uK3W_J-+H6Hk9QM$L9$HAf_x0%jPhL@udNSSCuNP8zugnjR{ ziQ~R^#zYT7G2WgtF@#~()dlX=Wsy30a_D|zCFS1P7cDrH9iGz#M@>W#6EF%SCbHCQ zQe_*DkECk4+Y?RJHBKj6?Co*78c#<&AB=tLHW>D}`4aRf&h@g=&@&1%{^Mo(wQIe>1DPn-kj z_E^Pnf?k_QXijkrzQ@^r3FQbe>k%68AGQef zv zC+oX^L8n^KDU2aQpak{3fQ!^(+^Zw{xJ|U0eN931pr$qWH*};Ec=;KV?=aG0voQJ% zNA{zHflrY~3yY&3yWUqzS`43Ezc-B~+WSO(fFvFwg-2wuf-89Ju}u45Etb<{=}&AL nQ}hhJ>i75tJibvFi67_-W0F^w2xZ_hi|J2+e*{e98X~^|494hi diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.class index 579416c17a07e0af360146d9ed6660305237cba9..de0df1359caec6e3803afaa2223cbbc3b0cbd84f 100644 GIT binary patch literal 17158 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 XXXqIIdj^M24d6dQ@kRdR)WH7(G{iZL literal 16603 zcmcIr3w#vS^*(2Ic4u}ofsnAsl7QhMkQV{eNE1LIyn-Z9f?%YUEXgKW*=*uw!$T3Z zMXR>9R;w*qt5j-gu@+yOC|a~CwpLr)YVBKF>!a33U)D##{J(Q&_Cc~J_1C}r+_`gS z?!D)H=bZ1Jd++3l5AOdy5zW>r4APh?T0@nc!FaqQ9PH@~Mx&MSEs@GtDB2o|g<_SF zE$6gHDi?<1ox$!UUD3EfI#b>`!Og+SNHE%7xpLz}v=xKR4M)TA`Ai+tk7X<+>S_nqnyf8)Rs~}{p;*ldg>y6% zuRLS*ikgzOkYe%HmQZ&*3|tKgFrCm9Yp>ke8R_ngL@GDWsywqZvI<4Jed=9<3YiL2 zXW_2Ox|OL1OnPlsYsg0~nqZNij%RXBFIj8SL_BGOxqUR5PB3T+)8uT{7$UGmQ)wD( z7z>@-8x|W*pI&F{pnRn<9t%g?9j!8JO4iCaB^H%Z8Jb67&o#kzB}<)26_6zyZR?VE zDlM8RQu@Q~(XLo%WxOL4TM$RT8++rS9+PInEG=D~on29rMoEK{EvlkZ(4bo&t&7H& z#JW0DEl@vwxPT>fUby8aEE+`~li(A&xPjEovnXHcPKDQY2irqEGQ&#CVdi~9c~q!8ZBBwXE2Rw55-ex zsVHWelSR)gAP%qc(K>1}=uC8*h65%EwTEIBoh4>6lV&pMQ%qyKqLFPj4&m0~nP~`2 z`ZR=Y3r9i*H8WY6apI#5v{B$`fzvvoCPQerOeJf*6ry&6+L)@cx%dz!%p{yCOS)oU zPK!Dy42M{-V%4$*fG2Bce{?rBUfM*R21P!OAmK<{FpN?c;-_Kpg4K%~*L*BdR7W*F zI+s8&F{YWvib;~$EQ(Vvj1%b!wldv0)BwlYox|x4#M$ZcLou}#Dfw@W0V^F@%JMpB+h7XldR(4>noLvA(cv$$+C=@JaIMWz;$K8MKd zP}7e|mopXB3m0@pLMjY~F~MZ|yhUH2E73j_i*>n zBcGUFr~Z>^>l^U?tzB(xJs~x7-E7fr`X;8nOcrbCiZ@`2WSW{4sWdY=)0L0*(5(i2 zi)m!WvknlrMSb*b%*l$g8l~nagxu(byx+0t8?+bpZZzq;kaL?Yr#$+eMc<{pCfx}F z+!}1%9E`SLy19z(w&+gU>w^Q`Yf*yw@i^GpsxlSKPncVe0pg(sLK-0if1gG7(|&Xq z?pYjdP0qGw$)g7?`o28!g?k#~!I(_NCOw2#H-%zROyHPie*pQNJCh!T^RM5j>Tbh{rs7t@J6Oh2*cr}Q)ifvFq?=S;6X zrtlr6p+NU@i!PzP5_`{BR6ri7`=v#nv+I6k(P;9(qLSM+^mc9x#nuEjMv$@OujpzC zM%D&nVYzoIbtK0~Dl7jxypcGVNs3~ceJqWS%n=cblG-85%i4BG@`d3H$y3gV!M8`) zGhK4t1Jp9Z*MX69oCLce*s0Xb@M$|eL)sN?MS9Cy@IP{0Mk01{RsoXA4O=9nl4-3S z9p%D{S~k@OyA_%Sy?Mj}!j3Yg#*dRkE8&sSt_}sUTp5-x8}xUiWyzNo_O`WQP19<> z?4!TYKZQd61%7atAl*~RT7&+b%u@vD%4NZx4(Q;cw`qbn?0XiyPyYcgspwx4joZtF z`RT5X94}kiJ3Jkco)1gUA4u{%{JC9|DUgb1h8%PjIk*E3G^h8*JL4x+)k8b_y3|5iHB7!>dg8$s}vj#5h_e1LT5OdBm~n(g^pCDGz{W z*+Zl)iIjFDrp2+T`XOdfp#dcj-v#zNN1%ZDMJDW85fA|;B&&C|d zA=|o>Jo1U*1I)FnGFL;xYv$J&T!f%bda~`ouz)04vMOgf_hW}ok|X|0u0@VGnTruX zJP~o?*gw^ma5_(x@ERlUonY})S+==bB3(ULZjO@}8pkCTmonyduPmf%gS|aqr1DI! zU(*rm+9E_;Q<8y7x)!-US6DoQD>1Wlb%&y0laM&%anqd!vfhn$_r~o9z;PB+Acr&2~b10{<$OHN@ZtyW^aeRP}F0t_#2Qak8CubS{hh@0RyXsc~}XBOFbd z0w)umw%*D1`CAr$nU0s{eHMRP5kh-pZ3uf}TW5#G2H&yx1{sIL24CewfOG_s*g8{w zgvOm1OMxqn<^W%K)Ibxby_@ef_@3m1s;p2SjCWX^;C@7NXAnWBNC~Lsw**@{LPw0j zbltJfwlY1}N*9?4;E{3rQ6BpdGjnz+?t3{tZA=QF^ zvAHIec*x?1Wi@DY$3jSTRox>Nck{XO^f8MMik*y>NGKTX?G_1sXz`Eu39vXQHHDk) zrvSBNy-FgVwD?N?qP+eSi+`#-0B+`t3-lH0*n-H4&4(%iUiPZiHp6ZCpPH)f*lhuH zp0#)>mB}>toW;Kq6!nc@KP)}?Hx~bve+SP-zM`UwX>>AYQ4Z;(6h3-`FO?rG&EMb` zEdC?^Nv2Op8+z7-g_N@H0b@4&GtwZH>16b`us0mRO3CDx5nI!I{30@Lev$uT@oW57 z5M8hvECDX7$c&$4c9Svj*i}w%H737-we+;&2qLsNw6z;2LLrdDi~N?we^Xk+&iL)d)Hb+UGqDS%$Pn%uL9SF<+KU>}~$H#qT(2XDApm_`Rd-O4;+2TFZp6 zk7|pGTb#l8_+9>wM2v=DYlX#e<@$N97UQP^Gb@X-auisjYK}r0JIC z*0A&7LVh!3E8RXy%cKdXCNuYSs-%C@(!9#2z+_EWPDQ4ry>!O`nu;5;0V zOko|z5xqxP+DI)AQUZ)2TW?3#($w-17OU;kq*m;JVx1-iDxPL)qmiXfQwJk$SewCR zU7JF(U%Oe38kv&b^uN(bC`$`i+BmHc`x!04sB#YFFlqQQ!YtE>4hR`Y)kPwq_F!Z| zti4zAsMO(4a*-pseEN*8#?Zzize-2)(V8<&IhH|~R{k&Ttsv^9@z_bJfXT6G^1g8`IWWiEb;VAlx?*<{R~ZQ_X!Ly??mW1TMW01P?oAji z7lVGTw4cV8yE(r&L6gc8G<}`ipddFh>~BO7Ee~3A)<8e6^phueJhKdH#(Fx@mxJxtDH}yW5j@cgWqoE@aP`DBQDa|YHr>Cktr2)@D8Wr%|LwCu~&zk#4*YBlY zl;&-f=SFG3I7m4G;~sj}e)8O%a8DQgnuzDqN|f73r*>>fcHjs-OaVHF#^Z2v5=C&r z-$|7?r#ywaXaRN8={RXzOEGH3vEez?i{CA@75^@vZP>s+kFKEe>1x_eUq#JLw1f82 zg|v?@!r{ed=n?uX{g!sp3wZNYx|H6)_Ws*+8Fo)EXN|644}G3F`a9jm|Dx~kA=<0ybi0NV9c?t-p-rIgX_IN6 zRz`PfGwC+%6uMhGmG03NQ9@fm1KJw8Pm9ogElv+;m(qju8=#i}K_IlD+wX8ErQg#Z zKm}5I9@=WE^hf#=FyG6+qZdI9Iz7UV(x2%iazn=(>1EV;py{=AF-ivXy%K17$b{CH z&?_i;q5B2E%|kwD-a=nODF^y5qQB5B^dK7gY=rV;4qGUj$BKjdpCgeU*z2|}C z1@u?6Fz9s%`*X@2gfVr4*r0O_nrz@Wo(c}pVnB1YL2nGwX_S-s6z{!(ooj}EgK!eh z&}T$5Y6=E%E@cdTV&F^%t$7gRW__sPA)byUGfUIV)<=7;I#4A1mP5ii?i2;<4}yY0 z=9*h5ct8EEsl1>5QLXQ%x10LuooaVL&o3XKch})M3)g^qfDV-g-1#RC(4g=xiq)z( z7p3|70Bc7wFKU;&P@5!8MZM^(A=w#TSe5yLV$~Fx=AS*lLm4&AkmzS?x}O5}LXs+v ztIFu3oA7K$`dR)ed1PX+i=^O1;WJY3p|Dd5IVfBz1q+3SltAN}@-OS>oCAtJL7n~_ zzcrjba|5|(b>jeALY`8-U6t=p<$bCQ;xq%fAkLizgV#K}2b&?{fwYK@_=c;>?4wig z?BVpY{6~^fKbDmGaV2%B@VP$+B)QXMu)DE)@P`fonxz3#2+$M)#LrLy^p*y^LV(^Q z2~ZaTM4-&V?*RnlLvW9WF?0Wbjt5nhA(*P@F_7Lts;9^CDa?;(BRv61d=hl`6oT_7 z2+^l;M*K4zI6qC_K`7lrzd$d~;H_s-^Gndda|rNX(VH0Q9r_I-=C|yn-|=YrJx`$L zc^I{93W0vN@))5I$iGvOlL;-(SLEb{E-^(;I10jaA>@<;y_yv{S0X4@wt0+XG4xn({)U0!33k=;c#1l>@D8nlho6O;cVDz&;kj*p^drI3cb#$r^-F zlJvucATERcW?)94(Zz@Hfftyho^l-~$#|~F%cigT6w@5>oahiu;u8lk1A4Qy&!nQG zzK|j_-%+~A?B&DWu}RI#0J2(#=*p=M~~IYS%!vo>Cq zwec^8HV$NMT$i=+u#v}SZM-~d*6;N3br@DhyUM}>Zn%X?(be|CJnwn48!8^B(aF0}8j`uIni?7_3P4h*M_z-*}5Nu-*W+F_n z-99DESZ?Gs=-r1YSb);hz$PIF9Rr{cL^%GjM+fjOMR}WCRXSI@`>+lwE83~?eY{SC z(Vs#l=RQbCO^^*#>3uZ6X#DQM=liHC{Z^F+OD?rEl9kbTzaDV=JqbR$xk?Wh)o$El zt#lXer0I|Sy11>a&=S~^crm#U)gA<=B;^6j;S+c{80>VKj=BnNpqadq=JG0hO8iMM z*J^y4+el4Nu?5dMc%1@awXH@9giRboVlRHPiCbU?vB)NFRTgn!X?6)pI{puF2)1$4 zTztDNuz9cqI9}PyPU&;WeHemadYPbWvw>Y3w>#Jg-TBaMTTzwURpsGoCzm5W+axtSeYtlJOOVtvN_43e%36%w>A6qJ>==5F?KBg^Xzo9-wn|2 z@Vkpz)3D9Q1`6?d!1gJ?b~dE@G~pl@{?H8Qf^gK0fUbp3f@*WP4WC1|Qv=eWGx1)K zBMPoITk;fKZ7I0gQgF37a6v=vP;j{bc^Dz2Sd`#Mq3u+2 z`)HA0_q%rwKGR3l84ZqvzZkFEz|R%j174>O;C@&0T)TtE3jLl8kQOnJ5&ZJKDt9?fa0S&lp%x=b|^y#+3rw=a08+9xeL(CzpW1F%fLzEwdGWx8aIa~E&@7EK2J9szAfl@AE{ zTJ0wn-AZ1+*BzS;n062D@f&I9T_}5h zd>L@P9JpQqTt80*$Y{s#m2loKQVH_(nS2#+{W7xLui*RrYpId1!>3wbg`-`8c;BV4 z?6y@%VYw-V<)##tHU|ino1AzT4!8_f5-d9uzJg^)WPt-0&~l7`yc({&6mp4kmtcna z0!lvR$|K1oY`}*RT>KvVoaG?T!SzIRD}2!EQhXp}09@UIt5FJG@EZcAS>!i?Wd%S6 zl)$@>@^F*JHK6-FJ3UyH<>hVldof$>xM-!{0Jv_yyUc;~w)9k04VEYD*tl>u?ctjs z-OT`WH^BTR{&M9OoZ#<)qkap3-U>j!O{@7fFu_f5(7hQ>*_r~fHN^z23N&%bRt1^> z*~(vnadf~JRPYHCeA?b`0ep)Ue1^oo0?owU$w>~7GFguzUBUMOXn@&z7rCk~XW=%0 zG#^)q25VIA9|!pAJY#^rCW_ig$_NZfd8^PMo&JcC+2SgI+ZG7lC^1mV`+l-z_fi-Tj6)lsPcd?u4%3Ui|6HS zufiI-Xn=2(t;gncL2p)dMe3T24PkY^zI*V2KC-I4==HXM_kdjP#E3er!N24TX-CTd zP`V$}{(j2i2e5K`5XSvJjC%mH<3lj)!*m+|03Lfkt-&_fT5Q#w#Rm~BkHJWfEA2i7 zPbRFmolP~AWMfRQ-k6G(jmorQL5l!<__~3d^^mE93PnnmZ!|($vq&89DEEK55+dm4ULK`X@jilu#Koa67 zfWnVquP2fGJcX$I2^H~AshFQu8rpf|#FT~;#Z#1q6H^*agy%>`#=MUOYgq_9pt1n0 zkX-Xz^O61_WFbzhN=F{#$Kq^9m3zFz@Llu$y52mmC>epj8K35~se&&50)J2V3}k#3 zx$Q4uspl|X{E8-GvvexzX7X>9obw?8MoY;#+X*)fZ`gT?PBT>Cxq$i@6;L{|W=mmh zuhvb{4r36kV3`N_K3fwO`^f5b0~Ve4@1iESDquXYix!l+T;=0sefb0NUJHBN34S!- z5ubasRGxsG68w0Af80l-tBo=!EHvJc;HLt{fy~=7$wwsxFUCIt+s((nq_f(2$@7rx z1$e@rklz0p=6MN=|Ca&5D{z;W;jpiQg?|3Dy>-h~h>suM{Y)HYgfuH7| zDKl6(@SQhf@f`V>g@DUj-wH%T{bOHbk@{3jV+gJg8z_Ld^6TqxOx71nk1Vx z`}xJD0)DBVUqR)o1^haG6a1!Z;+ChEU}MlXY5C;V3TU)8no2Z3Ez^!uvK2!qjH>nl zQ9$YM*zdzpDyGGMpkyz@ys};`!LI)V7zAIsgEan$mo>P8(9zc&;Y%RJ+xz+5ChW@Q z&Fkm)>yajuL6O7d39QF87mmm@i5y*xoZ4OM@wtt6>XFo0cK?3?;4zJ_Dc&uwFVr8zaDG z2rh4p!#g6lTJe?xY9Nh256B|-aSrD8j8srshEs!joLj8Dy`ikUVn7>v0K-V`mjg^Q zg)GCtPz7pd;Haol32Dzi1t}p593eeWMG1*r07Kctl_9RYpA^?GXE`~t8}>G27O~mD zup+zUTSGBFUdg@>Ph^*4LK1V?hjAC(ULi_U>tz)I-BDvC^0Uz?HEd@&30R*D0jm(L zpTN^<8l%-Hb?gm}2`P0ZIO<>|xRWfWz2sMlxsWWIN-;e{F=?4p%o3L$356Ef`rywS zvgkAMD7Lueqik^+Y_SlwsD&*S{Xg46zJY;Dh_|;VBQ?by+9WtQNaxkOc?oTb(1=YS zh+5eU78c3aqSWd#oLhM0B|JyuDNuz8OBARYX$S+f)TV1CxQ+vKIQY{_0s1DoMk_ll NfIs2AMk_xp@P7rNnX>=@ diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.class index b8902ca896bf3db8557e45e2f5a2fd68a8b79bc3..c3e2f57a29ea69f7c608e436c5c20d1b9a53e608 100644 GIT binary patch literal 6752 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 literal 6582 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 diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLCursor.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLCursor.class index 3a7dbb9c0d46b7a64df338e1e22a76b5553b6381..ecce37939b5f0a5e9a05da7b518bc1e99e17364d 100644 GIT binary patch literal 3123 zcmb7GU2Ggz75?td?v8gn>s_xsZQNjLU`sY`@j5NthB!5eojBdp&QI;cF)gjfyW`z) zc4wB^*?MDW8z7V)sSms$w1-ZZGEj$%iB()<>#k^oe7>fZacO=slp*W<9c<| z7g)^Au9>fzdB=A1Q`dZJs)-9Q}%cf_`^)^!wyD0Li z@LCa2N-iB0CZW2kt4)hg70+GgvfT79xO6#UwFMs84r*adL;p4-_Q^OcW3HEbo7BW-xnr<1a-{&o-IQp=!m!`5L>s)ewF&GmR+e*e^1r* z=NqnnWrti6P#J-FdxL_?N^4bMa0h15@wXEwkev6;($zV$5kxpBAeXsU(O_i}K;67* zO}jN&G-^(!?J&cymaV4mxdfx+WD>P`x8;?r8CxbU9Yi<`(wM9o9V2*N$G70AXzK9M z((x)h9qVYRXzRF!4IST>+YKGx!D~8R#~V7XOOC7KyZD}t=TOw~eQXFk8dPGS?%5TlPKsVUJ9=A5LcH z*KNO4Wk+PoR(AJv%W}G9JJT&2ggP69`u?CrUX(rJdS%-&Ii3_^;FzJkDK0o{>Du-@ z4XRi+xKo*sjT9@@ER(G^klW=?7u$HyfW`eh-H#^~rW(}k2R**vnI*Po{{Jim_QL_b z!8k;DK{f{O3a=4-iJUADorH!#AQBn94RHq%BYp=;fwzdEN{Y9r5tnp~{{_w9U-b^+ z$9fI5peu!>q2JK&{apNX*oYbWa@B}Fu?4ldT<9C>HIiHCS^PB;WNBl+q+N(5dE+Hf z9OQM4*FTj)%19aUcd+od(PyOM)n#RQ3%&ig_j)1SVMV*F{theFWo2kBZS)%%%G`mz zh2-Lml-RuYt4;i?t9><)Be?sulXbs#vUX|j2*$ex2Ra6gf!+3QZsN87wzne|db3A) z=*=DonU1|3p#R%m@_qCzWm311{=i5Y+HxVe`DuNqcMJWCqwgcLBr|687+SP!s79h3 zEiTjbxyf_M*?#qUuNf5MXZ2rr4dSSG@k#V2?r zB4FanET=J6_Dy0rM7(JtcnpV0^%F-1qogu;16S}ksT6UX4bKtHGvPU6%7*8NtRGMC z+yMTDwNQe{IuaXQiMP5EZ+9fbTt|W)H1QQ`>BH0FCdNqVI4XXIJgFp+#~9NisaQZwkctP?aZ+kPJxi)5pe9Kra7g@> z8OgEBkBASMmy_tl6b;TGb&nzIQ!%aLl#0`0`=>Hdgz*Wci8R7kFGj+r-F<$H#J`c? zhw7O)_44f=&JunTC=w$^hWqjNUm(F=+(cBF98Mo-Kax(juOCeJw6A~e`nx<6R+uLJ zM45T9WG0z~Kt9M2mz+~FlX6~+1R0X2M}iC~ffq4Ek|*RgU*|lQB{ff#k~28^8w~yd zDf!sK!=r-5evACja3(NhGiYl}(^V$C9stlo+3mE*Kq(LdR5?pBf;kNHnIUzM-GFot MKl$tU;)$XE0C!l_(EtDd literal 3736 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 J@t*CC{{~Y9a*O}~ literal 4179 zcmb_f`*#z^75-M1w31ki?I6G}Py!{kOb}2)NK6PaU@#R1ENa)3kglz_krT&qM`j$e zWQ`A$%%ac{*0AS)IC)lF@v5%Ky29);D?As~(7o!pV_& znQl>d8ngioanEwR!)3edYG|*kO$m7{WEFV!faO@;K@DfS>TX_iZ8=Ca(*yjgd&)P_ zJ***oxLgnkG@!*mBOaiCUGh|afA?@48j=Qd#N=qBfi*DXsMSCm2{~#vuoejo>vEPO z2CJnp;hr_eY@wkgR~|R*VbitbJXj1fzZDJp>bg`fkmYG0AdzXS;7t;fNnsTyiRaq9 zXO2I6(wtHTbZpbG>wfd2V>?5tcPdDdUJw<}Ezf9Z=;|I$U@OuFda#3G7wsd$7M=(Q zMl`zyByL-=(?ABh=wV?QVHtZechS6TW~!cLXR@wq&g86$*PCD=?A7r_4G+{28+a7^ z7_}=(<;%o2+2t#-O{bVSHFi;qd%fM~xS={#Fg4K=`%1%=wcB9t1ts@RWhaa7e?TVvO(8|G^|tWEf@*s}(94=Y;a^ zzZPS?h@{{B29Du4%bGPg;xmew9gw0E2EHUkaf*&BlIb|9;USe3h4+AMi=t^~-D0&Q z9Pj9raWUmtWhaJH8af9l^Q_AvRi2or2(OYVyQzwGRiq9)nc9^=4rgSQ4Xwyw-g7Od zNVH=(OD>*LXH(^>SFs9GRm$@lSPU%Kjv?lonYStV+zuUI(Xe^R+rg@BpDwfE2zQyM z*#t&#CWgZaJdI~`Tv+7Yy-*wYn!#mSV+Q>rFTSx(BE z6sa*qw>S!z&_Oz`UXpdPWT1#6q`}a!zH9^V!e=ry7Y#g%F0PJQP9cF3$~qhZS$2y- z?<-FU!jd_b+r8Vs6fUU(WohQCW9q)xL!BwbRn-?2O7}+06ll<|_{rmFW^oiN+I~q8 zsc~K-EO`lPVOY2oCSOCges>P~?CO=Loa>F@3On4myciPr0KFUzA*2r@?Tny+8eHWoQnYKi} zTy@7qza{Vf4WE0d?UZIov;oHv?qS=kR0Pu;^-GG^39nXuA_${JJ~#L`h4^~*;G ze?#)2!QUA7k+l470<`U%>s&pMZfHn`laY?*wV%C*cryITErgB5Swzj|(46kMgZ1gw z=pAfGcih3Ibmtwk{h8+*(82GAl;yqD_$ZRthwa$Ud;W3k#uJ?N^4|e;a^G>^CN^UW zXSA+-*3?LP9a1CdFPj&oDUQNw^dLtOHIh+9X%QGh_%7B%kLuW}@lR*5Mxt_bm(qKd zqiQ*HmuKs*uh_5q`$I(QVRZSJ;R5}WzHUi>jJ9iNP0JP%0>nwcLef1IBKJv(M`P-+h;(0#c2 zna*QMYsx=R1GkwL`;?_-+C8G2=c~gvpj{#}XiSEsu%qx{ApWuxw?_Uhrz4{+qjNa-X=`+G z`c*ZJ%;J1!GCZkI-Uv>a>QwY2jNe4OxixkRk(SAQdU_5P!{5}<-ogDzy?MRX8kvW^ zgma&yG)`axpCBom#4Zeyc&Bj+XD~`AFW@XDG0bWl!8BK1#yPx!^K1c6v(7KzuXsiw zIOHQzLvR5uX(v;@fC@(;HIk&1saat8`Se^+NK1MyD5Rs*+zO9UT@kerYc|B!#n;Ch z8#k`avg4wP%YGhkgEpnMY|kP*(-IyAyrE|nGbeY*(Ja1k4UzQiPoRx*E?KvUpEj8Q ziTsW^yl|UJ{Az4teW>cdI4fRYBPQrZ5!+xbBZ{P>Uxis*VO{Y5DM;fbjzY@mI6{s8 zLQ)o$#*69OfxqXeT$W^0x~HR)J}73+;^mdREV0!%%3RvtUo+Q)@8G-CMjiNGfNB$7 zQ>aQyuLhR>$%2=G?JfaLmgzcY_ooU=?t6;`b#q{{fWX5ZbPbZrxj}Eo|2k^q;IsgCw diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont$FontState.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont$FontState.class index e568c16c190f3c95a87dbdb84afaa28734f2c9e4..e3fc77069e9e4b88c449d1d5a33eaac9b531cb21 100644 GIT binary patch literal 1996 zcmb7FO>f*(6g_Xo_GFAR4H;4>Y0^>(Ox#lQSqd$oD55B6po^B$cIQmoWP)QOkJE}x z7yJhHuw%mlBnBiT%10#@U9e!mf(1w*fsjA~3B(R@?z6{nf}4s+x$o=V^UgW%T65!{ zkFNoE1kc*A@mLd0JTBp=geN2%lklX?@RWq(4Lsezyn@+_!#Gix?k)%3x}T=2eSfg- zN0FCa3B3h5Jg(4)FI^f0>3IdUSgbCvdXT;z1`4}2qU9h7`%!ROCn{Jc`cXgS1qV7i zATRQ7?wo?L5HAZ%mk2LytS<%0S$|1@C%bXa56}5YU)K4iL6QT7=BYSJ&!m3JJZCYA zf@C4|2ZMk|$13kk0$~{>UU+3~CG@(lyzqQiFb)<#lsdK&q*}JZOlPhVXXHwYslxc| zY7%d(tSZzya~BoH$*K41i~eglU7Kl{E%c8mbZ~QvCOSNSdE_4@mzN_u$LM~}YIY|> z#mssy4hh4G0(AsqbhO>7&s)pqe1XnIU3=MQt)dE>=UEvkZZ0UH#gi?v?KAO4(hE-Y z<;7Zstw+}U%f5q2JmcUtI1a|qa2QUGnj4Qq{7jv9=!FdDNM*!Ug$?F z-sz>apqFZ+>BZsygNS?hW!U_VO#YKGBZRab$y<-4u1B)hr*s-^DBQu-o2bF!xZnK< z$~`nh&D}dh-JKc2aHotROn1s0!g`-MHB2$iq5-H+V5ncfgc5PjqLqX{Mrg#e|LQfN!!R#@VIkU(4_3PFY*T7`1lINRdLStENx;U973 zU?Fkf2k@g1vkuD12p@Ldtl!MMota<1fBXdS2!RKS@OUD_nb7(}B8r(%D%2Ngm`gR0 zxy-}#VtSs2(Yx0#qr*(;9djIOp`{0#(3y%)B20xk50A!E8EZl_&eSB)Nu~(;>O(CD<=i_@% diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.class index ebd63befeaa404ec0570061a9d22fbc3c38991d3..5cf1e673769b465c2f0a2a169f6c930cd574605e 100644 GIT binary patch literal 16166 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 Rmm1(F@3Ginl-h&9PXNWeQT_k` diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFontCache.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFontCache.class index 7dc670acab86ece4d568b5b26ca5b59016f5b881..f1f6dd3d10da47884fc69c2818b10a773570fd3b 100644 GIT binary patch literal 3023 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 diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.class index b593a1aab618886022a34e96158fa72bf7dc7d72..5c4e5c32d429fdff745d8ae24b729d9ff53e7c6a 100644 GIT binary patch literal 18996 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 diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture$Filter.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture$Filter.class index 9cbf2388d4acca61624b1a1985c5b51965b35985..7c171024d674c1bcdccddf6d0f2dea309616bd0a 100644 GIT binary patch literal 1348 zcmbtTZBNrs6n^g3(Y=)61`fxIFNkv+N(BMIEd)ZQjx>_m(X~%>$b}s+WKF9fOfJ8s?Fy+oq`N zCD*Y;J(sz<@VL>cnbZ%*l0*K%au^g!dx&7ZX7|(h)AGvp098SBn)$0%v`&)_ms%aC#%c1z7#rM%dD%J*H|1I; zG(5wqiZzCnt1Xp=Nj%qZ7dZ{17?WT3G(-{85J!w5`gc&WChADdZVA#fmd*^+yL-^! zHJ5bj|0#oEd2j~aPm&u*e7+qQbr4fx@LnHAgV|W1UvZdzVr3&K>j3DaQpj^dR!GN$ zY@S3QgmK&gLz1i+I^`4Yf_;JS4E~Q~F-*{V$cvQ;KZ&V6ei=T`8ySU?{ffXD6nVjS z;lea|v>pt%amR~OhY2MqU%^iz2$7weI>k_S`ZLr|9!8QzDGF4H{4FBbhs>3rn=<2! zSCIU=PbK*=OI{xyAczzm_63#^ATO}=9ZEGG^v6;-Md$=!&yFau6!UB?@Ph#UF6~@Z o=|U@=fJqg-(t9fQsCgCIjq*8H8X3a)kfjJUjnE3_F|v{T1M*fqQ~&?~ literal 1368 zcmbVM?@!ZE6g`h_>ozKE6Nlr6q9SeusURR^3xSZS!vcvNGZVj*@th@HXSxpLzfy>S zXe562k22m@hBQV$xFy}|z3<$6&%N)w{`mRj9KbA=Wb`mB>~XDOdfq$BY&A^B(Y!-j zbGfs}UG8f3;eOrL^jGW8^fLe8wOu~`)UrM9$_O#^?VAUtW}8l3D?054gS=T>eOWZh z42ybqdGibry(H35wz^$0?KWp%C5GPO=Jv*TWmVrU8VpN2-4}=!YPRKA-ZF!f%~cpe zYt20#MK}(Iq=FQ#6N^FzGMLq`+B7`Za_ad~DOZUR_=bWoB2mb~xT!!!M7#|th@+RG zU$-2-*>3D|w`}g()JRHi)=cWkwS?_EzYTk=KCWCHAr%6cc0h1d?_%aOBcohIQtc>-G@E&@=^8c*HOtOuS~BtyVt3=69v5&V*J;XK|z1c59sUOb3$; zYJ6H?scFNiJEjml!+Id4h%a=@e3>dMCCA~ePnEZ1JYmrO^R|#aFYe*W4Czgx`y5)y z2rUA%k_^d{5Q3p)NQhA&$X0NT@O@;xA+-3-eFdwg`laLqPLVjlfN!Tm$qDA$gW+!k zkd856R71xYG)|EDL~%VBrvE;__BPe3U<_r9_&Z{kE>Wk_bHaqkuc(tFrx;a7KV$6A z3{_(Mnpp1m8PXI_c--~-5O4RW6N#R2-0x&vApWB7^f5Bk7m|8jEeN6;((oB3rat;S z1j7j7LC+<#7>VX#Cx=RP#BMyr)H6(f2m5!Ngc(2QEFSyo9OgwN#nU$wiz}I5mmWp* diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture$Format.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture$Format.class index d3771887ec80cbd083010b4bce67ee0fe8be8c8b..6104138ded319797b6126cef5310ebc4a1ceba6f 100644 GIT binary patch literal 2495 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 b{;GaIz~8tQQ|3zY`S8?I4t)ZDKehD#@`~?Y diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.class index 6759d2299777ff309a8e73e8ff6c0a2804b66090..93dd95a95b6710a65fde5ba833f098e170cc920c 100644 GIT binary patch literal 2662 zcmbtWZBr9h6n-vASO}{?6yFLhwy{D21X{HetQsOLKZi>akCL@``zE* zAMiszQKkbkb*BB^-_+^!xtkC$6FO)!bI#p+_uS{6m*<|%U;q662Y|2ea}eFQ(~1Ga zgZKm!K|Uqq+FiLe*@_-a1!*@er}v~vN_AhV@1;sfH6vA8K}NxB5S@6?f;lZ0Gx8w8G}a(b+w zxtwXGf@WDUcgu`9x|P!%-HDl7n;T|qHa&e;&l24k7YG>gT!F5JjtB%Nx3hZDHEgS- z;EBMQoSrpu`hvdgmK}Y{c6geCr;MrcEa3E=#EI1M{pnN{C0yA$-v6;11$^rT1~K~a z0Ifx9;~<)60)q{a%C2FSj^yvaae-6wu9kg1qZPe+C?G_;R(9=#ZQ9O3X2$ydM}*Bx zyvK+KRnAx>&BQBLpD3@dvy{n(9@mw=Vb)2u<~0wbMuR$R8kAgzWfu@ha$?>tJ6V0o zkaTQ6q|=b(vWi|@R-s{7#SMI;VhvdpQRGyN;A<5+)>UjEufmWfn^HZO%9N@gl_iyp zVS%gO?JzZKBerOj%EhAXxOy&A)E!Myvc^q;^M{taM2597Q8r9cT)I=_YkFBJL$77K zy?M>bnR;%lSH%m^<^@VBT$H8tOBGw#R`E)zQT#|Ue9)y52sg5?=MFDxBeS}K9VRzC z!pm1{7MWV;3Vsr}aRR6YwHJss+F0*umF8>~iA*Xp$9A@%yR!%Pg@GKy>tk@(bygeq zh~qXizBb2MGacdiEyK;`c^_Ge@X>}CWplC-+NPd$|I@z3wJWFsXIYtgU?O%k@_;V3 z`jDP;TwUZ>?IfH(N>p6t7qy$8bHLBGRjhCYUvfr!Tty#|`uQvoBa|qHsEH~%xaQ-V*U?=xy+uo8AHGy1x(EM00yELy z&^+)Kf#}XIlz~084E;jeNs6E-6p1=W8KGRKd`tO`65mBDHw7te6qRy{a+=b<^9~&= z@6frjk5K5$9?lZEYY*r4asE$k^?6~9;WVFzdB_Mh!KrUfFs*7lXQ*vod~LbBc$N^u&?st3pVjec4*4} zPqQnLJzRK$5QmFzpvV|xT<=YTJ2l@w^-`0j&M=BugfPdlEYSZ&mUG$jPptq~{gb`~ z;0yVJTpneJm6|WJI)1)ti$uEzy_#IAFZ?PA@WexmR7`6Tw_%KVlJ2+RCbK2U)8=Kt kcZ3X0B$lMoZDtm@#H{s@faqx9pTHk5c;_PjFLulEUycW;Qvd(} literal 3003 zcmbVO>sJ$35dU2gvJlpSQR|~>(Z&i15VT@J6ip(JXduW##7A*S7Fb+%)6K?5-=+5b z7x)j@bNY$W9`Mv2`>h}PH}$mr-34Hz5U#YP=o)6>IZc6{ z@c2|}A~`fO5l^K1xheeoIbog?_BMsL%!dbThe`r9H&OzDvxa53eFFPh(u>+%EoRuU zl$9^Kb*< z?o4R2rY;al+gZ)LsyT+_H-vt|QV@uxD@9xtq+WqqL;5MOr=sI@GpA>boIau7cZ-g` z8MV{$G6$unE)AwPc5VRH+xn^->#+|96zmr`{Sq-&I9kOUILLsLnRI4Mp!-!F2}0no ziZ{{B>}W;TPTHpJY$9`}<&`50GQy)O-a=SFo!8w_Ykt#etcum`wY-V4tf045?7?w? zo0W4_ZEI!st7*%uw5o_8Do~%_a=5)By49>mNZVD^qJuY}rS(QCh)$eTa6%wjDcM!* zsCWmb1QgrJ8J1=W_*z<1(!;v>m^DLt#=oRl_} zr8DIn=T%&gYre6;gw#!_NJ`#M-ZR;+V!#t52FEy9QHL%9zq7#7&OrOY;BSo4XZVY0K;A;U$sqEc}*TejQ0pjkOn&z)%w zB8@Aub+E$sY&0Y9ypjoaBB?Q~l>rGBsemmnKtNXh`zjo;n+NV{W>M#)lXs$Gbk)wUr^N?W*^E6;LSdkMeof%l_l=YK9|KERq%ztfvuE|*yF|Q!hoThxqip7 z`NjtLu8rG8C#w$_@@;C|dLcXHJ~pzHW$8}R)CvWi58t!YNGV;~Y;$Bv&kt3e~bK~LJoeeGx>|9VLaI}svB zeeA++T4B<-M(=spPHM|jA4XTP_c7`s>o}B-MAvX+9mj^Fzo4b0eLPtex3hFHgs z)a@q;l0s@FwUbVex=1~wbENnxx>i=vP3k4}k>aF_q`{S^xHSC~>FLnOI!0-Bd<|3U zxbZvp`MgN_yl*E@I6*H@(cdl{!f8HBJvd4lMK30J&NZCJO~iT2lDtm+Sim4m7KV(z zxfEA9`iIm!=*4c!j!tZDQEMlH>R$*c=0gJffo!3Bomb|)X@bK_8)$!a8uE}cf5i=QX zVHMW&AMmeCJwg82Z^6rvRk%!llal!X{wZ>I$@w>#`*JC;$$dbsc9Z#tOnK!KGGz;& zk*O=GP5%sQgmeaMiN+xX5C4&M&ryDsaan%S<(bEBeF)B%+*yOK@HNK}XZ!FCzPqrW&BiCk Fe*xmz-aP;S diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/RenderScale.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/RenderScale.class index 5493de4f02f8480c2daac11fa3a51054e2fd8a8b..0e6ad2cd610387cd6ee5a8cb92892752c24c5332 100644 GIT binary patch literal 649 zcmb7B$xg#C5Pfdarb!HxeP0Tf!hx_HL0piEkjf%J+}*~csnP_cDewjS4{)I3zz6VA zh;f=0u0-WVv2i%4`UVqfK1QBRtFhheAYN~bLn%0#Cv z!q7<`11FZDD`Ocu!DGt{oU1gwR+A4H3^&S57_Q7v@vsqOW~}R|8#iRtSEEaRq}wg= zAUG`8239y$VRIB=a;%}uu@0MI`+sJrzv}4(BJ`Y#dP_DEhUqBwGT+g?49WgUZFiS} zd%xPN>_0ISy&(OeJG#e8wOUm-XcHy6?=w)Q2QcVW7))i8kWQG~Q{cU=&BVqRZNP5 r>1#?&pWZ|MS7DI}&@hcg6)`zvFQ-PxYyJ(|FTL;8pu;JW`~AKY4g|P@xF8iFm4^UvcN-H@r3p$?;0yR4;6TNJ58$H^ z>$Id?v1IRhvoo0;e|>*^0@%Zbg(1SWtDKfhk~?3vTQUrt{T}31sLw=k=y)Bm}dqzY^$#P&jA=e&{EMgj{9whF}~;t}2315-^b` zjMn^6opoAu6<^D`#*Nn^Cb*HYukZb0{vf5XkwaNv1O=vIp>4uW?SHcO36>kB8f{Er z#=j1FM=UNMD;em;hAZY*LV1MjDbfQc?9 wUtvH0?k?sAR3m9qiBG`$NyC(bWS8^-a>m_?GV>4};_D^}z z$DlmP<};3$HG5iVkB|c^7cb-r#qp;MYA8V~yi8=}W=t!arzb*&NU)^+R`EA8xUAgV zVGByn{M)Z(2SGZbRxligLPY;Qy#y`d0Gvo?;6yqGiV|G`bW`<7q64V#QjF?>ZolGp zMQUKXB+~AC$a#G!r zl|6X&;O!!GWdfw`%m-)+-e6qZt)by1bWUp@yh+`MPyfG^N*d`pRzuT1n#GthdhBiY spb;bv)^|LbE(I}@m@ehaBq2$No{VwPG_U!)g=j&eqEZ}Pc5rJG?721~X zH*Krawj8J6_gV!{Id$bJuh8l}Z?p>4+G^M9xSoNSz``jUw$uy1>#1c=Su0jY8Au3Z z2KsHd-Hr;g2pE3oFEC#j=oQkd)E=x?`YDS7LrvGO?z{dI0a5<@^D9ETZ8g-U`c`0O zaNx2wWURz3+p+!I0^ei?JNyTea_|gx3-e^R1!AjiU8OLJ3kKd1D7l$v-NlXXN=0~2wWZ9hkxsgjTbLC zeh`TF!cr2=fHZd`)FxNRS@RvmoWwj9xVjHD9?fr?b z#3#5RaK6(E6};@&?W%A2?8(|&6PYUg7duTPTaXoQ9AeYaul_w|>mx?OKim29ohk(1tD zdv1MiVTwtj9C5^0Gd0h9aa1cln5p+*rrJ42IL_cKt%Eu1;G&s3#Dtkn9AeT;8;7`Tjtw2+%FjWRS-vkK!S@_4P`6{ei6^m$S;{Ym>-dl> z&%)UF2pN7cOTbM8C`(qFOCBasG(b6`Sb*|G@c`*6be6n6xAfOYSE6gYifjEkextRH zv113I|xcL^xR==lgQ~6>i4x6PEPq5$^m5Q}Q{+>N(>WW%Hk=G}++z z;s~3^*w$r7SspMQB)>s2H<6{J7g5y0#vLlQhTC|GyFvL=A*DCv@6cN7fi#1nBeVny Oj%4TfcZWEFXMX`HdZ-5g diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TextureArea.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TextureArea.class index 7a093c6afdc0075c0c5025066bdf96e829e5fbf1..67ce662d9752d330399b350c6e2f13544ee26086 100644 GIT binary patch literal 4723 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
  • {@link #setCursor() } * * - * This is the easiest method to use this GUI + * This is the easiest method to use this GUI. + * + *

    When not using this method care must be taken to invoke the methods + * in the right order. See the javadoc of the individual methods for details.

    */ public void update() { setSize(); @@ -579,6 +583,10 @@ public void resyncTimerAfterPause() { * Updates the current time returned by {@code getCurrentTime} by calling * {@link Renderer#getTimeMillis() } and computes the delta time since the last update. * + *

    This must be called exactly once per frame and befiore processing + * input events or calling {@link #updateTimers() }. See {@link #update() } + * for the sequence in which the methods of this class should be called.

    + * * @see #getCurrentTime() * @see #getTimeMillis() */ @@ -590,7 +598,9 @@ public void updateTime() { /** * Updates all active timers with the delta time computed by {@code updateTime}. - * This method must be called exactly once after a call to {@code updateTime}. + * + *

    This method must be called exactly once after a call to {@code updateTime}.

    + * * @see #updateTime() */ public void updateTimers() { @@ -656,19 +666,42 @@ public void draw() { /** * Sets the cursor from the widget under the mouse * + *

    If the widget is disabled or did not define a cursor then + * it's parent widget is tried. If no cursor was found the default + * OS cursor will be displayed.

    + * * @see Renderer#setCursor(de.matthiasmann.twl.renderer.MouseCursor) + * @see Widget#getMouseCursor(de.matthiasmann.twl.Event) */ public void setCursor() { + event.type = Event.Type.MOUSE_MOVED; Widget widget = getWidgetUnderMouse(); - if(widget != null && widget.isEnabled()) { - MouseCursor cursor = widget.getMouseCursor(); - renderer.setCursor(cursor); + MouseCursor cursor = null; + while(widget != null) { + if(widget.isEnabled()) { + cursor = widget.getMouseCursor(event); + if(cursor != null) { + break; + } + } + widget = widget.getParent(); } + renderer.setCursor(cursor); } /** - * Polls input by calling {@link Input#pollInput(de.matthiasmann.twl.GUI) } if an input source was specified. - * If {@code pollInput} returned false then {@link #clearKeyboardState() } and {@link #clearMouseState() } are called. + * Polls input by calling {@link Input#pollInput(de.matthiasmann.twl.GUI) } + * if an input source was specified, otherwise it does nothing. + * + *

    If {@code pollInput} returned false then {@link #clearKeyboardState() } + * and {@link #clearMouseState() } are called.

    + * + *

    If you don't want to use polled input you can easily use a push model + * for handling input. Just call the following methods:

      + *
    • {@link #handleKey(int, char, boolean) } for every keyboard event + *
    • {@link #handleMouse(int, int, int, boolean) } for every mouse event (buttons or move) + *
    • {@link #handleMouseWheel(int) } for any mouse wheel event + *
    These metods (including this one) needs to be called after {@link #updateTime() } */ public void handleInput() { if(input != null && !input.pollInput(this)) { @@ -918,10 +951,10 @@ public final boolean handleKey(int keyCode, char keyChar, boolean pressed) { if(pressed) { keyRepeatDelay = KEYREPEAT_INITIAL_DELAY; - return sendEvent(Event.Type.KEY_PRESSED); + return sendKeyEvent(Event.Type.KEY_PRESSED); } else { keyRepeatDelay = NO_REPEAT; - return sendEvent(Event.Type.KEY_RELEASED); + return sendKeyEvent(Event.Type.KEY_RELEASED); } } else { keyRepeatDelay = NO_REPEAT; @@ -956,7 +989,7 @@ public final void handleKeyRepeat() { keyEventTime = curTime; keyRepeatDelay = KEYREPEAT_INTERVAL_DELAY; event.keyRepeated = true; - sendEvent(Event.Type.KEY_PRESSED); // refire last key event + sendKeyEvent(Event.Type.KEY_PRESSED); // refire last key event } } } @@ -1014,7 +1047,7 @@ private Widget sendMouseEvent(Event.Type type, Widget target) { if(target != null) { if(target.isEnabled() || !isMouseAction(event)) { - target.handleEvent(event); + target.handleEvent(target.translateMouseEvent(event)); } return target; } else { @@ -1033,12 +1066,32 @@ private Widget sendMouseEvent(Event.Type type, Widget target) { } } - private boolean sendEvent(Event.Type type) { - assert !type.isMouseEvent; + private static final int FOCUS_KEY = Event.KEY_TAB; + + boolean isFocusKey() { + return event.keyCode == FOCUS_KEY && + ((event.modifier & (Event.MODIFIER_CTRL|Event.MODIFIER_META|Event.MODIFIER_ALT)) == 0); + } + + void setFocusKeyWidget(Widget widget) { + if(focusKeyWidget == null && isFocusKey()) { + focusKeyWidget = widget; + } + } + + private boolean sendKeyEvent(Event.Type type) { + assert type.isKeyEvent; popupEventOccured = false; + focusKeyWidget = null; event.type = type; event.dragEvent = false; - return getTopPane().handleEvent(event); + boolean handled = getTopPane().handleEvent(event); + if(!handled && focusKeyWidget != null) { + focusKeyWidget.handleFocusKeyEvent(event); + handled = true; + } + focusKeyWidget = null; // allow GC + return handled; } private void sendPopupEvent(Event.Type type) { @@ -1089,6 +1142,7 @@ void closePopup(PopupWindow popup) { popupEventOccured = true; closeInfoFromWidget(popup); requestKeyboardFocus(getTopPane()); + resendLastMouseMove(); } boolean hasOpenPopups(Widget owner) { diff --git a/twl/src/de/matthiasmann/twl/MenuAction.java b/twl/src/de/matthiasmann/twl/MenuAction.java index d4afb33..40d3d87 100644 --- a/twl/src/de/matthiasmann/twl/MenuAction.java +++ b/twl/src/de/matthiasmann/twl/MenuAction.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -44,6 +44,14 @@ public MenuAction(Runnable cb) { this.cb = cb; } + /** + * Creates a menu action which displays the given name and invokes the + * specified callback when activated. + * + * @param name the name/text of the menu action + * @param cb the callback to invoke + * @see #setCallback(java.lang.Runnable) + */ public MenuAction(String name, Runnable cb) { super(name); this.cb = cb; @@ -53,6 +61,13 @@ public Runnable getCallback() { return cb; } + /** + * Sets the callback to invoke when the menu action is triggered. + * + *

    this callback is invoked after the menu is closed.

    + * + * @param cb the callback (can be null) + */ public void setCallback(Runnable cb) { this.cb = cb; } @@ -62,10 +77,11 @@ protected Widget createMenuWidget(MenuManager mm, int level) { Button b = new MenuBtn(); setWidgetTheme(b, "button"); + b.addCallback(mm.getCloseCallback()); + if(cb != null) { b.addCallback(cb); } - b.addCallback(mm.getCloseCallback()); return b; } diff --git a/twl/src/de/matthiasmann/twl/MenuManager.java b/twl/src/de/matthiasmann/twl/MenuManager.java index 084afe6..ffaa97b 100644 --- a/twl/src/de/matthiasmann/twl/MenuManager.java +++ b/twl/src/de/matthiasmann/twl/MenuManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -221,7 +221,7 @@ Widget getWidgetUnderMouse() { } void popupTimer() { - if(lastMouseOverWidget instanceof Menu.SubMenuBtn) { + if((lastMouseOverWidget instanceof Menu.SubMenuBtn) && lastMouseOverWidget.isEnabled()) { ((Menu.SubMenuBtn)lastMouseOverWidget).run(); } else if(lastMouseOverWidget != this) { int level = 0; diff --git a/twl/src/de/matthiasmann/twl/PopupWindow.java b/twl/src/de/matthiasmann/twl/PopupWindow.java index fc99e40..d75982f 100644 --- a/twl/src/de/matthiasmann/twl/PopupWindow.java +++ b/twl/src/de/matthiasmann/twl/PopupWindow.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -328,4 +328,12 @@ protected void mouseClickedOutside(Event evt) { requestPopupClose(); } } + + @Override + void setParent(Widget parent) { + if(!(parent instanceof GUI)) { + throw new IllegalArgumentException("PopupWindow can't be used as child widget"); + } + super.setParent(parent); + } } diff --git a/twl/src/de/matthiasmann/twl/PropertySheet.java b/twl/src/de/matthiasmann/twl/PropertySheet.java index 2a675e8..12d8ad9 100644 --- a/twl/src/de/matthiasmann/twl/PropertySheet.java +++ b/twl/src/de/matthiasmann/twl/PropertySheet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -54,6 +54,22 @@ public interface PropertyEditor { public void valueChanged(); public void preDestroy(); public void setSelected(boolean selected); + + /** + * Can be used to position the widget in a cell. + *

    If this method returns false, the table will position the widget itself.

    + * + *

    This method is responsible to call setPosition and setSize on the + * widget or return false.

    + * + * @param x the left edge of the cell + * @param y the top edge of the cell + * @param width the width of the cell + * @param height the height of the cell + * + * @return true if the position was changed by this method. + */ + public boolean positionWidget(int x, int y, int width, int height); } public interface PropertyEditorFactory { @@ -69,6 +85,7 @@ public PropertySheet() { this(new Model()); } + @SuppressWarnings("OverridableMethodCallInConstructor") private PropertySheet(Model model) { super(model); this.rootList = new SimplePropertyList(""); @@ -162,6 +179,7 @@ interface PSTreeTableNode extends TreeTableNode { static abstract class PropertyNode extends AbstractTreeTableNode implements Runnable, PSTreeTableNode { protected final Property property; + @SuppressWarnings("LeakingThisInConstructor") public PropertyNode(TreeTableNode parent, Property property) { super(parent); this.property = property; @@ -256,6 +274,7 @@ class PropertyListCellRenderer extends TreeNodeCellRenderer { public PropertyListCellRenderer() { bgRenderer = new Widget(); textRenderer = new Label(bgRenderer.getAnimationState()); + textRenderer.setAutoSize(false); bgRenderer.add(textRenderer); bgRenderer.setTheme(getTheme()); } @@ -279,7 +298,7 @@ public void setCellData(int row, int column, Object data, NodeState nodeState) { textRenderer.setText((String)data); } @Override - protected void setSubRenderer(Object colData) { + protected void setSubRenderer(int row, int column, Object colData) { } } @@ -308,8 +327,10 @@ public Widget updateWidget(Widget existingWidget) { return editor.getWidget(); } public void positionWidget(Widget widget, int x, int y, int w, int h) { - widget.setPosition(x, y); - widget.setSize(w, h); + if(!editor.positionWidget(x, y, w, h)) { + widget.setPosition(x, y); + widget.setSize(w, h); + } } } @@ -337,6 +358,7 @@ static class StringEditor implements PropertyEditor, EditField.Callback { private final EditField editField; private final Property property; + @SuppressWarnings("LeakingThisInConstructor") public StringEditor(Property property) { this.property = property; this.editField = new EditField(); @@ -371,6 +393,9 @@ private void resetValue() { editField.setErrorMessage(null); editField.setReadOnly(property.isReadOnly()); } + public boolean positionWidget(int x, int y, int width, int height) { + return false; + } } static class StringEditorFactory implements PropertyEditorFactory { public PropertyEditor createEditor(Property property) { @@ -383,6 +408,7 @@ public static class ComboBoxEditor implements PropertyEditor, Runnable { protected final Property property; protected final ListModel model; + @SuppressWarnings({"LeakingThisInConstructor", "OverridableMethodCallInConstructor"}) public ComboBoxEditor(Property property, ListModel model) { this.property = property; this.comboBox = new ComboBox(model); @@ -422,6 +448,9 @@ protected int findEntry(T value) { } return -1; } + public boolean positionWidget(int x, int y, int width, int height) { + return false; + } } public static class ComboBoxEditorFactory implements PropertyEditorFactory { private final ModelForwarder modelForwarder; @@ -439,6 +468,7 @@ public PropertyEditor createEditor(Property property) { } class ModelForwarder extends AbstractListModel implements ListModel.ChangeListener { private ListModel model; + @SuppressWarnings("OverridableMethodCallInConstructor") public ModelForwarder(ListModel model) { setModel(model); } diff --git a/twl/src/de/matthiasmann/twl/ResizableFrame.java b/twl/src/de/matthiasmann/twl/ResizableFrame.java index 2225145..f8d792b 100644 --- a/twl/src/de/matthiasmann/twl/ResizableFrame.java +++ b/twl/src/de/matthiasmann/twl/ResizableFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -228,11 +228,7 @@ public void setHardVisible(boolean visible) { protected void applyThemeResizableFrame(ThemeInfo themeInfo) { for(DragMode m : DragMode.values()) { - if(m.cursorName != null) { - cursors[m.ordinal()] = themeInfo.getMouseCursor(m.cursorName); - } else { - cursors[m.ordinal()] = null; - } + cursors[m.ordinal()] = themeInfo.getMouseCursor(m.cursorName); } titleAreaTop = themeInfo.getParameter("titleAreaTop", 0); titleAreaLeft = themeInfo.getParameter("titleAreaLeft", 0); @@ -275,7 +271,7 @@ protected void updateTintAnimation() { protected void fadeTo(Color color, int duration) { //System.out.println("Start fade to " + color + " over " + duration + " ms"); allocateTint().fadeTo(color, duration); - if(!super.isVisible() && color.getA() != 0) { + if(!super.isVisible() && color.getAlpha() != 0) { setHardVisible(true); } } @@ -437,6 +433,42 @@ public int getMinHeight() { return minHeight; } + @Override + public int getMaxWidth() { + int maxWidth = super.getMaxWidth(); + for(int i=0,n=getNumChildren() ; i 0) { + aMaxWidth += getBorderHorizontal(); + if(maxWidth == 0 || aMaxWidth < maxWidth) { + maxWidth = aMaxWidth; + } + } + } + } + return maxWidth; + } + + @Override + public int getMaxHeight() { + int maxHeight = super.getMaxHeight(); + for(int i=0,n=getNumChildren() ; i 0) { + aMaxHeight += getBorderVertical(); + if(maxHeight == 0 || aMaxHeight < maxHeight) { + maxHeight = aMaxHeight; + } + } + } + } + return maxHeight; + } + @Override public int getPreferredInnerWidth() { int prefWidth = 0; @@ -502,10 +534,6 @@ protected boolean handleEvent(Event evt) { return true; } - DragMode cursorMode = getDragMode(evt.getMouseX(), evt.getMouseY()); - MouseCursor cursor = cursors[cursorMode.ordinal()]; - setMouseCursor(cursor); - if(!isMouseExit && resizeHandle != null && resizeHandle.isVisible()) { resizeHandle.getAnimationState().setAnimationState( TextWidget.STATE_HOVER, resizeHandle.isMouseInside(evt)); @@ -515,7 +543,6 @@ protected boolean handleEvent(Event evt) { if(evt.getType() == Event.Type.MOUSE_BTNDOWN && evt.getMouseButton() == Event.MOUSE_LBUTTON && handleMouseDown(evt)) { - setMouseCursor(cursors[dragMode.ordinal()]); return true; } } @@ -527,6 +554,19 @@ protected boolean handleEvent(Event evt) { return evt.isMouseEvent(); } + @Override + public MouseCursor getMouseCursor(Event evt) { + DragMode cursorMode = dragMode; + if(cursorMode == DragMode.NONE) { + cursorMode = getDragMode(evt.getMouseX(), evt.getMouseY()); + if(cursorMode == DragMode.NONE) { + return getMouseCursor(); + } + } + + return cursors[cursorMode.ordinal()]; + } + private DragMode getDragMode(int mx, int my) { boolean left = mx < getInnerX(); boolean right = mx >= getInnerRight(); @@ -681,7 +721,7 @@ private void handleMouseDrag(Event evt) { case POSITION: if(getParent() != null) { int minY = getParent().getInnerY(); - int maxY = getParent().getInnerHeight(); + int maxY = getParent().getInnerBottom(); int height = dragInitialBottom - dragInitialTop; top = Math.max(minY, Math.min(maxY - height, top + dy)); bottom = Math.min(maxY, Math.max(minY + height, bottom + dy)); diff --git a/twl/src/de/matthiasmann/twl/TabbedPane.java b/twl/src/de/matthiasmann/twl/TabbedPane.java index 7aaae1a..fc1de4b 100644 --- a/twl/src/de/matthiasmann/twl/TabbedPane.java +++ b/twl/src/de/matthiasmann/twl/TabbedPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -92,6 +92,7 @@ public TabbedPane() { addActionMapping("nextTab", "cycleTabs", +1); addActionMapping("prevTab", "cycleTabs", -1); + setCanAcceptKeyboardFocus(false); } public TabPosition getTabPosition() { @@ -198,7 +199,7 @@ public void setActiveTab(Tab tab) { } } - if(tab.pane != null) { + if(tab != null && tab.pane != null) { tab.pane.requestKeyboardFocus(); } } @@ -224,6 +225,21 @@ public void removeAllTabs() { tabs.clear(); activeTab = null; } + + public int getNumTabs() { + return tabs.size(); + } + + public Tab getTab(int index) { + return tabs.get(index); + } + + public int getActiveTabIndex() { + if(tabs.isEmpty()) { + return -1; + } + return tabs.indexOf(activeTab); + } public void cycleTabs(int direction) { if(!tabs.isEmpty()) { @@ -444,6 +460,7 @@ public class Tab extends HasCallback implements BooleanModel { final TabButton button; Widget pane; Runnable closeCallback; + Object userValue; Tab() { button = new TabButton(this); @@ -480,6 +497,18 @@ public Tab setTitle(String title) { button.setText(title); return this; } + + public String getTitle() { + return button.getText(); + } + + public Object getUserValue() { + return userValue; + } + + public void setUserValue(Object userValue) { + this.userValue = userValue; + } /** * Sets the user theme for the tab button. If no user theme is set @@ -526,6 +555,7 @@ private static class TabButton extends ToggleButton { TabButton(BooleanModel model) { super(model); + setCanAcceptKeyboardFocus(false); closeButtonAlignment = Alignment.RIGHT; } diff --git a/twl/src/de/matthiasmann/twl/TableBase.java b/twl/src/de/matthiasmann/twl/TableBase.java index 1ad5474..086b5f4 100644 --- a/twl/src/de/matthiasmann/twl/TableBase.java +++ b/twl/src/de/matthiasmann/twl/TableBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -207,6 +207,7 @@ public interface DragListener { protected SizeSequence rowModel; protected boolean hasCellWidgetCreators; protected ColumnHeader[] columnHeaders; + protected CellRenderer[] columnDefaultCellRenderer; protected TableSelectionManager selectionManager; protected KeyboardSearchHandler keyboardSearchHandler; protected DragListener dragListener; @@ -258,6 +259,7 @@ protected TableBase() { this.removeCellWidgetsFunction = new RemoveCellWidgets(); this.insertCellWidgetsFunction = new InsertCellWidgets(); this.columnModel = new ColumnSizeSequence(); + this.columnDefaultCellRenderer = new CellRenderer[8]; this.cellWidgetContainer = new CellWidgetContainer(); super.insertChild(cellWidgetContainer, 0); @@ -497,11 +499,20 @@ public int getMinHeight() { @Override public int getPreferredInnerWidth() { + if(getInnerWidth() == 0) { + return columnModel.computePreferredWidth(); + } + if(updateAllColumnWidth) { + updateAllColumnWidth(); + } return (numColumns > 0) ? getColumnEndPosition(numColumns-1) : 0; } @Override public int getPreferredInnerHeight() { + if(autoSizeAllRows) { + autoSizeAllRows(); + } return columnHeaderHeight + 1 + // +1 for drop marker ((numRows > 0) ? getRowEndPosition(numRows-1) : 0); } @@ -925,19 +936,60 @@ protected boolean isCellSelected(int row, int column) { return false; } - protected CellRenderer getCellRenderer(Object data) { + /** + * Sets the default cell renderer for the specified column + * The column numbers are not affected by model changes. + * + * @param column the column, must eb >= 0 + * @param cellRenderer the CellRenderer to use or null to restore the global default + */ + public void setColumnDefaultCellRenderer(int column, CellRenderer cellRenderer) { + if(column >= columnDefaultCellRenderer.length) { + CellRenderer[] tmp = new CellRenderer[Math.max(column+1, numColumns)]; + System.arraycopy(columnDefaultCellRenderer, 0, tmp, 0, columnDefaultCellRenderer.length); + columnDefaultCellRenderer = tmp; + } + + columnDefaultCellRenderer[column] = cellRenderer; + } + + /** + * Returns the default cell renderer for the specified column + * @param column the column, must eb >= 0 + * @return the previously set CellRenderer or null if non was set + */ + public CellRenderer getColumnDefaultCellRenderer(int column) { + if(column < columnDefaultCellRenderer.length) { + return columnDefaultCellRenderer[column]; + } + return null; + } + + protected CellRenderer getCellRendererNoDefault(Object data) { Class dataClass = data.getClass(); - CellRenderer cellRenderer = cellRenderers.get(dataClass); + return cellRenderers.get(dataClass); + } + + protected CellRenderer getDefaultCellRenderer(int col) { + CellRenderer cellRenderer = getColumnDefaultCellRenderer(col); if(cellRenderer == null) { cellRenderer = stringCellRenderer; } return cellRenderer; } + + protected CellRenderer getCellRenderer(Object data, int col) { + CellRenderer cellRenderer = getCellRendererNoDefault(data); + if(cellRenderer == null) { + cellRenderer = getDefaultCellRenderer(col); + } + return cellRenderer; + } protected CellRenderer getCellRenderer(int row, int col, TreeTableNode node) { final Object data = getCellData(row, col, node); if(data != null) { - CellRenderer cellRenderer = getCellRenderer(data); + CellRenderer cellRenderer = getCellRenderer(data, col); cellRenderer.setCellData(row, col, data); return cellRenderer; } @@ -1378,8 +1430,10 @@ protected void columnHeaderClicked(int column) { } protected void updateAllColumnWidth() { - columnModel.initializeAll(numColumns); - updateAllColumnWidth = false; + if(getInnerWidth() > 0) { + columnModel.initializeAll(numColumns); + updateAllColumnWidth = false; + } } protected void updateAll() { @@ -1409,7 +1463,7 @@ protected void modelAllChanged() { updateColumnHeader(i); } updateColumnHeaderNumbers(); - + if(selectionManager != null) { selectionManager.modelChanged(); } @@ -1601,14 +1655,20 @@ protected void initializeSizes(int index, int count) { protected class ColumnSizeSequence extends SizeSequence { @Override protected void initializeSizes(int index, int count) { - if(isFixedWidthMode()) { - computeColumnHeaderLayout(); - for(int i=0 ; iThis callback is fired before {@link Callback#handleLinkClicked(java.lang.String) }

    + * + *

    This callback should not modify the model - if this feature is required use + * {@link GUI#invokeLater(java.lang.Runnable) }.

    + * + * @param evt the mouse event + * @param element the element under the mouse + * @see Event.Type#MOUSE_BTNDOWN + * @see Event.Type#MOUSE_BTNUP + * @see Event.Type#MOUSE_CLICKED + */ + public void handleMouseButton(Event evt, TextAreaModel.Element element); + } public static final StateKey STATE_HOVER = StateKey.get("hover"); @@ -101,10 +127,12 @@ public interface Callback { private final LClip layoutRoot; private final ArrayList allBGImages; - private final AnimationState elementsAnimationState; + private final RenderInfo renderInfo; private boolean inLayoutCode; private boolean forceRelayout; private Dimension preferredInnerSize; + private FontMapper fontMapper; + private FontMapperCacheEntry[] fontMapperCache; private int lastMouseX; private int lastMouseY; @@ -113,7 +141,6 @@ public interface Callback { private int dragStartX; private int dragStartY; private LElement curLElementUnderMouse; - private long hoverUpdateTime; public TextArea() { this.widgets = new HashMap(); @@ -122,15 +149,7 @@ public TextArea() { this.imageResolvers = new ArrayList(); this.layoutRoot = new LClip(null); this.allBGImages = new ArrayList(); - this.elementsAnimationState = new AnimationState(getAnimationState()) { - @Override - public int getAnimationTime(StateKey stateKey) { - if(stateKey == STATE_HOVER) { - return getHoverAnimationTime(); - } - return super.getAnimationTime(stateKey); - } - }; + this.renderInfo = new RenderInfo(getAnimationState()); this.modelCB = new Runnable() { public void run() { @@ -310,7 +329,8 @@ protected void applyThemeTextArea(ThemeInfo themeInfo) { @Override protected void afterAddToGUI(GUI gui) { super.afterAddToGUI(gui); - hoverUpdateTime = getTime(); + renderInfo.asNormal.setGUI(gui); + renderInfo.asHover.setGUI(gui); } @Override @@ -332,7 +352,11 @@ private void computePreferredInnerSize() { int prefWidth = -1; int prefHeight = -1; - if(getMaxWidth() > 0) { + if(model == null) { + prefWidth = 0; + prefHeight = 0; + + } else if(getMaxWidth() > 0) { final int borderHorizontal = getBorderHorizontal(); final int maxWidth = Math.max(0, getMaxWidth() - borderHorizontal); final int minWidth = Math.max(0, getMinWidth() - borderHorizontal); @@ -341,13 +365,18 @@ private void computePreferredInnerSize() { //System.out.println("Doing preferred size computation"); LClip tmpRoot = new LClip(null); - tmpRoot.width = maxWidth; - Box box = new Box(tmpRoot, 0, 0, 0); - layoutElements(box, model); - box.finish(); - - prefWidth = Math.max(0, maxWidth - box.minRemainingWidth); - prefHeight = box.curY; + startLayout(); + try { + tmpRoot.width = maxWidth; + Box box = new Box(tmpRoot, 0, 0, 0, false); + layoutElements(box, model); + box.finish(); + + prefWidth = Math.max(0, maxWidth - box.minRemainingWidth); + prefHeight = box.curY; + } finally { + endLayout(); + } } } preferredInnerSize = new Dimension(prefWidth, prefHeight); @@ -411,17 +440,14 @@ protected void layout() { // only recompute the layout when it has changed if(layoutRoot.width != targetWidth || forceRelayout) { layoutRoot.width = targetWidth; - this.inLayoutCode = true; - this.forceRelayout = false; - - if(styleClassResolver != null) { - styleClassResolver.startLayout(); - } + inLayoutCode = true; + forceRelayout = false; + int requiredHeight; - clearLayout(); - Box box = new Box(layoutRoot, 0, 0, 0); - + startLayout(); try { + clearLayout(); + Box box = new Box(layoutRoot, 0, 0, 0, true); if(model != null) { layoutElements(box, model); @@ -432,19 +458,17 @@ protected void layout() { layoutRoot.collectBGImages(0, 0, allBGImages); } updateMouseHover(); + requiredHeight = box.curY; } finally { inLayoutCode = false; - } - - if(styleClassResolver != null) { - styleClassResolver.layoutFinished(); + endLayout(); } //System.out.println("layoutRoot.height="+layoutRoot.height+" box.curY="+box.curY+" remaining="+box.minRemainingWidth); - if(layoutRoot.height != box.curY) { - layoutRoot.height = box.curY; - if(getInnerHeight() != box.curY) { + if(layoutRoot.height != requiredHeight) { + layoutRoot.height = requiredHeight; + if(getInnerHeight() != requiredHeight) { // call outside of inLayoutCode range invalidateLayout(); } @@ -455,16 +479,16 @@ protected void layout() { @Override protected void paintWidget(GUI gui) { final ArrayList bi = allBGImages; - final int innerX = getInnerX(); - final int innerY = getInnerY(); - final AnimationState as = elementsAnimationState; - final Renderer renderer = gui.getRenderer(); + final RenderInfo ri = renderInfo; + ri.offsetX = getInnerX(); + ri.offsetY = getInnerY(); + ri.renderer = gui.getRenderer(); for(int i=0,n=bi.size() ; i elements) { for(TextAreaModel.Element e : elements) { @@ -781,6 +828,8 @@ private void layout(Box box, TextAreaModel.Element e, LElement le, TextAreaModel box.nextLine(false); } } + + private static final int DEFAULT_FONT_SIZE = 14; int convertToPX(Style style, StyleAttribute attribute, int full, int auto) { style = style.resolve(attribute, styleClassResolver); @@ -788,6 +837,12 @@ int convertToPX(Style style, StyleAttribute attribute, int full, int auto Font font = null; if(valueUnit.unit.isFontBased()) { + if(attribute == StyleAttribute.FONT_SIZE) { + style = style.getParent(); + if(style == null) { + return DEFAULT_FONT_SIZE; + } + } font = selectFont(style); if(font == null) { return 0; @@ -805,6 +860,9 @@ int convertToPX(Style style, StyleAttribute attribute, int full, int auto case PERCENT: value *= full * 0.01f; break; + case PT: + value *= 1.33f; // 96 DPI + break; case AUTO: return auto; } @@ -822,15 +880,131 @@ int convertToPX0(Style style, StyleAttribute attribute, int full) { } private Font selectFont(Style style) { - String fontName = style.get(StyleAttribute.FONT_NAME, styleClassResolver); - if(fontName != null && fonts != null) { - Font font = fonts.getFont(fontName); - if(font != null) { - return font; + StringList fontFamilies = style.get(StyleAttribute.FONT_FAMILIES, styleClassResolver); + if(fontFamilies != null) { + if(fontMapper != null) { + Font font = selectFontMapper(style, fontMapper, fontFamilies); + if(font != null) { + return font; + } + } + + if(fonts != null) { + do { + Font font = fonts.getFont(fontFamilies.getValue()); + if(font != null) { + return font; + } + } while((fontFamilies=fontFamilies.getNext()) != null); } } return defaultFont; } + + private static final StateSelect HOVER_STATESELECT = + new StateSelect(new StateExpression.Check(STATE_HOVER)); + + private static final int FONT_MAPPER_CACHE_SIZE = 16; + + private static final class FontMapperCacheEntry { + final int fontSize; + final int fontStyle; + final StringList fontFamilies; + final TextDecoration tdNormal; + final TextDecoration tdHover; + final int hashCode; + final Font font; + FontMapperCacheEntry next; + + FontMapperCacheEntry(int fontSize, int fontStyle, StringList fontFamilies, TextDecoration tdNormal, TextDecoration tdHover, int hashCode, Font font) { + this.fontSize = fontSize; + this.fontStyle = fontStyle; + this.fontFamilies = fontFamilies; + this.tdNormal = tdNormal; + this.tdHover = tdHover; + this.hashCode = hashCode; + this.font = font; + } + } + + private Font selectFontMapper(Style style, FontMapper fontMapper, StringList fontFamilies) { + int fontSize = convertToPX(style, StyleAttribute.FONT_SIZE, DEFAULT_FONT_SIZE, DEFAULT_FONT_SIZE); + int fontStyle = 0; + if(style.get(StyleAttribute.FONT_WEIGHT, styleClassResolver) >= 550) { + fontStyle |= FontMapper.STYLE_BOLD; + } + if(style.get(StyleAttribute.FONT_ITALIC, styleClassResolver)) { + fontStyle |= FontMapper.STYLE_ITALIC; + } + + TextDecoration textDecoration = style.get(StyleAttribute.TEXT_DECORATION, styleClassResolver); + TextDecoration textDecorationHover = style.get(StyleAttribute.TEXT_DECORATION_HOVER, styleClassResolver); + + int hashCode = fontSize; + hashCode = hashCode * 67 + fontStyle; + hashCode = hashCode * 67 + fontFamilies.hashCode(); + hashCode = hashCode * 67 + textDecoration.hashCode(); + hashCode = hashCode * 67 + ((textDecorationHover != null) ? textDecorationHover.hashCode() : 0); + + int cacheIdx = hashCode & (FONT_MAPPER_CACHE_SIZE-1); + + if(fontMapperCache != null) { + for(FontMapperCacheEntry ce=fontMapperCache[cacheIdx] ; ce!=null ; ce=ce.next) { + if(ce.hashCode == hashCode && + ce.fontSize == fontSize && + ce.fontStyle == fontStyle && + ce.tdNormal == textDecoration && + ce.tdHover == textDecorationHover && + ce.fontFamilies.equals(fontFamilies)) { + return ce.font; + } + } + } else { + fontMapperCache = new FontMapperCacheEntry[FONT_MAPPER_CACHE_SIZE]; + } + + FontParameter fpNormal = createFontParameter(textDecoration); + + StateSelect select; + FontParameter[] params; + + if(textDecorationHover != null) { + FontParameter fpHover = createFontParameter(textDecorationHover); + + select = HOVER_STATESELECT; + params = new FontParameter[] { fpHover, fpNormal }; + } else { + select = StateSelect.EMPTY; + params = new FontParameter[] { fpNormal }; + } + + Font font = fontMapper.getFont(fontFamilies, fontSize, fontStyle, select, params); + + FontMapperCacheEntry ce = new FontMapperCacheEntry(fontSize, fontStyle, + fontFamilies, textDecoration, textDecorationHover, hashCode, font); + ce.next = fontMapperCache[cacheIdx]; + fontMapperCache[cacheIdx] = ce; + + return font; + } + + private static FontParameter createFontParameter(TextDecoration deco) { + FontParameter fp = new FontParameter(); + fp.put(FontParameter.UNDERLINE, deco == TextDecoration.UNDERLINE); + fp.put(FontParameter.LINETHROUGH, deco == TextDecoration.LINE_THROUGH); + return fp; + } + + private FontData createFontData(Style style) { + Font font = selectFont(style); + if(font == null) { + return null; + } + + return new FontData(font, + style.get(StyleAttribute.COLOR, styleClassResolver), + style.get(StyleAttribute.COLOR_HOVER, styleClassResolver)); + } private Image selectImage(Style style, StyleAttribute element) { String imageName = style.get(element, styleClassResolver); @@ -881,15 +1055,22 @@ private void layoutParagraphElement(Box box, TextAreaModel.ParagraphElement pe) private void layoutTextElement(Box box, TextAreaModel.TextElement te) { final String text = te.getText(); final Style style = te.getStyle(); - final Font font = selectFont(style); + final FontData fontData = createFontData(style); final boolean pre = style.get(StyleAttribute.PREFORMATTED, styleClassResolver); - final Color color = style.get(StyleAttribute.COLOR, styleClassResolver); - if(font == null) { + if(fontData == null) { return; } - box.setupTextParams(style, font, false); + final boolean inheritHover; + Boolean inheritHoverStyle = style.resolve(StyleAttribute.INHERIT_HOVER, styleClassResolver).getRaw(StyleAttribute.INHERIT_HOVER); + if(inheritHoverStyle != null) { + inheritHover = inheritHoverStyle.booleanValue(); + } else { + inheritHover = (box.style != null) && (box.style == style.getParent()); + } + + box.setupTextParams(style, fontData.font, false); if(pre && !box.wasPreformatted) { box.nextLine(false); @@ -899,9 +1080,9 @@ private void layoutTextElement(Box box, TextAreaModel.TextElement te) { while(idx < text.length()) { int end = TextUtil.indexOf(text, '\n', idx); if(pre) { - layoutTextPre(box, te, font, color, text, idx, end); + layoutTextPre(box, te, fontData, text, idx, end, inheritHover); } else { - layoutText(box, te, font, color, text, idx, end); + layoutText(box, te, fontData, text, idx, end, inheritHover); } if(end < text.length() && text.charAt(end) == '\n') { @@ -914,8 +1095,8 @@ private void layoutTextElement(Box box, TextAreaModel.TextElement te) { box.wasPreformatted = pre; } - private void layoutText(Box box, TextAreaModel.TextElement te, Font font, - Color color, String text, int textStart, int textEnd) { + private void layoutText(Box box, TextAreaModel.TextElement te, FontData fontData, + String text, int textStart, int textEnd, boolean inheritHover) { int idx = textStart; // trim start while(textStart < textEnd && isSkip(text.charAt(textStart))) { @@ -928,6 +1109,8 @@ private void layoutText(Box box, TextAreaModel.TextElement te, Font font, textEnd--; } + Font font = fontData.font; + // check if we skipped white spaces and the previous element in this // row was not a text cell if(textStart > idx && box.prevOnLineEndsNotWithSpace()) { @@ -1003,7 +1186,7 @@ private void layoutText(Box box, TextAreaModel.TextElement te, Font font, } if(idx < end) { - LText lt = new LText(te, font, color, text, idx, end); + LText lt = new LText(te, fontData, text, idx, end, box.doCacheText); if(advancePastFloaters) { box.advancePastFloaters(lt.width, box.marginLeft, box.marginRight); } @@ -1019,6 +1202,7 @@ private void layoutText(Box box, TextAreaModel.TextElement te, Font font, lt.x = box.getXAndAdvance(width); lt.marginTop = (short)box.marginTop; lt.href = box.href; + lt.inheritHover = inheritHover; box.layout.add(lt); } @@ -1034,14 +1218,15 @@ private void layoutText(Box box, TextAreaModel.TextElement te, Font font, } } - private void layoutTextPre(Box box, TextAreaModel.TextElement te, Font font, - Color color, String text, int textStart, int textEnd) { + private void layoutTextPre(Box box, TextAreaModel.TextElement te, FontData fontData, + String text, int textStart, int textEnd, boolean inheritHover) { + Font font = fontData.font; int idx = textStart; for(;;) { while(idx < textEnd) { if(text.charAt(idx) == '\t') { idx++; - int tabX = box.computeNextTabStop(font); + int tabX = box.computeNextTabStop(te.getStyle(), font); if(tabX < box.lineWidth) { box.curX = tabX; } else if(!box.isAtStartOfLine()) { @@ -1063,9 +1248,10 @@ private void layoutTextPre(Box box, TextAreaModel.TextElement te, Font font, end = idx + Math.max(1, count); - LText lt = new LText(te, font, color, text, idx, end); + LText lt = new LText(te, fontData, text, idx, end, box.doCacheText); lt.x = box.getXAndAdvance(lt.width); lt.marginTop = (short)box.marginTop; + lt.inheritHover = inheritHover; box.layout.add(lt); } @@ -1145,14 +1331,12 @@ private void layoutListElement(Box box, TextAreaModel.ListElement le) { private void layoutOrderedListElement(Box box, TextAreaModel.OrderedListElement ole) { Style style = ole.getStyle(); - Font font = selectFont(style); + FontData fontData = createFontData(style); - if(font == null) { + if(fontData == null) { return; } - Color color = style.get(StyleAttribute.COLOR, styleClassResolver); - doMarginTop(box, style); LElement anchor = box.addAnchor(ole); @@ -1164,7 +1348,7 @@ private void layoutOrderedListElement(Box box, TextAreaModel.OrderedListElement int maxLabelWidth = convertToPX0(style, StyleAttribute.PADDING_LEFT, box.boxWidth); for(int i=0 ; i list) { @@ -1990,6 +2196,25 @@ private void processAnchors(int y, int height) { } } + static class RenderInfo { + int offsetX; + int offsetY; + Renderer renderer; + final AnimationState asNormal; + final AnimationState asHover; + + RenderInfo(AnimationState parent) { + asNormal = new AnimationState(parent); + asNormal.setAnimationState(STATE_HOVER, false); + asHover = new AnimationState(parent); + asHover.setAnimationState(STATE_HOVER, true); + } + + AnimationState getAnimationState(boolean isHover) { + return isHover ? asHover : asNormal; + } + } + static class LElement { final TextAreaModel.Element element; int x; @@ -2002,6 +2227,7 @@ static class LElement { short marginBottom; String href; boolean isHover; + boolean inheritHover; LElement(TextAreaModel.Element element) { this.element = element; @@ -2009,7 +2235,7 @@ static class LElement { void adjustWidget(int offX, int offY) {} void collectBGImages(int offX, int offY, ArrayList allBGImages) {} - void draw(int offX, int offY, AnimationState as, Renderer renderer) {} + void draw(RenderInfo ri) {} void destroy() {} boolean isInside(int x, int y) { @@ -2034,23 +2260,45 @@ int bottom() { return y + height + marginBottom; } } - - static class LText extends LElement { + + static class FontData { final Font font; final Color color; + final Color colorHover; + + FontData(Font font, Color color, Color colorHover) { + if(colorHover == null) { + colorHover = color; + } + this.font = font; + this.color = maskWhite(color); + this.colorHover = maskWhite(colorHover); + } + + public Color getColor(boolean isHover) { + return isHover ? colorHover : color; + } + + private static Color maskWhite(Color c) { + return Color.WHITE.equals(c) ? null : c; + } + } + + static class LText extends LElement { + final FontData fontData; final String text; final int start; final int end; FontCache cache; - LText(TextAreaModel.Element element, Font font, Color color, String text, int start, int end) { + LText(TextAreaModel.Element element, FontData fontData, String text, int start, int end, boolean doCache) { super(element); - this.font = font; - this.color = Color.WHITE.equals(color) ? null : color; + Font font = fontData.font; + this.fontData = fontData; this.text = text; this.start = start; this.end = end; - this.cache = font.cacheText(null, text, start, end); + this.cache = doCache ? font.cacheText(null, text, start, end) : null; this.height = font.getLineHeight(); if(cache != null) { @@ -2061,27 +2309,27 @@ static class LText extends LElement { } @Override - void draw(int offX, int offY, AnimationState as, Renderer renderer) { - as.setAnimationState(STATE_HOVER, isHover); - if(color != null) { - drawTextWithColor(offX, offY, as, renderer); + void draw(RenderInfo ri) { + Color c = fontData.getColor(isHover); + if(c != null) { + drawTextWithColor(ri, c); } else { - drawText(offX, offY, as); + drawText(ri); } } - private void drawTextWithColor(int offX, int offY, AnimationState as, Renderer renderer) { - Color c = color; - renderer.pushGlobalTintColor(c.getRedFloat(), c.getGreenFloat(), c.getBlueFloat(), c.getAlphaFloat()); - drawText(offX, offY, as); - renderer.popGlobalTintColor(); + private void drawTextWithColor(RenderInfo ri, Color c) { + ri.renderer.pushGlobalTintColor(c.getRedFloat(), c.getGreenFloat(), c.getBlueFloat(), c.getAlphaFloat()); + drawText(ri); + ri.renderer.popGlobalTintColor(); } - private void drawText(int offX, int offY, AnimationState as) { + private void drawText(RenderInfo ri) { + AnimationState as = ri.getAnimationState(isHover); if(cache != null) { - cache.draw(as, x+offX, y+offY); + cache.draw(as, x+ri.offsetX, y+ri.offsetY); } else { - font.drawText(as, x+offX, y+offY, text, start, end); + fontData.font.drawText(as, x+ri.offsetX, y+ri.offsetY, text, start, end); } } @@ -2123,9 +2371,9 @@ static class LImage extends LElement { } @Override - void draw(int offX, int offY, AnimationState as, Renderer renderer) { - as.setAnimationState(STATE_HOVER, hoverSrc.isHover); - img.draw(as, x+offX, y+offY, width, height); + void draw(RenderInfo ri) { + img.draw(ri.getAnimationState(hoverSrc.isHover), + x+ri.offsetX, y+ri.offsetY, width, height); } } @@ -2142,28 +2390,26 @@ static class LClip extends LElement { this.anchors = new ArrayList(); this.lineInfo = EMPTY_CHAR_ARRAY; } - + @Override - void draw(int offX, int offY, AnimationState as, Renderer renderer) { - offX += x; - offY += y; - renderer.clipEnter(offX, offY, width, height); + void draw(RenderInfo ri) { + ri.offsetX += x; + ri.offsetY += y; + ri.renderer.clipEnter(ri.offsetX, ri.offsetY, width, height); try { - if(!renderer.clipIsEmpty()) { - drawNoClip(offX, offY, as, renderer); + if(!ri.renderer.clipIsEmpty()) { + final ArrayList ll = layout; + for(int i=0,n=ll.size() ; i ll = layout; - for(int i=0,n=ll.size() ; i 1) { - font.drawMultiLineText(animState, x, y, text, computeTextWidth(), alignment.fontHAlignment); - } else { - font.drawText(animState, x, y, text); - } + protected void paintTextAt(de.matthiasmann.twl.renderer.AnimationState animState, int x, int y) { + if(cache != null) { + cache.draw(animState, x, y); + } else if(numTextLines > 1) { + font.drawMultiLineText(animState, x, y, text, computeTextWidth(), alignment.fontHAlignment); + } else { + font.drawText(animState, x, y, text); } } diff --git a/twl/src/de/matthiasmann/twl/TreePathDisplay.java b/twl/src/de/matthiasmann/twl/TreePathDisplay.java index 064cf1b..1df10f2 100644 --- a/twl/src/de/matthiasmann/twl/TreePathDisplay.java +++ b/twl/src/de/matthiasmann/twl/TreePathDisplay.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -259,7 +259,7 @@ protected void doCallback(int key) { switch(key) { case Event.KEY_RETURN: - if(fireResolvePath(getEditField().getText())) { + if(fireResolvePath(getText())) { endEdit(); } break; diff --git a/twl/src/de/matthiasmann/twl/TreeTable.java b/twl/src/de/matthiasmann/twl/TreeTable.java index 42f4a1c..07bf613 100644 --- a/twl/src/de/matthiasmann/twl/TreeTable.java +++ b/twl/src/de/matthiasmann/twl/TreeTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -564,17 +564,17 @@ public void setCellData(int row, int column, Object data) { public void setCellData(int row, int column, Object data, TreeTableNode node) { level = getLevel(node); - setSubRenderer(data); + setSubRenderer(row, column, data); } protected int getIndentation() { return level * treeIndent + treeButtonSize.getX(); } - protected void setSubRenderer(Object colData) { - subRenderer = getCellRenderer(colData); + protected void setSubRenderer(int row, int column, Object colData) { + subRenderer = getCellRenderer(colData, column); if(subRenderer != null) { - subRenderer.setCellData(level, numColumns, colData); + subRenderer.setCellData(row, column, colData); } } @@ -700,7 +700,7 @@ public void positionWidget(Widget widget, int x, int y, int w, int h) { public void setCellData(int row, int column, Object data, NodeState nodeState) { assert nodeState != null; this.nodeState = nodeState; - setSubRenderer(data); + setSubRenderer(row, column, data); level = nodeState.level; } } diff --git a/twl/src/de/matthiasmann/twl/ValueAdjusterFloat.java b/twl/src/de/matthiasmann/twl/ValueAdjusterFloat.java index a653761..7aa2d20 100644 --- a/twl/src/de/matthiasmann/twl/ValueAdjusterFloat.java +++ b/twl/src/de/matthiasmann/twl/ValueAdjusterFloat.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -127,9 +127,6 @@ public FloatModel getModel() { public void setModel(FloatModel model) { if(this.model != model) { removeModelCallback(); - if(this.model != null) { - this.model.removeCallback(modelCallback); - } this.model = model; if(model != null) { this.minValue = model.getMinValue(); @@ -231,6 +228,8 @@ protected float parseText(String value) throws ParseException { protected void syncWithModel() { cancelEdit(); + this.minValue = model.getMinValue(); + this.maxValue = model.getMaxValue(); this.value = model.getValue(); setDisplayText(); } diff --git a/twl/src/de/matthiasmann/twl/Widget.java b/twl/src/de/matthiasmann/twl/Widget.java index 4637bfc..38a6bb1 100644 --- a/twl/src/de/matthiasmann/twl/Widget.java +++ b/twl/src/de/matthiasmann/twl/Widget.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -52,6 +52,13 @@ /** * Root of the TWL class hierarchy. * + *

    When subclassing the following methods should be overridden to ensure + * correct layout behavior:

      + *
    • {@link #layout() }
    • + *
    • {@link #getPreferredInnerWidth() }
    • + *
    • {@link #getPreferredInnerHeight() }
    • + *
    + * *

    The following methods are events and can be overridden when needed:

      *
    • {@link #afterAddToGUI(de.matthiasmann.twl.GUI) }
    • *
    • {@link #allChildrenRemoved() }
    • @@ -70,6 +77,11 @@ *
    • {@link #widgetDisabled() }
    • *
    * + *

    NOTE: The only thread safe methods of TWL are:

      + *
    • {@link #getGUI() }
    • + *
    • {@link GUI#invokeLater(java.lang.Runnable) }
    • + *
    + * * @author Matthias Mann */ public class Widget { @@ -79,8 +91,6 @@ public class Widget { public static final StateKey STATE_HAS_FOCUSED_CHILD = StateKey.get("hasFocusedChild"); public static final StateKey STATE_DISABLED = StateKey.get("disabled"); - private static final int FOCUS_KEY = Event.KEY_TAB; - private static final int LAYOUT_INVALID_LOCAL = 1; private static final int LAYOUT_INVALID_GLOBAL = 3; @@ -145,14 +155,28 @@ public class Widget { */ private static final ThreadLocal focusTransferInfo = new ThreadLocal(); + /** + * Creates a Widget with it's own animation state + * + *

    The initial theme name is the lower case version of the simple class + * name of the concrete subclass - or in pseudo code:

    + *
    {@code getClass().getSimpleName().toLowerCase() }
    + * + * @see #setTheme(java.lang.String) + */ public Widget() { this(null, false); } /** * Creates a Widget with a shared animation state + * + *

    The initial theme name is the lower case version of the simple class + * name of the concrete subclass - or in pseudo code:

    + *
    {@code getClass().getSimpleName().toLowerCase() }
    * * @param animState the animation state to share, can be null + * @see #setTheme(java.lang.String) */ public Widget(AnimationState animState) { this(animState, false); @@ -160,9 +184,15 @@ public Widget(AnimationState animState) { /** * Creates a Widget with a shared or inherited animation state + * + *

    The initial theme name is the lower case version of the simple class + * name of the concrete subclass - or in pseudo code:

    + *
    {@code getClass().getSimpleName().toLowerCase() }
    * * @param animState the animation state to share or inherit, can be null - * @param inherit true if the animation state should be inherited false for sharing + * @param inherit true if the animation state should be inherited, false for sharing + * @see AnimationState#AnimationState(de.matthiasmann.twl.AnimationState) + * @see #setTheme(java.lang.String) */ public Widget(AnimationState animState, boolean inherit) { // determine the default theme name from the class name of this instance @@ -1087,6 +1117,10 @@ public boolean isFocusKeyEnabled() { /** * Controls the handling of the FOCUS_KEY. + *

    The default is true.

    + *

    When enabled the focus key (TAB) will cycle through all (indirect) + * children which can receive keyboard focus. The order is defined + * by {@link #getKeyboardFocusOrder() }.

    * @param focusKeyEnabled if true this widget will handle the focus key. */ public void setFocusKeyEnabled(boolean focusKeyEnabled) { @@ -1128,6 +1162,19 @@ public Image getOverlay() { public void setOverlay(Image overlay) { this.overlay = overlay; } + + /** + * Returns the mouse cursor which should be used for the given + * mouse coordinates and modifiers. + * + * The default implementation calls {@link #getMouseCursor() } + * + * @param evt only {@link Event#getMouseX() }, {@link Event#getMouseY() } and {@link Event#getModifiers() } are valid. + * @return the mouse cursor or null when no mouse cursor is defined for this widget + */ + public MouseCursor getMouseCursor(Event evt) { + return getMouseCursor(); + } public MouseCursor getMouseCursor() { return mouseCursor; @@ -1202,8 +1249,8 @@ public void insertChild(Widget child, int index) throws IndexOutOfBoundsExceptio if(index < 0 || index > children.size()) { throw new IndexOutOfBoundsException(); } + child.setParent(this); // can throw exception - see PopupWindow children.add(index, child); - child.parent = this; GUI gui = getGUI(); if(gui != null) { child.recursivelySetGUI(gui); @@ -2141,6 +2188,13 @@ protected void layoutChildrenFullInnerArea() { } } + /** + * Returns all children of this widget in their focus travel order. + *

    The returned list is only iterated and not stored.

    + *

    The default implementation just returns an unmodifable view of + * the internal children list.

    + * @return a read only collection with all children in focus order. + */ protected List getKeyboardFocusOrder() { if(children == null) { return Collections.emptyList(); @@ -2305,6 +2359,10 @@ protected final void firePropertyChange(String propertyName, Object oldValue, Ob // start of internal stuff // + void setParent(Widget parent) { + this.parent = parent; + } + private void unparentChild(Widget child) { GUI gui = getGUI(); if(child.hasOpenPopup) { @@ -2359,6 +2417,7 @@ private void recursivelyAddToGUI(GUI gui) { private void recursivelyClearGUI(GUI gui) { assert guiInstance == gui : "guiInstance must be null"; guiInstance = null; + themeManager = null; if(children != null) { for(int i=children.size() ; i-->0 ;) { children.get(i).recursivelyClearGUI(gui); @@ -2543,8 +2602,12 @@ private void drawWidgetOffscreen(GUI gui) { extraRight += effectExtra[2]; extraBottom += effectExtra[3]; } + if(offscreenSurface != null && !ro.needPainting(gui, parent, offscreenSurface)) { + ro.paintOffscreenSurface(gui, this, offscreenSurface); + return; + } offscreenSurface = offscreenRenderer.startOffscreenRendering( - offscreenSurface, posX-extraLeft, posY-extraTop, + this, offscreenSurface, posX-extraLeft, posY-extraTop, width+extraLeft+extraRight, height+extraTop+extraBottom); if(offscreenSurface != null) { try { @@ -2699,8 +2762,17 @@ private StringBuilder getThemePath(int length) { return sb.append(theme); } + Event translateMouseEvent(Event evt) { + if(renderOffscreen instanceof OffscreenMouseAdjustments) { + int[] newXY = ((OffscreenMouseAdjustments)renderOffscreen).adjustMouseCoordinates(this, evt); + evt = evt.createSubEvent(newXY[0], newXY[1]); + } + return evt; + } + Widget routeMouseEvent(Event evt) { assert !evt.isMouseDragEvent(); + evt = translateMouseEvent(evt); if(children != null) { for(int i=children.size(); i-->0 ;) { Widget child = children.get(i); @@ -2792,10 +2864,8 @@ static boolean getSafeBooleanProperty(String name) { private boolean handleKeyEvent(Event evt) { if(children != null) { - if(focusKeyEnabled && evt.getKeyCode() == FOCUS_KEY && - ((evt.getModifiers() & (Event.MODIFIER_CTRL|Event.MODIFIER_META|Event.MODIFIER_ALT)) == 0)) { - handleFocusKeyEvent(evt); - return true; + if(focusKeyEnabled && guiInstance != null) { + guiInstance.setFocusKeyWidget(this); } if(focusChild != null && focusChild.isVisible()) { if(focusChild.handleEvent(evt)) { @@ -2819,7 +2889,7 @@ private boolean handleKeyEvent(Event evt) { return false; } - private void handleFocusKeyEvent(Event evt) { + void handleFocusKeyEvent(Event evt) { if(evt.isKeyPressedEvent()) { if((evt.getModifiers() & Event.MODIFIER_SHIFT) != 0) { focusPrevChild(); @@ -2845,7 +2915,7 @@ boolean setMouseOverChild(Widget child, Event evt) { } return true; } - + void collectLayoutLoop(ArrayList result) { if(layoutInvalid != 0) { result.add(this); @@ -2903,5 +2973,37 @@ public static interface RenderOffscreen { * @return the extra area in {@code top, left, right, bottom} order or null */ public int[] getEffectExtraArea(Widget widget); + + /** + * Called before offscreen rendering is started. + * + *

    NOTE: when this function returns false none of the paint methods + * of that widget are called which might effect some widgets.

    + * + *

    If you are unsure it is always safer to return true.

    + * + * @param gui the GUI instance + * @param widget the widget + * @param surface the previous offscreen surface - never null + * @return true if the surface needs to be updated, false if no new rendering should be done + */ + public boolean needPainting(GUI gui, Widget widget, OffscreenSurface surface); + } + + public interface OffscreenMouseAdjustments extends RenderOffscreen { + + /** + * Called when mouse events are routed for the widget. + * + *

    All mouse coordinates in TWL are absolute.

    + * + *

    The returned object can be reused on the next call and should not + * be stored by the caller.

    + * + * @param widget the widget + * @param evt the mouse event + * @return the new mouse coordinates in {@code x, y} order + */ + public int[] adjustMouseCoordinates(Widget widget, Event evt); } } diff --git a/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java b/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java index fc7a10c..0b0eee7 100644 --- a/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java +++ b/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java @@ -65,7 +65,7 @@ public boolean pollInput(GUI gui) { if(Mouse.isCreated()) { while(Mouse.next()) { gui.handleMouse( - Mouse.getEventX()/RenderScale.scale, (gui.getHeight() - Mouse.getEventY() - 1)/RenderScale.scale, + Mouse.getEventX()/RenderScale.scale, (gui.getHeight() - Mouse.getEventY() - 1)/RenderScale.scale, Mouse.getEventButton(), Mouse.getEventButtonState()); int wheelDelta = Mouse.getEventDWheel(); diff --git a/twl/src/de/matthiasmann/twl/license.html b/twl/src/de/matthiasmann/twl/license.html index 7518c06..3bee132 100644 --- a/twl/src/de/matthiasmann/twl/license.html +++ b/twl/src/de/matthiasmann/twl/license.html @@ -1,6 +1,6 @@ TWL logo -

    Copyright (c) 2008-2011, Matthias Mann

    +

    Copyright (c) 2008-2012, Matthias Mann

    All rights reserved.

    Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

    diff --git a/twl/src/de/matthiasmann/twl/license.txt b/twl/src/de/matthiasmann/twl/license.txt index 28cd5b8..df40044 100644 --- a/twl/src/de/matthiasmann/twl/license.txt +++ b/twl/src/de/matthiasmann/twl/license.txt @@ -1,4 +1,4 @@ -Copyright (c) 2008-2011, Matthias Mann +Copyright (c) 2008-2012, Matthias Mann All rights reserved. diff --git a/twl/src/de/matthiasmann/twl/model/AbstractProperty.java b/twl/src/de/matthiasmann/twl/model/AbstractProperty.java index 99f52ef..12f4857 100644 --- a/twl/src/de/matthiasmann/twl/model/AbstractProperty.java +++ b/twl/src/de/matthiasmann/twl/model/AbstractProperty.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -39,7 +39,7 @@ */ public abstract class AbstractProperty implements Property { - private Runnable[] valueChangedCallbacks = null; + private Runnable[] valueChangedCallbacks; public void addValueChangedCallback(Runnable cb) { valueChangedCallbacks = CallbackSupport.addCallbackToList( @@ -51,6 +51,10 @@ public void removeValueChangedCallback(Runnable cb) { valueChangedCallbacks, cb); } + public boolean hasValueChangedCallbacks() { + return valueChangedCallbacks != null; + } + protected void fireValueChangedCallback() { CallbackSupport.fireCallbacks(valueChangedCallbacks); } diff --git a/twl/src/de/matthiasmann/twl/model/AbstractTableModel.java b/twl/src/de/matthiasmann/twl/model/AbstractTableModel.java index d4186b1..9c3eb4e 100644 --- a/twl/src/de/matthiasmann/twl/model/AbstractTableModel.java +++ b/twl/src/de/matthiasmann/twl/model/AbstractTableModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -51,6 +51,10 @@ public void removeChangeListener(ChangeListener listener) { callbacks = CallbackSupport.removeCallbackFromList(callbacks, listener); } + protected boolean hasCallbacks() { + return callbacks != null; + } + protected void fireRowsInserted(int idx, int count) { if(callbacks != null) { for(ChangeListener cl : callbacks) { diff --git a/twl/src/de/matthiasmann/twl/model/HasCallback.java b/twl/src/de/matthiasmann/twl/model/HasCallback.java index 2fde57b..de484f9 100644 --- a/twl/src/de/matthiasmann/twl/model/HasCallback.java +++ b/twl/src/de/matthiasmann/twl/model/HasCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -60,6 +60,14 @@ public void removeCallback(Runnable callback) { callbacks = CallbackSupport.removeCallbackFromList(callbacks, callback); } + /** + * Returns true when the callback list is not empty + * @return true when the callback list is not empty + */ + public boolean hasCallbacks() { + return callbacks != null; + } + /** * Calls all registered callbacks. * diff --git a/twl/src/de/matthiasmann/twl/model/JavaFileSystemModel.java b/twl/src/de/matthiasmann/twl/model/JavaFileSystemModel.java index 7f0d49a..25bcdf2 100644 --- a/twl/src/de/matthiasmann/twl/model/JavaFileSystemModel.java +++ b/twl/src/de/matthiasmann/twl/model/JavaFileSystemModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -189,7 +189,11 @@ public boolean accept(File pathname) { public Object getSpecialFolder(String key) { File file = null; if(SPECIAL_FOLDER_HOME.equals(key)) { - file = new File(System.getProperty("user.home")); + try { + file = new File(System.getProperty("user.home")); + } catch(SecurityException ex) { + // ignore + } } if(file != null && file.canRead() && file.isDirectory()) { return file; diff --git a/twl/src/de/matthiasmann/twl/renderer/FontMapper.java b/twl/src/de/matthiasmann/twl/renderer/FontMapper.java new file mode 100644 index 0000000..cc95163 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/FontMapper.java @@ -0,0 +1,93 @@ +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +import de.matthiasmann.twl.utils.StateSelect; +import de.matthiasmann.twl.utils.StringList; +import java.io.IOException; +import java.net.URL; + +/** + * A font mapper which tries to retrieve the closest font for the specified parameters + * + * @author Matthias Mann + */ +public interface FontMapper extends Resource { + + public static final int STYLE_NORMAL = 0; + public static final int STYLE_BOLD = 1; + public static final int STYLE_ITALIC = 2; + + /** + * Register this font is as a weak font. + * + *

    If a font is already registered for the specified + * fontFamily and style then this registration is ignored.

    + *

    If a non weak font is registered for the specified + * fontFamily and style then an existing weak font is replaced.

    + */ + public static final int REGISTER_WEAK = 256; + + /** + * Retrive the cloest font for the given parameters + * + * @param fontFamilies a list of family names with decreasing piority + * @param fontSize the desired font size in pixels + * @param style a combination of the STYLE_* flags + * @param select the StateSelect object + * @param fontParams the font parameters - must be exactly 1 more then + * the number of expressions in the select object + * @return the Font object or {@code null} if the font could not be found + * @throws NullPointerException when one of the parameters is null + * @throws IllegalArgumentException when the number of font parameters doesn't match the number of state expressions + */ + public Font getFont(StringList fontFamilies, int fontSize, int style, + StateSelect select, FontParameter ... fontParams); + + /** + * Registers a font file + * + * @param fontFamily the font family for which to register the font + * @param style a combination of the STYLE_* and REGISTER_* flags + * @param url the URL for the font file + * @return true if the specified font could be registered + */ + public boolean registerFont(String fontFamily, int style, URL url); + + /** + * Registers a font file and determines the style from the font itself. + * + * @param fontFamily the font family for which to register the font + * @param url the URL for the font file + * @return true if the specified font could be registered + * @throws IOException when the font could not be parsed + */ + public boolean registerFont(String fontFamily, URL url) throws IOException; +} diff --git a/twl/src/de/matthiasmann/twl/renderer/FontParameter.java b/twl/src/de/matthiasmann/twl/renderer/FontParameter.java index f1dc743..00561ff 100644 --- a/twl/src/de/matthiasmann/twl/renderer/FontParameter.java +++ b/twl/src/de/matthiasmann/twl/renderer/FontParameter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -29,35 +29,187 @@ */ package de.matthiasmann.twl.renderer; -import de.matthiasmann.twl.utils.StateExpression; -import java.util.Map; +import de.matthiasmann.twl.Color; +import java.util.HashMap; /** - * + * An extensible typed map for font parameters. + * * @author Matthias Mann */ -public class FontParameter { +public final class FontParameter { + + static final HashMap> parameterMap = new HashMap>(); - private final StateExpression condition; - private final Map params; + public static final Parameter COLOR = newParameter("color", Color.WHITE); + public static final Parameter UNDERLINE = newParameter("underline", false); + public static final Parameter LINETHROUGH = newParameter("linethrough", false); + + private Object[] values; - public FontParameter(StateExpression condition, Map params) { - if(condition == null) { - throw new NullPointerException("condition"); - } - if(params == null) { - throw new NullPointerException("params"); - } - this.condition = condition; - this.params = params; + public FontParameter() { + this.values = new Object[8]; } - public StateExpression getCondition() { - return condition; + public FontParameter(FontParameter base) { + this.values = base.values.clone(); } - public Map getParams() { - return params; + /** + * Sets a parameter value + * @param the type of the parameter + * @param param the parameter + * @param value the value or null to revert to it's default value + */ + public void put(Parameter param, T value) { + if(param == null) { + throw new NullPointerException("type"); + } + if(value != null && !param.dataClass.isInstance(value)) { + throw new ClassCastException("value"); + } + int ordinal = param.ordinal; + int curLength = values.length; + if(ordinal >= curLength) { + Object[] tmp = new Object[Math.max(ordinal + 1, curLength*2)]; + System.arraycopy(values, 0, tmp, 0, curLength); + values = tmp; + } + values[ordinal] = value; + } + + /** + * Returns the value of the specified parameter + * @param the type of the parameter + * @param param the parameter + * @return the parameter value or it's default value when the parameter was not set + */ + public T get(Parameter param) { + if(param.ordinal < values.length) { + Object raw = values[param.ordinal]; + if(raw != null) { + return param.dataClass.cast(raw); + } + } + return param.defaultValue; + } + + /** + * Returns an array of all registered parameter + * @return an array of all registered parameter + */ + public static Parameter[] getRegisteredParameter() { + synchronized (parameterMap) { + return parameterMap.values().toArray(new Parameter[parameterMap.size()]); + } + } + + /** + * Returns the parameter instance for the given name + * @param name the name to look up + * @return the parameter instance or null when the name is not registered + */ + public static Parameter getParameter(String name) { + synchronized (parameterMap) { + return parameterMap.get(name); + } + } + + /** + * Registers a new parameter. + * + *

    The data class is extracted from the default value.

    + *

    If the name is already registered then the existing parameter is returned.

    + * + * @param the data type of the parameter + * @param name the parameter name + * @param defaultValue the default value + * @return the parameter instance + * @throws NullPointerException when one of the parameters is null + * @throws IllegalStateException when the name is already registered but with + * different dataClass or defaultValue + */ + public static Parameter newParameter(String name, T defaultValue) { + if(defaultValue == null) { + throw new NullPointerException("defaultValue"); + } + @SuppressWarnings("unchecked") + Class dataClass = (Class)defaultValue.getClass(); + return newParameter(name, dataClass, defaultValue); + } + + /** + * Registers a new parameter. + * + *

    If the name is already registered then the existing parameter is returned.

    + * + * @param the data type of the parameter + * @param name the parameter name + * @param dataClass the data class + * @param defaultValue the default value - can be null. + * @return the parameter instance + * @throws NullPointerException when name or dataClass is null + * @throws IllegalStateException when the name is already registered but with + * different dataClass or defaultValue + */ + public static Parameter newParameter(String name, Class dataClass, T defaultValue) { + if(name == null) { + throw new NullPointerException("name"); + } + if(dataClass == null) { + throw new NullPointerException("dataClass"); + } + + synchronized (parameterMap) { + Parameter existing = parameterMap.get(name); + if(existing != null) { + if(existing.dataClass != dataClass || !equals(existing.defaultValue, defaultValue)) { + throw new IllegalStateException("type '" + name + "' already registered but different"); + } + + @SuppressWarnings("unchecked") + Parameter type = (Parameter)existing; + return type; + } + + Parameter type = new Parameter(name, dataClass, defaultValue, parameterMap.size()); + parameterMap.put(name, type); + return type; + } + } + + private static boolean equals(Object a, Object b) { + return (a == b) || (a != null && a.equals(b)); } + public static final class Parameter { + final String name; + final Class dataClass; + final T defaultValue; + final int ordinal; + + Parameter(String name, Class dataClass, T defaultValue, int ordinal) { + this.name = name; + this.dataClass = dataClass; + this.defaultValue = defaultValue; + this.ordinal = ordinal; + } + + public final String getName() { + return name; + } + + public final Class getDataClass() { + return dataClass; + } + + public final T getDefaultValue() { + return defaultValue; + } + + @Override + public String toString() { + return ordinal + ":" + name + ":" + dataClass.getSimpleName(); + } + } } diff --git a/twl/src/de/matthiasmann/twl/renderer/Gradient.java b/twl/src/de/matthiasmann/twl/renderer/Gradient.java new file mode 100644 index 0000000..e497f0e --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/Gradient.java @@ -0,0 +1,131 @@ +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +import de.matthiasmann.twl.Color; +import java.util.ArrayList; + +/** + * Info class used to construct a gradient image + * + * @author Matthias Mann + * @see Renderer#createGradient(de.matthiasmann.twl.renderer.Gradient) + */ +public class Gradient { + + public enum Type { + HORIZONTAL, + VERTICAL + } + + public enum Wrap { + SCALE, + CLAMP, + REPEAT, + MIRROR + } + + private final Type type; + private Wrap wrap; + private final ArrayList stops; + + public Gradient(Type type) { + if(type == null) { + throw new NullPointerException("type"); + } + this.type = type; + this.wrap = Wrap.SCALE; + this.stops = new ArrayList(); + } + + public Type getType() { + return type; + } + + public void setWrap(Wrap wrap) { + if(wrap == null) { + throw new NullPointerException("wrap"); + } + this.wrap = wrap; + } + + public Wrap getWrap() { + return wrap; + } + + public int getNumStops() { + return stops.size(); + } + + public Stop getStop(int index) { + return stops.get(index); + } + + public Stop[] getStops() { + return stops.toArray(new Stop[stops.size()]); + } + + public void addStop(float pos, Color color) { + if(color == null) { + throw new NullPointerException("color"); + } + int numStops = stops.size(); + if(numStops == 0) { + if(!(pos >= 0)) { + throw new IllegalArgumentException("first stop must be >= 0.0f"); + } + if(pos > 0) { + stops.add(new Stop(0.0f, color)); + } + } + if(numStops > 0 && !(pos > stops.get(numStops-1).pos)) { + throw new IllegalArgumentException("pos must be monotone increasing"); + } + stops.add(new Stop(pos, color)); + } + + public static class Stop { + final float pos; + final Color color; + + public Stop(float pos, Color color) { + this.pos = pos; + this.color = color; + } + + public float getPos() { + return pos; + } + + public Color getColor() { + return color; + } + } +} diff --git a/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java b/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java index ff1e51c..81a9a82 100644 --- a/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -29,6 +29,8 @@ */ package de.matthiasmann.twl.renderer; +import de.matthiasmann.twl.Widget; + /** * An interface to allow offscreen rendering for special effects * @@ -41,6 +43,7 @@ public interface OffscreenRenderer { * into the returned offscreen surface. Rendering outside the specified area * will be ignored. * + * @param widget the widget which will render to the returned surface - can be null. * @param oldSurface the previous offscreen surface to reuse / overwrite * @param x the X coordinate of the region, can be negative. * @param y the Y coordinate of the region, can be negative. @@ -48,8 +51,8 @@ public interface OffscreenRenderer { * @param height the height, can be larger then the screen size * @return the OffscreenSurface or null if offscreen rendering could not be started. */ - public OffscreenSurface startOffscreenRendering(OffscreenSurface oldSurface, - int x, int y, int width, int height); + public OffscreenSurface startOffscreenRendering(Widget widget, + OffscreenSurface oldSurface, int x, int y, int width, int height); /** * Ends the current offscreen rendering. diff --git a/twl/src/de/matthiasmann/twl/renderer/Renderer.java b/twl/src/de/matthiasmann/twl/renderer/Renderer.java index 6488f0d..e03edc5 100644 --- a/twl/src/de/matthiasmann/twl/renderer/Renderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/Renderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -31,10 +31,9 @@ import de.matthiasmann.twl.Event; import de.matthiasmann.twl.Rect; +import de.matthiasmann.twl.utils.StateSelect; import java.io.IOException; import java.net.URL; -import java.util.Collection; -import java.util.Map; /** * TWL Rendering interface @@ -106,12 +105,15 @@ public interface Renderer { * Loads a font. * * @param baseUrl the base URL that can be used to load font data - * @param parameter font parameter - * @param conditionalParameter conditional font paramters - evaluate in order based on AnimationState + * @param select the StateSelect object + * @param parameterList the font parameters - must be exactly 1 more then + * the number of expressions in the select object * @return a Font object * @throws java.io.IOException if the font could not be loaded + * @throws NullPointerException when one of the parameters is null + * @throws IllegalArgumentException when the number of font parameters doesn't match the number of state expressions */ - public Font loadFont(URL baseUrl, Map parameter, Collection conditionalParameter) throws IOException; + public Font loadFont(URL baseUrl, StateSelect select, FontParameter ... parameterList) throws IOException; /** * Loads a texture. Textures are used to create images. @@ -142,6 +144,15 @@ public interface Renderer { */ public OffscreenRenderer getOffscreenRenderer(); + /** + * Returns the font mapper object if one is available. + * + * This is an optional operation. + * + * @return the font mapper or null if not supported. + */ + public FontMapper getFontMapper(); + /** * Creates a dynamic image with undefined content. * @@ -153,6 +164,8 @@ public interface Renderer { */ public DynamicImage createDynamicImage(int width, int height); + public Image createGradient(Gradient gradient); + /** * Enters a clip region. * diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/GradientImage.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/GradientImage.java new file mode 100644 index 0000000..b1df4fd --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/GradientImage.java @@ -0,0 +1,233 @@ +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer.lwjgl; + +import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.Gradient; +import de.matthiasmann.twl.renderer.Gradient.Stop; +import de.matthiasmann.twl.renderer.Gradient.Type; +import de.matthiasmann.twl.renderer.Gradient.Wrap; +import de.matthiasmann.twl.renderer.Image; +import org.lwjgl.opengl.GL11; + +/** + * + * @author Matthias Mann + */ +public class GradientImage implements Image { + + private final LWJGLRenderer renderer; + private final Type type; + private final Wrap wrap; + private final Stop[] stops; + private final Color tint; + private final float endPos; + + GradientImage(GradientImage src, Color tint) { + this.renderer = src.renderer; + this.type = src.type; + this.wrap = src.wrap; + this.stops = src.stops; + this.endPos = src.endPos; + this.tint = tint; + } + + public GradientImage(LWJGLRenderer renderer, Gradient gradient) { + if(gradient == null) { + throw new NullPointerException("gradient"); + } + if(gradient.getNumStops() < 1) { + throw new IllegalArgumentException("Need at least 1 stop for a gradient"); + } + + this.renderer = renderer; + this.type = gradient.getType(); + this.tint = Color.WHITE; + if(gradient.getNumStops() == 1) { + Color color = gradient.getStop(0).getColor(); + wrap = Wrap.SCALE; + stops = new Stop[] { + new Stop(0.0f, color), + new Stop(1.0f, color) + }; + endPos = 1.0f; + } else if(gradient.getWrap() == Wrap.MIRROR) { + int numStops = gradient.getNumStops(); + wrap = Wrap.REPEAT; + stops = new Stop[numStops*2-1]; + for(int i=0 ; i=0 ; i++,j--) { + stops[i] = new Stop(endPos - stops[j].getPos(), stops[j].getColor()); + } + } else { + wrap = gradient.getWrap(); + stops = gradient.getStops(); + endPos = stops[stops.length-1].getPos(); + } + } + + + public Image createTintedVersion(Color color) { + return new GradientImage(this, tint.multiply(color)); + } + + private boolean isHorz() { + return type == Type.HORIZONTAL; + } + + private int getLastPos() { + return Math.round(stops[stops.length-1].getPos()); + } + + public int getHeight() { + return isHorz() ? 1 : getLastPos(); + } + + public int getWidth() { + return isHorz() ? getLastPos() : 1; + } + + public void draw(AnimationState as, int x, int y) { + if(isHorz()) { + drawHorz(x, y, getLastPos(), 1); + } else { + drawVert(x, y, 1, getLastPos()); + } + } + + public void draw(AnimationState as, int x, int y, int width, int height) { + if(isHorz()) { + drawHorz(x, y, width, height); + } else { + drawVert(x, y, width, height); + } + } + + private void drawHorz(int x, int y, int width, int height) { + if(width <= 0 || height <= 0) { + return; + } + TintStack tintStack = renderer.tintStack.push(tint); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glBegin(GL11.GL_QUAD_STRIP); + if(wrap == Wrap.SCALE) { + for(Stop stop : stops) { + tintStack.setColor(stop.getColor()); + float pos = stop.getPos() * width / endPos; + GL11.glVertex2f(x + pos, y); + GL11.glVertex2f(x + pos, y + height); + } + } else { + float lastPos = 0; + float offset = 0; + Color lastColor = stops[0].getColor(); + outer: do{ + for(Stop stop : stops) { + float pos = stop.getPos() + offset; + Color color = stop.getColor(); + if(pos >= width) { + float t = (width - lastPos) / (pos - lastPos); + setColor(tintStack, lastColor, color, t); + break outer; + } + tintStack.setColor(color); + GL11.glVertex2f(x + pos, y); + GL11.glVertex2f(x + pos, y + height); + lastPos = pos; + lastColor = color; + } + offset += endPos; + }while(wrap == Wrap.REPEAT); + GL11.glVertex2f(x + width, y); + GL11.glVertex2f(x + width, y + height); + } + GL11.glEnd(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private void drawVert(int x, int y, int width, int height) { + if(width <= 0 || height <= 0) { + return; + } + TintStack tintStack = renderer.tintStack.push(tint); + GL11.glDisable(GL11.GL_TEXTURE_2D); + GL11.glBegin(GL11.GL_QUAD_STRIP); + if(wrap == Wrap.SCALE) { + for(Stop stop : stops) { + tintStack.setColor(stop.getColor()); + float pos = stop.getPos() * height / endPos; + GL11.glVertex2f(x , y + pos); + GL11.glVertex2f(x + width, y + pos); + } + } else { + float lastPos = 0; + float offset = 0; + Color lastColor = stops[0].getColor(); + outer: do{ + for(Stop stop : stops) { + float pos = stop.getPos() + offset; + Color color = stop.getColor(); + if(pos >= height) { + float t = (height - lastPos) / (pos - lastPos); + setColor(tintStack, lastColor, color, t); + break outer; + } + tintStack.setColor(color); + GL11.glVertex2f(x , y + pos); + GL11.glVertex2f(x + width, y + pos); + lastPos = pos; + lastColor = color; + } + offset += endPos; + }while(wrap == Wrap.REPEAT); + GL11.glVertex2f(x , y + height); + GL11.glVertex2f(x + width, y + height); + } + GL11.glEnd(); + GL11.glEnable(GL11.GL_TEXTURE_2D); + } + + private static void setColor(TintStack tintStack, Color a, Color b, float t) { + tintStack.setColor( + mix(a.getRed(), b.getRed(), t), + mix(a.getGreen(), b.getGreen(), t), + mix(a.getBlue(), b.getBlue(), t), + mix(a.getAlpha(), b.getAlpha(), t)); + } + + private static float mix(int a, int b, float t) { + return a + (b-a) * t; + } + +} diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java index d0afd5a..e9b0abc 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -32,36 +32,31 @@ import de.matthiasmann.twl.renderer.AttributedStringFontCache; import de.matthiasmann.twl.renderer.lwjgl.LWJGLFont.FontState; import java.nio.FloatBuffer; -import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GL11; /** * * @author Matthias Mann */ -public class LWJGLAttributedStringFontCache implements AttributedStringFontCache { +class LWJGLAttributedStringFontCache extends VertexArray implements AttributedStringFontCache { final LWJGLRenderer renderer; final BitmapFont font; int width; int height; - FloatBuffer va; private Run[] runs; private int numRuns; - public LWJGLAttributedStringFontCache(LWJGLRenderer renderer, BitmapFont font) { + LWJGLAttributedStringFontCache(LWJGLRenderer renderer, BitmapFont font) { this.renderer = renderer; this.font = font; this.runs = new Run[8]; } - void allocateVA(int maxGlyphs) { - int capacity = 4 * 4 * maxGlyphs; - if(va == null || va.capacity() < capacity) { - va = BufferUtils.createFloatBuffer(capacity); - } - va.clear(); + @Override + public FloatBuffer allocate(int maxGlyphs) { numRuns = 0; + return super.allocate(maxGlyphs); } Run addRun() { @@ -96,12 +91,7 @@ public int getHeight() { public void draw(int x, int y) { if(font.bind()) { - va.position(2); - GL11.glVertexPointer(2, 4*4, va); - va.position(0); - GL11.glTexCoordPointer(2, 4*4, va); - GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); - GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + bind(); GL11.glPushMatrix(); GL11.glTranslatef(x, y, 0f); final TintStack tintStack = renderer.tintStack; @@ -116,7 +106,7 @@ public void draw(int x, int y) { tintStack.setColor(state.color); if(numVertices > 0) { - GL11.glDrawArrays(GL11.GL_QUADS, idx, numVertices); + drawVertices(idx, numVertices); idx += numVertices; } @@ -126,8 +116,7 @@ public void draw(int x, int y) { } } finally { GL11.glPopMatrix(); - GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); - GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + unbind(); } } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java index 0fd7792..0324e62 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java @@ -30,6 +30,7 @@ package de.matthiasmann.twl.renderer.lwjgl; import de.matthiasmann.twl.renderer.CacheContext; +import de.matthiasmann.twl.utils.PNGDecoder; import java.io.IOException; import java.io.InputStream; import java.net.URL; @@ -76,7 +77,7 @@ LWJGLTexture createTexture(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture InputStream is = textureUrl.openStream(); try { PNGDecoder dec = new PNGDecoder(is); - fmt = dec.decideTextureFormat(fmt); + fmt = decideTextureFormat(dec, fmt); int width = dec.getWidth(); int height = dec.getHeight(); int maxTextureSize = renderer.maxTextureSize; @@ -95,7 +96,7 @@ LWJGLTexture createTexture(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture int stride = width * fmt.getPixelSize(); ByteBuffer buf = BufferUtils.createByteBuffer(stride * height); - dec.decode(buf, stride, fmt); + dec.decode(buf, stride, fmt.getPngFormat()); buf.flip(); if(tpp != null) { @@ -145,4 +146,47 @@ public void destroy() { } } + private static LWJGLTexture.Format decideTextureFormat(PNGDecoder decoder, LWJGLTexture.Format fmt) { + if(fmt == LWJGLTexture.Format.COLOR) { + fmt = autoColorFormat(decoder); + } + + PNGDecoder.Format pngFormat = decoder.decideTextureFormat(fmt.getPngFormat()); + if(fmt.pngFormat == pngFormat) { + return fmt; + } + + switch(pngFormat) { + case ALPHA: + return LWJGLTexture.Format.ALPHA; + case LUMINANCE: + return LWJGLTexture.Format.LUMINANCE; + case LUMINANCE_ALPHA: + return LWJGLTexture.Format.LUMINANCE_ALPHA; + case RGB: + return LWJGLTexture.Format.RGB; + case RGBA: + return LWJGLTexture.Format.RGBA; + case BGRA: + return LWJGLTexture.Format.BGRA; + case ABGR: + return LWJGLTexture.Format.ABGR; + default: + throw new UnsupportedOperationException("PNGFormat not handled: " + pngFormat); + } + } + + private static LWJGLTexture.Format autoColorFormat(PNGDecoder decoder) { + if(decoder.hasAlpha()) { + if(decoder.isRGB()) { + return LWJGLTexture.Format.ABGR; + } else { + return LWJGLTexture.Format.LUMINANCE_ALPHA; + } + } else if(decoder.isRGB()) { + return LWJGLTexture.Format.ABGR; + } else { + return LWJGLTexture.Format.LUMINANCE; + } + } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java index a961579..90f3e04 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -48,10 +48,11 @@ public class LWJGLDynamicImage extends TextureAreaBase implements DynamicImage { private final Color tintColor; private int id; - public LWJGLDynamicImage(LWJGLRenderer renderer, int target, int id, int width, int height, Color tintColor) { + public LWJGLDynamicImage(LWJGLRenderer renderer, int target, int id, + int width, int height, int texWidth, int texHeight, Color tintColor) { super(0, 0, width, height, - (target == GL11.GL_TEXTURE_2D) ? width : 1f, - (target == GL11.GL_TEXTURE_2D) ? height : 1f); + (target == GL11.GL_TEXTURE_2D) ? texWidth : 1f, + (target == GL11.GL_TEXTURE_2D) ? texHeight : 1f); this.renderer = renderer; this.tintColor = tintColor; @@ -59,9 +60,17 @@ public LWJGLDynamicImage(LWJGLRenderer renderer, int target, int id, int width, this.id = id; } + LWJGLDynamicImage(LWJGLDynamicImage src, Color tintColor) { + super(src); + this.renderer = src.renderer; + this.tintColor = tintColor; + this.target = src.target; + this.id = src.id; + } + public void destroy() { if(id != 0) { - renderer.glDeleteTexture(id); + GL11.glDeleteTextures(id); renderer.dynamicImages.remove(this); } } @@ -118,7 +127,7 @@ public Image createTintedVersion(Color color) { if(newTintColor.equals(tintColor)) { return this; } - return new LWJGLDynamicImage(renderer, target, id, getWidth(), getHeight(), newTintColor); + return new LWJGLDynamicImage(this, newTintColor); } public void draw(AnimationState as, int x, int y) { diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java index 462d7a4..8ff23a5 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -38,11 +38,9 @@ import de.matthiasmann.twl.renderer.Font2; import de.matthiasmann.twl.renderer.FontCache; import de.matthiasmann.twl.renderer.FontParameter; -import de.matthiasmann.twl.utils.StateExpression; import de.matthiasmann.twl.utils.StateSelect; import de.matthiasmann.twl.utils.TextUtil; -import java.util.Collection; -import java.util.Map; +import java.nio.FloatBuffer; /** * @@ -55,10 +53,10 @@ public class LWJGLFont implements Font, Font2 { private final LWJGLRenderer renderer; private final BitmapFont font; - public final FontState[] fontStates; + private final FontState[] fontStates; private final StateSelect stateSelect; private int[] multiLineInfo; - + public LWJGLFont clone() { return new LWJGLFont(this); @@ -72,76 +70,24 @@ private LWJGLFont(LWJGLFont oldFont) fontStates = new FontState[oldFont.fontStates.length]; for (int i = 0; i < fontStates.length; i++) { FontState oldState = oldFont.fontStates[i]; - fontStates[i] = new FontState(oldState.color,oldState.offsetX,oldState.offsetY,oldState.style,oldState.underlineOffset); + fontStates[i] = new FontState(oldState); } } - - LWJGLFont(LWJGLRenderer renderer, BitmapFont font, Map params, Collection condParams) { + + + LWJGLFont(LWJGLRenderer renderer, BitmapFont font, StateSelect select, FontParameter ... parameterList) { this.renderer = renderer; this.font = font; + this.stateSelect = select; + this.fontStates = new FontState[parameterList.length]; - StateExpression[] expr = new StateExpression[condParams.size()]; - fontStates = new FontState[expr.length + 1]; - - int idx = 0; - for(FontParameter p : condParams) { - fontStates[idx] = createFontState(p.getParams(), params); - expr[idx++] = p.getCondition(); - } - fontStates[idx] = createFontState(params, null); - stateSelect = new StateSelect(expr); - } - - private FontState createFontState(Map params, Map baseParams) { - String colorStr = get(params, baseParams, "color"); - Color color; - if(colorStr == null) { - color = Color.WHITE; - } else { - color = Color.parserColor(colorStr); - if(color == null) { - throw new IllegalArgumentException("unknown color name: " + colorStr); - } + for(int i=0 ; i params, Map baseParams, String key) { - String value = params.get(key); - // use contains to mimick behavior of putAll - if(value == null && baseParams != null && !params.containsKey(key)) { - value = baseParams.get(key); - } - return value; } - private static int parseInt(String valueStr, int defaultValue) { - if(valueStr == null) { - return defaultValue; - } - return Integer.parseInt(valueStr); - } - - private static boolean parseBoolean(String valueStr) { - if(valueStr == null) { - return false; - } - return Boolean.parseBoolean(valueStr); - } - public FontState evalFontState(AnimationState as) { - return fontStates[stateSelect.evaluate(as, stateSelect.getNumExpressions())]; + return fontStates[stateSelect.evaluate(as)]; } private int[] getMultiLineInfo(int numLines) { @@ -365,7 +311,7 @@ private AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, if(cache == null) { cache = new LWJGLAttributedStringFontCache(renderer, font); } - cache.allocateVA(end - start); + FloatBuffer va = cache.allocate(end - start); attributedString.setPosition(start); BitmapFont.Glyph lastGlyph = null; int x = 0; @@ -397,7 +343,7 @@ private AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, } lastGlyph = g; if(g.width > 0 && g.height > 0) { - g.draw(cache.va, x, y); + g.draw(va, x, y); runLength++; } x += g.xadvance; @@ -435,20 +381,46 @@ private AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, return cache; } - public static class FontState { - Color color; - int offsetX; - int offsetY; - int style; - int underlineOffset; - - public FontState(Color color, int offsetX, int offsetY, int style, int underlineOffset) { - this.color = color; - this.offsetX = offsetX; - this.offsetY = offsetY; - this.style = style; - this.underlineOffset = underlineOffset; - } + public static class FontState { + Color color; + int offsetX; + int offsetY; + int style; + int underlineOffset; + + FontState(FontParameter fontParam) { + int lineStyle = 0; + if (fontParam.get(FontParameter.UNDERLINE)) { + lineStyle |= STYLE_UNDERLINE; + } + if (fontParam.get(FontParameter.LINETHROUGH)) { + lineStyle |= STYLE_LINETHROUGH; + } + + this.color = fontParam.get(FontParameter.COLOR); + this.offsetX = fontParam.get(LWJGLRenderer.FONTPARAM_OFFSET_X); + this.offsetY = fontParam.get(LWJGLRenderer.FONTPARAM_OFFSET_Y); + this.style = lineStyle; + this.underlineOffset = fontParam + .get(LWJGLRenderer.FONTPARAM_UNDERLINE_OFFSET); + } + + public FontState(FontState oldState) { + this.color = oldState.color; + this.offsetX = oldState.offsetX; + this.offsetY = oldState.offsetY; + this.style = oldState.style; + this.underlineOffset = oldState.underlineOffset; + } + + public FontState(Color color, int offsetX, int offsetY, int style, + int underlineOffset) { + this.color = color; + this.offsetX = offsetX; + this.offsetY = offsetY; + this.style = style; + this.underlineOffset = underlineOffset; + } public Color getColor() { return color; @@ -501,5 +473,6 @@ public void setLineThrough(boolean val) { style ^= 2; } } - } + + } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java index 5bfa7d3..80280c3 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -37,21 +37,23 @@ import de.matthiasmann.twl.renderer.CacheContext; import de.matthiasmann.twl.renderer.DynamicImage; import de.matthiasmann.twl.renderer.FontParameter; +import de.matthiasmann.twl.renderer.Gradient; +import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.renderer.MouseCursor; import de.matthiasmann.twl.renderer.Font; +import de.matthiasmann.twl.renderer.FontMapper; import de.matthiasmann.twl.renderer.LineRenderer; import de.matthiasmann.twl.renderer.OffscreenRenderer; import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.renderer.Texture; import de.matthiasmann.twl.utils.ClipStack; +import de.matthiasmann.twl.utils.StateSelect; import java.io.IOException; import java.net.URL; import java.nio.ByteBuffer; import java.nio.IntBuffer; import java.util.ArrayList; -import java.util.Collection; import java.util.Locale; -import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; import org.lwjgl.BufferUtils; @@ -79,6 +81,10 @@ public class LWJGLRenderer implements Renderer, LineRenderer { public static final StateKey STATE_MIDDLE_MOUSE_BUTTON = StateKey.get("middleMouseButton"); public static final StateKey STATE_RIGHT_MOUSE_BUTTON = StateKey.get("rightMouseButton"); + public static final FontParameter.Parameter FONTPARAM_OFFSET_X = FontParameter.newParameter("offsetX", 0); + public static final FontParameter.Parameter FONTPARAM_OFFSET_Y = FontParameter.newParameter("offsetY", 0); + public static final FontParameter.Parameter FONTPARAM_UNDERLINE_OFFSET = FontParameter.newParameter("underlineOffset", 0); + private final IntBuffer ib16; final int maxTextureSize; @@ -95,13 +101,14 @@ public class LWJGLRenderer implements Renderer, LineRenderer { private int mouseX; private int mouseY; private LWJGLCacheContext cacheContext; + private FontMapper fontMapper; final SWCursorAnimState swCursorAnimState; final ArrayList textureAreas; final ArrayList rotatedTextureAreas; final ArrayList dynamicImages; - TintStack tintStack; + protected TintStack tintStack; protected final ClipStack clipStack; protected final Rect clipRectTemp; @@ -338,34 +345,21 @@ public int getViewportY() { return viewportBottom - height; } - /** - * Loads a font (either BMFont XML or ASCII format). - *

    If the parameter @code "filename"} is specified then it will be resolved - * against the specified URL, otherwise the URL is used directly.

    - *

    The parameter {@code "color"} is required and must be in a format - * parsable by {@link Color#parserColor(java.lang.String)}

    - * @param url the url for the font file - * @param parameter a list of parameters for loading this font - * @param conditionalParameter condition parameters for use with {@link AnimationState} - * @return a Font object - * @throws IOException if the font could not be loaded - */ - public Font loadFont(URL url, Map parameter, Collection conditionalParameter) throws IOException { + public Font loadFont(URL url, StateSelect select, FontParameter ... parameterList) throws IOException { if(url == null) { throw new NullPointerException("url"); } - if(parameter == null) { - throw new NullPointerException("parameter"); + if(select == null) { + throw new NullPointerException("select"); } - if(conditionalParameter == null) { - throw new NullPointerException("conditionalParameter"); + if(parameterList == null) { + throw new NullPointerException("parameterList"); } - String fileName = parameter.get("filename"); - if(fileName != null) { - url = new URL(url, fileName); + if(select.getNumExpressions() + 1 != parameterList.length) { + throw new IllegalArgumentException("select.getNumExpressions() + 1 != parameterList.length"); } BitmapFont bmFont = activeCacheContext().loadBitmapFont(url); - return new LWJGLFont(this, bmFont, parameter, conditionalParameter); + return new LWJGLFont(this, bmFont, select, parameterList); } public Texture loadTexture(URL url, String formatStr, String filterStr) throws IOException { @@ -396,6 +390,21 @@ public OffscreenRenderer getOffscreenRenderer() { return null; } + public FontMapper getFontMapper() { + return fontMapper; + } + + /** + * Installs a font mapper. It is the responsibility of the font mapper to + * manage the OpenGL state correctly so that normal rendering by LWJGLRenderer + * is not disturbed. + * + * @param fontMapper the font mapper object - can be null. + */ + public void setFontMapper(FontMapper fontMapper) { + this.fontMapper = fontMapper; + } + public DynamicImage createDynamicImage(int width, int height) { if(width <= 0) { throw new IllegalArgumentException("width"); @@ -404,44 +413,54 @@ public DynamicImage createDynamicImage(int width, int height) { throw new IllegalArgumentException("height"); } if(width > maxTextureSize || height > maxTextureSize) { + getLogger().log(Level.WARNING, "requested size {0} x {1} exceeds maximum texture size {3}", + new Object[]{ width, height, maxTextureSize }); return null; } + int texWidth = width; + int texHeight = height; + ContextCapabilities caps = GLContext.getCapabilities(); boolean useTextureRectangle = caps.GL_EXT_texture_rectangle || caps.GL_ARB_texture_rectangle; if(!useTextureRectangle && !caps.GL_ARB_texture_non_power_of_two) { - if((width & (width-1)) != 0 || (height & (height-1)) != 0) { - return null; - } + texWidth = nextPowerOf2(width); + texHeight = nextPowerOf2(height); } // ARB and EXT versions use the same enum ! int proxyTarget = useTextureRectangle ? EXTTextureRectangle.GL_PROXY_TEXTURE_RECTANGLE_EXT : GL11.GL_PROXY_TEXTURE_2D; - GL11.glTexImage2D(proxyTarget, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); + GL11.glTexImage2D(proxyTarget, 0, GL11.GL_RGBA, texWidth, texHeight, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); ib16.clear(); GL11.glGetTexLevelParameter(proxyTarget, 0, GL11.GL_TEXTURE_WIDTH, ib16); - if(ib16.get(0) != width) { + if(ib16.get(0) != texWidth) { + getLogger().log(Level.WARNING, "requested size {0} x {1} failed proxy texture test", + new Object[]{ texWidth, texHeight }); return null; } // ARB and EXT versions use the same enum ! int target = useTextureRectangle ? EXTTextureRectangle.GL_TEXTURE_RECTANGLE_EXT : GL11.GL_TEXTURE_2D; - int id = glGenTexture(); + int id = GL11.glGenTextures(); GL11.glBindTexture(target, id); - GL11.glTexImage2D(target, 0, GL11.GL_RGBA, width, height, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); + GL11.glTexImage2D(target, 0, GL11.GL_RGBA, texWidth, texHeight, 0, GL11.GL_RGBA, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); GL11.glTexParameteri(target, GL11.GL_TEXTURE_MAG_FILTER, GL11.GL_NEAREST); GL11.glTexParameteri(target, GL11.GL_TEXTURE_MIN_FILTER, GL11.GL_NEAREST); - LWJGLDynamicImage image = new LWJGLDynamicImage(this, target, id, width, height, Color.WHITE); + LWJGLDynamicImage image = new LWJGLDynamicImage(this, target, id, width, height, texWidth, texHeight, Color.WHITE); dynamicImages.add(image); return image; } + public Image createGradient(Gradient gradient) { + return new GradientImage(this, gradient); + } + public void clipEnter(int x, int y, int w, int h) { clipStack.push(x, y, w, h); setClipRect(); @@ -475,8 +494,7 @@ public void setCursor(MouseCursor cursor) { } } } catch(LWJGLException ex) { - Logger.getLogger(LWJGLRenderer.class.getName()).log(Level.WARNING, - "Could not set native cursor", ex); + getLogger().log(Level.WARNING, "Could not set native cursor", ex); } } @@ -603,10 +621,10 @@ protected boolean isMouseInsideWindow() { } protected void getTintedColor(Color color, float[] result) { - result[0] = tintStack.r*(color.getR()&255); - result[1] = tintStack.g*(color.getG()&255); - result[2] = tintStack.b*(color.getB()&255); - result[3] = tintStack.a*(color.getA()&255); + result[0] = tintStack.r*color.getRed(); + result[1] = tintStack.g*color.getGreen(); + result[2] = tintStack.b*color.getBlue(); + result[3] = tintStack.a*color.getAlpha(); } /** @@ -635,27 +653,43 @@ public void setClipRect() { } } - Logger getLogger() { - return Logger.getLogger(LWJGLRenderer.class.getName()); + /** + * Retrieves the active clip region from the top of the stack + * @param rect the rect coordinates - may not be updated when clipping is disabled + * @return true if clipping is active, false if clipping is disabled + */ + public boolean getClipRect(Rect rect) { + return clipStack.getClipRect(rect); } - int glGenTexture() { - ib16.clear().limit(1); - GL11.glGenTextures(ib16); - return ib16.get(0); + Logger getLogger() { + return Logger.getLogger(LWJGLRenderer.class.getName()); } - - void glDeleteTexture(int id) { - ib16.clear(); - ib16.put(id).flip(); - GL11.glDeleteTextures(ib16); + + /** + * If the passed value is not a power of 2 then return the next highest power of 2 + * otherwise the value is returned unchanged. + * + *

    Warren Jr., Henry S. (2002). Hacker's Delight. Addison Wesley. pp. 48. ISBN 978-0201914658

    + * + * @param i a non negative number <= 2^31 + * @return the smallest power of 2 which is >= i + */ + private static int nextPowerOf2(int i) { + i--; + i |= (i >> 1); + i |= (i >> 2); + i |= (i >> 4); + i |= (i >> 8); + i |= (i >> 16); + return i+1; } private static class SWCursorAnimState implements AnimationState { private final long[] lastTime; private final boolean[] active; - public SWCursorAnimState() { + SWCursorAnimState() { lastTime = new long[3]; active = new boolean[3]; } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java index 4c02487..6b89ec4 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -103,50 +103,46 @@ public enum Filter { public LWJGLTexture(LWJGLRenderer renderer, int width, int height, ByteBuffer buf, Format fmt, Filter filter) { - Util.checkGLError(); this.renderer = renderer; if(width <= 0 || height <= 0) { throw new IllegalArgumentException("size <= 0"); } - id = renderer.glGenTexture(); - Util.checkGLError(); + id = GL11.glGenTextures(); if(id == 0) { throw new OpenGLException("failed to allocate texture ID"); } + GL11.glBindTexture(GL11.GL_TEXTURE_2D, id); - Util.checkGLError(); GL11.glPixelStorei(GL11.GL_UNPACK_ROW_LENGTH, 0); - Util.checkGLError(); GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); - Util.checkGLError(); + if(GLContext.getCapabilities().OpenGL12) { GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE); - Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE); } else { GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); - Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); } - Util.checkGLError(); + GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, filter.glValue); - Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, filter.glValue); - Util.checkGLError(); + this.texWidth = roundUpPOT(width); this.texHeight = roundUpPOT(height); - Util.checkGLError(); + if(texWidth != width || texHeight != height) { GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, fmt.glInternalFormat, texWidth, texHeight, 0, fmt.glFormat, GL11.GL_UNSIGNED_BYTE, (ByteBuffer)null); - Util.checkGLError(); - GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, - 0, 0, width, height, fmt.glFormat, - GL11.GL_UNSIGNED_BYTE, buf); + if(buf != null) { + Util.checkGLError(); + GL11.glTexSubImage2D(GL11.GL_TEXTURE_2D, 0, + 0, 0, width, height, fmt.glFormat, + GL11.GL_UNSIGNED_BYTE, buf); + } } else { GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, fmt.glInternalFormat, texWidth, texHeight, @@ -165,7 +161,7 @@ public void destroy() { if(id != 0) { // make sure that our texture is not bound when we try to delete it GL11.glBindTexture(GL11.GL_TEXTURE_2D, 0); - renderer.glDeleteTexture(id); + GL11.glDeleteTextures(id); id = 0; } if(cursors != null) { @@ -192,7 +188,7 @@ public int getTexHeight() { return texHeight; } - boolean bind(Color color) { + public boolean bind(Color color) { if(id != 0) { GL11.glBindTexture(GL11.GL_TEXTURE_2D, id); renderer.tintStack.setColor(color); @@ -201,7 +197,7 @@ boolean bind(Color color) { return false; } - boolean bind() { + public boolean bind() { if(id != 0) { GL11.glBindTexture(GL11.GL_TEXTURE_2D, id); return true; diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.java deleted file mode 100644 index 1c8086c..0000000 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.java +++ /dev/null @@ -1,94 +0,0 @@ -/* - * Copyright (c) 2008-2010, Matthias Mann - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Matthias Mann nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package de.matthiasmann.twl.renderer.lwjgl; - -import java.io.IOException; -import java.io.InputStream; -import java.nio.ByteBuffer; - -/** - * Delegates to de.matthiasmann.twl.utils.PNGDecoder. - * - * @author Matthias Mann - */ -public class PNGDecoder extends de.matthiasmann.twl.utils.PNGDecoder { - - public PNGDecoder(InputStream input) throws IOException { - super(input); - } - - public LWJGLTexture.Format decideTextureFormat(LWJGLTexture.Format fmt) { - if(fmt == LWJGLTexture.Format.COLOR) { - fmt = autoColorFormat(); - } - - Format pngFormat = super.decideTextureFormat(fmt.getPngFormat()); - if(fmt.pngFormat == pngFormat) { - return fmt; - } - - switch(pngFormat) { - case ALPHA: - return LWJGLTexture.Format.ALPHA; - case LUMINANCE: - return LWJGLTexture.Format.LUMINANCE; - case LUMINANCE_ALPHA: - return LWJGLTexture.Format.LUMINANCE_ALPHA; - case RGB: - return LWJGLTexture.Format.RGB; - case RGBA: - return LWJGLTexture.Format.RGBA; - case BGRA: - return LWJGLTexture.Format.BGRA; - case ABGR: - return LWJGLTexture.Format.ABGR; - default: - throw new UnsupportedOperationException("PNGFormat not handled: " + pngFormat); - } - } - - private LWJGLTexture.Format autoColorFormat() { - if(hasAlpha()) { - if(isRGB()) { - return LWJGLTexture.Format.ABGR; - } else { - return LWJGLTexture.Format.LUMINANCE_ALPHA; - } - } else if(isRGB()) { - return LWJGLTexture.Format.ABGR; - } else { - return LWJGLTexture.Format.LUMINANCE; - } - } - - public void decode(ByteBuffer buffer, int stride, LWJGLTexture.Format fmt) throws IOException { - super.decode(buffer, stride, fmt.getPngFormat()); - } -} diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java index 58e7a58..2580162 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -51,17 +51,17 @@ public class TextureAreaBase { this.height = (short)Math.abs(height); float fx = x; float fy = y; - if(width == 1) { + if(width == 1 || width == -1) { fx += 0.5f; width = 0; - } else if(width < -1) { - fx -= width + 1; + } else if(width < 0) { + fx -= width; } - if(height == 1) { + if(height == 1 || height == -1) { fy += 0.5f; height = 0; - } else if(height < -1) { - fy -= height + 1; + } else if(height < 0) { + fy -= height; } this.tx0 = fx / texWidth; this.ty0 = fy / texHeight; diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java index 28477e4..135366a 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java @@ -45,6 +45,7 @@ public class TintStack { TintStack next; float r,g,b,a; + @SuppressWarnings("LeakingThisInConstructor") public TintStack() { this.prev = this; this.r = ONE_OVER_255; @@ -79,6 +80,14 @@ public TintStack push(float r, float g, float b, float a) { return next; } + public TintStack push(Color color) { + return push( + color.getRedFloat(), + color.getGreenFloat(), + color.getBlueFloat(), + color.getAlphaFloat()); + } + public TintStack pop() { return prev; } @@ -106,9 +115,25 @@ public float getA() { */ public void setColor(Color color) { GL11.glColor4f( - r*(color.getR()&255), - g*(color.getG()&255), - b*(color.getB()&255), - a*(color.getA()&255)); + r*color.getRed(), + g*color.getGreen(), + b*color.getBlue(), + a*color.getAlpha()); + } + + /** + * GL11.glColor4f(color * tint); + * + * @param r the red component 0..255 + * @param g the green component 0..255 + * @param b the blue component 0..255 + * @param a the alpha component 0..255 + */ + public void setColor(float r, float g, float b, float a) { + GL11.glColor4f( + this.r * r, + this.g * g, + this.b * b, + this.a * a); } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/VertexArray.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/VertexArray.java new file mode 100644 index 0000000..a5535eb --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/VertexArray.java @@ -0,0 +1,78 @@ +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer.lwjgl; + +import java.nio.FloatBuffer; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; + +/** + * Simple vertex array class. + * + *

    This class manages an interleaved vertex array in float format: {@code tx, ty, x, y}

    + * + * @author Matthias Mann + */ +public class VertexArray { + + private FloatBuffer va; + + public FloatBuffer allocate(int maxQuads) { + int capacity = 4 * 4 * maxQuads; + if(va == null || va.capacity() < capacity) { + va = BufferUtils.createFloatBuffer(capacity); + } + va.clear(); + return va; + } + + public void bind() { + va.position(2); + GL11.glVertexPointer(2, 4*4, va); + va.position(0); + GL11.glTexCoordPointer(2, 4*4, va); + GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); + GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + } + + public void drawVertices(int start, int count) { + GL11.glDrawArrays(GL11.GL_QUADS, start, count); + } + + public void drawQuads(int start, int count) { + GL11.glDrawArrays(GL11.GL_QUADS, start*4, count*4); + } + + public void unbind() { + GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); + GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + } + +} diff --git a/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java b/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java index d1b361d..82b6b6b 100644 --- a/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java +++ b/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -29,6 +29,7 @@ */ package de.matthiasmann.twl.textarea; +import de.matthiasmann.twl.utils.StringList; import de.matthiasmann.twl.Color; import de.matthiasmann.twl.utils.ParameterStringParser; import de.matthiasmann.twl.utils.TextUtil; @@ -78,18 +79,30 @@ protected void parseCSSAttribute(String key, String value) { parseBox(key.substring(7), value, StyleAttribute.PADDING); return; } + if(key.startsWith("font")) { + parseFont(key, value); + return; + } if("text-indent".equals(key)) { parseValueUnit(StyleAttribute.TEXT_INDENT, value); return; } - if("font-family".equals(key) || "font".equals(key) || "-twl-font".equals(key)) { - put(StyleAttribute.FONT_NAME, stripQuotes(value.trim())); + if("-twl-font".equals(key)) { + put(StyleAttribute.FONT_FAMILIES, new StringList(value)); + return; + } + if("-twl-hover".equals(key)) { + parseEnum(StyleAttribute.INHERIT_HOVER, INHERITHOVER, value); return; } if("text-align".equals(key)) { parseEnum(StyleAttribute.HORIZONTAL_ALIGNMENT, value); return; } + if("text-decoration".equals(key)) { + parseEnum(StyleAttribute.TEXT_DECORATION, TEXTDECORATION, value); + return; + } if("vertical-align".equals(key)) { parseEnum(StyleAttribute.VERTICAL_ALIGNMENT, value); return; @@ -142,6 +155,10 @@ protected void parseCSSAttribute(String key, String value) { parseColor(StyleAttribute.COLOR, value); return; } + if("tab-size".equals(key) || "-moz-tab-size".equals(key)) { + parseInteger(StyleAttribute.TAB_SIZE, value); + return; + } throw new IllegalArgumentException("Unsupported key: " + key); } @@ -186,12 +203,48 @@ private void parseBox(String key, String value, BoxAttribute box) { } } } - + + private void parseFont(String key, String value) { + if("font-family".equals(key)) { + parseList(StyleAttribute.FONT_FAMILIES, value); + return; + } + if("font-weight".equals(key)) { + Integer weight = WEIGHTS.get(value); + if(weight == null) { + weight = Integer.valueOf(value); + } + put(StyleAttribute.FONT_WEIGHT, weight); + return; + } + if("font-size".equals(key)) { + parseValueUnit(StyleAttribute.FONT_SIZE, value); + return; + } + if("font-style".equals(key)) { + parseEnum(StyleAttribute.FONT_ITALIC, ITALIC, value); + return; + } + if("font".equals(key)) { + value = parseStartsWith(StyleAttribute.FONT_WEIGHT, WEIGHTS, value); + value = parseStartsWith(StyleAttribute.FONT_ITALIC, ITALIC, value); + if(value.length() > 0 && Character.isDigit(value.charAt(0))) { + int end = TextUtil.indexOf(value, ' ', 0); + parseValueUnit(StyleAttribute.FONT_SIZE, value.substring(0, end)); + end = TextUtil.skipSpaces(value, end); + value = value.substring(end); + } + parseList(StyleAttribute.FONT_FAMILIES, value); + } + } + private Value parseValueUnit(String value) { Value.Unit unit; int suffixLength = 2; if(value.endsWith("px")) { unit = Value.Unit.PX; + } else if(value.endsWith("pt")) { + unit = Value.Unit.PT; } else if(value.endsWith("em")) { unit = Value.Unit.EM; } else if(value.endsWith("ex")) { @@ -207,7 +260,7 @@ private Value parseValueUnit(String value) { throw new IllegalArgumentException("Unknown numeric suffix: " + value); } - String numberPart = value.substring(0, value.length() - suffixLength).trim(); + String numberPart = TextUtil.trim(value, 0, value.length() - suffixLength); return new Value(Float.parseFloat(numberPart), unit); } @@ -224,6 +277,15 @@ private void parseValueUnit(StyleAttribute attribute, String value) { put(attribute, parseValueUnit(value)); } + private void parseInteger(StyleAttribute attribute, String value) { + if("inherit".equals(value)) { + put(attribute, null); + } else { + int intval = Integer.parseInt(value); + put(attribute, intval); + } + } + private void parseEnum(StyleAttribute attribute, HashMap map, String value) { T obj = map.get(value); if(obj == null) { @@ -236,16 +298,34 @@ private> void parseEnum(StyleAttribute attribute, String va E obj = Enum.valueOf(attribute.getDataType(), value.toUpperCase(Locale.ENGLISH)); put(attribute, obj); } + + private String parseStartsWith(StyleAttribute attribute, HashMap map, String value) { + int end = TextUtil.indexOf(value, ' ', 0); + E obj = map.get(value.substring(0, end)); + if(obj != null) { + end = TextUtil.skipSpaces(value, end); + value = value.substring(end); + } + put(attribute, obj); + return value; + } private void parseURL(StyleAttribute attribute, String value) { + put(attribute, stripURL(value)); + } + + static String stripTrim(String value, int start, int end) { + return TextUtil.trim(value, start, value.length() - end); + } + + static String stripURL(String value) { if(value.startsWith("url(") && value.endsWith(")")) { - value = value.substring(4, value.length() - 1).trim(); - value = stripQuotes(value); + value = stripQuotes(stripTrim(value, 4, 1)); } - put(attribute, value); + return value; } - - private String stripQuotes(String value) { + + static String stripQuotes(String value) { if((value.startsWith("\"") && value.endsWith("\"")) || (value.startsWith("'") && value.endsWith("'"))) { value = value.substring(1, value.length() - 1); @@ -256,11 +336,11 @@ private String stripQuotes(String value) { private void parseColor(StyleAttribute attribute, String value) { Color color; if(value.startsWith("rgb(") && value.endsWith(")")) { - value = value.substring(4, value.length() - 1).trim(); + value = stripTrim(value, 4, 1); byte[] rgb = parseRGBA(value, 3); color = new Color(rgb[0], rgb[1], rgb[2], (byte)255); } else if(value.startsWith("rgba(") && value.endsWith(")")) { - value = value.substring(5, value.length() - 1).trim(); + value = stripTrim(value, 5, 1); byte[] rgba = parseRGBA(value, 4); color = new Color(rgba[0], rgba[1], rgba[2], rgba[3]); } else { @@ -288,7 +368,7 @@ private byte[] parseRGBA(String value, int numElements) { } else { boolean percent = part.endsWith("%"); if(percent) { - part = part.substring(0, part.length()-1).trim(); + part = stripTrim(value, 0, 1); } v = Integer.parseInt(part); if(percent) { @@ -300,9 +380,43 @@ private byte[] parseRGBA(String value, int numElements) { return rgba; } + private void parseList(StyleAttribute attribute, String value) { + put(attribute, parseList(value, 0)); + } + + static StringList parseList(String value, int idx) { + idx = TextUtil.skipSpaces(value, idx); + if(idx >= value.length()) { + return null; + } + + char startChar = value.charAt(idx); + int end; + String part; + + if(startChar == '"' || startChar == '\'') { + ++idx; + end = TextUtil.indexOf(value, startChar, idx); + part = value.substring(idx, end); + end = TextUtil.skipSpaces(value, ++end); + if(end < value.length() && value.charAt(end) != ',') { + throw new IllegalArgumentException("',' expected at " + idx); + } + } else { + end = TextUtil.indexOf(value, ',', idx); + part = TextUtil.trim(value, idx, end); + } + + return new StringList(part, parseList(value, end+1)); + } + static final HashMap PRE = new HashMap(); static final HashMap BREAKWORD = new HashMap(); static final HashMap OLT = new HashMap(); + static final HashMap ITALIC = new HashMap(); + static final HashMap WEIGHTS = new HashMap(); + static final HashMap TEXTDECORATION = new HashMap(); + static final HashMap INHERITHOVER = new HashMap(); static OrderedListType createRoman(final boolean lowercase) { return new OrderedListType() { @@ -339,5 +453,19 @@ public String format(int nr) { OLT.put("lower-norwegian", new OrderedListType("abcdefghijklmnopqrstuvwxyzæøå")); OLT.put("upper-russian-short", new OrderedListType("АБВГДЕЖЗИКЛМНОПРСТУФХЦЧШЩЭЮЯ")); OLT.put("lower-russian-short", new OrderedListType("абвгдежзиклмнопрстуфхцчшщэюя")); + + ITALIC.put("normal", Boolean.FALSE); + ITALIC.put("italic", Boolean.TRUE); + ITALIC.put("oblique", Boolean.TRUE); + + WEIGHTS.put("normal", 400); + WEIGHTS.put("bold", 700); + + TEXTDECORATION.put("none", TextDecoration.NONE); + TEXTDECORATION.put("underline", TextDecoration.UNDERLINE); + TEXTDECORATION.put("line-through", TextDecoration.LINE_THROUGH); + + INHERITHOVER.put("inherit", Boolean.TRUE); + INHERITHOVER.put("normal", Boolean.FALSE); } } diff --git a/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java b/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java index 376d6e0..9c72489 100644 --- a/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java +++ b/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -442,7 +442,7 @@ private TableElement parseTable(XmlPullParser xpp, Style tableStyle) throws XmlP tableElement.setRowStyle(row, rowStyles.get(row)); for(int col=0 ; colJFlex
    1.4.3 - * on 18.11.10 18:09 from the specification file - * parser.flex - */ -class Parser { - - /** This character denotes the end of file */ - public static final int YYEOF = -1; - - /** initial size of the lookahead buffer */ - private static final int ZZ_BUFFERSIZE = 16384; - - /** lexical states */ - public static final int YYSTRING1 = 6; - public static final int YYINITIAL = 0; - public static final int YYSTYLE = 2; - public static final int YYVALUE = 4; - public static final int YYSTRING2 = 8; - - /** - * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l - * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l - * at the beginning of a line - * l is of the form l = 2*k, k a non negative integer - */ -// private static final int ZZ_LEXSTATE[] = { -// 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 -// }; - - /** - * Translates characters to character classes - */ - private static final String ZZ_CMAP_PACKED = - "\11\0\1\3\1\2\1\0\1\3\1\1\22\0\1\3\1\0\1\22"+ - "\1\14\3\0\1\21\2\0\1\5\1\0\1\12\1\6\1\11\1\4"+ - "\12\10\1\17\1\20\2\0\1\13\2\0\32\7\4\0\1\7\1\0"+ - "\32\7\1\15\1\0\1\16\uff82\0"; - - /** - * Translates characters to character classes - */ - private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); - - /** - * Translates DFA states to action switch labels. - */ - private static final int [] ZZ_ACTION = zzUnpackAction(); - - private static final String ZZ_ACTION_PACKED_0 = - "\5\0\1\1\1\2\1\1\1\3\1\1\1\4\1\5"+ - "\1\6\1\7\1\10\1\11\2\12\1\1\1\13\1\14"+ - "\1\15\1\16\1\17\1\20\1\21\1\16\1\22\1\16"+ - "\1\23\4\0"; - - private static int [] zzUnpackAction() { - int [] result = new int[34]; - int offset = 0; - offset = zzUnpackAction(ZZ_ACTION_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAction(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - - /** - * Translates a state to a row index in the transition table - */ - private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); - - private static final String ZZ_ROWMAP_PACKED_0 = - "\0\0\0\23\0\46\0\71\0\114\0\137\0\162\0\205"+ - "\0\137\0\230\0\253\0\137\0\137\0\137\0\137\0\137"+ - "\0\276\0\137\0\321\0\344\0\137\0\137\0\367\0\137"+ - "\0\137\0\137\0\u010a\0\137\0\u011d\0\137\0\u0130\0\u0143"+ - "\0\u0156\0\u0169"; - - private static int [] zzUnpackRowMap() { - int [] result = new int[34]; - int offset = 0; - offset = zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackRowMap(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int high = packed.charAt(i++) << 16; - result[j++] = high | packed.charAt(i++); - } - return j; - } - - /** - * The transition table of the DFA - */ - private static final int [] ZZ_TRANS = zzUnpackTrans(); - - private static final String ZZ_TRANS_PACKED_0 = - "\1\6\3\7\1\10\1\11\1\12\1\13\1\6\1\14"+ - "\1\15\1\16\1\17\1\20\6\6\1\21\2\22\1\10"+ - "\1\6\1\23\1\24\6\6\1\25\1\26\3\6\16\27"+ - "\1\25\1\27\1\30\1\31\1\32\21\33\1\34\1\33"+ - "\22\35\1\36\24\0\3\7\24\0\1\37\24\0\1\13"+ - "\21\0\3\13\14\0\1\22\27\0\1\24\21\0\3\24"+ - "\12\0\16\27\1\0\1\27\3\0\21\33\1\0\1\33"+ - "\22\35\1\0\5\40\1\41\22\40\1\42\15\40\4\0"+ - "\1\22\1\41\15\0\4\40\1\22\1\42\15\40"; - - private static int [] zzUnpackTrans() { - int [] result = new int[380]; - int offset = 0; - offset = zzUnpackTrans(ZZ_TRANS_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackTrans(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - value--; - do result[j++] = value; while (--count > 0); - } - return j; - } - - /** - * ZZ_ATTRIBUTE[aState] contains the attributes of state aState - */ - private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); - - private static final String ZZ_ATTRIBUTE_PACKED_0 = - "\5\0\1\11\2\1\1\11\2\1\5\11\1\1\1\11"+ - "\2\1\2\11\1\1\3\11\1\1\1\11\1\1\1\11"+ - "\4\0"; - - private static int [] zzUnpackAttribute() { - int [] result = new int[34]; - int offset = 0; - offset = zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, offset, result); - return result; - } - - private static int zzUnpackAttribute(String packed, int offset, int [] result) { - int i = 0; /* index in packed string */ - int j = offset; /* index in unpacked array */ - int l = packed.length(); - while (i < l) { - int count = packed.charAt(i++); - int value = packed.charAt(i++); - do result[j++] = value; while (--count > 0); - } - return j; - } - - /** the input device */ - private java.io.Reader zzReader; - - /** the current state of the DFA */ - private int zzState; - - /** the current lexical state */ - private int zzLexicalState = YYINITIAL; - - /** this buffer contains the current text to be matched and is - the source of the yytext() string */ - private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; - - /** the textposition at the last accepting state */ - private int zzMarkedPos; - - /** the current text position in the buffer */ - private int zzCurrentPos; - - /** startRead marks the beginning of the yytext() string in the buffer */ - private int zzStartRead; - - /** endRead marks the last character in the buffer, that has been read - from input */ - private int zzEndRead; - - /** number of newlines encountered up to the start of the matched text */ - private int yyline; - - /** - * the number of characters from the last newline up to the start of the - * matched text - */ - private int yycolumn; - - /** zzAtEOF == true <=> the scanner is at the EOF */ - private boolean zzAtEOF; - - /* user code: */ - static final int EOF = 0; - static final int IDENT = 1; - static final int STAR = 2; - static final int DOT = 3; - static final int HASH = 4; - static final int GT = 5; - static final int COMMA = 6; - static final int STYLE_BEGIN = 7; - static final int STYLE_END = 8; - static final int COLON = 9; - static final int SEMICOLON = 10; - - boolean sawWhitespace; - - final StringBuilder sb = new StringBuilder(); - private void append() { - sb.append(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); - } - - public void unexpected() throws java.io.IOException { - throw new java.io.IOException("Unexpected \""+yytext()+"\" at line "+yyline+", column "+yycolumn); - } - - public void expect(int token) throws java.io.IOException { - if(yylex() != token) unexpected(); - } - - - /** - * Creates a new scanner - * There is also a java.io.InputStream version of this constructor. - * - * @param in the java.io.Reader to read input from. - */ - Parser(java.io.Reader in) { - this.zzReader = in; - } - - /** - * Unpacks the compressed character translation table. - * - * @param packed the packed character translation table - * @return the unpacked character translation table - */ - private static char [] zzUnpackCMap(String packed) { - char [] map = new char[0x10000]; - int i = 0; /* index in packed string */ - int j = 0; /* index in unpacked array */ - while (i < 70) { - int count = packed.charAt(i++); - char value = packed.charAt(i++); - do map[j++] = value; while (--count > 0); - } - return map; - } - - - /** - * Refills the input buffer. - * - * @return false, iff there was new input. - * - * @exception java.io.IOException if any I/O-Error occurs - */ - private boolean zzRefill() throws java.io.IOException { - - /* first: make room (if you can) */ - if (zzStartRead > 0) { - System.arraycopy(zzBuffer, zzStartRead, - zzBuffer, 0, - zzEndRead-zzStartRead); - - /* translate stored positions */ - zzEndRead-= zzStartRead; - zzCurrentPos-= zzStartRead; - zzMarkedPos-= zzStartRead; - zzStartRead = 0; - } - - /* is the buffer big enough? */ - if (zzCurrentPos >= zzBuffer.length) { - /* if not: blow it up */ - char newBuffer[] = new char[zzCurrentPos*2]; - System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); - zzBuffer = newBuffer; - } - - /* finally: fill the buffer with new input */ - int numRead = zzReader.read(zzBuffer, zzEndRead, - zzBuffer.length-zzEndRead); - - if (numRead > 0) { - zzEndRead+= numRead; - return false; - } - // unlikely but not impossible: read 0 characters, but not at end of stream - if (numRead == 0) { - int c = zzReader.read(); - if (c == -1) { - return true; - } else { - zzBuffer[zzEndRead++] = (char) c; - return false; - } - } - - // numRead < 0 - return true; - } - - - /** - * Enters a new lexical state - * - * @param newState the new lexical state - */ - public final void yybegin(int newState) { - zzLexicalState = newState; - } - - - /** - * Returns the text matched by the current regular expression. - */ - public final String yytext() { - return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); - } - - - /** - * Reports an error that occured while scanning. - * - * In a wellformed scanner (no or only correct usage of - * yypushback(int) and a match-all fallback rule) this method - * will only be called with things that "Can't Possibly Happen". - * If this method is called, something is seriously wrong - * (e.g. a JFlex bug producing a faulty scanner etc.). - * - * Usual syntax/scanner level error handling should be done - * in error fallback rules. - * - * @param message the errormessage to display - */ - private void zzScanError(String message) { - throw new Error(message); - } - - - /** - * Resumes scanning until the next regular expression is matched, - * the end of input is encountered or an I/O-Error occurs. - * - * @return the next token - * @exception java.io.IOException if any I/O-Error occurs - */ - public int yylex() throws java.io.IOException { - int zzInput; - int zzAction; - - // cached fields: - int zzCurrentPosL; - int zzMarkedPosL; - int zzEndReadL = zzEndRead; - char [] zzBufferL = zzBuffer; - char [] zzCMapL = ZZ_CMAP; - - int [] zzTransL = ZZ_TRANS; - int [] zzRowMapL = ZZ_ROWMAP; - int [] zzAttrL = ZZ_ATTRIBUTE; - - while (true) { - zzMarkedPosL = zzMarkedPos; - - boolean zzR = false; - for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; - zzCurrentPosL++) { - switch (zzBufferL[zzCurrentPosL]) { - case '\u000B': - case '\u000C': - case '\u0085': - case '\u2028': - case '\u2029': - yyline++; - yycolumn = 0; - zzR = false; - break; - case '\r': - yyline++; - yycolumn = 0; - zzR = true; - break; - case '\n': - if (zzR) - zzR = false; - else { - yyline++; - yycolumn = 0; - } - break; - default: - zzR = false; - yycolumn++; - } - } - - if (zzR) { - // peek one character ahead if it is \n (if we have counted one line too much) - boolean zzPeek; - if (zzMarkedPosL < zzEndReadL) - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - else if (zzAtEOF) - zzPeek = false; - else { - boolean eof = zzRefill(); - zzEndReadL = zzEndRead; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - if (eof) - zzPeek = false; - else - zzPeek = zzBufferL[zzMarkedPosL] == '\n'; - } - if (zzPeek) yyline--; - } - zzAction = -1; - - zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; - -// zzState = ZZ_LEXSTATE[zzLexicalState]; - zzState = zzLexicalState / 2; - - - zzForAction: { - while (true) { - - if (zzCurrentPosL < zzEndReadL) - zzInput = zzBufferL[zzCurrentPosL++]; - else if (zzAtEOF) { - zzInput = YYEOF; - break zzForAction; - } - else { - // store back cached positions - zzCurrentPos = zzCurrentPosL; - zzMarkedPos = zzMarkedPosL; - boolean eof = zzRefill(); - // get translated positions and possibly new buffer - zzCurrentPosL = zzCurrentPos; - zzMarkedPosL = zzMarkedPos; - zzBufferL = zzBuffer; - zzEndReadL = zzEndRead; - if (eof) { - zzInput = YYEOF; - break zzForAction; - } - else { - zzInput = zzBufferL[zzCurrentPosL++]; - } - } - int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; - if (zzNext == -1) break zzForAction; - zzState = zzNext; - - int zzAttributes = zzAttrL[zzState]; - if ( (zzAttributes & 1) == 1 ) { - zzAction = zzState; - zzMarkedPosL = zzCurrentPosL; - if ( (zzAttributes & 8) == 8 ) break zzForAction; - } - - } - } - - // store back cached position - zzMarkedPos = zzMarkedPosL; - - switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { - case 6: - { return COMMA; - } - case 20: break; - case 18: - { yybegin(YYVALUE); sb.append('\''); - } - case 21: break; - case 3: - { sawWhitespace = false; return STAR; - } - case 22: break; - case 16: - { yybegin(YYSTRING1); sb.append('\''); - } - case 23: break; - case 17: - { yybegin(YYSTRING2); sb.append('\"'); - } - case 24: break; - case 14: - { append(); - } - case 25: break; - case 4: - { sawWhitespace = false; return IDENT; - } - case 26: break; - case 19: - { yybegin(YYVALUE); sb.append('\"'); - } - case 27: break; - case 2: - { sawWhitespace = true; - } - case 28: break; - case 12: - { yybegin(YYINITIAL); return STYLE_END; - } - case 29: break; - case 15: - { yybegin(YYSTYLE); return SEMICOLON; - } - case 30: break; - case 13: - { yybegin(YYVALUE); sb.setLength(0); return COLON; - } - case 31: break; - case 7: - { return GT; - } - case 32: break; - case 9: - { yybegin(YYSTYLE); return STYLE_BEGIN; - } - case 33: break; - case 11: - { return IDENT; - } - case 34: break; - case 1: - { unexpected(); - } - case 35: break; - case 5: - { return DOT; - } - case 36: break; - case 8: - { return HASH; - } - case 37: break; - case 10: - { /* ignore */ - } - case 38: break; - default: - if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { - zzAtEOF = true; - { - return EOF; - } - } - else { - zzScanError("Error: could not match input"); - } - } - } - } - - -} +/* The following code was generated by JFlex 1.4.3 on 03.01.12 11:50 */ + +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.textarea; + + +/** + * This class is a scanner generated by + * JFlex 1.4.3 + * on 03.01.12 11:50 from the specification file + * parser.flex + */ +class Parser { + + /** This character denotes the end of file */ + public static final int YYEOF = -1; + + /** initial size of the lookahead buffer */ + private static final int ZZ_BUFFERSIZE = 16384; + + /** lexical states */ + public static final int YYSTRING1 = 6; + public static final int YYINITIAL = 0; + public static final int YYSTYLE = 2; + public static final int YYVALUE = 4; + public static final int YYSTRING2 = 8; + + /** + * ZZ_LEXSTATE[l] is the state in the DFA for the lexical state l + * ZZ_LEXSTATE[l+1] is the state in the DFA for the lexical state l + * at the beginning of a line + * l is of the form l = 2*k, k a non negative integer + */ +// private static final int ZZ_LEXSTATE[] = { +// 0, 0, 1, 1, 2, 2, 3, 3, 4, 4 +// }; + + /** + * Translates characters to character classes + */ + private static final String ZZ_CMAP_PACKED = + "\11\0\1\3\1\2\1\0\1\3\1\1\22\0\1\3\1\0\1\23"+ + "\1\14\3\0\1\22\2\0\1\5\1\0\1\12\1\6\1\11\1\4"+ + "\12\10\1\15\1\21\2\0\1\13\1\0\1\16\32\7\4\0\1\7"+ + "\1\0\32\7\1\17\1\0\1\20\uff82\0"; + + /** + * Translates characters to character classes + */ + private static final char [] ZZ_CMAP = zzUnpackCMap(ZZ_CMAP_PACKED); + + /** + * Translates DFA states to action switch labels. + */ + private static final int [] ZZ_ACTION = zzUnpackAction(); + + private static final String ZZ_ACTION_PACKED_0 = + "\5\0\1\1\1\2\1\1\1\3\1\1\1\4\1\5"+ + "\1\6\1\7\1\10\1\11\1\12\1\13\2\14\1\1"+ + "\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1\20"+ + "\1\24\1\20\1\25\4\0"; + + private static int [] zzUnpackAction() { + int [] result = new int[36]; + zzUnpackAction(ZZ_ACTION_PACKED_0, 0, result); + return result; + } + + private static int zzUnpackAction(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + + /** + * Translates a state to a row index in the transition table + */ + private static final int [] ZZ_ROWMAP = zzUnpackRowMap(); + + private static final String ZZ_ROWMAP_PACKED_0 = + "\0\0\0\24\0\50\0\74\0\120\0\144\0\170\0\214"+ + "\0\144\0\240\0\264\0\144\0\144\0\144\0\144\0\144"+ + "\0\144\0\144\0\310\0\144\0\334\0\360\0\144\0\144"+ + "\0\u0104\0\144\0\144\0\144\0\u0118\0\144\0\u012c\0\144"+ + "\0\u0140\0\u0154\0\u0168\0\u017c"; + + private static int [] zzUnpackRowMap() { + int [] result = new int[36]; + zzUnpackRowMap(ZZ_ROWMAP_PACKED_0, 0, result); + return result; + } + + private static int zzUnpackRowMap(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int high = packed.charAt(i++) << 16; + result[j++] = high | packed.charAt(i++); + } + return j; + } + + /** + * The transition table of the DFA + */ + private static final int [] ZZ_TRANS = zzUnpackTrans(); + + private static final String ZZ_TRANS_PACKED_0 = + "\1\6\3\7\1\10\1\11\1\12\1\13\1\6\1\14"+ + "\1\15\1\16\1\17\1\20\1\21\1\22\5\6\1\23"+ + "\2\24\1\10\1\6\1\25\1\26\5\6\1\27\2\6"+ + "\1\30\3\6\20\31\1\30\1\32\1\33\1\34\22\35"+ + "\1\36\1\35\23\37\1\40\25\0\3\7\25\0\1\41"+ + "\25\0\1\13\22\0\3\13\15\0\1\24\30\0\1\26"+ + "\22\0\3\26\13\0\20\31\4\0\22\35\1\0\1\35"+ + "\23\37\1\0\5\42\1\43\23\42\1\44\16\42\4\0"+ + "\1\24\1\43\16\0\4\42\1\24\1\44\16\42"; + + private static int [] zzUnpackTrans() { + int [] result = new int[400]; + zzUnpackTrans(ZZ_TRANS_PACKED_0, 0, result); + return result; + } + + private static int zzUnpackTrans(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + value--; + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** + * ZZ_ATTRIBUTE[aState] contains the attributes of state aState + */ + private static final int [] ZZ_ATTRIBUTE = zzUnpackAttribute(); + + private static final String ZZ_ATTRIBUTE_PACKED_0 = + "\5\0\1\11\2\1\1\11\2\1\7\11\1\1\1\11"+ + "\2\1\2\11\1\1\3\11\1\1\1\11\1\1\1\11"+ + "\4\0"; + + private static int [] zzUnpackAttribute() { + int [] result = new int[36]; + zzUnpackAttribute(ZZ_ATTRIBUTE_PACKED_0, 0, result); + return result; + } + + private static int zzUnpackAttribute(String packed, int offset, int [] result) { + int i = 0; /* index in packed string */ + int j = offset; /* index in unpacked array */ + int l = packed.length(); + while (i < l) { + int count = packed.charAt(i++); + int value = packed.charAt(i++); + do result[j++] = value; while (--count > 0); + } + return j; + } + + /** the input device */ + private java.io.Reader zzReader; + + /** the current state of the DFA */ + private int zzState; + + /** the current lexical state */ + private int zzLexicalState = YYINITIAL; + + /** this buffer contains the current text to be matched and is + the source of the yytext() string */ + private char zzBuffer[] = new char[ZZ_BUFFERSIZE]; + + /** the textposition at the last accepting state */ + private int zzMarkedPos; + + /** the current text position in the buffer */ + private int zzCurrentPos; + + /** startRead marks the beginning of the yytext() string in the buffer */ + private int zzStartRead; + + /** endRead marks the last character in the buffer, that has been read + from input */ + private int zzEndRead; + + /** number of newlines encountered up to the start of the matched text */ + private int yyline; + + /** + * the number of characters from the last newline up to the start of the + * matched text + */ + private int yycolumn; + + /** zzAtEOF == true <=> the scanner is at the EOF */ + private boolean zzAtEOF; + + /* user code: */ + static final int EOF = 0; + static final int IDENT = 1; + static final int STAR = 2; + static final int DOT = 3; + static final int HASH = 4; + static final int GT = 5; + static final int COMMA = 6; + static final int STYLE_BEGIN = 7; + static final int STYLE_END = 8; + static final int COLON = 9; + static final int SEMICOLON = 10; + static final int ATRULE = 11; + + boolean sawWhitespace; + + final StringBuilder sb = new StringBuilder(); + private void append() { + sb.append(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); + } + + public void unexpected() throws java.io.IOException { + throw new java.io.IOException("Unexpected \""+yytext()+"\" at line "+yyline+", column "+yycolumn); + } + + public void expect(int token) throws java.io.IOException { + if(yylex() != token) unexpected(); + } + + + /** + * Creates a new scanner + * There is also a java.io.InputStream version of this constructor. + * + * @param in the java.io.Reader to read input from. + */ + Parser(java.io.Reader in) { + this.zzReader = in; + } + + /** + * Unpacks the compressed character translation table. + * + * @param packed the packed character translation table + * @return the unpacked character translation table + */ + private static char [] zzUnpackCMap(String packed) { + char [] map = new char[0x10000]; + int i = 0; /* index in packed string */ + int j = 0; /* index in unpacked array */ + while (i < 72) { + int count = packed.charAt(i++); + char value = packed.charAt(i++); + do map[j++] = value; while (--count > 0); + } + return map; + } + + + /** + * Refills the input buffer. + * + * @return false, iff there was new input. + * + * @exception java.io.IOException if any I/O-Error occurs + */ + private boolean zzRefill() throws java.io.IOException { + + /* first: make room (if you can) */ + if (zzStartRead > 0) { + System.arraycopy(zzBuffer, zzStartRead, + zzBuffer, 0, + zzEndRead-zzStartRead); + + /* translate stored positions */ + zzEndRead-= zzStartRead; + zzCurrentPos-= zzStartRead; + zzMarkedPos-= zzStartRead; + zzStartRead = 0; + } + + /* is the buffer big enough? */ + if (zzCurrentPos >= zzBuffer.length) { + /* if not: blow it up */ + char newBuffer[] = new char[zzCurrentPos*2]; + System.arraycopy(zzBuffer, 0, newBuffer, 0, zzBuffer.length); + zzBuffer = newBuffer; + } + + /* finally: fill the buffer with new input */ + int numRead = zzReader.read(zzBuffer, zzEndRead, + zzBuffer.length-zzEndRead); + + if (numRead > 0) { + zzEndRead+= numRead; + return false; + } + // unlikely but not impossible: read 0 characters, but not at end of stream + if (numRead == 0) { + int c = zzReader.read(); + if (c == -1) { + return true; + } else { + zzBuffer[zzEndRead++] = (char) c; + return false; + } + } + + // numRead < 0 + return true; + } + + + /** + * Enters a new lexical state + * + * @param newState the new lexical state + */ + public final void yybegin(int newState) { + zzLexicalState = newState; + } + + + /** + * Returns the text matched by the current regular expression. + */ + public final String yytext() { + return new String( zzBuffer, zzStartRead, zzMarkedPos-zzStartRead ); + } + + + /** + * Reports an error that occured while scanning. + * + * In a wellformed scanner (no or only correct usage of + * yypushback(int) and a match-all fallback rule) this method + * will only be called with things that "Can't Possibly Happen". + * If this method is called, something is seriously wrong + * (e.g. a JFlex bug producing a faulty scanner etc.). + * + * Usual syntax/scanner level error handling should be done + * in error fallback rules. + * + * @param message the errormessage to display + */ + private void zzScanError(String message) { + throw new Error(message); + } + + + /** + * Resumes scanning until the next regular expression is matched, + * the end of input is encountered or an I/O-Error occurs. + * + * @return the next token + * @exception java.io.IOException if any I/O-Error occurs + */ + public int yylex() throws java.io.IOException { + int zzInput; + int zzAction; + + // cached fields: + int zzCurrentPosL; + int zzMarkedPosL; + int zzEndReadL = zzEndRead; + char [] zzBufferL = zzBuffer; + char [] zzCMapL = ZZ_CMAP; + + int [] zzTransL = ZZ_TRANS; + int [] zzRowMapL = ZZ_ROWMAP; + int [] zzAttrL = ZZ_ATTRIBUTE; + + while (true) { + zzMarkedPosL = zzMarkedPos; + + boolean zzR = false; + for (zzCurrentPosL = zzStartRead; zzCurrentPosL < zzMarkedPosL; + zzCurrentPosL++) { + switch (zzBufferL[zzCurrentPosL]) { + case '\u000B': + case '\u000C': + case '\u0085': + case '\u2028': + case '\u2029': + yyline++; + yycolumn = 0; + zzR = false; + break; + case '\r': + yyline++; + yycolumn = 0; + zzR = true; + break; + case '\n': + if (zzR) + zzR = false; + else { + yyline++; + yycolumn = 0; + } + break; + default: + zzR = false; + yycolumn++; + } + } + + if (zzR) { + // peek one character ahead if it is \n (if we have counted one line too much) + boolean zzPeek; + if (zzMarkedPosL < zzEndReadL) + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + else if (zzAtEOF) + zzPeek = false; + else { + boolean eof = zzRefill(); + zzEndReadL = zzEndRead; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + if (eof) + zzPeek = false; + else + zzPeek = zzBufferL[zzMarkedPosL] == '\n'; + } + if (zzPeek) yyline--; + } + zzAction = -1; + + zzCurrentPosL = zzCurrentPos = zzStartRead = zzMarkedPosL; + +// zzState = ZZ_LEXSTATE[zzLexicalState]; + zzState = zzLexicalState / 2; + + + zzForAction: { + while (true) { + + if (zzCurrentPosL < zzEndReadL) + zzInput = zzBufferL[zzCurrentPosL++]; + else if (zzAtEOF) { + zzInput = YYEOF; + break zzForAction; + } + else { + // store back cached positions + zzCurrentPos = zzCurrentPosL; + zzMarkedPos = zzMarkedPosL; + boolean eof = zzRefill(); + // get translated positions and possibly new buffer + zzCurrentPosL = zzCurrentPos; + zzMarkedPosL = zzMarkedPos; + zzBufferL = zzBuffer; + zzEndReadL = zzEndRead; + if (eof) { + zzInput = YYEOF; + break zzForAction; + } + else { + zzInput = zzBufferL[zzCurrentPosL++]; + } + } + int zzNext = zzTransL[ zzRowMapL[zzState] + zzCMapL[zzInput] ]; + if (zzNext == -1) break zzForAction; + zzState = zzNext; + + int zzAttributes = zzAttrL[zzState]; + if ( (zzAttributes & 1) == 1 ) { + zzAction = zzState; + zzMarkedPosL = zzCurrentPosL; + if ( (zzAttributes & 8) == 8 ) break zzForAction; + } + + } + } + + // store back cached position + zzMarkedPos = zzMarkedPosL; + + switch (zzAction < 0 ? zzAction : ZZ_ACTION[zzAction]) { + case 6: + { return COMMA; + } + case 22: break; + case 20: + { yybegin(YYVALUE); sb.append('\''); + } + case 23: break; + case 10: + { return ATRULE; + } + case 24: break; + case 3: + { sawWhitespace = false; return STAR; + } + case 25: break; + case 18: + { yybegin(YYSTRING1); sb.append('\''); + } + case 26: break; + case 19: + { yybegin(YYSTRING2); sb.append('\"'); + } + case 27: break; + case 16: + { append(); + } + case 28: break; + case 4: + { sawWhitespace = false; return IDENT; + } + case 29: break; + case 21: + { yybegin(YYVALUE); sb.append('\"'); + } + case 30: break; + case 9: + { return COLON; + } + case 31: break; + case 2: + { sawWhitespace = true; + } + case 32: break; + case 15: + { yybegin(YYINITIAL); return STYLE_END; + } + case 33: break; + case 17: + { yybegin(YYSTYLE); return SEMICOLON; + } + case 34: break; + case 14: + { yybegin(YYVALUE); sb.setLength(0); return COLON; + } + case 35: break; + case 7: + { return GT; + } + case 36: break; + case 11: + { yybegin(YYSTYLE); return STYLE_BEGIN; + } + case 37: break; + case 13: + { return IDENT; + } + case 38: break; + case 1: + { unexpected(); + } + case 39: break; + case 5: + { return DOT; + } + case 40: break; + case 8: + { return HASH; + } + case 41: break; + case 12: + { /* ignore */ + } + case 42: break; + default: + if (zzInput == YYEOF && zzStartRead == zzCurrentPos) { + zzAtEOF = true; + { + return EOF; + } + } + else { + zzScanError("Error: could not match input"); + } + } + } + } + + +} diff --git a/twl/src/de/matthiasmann/twl/textarea/SimpleTextAreaModel.java b/twl/src/de/matthiasmann/twl/textarea/SimpleTextAreaModel.java index f480a94..fe7bbde 100644 --- a/twl/src/de/matthiasmann/twl/textarea/SimpleTextAreaModel.java +++ b/twl/src/de/matthiasmann/twl/textarea/SimpleTextAreaModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -35,17 +35,21 @@ /** * A simple text area model which represents the complete text as a single - * paragraph without any styles. + * paragraph. + * + *

    The initial style is an empty style - see {@link Style#Style() }. + * It can be changed before setting the text.

    * * @author Matthias Mann + * @see #setStyle(de.matthiasmann.twl.textarea.Style) */ public class SimpleTextAreaModel extends HasCallback implements TextAreaModel { - private static final Style EMPTY_STYLE = new Style(); - + private Style style; private Element element; public SimpleTextAreaModel() { + style = new Style(); } /** @@ -57,15 +61,39 @@ public SimpleTextAreaModel() { */ @SuppressWarnings("OverridableMethodCallInConstructor") public SimpleTextAreaModel(String text) { + this(); setText(text); } + /** + * Returns the style used for the next call to {@link #setText(java.lang.String, boolean) } + * @return the style + */ + public Style getStyle() { + return style; + } + + /** + * Sets the style used for the next call to {@link #setText(java.lang.String, boolean) }. + * It does not affect the currently set text. + * + * @param style the style + * @throws NullPointerException when style is {@code null} + */ + public void setStyle(Style style) { + if(style == null) { + throw new NullPointerException("style"); + } + this.style = style; + } + /** * Sets the text for this SimpleTextAreaModel as pre-formatted text. * Use {@code '\n'} to create line breaks. * * This is equivalent to calling {@code setText(text, true);} * @param text the text (interpreted as pre-formatted) + * @see #setText(java.lang.String, boolean) */ public void setText(String text) { setText(text, true); @@ -75,18 +103,18 @@ public void setText(String text) { * Sets the text for this SimpleTextAreaModel. * Use {@code '\n'} to create line breaks. * + *

    The {@code preformatted} will set the white space attribute as follows:

    + *
    false = {@code white-space: normal}
    true = {@code white-space: pre}
    + * * @param text the text * @param preformatted if the text should be treated as pre-formated or not. */ public void setText(String text, boolean preformatted) { - Style style = EMPTY_STYLE; - if(preformatted) { - style = style.with(StyleAttribute.PREFORMATTED, Boolean.TRUE); - } - element = new TextElement(style, text); + Style textstyle = style.with(StyleAttribute.PREFORMATTED, preformatted); + element = new TextElement(textstyle, text); doCallback(); } - + public Iterator iterator() { return ((element != null) ? Collections.singletonList(element) diff --git a/twl/src/de/matthiasmann/twl/textarea/Style.java b/twl/src/de/matthiasmann/twl/textarea/Style.java index b05ccde..1e487ce 100644 --- a/twl/src/de/matthiasmann/twl/textarea/Style.java +++ b/twl/src/de/matthiasmann/twl/textarea/Style.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -167,6 +167,18 @@ public V get(StyleAttribute attribute, StyleSheetResolver resolver) { return resolve(attribute, resolver).getNoResolve(attribute, resolver); } + /** + * Retrives the value of the specified attribute without resolving the style. + * + * @param The data type of the attribute + * @param attribute The attribute to lookup. + * @return the attribute value or null (no default value) + */ + public V getRaw(StyleAttribute attribute) { + Object value = rawGet(attribute.ordinal()); + return attribute.getDataType().cast(value); + } + /** * Returns the parent of this Style or null. The parent is used to lookup * attributes which can be inherited and are not specified in this Style. diff --git a/twl/src/de/matthiasmann/twl/textarea/StyleAttribute.java b/twl/src/de/matthiasmann/twl/textarea/StyleAttribute.java index 9e67826..8f1f5be 100644 --- a/twl/src/de/matthiasmann/twl/textarea/StyleAttribute.java +++ b/twl/src/de/matthiasmann/twl/textarea/StyleAttribute.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -35,6 +35,7 @@ import de.matthiasmann.twl.textarea.TextAreaModel.FloatPosition; import de.matthiasmann.twl.textarea.TextAreaModel.HAlignment; import de.matthiasmann.twl.textarea.TextAreaModel.VAlignment; +import de.matthiasmann.twl.utils.StringList; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; @@ -52,12 +53,20 @@ public final class StyleAttribute { public static final StyleAttribute HORIZONTAL_ALIGNMENT = new StyleAttribute(true, HAlignment.class, HAlignment.LEFT); public static final StyleAttribute VERTICAL_ALIGNMENT = new StyleAttribute(true, VAlignment.class, VAlignment.BOTTOM); public static final StyleAttribute TEXT_INDENT = new StyleAttribute(true, Value.class, Value.ZERO_PX); - public static final StyleAttribute FONT_NAME = new StyleAttribute(true, String.class, "default"); + public static final StyleAttribute TEXT_DECORATION = new StyleAttribute(true, TextDecoration.class, TextDecoration.NONE); + public static final StyleAttribute TEXT_DECORATION_HOVER = new StyleAttribute(true, TextDecoration.class, null); + public static final StyleAttribute FONT_FAMILIES = new StyleAttribute(true, StringList.class, new StringList("default")); + public static final StyleAttribute FONT_SIZE = new StyleAttribute(true, Value.class, new Value(14, Value.Unit.PX)); + public static final StyleAttribute FONT_WEIGHT = new StyleAttribute(true, Integer.class, 400); + public static final StyleAttribute FONT_ITALIC = new StyleAttribute(true, Boolean.class, Boolean.FALSE); + public static final StyleAttribute TAB_SIZE = new StyleAttribute(true, Integer.class, 8); public static final StyleAttribute LIST_STYLE_IMAGE = new StyleAttribute(true, String.class, "ul-bullet"); public static final StyleAttribute LIST_STYLE_TYPE = new StyleAttribute(true, OrderedListType.class, OrderedListType.DECIMAL); public static final StyleAttribute PREFORMATTED = new StyleAttribute(true, Boolean.class, Boolean.FALSE); public static final StyleAttribute BREAKWORD = new StyleAttribute(true, Boolean.class, Boolean.FALSE); public static final StyleAttribute COLOR = new StyleAttribute(true, Color.class, Color.WHITE); + public static final StyleAttribute COLOR_HOVER = new StyleAttribute(true, Color.class, null); + public static final StyleAttribute INHERIT_HOVER = new StyleAttribute(true, Boolean.class, Boolean.FALSE); // non cascading attribute public static final StyleAttribute CLEAR = new StyleAttribute(false, Clear.class, Clear.NONE); @@ -67,6 +76,7 @@ public final class StyleAttribute { public static final StyleAttribute HEIGHT = new StyleAttribute(false, Value.class, Value.AUTO); public static final StyleAttribute BACKGROUND_IMAGE = new StyleAttribute(false, String.class, null); public static final StyleAttribute BACKGROUND_COLOR = new StyleAttribute(false, Color.class, Color.TRANSPARENT); + public static final StyleAttribute BACKGROUND_COLOR_HOVER = new StyleAttribute(false, Color.class, Color.TRANSPARENT); public static final StyleAttribute MARGIN_TOP = new StyleAttribute(false, Value.class, Value.ZERO_PX); public static final StyleAttribute MARGIN_LEFT = new StyleAttribute(false, Value.class, Value.ZERO_PX); public static final StyleAttribute MARGIN_RIGHT = new StyleAttribute(false, Value.class, Value.ZERO_PX); @@ -143,7 +153,7 @@ private StyleAttribute(boolean inherited, Class dataType, T defaultValue) { this.ordinal = attributes.size(); attributes.add(this); } - + /** * Returns the number of implemented StyleAttributes. * @return the number of implemented StyleAttributes. diff --git a/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java b/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java index c195b83..0057534 100644 --- a/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java +++ b/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -29,6 +29,9 @@ */ package de.matthiasmann.twl.textarea; +import de.matthiasmann.twl.renderer.FontMapper; +import de.matthiasmann.twl.utils.StringList; +import de.matthiasmann.twl.utils.TextUtil; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -37,7 +40,13 @@ import java.net.URL; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.HashMap; import java.util.IdentityHashMap; +import java.util.Iterator; +import java.util.Map; +import java.util.logging.Level; +import java.util.logging.Logger; /** * @@ -49,6 +58,7 @@ public class StyleSheet implements StyleSheetResolver { private final ArrayList rules; private final IdentityHashMap cache; + private ArrayList atrules; public StyleSheet() { this.rules = new ArrayList(); @@ -73,11 +83,43 @@ public void parse(Reader r) throws IOException { ArrayList selectors = new ArrayList(); int what; while((what=parser.yylex()) != Parser.EOF) { + if(what == Parser.ATRULE) { + parser.expect(Parser.IDENT); + AtRule atrule = new AtRule(parser.yytext()); + parser.expect(Parser.STYLE_BEGIN); + + while((what=parser.yylex()) != Parser.STYLE_END) { + if(what != Parser.IDENT) { + parser.unexpected(); + } + String key = parser.yytext(); + parser.expect(Parser.COLON); + what = parser.yylex(); + if(what != Parser.SEMICOLON && what != Parser.STYLE_END) { + parser.unexpected(); + } + String value = TextUtil.trim(parser.sb, 0); + try { + atrule.entries.put(key, value); + } catch (IllegalArgumentException ex) { + } + if(what == Parser.STYLE_END) { + break; + } + } + + if(atrules == null) { + atrules = new ArrayList(); + } + atrules.add(atrule); + continue; + } + Selector selector = null; - selectorloop: for(;;) { String element = null; String className = null; + String pseudoClass = null; String id = null; parser.sawWhitespace = false; switch (what) { @@ -86,6 +128,7 @@ public void parse(Reader r) throws IOException { // fall though will not happen but keeps compiler quite case Parser.DOT: case Parser.HASH: + case Parser.COLON: break; case Parser.IDENT: element = parser.yytext(); @@ -94,17 +137,19 @@ public void parse(Reader r) throws IOException { what = parser.yylex(); break; } - while((what == Parser.DOT || what == Parser.HASH) && !parser.sawWhitespace) { + while((what == Parser.DOT || what == Parser.HASH || what == Parser.COLON) && !parser.sawWhitespace) { parser.expect(Parser.IDENT); String text = parser.yytext(); if(what == Parser.DOT) { className = text; + } else if(what == Parser.COLON) { + pseudoClass = text; } else { id = text; } what = parser.yylex(); } - selector = new Selector(element, className, id, selector); + selector = new Selector(element, className, id, pseudoClass, selector); switch (what) { case Parser.GT: selector.directChild = true; @@ -140,7 +185,7 @@ public void parse(Reader r) throws IOException { if(what != Parser.SEMICOLON && what != Parser.STYLE_END) { parser.unexpected(); } - String value = parser.sb.toString().trim(); + String value = TextUtil.trim(parser.sb, 0); try { style.parseCSSAttribute(key, value); } catch (IllegalArgumentException ex) { @@ -151,7 +196,11 @@ public void parse(Reader r) throws IOException { } for(int i=0,n=selectors.size() ; i { + final String pseudoClass; final Selector tail; boolean directChild; - CSSStyle style; + Style style; int score; - Selector(String element, String className, String id, Selector tail) { + Selector(String element, String className, String id, String pseudoClass, Selector tail) { super(element, className, id); + this.pseudoClass = pseudoClass; this.tail = tail; } @@ -277,4 +374,26 @@ public int compareTo(Selector other) { return this.score - other.score; } } + + public static class AtRule implements Iterable> { + final String name; + final HashMap entries; + + public AtRule(String name) { + this.name = name; + this.entries = new HashMap(); + } + + public String getName() { + return name; + } + + public String get(String key) { + return entries.get(key); + } + + public Iterator> iterator() { + return Collections.unmodifiableSet(entries.entrySet()).iterator(); + } + } } diff --git a/twl/src/de/matthiasmann/twl/textarea/TextAreaModel.java b/twl/src/de/matthiasmann/twl/textarea/TextAreaModel.java index 4c140db..0b588d7 100644 --- a/twl/src/de/matthiasmann/twl/textarea/TextAreaModel.java +++ b/twl/src/de/matthiasmann/twl/textarea/TextAreaModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -29,7 +29,6 @@ */ package de.matthiasmann.twl.textarea; -import de.matthiasmann.twl.utils.TextUtil; import java.util.ArrayList; import java.util.Iterator; @@ -232,13 +231,13 @@ public String getHREF() { return href; } - /* + /** * Replaces the href of this link. * This method does not cause the model callback to be fired. * * @param href the new href of the link, can be null. */ - public void setHref(String href) { + public void setHREF(String href) { this.href = href; } } @@ -346,7 +345,7 @@ public Style getRowStyle(int row) { return rowStyles[row]; } - public void setSell(int row, int column, TableCellElement cell) { + public void setCell(int row, int column, TableCellElement cell) { if(column < 0 || column >= numColumns) { throw new IndexOutOfBoundsException("column"); } diff --git a/twl/src/de/matthiasmann/twl/textarea/TextDecoration.java b/twl/src/de/matthiasmann/twl/textarea/TextDecoration.java new file mode 100644 index 0000000..168b5f5 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/textarea/TextDecoration.java @@ -0,0 +1,41 @@ +/* + * Copyright (c) 2008-2012, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.textarea; + +/** + * CSS text-decoration values + * + * @author Matthias Mann + */ +public enum TextDecoration { + NONE, + UNDERLINE, + LINE_THROUGH +} diff --git a/twl/src/de/matthiasmann/twl/textarea/Value.java b/twl/src/de/matthiasmann/twl/textarea/Value.java index 74f4bd5..5d0a1f8 100644 --- a/twl/src/de/matthiasmann/twl/textarea/Value.java +++ b/twl/src/de/matthiasmann/twl/textarea/Value.java @@ -80,6 +80,7 @@ public int hashCode() { public enum Unit { PX(false, "px"), + PT(false, "pt"), EM(true, "em"), EX(true, "ex"), PERCENT(false, "%"), diff --git a/twl/src/de/matthiasmann/twl/textarea/parser.flex b/twl/src/de/matthiasmann/twl/textarea/parser.flex index 16ea209..dc3d2fd 100644 --- a/twl/src/de/matthiasmann/twl/textarea/parser.flex +++ b/twl/src/de/matthiasmann/twl/textarea/parser.flex @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -49,6 +49,7 @@ package de.matthiasmann.twl.textarea; static final int STYLE_END = 8; static final int COLON = 9; static final int SEMICOLON = 10; + static final int ATRULE = 11; boolean sawWhitespace; @@ -82,6 +83,8 @@ Identifier = [-]?[_a-zA-Z][_a-zA-Z0-9-]* "*" { sawWhitespace = false; return STAR; } ">" { return GT; } "#" { return HASH; } + ":" { return COLON; } + "@" { return ATRULE; } "{" { yybegin(YYSTYLE); return STYLE_BEGIN; } {Comment} { /* ignore */ } diff --git a/twl/src/de/matthiasmann/twl/theme/ImageAdjustments.java b/twl/src/de/matthiasmann/twl/theme/ImageAdjustments.java index b91f2d2..aa3aa4d 100644 --- a/twl/src/de/matthiasmann/twl/theme/ImageAdjustments.java +++ b/twl/src/de/matthiasmann/twl/theme/ImageAdjustments.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -61,7 +61,6 @@ class ImageAdjustments implements Image, HasBorder { this.condition = condition; } - public int getWidth() { if(sizeOverwriteH >= 0) { return sizeOverwriteH; @@ -114,5 +113,10 @@ public Image createTintedVersion(Color color) { return new ImageAdjustments(image.createTintedVersion(color), border, inset, sizeOverwriteH, sizeOverwriteV, center, condition); } - + + boolean isSimple() { + // used for ImageManager.parseStateSelect + // only check parameters affecting rendering (except condition) + return !center && inset == null && sizeOverwriteH < 0 && sizeOverwriteV < 0; + } } diff --git a/twl/src/de/matthiasmann/twl/theme/ImageManager.java b/twl/src/de/matthiasmann/twl/theme/ImageManager.java index c2dfbb4..7d0c5f1 100644 --- a/twl/src/de/matthiasmann/twl/theme/ImageManager.java +++ b/twl/src/de/matthiasmann/twl/theme/ImageManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -31,6 +31,7 @@ import de.matthiasmann.twl.Border; import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.renderer.Gradient; import de.matthiasmann.twl.renderer.MouseCursor; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.renderer.Renderer; @@ -251,6 +252,8 @@ private Image parseImageDelegate(XMLParser xmlp, String tagName, ImageParams par return parseGrid(xmlp, params); } else if("animation".equals(tagName)) { return parseAnimation(xmlp, params); + } else if("gradient".equals(tagName)) { + return parseGradient(xmlp, params); } else { throw xmlp.error("Unexpected '"+tagName+"'"); } @@ -284,29 +287,71 @@ private Image parseStateSelect(XMLParser xmlp, ImageParams params) throws IOExce ArrayList stateImages = new ArrayList(); ArrayList conditions = new ArrayList(); xmlp.nextTag(); - while(!xmlp.isEndTag()) { + boolean last = false; + while(!last && !xmlp.isEndTag()) { xmlp.require(XmlPullParser.START_TAG, null, null); StateExpression cond = ParserUtil.parseCondition(xmlp); String tagName = xmlp.getName(); Image image = parseImageNoCond(xmlp, tagName, new ImageParams()); - stateImages.add(image); params.border = getBorder(image, params.border); xmlp.require(XmlPullParser.END_TAG, null, tagName); xmlp.nextTag(); - if(cond != null) { - conditions.add(cond); + last = cond == null; + + if(image instanceof ImageAdjustments) { + ImageAdjustments ia = (ImageAdjustments)image; + if(ia.isSimple()) { + cond = and(cond, ia.condition); + image = ia.image; + } + } + + if(StateSelect.isUseOptimizer() && (image instanceof StateSelectImage)) { + inlineSelect((StateSelectImage)image, cond, stateImages, conditions); } else { - break; + stateImages.add(image); + if(cond != null) { + conditions.add(cond); + } } } if(conditions.size() < 1) { throw xmlp.error("state select image needs atleast 1 condition"); } - StateSelect select = new StateSelect(conditions.toArray(new StateExpression[conditions.size()])); - Image image = new StateSelectImage(stateImages.toArray(new Image[stateImages.size()]), select, params.border); + StateSelect select = new StateSelect(conditions); + Image image = new StateSelectImage(select, params.border, stateImages.toArray(new Image[stateImages.size()])); return image; } + private static void inlineSelect(StateSelectImage src, StateExpression cond, ArrayList stateImages, ArrayList conditions) { + int n = src.images.length; + int m = src.select.getNumExpressions(); + for(int i=0 ; i= select.getNumExpressions(); assert images.length <= select.getNumExpressions() + 1; @@ -67,7 +67,7 @@ public void draw(AnimationState as, int x, int y) { } public void draw(AnimationState as, int x, int y, int width, int height) { - int idx = select.evaluate(as, select.getNumExpressions()); + int idx = select.evaluate(as); if(idx < images.length) { images[idx].draw(as, x, y, width, height); } @@ -82,7 +82,7 @@ public Image createTintedVersion(Color color) { for(int i=0 ; i params = xmlp.getUnusedAttributes(); + URL url = baseUrl; + String fileName = xmlp.getAttributeValue(null, "filename"); + if(fileName != null) { + url = new URL(url, fileName); + } + + StringList fontFamilies = parseList(xmlp, "families"); + int fontSize = 0; + int fontStyle = 0; + if(fontFamilies != null) { + fontSize = xmlp.parseIntFromAttribute("size"); + StringList style = parseList(xmlp, "style"); + while(style != null) { + if("bold".equalsIgnoreCase(style.getValue())) { + fontStyle |= FontMapper.STYLE_BOLD; + } else if("italic".equalsIgnoreCase(style.getValue())) { + fontStyle |= FontMapper.STYLE_ITALIC; + } + style = style.getNext(); + } + } + + FontParameter baseParams = new FontParameter(); + parseFontParameter(xmlp, baseParams); ArrayList fontParams = new ArrayList(); - params.remove("name"); - params.remove("default"); + ArrayList stateExpr = new ArrayList(); + xmlp.nextTag(); while(!xmlp.isEndTag()) { xmlp.require(XmlPullParser.START_TAG, null, "fontParam"); + StateExpression cond = ParserUtil.parseCondition(xmlp); if(cond == null) { throw xmlp.error("Condition required"); } - Map condParams = xmlp.getUnusedAttributes(); - condParams.remove("if"); - condParams.remove("unless"); - fontParams.add(new FontParameter(cond, condParams)); + stateExpr.add(cond); + + FontParameter params = new FontParameter(baseParams); + parseFontParameter(xmlp, params); + fontParams.add(params); + xmlp.nextTag(); xmlp.require(XmlPullParser.END_TAG, null, "fontParam"); xmlp.nextTag(); } - return renderer.loadFont(baseUrl, params, fontParams); + + fontParams.add(baseParams); + StateSelect stateSelect = new StateSelect(stateExpr); + FontParameter[] stateParams = fontParams.toArray(new FontParameter[fontParams.size()]); + + if(fontFamilies != null) { + FontMapper fontMapper = renderer.getFontMapper(); + if(fontMapper != null) { + Font font = fontMapper.getFont(fontFamilies, fontSize, fontStyle, stateSelect, stateParams); + if(font != null) { + return font; + } + } + } + + return renderer.loadFont(url, stateSelect, stateParams); + } + + private void parseFontParameter(XMLParser xmlp, FontParameter fp) throws XmlPullParserException { + for(int i=0,n=xmlp.getAttributeCount() ; i type = FontParameter.getParameter(name); + if(type != null) { + String value = xmlp.getAttributeValue(i); + Class dataClass = type.getDataClass(); + + if(dataClass == Color.class) { + @SuppressWarnings("unchecked") + FontParameter.Parameter colorType = (FontParameter.Parameter)type; + fp.put(colorType, ParserUtil.parseColor(xmlp, value, constants)); + + } else if(dataClass == Integer.class) { + @SuppressWarnings("unchecked") + FontParameter.Parameter intType = (FontParameter.Parameter)type; + fp.put(intType, parseMath(xmlp, value).intValue()); + + } else if(dataClass == Boolean.class) { + @SuppressWarnings("unchecked") + FontParameter.Parameter boolType = (FontParameter.Parameter)type; + fp.put(boolType, xmlp.parseBool(value)); + + } else if(dataClass == String.class) { + @SuppressWarnings("unchecked") + FontParameter.Parameter strType = (FontParameter.Parameter)type; + fp.put(strType, value); + + } else { + throw xmlp.error("dataClass not yet implemented: " + dataClass); + } + } + } + } + } + + private static StringList parseList(XMLParser xmlp, String name) { + String value = xmlp.getAttributeValue(null, name); + if(value != null) { + return parseList(value, 0); + } + return null; + } + + private static StringList parseList(String value, int idx) { + idx = TextUtil.skipSpaces(value, idx); + if(idx >= value.length()) { + return null; + } + + int end = TextUtil.indexOf(value, ',', idx); + String part = TextUtil.trim(value, idx, end); + + return new StringList(part, parseList(value, end+1)); } private void parseThemeWildcardRef(XMLParser xmlp, ThemeInfoImpl parent) throws IOException, XmlPullParserException { diff --git a/twl/src/de/matthiasmann/twl/theme/theme.dtd b/twl/src/de/matthiasmann/twl/theme/theme.dtd index 20530a5..e2faea4 100644 --- a/twl/src/de/matthiasmann/twl/theme/theme.dtd +++ b/twl/src/de/matthiasmann/twl/theme/theme.dtd @@ -6,7 +6,7 @@ - + - + - + - + + + + + + + The callback lists are implemented as arrays which are reallocated on + * each change. This allows to add/remove callbacks while the old list is + * used to invoke callbacks.

    + * + *

    An empty list is represented by {@code null} instead of an empty array.

    + * * @author Matthias Mann */ public class CallbackSupport { @@ -48,6 +54,18 @@ private static void checkNotNull(Object callback) { } } + /** + * Adds a new callback to the list. + * + *

    Does not check if the callback is already in the list.

    + * + * @param The type of the callback list + * @param curList the current callback list - can be null + * @param callback the callback to be added + * @param clazz the element class of the callback list used to allocate a new array + * @return a new callback list with the new callback appended at the end + * @throws NullPointerException when callback or clazz is null + */ @SuppressWarnings("unchecked") public static T[] addCallbackToList(T[] curList, T callback, Class clazz) { checkNotNull(callback); @@ -60,6 +78,14 @@ public static T[] addCallbackToList(T[] curList, T callback, Class clazz) return newList; } + /** + * Locates a callback in the list. + * + * @param The type of the callback list + * @param list the current callback list - can be null + * @param callback the callback to locate + * @return the index if found otherwise -1 + */ public static int findCallbackPosition(T[] list, T callback) { checkNotNull(callback); if(list != null) { @@ -72,6 +98,17 @@ public static int findCallbackPosition(T[] list, T callback) { return -1; } + /** + * Removes a callback from the list. + * + *

    The new callback list will have the same element type as the passed in list.

    + * + * @param The type of the callback list + * @param curList the current callback list + * @param index the index of the callback to remove + * @return the new callback list without the specified entry or null if it was the only entry + * @throws NullPointerException when curList is null + */ @SuppressWarnings("unchecked") public static T[] removeCallbackFromList(T[] curList, int index) { final int curLength = curList.length; @@ -86,6 +123,17 @@ public static T[] removeCallbackFromList(T[] curList, int index) { return newList; } + /** + * Removes a callback from the list. + * + *

    The new callback list will have the same element type as the passed in list.

    + * + * @param The type of the callback list + * @param curList the current callback list - can be null + * @param callback the callback to remove + * @return the passed in callback list (curList) when the callback was not found, + * the new callback list without the specified entry or null if it was the only entry + */ public static T[] removeCallbackFromList(T[] curList, T callback) { int idx = findCallbackPosition(curList, callback); if(idx >= 0) { @@ -94,6 +142,11 @@ public static T[] removeCallbackFromList(T[] curList, T callback) { return curList; } + /** + * Executes all callbacks in the list. + * + * @param callbacks callback list - can be null + */ public static void fireCallbacks(Runnable[] callbacks) { if(callbacks != null) { for(Runnable cb : callbacks) { @@ -102,6 +155,13 @@ public static void fireCallbacks(Runnable[] callbacks) { } } + /** + * Executes all callbacks in the list. + * + * @param the type of the reason enum + * @param callbacks callback list - can be null + * @param reason the reson to pass to each callback + */ @SuppressWarnings("unchecked") public static > void fireCallbacks(CallbackWithReason[] callbacks, T reason) { if(callbacks != null) { diff --git a/twl/src/de/matthiasmann/twl/utils/ClipStack.java b/twl/src/de/matthiasmann/twl/utils/ClipStack.java index 025f998..12b28bf 100644 --- a/twl/src/de/matthiasmann/twl/utils/ClipStack.java +++ b/twl/src/de/matthiasmann/twl/utils/ClipStack.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -154,7 +154,10 @@ protected Entry push() { protected void intersect(Rect tos) { if(numClipRects > 1) { - tos.intersect(clipRects[numClipRects-2]); + Entry prev = clipRects[numClipRects-2]; + if(!prev.disabled) { + tos.intersect(prev); + } } } diff --git a/twl/src/de/matthiasmann/twl/utils/ParameterStringParser.java b/twl/src/de/matthiasmann/twl/utils/ParameterStringParser.java index 3ac38d7..2b9c779 100644 --- a/twl/src/de/matthiasmann/twl/utils/ParameterStringParser.java +++ b/twl/src/de/matthiasmann/twl/utils/ParameterStringParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -125,12 +125,7 @@ public String getValue() { private String substring(int start, int end) { if(trim) { - while(start < end && Character.isWhitespace(str.charAt(start))) { - start++; - } - while(end > start && Character.isWhitespace(str.charAt(end-1))) { - end--; - } + return TextUtil.trim(str, start, end); } return str.substring(start, end); } diff --git a/twl/src/de/matthiasmann/twl/utils/StateExpression.java b/twl/src/de/matthiasmann/twl/utils/StateExpression.java index 4a34455..284017d 100644 --- a/twl/src/de/matthiasmann/twl/utils/StateExpression.java +++ b/twl/src/de/matthiasmann/twl/utils/StateExpression.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -74,7 +74,7 @@ private static StateExpression parse(StringIterator si) throws ParseException { StateExpression child = null; if(Character.isJavaIdentifierStart(ch)) { - child = new Check(si.getIdent()); + child = new Check(StateKey.get(si.getIdent())); } else if(ch == '(') { si.pos++; child = parse(si); @@ -114,12 +114,8 @@ private static StateExpression parse(StringIterator si) throws ParseException { if(children.size() == 1) { return children.get(0); } - - StateExpression[] childArray = - children.toArray(new StateExpression[children.size()]); - assert kind == '|' || kind == '+' || kind == '^'; - return new Logic(kind, childArray); + return new Logic(kind, children.toArray(new StateExpression[children.size()])); } private static class StringIterator { @@ -180,12 +176,15 @@ String getIdent() { boolean negate; - static class Logic extends StateExpression { + public static class Logic extends StateExpression { final StateExpression[] children; final boolean and; final boolean xor; - Logic(char kind, StateExpression ... children) { + public Logic(char kind, StateExpression ... children) { + if(kind != '|' && kind != '+' && kind != '^') { + throw new IllegalArgumentException("kind"); + } this.children = children; this.and = kind == '+'; this.xor = kind == '^'; @@ -212,12 +211,12 @@ void getUsedStateKeys(BitSet bs) { } } } - - static class Check extends StateExpression { + + public static class Check extends StateExpression { final StateKey state; - - public Check(String state) { - this.state = StateKey.get(state); + + public Check(StateKey state) { + this.state = state; } @Override diff --git a/twl/src/de/matthiasmann/twl/utils/StateSelect.java b/twl/src/de/matthiasmann/twl/utils/StateSelect.java index 2a9b580..0cbe0a7 100644 --- a/twl/src/de/matthiasmann/twl/utils/StateSelect.java +++ b/twl/src/de/matthiasmann/twl/utils/StateSelect.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -31,6 +31,7 @@ import de.matthiasmann.twl.renderer.AnimationState; import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import java.util.Collection; /** * @@ -44,6 +45,12 @@ public class StateSelect { private final StateKey[] programKeys; private final short[] programCodes; + public static final StateSelect EMPTY = new StateSelect(); + + public StateSelect(Collection expressions) { + this(expressions.toArray(new StateExpression[expressions.size()])); + } + public StateSelect(StateExpression ... expressions) { this.expressions = expressions; @@ -52,8 +59,8 @@ public StateSelect(StateExpression ... expressions) { : null; if(sso != null) { - programKeys = sso.getProgramKeys(); - programCodes = sso.getProgramCodes(); + programKeys = sso.programKeys; + programCodes = sso.programCodes; } else { programKeys = null; programCodes = null; @@ -73,42 +80,58 @@ public static void setUseOptimizer(boolean useOptimizer) { StateSelect.useOptimizer = useOptimizer; } + /** + * Returns the number of expressions. + *

    This is also the return value of {@link #evaluate(de.matthiasmann.twl.renderer.AnimationState) } + * when no expression matched.

    + * @return the number of expressions + */ public int getNumExpressions() { return expressions.length; } + /** + * Retrives the specified expression + * @param idx the expression index + * @return the expression + * @see #getNumExpressions() + */ public StateExpression getExpression(int idx) { return expressions[idx]; } - public int evaluate(AnimationState as, int noMatchIndex) { + /** + * Evaluates the expression list. + * + * @param as the animation stateor null + * @return the index of the first matching expression or + * {@link #getNumExpressions()} when no expression matches + */ + public int evaluate(AnimationState as) { if(programKeys != null) { - return evaluateProgram(as, noMatchIndex); + return evaluateProgram(as); } - return evaluateExpr(as, noMatchIndex); + return evaluateExpr(as); } - private int evaluateExpr(AnimationState as, int noMatchIndex) { - for(int i=0,n=expressions.length ; i> 1])) { + if(as == null || !as.getAnimationState(programKeys[pos >> 1])) { pos++; } pos = programCodes[pos]; } while(pos >= 0); - - if(pos == -1) { - return noMatchIndex; - } return pos & CODE_MASK; } diff --git a/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java b/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java index 1ea75ac..da3b356 100644 --- a/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java +++ b/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -37,18 +37,18 @@ * * @author Matthias Mann */ -public final class StateSelectOptimizer { +final class StateSelectOptimizer { private final StateKey[] keys; private final byte[] matrix; - private final StateKey[] programKeys; - private final short[] programCodes; - private int programIdx; + final StateKey[] programKeys; + final short[] programCodes; + int programIdx; - public static StateSelectOptimizer optimize(StateExpression ... expressions) { + static StateSelectOptimizer optimize(StateExpression ... expressions) { final int numExpr = expressions.length; - if(numExpr == 0) { + if(numExpr == 0 || numExpr >= 255) { return null; } @@ -58,7 +58,7 @@ public static StateSelectOptimizer optimize(StateExpression ... expressions) { } final int numKeys = bs.cardinality(); - if(numKeys == 0 || numKeys >= 255) { + if(numKeys == 0 || numKeys > 16) { return null; } @@ -75,12 +75,13 @@ public static StateSelectOptimizer optimize(StateExpression ... expressions) { for(int keyIdx=0 ; keyIdx 50% of the allocated - // so no need for copying the arrays - return programKeys; - } - - public short[] getProgramCodes() { - return programCodes; - } - private StateSelectOptimizer(StateKey[] keys, byte[] matrix) { this.keys = keys; this.matrix = matrix; @@ -108,8 +99,7 @@ private StateSelectOptimizer(StateKey[] keys, byte[] matrix) { private int compute(int bits, int mask) { if(mask == matrix.length-1) { - int result = matrix[bits] - 1; - return result | StateSelect.CODE_RESULT; + return (matrix[bits]&255) | StateSelect.CODE_RESULT; } int best = -1; @@ -128,7 +118,7 @@ private int compute(int bits, int mask) { for(int matrixIdx=bits ; matrixIdx { + private final String value; + private final StringList next; + + /** + * Constructs a string list with a single entry. + * This is equivalent to {@code new StringList(value, null); } + * + * @param value the string value + * @throws NullPointerException if value is null + */ + public StringList(String value) { + this(value, null); + } + + /** + * Constructs a new head of a string list. + * + * @param value the string value + * @param next the rest/tail of the string list, can be null + * @throws NullPointerException if value is null + */ + public StringList(String value, StringList next) { + if(value == null) { + throw new NullPointerException("value"); + } + this.value = value; + this.next = next; + } + + /** + * Returns the next element in the string list, or null if this is the last + * @return the next element in the string list, or null if this is the last + */ + public StringList getNext() { + return next; + } + + /** + * Returns the string value of this element, never null + * @return the string value of this element, never null + */ + public String getValue() { + return value; + } + + @Override + public boolean equals(Object obj) { + if(!(obj instanceof StringList)) { + return false; + } + final StringList that = (StringList)obj; + return this.value.equals(that.value) && + (this.next == that.next || (this.next != null && this.next.equals(that.next))); + } + + @Override + public int hashCode() { + int hash = value.hashCode(); + if(next != null) { + hash = 67 * hash + next.hashCode(); + } + return hash; + } + + @Override + public String toString() { + if(next == null) { + return value; + } else { + StringBuilder sb = new StringBuilder(); + sb.append(value); + for(StringList list=next ; list!=null ; list=list.next) { + sb.append(", ").append(list.value); + } + return sb.toString(); + } + } + + public Iterator iterator() { + return new I(this); + } + + static class I implements Iterator { + private StringList list; + + I(StringList list) { + this.list = list; + } + + public boolean hasNext() { + return list != null; + } + + public String next() { + if(list == null) { + throw new NoSuchElementException(); + } + String value = list.getValue(); + list = list.getNext(); + return value; + } + + public void remove() { + throw new UnsupportedOperationException("Not supported"); + } + } +} diff --git a/twl/src/de/matthiasmann/twl/utils/TintAnimator.java b/twl/src/de/matthiasmann/twl/utils/TintAnimator.java index 7adcd9d..aa6d2d2 100644 --- a/twl/src/de/matthiasmann/twl/utils/TintAnimator.java +++ b/twl/src/de/matthiasmann/twl/utils/TintAnimator.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -66,13 +66,15 @@ public interface TimeSource { private int fadeDuration; private boolean fadeActive; private boolean hasTint; + private Runnable[] fadeDoneCallbacks; /** - * Creates a new TintAnimator which starts in the specified color + * Creates a new TintAnimator which starts in the specified color. * * @param timeSource the time source for the fade animation * @param color the starting color */ + @SuppressWarnings("OverridableMethodCallInConstructor") public TintAnimator(TimeSource timeSource, Color color) { if(timeSource == null) { throw new NullPointerException("timeSource"); @@ -85,6 +87,28 @@ public TintAnimator(TimeSource timeSource, Color color) { setColor(color); } + /** + * Creates a new TintAnimator which starts in the specified color + * and uses the specified GUI as time source. + * + * @param gui the GUI instance - must not be null + * @param color the starting color + */ + public TintAnimator(GUI gui, Color color) { + this(new GUITimeSource(gui), color); + } + + /** + * Creates a new TintAnimator which starts in the specified color + * and uses the specified Widget as time source. + * + * @param owner the Widget instance - must not be null + * @param color the starting color + */ + public TintAnimator(Widget owner, Color color) { + this(new GUITimeSource(owner), color); + } + /** * Creates a new TintAnimator which starts with Color.WHITE * @@ -94,6 +118,28 @@ public TintAnimator(TimeSource timeSource) { this(timeSource, Color.WHITE); } + /** + * Creates a new TintAnimator which starts with Color.WHITE + * and uses the specified GUI as time source. + * + * @param gui the GUI instance - must not be null + * @see GUITimeSource#GUITimeSource(de.matthiasmann.twl.GUI) + */ + public TintAnimator(GUI gui) { + this(new GUITimeSource(gui)); + } + + /** + * Creates a new TintAnimator which starts with Color.WHITE + * and uses the specified Widget as time source. + * + * @param owner the Widget instance - must not be null + * @see GUITimeSource#GUITimeSource(de.matthiasmann.twl.GUI) + */ + public TintAnimator(Widget owner) { + this(new GUITimeSource(owner)); + } + /** * Sets the current color without a fade. Any active fade is stopped. * The time source is also reset even so no animation is started. @@ -110,10 +156,33 @@ public void setColor(Color color) { } /** - * Fade the current color to the specified color. Any active fade is stopped. + * Registers a callback to be executed when the fade animation is finished. + * NOTE: the callback is only fired if the fade finishes via timeout and not + * when it is stopped through a call to {@link #fadeTo(de.matthiasmann.twl.Color, int) } + * or {@link #fadeToHide(int) }. + * + * @param cb the callback + */ + public void addFadeDoneCallback(Runnable cb) { + fadeDoneCallbacks = CallbackSupport.addCallbackToList(fadeDoneCallbacks, cb, Runnable.class); + } + + public void removeFadeDoneCallback(Runnable cb) { + fadeDoneCallbacks = CallbackSupport.removeCallbackFromList(fadeDoneCallbacks, cb); + } + + /** + * Fade the current color to the specified color. + * + *

    Any active fade is stopped.

    + * + *

    A zero or negative fadeDuration will set the new color + * directly and does not start a fade. So no callbacks are fired as a + * result of this.

    * * @param color the destination color of the fade * @param fadeDuration the fade time in miliseconds + * @see #addFadeDoneCallback(java.lang.Runnable) */ public void fadeTo(Color color, int fadeDuration) { if(fadeDuration <= 0) { @@ -131,13 +200,18 @@ public void fadeTo(Color color, int fadeDuration) { /** * Fade the current color to alpha 0.0f. Any active fade is stopped. * - * This method uses the current color (which may be a mix if a fade was + *

    This method uses the current color (which may be a mix if a fade was * active) as a base to fade the alpha value. Because of that the only * defined part of the target color is the alpha channel. This is * the reason why no fadeToShow method exists. Use fadeTo with the - * desired color to make the widget visible again. + * desired color to make the widget visible again.

    + * + *

    A zero or negative fadeDuration will set the alpha value + * directly and does not start a fade. So no callbacks are fired as a + * result of this.

    * * @param fadeDuration the fade time in miliseconds + * @see #addFadeDoneCallback(java.lang.Runnable) */ public void fadeToHide(int fadeDuration) { if(fadeDuration <= 0) { @@ -175,6 +249,8 @@ public void update() { (currentTint[1] < ONE_EPSILON) || (currentTint[2] < ONE_EPSILON) || (currentTint[3] < ONE_EPSILON); + // fire callbacks + CallbackSupport.fireCallbacks(fadeDoneCallbacks); } } } @@ -220,30 +296,60 @@ public void paintWithTint(Renderer renderer) { /** * A time source which uses the GUI object of the specified widget + * or a directly specified GUI instance. + * + *

    If using a Widget which is not part of a GUI tree then the time is + * frozen at 0, and starts ticking as soon as the widget is added to a + * GUI tree.

    */ public static final class GUITimeSource implements TimeSource { private final Widget owner; + private final GUI gui; private long startTime; + private boolean pendingReset; public GUITimeSource(Widget owner) { if(owner == null) { throw new NullPointerException("owner"); } this.owner = owner; + this.gui = null; resetTime(); } + public GUITimeSource(GUI gui) { + if(gui == null) { + throw new NullPointerException("gui"); + } + this.owner = null; + this.gui = gui; + } + + public int getTime() { - return (int)(getCurrentTime() - startTime); + GUI g = getGUI(); + if(g != null) { + if(pendingReset) { + pendingReset = false; + startTime = g.getCurrentTime(); + } + return (int)(g.getCurrentTime() - startTime) & Integer.MAX_VALUE; + } + return 0; } public void resetTime() { - startTime = getCurrentTime(); + GUI g = getGUI(); + if(g != null) { + startTime = g.getCurrentTime(); + pendingReset = false; + } else { + pendingReset = true; + } } - private long getCurrentTime() { - GUI gui = owner.getGUI(); - return (gui != null) ? gui.getCurrentTime() : 0; + private GUI getGUI() { + return (gui != null) ? gui : owner.getGUI(); } } diff --git a/twl/src/de/matthiasmann/twl/utils/XMLParser.java b/twl/src/de/matthiasmann/twl/utils/XMLParser.java index 0ea4f45..885a403 100644 --- a/twl/src/de/matthiasmann/twl/utils/XMLParser.java +++ b/twl/src/de/matthiasmann/twl/utils/XMLParser.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -214,6 +214,14 @@ public String getPositionDescription() { return desc; } + public int getLineNumber() { + return xpp.getLineNumber(); + } + + public int getColumnNumber() { + return xpp.getColumnNumber(); + } + public String getName() { return xpp.getName(); } @@ -333,6 +341,10 @@ public void ignoreOtherAttributes() { unusedAttributes.clear(); } + public boolean isAttributeUnused(int idx) { + return unusedAttributes.get(idx); + } + public XmlPullParserException error(String msg) { return new XmlPullParserException(msg, xpp, null); } @@ -358,7 +370,7 @@ protected > E parseEnum(Class enumClazz, String value) thro + "\" for enum class " + enumClazz, xpp, null); } - protected boolean parseBool(String value) throws XmlPullParserException { + public boolean parseBool(String value) throws XmlPullParserException { if("true".equals(value)) { return true; } else if("false".equals(value)) { @@ -437,5 +449,8 @@ static XmlPullParser newPullParser() throws XmlPullParserException { } throw xppfex; } + + private XPPF() { + } } } From 5edd39851814236bd9cef91bf7a64c8605987b13 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 28 Dec 2012 13:06:33 -0330 Subject: [PATCH 45/49] Major update. 0.15.2. Repackaged everything to sharose.mods.guiapi. Examples are also repackaged to sharose.mods.guiapi.examples. The GuiAPI mod file is now a forge style mod. GuiAPI as a whole requires Forge now. Fixed a bug relating to injecting the global mod options button (If you resized the window it would disappear and not come back) Made GuiAPI a coremod: It's just a dummy and doesn't do anything, but it will have TWL and such injected into the classpath far earlier than a regular mod, removing (for good) the need to edit the jar. --- mcp/mod_GuiAPI.java | 130 ---------- mcp/sharose/mods/guiapi/GuiAPI.java | 227 ++++++++++++++++++ .../mods/guiapi}/GuiApiButton.java | 3 +- .../mods/guiapi}/GuiApiFontHelper.java | 4 +- .../mods/guiapi}/GuiApiHelper.java | 2 +- .../mods/guiapi}/GuiModScreen.java | 4 +- .../mods/guiapi}/GuiModSelect.java | 4 +- .../mods/guiapi}/GuiWidgetScreen.java | 3 +- .../mods/guiapi}/IWidgetAlwaysDraw.java | 2 +- mcp/{ => sharose/mods/guiapi}/ModAction.java | 2 +- .../mods/guiapi}/ModSettingScreen.java | 2 +- .../mods/guiapi}/ModSettings.java | 2 +- mcp/{ => sharose/mods/guiapi}/Setting.java | 2 +- .../mods/guiapi}/SettingBoolean.java | 2 +- .../mods/guiapi}/SettingDictionary.java | 2 +- .../mods/guiapi}/SettingFloat.java | 2 +- mcp/{ => sharose/mods/guiapi}/SettingInt.java | 2 +- mcp/{ => sharose/mods/guiapi}/SettingKey.java | 2 +- .../mods/guiapi}/SettingList.java | 2 +- .../mods/guiapi}/SettingMulti.java | 2 +- .../mods/guiapi}/SettingText.java | 2 +- .../mods/guiapi}/WidgetBoolean.java | 2 +- .../mods/guiapi}/WidgetClassicTwocolumn.java | 2 +- .../mods/guiapi}/WidgetFloat.java | 2 +- mcp/{ => sharose/mods/guiapi}/WidgetInt.java | 2 +- .../mods/guiapi}/WidgetItem2DRender.java | 7 +- .../mods/guiapi}/WidgetKeybinding.java | 2 +- mcp/{ => sharose/mods/guiapi}/WidgetList.java | 2 +- .../mods/guiapi}/WidgetMulti.java | 2 +- .../mods/guiapi}/WidgetSetting.java | 2 +- .../mods/guiapi}/WidgetSimplewindow.java | 2 +- .../mods/guiapi}/WidgetSingleRow.java | 2 +- .../mods/guiapi}/WidgetSinglecolumn.java | 2 +- .../mods/guiapi}/WidgetSlider.java | 2 +- mcp/{ => sharose/mods/guiapi}/WidgetText.java | 2 +- mcp/{ => sharose/mods/guiapi}/WidgetTick.java | 2 +- .../guiapi/examples}/ItemGuiApiExample.java | 8 +- .../examples}/mod_GuiApiBasicExample.java | 8 +- .../mod_GuiApiIngameMessageExample.java | 7 +- .../mod_GuiApiIntermediateExample.java | 16 +- .../examples}/mod_GuiApiItemTickExample.java | 13 +- .../examples}/mod_GuiApiTWLExamples.java | 19 +- readme.md | 4 +- 43 files changed, 339 insertions(+), 174 deletions(-) delete mode 100644 mcp/mod_GuiAPI.java create mode 100644 mcp/sharose/mods/guiapi/GuiAPI.java rename mcp/{ => sharose/mods/guiapi}/GuiApiButton.java (90%) rename mcp/{ => sharose/mods/guiapi}/GuiApiFontHelper.java (99%) rename mcp/{ => sharose/mods/guiapi}/GuiApiHelper.java (99%) rename mcp/{ => sharose/mods/guiapi}/GuiModScreen.java (97%) rename mcp/{ => sharose/mods/guiapi}/GuiModSelect.java (93%) rename mcp/{ => sharose/mods/guiapi}/GuiWidgetScreen.java (98%) rename mcp/{ => sharose/mods/guiapi}/IWidgetAlwaysDraw.java (58%) rename mcp/{ => sharose/mods/guiapi}/ModAction.java (99%) rename mcp/{ => sharose/mods/guiapi}/ModSettingScreen.java (99%) rename mcp/{ => sharose/mods/guiapi}/ModSettings.java (99%) rename mcp/{ => sharose/mods/guiapi}/Setting.java (98%) rename mcp/{ => sharose/mods/guiapi}/SettingBoolean.java (97%) rename mcp/{ => sharose/mods/guiapi}/SettingDictionary.java (98%) rename mcp/{ => sharose/mods/guiapi}/SettingFloat.java (99%) rename mcp/{ => sharose/mods/guiapi}/SettingInt.java (99%) rename mcp/{ => sharose/mods/guiapi}/SettingKey.java (98%) rename mcp/{ => sharose/mods/guiapi}/SettingList.java (99%) rename mcp/{ => sharose/mods/guiapi}/SettingMulti.java (99%) rename mcp/{ => sharose/mods/guiapi}/SettingText.java (97%) rename mcp/{ => sharose/mods/guiapi}/WidgetBoolean.java (99%) rename mcp/{ => sharose/mods/guiapi}/WidgetClassicTwocolumn.java (99%) rename mcp/{ => sharose/mods/guiapi}/WidgetFloat.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetInt.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetItem2DRender.java (96%) rename mcp/{ => sharose/mods/guiapi}/WidgetKeybinding.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetList.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetMulti.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetSetting.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetSimplewindow.java (99%) rename mcp/{ => sharose/mods/guiapi}/WidgetSingleRow.java (99%) rename mcp/{ => sharose/mods/guiapi}/WidgetSinglecolumn.java (98%) rename mcp/{ => sharose/mods/guiapi}/WidgetSlider.java (97%) rename mcp/{ => sharose/mods/guiapi}/WidgetText.java (99%) rename mcp/{ => sharose/mods/guiapi}/WidgetTick.java (99%) rename mcp/{ => sharose/mods/guiapi/examples}/ItemGuiApiExample.java (85%) rename mcp/{ => sharose/mods/guiapi/examples}/mod_GuiApiBasicExample.java (96%) rename mcp/{ => sharose/mods/guiapi/examples}/mod_GuiApiIngameMessageExample.java (83%) rename mcp/{ => sharose/mods/guiapi/examples}/mod_GuiApiIntermediateExample.java (95%) rename mcp/{ => sharose/mods/guiapi/examples}/mod_GuiApiItemTickExample.java (93%) rename mcp/{ => sharose/mods/guiapi/examples}/mod_GuiApiTWLExamples.java (90%) diff --git a/mcp/mod_GuiAPI.java b/mcp/mod_GuiAPI.java deleted file mode 100644 index d1b0110..0000000 --- a/mcp/mod_GuiAPI.java +++ /dev/null @@ -1,130 +0,0 @@ -package net.minecraft.src; - -import java.util.ArrayList; - -import net.minecraft.client.Minecraft; - -public class mod_GuiAPI extends BaseMod { - - boolean cacheCheck = false; - - @Override - public String getVersion() { - return "0.15.1 for 1.4.5"; - } - - @Override - public void load() { - ModLoader.setInGUIHook(this, true, false); - } - - @Override - public boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui) - { - if(gui instanceof GuiOptions) - { - if(cacheCheck) - { - // Cached so we don't have to check this every frame - return true; - } - // First get a list of buttons - ArrayList buttonsPreSorted = new ArrayList(); - for (Object guiButton : gui.controlList) { - if(!(guiButton instanceof GuiButton)) - continue; - if(guiButton instanceof GuiSlider) - continue; - if(guiButton instanceof GuiSmallButton) - continue; - buttonsPreSorted.add((GuiButton)guiButton); - } - // Now sort by position. First, get the buttons with IDs of 101 and 100: 101 is left, 100 is right. - // Any button that doesn't have a position that doesn't fit into those 'columns' is ignored. - // Likewise with buttons that are too high, so we'll be storing the min y position too. - int leftPos = -1; // Video settings, aka 101 - int rightPos = -1; // Controls, aka 100 - int minY = -1; - for (GuiButton guiButton : buttonsPreSorted) { - if(guiButton.id == 101) - { - leftPos = guiButton.xPosition; - minY = guiButton.yPosition; - } - if(guiButton.id == 100) - { - rightPos = guiButton.xPosition; - minY = guiButton.yPosition; - } - } - - // Now make an array for it. Adding two as a 'just in case' thing: it should have room anyways. - - GuiButton[] sortedArray = new GuiButton[buttonsPreSorted.size() + 2]; - - for (GuiButton guiButton : buttonsPreSorted) { - if(guiButton.yPosition < minY) - { - continue; // Too high - } - if(guiButton.xPosition != leftPos && guiButton.xPosition != rightPos) - { - continue; // Not in the columns we are after - } - - // Now we know it's one of the ones we are after: but where does it go? let's get the X and Y pos needed. - // All the buttons are 24 pixels away from each other on Y, and we can check whether it's left or right. - - // This means that 0 is on top, 1 is the row below that, 2 is the row below that, etc. - int position = (guiButton.yPosition - minY) / 24; - - // Wonder what this could possibly mean. - boolean isRight = guiButton.xPosition == rightPos; - - // Now to get the final index, get the position * 2, and if it's on the right, add 1. - - int index = position * 2; - if(isRight) - { - index++; - } - - // Finally, add it to the array. - sortedArray[index] = guiButton; - } - - // Finally, add the GuiAPI button in the first available slot. I'm not gonna bother setting up a scroll area. - // This was for compat with other mods, of which I'm aware there are 2. And adding it would break those anyways. - - for (int i = 0; i < sortedArray.length; i++) { - if(sortedArray[i] != null) - continue; - // Ok! Now to get the positions needed! Is it on the left, or right? - boolean isRight = (i % 2 == 1); - int yIndex = i; - if(isRight) - { - // If it's on the right, lower it by 1. - yIndex--; - } - yIndex /= 2; // and divide by 2 - - // now to get the positions! - int xPos = (isRight ? rightPos : leftPos); - int yPos = minY + (yIndex * 24); - - // Finally, after all that work we can add the button. Finally. - gui.controlList.add(new GuiApiButton(300, xPos, yPos, 150, 20, "Global Mod Options")); - - // set the cache! - cacheCheck = true; - return true; - } - } - else - { - cacheCheck = false; - } - return true; - } -} diff --git a/mcp/sharose/mods/guiapi/GuiAPI.java b/mcp/sharose/mods/guiapi/GuiAPI.java new file mode 100644 index 0000000..da2ff5a --- /dev/null +++ b/mcp/sharose/mods/guiapi/GuiAPI.java @@ -0,0 +1,227 @@ +package sharose.mods.guiapi; + +import java.lang.reflect.Field; +import java.util.ArrayList; +import java.util.EnumSet; +import java.util.List; +import java.util.Map; + +import cpw.mods.fml.common.ITickHandler; +import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.Mod.Init; +import cpw.mods.fml.common.Mod.PreInit; +import cpw.mods.fml.common.TickType; +import cpw.mods.fml.common.event.FMLInitializationEvent; +import cpw.mods.fml.common.event.FMLPreInitializationEvent; +import cpw.mods.fml.common.registry.TickRegistry; +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; +import cpw.mods.fml.relauncher.Side; + +import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.*; +import net.minecraft.src.BaseMod; +import net.minecraft.src.ModLoader; + +@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.2", acceptedMinecraftVersions = "1.4.6") +public class GuiAPI implements IFMLLoadingPlugin, ITickHandler { + + Object cacheCheck = null; + Field controlListField; + + @Init + public void init(FMLInitializationEvent event) { + try { + Field[] fields = GuiScreen.class.getDeclaredFields(); + for (int i = 0; i < fields.length; i++) { + if (fields[i].getType() == List.class) { + controlListField = fields[i]; + controlListField.setAccessible(true); + break; + } + } + if (controlListField == null) { + throw new Exception("No fields found on GuiScreen (" + + GuiScreen.class.getSimpleName() + + ") of type List! This should never happen!"); + } + } catch (Throwable e) { + throw new RuntimeException( + "Unable to get Field reference for GuiScreen.controlList!", + e); + } + TickRegistry.registerTickHandler(this, Side.CLIENT); + } + + public List getControlList(GuiOptions gui) { + try { + return (List) controlListField.get(gui); + } catch (Throwable e) { + return null; // This should really print something, but it should + // never (ever) fire. + } + } + + public void processGuiOptions(GuiOptions gui) { + List controlList = getControlList(gui); + if (controlList == null) { + return; + } + if (controlList.get(0) == cacheCheck) { + // Cached so we don't have to check this every frame + return; + } + // First get a list of buttons + ArrayList buttonsPreSorted = new ArrayList(); + for (Object guiButton : controlList) { + if (!(guiButton instanceof GuiButton)) + continue; + if (guiButton instanceof GuiSlider) + continue; + if (guiButton instanceof GuiSmallButton) + continue; + buttonsPreSorted.add((GuiButton) guiButton); + } + // Now sort by position. First, get the buttons with IDs of 101 and 100: + // 101 is left, 100 is right. + // Any button that doesn't have a position that doesn't fit into those + // 'columns' is ignored. + // Likewise with buttons that are too high, so we'll be storing the min + // y position too. + int leftPos = -1; // Video settings, aka 101 + int rightPos = -1; // Controls, aka 100 + int minY = -1; + for (GuiButton guiButton : buttonsPreSorted) { + if (guiButton.id == 101) { + leftPos = guiButton.xPosition; + minY = guiButton.yPosition; + } + if (guiButton.id == 100) { + rightPos = guiButton.xPosition; + minY = guiButton.yPosition; + } + } + + // Now make an array for it. Adding two as a 'just in case' thing: it + // should have room anyways. + + GuiButton[] sortedArray = new GuiButton[buttonsPreSorted.size() + 2]; + + for (GuiButton guiButton : buttonsPreSorted) { + if (guiButton.yPosition < minY) { + continue; // Too high + } + if (guiButton.xPosition != leftPos + && guiButton.xPosition != rightPos) { + continue; // Not in the columns we are after + } + + // Now we know it's one of the ones we are after: but where does it + // go? let's get the X and Y pos needed. + // All the buttons are 24 pixels away from each other on Y, and we + // can check whether it's left or right. + + // This means that 0 is on top, 1 is the row below that, 2 is the + // row below that, etc. + int position = (guiButton.yPosition - minY) / 24; + + // Wonder what this could possibly mean. + boolean isRight = guiButton.xPosition == rightPos; + + // Now to get the final index, get the position * 2, and if it's on + // the right, add 1. + + int index = position * 2; + if (isRight) { + index++; + } + + // Finally, add it to the array. + sortedArray[index] = guiButton; + } + + // Finally, add the GuiAPI button in the first available slot. I'm not + // gonna bother setting up a scroll area. + // This was for compat with other mods, of which I'm aware there are 2. + // And adding it would break those anyways. + + for (int i = 0; i < sortedArray.length; i++) { + if (sortedArray[i] != null) + continue; + // Ok! Now to get the positions needed! Is it on the left, or right? + boolean isRight = (i % 2 == 1); + int yIndex = i; + if (isRight) { + // If it's on the right, lower it by 1. + yIndex--; + } + yIndex /= 2; // and divide by 2 + + // now to get the positions! + int xPos = (isRight ? rightPos : leftPos); + int yPos = minY + (yIndex * 24); + + // Finally, after all that work we can add the button. Finally. + controlList.add(new GuiApiButton(300, xPos, yPos, 150, 20, + "Global Mod Options")); + + // set the cache! + cacheCheck = controlList.get(0); + return; + } + } + + @Override + public String[] getLibraryRequestClass() { + return null; + } + + @Override + public String[] getASMTransformerClass() { + return null; + } + + @Override + public String getModContainerClass() { + return null; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map data) { + } + + @Override + public void tickStart(EnumSet type, Object... tickData) { + if (!type.contains(TickType.RENDER)) { + return; + } + if (Minecraft.getMinecraft() == null) { + return; // what + } + if (Minecraft.getMinecraft().currentScreen == null) { + return; + } + if (Minecraft.getMinecraft().currentScreen instanceof GuiOptions) { + processGuiOptions((GuiOptions) Minecraft.getMinecraft().currentScreen); + } + } + + @Override + public void tickEnd(EnumSet type, Object... tickData) { + + } + + @Override + public EnumSet ticks() { + return EnumSet.of(TickType.RENDER); + } + + @Override + public String getLabel() { + return "GuiAPI main menu checker"; + } +} diff --git a/mcp/GuiApiButton.java b/mcp/sharose/mods/guiapi/GuiApiButton.java similarity index 90% rename from mcp/GuiApiButton.java rename to mcp/sharose/mods/guiapi/GuiApiButton.java index 269f5b9..38d61e7 100644 --- a/mcp/GuiApiButton.java +++ b/mcp/sharose/mods/guiapi/GuiApiButton.java @@ -1,6 +1,7 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiButton; public class GuiApiButton extends GuiButton { diff --git a/mcp/GuiApiFontHelper.java b/mcp/sharose/mods/guiapi/GuiApiFontHelper.java similarity index 99% rename from mcp/GuiApiFontHelper.java rename to mcp/sharose/mods/guiapi/GuiApiFontHelper.java index d854c8d..7b7e4a1 100644 --- a/mcp/GuiApiFontHelper.java +++ b/mcp/sharose/mods/guiapi/GuiApiFontHelper.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.HashMap; import java.util.Map; @@ -26,7 +26,7 @@ public class GuiApiFontHelper { * @author ShaRose * */ - enum FontStates { + public enum FontStates { disabled, error, hover, normal, textSelection, warning } diff --git a/mcp/GuiApiHelper.java b/mcp/sharose/mods/guiapi/GuiApiHelper.java similarity index 99% rename from mcp/GuiApiHelper.java rename to mcp/sharose/mods/guiapi/GuiApiHelper.java index 5759390..6fef51a 100644 --- a/mcp/GuiApiHelper.java +++ b/mcp/sharose/mods/guiapi/GuiApiHelper.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.AbstractMap; import java.util.ArrayList; diff --git a/mcp/GuiModScreen.java b/mcp/sharose/mods/guiapi/GuiModScreen.java similarity index 97% rename from mcp/GuiModScreen.java rename to mcp/sharose/mods/guiapi/GuiModScreen.java index 4b6b73f..273e426 100644 --- a/mcp/GuiModScreen.java +++ b/mcp/sharose/mods/guiapi/GuiModScreen.java @@ -1,6 +1,8 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.GuiScreen; +import net.minecraft.client.gui.ScaledResolution; import de.matthiasmann.twl.Widget; import de.matthiasmann.twl.renderer.lwjgl.LWJGLRenderer; import de.matthiasmann.twl.renderer.lwjgl.RenderScale; diff --git a/mcp/GuiModSelect.java b/mcp/sharose/mods/guiapi/GuiModSelect.java similarity index 93% rename from mcp/GuiModSelect.java rename to mcp/sharose/mods/guiapi/GuiModSelect.java index e2af205..c4aecb0 100644 --- a/mcp/GuiModSelect.java +++ b/mcp/sharose/mods/guiapi/GuiModSelect.java @@ -1,4 +1,6 @@ -package net.minecraft.src; +package sharose.mods.guiapi; + +import net.minecraft.client.gui.GuiScreen; /** * This is a Subclass of GuiModScreen, and acts as the entry point from the diff --git a/mcp/GuiWidgetScreen.java b/mcp/sharose/mods/guiapi/GuiWidgetScreen.java similarity index 98% rename from mcp/GuiWidgetScreen.java rename to mcp/sharose/mods/guiapi/GuiWidgetScreen.java index ca3fa21..c30f5a9 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/sharose/mods/guiapi/GuiWidgetScreen.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.io.IOException; import java.net.URL; @@ -6,6 +6,7 @@ import java.net.URLStreamHandler; import net.minecraft.client.Minecraft; +import net.minecraft.client.gui.ScaledResolution; import de.matthiasmann.twl.GUI; import de.matthiasmann.twl.Widget; import de.matthiasmann.twl.input.lwjgl.LWJGLInput; diff --git a/mcp/IWidgetAlwaysDraw.java b/mcp/sharose/mods/guiapi/IWidgetAlwaysDraw.java similarity index 58% rename from mcp/IWidgetAlwaysDraw.java rename to mcp/sharose/mods/guiapi/IWidgetAlwaysDraw.java index ebc862c..d7ffdc4 100644 --- a/mcp/IWidgetAlwaysDraw.java +++ b/mcp/sharose/mods/guiapi/IWidgetAlwaysDraw.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; public interface IWidgetAlwaysDraw { diff --git a/mcp/ModAction.java b/mcp/sharose/mods/guiapi/ModAction.java similarity index 99% rename from mcp/ModAction.java rename to mcp/sharose/mods/guiapi/ModAction.java index 178d04f..fe3c4ae 100644 --- a/mcp/ModAction.java +++ b/mcp/sharose/mods/guiapi/ModAction.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.beans.PropertyChangeEvent; import java.beans.PropertyChangeListener; diff --git a/mcp/ModSettingScreen.java b/mcp/sharose/mods/guiapi/ModSettingScreen.java similarity index 99% rename from mcp/ModSettingScreen.java rename to mcp/sharose/mods/guiapi/ModSettingScreen.java index 2948ffb..cd98e7e 100644 --- a/mcp/ModSettingScreen.java +++ b/mcp/sharose/mods/guiapi/ModSettingScreen.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.ArrayList; diff --git a/mcp/ModSettings.java b/mcp/sharose/mods/guiapi/ModSettings.java similarity index 99% rename from mcp/ModSettings.java rename to mcp/sharose/mods/guiapi/ModSettings.java index 3688851..e9808c1 100644 --- a/mcp/ModSettings.java +++ b/mcp/sharose/mods/guiapi/ModSettings.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.io.File; import java.io.FileInputStream; diff --git a/mcp/Setting.java b/mcp/sharose/mods/guiapi/Setting.java similarity index 98% rename from mcp/Setting.java rename to mcp/sharose/mods/guiapi/Setting.java index 64af60d..a3f2db9 100644 --- a/mcp/Setting.java +++ b/mcp/sharose/mods/guiapi/Setting.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.HashMap; diff --git a/mcp/SettingBoolean.java b/mcp/sharose/mods/guiapi/SettingBoolean.java similarity index 97% rename from mcp/SettingBoolean.java rename to mcp/sharose/mods/guiapi/SettingBoolean.java index 3571ec5..0ac422b 100644 --- a/mcp/SettingBoolean.java +++ b/mcp/sharose/mods/guiapi/SettingBoolean.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; /** * This is the Setting type for Booleans. diff --git a/mcp/SettingDictionary.java b/mcp/sharose/mods/guiapi/SettingDictionary.java similarity index 98% rename from mcp/SettingDictionary.java rename to mcp/sharose/mods/guiapi/SettingDictionary.java index e6faec0..a67d062 100644 --- a/mcp/SettingDictionary.java +++ b/mcp/sharose/mods/guiapi/SettingDictionary.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; diff --git a/mcp/SettingFloat.java b/mcp/sharose/mods/guiapi/SettingFloat.java similarity index 99% rename from mcp/SettingFloat.java rename to mcp/sharose/mods/guiapi/SettingFloat.java index 0d8fab2..3085a08 100644 --- a/mcp/SettingFloat.java +++ b/mcp/sharose/mods/guiapi/SettingFloat.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; /** * This is the Setting type for Floats. diff --git a/mcp/SettingInt.java b/mcp/sharose/mods/guiapi/SettingInt.java similarity index 99% rename from mcp/SettingInt.java rename to mcp/sharose/mods/guiapi/SettingInt.java index 3d218c3..5c64a2b 100644 --- a/mcp/SettingInt.java +++ b/mcp/sharose/mods/guiapi/SettingInt.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; /** * This is the Setting type for Ints. diff --git a/mcp/SettingKey.java b/mcp/sharose/mods/guiapi/SettingKey.java similarity index 98% rename from mcp/SettingKey.java rename to mcp/sharose/mods/guiapi/SettingKey.java index 98210fa..20d0580 100644 --- a/mcp/SettingKey.java +++ b/mcp/sharose/mods/guiapi/SettingKey.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import org.lwjgl.input.Keyboard; diff --git a/mcp/SettingList.java b/mcp/sharose/mods/guiapi/SettingList.java similarity index 99% rename from mcp/SettingList.java rename to mcp/sharose/mods/guiapi/SettingList.java index 714b869..9892063 100644 --- a/mcp/SettingList.java +++ b/mcp/sharose/mods/guiapi/SettingList.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.io.ByteArrayOutputStream; import java.util.ArrayList; diff --git a/mcp/SettingMulti.java b/mcp/sharose/mods/guiapi/SettingMulti.java similarity index 99% rename from mcp/SettingMulti.java rename to mcp/sharose/mods/guiapi/SettingMulti.java index 8736e67..699f310 100644 --- a/mcp/SettingMulti.java +++ b/mcp/sharose/mods/guiapi/SettingMulti.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; /** * This is the Setting type for Multis. diff --git a/mcp/SettingText.java b/mcp/sharose/mods/guiapi/SettingText.java similarity index 97% rename from mcp/SettingText.java rename to mcp/sharose/mods/guiapi/SettingText.java index bc1d3aa..5d31447 100644 --- a/mcp/SettingText.java +++ b/mcp/sharose/mods/guiapi/SettingText.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; /** * This is the Setting type for Text. diff --git a/mcp/WidgetBoolean.java b/mcp/sharose/mods/guiapi/WidgetBoolean.java similarity index 99% rename from mcp/WidgetBoolean.java rename to mcp/sharose/mods/guiapi/WidgetBoolean.java index 9d01d46..f79adb3 100644 --- a/mcp/WidgetBoolean.java +++ b/mcp/sharose/mods/guiapi/WidgetBoolean.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.Button; import de.matthiasmann.twl.model.SimpleButtonModel; diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/sharose/mods/guiapi/WidgetClassicTwocolumn.java similarity index 99% rename from mcp/WidgetClassicTwocolumn.java rename to mcp/sharose/mods/guiapi/WidgetClassicTwocolumn.java index b2edfcf..ba20c49 100644 --- a/mcp/WidgetClassicTwocolumn.java +++ b/mcp/sharose/mods/guiapi/WidgetClassicTwocolumn.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.HashMap; import java.util.Map; diff --git a/mcp/WidgetFloat.java b/mcp/sharose/mods/guiapi/WidgetFloat.java similarity index 98% rename from mcp/WidgetFloat.java rename to mcp/sharose/mods/guiapi/WidgetFloat.java index 71c19a4..a58bb88 100644 --- a/mcp/WidgetFloat.java +++ b/mcp/sharose/mods/guiapi/WidgetFloat.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.model.SimpleFloatModel; diff --git a/mcp/WidgetInt.java b/mcp/sharose/mods/guiapi/WidgetInt.java similarity index 98% rename from mcp/WidgetInt.java rename to mcp/sharose/mods/guiapi/WidgetInt.java index fcdd228..3ecb282 100644 --- a/mcp/WidgetInt.java +++ b/mcp/sharose/mods/guiapi/WidgetInt.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.model.SimpleFloatModel; diff --git a/mcp/WidgetItem2DRender.java b/mcp/sharose/mods/guiapi/WidgetItem2DRender.java similarity index 96% rename from mcp/WidgetItem2DRender.java rename to mcp/sharose/mods/guiapi/WidgetItem2DRender.java index 228244a..1a7dbbf 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/sharose/mods/guiapi/WidgetItem2DRender.java @@ -1,8 +1,13 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.lang.reflect.Field; import net.minecraft.client.Minecraft; +import net.minecraft.client.renderer.RenderHelper; +import net.minecraft.client.renderer.Tessellator; +import net.minecraft.client.renderer.entity.RenderItem; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; import org.lwjgl.opengl.GL11; diff --git a/mcp/WidgetKeybinding.java b/mcp/sharose/mods/guiapi/WidgetKeybinding.java similarity index 98% rename from mcp/WidgetKeybinding.java rename to mcp/sharose/mods/guiapi/WidgetKeybinding.java index 9536f98..f98ded2 100644 --- a/mcp/WidgetKeybinding.java +++ b/mcp/sharose/mods/guiapi/WidgetKeybinding.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import org.lwjgl.input.Keyboard; diff --git a/mcp/WidgetList.java b/mcp/sharose/mods/guiapi/WidgetList.java similarity index 98% rename from mcp/WidgetList.java rename to mcp/sharose/mods/guiapi/WidgetList.java index 522b593..c9f1b59 100644 --- a/mcp/WidgetList.java +++ b/mcp/sharose/mods/guiapi/WidgetList.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.CallbackWithReason; import de.matthiasmann.twl.Label; diff --git a/mcp/WidgetMulti.java b/mcp/sharose/mods/guiapi/WidgetMulti.java similarity index 98% rename from mcp/WidgetMulti.java rename to mcp/sharose/mods/guiapi/WidgetMulti.java index ef66fa1..0537264 100644 --- a/mcp/WidgetMulti.java +++ b/mcp/sharose/mods/guiapi/WidgetMulti.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.Button; import de.matthiasmann.twl.model.SimpleButtonModel; diff --git a/mcp/WidgetSetting.java b/mcp/sharose/mods/guiapi/WidgetSetting.java similarity index 98% rename from mcp/WidgetSetting.java rename to mcp/sharose/mods/guiapi/WidgetSetting.java index 6d7bde1..bb93ba8 100644 --- a/mcp/WidgetSetting.java +++ b/mcp/sharose/mods/guiapi/WidgetSetting.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.ArrayList; diff --git a/mcp/WidgetSimplewindow.java b/mcp/sharose/mods/guiapi/WidgetSimplewindow.java similarity index 99% rename from mcp/WidgetSimplewindow.java rename to mcp/sharose/mods/guiapi/WidgetSimplewindow.java index 9e0b0ea..f12acb1 100644 --- a/mcp/WidgetSimplewindow.java +++ b/mcp/sharose/mods/guiapi/WidgetSimplewindow.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.Button; import de.matthiasmann.twl.Label; diff --git a/mcp/WidgetSingleRow.java b/mcp/sharose/mods/guiapi/WidgetSingleRow.java similarity index 99% rename from mcp/WidgetSingleRow.java rename to mcp/sharose/mods/guiapi/WidgetSingleRow.java index 0b97167..336d215 100644 --- a/mcp/WidgetSingleRow.java +++ b/mcp/sharose/mods/guiapi/WidgetSingleRow.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.ArrayList; diff --git a/mcp/WidgetSinglecolumn.java b/mcp/sharose/mods/guiapi/WidgetSinglecolumn.java similarity index 98% rename from mcp/WidgetSinglecolumn.java rename to mcp/sharose/mods/guiapi/WidgetSinglecolumn.java index e110e53..9c5408e 100644 --- a/mcp/WidgetSinglecolumn.java +++ b/mcp/sharose/mods/guiapi/WidgetSinglecolumn.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.Widget; diff --git a/mcp/WidgetSlider.java b/mcp/sharose/mods/guiapi/WidgetSlider.java similarity index 97% rename from mcp/WidgetSlider.java rename to mcp/sharose/mods/guiapi/WidgetSlider.java index 156c5a2..4449ff4 100644 --- a/mcp/WidgetSlider.java +++ b/mcp/sharose/mods/guiapi/WidgetSlider.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.ValueAdjusterFloat; import de.matthiasmann.twl.model.FloatModel; diff --git a/mcp/WidgetText.java b/mcp/sharose/mods/guiapi/WidgetText.java similarity index 99% rename from mcp/WidgetText.java rename to mcp/sharose/mods/guiapi/WidgetText.java index 17b5da1..8245a13 100644 --- a/mcp/WidgetText.java +++ b/mcp/sharose/mods/guiapi/WidgetText.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import de.matthiasmann.twl.EditField; import de.matthiasmann.twl.Label; diff --git a/mcp/WidgetTick.java b/mcp/sharose/mods/guiapi/WidgetTick.java similarity index 99% rename from mcp/WidgetTick.java rename to mcp/sharose/mods/guiapi/WidgetTick.java index 262090e..14b12b2 100644 --- a/mcp/WidgetTick.java +++ b/mcp/sharose/mods/guiapi/WidgetTick.java @@ -1,4 +1,4 @@ -package net.minecraft.src; +package sharose.mods.guiapi; import java.util.ArrayList; import java.util.Collections; diff --git a/mcp/ItemGuiApiExample.java b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java similarity index 85% rename from mcp/ItemGuiApiExample.java rename to mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java index 34cf9ef..507dcb8 100644 --- a/mcp/ItemGuiApiExample.java +++ b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java @@ -1,5 +1,11 @@ -package net.minecraft.src; +package sharose.mods.guiapi.examples; +import sharose.mods.guiapi.GuiApiHelper; +import sharose.mods.guiapi.GuiModScreen; +import net.minecraft.entity.player.EntityPlayer; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.world.World; import de.matthiasmann.twl.Widget; /** diff --git a/mcp/mod_GuiApiBasicExample.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiBasicExample.java similarity index 96% rename from mcp/mod_GuiApiBasicExample.java rename to mcp/sharose/mods/guiapi/examples/mod_GuiApiBasicExample.java index ba5755d..decc540 100644 --- a/mcp/mod_GuiApiBasicExample.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiBasicExample.java @@ -1,4 +1,10 @@ -package net.minecraft.src; +package sharose.mods.guiapi.examples; + +import sharose.mods.guiapi.GuiApiHelper; +import sharose.mods.guiapi.GuiModScreen; +import sharose.mods.guiapi.ModSettingScreen; +import sharose.mods.guiapi.ModSettings; +import net.minecraft.src.BaseMod; /** * This is the BASIC example of GuiAPI usage. We are going to create a diff --git a/mcp/mod_GuiApiIngameMessageExample.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java similarity index 83% rename from mcp/mod_GuiApiIngameMessageExample.java rename to mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java index fe4d64c..4e06230 100644 --- a/mcp/mod_GuiApiIngameMessageExample.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java @@ -1,4 +1,9 @@ -package net.minecraft.src; +package sharose.mods.guiapi.examples; + +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.src.BaseMod; +import net.minecraft.src.ModLoader; /** * This is a small example for how to make a user dialog. This part is just diff --git a/mcp/mod_GuiApiIntermediateExample.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIntermediateExample.java similarity index 95% rename from mcp/mod_GuiApiIntermediateExample.java rename to mcp/sharose/mods/guiapi/examples/mod_GuiApiIntermediateExample.java index 71cbf29..01ad73c 100644 --- a/mcp/mod_GuiApiIntermediateExample.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIntermediateExample.java @@ -1,5 +1,19 @@ -package net.minecraft.src; +package sharose.mods.guiapi.examples; +import sharose.mods.guiapi.GuiApiHelper; +import sharose.mods.guiapi.GuiModScreen; +import sharose.mods.guiapi.ModAction; +import sharose.mods.guiapi.ModSettingScreen; +import sharose.mods.guiapi.ModSettings; +import sharose.mods.guiapi.Setting; +import sharose.mods.guiapi.SettingBoolean; +import sharose.mods.guiapi.SettingFloat; +import sharose.mods.guiapi.SettingInt; +import sharose.mods.guiapi.SettingMulti; +import sharose.mods.guiapi.SettingText; +import sharose.mods.guiapi.WidgetSimplewindow; +import sharose.mods.guiapi.WidgetSinglecolumn; +import net.minecraft.src.BaseMod; import de.matthiasmann.twl.TextArea; import de.matthiasmann.twl.Widget; diff --git a/mcp/mod_GuiApiItemTickExample.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiItemTickExample.java similarity index 93% rename from mcp/mod_GuiApiItemTickExample.java rename to mcp/sharose/mods/guiapi/examples/mod_GuiApiItemTickExample.java index 60fa41d..651d020 100644 --- a/mcp/mod_GuiApiItemTickExample.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiItemTickExample.java @@ -1,4 +1,15 @@ -package net.minecraft.src; + package sharose.mods.guiapi.examples; + +import sharose.mods.guiapi.ModAction; +import sharose.mods.guiapi.ModSettingScreen; +import sharose.mods.guiapi.ModSettings; +import sharose.mods.guiapi.SettingBoolean; +import sharose.mods.guiapi.SettingInt; +import sharose.mods.guiapi.WidgetItem2DRender; +import sharose.mods.guiapi.WidgetTick; +import net.minecraft.item.Item; +import net.minecraft.item.ItemStack; +import net.minecraft.src.BaseMod; /** * This is an example specifically focused to some usage of {@link WidgetTick} diff --git a/mcp/mod_GuiApiTWLExamples.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiTWLExamples.java similarity index 90% rename from mcp/mod_GuiApiTWLExamples.java rename to mcp/sharose/mods/guiapi/examples/mod_GuiApiTWLExamples.java index e3fa00b..ba930fe 100644 --- a/mcp/mod_GuiApiTWLExamples.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiTWLExamples.java @@ -1,8 +1,23 @@ -package net.minecraft.src; +package sharose.mods.guiapi.examples; import java.util.Random; -import net.minecraft.src.GuiApiFontHelper.FontStates; +import sharose.mods.guiapi.GuiApiFontHelper; +import sharose.mods.guiapi.GuiApiHelper; +import sharose.mods.guiapi.GuiModScreen; +import sharose.mods.guiapi.ModAction; +import sharose.mods.guiapi.ModSettingScreen; +import sharose.mods.guiapi.ModSettings; +import sharose.mods.guiapi.SettingList; +import sharose.mods.guiapi.SettingText; +import sharose.mods.guiapi.WidgetList; +import sharose.mods.guiapi.WidgetSimplewindow; +import sharose.mods.guiapi.WidgetSingleRow; +import sharose.mods.guiapi.WidgetSinglecolumn; +import sharose.mods.guiapi.WidgetText; +import sharose.mods.guiapi.GuiApiFontHelper.FontStates; + +import net.minecraft.src.BaseMod; import de.matthiasmann.twl.ColorSelector; import de.matthiasmann.twl.Label; import de.matthiasmann.twl.ListBox; diff --git a/readme.md b/readme.md index 616f0a8..d8afdcf 100644 --- a/readme.md +++ b/readme.md @@ -6,9 +6,9 @@ GuiAPI uses the TWL library from Matthias Mann, see http://twl.l33tlabs.org/ Building -------- -* Decompile Minecraft with MCP. If you are using forge, use that install script. Basically start as if you weren't going to use GuiAPI at all. +* Use the forge installer script. (It will decompile minecraft for you, as well as download it, etc) * Now, download the Dev package you need for your version of GuiAPI. For example, if you were developing for 0.15.1, since there's no 0.15.1 dev package, you would download the dev package for 0.15.0. Copy the contents of this into Minecraft.jar. -* After that, drag in all the mcp source files from mcp/* into the src\minecraft\net\minecraft\src directory in MCP. +* After that, drag in all the mcp source files from mcp/* into the src\minecraft directory in MCP. * Now recompile and test! You are all done. Packaging From 9d2f03352d96a59fe67799e4c85958bec6674b9d Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 16 Mar 2013 19:17:19 -0230 Subject: [PATCH 46/49] Updated to 0.15.3 for 1.5. Also, the button add code is hacked together now so it forces it into the corner between touchscreen mode and difficulty because there's literally nowhere else to stick it. I'm so sorry. I hope I can get around to rewriting the internals later so they are fit for forge, since apparently whoever it was who asked for it didn't want to put in the effort for it and thus the deadline was missed. At least when I do it it'll hopefully use coremodding and stuff on TWL so I don't need to manually patch it all whenever I get around to updating it. Also it'll be less shit internally, maybe. --- mcp/sharose/mods/guiapi/GuiAPI.java | 107 ++++-------------- .../guiapi/examples/ItemGuiApiExample.java | 11 ++ .../mod_GuiApiIngameMessageExample.java | 6 +- 3 files changed, 35 insertions(+), 89 deletions(-) diff --git a/mcp/sharose/mods/guiapi/GuiAPI.java b/mcp/sharose/mods/guiapi/GuiAPI.java index da2ff5a..f55435c 100644 --- a/mcp/sharose/mods/guiapi/GuiAPI.java +++ b/mcp/sharose/mods/guiapi/GuiAPI.java @@ -19,10 +19,11 @@ import net.minecraft.client.Minecraft; import net.minecraft.client.gui.*; +import net.minecraft.client.settings.EnumOptions; import net.minecraft.src.BaseMod; import net.minecraft.src.ModLoader; -@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.2", acceptedMinecraftVersions = "1.4.6") +@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.3", acceptedMinecraftVersions = "1.5") public class GuiAPI implements IFMLLoadingPlugin, ITickHandler { Object cacheCheck = null; @@ -70,104 +71,38 @@ public void processGuiOptions(GuiOptions gui) { // Cached so we don't have to check this every frame return; } + + // I hacked this out so it just sticks it between touchscreen mode and difficulty. I'm so sorry. + // First get a list of buttons - ArrayList buttonsPreSorted = new ArrayList(); + ArrayList buttonsPreSorted = new ArrayList(); for (Object guiButton : controlList) { - if (!(guiButton instanceof GuiButton)) - continue; - if (guiButton instanceof GuiSlider) - continue; if (guiButton instanceof GuiSmallButton) - continue; - buttonsPreSorted.add((GuiButton) guiButton); - } - // Now sort by position. First, get the buttons with IDs of 101 and 100: - // 101 is left, 100 is right. - // Any button that doesn't have a position that doesn't fit into those - // 'columns' is ignored. - // Likewise with buttons that are too high, so we'll be storing the min - // y position too. - int leftPos = -1; // Video settings, aka 101 - int rightPos = -1; // Controls, aka 100 - int minY = -1; - for (GuiButton guiButton : buttonsPreSorted) { - if (guiButton.id == 101) { - leftPos = guiButton.xPosition; - minY = guiButton.yPosition; - } - if (guiButton.id == 100) { - rightPos = guiButton.xPosition; - minY = guiButton.yPosition; - } + buttonsPreSorted.add((GuiSmallButton) guiButton); } - - // Now make an array for it. Adding two as a 'just in case' thing: it - // should have room anyways. - - GuiButton[] sortedArray = new GuiButton[buttonsPreSorted.size() + 2]; - - for (GuiButton guiButton : buttonsPreSorted) { - if (guiButton.yPosition < minY) { - continue; // Too high - } - if (guiButton.xPosition != leftPos - && guiButton.xPosition != rightPos) { - continue; // Not in the columns we are after + + + + int xPos = -1; // difficulty + int yPos = -1; // touchscreen mode + for (GuiSmallButton guiButton : buttonsPreSorted) { + if(guiButton.returnEnumOptions() == EnumOptions.DIFFICULTY) + { + xPos = guiButton.xPosition; } - - // Now we know it's one of the ones we are after: but where does it - // go? let's get the X and Y pos needed. - // All the buttons are 24 pixels away from each other on Y, and we - // can check whether it's left or right. - - // This means that 0 is on top, 1 is the row below that, 2 is the - // row below that, etc. - int position = (guiButton.yPosition - minY) / 24; - - // Wonder what this could possibly mean. - boolean isRight = guiButton.xPosition == rightPos; - - // Now to get the final index, get the position * 2, and if it's on - // the right, add 1. - - int index = position * 2; - if (isRight) { - index++; + + if(guiButton.returnEnumOptions() == EnumOptions.TOUCHSCREEN) + { + yPos = guiButton.yPosition; } - - // Finally, add it to the array. - sortedArray[index] = guiButton; } - // Finally, add the GuiAPI button in the first available slot. I'm not - // gonna bother setting up a scroll area. - // This was for compat with other mods, of which I'm aware there are 2. - // And adding it would break those anyways. - - for (int i = 0; i < sortedArray.length; i++) { - if (sortedArray[i] != null) - continue; - // Ok! Now to get the positions needed! Is it on the left, or right? - boolean isRight = (i % 2 == 1); - int yIndex = i; - if (isRight) { - // If it's on the right, lower it by 1. - yIndex--; - } - yIndex /= 2; // and divide by 2 - - // now to get the positions! - int xPos = (isRight ? rightPos : leftPos); - int yPos = minY + (yIndex * 24); - - // Finally, after all that work we can add the button. Finally. + controlList.add(new GuiApiButton(300, xPos, yPos, 150, 20, "Global Mod Options")); // set the cache! cacheCheck = controlList.get(0); - return; - } } @Override diff --git a/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java index 507dcb8..f99d206 100644 --- a/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java +++ b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java @@ -1,7 +1,10 @@ package sharose.mods.guiapi.examples; +import cpw.mods.fml.relauncher.Side; +import cpw.mods.fml.relauncher.SideOnly; import sharose.mods.guiapi.GuiApiHelper; import sharose.mods.guiapi.GuiModScreen; +import net.minecraft.client.renderer.texture.IconRegister; import net.minecraft.entity.player.EntityPlayer; import net.minecraft.item.Item; import net.minecraft.item.ItemStack; @@ -51,4 +54,12 @@ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, return par1ItemStack; // Return the ItemStack without any changes (we aren't using it up). } + + @Override + @SideOnly(Side.CLIENT) + public void func_94581_a(IconRegister par1IconRegister) + { + this.iconIndex = Item.sign.getIconFromDamage(0); + return; // Please, please never do this. This is just a hack. + } } diff --git a/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java index 4e06230..ab6c1da 100644 --- a/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java +++ b/mcp/sharose/mods/guiapi/examples/mod_GuiApiIngameMessageExample.java @@ -25,9 +25,9 @@ public String getVersion() { @Override public void load() { - exampleItem = new ItemGuiApiExample(28000).setItemName( - "GuiApiExampleItem").setIconCoord(10, 2); - // Create the example item, set the Name, and give it the sign's icon. + exampleItem = new ItemGuiApiExample(28000).setUnlocalizedName( + "GuiApiExampleItem"); + // Create the example item, set the Name. It will use the sign's icon itself. ModLoader.addName(exampleItem, "GuiAPI Example Item"); // Give it a 'real' name. ModLoader.addShapelessRecipe(new ItemStack(exampleItem), new Object[] { From 8343c9820144a494ee790050587f73d5ca04d096 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 16 Mar 2013 14:53:10 -0700 Subject: [PATCH 47/49] Update readme.md Made it specifically say everything was in the releases branch. --- readme.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/readme.md b/readme.md index d8afdcf..b30b83d 100644 --- a/readme.md +++ b/readme.md @@ -8,6 +8,7 @@ Building * Use the forge installer script. (It will decompile minecraft for you, as well as download it, etc) * Now, download the Dev package you need for your version of GuiAPI. For example, if you were developing for 0.15.1, since there's no 0.15.1 dev package, you would download the dev package for 0.15.0. Copy the contents of this into Minecraft.jar. + * Dev Packages and all previous versions of GuiAPI are available in the 'releases' branch. * After that, drag in all the mcp source files from mcp/* into the src\minecraft directory in MCP. * Now recompile and test! You are all done. @@ -27,4 +28,4 @@ Credits Documentation ------------- -All releases should be tagged here on github, and you can view the docs there. I haven't bothered setting up proper javadocs hosting on github yet. \ No newline at end of file +All releases should be tagged here on github, and you can view the docs there. I haven't bothered setting up proper javadocs hosting on github yet. From d6ba10e1fb8f5d771f8b548f8fc73c69904a6fa7 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 12 Apr 2013 13:21:04 -0230 Subject: [PATCH 48/49] Updated for 0.15.5, 1.5.1. Didn't push last time. Fixed the cannot find isDrawing issue in 0.15.4. Not that it matters, since it turns out the field is public again now. Likewise, I used the ObfuscationReflectionHelper system to try and get the field for GuiScreen.buttonList instead of the loop, but it'll still fall back. --- mcp/sharose/mods/guiapi/GuiAPI.java | 82 +++++++++--------- .../mods/guiapi/WidgetItem2DRender.java | 86 ++----------------- .../guiapi/examples/ItemGuiApiExample.java | 2 +- 3 files changed, 49 insertions(+), 121 deletions(-) diff --git a/mcp/sharose/mods/guiapi/GuiAPI.java b/mcp/sharose/mods/guiapi/GuiAPI.java index f55435c..13ef535 100644 --- a/mcp/sharose/mods/guiapi/GuiAPI.java +++ b/mcp/sharose/mods/guiapi/GuiAPI.java @@ -8,6 +8,7 @@ import cpw.mods.fml.common.ITickHandler; import cpw.mods.fml.common.Mod; +import cpw.mods.fml.common.ObfuscationReflectionHelper; import cpw.mods.fml.common.Mod.Init; import cpw.mods.fml.common.Mod.PreInit; import cpw.mods.fml.common.TickType; @@ -23,33 +24,54 @@ import net.minecraft.src.BaseMod; import net.minecraft.src.ModLoader; -@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.3", acceptedMinecraftVersions = "1.5") -public class GuiAPI implements IFMLLoadingPlugin, ITickHandler { +@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.5", acceptedMinecraftVersions = "1.5.1") +public class GuiAPI implements ITickHandler { Object cacheCheck = null; Field controlListField; @Init public void init(FMLInitializationEvent event) { - try { - Field[] fields = GuiScreen.class.getDeclaredFields(); - for (int i = 0; i < fields.length; i++) { - if (fields[i].getType() == List.class) { - controlListField = fields[i]; - controlListField.setAccessible(true); - break; - } + + try + { + controlListField = GuiScreen.class.getDeclaredField(ObfuscationReflectionHelper + .remapFieldNames("net.minecraft.client.gui.GuiScreen", "buttonList")[0]); + controlListField.setAccessible(true); + } + catch(Throwable e) + { + try + { + controlListField = GuiScreen.class.getDeclaredField("buttonList"); + controlListField.setAccessible(true); } - if (controlListField == null) { - throw new Exception("No fields found on GuiScreen (" - + GuiScreen.class.getSimpleName() - + ") of type List! This should never happen!"); + catch(Throwable e2) + { + try { + Field[] fields = GuiScreen.class.getDeclaredFields(); + for (int i = 0; i < fields.length; i++) { + if (fields[i].getType() == List.class) { + controlListField = fields[i]; + controlListField.setAccessible(true); + break; + } + } + if (controlListField == null) { + throw new Exception("No fields found on GuiScreen (" + + GuiScreen.class.getSimpleName() + + ") of type List! This should never happen!"); + } + } catch (Throwable e3) { + throw new RuntimeException( + "Unable to get Field reference for GuiScreen.controlList!", + e3); + } } - } catch (Throwable e) { - throw new RuntimeException( - "Unable to get Field reference for GuiScreen.controlList!", - e); + } + + TickRegistry.registerTickHandler(this, Side.CLIENT); } @@ -105,30 +127,6 @@ public void processGuiOptions(GuiOptions gui) { cacheCheck = controlList.get(0); } - @Override - public String[] getLibraryRequestClass() { - return null; - } - - @Override - public String[] getASMTransformerClass() { - return null; - } - - @Override - public String getModContainerClass() { - return null; - } - - @Override - public String getSetupClass() { - return null; - } - - @Override - public void injectData(Map data) { - } - @Override public void tickStart(EnumSet type, Object... tickData) { if (!type.contains(TickType.RENDER)) { diff --git a/mcp/sharose/mods/guiapi/WidgetItem2DRender.java b/mcp/sharose/mods/guiapi/WidgetItem2DRender.java index 1a7dbbf..b2d76de 100644 --- a/mcp/sharose/mods/guiapi/WidgetItem2DRender.java +++ b/mcp/sharose/mods/guiapi/WidgetItem2DRender.java @@ -11,6 +11,9 @@ import org.lwjgl.opengl.GL11; +import cpw.mods.fml.common.ObfuscationReflectionHelper; +import cpw.mods.fml.common.asm.transformers.deobf.FMLDeobfuscatingRemapper; + import de.matthiasmann.twl.GUI; import de.matthiasmann.twl.Widget; @@ -25,33 +28,8 @@ */ public class WidgetItem2DRender extends Widget { - private static Field isDrawingField; - private static RenderItem itemRenderer = new RenderItem(); - static - { - try - { - WidgetItem2DRender.isDrawingField = Tessellator.class.getDeclaredField("z"); - WidgetItem2DRender.isDrawingField.setAccessible(true); - } - catch(Throwable e) - { - try - { - WidgetItem2DRender.isDrawingField = Tessellator.class.getDeclaredField("isDrawing"); - WidgetItem2DRender.isDrawingField.setAccessible(true); - } - catch(Throwable e2) - { - System.out.println("GuiAPI Warning: Unable to get Tessellator.isDrawing field! There will be a chance of crashes if you attempt to render a mod item!"); - } - - } - - } - private ItemStack renderStack; private int scaleType = 0; @@ -112,23 +90,6 @@ public int getScaleType() { return scaleType; } - private boolean isDrawing(Tessellator tesselator) - { - if(WidgetItem2DRender.isDrawingField == null) - { - return false; - } - try - { - WidgetItem2DRender.isDrawingField.getBoolean(tesselator); - } - catch(Throwable e) - { - - } - return false; - } - @Override protected void paintWidget(GUI gui) { @@ -215,36 +176,21 @@ protected void paintWidget(GUI gui) { ItemStack stack = getRenderStack(); - if(isDrawing(Tessellator.instance)) - { - //Yes, this IS stuff to work around 'bad' mods :D - setDrawing(Tessellator.instance, false); - } + Tessellator.instance.isDrawing = false; + int stackBeforeDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); try { WidgetItem2DRender.itemRenderer .renderItemIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); - if(isDrawing(Tessellator.instance)) - { - //Yes, this IS stuff to work around 'bad' mods :D - setDrawing(Tessellator.instance, false); - } + Tessellator.instance.isDrawing = false; WidgetItem2DRender.itemRenderer .renderItemOverlayIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); - if(isDrawing(Tessellator.instance)) - { - //Yes, this IS stuff to work around 'bad' mods :D - setDrawing(Tessellator.instance, false); - } + Tessellator.instance.isDrawing = false; } catch (Throwable e) { - if(isDrawing(Tessellator.instance)) - { - //Yes, this IS stuff to work around 'bad' mods :D - setDrawing(Tessellator.instance, false); - } + Tessellator.instance.isDrawing = false; } int stackAfterDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); @@ -265,22 +211,6 @@ protected void paintWidget(GUI gui) { screen.renderer.resumeRendering(); } - private void setDrawing(Tessellator tesselator, boolean state) - { - if(WidgetItem2DRender.isDrawingField == null) - { - return; - } - try - { - WidgetItem2DRender.isDrawingField.setBoolean(tesselator, state); - } - catch(Throwable e) - { - - } - } - /** * This sets the current ID to render. This checks bounds. ItemStack damage * and count will stay the same. diff --git a/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java index f99d206..083f262 100644 --- a/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java +++ b/mcp/sharose/mods/guiapi/examples/ItemGuiApiExample.java @@ -57,7 +57,7 @@ public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, @Override @SideOnly(Side.CLIENT) - public void func_94581_a(IconRegister par1IconRegister) + public void updateIcons(IconRegister par1IconRegister) { this.iconIndex = Item.sign.getIconFromDamage(0); return; // Please, please never do this. This is just a hack. From 9402491424b4e55ac52de9222b0fb72abf7255f8 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 17 Apr 2013 14:15:37 -0230 Subject: [PATCH 49/49] Didn't commit the dummy coremod. Not like it was any big change. Commited the 'debug' version of GuiAPI I made to find the Invalid value (1281) issue that randomly cropped up. Which somehow solved the said issue by way of spamming Util.checkGLError(). I don't even know anymore. --- mcp/sharose/mods/guiapi/GuiAPI.java | 2 +- .../mods/guiapi/GuiAPIDummyCoreMod.java | 32 +++++++++++++++++++ mcp/sharose/mods/guiapi/GuiWidgetScreen.java | 13 ++++++-- .../twl/renderer/lwjgl/BitmapFont.java | 4 +++ .../twl/renderer/lwjgl/LWJGLCacheContext.java | 23 +++++++++++-- .../twl/renderer/lwjgl/LWJGLRenderer.java | 14 ++++++-- .../twl/renderer/lwjgl/LWJGLTexture.java | 23 +++++++++---- .../matthiasmann/twl/theme/ThemeManager.java | 6 ++-- 8 files changed, 100 insertions(+), 17 deletions(-) create mode 100644 mcp/sharose/mods/guiapi/GuiAPIDummyCoreMod.java diff --git a/mcp/sharose/mods/guiapi/GuiAPI.java b/mcp/sharose/mods/guiapi/GuiAPI.java index 13ef535..91e9a6a 100644 --- a/mcp/sharose/mods/guiapi/GuiAPI.java +++ b/mcp/sharose/mods/guiapi/GuiAPI.java @@ -24,7 +24,7 @@ import net.minecraft.src.BaseMod; import net.minecraft.src.ModLoader; -@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.5", acceptedMinecraftVersions = "1.5.1") +@Mod(name = "GuiAPI", modid = "GuiAPI", version = "0.15.5 - DEBUG", acceptedMinecraftVersions = "1.5.1") public class GuiAPI implements ITickHandler { Object cacheCheck = null; diff --git a/mcp/sharose/mods/guiapi/GuiAPIDummyCoreMod.java b/mcp/sharose/mods/guiapi/GuiAPIDummyCoreMod.java new file mode 100644 index 0000000..eb8bf94 --- /dev/null +++ b/mcp/sharose/mods/guiapi/GuiAPIDummyCoreMod.java @@ -0,0 +1,32 @@ +package sharose.mods.guiapi; + +import java.util.Map; + +import cpw.mods.fml.relauncher.IFMLLoadingPlugin; + +@IFMLLoadingPlugin.MCVersion("1.5.1") +public class GuiAPIDummyCoreMod implements IFMLLoadingPlugin { + @Override + public String[] getLibraryRequestClass() { + return null; + } + + @Override + public String[] getASMTransformerClass() { + return null; + } + + @Override + public String getModContainerClass() { + return null; + } + + @Override + public String getSetupClass() { + return null; + } + + @Override + public void injectData(Map data) { + } +} diff --git a/mcp/sharose/mods/guiapi/GuiWidgetScreen.java b/mcp/sharose/mods/guiapi/GuiWidgetScreen.java index c30f5a9..6716b72 100644 --- a/mcp/sharose/mods/guiapi/GuiWidgetScreen.java +++ b/mcp/sharose/mods/guiapi/GuiWidgetScreen.java @@ -5,6 +5,8 @@ import java.net.URLConnection; import java.net.URLStreamHandler; +import org.lwjgl.opengl.Util; + import net.minecraft.client.Minecraft; import net.minecraft.client.gui.ScaledResolution; import de.matthiasmann.twl.GUI; @@ -46,12 +48,16 @@ public static GuiWidgetScreen getInstance() { } try { + Util.checkGLError(); GuiWidgetScreen.instance = new GuiWidgetScreen(); + Util.checkGLError(); GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); + Util.checkGLError(); String themename = "twlGuiTheme.xml"; + Util.checkGLError(); GuiWidgetScreen.instance.gui = new GUI(GuiWidgetScreen.instance, GuiWidgetScreen.instance.renderer, new LWJGLInput()); - + Util.checkGLError(); GuiWidgetScreen.themeURL = new URL("classloader","",-1,themename,new URLStreamHandler(){ @Override protected URLConnection openConnection(URL paramURL) throws IOException { @@ -60,12 +66,13 @@ protected URLConnection openConnection(URL paramURL) throws IOException { return GuiWidgetScreen.class.getClassLoader().getResource(file).openConnection(); } }); - + Util.checkGLError(); //GuiWidgetScreen.themeURL = new URL("file:\\G:\\MineCraft\\GitHub\\GuiAPI\\theme\\twlGuiTheme.xml"); - + Util.checkGLError(); GuiWidgetScreen.instance.theme = ThemeManager .createThemeManager(GuiWidgetScreen.themeURL, GuiWidgetScreen.instance.renderer); + Util.checkGLError(); if (GuiWidgetScreen.instance.theme == null) { throw new RuntimeException( "I don't think you installed the theme correctly ..."); diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java index f3ca1e5..e00fdf6 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java @@ -43,6 +43,7 @@ import java.nio.FloatBuffer; import java.util.HashMap; import org.lwjgl.opengl.GL11; +import org.lwjgl.opengl.Util; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -140,7 +141,9 @@ public BitmapFont(LWJGLRenderer renderer, XMLParser xmlp, URL baseUrl) throws Xm throw new UnsupportedOperationException("only page id 0 supported"); } String textureName = xmlp.getAttributeValue(null, "file"); + Util.checkGLError(); this.texture = renderer.load(new URL(baseUrl, textureName), LWJGLTexture.Format.ALPHA, LWJGLTexture.Filter.NEAREST); + Util.checkGLError(); xmlp.nextTag(); xmlp.require(XmlPullParser.END_TAG, null, "page"); xmlp.nextTag(); @@ -287,6 +290,7 @@ public static BitmapFont loadFont(LWJGLRenderer renderer, URL url) throws IOExce xmlp.require(XmlPullParser.START_DOCUMENT, null, null); xmlp.nextTag(); startTagSeen = true; + Util.checkGLError(); return new BitmapFont(renderer, xmlp, url); } finally { xmlp.close(); diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java index 0324e62..145e5d1 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLCacheContext.java @@ -39,6 +39,7 @@ import java.util.HashMap; import org.lwjgl.BufferUtils; import org.lwjgl.opengl.GLContext; +import org.lwjgl.opengl.Util; /** * @@ -62,9 +63,12 @@ protected LWJGLCacheContext(LWJGLRenderer renderer) { LWJGLTexture loadTexture(URL url, LWJGLTexture.Format fmt, LWJGLTexture.Filter filter) throws IOException { String urlString = url.toString(); + Util.checkGLError(); LWJGLTexture texture = textures.get(urlString); + Util.checkGLError(); if(texture == null) { texture = createTexture(url, fmt, filter, null); + Util.checkGLError(); textures.put(urlString, texture); } return texture; @@ -74,10 +78,15 @@ LWJGLTexture createTexture(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture if(!valid) { throw new IllegalStateException("CacheContext already destroyed"); } + Util.checkGLError(); InputStream is = textureUrl.openStream(); + Util.checkGLError(); try { + Util.checkGLError(); PNGDecoder dec = new PNGDecoder(is); + Util.checkGLError(); fmt = decideTextureFormat(dec, fmt); + Util.checkGLError(); int width = dec.getWidth(); int height = dec.getHeight(); int maxTextureSize = renderer.maxTextureSize; @@ -85,24 +94,32 @@ LWJGLTexture createTexture(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture if(width > maxTextureSize || height > maxTextureSize) { throw new IOException("Texture size too large. Maximum supported texture by this system is " + maxTextureSize); } - + Util.checkGLError(); if(GLContext.getCapabilities().GL_EXT_abgr) { + Util.checkGLError(); if(fmt == LWJGLTexture.Format.RGBA) { + Util.checkGLError(); fmt = LWJGLTexture.Format.ABGR; } } else if(fmt == LWJGLTexture.Format.ABGR) { + Util.checkGLError(); fmt = LWJGLTexture.Format.RGBA; } - + Util.checkGLError(); int stride = width * fmt.getPixelSize(); + Util.checkGLError(); ByteBuffer buf = BufferUtils.createByteBuffer(stride * height); + Util.checkGLError(); dec.decode(buf, stride, fmt.getPngFormat()); + Util.checkGLError(); buf.flip(); if(tpp != null) { + Util.checkGLError(); tpp.process(buf, stride, width, height, fmt); + Util.checkGLError(); } - + Util.checkGLError(); LWJGLTexture texture = new LWJGLTexture(renderer, width, height, buf, fmt, filter); allTextures.add(texture); return texture; diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java index 80280c3..bdca1ae 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java @@ -65,6 +65,7 @@ import org.lwjgl.opengl.EXTTextureRectangle; import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GLContext; +import org.lwjgl.opengl.Util; /** * A renderer using only GL11 features. @@ -346,7 +347,8 @@ public int getViewportY() { } public Font loadFont(URL url, StateSelect select, FontParameter ... parameterList) throws IOException { - if(url == null) { + Util.checkGLError(); + if(url == null) { throw new NullPointerException("url"); } if(select == null) { @@ -355,10 +357,13 @@ public Font loadFont(URL url, StateSelect select, FontParameter ... parameterLis if(parameterList == null) { throw new NullPointerException("parameterList"); } + if(select.getNumExpressions() + 1 != parameterList.length) { throw new IllegalArgumentException("select.getNumExpressions() + 1 != parameterList.length"); } + Util.checkGLError(); BitmapFont bmFont = activeCacheContext().loadBitmapFont(url); + Util.checkGLError(); return new LWJGLFont(this, bmFont, select, parameterList); } @@ -508,17 +513,22 @@ public void setMouseButton(int button, boolean state) { } public LWJGLTexture load(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture.Filter filter) throws IOException { - return load(textureUrl, fmt, filter, null); + Util.checkGLError(); + return load(textureUrl, fmt, filter, null); } public LWJGLTexture load(URL textureUrl, LWJGLTexture.Format fmt, LWJGLTexture.Filter filter, TexturePostProcessing tpp) throws IOException { if(textureUrl == null) { throw new NullPointerException("textureUrl"); } + Util.checkGLError(); LWJGLCacheContext cc = activeCacheContext(); + Util.checkGLError(); if(tpp != null) { + Util.checkGLError(); return cc.createTexture(textureUrl, fmt, filter, tpp); } else { + Util.checkGLError(); return cc.loadTexture(textureUrl, fmt, filter); } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java index 6b89ec4..3283f2e 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java @@ -108,31 +108,41 @@ public LWJGLTexture(LWJGLRenderer renderer, int width, int height, if(width <= 0 || height <= 0) { throw new IllegalArgumentException("size <= 0"); } - + Util.checkGLError(); id = GL11.glGenTextures(); + Util.checkGLError(); if(id == 0) { throw new OpenGLException("failed to allocate texture ID"); } - + Util.checkGLError(); GL11.glBindTexture(GL11.GL_TEXTURE_2D, id); + Util.checkGLError(); GL11.glPixelStorei(GL11.GL_UNPACK_ROW_LENGTH, 0); + Util.checkGLError(); GL11.glPixelStorei(GL11.GL_UNPACK_ALIGNMENT, 1); - + Util.checkGLError(); if(GLContext.getCapabilities().OpenGL12) { + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL12.GL_CLAMP_TO_EDGE); + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL12.GL_CLAMP_TO_EDGE); } else { + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_S, GL11.GL_CLAMP); + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_WRAP_T, GL11.GL_CLAMP); } - + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MAG_FILTER, filter.glValue); + Util.checkGLError(); GL11.glTexParameteri(GL11.GL_TEXTURE_2D, GL11.GL_TEXTURE_MIN_FILTER, filter.glValue); - + Util.checkGLError(); this.texWidth = roundUpPOT(width); + Util.checkGLError(); this.texHeight = roundUpPOT(height); - + Util.checkGLError(); if(texWidth != width || texHeight != height) { + Util.checkGLError(); GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, fmt.glInternalFormat, texWidth, texHeight, 0, fmt.glFormat, GL11.GL_UNSIGNED_BYTE, @@ -144,6 +154,7 @@ public LWJGLTexture(LWJGLRenderer renderer, int width, int height, GL11.GL_UNSIGNED_BYTE, buf); } } else { + Util.checkGLError(); GL11.glTexImage2D(GL11.GL_TEXTURE_2D, 0, fmt.glInternalFormat, texWidth, texHeight, 0, fmt.glFormat, GL11.GL_UNSIGNED_BYTE, buf); diff --git a/twl/src/de/matthiasmann/twl/theme/ThemeManager.java b/twl/src/de/matthiasmann/twl/theme/ThemeManager.java index e07b657..a5d7a5e 100644 --- a/twl/src/de/matthiasmann/twl/theme/ThemeManager.java +++ b/twl/src/de/matthiasmann/twl/theme/ThemeManager.java @@ -60,6 +60,8 @@ import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; + +import org.lwjgl.opengl.Util; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; @@ -422,7 +424,7 @@ private Font parseFont(XMLParser xmlp, URL baseUrl) throws XmlPullParserExceptio fontParams.add(baseParams); StateSelect stateSelect = new StateSelect(stateExpr); FontParameter[] stateParams = fontParams.toArray(new FontParameter[fontParams.size()]); - + Util.checkGLError(); if(fontFamilies != null) { FontMapper fontMapper = renderer.getFontMapper(); if(fontMapper != null) { @@ -432,7 +434,7 @@ private Font parseFont(XMLParser xmlp, URL baseUrl) throws XmlPullParserExceptio } } } - + Util.checkGLError(); return renderer.loadFont(url, stateSelect, stateParams); }
  • F52z7Sp>6BTSv+>K4;?H%2-3n|@R8#k#$wKOEYPkg115_n=rN)x^bn-C=6b z$*D{$ppj0Vi>YjTPC^sSY(_QvoaH#5u3muiX!c-mH@nU@yUsSd&NjQwHoL*y%tWz+ zyBTSYgqvn;;K&YcruWq1BEBVfq}{PG&}NcE$@L~hQ5Wi%w*GWfFNg*TqQNdq-W1f# zU^x*;M?;ZPGqASI44Hw1sgp-D6b+a`)3>|-gECWJJD+>?MAW;<-*5VN^!FV`^8&^j zu#W2DOx^_VE@q@Bc|Nw_c%bcBusBFF7Cs|(#>U?3;S@nZ0^IiyivUi<76ebZY~@$vq{$k(%t8CBO4;2Ri=-{Vnp6Q*Gc zfxU^~-9oT#Wxc(P;NH&SbO$478!qIy1$WZjyBI|~2>nh{unU{mP;SA!L$Y|QOTbo_ zfUPb8TU`RSIs}Zww^Kh zB%&cRxB~$*v=ggUjGMuo7-#x-GQvxl{$*xRHnD#6;yPJ1%k-(aGFA2+!8b!q8!Y3X%KNH23sI)?zYN=fz6miwF% zayn_hLD5pn0&*iq0a}z|2uTS!m!<9|j_eXL5rIQEPScEFKeM)wZNuOPm{59*hb;1? z$zk!2JZYs`b`!NNbL9xSWp04KKbR{BZ<`z9??Ue$j4sj3H*-8i+N{hvHCxT+xsrhC zbtcMXBGiQo%S`XuXkls8Fn!UYE>xRF`Pyi4iCz-u!=0v4)`z=!6H+%OQ|#`NpnX?7 zaHkd)%R;l5Vv05uv1}bM3+J1Dmi!(4yN=ARXBoZEu`nEDm3^KO{Q^6d7uoZ?!~*g% zkNa17)W61N?sdZT2G-zBg7y}{e4B;s9YXppbL~CS_y+dieFnm-q~SwF<2D-~m&R_F z#%`C!ZkNVxhejgmo&?R2rJYD6K3h{(k$Hw%2j*3-joCJSA-5liE!w+z*$38|*|CB2|@&B%^5+8g&=&IdH2n{(*MDNc_%r{z z_Yo@b7X_DLi+ADrrK@@&C5Y-`(LwFcs*ZI~at<{!g|(HLOAa;(|P%$3uva{56O z9l%S?qki3sSD&K58GI*sWBCjj_28ZD@I|^0Kx>Z7=*4fkxnt;C$S0KYFB1D1k^P(} t;J?`(98#L?#=O#Xpc1d}okHWf5`4gsM+F1>t>Q0W@Y}z5PsIX_O8vkPLtRM64O$?9Jkbon-8~5lQyAljGa~`l`BC(S=$?DgJW0g zO`RS&;4>9}0CDLB4oE~q9QXnJsKPU^jVr2NV5N8FnR!2E=9$?)U;O?DfC9E+h+`o} zbR`NKiz1ecb?ymT7O^6tDB@}i*Kl3Ls)-vW)->qB@w^7DB~nWV zLuB9eTKfUPs@L%X-i&6;{7R*{ng(OD+jKP~s$R#vdvsWL{Rd9HP0wVt+i==7$M?h@ zIgMc7>uFf5Hr@Q86VP&chfb%H5BlxA?{=E5@A~<6|De^*KX8wOBj3H{yUvEwbFVX- zW3DpSQw>(&9zPr=8715r$5EOutgu?Z2@z*SOd?@o)5a&bZKH%c8VdiNOAQkeGv9VPt^B?Ef!knvSrRio z^KxU`krB|HIy+`$%TjQ%>$gVj={|Nl?9!d;0_VkUwOQ0=x9c|xdmNwaa5!SEcFpzK zo`NUNa(S+XcR7u54rv6_QXA26w=V}CZGi{IOxE$+;7lw znNx(mKY^Z08bf5v42tILplD@`ACO3!li_;N)YqQlY$o(0?6jFNb_aV!Gih*tB5ldO zr7s)LF_koUBA&LmB}c4W+DwN#Cy3(rQ$q462pkYEdD@B|l#Oy2YH z9+Ab&z)X$5m|E1t2O7T+KOjCST}k1?VF&On14*bQ)q#toL^z^0g(7N8$f1ss716ph zh}t-TAuNRyOBWau*kXodj>f0ttirmg%wrpuaF?9jQ&p#i!NyfD;Uk{o|Aj2(Mk(c$ z%~4@X^qADl8iookt6|WPSM1FH4J!8(P5=M^ literal 1558 zcmbW0?@}9O6vm%7S$30jX%Pt#leCngCZTOg3T?C%TF}rKO2^Vk)zO)5l9wcyKb>VU z^aA7tya6vjKR6>J(+^&N7o|Su-AL8x7u}iNbI$wkocH&f{q6UczXB*>%Rxk;)Y8Si z7X+QIchL6+gJLl16@5KuXhDV2gLzg%f<*N}}9hZx2g$vu=f!;anH?;r6YxK0j^!Bjn_3EDAm3Ta8 z5gN0uZ2xzJcSz!hZ z(F4E9gl!#+6A~}0h;!htw6T`&jXpi}S_+O4M)-e#yAD`(a_G0mZ83bV2kefm?d4?` zAA&l%?H+q&b2#){r9FzC6G>(7Js0<}p^#|z>e}ZOOI?|+R;460;>+Gh><$n8rml2_ z_zVyFd(&MP-Eo=9MX9CDexQ)_W<*9~DWb8I&{%eWvDBY-g6|~GbN>ZEt-+$yK)>({ zrV80py!qV;<_bwG^wR0$vXeP3$FkPT&HI<`(qSo9oDeJ%544<%bZUl@&^~k9VmGsd>{l_b}3|uZ<$6Cts0g~ z1Rz9c=LHDuf}o&XBm=Q?f|@pcg0wJ+7$ytM2zBSMdo6)y$n| z!(?Z7UL~bGOW}`5f<|86L}H3g0p@-x}O)BoQ5_%)kB#mYQR zu>45U!nG!iAo8E${dDFO>*ILQ#7XN}IJCfFGn9Rn`NyEy$3ZT8g=p3sU1#$=#T9(U mq@NSa7pA0@Fzp$Z+F2{qh%an~8aBtRP$Ot*1x45*K;=&ubqm!1 diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TexturePostProcessing.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TexturePostProcessing.class index 755c70f3da91fcaf646c8fab6b337fbfc9cdd1ea..b2fd486e61469b2830a2fdf4876000bb7ea92b02 100644 GIT binary patch delta 154 zcmbQwJfGR*)W2Q(7#J9g82H&4xY!xE85!6Mit>|Fi;LMAco`Yk-13WZ6H6Ewcs%p+ zQj45(5{rvdC#E+~S%FcQnUO&s u!sO9oV`N}tU;3x>CUY_>PrNNE&(6TY$RLoFSeB@tlbDyT@1K;F znq0!jz+O<4pPX7e(WF^`$1^W4wa7UqvA8(3n4N)pG8>~MGdlzCWP3&xBQ~q r#1b|}21W*EpcM=Zj6fq<8Q6d3u(WsP&dj~{oHKLffByaBF93^pVqpxohcS$z zQF`;{JDDwsxg+MTn0sRGn|NSxELm8_Loq92J{R-I!YbBGlojmlt@XX_`ufh^;?k0W zswkW*cl=)H_+j1gj$8$!8@R6&=Bfv7;m`@g7cHlE==gpieC-ti*FSIrHz;_o+fA?V zwB?7pq0@L-Vw~@O6EbDMugPzppQDgnZuzZnMIoJ=uJcs6bHE~_)t2vW9Ubnw!Bc17 zU)S`0=)^6u0 zXtrJ~KbinJz}B<4l5I__7so9XH~fKQKaA zEa!j0(BBx%|B2ye%x@iINR}c>@g#Gyl0BK2GWm(|=>dKZ$#R7%KcZHvn8F(7P{v(6 z9^kheqq?bM)dhl>!lyB)w*-~pMoqFOfa0=oqb*uO$&%yd+(Y2^Y8C}0$9gk1_^;XC(=H3 z!th1k8J#+wXNRv`JCNRq3}j%tuLeEWKJI(r)6nUDl|f42>cDyF*skOC?4!;=c0&Q{ z=<)uuqxSxjXX~4r0-_;srS5y9(DA~y_4Vs-1yaL6z7$w(UM6XkexCfAX+*%) zkKl z?z=wcuoz#v{8>GMi0!rEE0BHap9Njn=&PAe zj|IP~w2lwi?Ihn!1`9}If+$0jz$6DidGQQ26m2OoZ7DHrDKKp*FIqK0N|XC6(FtP+ z+MDHHF;_01W4=5)d5)ak^Lj7nz4#MvCGbA?MV)&MDO4D3owB`)dG@S;P4c{l4|vBi zQHd3&gpx^=u|bsJx2(>%!i;YsPwN`D82JGsZ|g|c&Fv@>{dB#2eYl0&QOv*Sk!H+R z`DZNsjhXTv5MMI>$LCm5pSW_j2C6Ir^0x`{5hyGX6e3W}rHG0O{m6jHw+ep9vUf0t zN2IljPdM;x)NzQm${ zX|kACEKJ)?v_qZEv^O1PMnnAx|=Zy##7!Bxf iR$biS11Upd3l6Gyu6YFmC-4M2{_yE!$kws(TLgSWy z@K=m;s3EfGoHO^%%$-i1snc2fyng^V$B6?AH5)}73LFU>3)C$%EHvlwNEKmTzdQ`m zz8-58w`X7V^xL>hKaKw1cbhJB!}m}|%fkk251v3tU=#MN6iyT>!(^O9Ps#IR6yFU8 z_ag<}?%bfo$1HX+Q57!~95MqgIb+s16W2Jy|8YfM85Me~++H~goVDN$Y7%ra7(tjp z2fYkt;F}o=b6#s~iHIeDE=z=r?6LJJwh_U{87FX&M_~uMWTMZj$|fa^<(bse%T0=z f*yA2>0#{;i*)=z~D}%c-xD@7pzE9l&l?MD@W=tw2 delta 399 zcmY+9Jx;?w6ohBJPV6`fN%#rG5Ry>Ei)j!Cz;FP%8~~95rLX{l5KXF_V2^-AO$rN% zf&)--5{`hFWl=<`H{aWtr`cIFi<%$bZ|?w(upht^NK7WWjnn)gD~g+|i@RbRz&D?= zJx{NN6z4;8B2x3^J(}Em&XSRUf0kd4BS^Fq6xIafFd5Y#u%S>v)vC5a&8cmL$f;PN zj;eVQ_husdQw->nEaIbOW2AuOAtW=r#5}RYJoJwRa|$cWx(lmlaPva0aK`!-O?^;e zU8f~B^#;+8I(pW*mT1S zSeB5G*dP{c5GoRXV!;FO3Kj3b8X?4WKw?HS_uiQ^=bSr-=DXSW_WR3M;5?URF`RNJ zvSP!F>kg+m;}CGx;T$c)sv%5w*V4D$3WD2Dl6ZV`6z%QB>EZ3{ht!v>WGqNuC~r-o zdk+TDqdU>gC^oERzO~tEyR5U}GK=FJ|ThzYA^Kw6$S-MKN+FDt&p4Rz^6Z#*J@DtX%DP~Uh8O0zyDw^kbMd5Kw zqp(0VXV}-`sS@Z<68MFeH2it{6^s673WM-H@*JoAkt44uv=8)f=0JfqIr}^XCAv&W zuHea4nsRNb)YN-VXN}`iXTd*B6=0DQs=B1FE7-qin05Rc2LI=j^`!0=bs8EAEYnnt L+_UH(Sc29t00w75YPR=pWF3q4e(%tVrJ^g1gL{H{ZPP``(+s;*W5C-}Zk2SjMUVXDH|# z&-VJ#60r3NtM#hI^cWb%6-Mwt!a_npV1mI~D(>{&Rdtrr5N)>nZa3&6PgB!SU{2DEP8p{qFiQ9sWovXch%9Bk zQ}_vWF{qg|*x-f{?+Ol`6>$tYg(U6tCP>|>98sllaWl4Fw?+HpOd<;~yE^P_wrKqx?|p&WL333>2FCW&iWr|&<_QCY13 diff --git a/twl/bin/de/matthiasmann/twl/textarea/CSSStyle.class b/twl/bin/de/matthiasmann/twl/textarea/CSSStyle.class index bf925c84256ca349853173333abf1659e7b07f85..3905afd286b05154e1754c3b992443e79746e824 100644 GIT binary patch literal 12155 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 Ce)Qx3 literal 10255 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 diff --git a/twl/bin/de/matthiasmann/twl/textarea/HTMLTextAreaModel.class b/twl/bin/de/matthiasmann/twl/textarea/HTMLTextAreaModel.class index a61624bb2d3e73e47a688fb5cbe6685be9fddb53..c6b3306142ade05ede62871d7cb31e676327472a 100644 GIT binary patch literal 15902 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 MW4Jfr{uKHCAHD4|O#lD@ literal 15987 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 diff --git a/twl/bin/de/matthiasmann/twl/textarea/OrderedListType.class b/twl/bin/de/matthiasmann/twl/textarea/OrderedListType.class index ad6bae04776c38955db158eaca9889b3607cf575..fc3dd833121b97d76612fb6a5fd3af08bb93dc08 100644 GIT binary patch literal 919 zcmb7?T~8B16o%i~mTp;=0)?WqegP_NHLP+ejfp8>nk;hBO5&B7ZpX5?-6hkhA3w)` zfKda{#7i&yQN}a78z8nf-prXfIp>-8yfeT5eE$hx3v~;5+?d7`Zd$m7+ZOI%)x?@b znK->};x2=^v)gR#KXVy2-JWm;T&W|U4+lI99rZqNl=z^y6x=zGJt0NU^@pnS@kDGh z%z8&$a!(1VlMF@on7`vrz{9@NR?-jqRFrG@p|74YWU948hHNwH35Ge>55GRMaHLwb_Yv3>($f_}mk%Sh&2j6)Mpeg$va_{K1H6s zje!-dk#NkfHSvbv!1<78dAaC)Fs% zOifx$Nqf{~P(?y|FoE=hNZUke#H8hy%lpWItiC{uRbA*cBbm zkvXlLBYR3WX0E8+A%(lt|NP1w<%>JYSjIJCUyr+3i7Z;Vuwp$H1kC)v)T=Y(zQEL8 S&@<7RqX_yT3}uQ2Dt`e|S-FV- literal 931 zcmb7?%Wl&^6o&tCLfpFUm88&wTgxREPz_zu2nnSvvgEdlgi5T?#2Hc-$F3$5E|0?- z6ai`l5=$056yl6+5k#`Vi@Bcj{pbASpTE9-2e5^P34`H5PdEdv)N#Ov10F?=dK)@Q zyi;5X?i|XVkfP@WL)CeIDoo@VmQMH^?u0z*JBQs9;VTAnXSe0zB$F8}N z5`7_U+`$@Ir{dH`1|yOT%q7#>iuZx@S7B zagNIk_65ap?m{B}kmMeb+*Xorr_oqV3eu!28EKD5x{#D~e+ua_k+zA{Oh~I~bVkyZ z>gLETT&0H7)?Q}JawY$P%KMDs57-qwU!Z(exxlS6Qp_ctrq%Ai#x6>D_LoNak471H RagW&5B#V`3S)-+a`fuawx!(W) diff --git a/twl/bin/de/matthiasmann/twl/textarea/Parser.class b/twl/bin/de/matthiasmann/twl/textarea/Parser.class index d10efdd1009e60bcad1f0f118433909d2b437296..6ac3e25f39fb412d16dacdeaf0276df9aad8d05b 100644 GIT binary patch literal 8117 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 C6=;*bm^kWARgL`k$Z zRnQitYVG=HK>@W<0T+P;Du`L+Rkgac>ssBeTkT`j`mXM(1hT(#zsWGXcK4r7a=&}d zeVlvl@1Do~W?nk^+yNrGoQFF}F^y^njcW-;qm50$ww7QxJT7`u^SEeebu<_W1;@<` zM%qFVC)t=hD}px$$2AAT%g0qNT@k8}GTCcu%PMCvaeyhMv^Cro4Thr&gU#(BV*npC z*3~VUQ8Q~+S=E9-U70~NotTnpYZp{k1uABbM*}%@L!cs19VjW628?jZh}v?QAS!}g zSW;f2Stt^pf4TI#m{PGy>D-ceOXii7UR^em$yKg-D}GA#Ae1Gk|fXG{SmwYU@t zf-Nbn4pdf11F-SN8)7Ohxy(f)nTqU~&CrLT6|)VCJFtL@law2LGMiW@RdnDq)LxXK zqJv(cs&WzbYzepM1mUBYqJ3TRH?*&7OkdZ;zOM4Vt|fh4k-n~jYc+N7A&^@&iT3#a z!2_Ck@xH#U7at#Ne{s(sg>i@0Y39&ItJ=}mb@+Ca2T-13a$&F4RV5V*n9>Hx1jR09 z+Q1G&ZxS#kW5e-HIvh9xFShUCp_~rR$HNRqY6j{I9?qGZm6pvpob4UK7o_)f8BRQS zq&$+-z$TlZycu|;3!Col>%v^H88}?b1SM1Zy6m}pp*NTFQgQ`MFJG9_*JaBEffgoH z4yzglI-{n#jLDbCCTygT=^{D4B%B_KJqZVfTA?;HExbM~S7&EcDA*8+z=tfuY-$~6 zwM>HTbapO?2BRUEac5_FXmwM4usPO%i8I=lEt84Kot<-ok(Hr_d97_wv9q(ZJrW6p zqnbr0W<;VQ6SmRWSr%@vXh%m!b5j_yT^$|ut|FRh$Aw*+cwH(fHLY<8eRW;?OG)l^miKg6)| zO5Kqp9c6O^@dh`7LtF5sMU73-P}{0tJ#eCFsZcJz zU?KD>ZEXm-5isVPR7J2j08mO>mbHbVZfc`;C!rxBuv@{>q#Nlb z3~UaCmq!~l*Z~>dVNxgEjE?%oV59^yZTW!$#5;!|9)js{6UqvdW}JO}YkOF7#Ep^< zfCfyoekH()E4@a*gwnRgrsa*Yi#r9lR-t|<@Sw{PT(v3`ZV*iFHtA|A7wShQT}D|# z-D}bnQzXJ0)xA3b$w`+7*U&(HZl#>%E0LZmGK@IJqmNJiO(%sT)H(IwV^&rRSf$pGhM0DcSVXOqZTZ)_Eat(KhTPFE<#? zl@O9EC_iJ;cPx~5h|Fi1a$o`fi-=ut`%7}I$fG6nm{ep**kjUO(ccwqwXDuf8)!53 zW8r8Sm)_~~CLIuav?G{>R?FV|O!_Gyx!R+xD?{+qp|PEvimQT=L5Bp+3eo(CN#m?_ z4+;BAlP;l45ptTs23Y(XEfO%e)Ja*;Nh0>Lre>Hi0!^LFc-^E4BH&->U!C;E=}yzp z77ewS^d|il+YLq{LB!fs9Zdd2z^yyeq(A~%gH3^gg|fukCS5K|{Epsn(!V1h4VsOW zD@^(i`aNKY=qT^BEEs0F?`4bb1ko z{y^~g5Z#tAL{v#7^}%piB+`mo-^U0+ryNN)y6Gc1C1*>htu44*N2||Gx{|JvbNQ=D zuhBotUcNGEtn7v9zfJlx?GrovMr`I=v6<5I+l)-^H|g&zfhT231t!B+keT*jj|g4m zIxe|zXQCXfR547fy}2Pb+#1crUADe4w<)};9U+d{Zqi@GqmX6;(xwl0Fv253pUR`< zI(@{mELe9ulY&87wXg*ZVUl1#!BTW|w+2|*z#1R{9h3o6f>C#N&I^TBf(^AU(`<$I zS>&sD;76=L$agPjZI9H4W;IE)Pqwb#W91BxT`(Ovwg8FCP7ZKRaEe@%MM(*~8~w=% zyd=7m1U?n~kObZXJ}rUwf*+c|r$fGvhQ-&*0FTs(wX-BG>Uu;%{{?7ACe-a0CbZ|F z9obK}k4|VGgLY&)-CmH;?#JHXq-a-SOS*;+>l*Q2*NFMLhTrHK*+AEDRb3-m=^8Od z*RWI6!)YS;LHts|7bozOz)w!#J>aJ#@KeE0OW?iWrzh|w;AbT8Civ0>ekS;`1U?=7 ztOR~G_&EuD02;#`@bpLqL_HK|K9?%6gGz8UsO58^H)Ai&+eOuTY2hxa+e_E(q9uDN zxQiP0(z0FD^ehG`T8U>C#1jO#XaS{Cgwp9=wC%>R6;QJtMdX%SQEZ9%Fg%6!G*8}s z_tnN^?*-ZZz0@+>``Lmm)>>Zp!zMSYvQ6tuAuJDd#0V+Zr4DoRw=F13t&bfiFh*?3)LE z>$7dcd_!+;47`DGkxtb>r|*HXLuNL0fpS1{8hszNlWv0?4;d#Z6>k71XejeH;N5a@ zJRh8S0_W{#!+8sq_%1}=3OK*_f53^WR80I)%#zShbQ+v_gCKf5Ks1J99NDf)4dgqC zK;~(1ZU+QwAaO0WeFuQN6I=cP-0}_pxlZde$6758Vo@B#qBw{X;vkNXgIE{?F&oCS zR)Z+eC6ThAy8xKs9v$0MRm=pvX?%-igJT4=JI)5}5r}#es&4}7o8zE4;x_0?ut8im zWAZ>Ms+_n z@jMRt08H_PII8FNY+T)A;{O(&{URVe1Z@rj(j$QMC?GusNPh`~JOa;tIRVbeaX9~W zo~`7H65H<_=q1rO%fFlMLRpV;56XQ~H}ul|i%tb$H}*knr%ZNejZJGNJwy*f0?Q2- zBYpfJ-X zcmaZ}=r5^{I4NP#E8>ejNBhoNRMe2@pMrJvXFp0#)Gx?BtaxkfBLx?<)VN(>a7?67 z{{)X@9T#!gHZgGv9Ylj9uaz;k9_8OdFZzuhI_yuIPW$aWfKK+ehmQ6D$-*8wb_zM2 zzBmK8yn%4>7J1pA5j>poI5RGMlf&b zo*vX-EaUA#jq?#}mfrOTHdC(9_D0|*4Mw5JTz^31;k;xeSy*aWX#D{p-~<0QIr|YB zqL<9R0qYstvVTfr(0Qzv-kp-8Hj&-7O(y6ebv7B3^Wz$0TSAUs0c?n`0^Sp82p3a2 zPl5$Z1m08eS~rb~c{~81CB9^3gW`_2Yqh$Am02DC^G_jHvI{d(r1)L z_TyBZ-%kbH5A*yMSGF{H4T>4xR16c3a`>}h@uv*ia-|h8CF^=3mnV#h8?uA`Q!kb# zul_Mv*42_Ib04+UYS6>TzOqLsWP#RN`)&B(Gz`{<+E!aelK znUP~{f|Di1bxWd8_2r%AWgP-eGeu`N08E9)JRn9;WEVY)9XqMI*twG$id{QtNpaFn zYASZ4=e{DFQIrhg9{A+uOvi``TcHji%;F116v?YCD9I?LC=yYmPC>Z_Wv#{M=Ev#+ zsl}MKi!E&zE8dL-x@pE4jW%h#)R+7)CF%aWGy1#9BZ@)NZjrPbfnkKtws~NQObPpJ zKKmBR$aMH@6FlxsV~GqIP?v`{ctBGP?Pl!7J;2kaI!(D0=U4oN>thR=K$ z;a6{=0b5X0{C=OU4&I3J)>JQI)TG@vZ^IJR}4Xz@FH>A$e4yF3^7($|Z+Pb?NI zI&Mebe80zWM(0$&$2HiLXN@le;wQRKT%@PjFfHqp$k-5|sjdpCOTLplsfV;JS&%@D{|h$7no1 zL92Ny-NxJKPTo%I_!(NyJMi7=v-o{yCj#m&+QL2fg0Gjh^IqD+zo7lRk6z&C=^$2l zg&(KaAmcBUQh;Pz|V2hC_`ulGMeBcLW4Nxduoa(`jt=`$HoSiy>jWt5-0%gz`qXqXwdF6E&_p%!lF8sziPDb)`P@1t8x4A6D z$U{K6slZqPzrG6b`U|X^2Fj#?L5lO@R1s3S?#1e3 z*^6;0d^fC3C=>Q^Im_2lCclHPXwyNZNUB95FB`xODcPyx2w@Me%0Ip%(Eo&`JaSz^ zl)?M>8NFycPP5X}-Kok{Bd4>?9Kf4I>Ul?Fe9CklfUuPFjlqy_DRlrZC3;b;d5%Rr z$^CGl0YE2%^yh5N`tfS;E#(g&nVx@?lKJkLe4HLvDpfgPpF@;^I#t<}6MsYSo1_!P VKw+hZ4FI|Gg9TyoO^D)*{{iAxe24%5 diff --git a/twl/bin/de/matthiasmann/twl/textarea/SimpleTextAreaModel.class b/twl/bin/de/matthiasmann/twl/textarea/SimpleTextAreaModel.class index ac9c823596bef893f11613c4eec74b183bf76f60..b7ee642c050cb8fd092a2af14c921f4111f1a5fd 100644 GIT binary patch literal 2120 zcmb7FT~k|C6kR6?+f?%ciMWI4cno6-+L#aSRK@*@!N(*(yxq&0S_2ypY=ET}x z;j_QMS4D-^&iLqqzsYf2=O#_UG?T%Xb8_z4d#%0K-uvY5fB*Osz&yT+BZ-ALhVijp zZp65J62qss8N+AD#xaCN1GnOc;kj9+Ge!w zCaXv4S;HlHW^w}qe86`*35tji#`P%i`48!4=iblnoHefR@N}KK;NF)yh4>{fdzWjR z=D;;X@DbkQFSB8U_X!RDzKBV#8eol<+BU8MQt1W1Ns;MFnx^3=ERQ}oI6I} zG5SwnY^Gi!x;vLXMeKJbaDs%U3PUR}P7pX4 z4>7~|Bh+e^(ua{EQWWAJj2K8WEWRzg*XrF1GACQ=H^l$KfZm?N{0aTfG4KL|0zcEL z5s@w&@Tj96<4tyrZy+?hV&Ez=JcL-fC`xgHuogYZ!zl&kr<&yu!Puum&yj` literal 2138 zcmb7GZBrXn7(F)xmV|{$uvlZ&7C}iU4MMH0L0U*dK@&idriI#Z7P!)_n_Xu2V(qW+ zv%kQviWaJ!@uMI7O^)Nan{7xm11&S;=HB}}=R7axK9j%x`TY+7)7Uf+6PVhOxw@s) zL)!}Kmh0x!V<)HNcgpgmm8;nGJx5l#o#(df?MTN!Twtt|S6yG{maL#)InI`~{f&Vh zfovz!CP5ptKwq)ER^9ljQr##O1x8CJ`c~8vN9F|#>BzctmB5vg9ooo7iw!RV^v-TO zwri_7fv)jPO(0%iDhAF7jGP`p5(5}Ck%B4EGaKS0An>{g1HA%gO13Lk_Ul{HuUcD< z6iAi4ZOf@yzODD+VG>;!Brn?#2uz=xMu(;_iL>LSN7lDi&avFxTt)e|yPMC{l8ofM ziMNqvodT(J2{cc*r2g-r?JsKk5rN?jh?|*O0;71}z?i_q>BX5>jAUzHNfRGnT)>ZZbIY}$l{WL34y`mR2MwYk(O&>5|^1-b^Q*NGt`nSuO!1b4j zHs2CtQw3U&*G(jl)cwtynAKuU?szX=DjT!s%db6Oj{>so5xr+=xV(d@~kYp=+Qw>rlzE@H{RZ3;fr zKuBEh9Ea_&JvT71jL#TzK>a&Xd2Y!LsQA%VEjOEYjG(PT?2?HxR+xaS@2MvZ=Tut) zp=lr1ux{WBfq`}q6Z2SLZ7bfszbzMSUBGi4UhHM<#t&6@(I% zg-^Trt*=EqxX5mI@xL1}r1d!B;E!n;aP8r)4<>K>xy$if|Mfk`z{U|?`vpTka~s21 zekQ}qOI))U4o^Wh4!p>DhO6LtclHQx{MT&?alSe2rp;-Db9j@h21xT$voDfB^CvYx zcH$6k9it2|10YY7Sw{Y8h&0@=j*xVK@8Dfx2|ef{%p3I6m_~LYeuxXlfQ@W!vj9si zU`7+nXaO6Ez`keLae|EOJ&Oy?MXoISij-!9xFQZK~c7&17>gq9ia z3p|bCR#?RcJk=FWXMe@DKhdw3XDI%No@e;{H>?W$#M?$>sgU_THSr||@qit<-_oOW l6wyuE^H;*)ffv-t97c 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 literal 6896 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 diff --git a/twl/bin/de/matthiasmann/twl/textarea/StyleSheet$Selector.class b/twl/bin/de/matthiasmann/twl/textarea/StyleSheet$Selector.class index af18118434a80068c7d554a2484454ca3721a3bb..2d53042f8b3b457e6b351ef16b2f80a5c1f7a745 100644 GIT binary patch delta 545 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 b@Ztpb0SC^&iy-h6<6%q>({M$LkA?pLB7JwH diff --git a/twl/bin/de/matthiasmann/twl/textarea/StyleSheetResolver.class b/twl/bin/de/matthiasmann/twl/textarea/StyleSheetResolver.class index f7bcd0a7dd32935866aa3f43c92bd68f0586a138..7d93741f49ffcc0a5da401439aca728e1c8b7a93 100644 GIT binary patch delta 93 zcmZ3+w2VpM)W2Q(7#J9g73!KCq^huyumBR&cMRRAdr<C4w8HCvxL?(7vO*~^D&*PMnpPcQQlbV~FSHj4^ z=cq+%8v0^|OtQh)1vzEIfe6 z@F2k_&Vx7eX6DUYgKN;Z{GZOiJKYFZ4r~-g1jg9!`sKzl-yJ3i72=dCq5m5A?O(@8 zr_1GhJz0Dg#k`1kF>=4lYZ`nmRH{Z0nD>v=4yqi9IJtMN lMb$Fu(yxy#QW{d)r^%CUIG&{(Ei&aymC>d{tZ!|(;v1F08zuk% diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Clear.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Clear.class index 34be7ea9b9316b379148d5dca9609a999aa708d7..206657812239a68540359101c854cbb6d5844331 100644 GIT binary patch literal 1303 zcmbVLTTc@~6#k~&cDKuND^M&VqN21#S+3q%O96|JRGPSzr15DeD=yh?lkFCL@JDG$ z#Aq};`=g9!rj3^9gRq;NGiT22JD2(K^UHStOL!84g1b8IVO~X2#e$9@EDExuVOS^S zvanduFedn_hJ@hvHH-`XK*d7_Ww*RrWQc6KHuo8f9nZ7!(h)!ArpvuU z(+YgYJItmp12$f2)VRCHeMh9|=21Ler*!eZb1+16j^_km&$}sR}7@`_lshZpH2-9dP-BW3K|H!Tdgd+3* zD8w4|gpdoL?Ya0p{PPg9g++QfL-hP2g(L_wK%8JpPRJ!E@W9Z7=n`2fh+zU(!7xeE zP2%Fy+hCs%Iz#vaNetJBMx`!K_EWgtwO>U@-u8_^$$UoS42p0FopYF`8>3@}8K-0A$W87ytkO literal 1325 zcmbVMT~iWK7=DfmEa2t`876A>VF_riA88*jh8iXl!c2?IFkKySvvroGSr*Iteo*0s zPEAhN{ivq*97(r}X41XjeV?=M*Yoak`1$MWDS!n$Q_;gPw`=MR?s@Ml-fD2i(Y+70 z?wKDw?wVY$kh4n8R&&?1C)aJ0yD9<o#}x^t{tGQ^6_I=8FbwFH)jQ79Os;pii@Xr2RZw@q@ElBp}Ojv|S) ziWI|ukIiArGaDMFF~bnyuFDVW&G&~4X+P)k&c0dqG6mln{v6RB7*sh~`7OhSKdrl} z)aAdBAU>zzA?5{JU)yz?w^|wB!Fi7hPC|I3o~Y4myLEHJlFR)|u(KkV_!`!p!@agk z+kfG!DGFpSKlBPU)e4Sdx^hahrQ!)K^8bZTQkOR=H%~%Q=q?6xBSKyPSyGm?Br0i1 zPryJzsEHy2BsLA#D6fyuC&J>Xd;_b+`jul09AQX;ctC<-2}XhvBqSIMNieQ{rzE9= zA)^-PVA!YyJ4hI{PzU425hlJ+-5%Vb-#E<%Jg2TXB(RDptl<$>a92i%D7r@7iROuq zV5Fv}$BuFDqDY7W&`r{$uVPYAqYHB%54!2g)JmksJD8}wQqrfjteA3389l+&%x8LY zHqu!&c0NLcBsANtk){~YD;i_z6X-v{{+*}L-=L_uNQ8u4!m`Mue1^w(nj85IC6F^R diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ContainerElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ContainerElement.class index 0798e79e9820527163c275754410a97fe717c877..b99047fa17976ea8795e29f7b7da93843b665443 100644 GIT binary patch delta 712 zcmZva&ubG=5XV1nchgPQO|?ziRO63mt0o&YZM15QO0kF(TE&Z^7fEFiYs{eu9=rr^ z-Xy%Ee}N#Ppb02wD|oQrLH!5(7rc5X&fA2xlpc28?006q^L;a~lk6m?*VaFN21;D^ za5>>}(!=6Z0*|8cCXAVMIc?4}#!R`Kbvf61Ihl5^R>Q|(t)cMeYPE2Awpyvz!+LA& zxqhK0^lvAnzoA!Y1<}*l2-%}%L@Rbpoh>5C5vsZ#r&ptB3smu)}HY8Xn`iFS%9;Z$0tzZ_0 zvQHxLO;`|h#*g=yx+)I}c8IK4!!sjQrkihgGHv>rE4bUqzDHzTS^kDBUq*36XcS|N z_vp6CioX`>t+IaXAWO-Lj`ixV@TjZDGkOYb61O*pW!@0{B*CvOg1iku9>>WEk=@%z Yo*-&pkkKN0v1D&0c01;YmKY`RAMMpzE&u=k literal 1719 zcmbVMTTc@~7(LT1l&&k6a`A#U6s6lLs})5p5RquoSo8r>qi;hyfg#&%vO87q!C&Nq zCJKor22Fg>#0ULB#&5PO6l@yl!(Qf_?>lqmocZSa?+>2<^&j3HkUPL(UQCV5ch zp693+uA{_;;=bU{GX2cc&tk12-0_8)r?~Wlf8P~V;i&}T47o!9?ACQNq}KU!?zr4r zbqY%Oe8m+EJ>@m&R(#U+Mx{|Il@B4hSC$sKw|ae^$ioaoR7t<;!>(>TLmt_l?$8HVX}!EVoa|K6j*yav2z;SwfDdIF@A zrIGed-{X~aQPwA`OL`Tt!N3X(y_89wL?EO)xmM6nS1e2-OU?)KCCO;;N=0+)gqdB^ zfH?~eu4`8RaBt)ax7^XT|gj8Ir)%~(~AhqqOeIiY26&PN10^G#*Z~t~^IfGU3 z=vG;9c@T&o0rDdA|2@pmfAC@=)gtFGMxAER(?!paZaDfT>Hdqs3}e)_6gf(fMaqlO zcOaA9MsMaL`k!ti^&Z1-!}MeH?xhr9hYCNFb6;?rMk9?PoWMyMQ8`9&iXfRj!!*}e z>}`nRgi8!nrq;AA?5jrWxRCh^PrsPK3yC9v3L0Dc+@QP0`Zzqgxo?fpHMy zTN5j5mz9My>~QrAvJu(=HkV%$ax^@>?vi2Jb%*ee>L$j jclnr@!VSVPa5G$WI@0MDZqqnL)eLtqLs5giv+?8~`}?*a diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Display.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Display.class index b99c57213cbf99ae29b32dc80f362d1d72acca3f..459cde1e9c9de958baae9e86dd233575e7d8dc1b 100644 GIT binary patch literal 1217 zcmbVMU2hUW6g|UkSy;9$g{m#qk7`w*$_g#<0n$*hjl`8cP@6P94RpnAmccAb)qkZl zu|}imvp>psXS=a9`k>4vb7$s$oHO^{*&jc@djr_hG?T{HJV!t+7oB+#^vuBjD`@lS9kefU=JA9tpnTaao>OK@Ij9Y zVft@f)3@LG+_Sm4ON&ifJntXa?n)S>!Z7vN+NnRIxGQ^`){CtcL;2-ok)lW39ZDvT zvbhOEsC8n;Fl#x&ZVr2G+uP-Bmrk@G_RcGYr&;TeA92&=qHDH%&k@~9ZZg6ttKZ@7 z9`_sx5+bRB_XsfcCkhpz>Ilc*V7UAj5{=v*gG$+_48&VbS8#vmQ6wcR6|ri^4V|~g zLT`y-uR00)4Jw`9>JPn+z3s>hr7je>Aai6OCHpIFpoo%&HHOmvw}^oStQ)w7>)|ww zq=7jk8D`E4A@4!G)N%WQxXfpBV|UzXAKD$C_~!o|ow{&5#X*x-#$x_1{6z|tT9ICi zLC;L7ErOT=B#A7L%*bqzMnxR+xCE*q?QW5jLmz>CLgW<62ih@Qp*b4pN@Tx)#n8Tt zNN}1+L(PB2)G1Wy5V_!xp%dfG3|Fxf=qZ6@B_WGY=mWI;>e30K9|QF`-nqMm8=aztZ-h z9UVJ9`=cE1rdZ;GGfEz^_h#?MId{+I$ImYp0CLEwm|(~q2))Za@4d<0F1Kyn`(Wvw z_~>y*aD9)AEi$UT17WSaHr*qO4^)I0rVsfs*DY>$^s?RWGDIphqf#p~Y#9GvGS3ix zW$c!A7$(cL{pw0%%h)g18J@o#uUfRwwoKdfHW`#uy1@`C5rrtiaWKqin8h`MTo{JT zr;HJuy62d7Ctpc7VibE_Ll}`LRO!rXP!W;VO$|}RsFY#aqSo)WgtNz6mS9L2y*9TR z+%cu^e~d%H3_+kFyVUiVTYW*s%T#(Sc5&RreHHf@W&@}Pt|z)09$=w{`TE(`7m(S3?wnFgN-+Vnl8%7cMX4g%3DFwIB*kguHOQAw_A6L3F{PYg`Vw0AUnDfiZXjV}cvOm>66FPEdlg5M$gCk3i-CUO^KD zqlqqDn0N?};1P`f3}{%GPFGh~SAG3g^|YR5etbW@0N8{Tf`&y6dI%~qI?a-bdgZM!W{aJypOy^$jBl_+*U3vN(q#0-Ry zH871C13E(Po5*NhET_WkMz)dy@n-e1nr~H|M!r;Q+I52EZ0^wg5-ImuvN}qJS~O}D zkURuEg)0n$kqB>P#wDI{vkzeSd}j&a^d z@cDw=2}};@oje`E$AEbc<(AHX8T5k{pW`WE!jL1#{nb`vwx`YbS637=-)ab=&VG(Z zG#P)II{w`Ff#wa7r`PfU3q5Sqe24Ljz>(EQ@YQQr_8T668*KQ5`OOh<6iK9*$6CxH bP2QYeB_agQ)0MEmd4Y2hock)|F-89Y(~UeN delta 557 zcmZvY+e!ja6o&sbqs=&O%`7|F$&NZ+7~&g5P&ZjbQI}>zB{on>x88L>%!?G1MnPQ$ zJwy*u5dAYobP)r49cHa>|NriqT{HFe_4o{+jG_TeQ1;%-qXr^^RHJrPD>ZBGNvV3& zaO!Q(KAX0nBd%aT3G{qn-$c}cU{E22A%9ycR*dDaLKFj@zbX|!Co|sXo^D{u|B#$z zA&Z#+Fza7vlm4|h8G+h#UFUMGS!=bNmVtu6_TKG|z*uiO=Z@Qs0Vgqs9Ot-;c`T5(7;Z^| Uz$K;{ma)PmK2+d44?7b31_-r0qyPW_ diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$FloatPosition.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$FloatPosition.class index 98a4afdec7fe20c152dd4c0a6df8116314c7b9ef..f8e8652ce8e959c6492cb1aed2eaf6b9fc5b3ffc 100644 GIT binary patch literal 1308 zcmbtTZBG+H5Pp_kd+l)rJZhB}->bGoIYCjhNN7k4Bxf-eNr<18a@Hf)z2tgDf0mX+ zj7Gy}f0S`{X{3#QFmRXb?CiWe&&fnI_?`7!K_^DBt{J~ zK9C-BNsLQ5pF~E=hdLfHXtm8+g&|$_10KB$+Fs-Zg2CJn!VOn_-fp{XhG)*6Yqxk5 zz4Lgx#f7k=_r4vuA0i&Q+}@&1nKmziJ=f0-q$&}FQ>kt-#9wW!t&`Mq+hyl?Q_wz>rv>5 zW~p!<@|F`cxWCOqPeS$ZG{IX0YyFMIkXZ7B7cDbn|3PJ=uuW~I%b{+h>Rwaus1s7A zSY8^EOAWsl?DVCsh)!$i>@_UY%^LNf6E@tcC%a`0Ou?+|mx+sVAhRYG@L0zahQ+ha zk%=iRnz)V|y=4@ZiE+7PU@?rG-j6Jd#;xH8f@o#(g}$OUclX^!MAVD_PlREizvt>v zl=^c1nTJ6NrIk5)Wh3-NwUr4FU4SGpR+2~qW0SH$(gP`6!euZ_kam-#{ERNxXAB)9 z_K`G(Nm>)iRw4f>O!xd3Fr-e0$DtL!Abt!@1`G`ZT%i;5#0^(*P1&iNi*29U*y$lu`^$DZ@%J<4Q>< zzLQ_9OGCS(bunDuiFc8%AA(5&Ck0z7Wff_xQ9bLpiwZG40l!0mu6%}G^B@og=<5G+ZO&Xtuvf`5MuG!t9{3|UF z5RJrVf0XggP+@s6F|ZFib7${8bIzSJ`|J0&V*pPvuVR4V#kQq)co=@LdC=jmtB0Q) zJ+wZD+_$*CL6aq#ta;m(Gg)&y9=`DcJG4DlMT}v1m+x`i;qH!Jb-NvgSYy3WWq4^^ z6t+wlMzyxV5Pw@=S*3BX+Spv1Y%Up_Rg2>|KRkLNY&zX2eB$IB_-f?-@_31Q>2&Mq2 zT%7y@ZLZZ_*YYJ>D^T&A8vFm3fnn&}EnA!=BPn!WV~aWAIDkenn;gk!!05PenaCjD z4ML;*A&NQ_i)ZOOSSvHE9Ae}EV=}lFlR;JnH{vqLC4Nwz(!-e9iuI5+Tk#%p<^l3w z31k2_>79{~HG*HkI9AC(Ros$aMFw4+{?@ZZSWs3=Qxk`{eFl)A1oVppPfEcZp@9_K z#l3#{Jn0nW*&gz(*GlQQRT13Ql>8CyPk*5=Cv;BG*eQh+d8X9IC{d2UPiI)^2va}7 a{#~bFMq=uCBF9>`e3?E&Y3gk_MOZ0=dZ6n04(BJ3<~CSJjA?;l!`|>2C*Q>qJ|-z zl#hkQl7>;imo+2>f1+Vb@D&xS3`(i6U1rdCHeKh$tJz+_U=%&i_P1Q#XxI&gmC~_o z)_4%Sb$Fx3JPV$o9+p$fX-qhTnU` z@G@OGM$ka!*TSU=n!)_b}ZdLl`kIDo9e0F^n+uU(H6;MSE9u>mC6cNoTrh z-a9(As{ujD{y!AL-Q9BeCURXd|Lnqb2)T^~dSQd~Od}g95N3cl!IqqmOHSZ{!Ew!M{nrwU;%7{z0TeIDwy!(T+ zJU}!OpZ!tBZ3v%h|Sy9DqI%PM*p77m48z?@JaaVA?Oq(^@Y}XHkJ-NANTSrb!IG&0SL*Fq!;kwP8Bfa1>YYd@MVWZ6OveZ@0 z97A}o_wNN3=%mymV z)7yQ=uoX;e&nwgAS;-MR)i8^BvT3mHy3HGnT!74VqmD4?NODx%s5jlJ*s%OD->~zX z3?|VAd767om(C$5P!`B{$$W)6YemNqu1{4oR4ma*|NmML@y=yiohS1sbZ5h>BhqpJ zt>iX;C8PN(c?=jxNrzEnhzzLV7UlI3`b=2<%HP4vM89&5fin#GAQ|$(un$JUK1lgs zEaHQ4^#>&>EesiEsD)v}47ZRn%t#C4#u+BQQr#Xrpl6b}0W;Kf7AeeO3OZhpu^##n zGK#KNo6$V!k&4vp^w>Ebb&5nN0PQ5r->aCE(&!RB#*=pXBDIp~$rdKeEhT$t<|WH* zW%L45GhgVRD@s?@*foV1QJZVm$Wn~#6;H721@xa_|ISnBb17>+CqZ&uz@p5geEQnq H)#}I}9*jbI diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ImageElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ImageElement.class index 3b9f56355cb304f604ae4ecdc6005510e1fdce8e..2341463dfe728a6131c3502620039f44ff117147 100644 GIT binary patch literal 1118 zcmbVK%Wl&^6g}fOapD?EO?f}sLJ+N6u+$AgMM$Uu2?*UZ>VDdcf-BoW&XmVj@Q`4~ zl08UNm00ird=%o$I0}SRQDJlE-aB*7xsUnr^V@d-tGMQ)h6@c;anYDdKFwth^Bxui z8c8O*YC~p9AZ+c*=Q2)Z-iuSq0Z;dOsZO2=)b1pCqVEbkUTk$#oJp;pCbFN& zJdgE@G}h{+mW7hUzDm{FIN5k+X-mLe?{z3X-AZz`v6pSDqAj;mTTX9BrdzT|Ogu=s z)a(lc4^7$kQ@j;uwdF$bgfWC9Cm_qGLUy zS+Rfgc5Ph3Cabipx((?V$7J_Kpf~8(iRfL2pkP4xfM7eL9Raj)Nk-aVOEBKJ$ z#*sTnRF!(*2k@g1vui6*5~6bP&W`83xASIx{5<*&U=252lo;*~L>P0epGls@T&YmM zj6yA5X`Tum_9%Ej!P8_QqSjW-hvH!*VxhDPhhgnMzy*$>E)C5#j|D@s^PKPVFyd+$ zc6BP%aD&0sNfK%Kf}wg(Dyi=?JX!8cmFnu(k=Pg~8_%@+49+ICp} z-LHdT)<*?Z6P@wlqDq;LRAPHC-Vte!??kq(WS2*Mo=S5sk`8&CF|1GT$@RUv7^h7(A-#(cF4wZeBOpOLxU1Y0Ws+ z(j7B!BHdC-q?-}XGLgBs&Jau;@G%Zrkk?Y1{{o|4 B|40A; diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$LinkElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$LinkElement.class index 633ccf8639738bd240420ba8e4249a0bccb76bd5..b8b8e3ee64eb7b541c58e5a79c5603bd3aa2f1c3 100644 GIT binary patch delta 392 zcmYk2Jxjw-7=_Qh`M4xaYpiXx)y4{fHCPk}5nP1gAUKM9hk(Tz!4w=FT@9f>z^$VN zT^#%Y{t0z+)?GZgh2nDG&vV{~J62=Wc>8^M1+a^j3lmEY4Ad2t6;{%_^QbP{|5FL{ZM3c5J> z0D@?qK;4{m7f)_MT)yu+=ic)(k|P;B{X9GZ*g`B}2y|81wIn74da7J20wYwd6W@Ue z*Mo#7u+mYl?eJhQ%+lWKkqrUgLk*U?+Eg#kk$|_C=jp{xcHHl$eThYZM3qSq8&T-) zpXO(~S$dx411wW&7S~4S(n;3uQNLvk1CyLS0-{)RE~XF?0WPM|phI;r zol1cSO-`HK26y#VOYTs=;W0M0H2J9wz3~Sc+Lfcg3}%aMvvK&Zh(jIl#ei?EX=-f! am9TWQAUmfs=CQyX5}RnD%_@R>3HC1)Dlaeq diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ListElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ListElement.class index 707b8e2ba504487d05b982863ff695559346dbfd..57c7faab1a46cde8f8dbede92ea3ca6c84f6c0f8 100644 GIT binary patch delta 240 zcmX|4%?bfw6g}TJ!!QOP220tFjVSpko5@1W${SeBLNUrrDKB9ClRg$LjvJP64_ zxwp=_=XTD$ck^ymudnk3KnHaj21*tx7F@j_>RY>!3l?!QS%#}HN(7u~6ongqIgjHo z7U&0B^$uMz%Q!HRvQX3cfgv!`s-?GOSNZEGnJ*amU+}c@c4$KK)29TRQDT~E%)KP1 vz19ih$VtK?+TZPiz9%x&wVw-FI8^i_j{a^x~6Nwn!R$W>(D_N658 delta 247 zcmXYp!Aiqm5QM+|8xxbJTGQ5Eym(DPtOsc+cqtwVg+kw;ha3tug2}zl5P}clN$}tU zc=p~0sfeR>7j|cMW@qQ^yw=C}+dFVWKfu*jHueKNV^R-oP(NEz^+!=egD~a@zgk?o z(OlYX^||aB@hs1?r|D)@6j>3_HByP`)@V;3^K!M8dcVmYvb;2!^L0`FGcGZu{+6i~ ztr>{j;nd)#gIA7UgdCA(^mpCM`9)Lw{NN&{B_=;7oGQc7h6}AT5}gyF1|52Y5<7Ye Fe*o#pC076d diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$OrderedListElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$OrderedListElement.class index b546b2b7b92c1d33585e8631e9058577ffa1551e..43dee3da33a1aef3f2d7b94ec7018a1b3d224827 100644 GIT binary patch delta 301 zcmXX=%Syvg6r6LL+-uTA)7EFL(k=waM)3;*MMMx3|De#jDAWi^_WpqovhU8F8$mZN z`~ZK#KN07qZf1r#=ggdyUg_cY@8=hQ3mk{=up6L*J%a;-Vf}p74CH*$zb)pru=ATm zSzRvegUu^Jbe-q6m@a2!X`4)5;s^$#2tKsIQ5|RXUDivck9jp)aPj}H{z*H6v`$iu z37fp;UY$NkI{JWm;};4cag!5>hA#%8Y@kbT>^!OnTV$sa^dPNbCoctk42S`}GqRic n={wXb#X49!Q@U+nv|eD~iAz-2ZgGe0V3K0rK4PYMNbq$grINAvUnOz@~SE-g?)1%1}PyPJ(kn_ zo=4+J@lcf0`n4@_#30Aqir$Og&pr^o^KJs`tPy_;l5k1Erxs%F4sC}38%Wq~O0mfV zn|K#~NoZq>)#L7*-Ok+p0^u8n1}tq!!3wCG3k*E5M1k#F9rcmR`)-QG7K z4(?6Px##A0Z?5Nhn+a delta 242 zcmXX;OAf(M6g}^?RI7e1IyS9D#7H7B5d$N(@CFSMO4`mXL7J{WVgp7J0}HSLR$&R^ z_}rV^d(Y>dr~cGSx7Xzgpa;)@%=%)e8PK^q*-<#D*S9QaFm2?JPp94Vux|+1lQ0aT z(MrW}5F4lq_}M`CJAvwG6DDd&b-W7JL70%5sYuNuwO#xvv>=%IDZyqir$ID?WCMA> weMaHLOTyx`zU-aO2a3eap9?lhMD(MK3Nu;~RYHjx9Bzk~1{V#O6kWcVZv$Q>tpET3 diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TableCellElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TableCellElement.class index 44abe268a98ae534ccc63918a0a38853e6ff3e65..9f25f118af184b2e76b0e0c9f8235c050f5e8c4f 100644 GIT binary patch delta 424 zcmYL^%Syvw5QWeDxtTQ9wDH#3tIL#X(WQt&5fr4*N9ZC8p+>N!+rEICkk@b{Ce{HVK_Set*Cx8=l9O&40V4!AG)h#qEG~=i1#FjxaR25&~ z-b7LOIGj#qvv4Ljzm3Pe_{>WdGKjzX$%mX)U2MQlgYCkEWuYC9j_8R;mlbdL5X~od zL|je7`!Jd(qWVj8`JBNU1l4qfN~0!$(P4GLS}|KePhUY^C>2VKPTH0lOsT_Vy_?&x z36B*QP$5z>m|wug^k|%wg5C-$XuK_<{S(XSOqwvH1xMN$wUhh*sHK8RMs}_uc^f+g t|Cm|GH-cAa&lLHoX4;g)4Cv;D0@zi&JGJd$i@8dr;{auT-(YUR{sraQEG7T| delta 440 zcmYL^%}T>i5QWbqX=2k@Yi+Bo{dM6YMFqiC7cPQ|%YrWuA&Wv9!FJzg2zd=Rf>N~L z1Nb`Ki|5`%+}t^H=J3tjt-ZBt-#?#U04_0fUIoYQBOy=t_wlMg99%+ zm9unqo_@?5E=)9(xl`u2<)H*So61#F;N2%l^c=+DVi7GI^aOso@mGRc@RTgW8HYD< zG>?)ct%vY2j)EwT3kxISOx`4@D<+jm%{_d}?5^1xtd2jn)^J}b4eauDl`U=9(m|Dd zE019hHFj8$u}`LGnpe=K45@7uf4s(l-+f2(pIB8R>7gWjxH8bxVIKdZqEbMK(B~Qi xAL6LMU$6@CCI9UX%@?ZtR$IApqKWDhCJLf~woY|$%v#sybIa=M!%Usp@BS8lgL=;0WuZ(aRM`*roO|}3bD!rt_wMYUf4}$xz!aXv(Sr{) zJdC0@jsTXT=#L?ZWf@jvcqGHBhL6NP){qywuHoY-X5#3UjA;!84I6~G-K?(EtY+12 z5GYU3IPk1?$g{4JX<5Ysqg1i?yxEpfE~{Bs-tn5N+s3YCuJB~lGOMQT5cIrloAnjT zXf#Y-@!-=!+00fA$JwtKjjCbWS?AEoI_8mM)J-G1&CU`#8?~}&jhru+BgE>p!=m%8 zCB<%CP)x1koXA4Ot~d_}~KSP5=J`LIANJ6I!5X14dXx|P>QmEi9OR{@V=)YnV=vVH1`a)TJ;fwdD*G7B5wZ*)Xb8HtF;Qz+5u2f4o?0)=TDEMI=wY*2KGC z8Q&N>-oqwgSp2MI*n8Q$Wtn@1wN&40%3WJMDwzjPrDn^@Egik+)6p-(H5uMUpN6M| z+$HXxj(3n^3>`}-N;(GdF5%`Gw07A%+H5+TUoO|0cDdohCCqlL_gX95PlA8Frv5{w zpQQQT=o@_xM4i5L;gm|zsq<$qC-Kai1Hce}cYFAw9bwDju$L5llx2yOWtEiWJ}b*z zWE%sqrZ;#T;@Mvaat&ZTGky$8{eZ;p2s}>)j}dw`crpviER$*>k{N74%k+g>h-Ui2 zEyOZ|sr{FTx6qXtdA)ljxyoT%#Eb(JXG$eT>r_CTSkC zl*1A&AWw_9$$1Z4L>R$so-sCzBF%Wk6RrW}3EQCZgl|ZB!Z?gE_InZdhZ_{pkkNP} zet-nmn7|#6d6uoz3}=2rot~nfiWsJCOwf)(aKqijS8yKFtc-Mf9y9C(ltvMR^jMdi$M^Ap zhcL(QL|=_}O$?~*&g$}sD&Oxe@ylyodA|L)?-lxqA;_V~{a>ngil-;}x|~S*jJbZ! zTn*;B%UsKtCsP5+xLf&vaz5Xj$CrU%j@bv#G0$Pa1H8`fM4PB$KB0DZsmrezXdfC? t&U82G@5cXJUU#GFrbq`Dxl({{(g54*TsMw2w(_^OhFffV*ggrx{sk5MGur?F literal 2549 zcmbtV-&0#v5dJnK+$3CRO@UUD*z&6+fi{I!DFkRKr8W=>8itwbjCx6~5WTr!k{iMQ z!#90#eDy(R%rK)<`|jW3-(b6Y?oFUf3|8`xvuAU5&-d+qd-B&mzyAqf23s0@gxR8* zE*p-sUovWC!?x4Tp_O*bBgd$kMtYl#Wi~b{MbjGFHg+v@)iTSb?P%~5X5J#$iz9^X zdU>T{)ysB`Kv{yuj*lycyz42LmX$v+3MG5b+ie-eqS^)IH$JoUY3?mUm4#RY0I$p(pk$g_Y7;fx>uLtuO1c51E*B6g9wDtk86_tUBW;jcM_9#s$95C zawiBa1VT(l0NrA}r$ckC8#;onHKHSgZVh9E%mwNz>2K-?qenx6DRfMwiX{;#9Xfgm zmvSZBd{!^-npM>}LL^ry7}kzaEs6F#r=Qiz&714oihtKGH#ATa1rWwM=VzL;HIOcZ_PVFSWd8BIwNVr=CrIe%o9dW znxD0c=Fw)|+5GZRrEV8%rxdfmaxSR(3u6w~f_Oma;+f!qV?YdEkru69kL@vZbO^r-CVevwVm<^*kVUtLl1I#5O_lNV9dbMCaDTzQLZxsHvRG6S=ZQHD_ zSVpa8)->c;!5xMEMh<@PT5sXyv+on!J=gJoJkmKHI^aZ4^D+`?_%F*c-ehw+LfTz$$Cwo-vLd8y!6mM{)rn(co0 zUg3&7T%=)w_ycCo|4g{+F;DX2U9Zg&T{(x5Hq^brOrj}h9&6zwPkH{4rV9h}Dl?u=A>9t&*w zRFAl8dZ;ux-Xxo^n>n^R(j1#&+iOYyhJ}S1QA8%|5Ck` zKT+}!V+MW3Tt8>726NqIu0?)ZO$8|BUeyAWY4Oc?d>IHHW0gUPI!~BC!G|8;HU3R{ z6I9Hn)a@?yu+XJ_XjD2?-C*lBeyP3c2GyiU1)p*zAF@0hz>vzkjtzeZqgcl?^#-hC G6QS4WQ8Y3D diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TextElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TextElement.class index 38645ecb18585d8d65fc9c3d690e2a1e464d7ffe..814b9ff207a39f50e45bb0b895977e7731fd109b 100644 GIT binary patch delta 455 zcmY*V%Sr=55UiQq>|~Qk+(eCU^H33X14;;@XAu-Udh_IA!9xs~%^@I|lX_l)|Dm8L z9{d2oFUiF(5Nmd$;HA5|rn|a&#%in@AK!2909x3{!NFn{Du)b~T!v+ZRfTGNeLf1s zb~S$z4*Cb3@FMK?1@uw38}{})XHgVJ0=vhtw=?<__hk(ib&UqrG!(K5>v3Vv5@^L< zQ2HBJ6BK{>qfOD~yB~Z05OwZ#=tn@BX(Ef*MUFAg>Xf|2T=Ih#h-O*7!t$HXupdcE zXvQ*Z#!CwII1<4_9|bbCbPz?9SW$wV)08#HtdbBz%wTr1X^YuBX8b4E4+N>YlaN=5 zqD~toiUJkPkuf$8*)5rMkU9+hIV>hlZg}V|yYCXMis^6jfM0vb?@>--K3TrNL(FlK Ohpk|Wf8sFLZ1)EoBQuKt delta 462 zcmY*VyGjE=6g@M$$t0V}Yt{IEtj1;&ABd>E2ns1J1S^ZRih*Re5G+!uAcBPb0{=ik zQ7rrbeFu^ z+-Ei=#u;7Mj9sqxP(VnJ5hmDKN*7VXWS=EDFokLI8f3I2@eF21N*l~(mhoTUJ`tqs z*`#@uFzWPyVdPw34)cu0<{@88X5B~~HvTy*wGu1W)V!g^+k~u^E{w>yns_q*u#ku^ S@&I$3x!=QzZNA(?9r<6K8a7q{ diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$VAlignment.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$VAlignment.class index 5e896eb7ead7cc44b733156351cfd316925a6e00..9329267db0bb8b7da7df5a1982a837a327345f23 100644 GIT binary patch literal 1340 zcmbVLZBNrs6n^g3tz9W^1BOFHRFrKf6$FQD5|Ec*Kh`iQcwWUCL$p$U$)F!>dG4`acl?mSDEYn&P+d zJPhBuyjkbIZ-(zYGj!gEJaD*Kp~Ds(_8UizH+LDQz!2Xr?d({)ba+;-RLc7d%3jH` z7*w*eUhUcpYp?r{e#*U;0JxsX_8&#rCfp3emg_q&TJ=LGsPIFNZd4h*{D$Fq#ya7r z-1NAAY}#Sq`p1QA->{QbqsF}h9=IY;H<{w|I^|6Mors!ObbUA6U`YJ~M=5(iU8T`b z9}+f=kcX{+B1JPop%rUh*SXXade?8&i+vWbL37pZMk}Z}d#>nH^2!1%icT50CiXFH z;0e}MkjH9YD`a2>MFV#**CnGEH!vYcN{~s6GYnnMM%2X+t9cEdfQ@IeJvEmPPn=pv zP;&ndg>d(_T)v1xPs~5Na1}yfbBUhU2))tRW*USUAWpC)C*+b7cwl5ow2CYhBrt{R zV3;Q9HgWOkZLrUXTp;?9B!(MA<5HI=`x)Hq+OHxaZwJPpDqp&^6$E|L#aiTEntpj4A; z^c>n55>n6=DGW%#h)H2k3PW)z46EPCDcYt*t}1N|*wt7YgLXCE#;|<`CNOn+kV1^k kYZ#;jo5DI}FJJ|EDxiZYiyY}ASil%@oxBv7NN%Qo149}({{R30 literal 1362 zcmbVMTTc@~7(K(b-L|YyDi$dqUQpVCR8+2Q2nZ!<*iw@%O&Xtuvf`5M)@-*Z@BSby z4-k#SXMdFOo1xP6!Njx=JKx!Umvd&$?9X3cuK+y9x{3jYr6V)j;GXx+;;jaEoUHf3 z&U)rYkGm$%Rw&q_pwv7v?V0M9Z5=xe)A3XU7=}*xDbL#6InEZGc7s8wlwUKf=zX=! zF@#FRogKYE!K-qmQZ6wBc8j{sFj&|>DA9QRpkOepzUg~HIA6Cd$MQCaY${!)0o$Z3 zj9?TDBO2nkP1Ez;ltfDJNi;mya*lJwbTvY`cQgbM3PTm(t_D?rumBSp!U9ADxThh4 zkcjSUh+>doShpN=zuh=A-3mXnO@_GMtaH1{T}xp3G71GFM2=3SMSM=V-8Ly$Po?{n z9z_Zn6={Z;PtsY-GaDM_FwYR-uFKEr&G%;v8NcxI;fY!Iaz)=>{CP#2!JtZd<+lub z{<7|VrTaW9u?5dGJjEh;)Zcg8=B-xFN9JZwPnfVH`6+5N+iu<5wd6Mc<>dvDOri}k zH22yror7PXXprxd`36naijHHtlB(HKu}WL||CfS@_iozeBAG{_3me=V7nTEPCAZ0y zj3!s|7!XSehf!vL45;B2)eRB)L|FVP-@t0|VdVm`bBs!m2uLs{!FW)Dqy&>838vKV zRHSq;YSaQ9j2X3H2T7wA>R`$^$MhHKJAeoDOb|CN|Yx$n6B+9nX6h}uq-JPmzbUZ zO#fU{y6(nqC`8Ci3*8lFG{ik>e>kXV_fG;;s| literal 973 zcmb7CT}vB56g@ZDWHoMLnp&;jwg@%bj|HDZMJQ6CG>Q<3&!ZXQ%I*Yq$J+j>Rza!w z&>zqrCEnRxgcw=s)4g-&o^$4&JOA!({{mRWTN?$!T333Z(E7v|aVV7X^m*WE`9q6H z3h#iE&z$V`yE0fl^t(N&zXURrO53mqtIt4ZI6~z-;n@?RBs5y5;=Awyp?Y3hN51N9 z5XRDueG!R}P~P;FueS)_R$94wZT&Nl8^eUdm1c)vZSznS6yZ1+L6z|Czv!EtQ4q!* zlu$O=3kNpJTxt1A?wy54GCB}PK{8tZSOgsr`R1GzEp|F4tmjXX<2&0^ip`*e<$RLV z4nmcemaZlUW+U`KpwRwgVBzGPbcuaB~+l zz(KGdzC?B4YvB$1TI5e!K*QL~S;LsjvB)We=ohf=8O;^diLhXW+ tRHmF1uM%n}ZOEtzGf#r+kHI%jfD4#SB<3*BvB6?REMUnp^DnSVqxW&R>m~pI diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel.class index 017bbe73a7efea105c8c7389291c40999baa290d..97bac0e2dd7b683c305c00f92b8427f4f7de2957 100644 GIT binary patch literal 1793 zcmb7_+fvg|6o&tez_y%(dcb-}sf!i5ST})+ zw}Z%wy}*}P73ixOtwM>n0t0(h<2C)H8xj?ozVo6ZqrOX2`S3&fkWrND)|4@I)i@Lw zpWHl9C(1F(Z#tijeLrbyd1_B!B-E|oL}#jn9R^VGai|5pIXDt~+oTx}*gwU$@eiGiKqIBe*3&oEZ8OK&Dg zS77@5p7~C)68|Mjr%o4ivg;VyZPyiYzLACeQ~ JBl2;j^cM`>FW>+G literal 1793 zcmb7_*>ck`7=@2Yi^x{eu#~bd1=<3233LH>O9LG;6Q&*7DL33Gu_kq^$Q@fL@CrN< z7d!wD#qc`>+bK8b!t?3;{(a_XBuhVkeg6TViY<;2hB;3qxc@$9aZIT5T8^ik6ZL1>t#hp;Sw>j~OOs znrYLAp4M@bJA1$|9?EWTD$~~dUeF8Ma@&txDnl9OV-JShp5M{J^g?R*l=1x&$<0*$ z##wFt|3s(XD%q9Vxa%%Mv7xmL>q?m6 z&;8KGS{*y>_}L%jc+O2agi5E95BHpN?|FNkb2e|^z5W}(O+1Q0!-9$LkkK)zbik319?_AbZiQQ@{a_x zqVEL)){5`Djist=Hr=K`GPmodYcdFa@?^6neLo#MtEL0@Fpv#brc1Kgawj-)j?!dT z`Jh~SKD)V;T`N%5#bRMyAhuWcgFCY6?h1%4a(G&A27BJ2fSr3H4`jM3{r$8PG(3Nw zGU*eg#auD#2&A@8(LnTo+o7(f63NrVX-oB8SD-)V`R-b)w&OMma;Hi+x=OgdCvZFQ zVV|er#?I9%vRaZ2k281EYrd>emFT=j1TGNSClp!PI-zihh^2`T(wO7z`!Z-XD9=#h zKYaVV=JFB$;Y5-qVD7s?{+}V7OC&$6B4Er{s@>Koh>FhjcxC-oZT_Q&vp`cdoqDTL zahE-&)>NxA&BM2Fjdy#}f`fvNqQK-wE}exblq`IXhZe?h#li%x(h5F3Li40C4QmNK`>h(B1>pM@}3h(>)|92@c+dEVB zS@n|G-S}Sixilpo>W%BVtt3mC8TxAD^xt4);tUTUN#K+uXi5??B?%RI4lp%J5<6rL zGu>oI5kmq=&__nrI7$AQZHPY*dV}ziSGpgP;$bSkqy8g2WsoTCmXsK6-yn)66 zp<@BlbYpegkmlm_PJ^M7OFl*z5t4T5`o))srY^mJo{DQPVEm>$xwK7ifh}rb8+{aU z7C(Tqj#4bY-c%4-W00LYhNUa=;VrNk_PjUqBAA&(7Wufy3K=E*;V+qg*5q(}{m_$(8D59O|1-v9sr literal 1710 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 diff --git a/twl/bin/de/matthiasmann/twl/textarea/parser.flex b/twl/bin/de/matthiasmann/twl/textarea/parser.flex deleted file mode 100644 index 16ea209..0000000 --- a/twl/bin/de/matthiasmann/twl/textarea/parser.flex +++ /dev/null @@ -1,121 +0,0 @@ -/* - * Copyright (c) 2008-2010, Matthias Mann - * - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions are met: - * - * * Redistributions of source code must retain the above copyright notice, - * this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in the - * documentation and/or other materials provided with the distribution. - * * Neither the name of Matthias Mann nor the names of its contributors may - * be used to endorse or promote products derived from this software - * without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR - * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR - * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF - * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING - * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS - * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ -package de.matthiasmann.twl.textarea; - -%% - -%class Parser -%unicode -%line -%column -%int - -%{ - static final int EOF = 0; - static final int IDENT = 1; - static final int STAR = 2; - static final int DOT = 3; - static final int HASH = 4; - static final int GT = 5; - static final int COMMA = 6; - static final int STYLE_BEGIN = 7; - static final int STYLE_END = 8; - static final int COLON = 9; - static final int SEMICOLON = 10; - - boolean sawWhitespace; - - final StringBuilder sb = new StringBuilder(); - private void append() { - sb.append(zzBuffer, zzStartRead, zzMarkedPos-zzStartRead); - } - - public void unexpected() throws java.io.IOException { - throw new java.io.IOException("Unexpected \""+yytext()+"\" at line "+yyline+", column "+yycolumn); - } - - public void expect(int token) throws java.io.IOException { - if(yylex() != token) unexpected(); - } -%} - -LineTerminator = \r|\n|\r\n -WhiteSpace = {LineTerminator} | [ \t\f] -Comment = "/*" [^*] ~"*/" | "/*" "*"+ "/" - -Identifier = [-]?[_a-zA-Z][_a-zA-Z0-9-]* - -%state YYSTYLE, YYVALUE, YYSTRING1, YYSTRING2 - -%% - - { - "." { return DOT; } - "," { return COMMA; } - "*" { sawWhitespace = false; return STAR; } - ">" { return GT; } - "#" { return HASH; } - "{" { yybegin(YYSTYLE); return STYLE_BEGIN; } - - {Comment} { /* ignore */ } - {WhiteSpace}+ { sawWhitespace = true; } - {Identifier} { sawWhitespace = false; return IDENT; } -} - - { - "}" { yybegin(YYINITIAL); return STYLE_END; } - ":" { yybegin(YYVALUE); sb.setLength(0); return COLON; } - - {Comment} { /* ignore */ } - {WhiteSpace} { /* ignore */ } - {Identifier} { return IDENT; } -} - - { - "}" { yybegin(YYINITIAL); return STYLE_END; } - ";" { yybegin(YYSTYLE); return SEMICOLON; } - \' { yybegin(YYSTRING1); sb.append('\''); } - \" { yybegin(YYSTRING2); sb.append('\"'); } - [^;\}\'\"]+ { append(); } -} - - { - \' { yybegin(YYVALUE); sb.append('\''); } - [^\']+ { append(); } -} - - { - \" { yybegin(YYVALUE); sb.append('\"'); } - [^\"]+ { append(); } -} - -/* error fallback */ -.|\n { unexpected(); } -<> { return EOF; } diff --git a/twl/bin/de/matthiasmann/twl/theme/AnimatedImage$Element.class b/twl/bin/de/matthiasmann/twl/theme/AnimatedImage$Element.class index 77dee1bd1c7d4c4dc65d0eb77e42cc74b908b3b4..1dd5b01238cc3d779726a125c6b46c94b6db02aa 100644 GIT binary patch delta 272 zcmXYqJx;?w6okLsIJ+h>!TB@)kOl=o;V4%?6jW677_>r)jFAYUrJ+n?`6Q{3C^$gw zz!f+G;;lpRW=8Yo&0Cm-8Loamzkn&D77g|+2bRO~=A?X|B=$0QkFI!8L{~-Oo-guj zK6mBv)>w`djjE%5+7Sk8IaZ`qSC7l@Fj2&_>@`dCtawPT?`G~^D$f13deWwf_32wM zLd!o;G679NKT;)5C@K~9yXM&kYAHgqQ3t#^q$L=w1GMS*4z`GE?*4O6a^6qauJ3nh T++`C6^rTR;PZWgog$IOxKc6CE delta 262 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 literal 2737 zcmb_e?Qc_69DYvkZEs)h*b8*5Y{;Bbwhky%D6myzZcM5hD&TNKaF_M6UTM2|dk08F zjFN~UMx!y21&Et3i-tr%Hi)|U!Nd>#A%5~NFlv3yZDE>BQxcoB=bYd9y*|H}o}d5x zb`d}v$252ZHl@v2&TyQJWfXEoJ|A;VWn)gp%$c$7yu}+coyr+wX6t@)!ZaKWsz9t# znLSzR$vXo6(TtT%+h$%Mez^ZW#k&MTwrjm-d{Sx?DS;IQD?gSsdnawfvBs%)Wvfvr zn6^9=daZ(SENiC8I!xoq(X5rXoLvG+Tl=7Z+B2RuHPi^Kuh5ks>aa?~N`dN^jgv+! zYvjjbJy}}R5k|d0ecCKowwdm}>%#%Za3%|`#o+)18gv8^qI|!VH}_5Ej+ypB>7zhh z|M;kp9W-o9p3B54%8#BHFeb`pU$PuQqV4|iOSKOMpDi$kOSC``plH57t zw1BrQm1<{QDNb&J5mMVBEA3>Yn%z2fVJnM}#6HU|IH}wio1m?|Voxd1B{lWx=*ANQ zK6XOdv;{7WPyNtTI#p33J<+ih}_2DNgzX?RJXqr$n->XwS){`yK~ zj%MPja008SkzL4LjqE{pWfSq(AV&qyKAv<`k$(kGNv`r!TUR}g+9_!2EL7zitiC~_ zf(U@?uacnkNW>RbQO%!fMz%UHl~) zC3y}VO;gaLbsKp%iz=75DZ|5(*9nFQoFE`sPLUjg%@d??_U@LX4~2Nl0b5XI)S|)KG=Z*usz{8r$G2Qn{i*Xo!=qu1JWryGJ3Z zK)6WeC7u8UIY>(A;R8Y|vldm7jIepA)4P~Zm0hz~74fc(4>WF=$F@7zo;2HqX{lv$vLjwz@<h5rmMK&0O>vsm-?s^qF!y$D<-Y(8yWr<52k**HRBF=NmC9DVs zT$Yv@w$D7C;!Q(IO*(l#B*GzAe7blw68s6_NU(7Ot0C+S`yyJzKaZ!E>VJ?=2;f83 z>qkuZ$87yed~Qs!VK4Ka_X@V-6Lex4yD`J*{3(X<8II#~cET4-&n(`>mv|r7C^=2) z*Z2z8@jY(3Af71!bq~Y^47f!_@URch5O%qHmNZ#>3wVw@*-;DF&z&sR1@@ocE%*f- z#PjapSim3-ks6|v7q|xK-&<~x23fQj47qo*-x?6||IT;Qnm^<#LlN6*RZs9Y1nOyd dnD-tW#*19n(7u9d98vu^%5{Vq_*jAg|6dO}UjqOD diff --git a/twl/bin/de/matthiasmann/twl/theme/AnimatedImage.class b/twl/bin/de/matthiasmann/twl/theme/AnimatedImage.class index 613e9b5e6672950f26686ba629865f92fa1629c7..6d9ebf7358539d4c642b65603fc6630ff8597644 100644 GIT binary patch literal 3537 zcmbVP*>6-;82{Z_+v#l?TZ$A4La8#H7Df<@T1Cr9=|BN(Ygt6)cIGlOW#&$MJ7sg< zP5cXt&&C%YG+~NMV&aC18r;`J6CX5DiHRmY7-Rf>=iUw!ZV`RB=lh*=zVq$hIWs5! ze)&}ZYw<(`i!f4)h1e;>t_V7?ThJaEZjWFu?htgRpt}U^6J!V)6_gf~iJ%Rpp#6ff zf^stCBOJ!+Z~z4vin42kQIh5HFebvV!rH*E^ka04a-WD4;2zK`-wr9u}4F|E|qw8 zjpu=Kj-nI2R-U5FOsZ&P&30EEk4DP*qB&HWveRZ5hp2z3Ot!7&5e?m*;;Q-`iTRSH zPPEUQqs-7~$)*n)T0JFfRJ-KU$fEV}%kmrLXJ`l>%4f;9`oM`u9#Lqk2wJAGiAG45tbTyoN{VQI`e zS=BmkO53~u%wZp_W^53rgZuKTtY-E4YN=%% z>v32|J1*C81y<@ff}=WO=+x1LRbkw%;~w0rV>J>w?h|ySp!)@_5%hqdwStnkS;tja zr(=_#s|9t-(1(FA9@Oy=9@g;)9@X&}9_KCQb%}Y@mYCS9A$q3uc8rdhX?A~`mxS4& z(6GXb$x+j9OwOcg_1s*ug4RBBXLnxg0p8>q5*N!|z3$g}ov8XYy9=sUEE_GR+Kol1 zVN2}%_WzginL{oMs>RD5_ZF$6x#3J<;vI(6B<$sHlC(2Q( z;mKIa^J4O-^mf(?Z?x1!AMk#C=5V*CV+70jD`XLTSd3QGAu4^(A4O4VeMQ;$in8|= zW!o#trdO0LuP7T{QMS9HY<5N2@1!;S*5ev5Aw;LCFHE{KejHl7vjShds{(&~)r$yJ z5RA8Q48>c5(+F2kqd;v15e4ch&=sh!pdsEhjd>MBg>Zl*E^fj}^y59;g7-0k575I?{f>#a9yf4CV^wH0 zg(NsWg<{wMzd{nAfI>G?UQi)%K19Up%60uaatr^2k%`Vp9Vfa>8aS!vq(LT82?=SVgoL!oBPge6?1#|t5$5A#2ILdE z_bD&%&*;$S*orT(3twU%zCsRPV;tY8pe%EYuLflT8yOx6$^^u1A2Dxz*VzQA>;>br z={W)?DU)tXo@ZXiePJJe;1}CcqC#wc0U4vvlIA-XAW+~pnG@&)k)MMuVCTsc;|7noGal^C1HWXRdpnSA)2Of kby#V<4VRI&QQ8vTRZD5=GScOwZKNv#HT=7FfZ=KR2L*$3<^TWy literal 3537 zcmbVO>u(fQ6#w0ByW1`Uti^(bf>4UIv!x4Ii*>P5R!Wx^sBJBRpiFm%?UwCqJKa*i z_uIt3!1&qt#SfaW#YbY|3l%l^ekPjuK@*jjXyONBjK6zlx)8W+#1Av)+_~qRd(Q8i zd(NEw=att0Y{ruzlnJa)+p#gLP#DQtlVg_S#0t~7SYgB-vtyl3mOFMjIc8<-5XuE2 zqt-Dimb08pZ13=>ohpP76sXskaBU}TyS5wiwJQbI>g2qmx~<9Wd6xelB z$38(T!C~M1I;{mSILZk|D7yG$_zd&01S+Pp>B0#4B<+mY*~|z-2_JFuCv9ht&hhKk ztdlKt2t3=UHD7YD1c_E`J|KE8q;{a-W}Qr2Yr+piyO+r4@@_oYG{k%)@@YGa09F}T zj%x)1jZH&U5LjcN3Sr5uHLw6i80)Y;gzE%a=gsvT$Qx)x6Rl@#Lbj{%@*tYDo|f>M z!)#nS7&WjEizK(fz+yzgh+$I*8wF~0uBzw_-mB{c7SNx5JKdGbTl9;ucS$oh7`O`6 z(##eEH%hsMl-udrwxcAa%uNQCcrsfJ+$?1b%52X~*(H%%3|#GrbQ;(`Yo;?dK4O(* zZZ%LNWxCKE!cKvh&f|H?!9Wtbco%v0KCd_#L{d7~YhWpsNy~c-?3F@Q6zW!0EB9|R za1EA8Zooh-mI*BG%{um;sj*?(9khmXEa&Rpe9FoVS#DOY{g35rL6ZXdglSymWvaeB z-*l&tbqXpO0xPuH_v%z&r~WeO&YH)LEcd{qn_|(YU29rkv)=3+H5X6v!h{LeVFQQ2 zZqRzA>e7HfnMLq6X#Je)WOkh6d`>Jt2H6nUfug!HnM2*cD2@u$F#7`|`Kesm9~Y`A z3bbEQ7#CV;(*fzum;ncQ4jfu9-BGU>{%^xcS+o-dTo9?C7nQ(MjY%zNnkr~Wj%Apx z|oW=YDmIh_W14ea!g?M`xD z33Tf7;oSwj#ge0HgvVu(-Xq)jog7&y+3Pu_yusO(RoB|D0PlyPMGh3UucYJHZX#z* zPTIu1a&~44g!~yC!XtB3-W)mLePbpm*DD|l8Nx$`_PM7qyB zjg@A!h}C9u5%uPVm(WmzY1Wn((QMXM%%G)+R>iax(XNfuXVH!K(T5K( zgb#5$wYohQx!%VWomJ2X#Yu3=6t@s}5I(sp0V-GAejFg2@|z4kNRFlAhyFdKrTl~! z`YEiI(MM0AUIIXBN&rX+NVBA^46S8U!oWp47j0a$%S8tlaV|RKBEiKrE)sIlBOxK} zlaP@1Yd|?iXFp;XA9IF&LO?!613tqhe2xx$fgXIxz`nv^e2o!&gK>PTKw0fMUjk(U z2N|XWWdbtnGV&aley}l8xmRJ*r{~FdSqZ9--zkHJC*T_ta**2#EjOhl&ACQo59@|N+YZi_#@Nyld@%c@}&fTsjv}b-PNL{F$p?$ovs!$$nhADusx!(M$RN)9JV4kth(#3)>lmi};4aQV^9vNaIDvm^b8s9deB}-vCs7N( z3bEgep2o>bE&Qb{EcK*HfrN1{D~W>~_o)-_#{;DGw6=}|@j+gyF77^5UWtcEAEoP$ Jkv@USe*vg2b{PNw diff --git a/twl/bin/de/matthiasmann/twl/theme/ComposedImage.class b/twl/bin/de/matthiasmann/twl/theme/ComposedImage.class index d49355052d56c0ea7f2dc69abc5f008ec6b80938..9a9e8412f0886197579219f037c03e025cd8a6ac 100644 GIT binary patch delta 948 zcmZ`%O-~b16g_WdI@6D#E!6^r7WuYJtF<4Z7EnPkuqYBS5E3^7R45WOwb8^48;ol* zi93xUCT=AW2panX+?n_X-08x^r6CbLuT*wUGWXtj_ug~Qxo-~qKmCPIhwrNZGPvP| zAD28Zk(XxBOEVPE!Ke%nr zuNDn73V4=^mGOF7jrUIoxOp-w8=Xn@8OMo|^Igq3omxk`iIW&J5k#Yj5Kfpli!&yY z(zKy#bE?;6B8|*ugViQW!vet-`;nbmwbzzXH|JN13nbCK8El;%w;zt)FE19$0-QR7 z4vO_dq4WT4NRHt4LUIbd0U_aNoA@=y3Y9)!?Lk>N*KIbbXr>L-IONG{5Ek+{hhel} z9k@&6D3{QU9(Xv%LNCSW@X_~?iNRbKPBU^#28f`QUPk}8r;oX(>)d5F&JHO%jebTh z;sOm&4&gVD5aJh01){vfy2b&j7pyU*Mm4h!x6`S|qrB?>6?mMY9&b)j%FzX-=p}-S z2&(g1?;GP!QO~^~7s)0o(W@WfEvT1c$?6tbk}-J{%Ov*UQ!u@ua&O;0z?@4;m_0N& z0i$WQ5tCF=;6|pnHc*Ym4YeW5Q~6V5kN1*A4(B=5!UUgR<9`Ls?!Q4Ihm5Wv?}~_N0NBK>EJ*tyLaa&R+TR-TSiZ z8Au2$hC#T}=}A|*a3^-)iz5XCtYXOR(z<_n!91l}=`L`u!hn>YhgV5)69 z^6taou5|BNy8|hZX^*m*ugYth6-wUy-7rnL9^o?2Zpk;AgU^|$3y zi~0Nm%sRH6VJ}o|v&LEB@f%t(hHPP3)xS(4`;L_>Hx)bTyS(?!OX3Kh@Z8uO8 zSUI)RPP%6xrGzZ1Vcs|BRqxK{!)rJ0!Rf9mS%7=CqoJy_sv2^VzH}9WKrYl5AD#&~@}M33=Y%bg+8#Z0yYe$z_vwjC;Hvun zV}TS=L`caS1R2%ryihW#)%iBKOLmS^{MzA(DBn}X7f2UZo?*IJdWP&zT#Ddbjv2%_ zRybZGP?do-yvLOVKMXUtz%K%58lh*3C_;i9W&@h9k(IBvys`t`X+~BF9W6#c~*^3jQECyAGb?RjiAs3RKrl0;b9*T0O*v z0zYuwuTDZca$D;&_1p~f33YP>p1grke-mRP6ypXy3NXriEBE8nk^S*M0ybX@j*kVf z+k@cmX@s((rjj`N4e_n$>QiJ(bLxApx^jqS1ly0JVy<-b8nv@L>5G3L_Rbt;Gmv5nme|sT2#FYFgGL<(0j=hXkbJ2 z1vV9zyDlM(vICEzMT|S8L%n<%^<>LSCEF*Hb+ThFuIh4)H_kTUjrr^?Z0BAPWtP^% z56CG2I-X*7#+CB3vVr^zft|HvZ5phw`)k=vw9-MrJNtLJR&y>nv-|RAN$g@zEw``g F?LWdwCW`<7 delta 544 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 diff --git a/twl/bin/de/matthiasmann/twl/theme/HasBorder.class b/twl/bin/de/matthiasmann/twl/theme/HasBorder.class index aacceae9dd33878fe4d38514cb87d827b50869f4..f54da528ffb6065c05eda93b079a48f224dc57e7 100644 GIT binary patch delta 77 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 diff --git a/twl/bin/de/matthiasmann/twl/theme/ImageManager$AnimParams.class b/twl/bin/de/matthiasmann/twl/theme/ImageManager$AnimParams.class index 92003baed33b1ac9c5b8ef3b13b733f13c238813..95107a2444e07d2402b013970c67bac437bc9efe 100644 GIT binary patch delta 240 zcmZ3I;_86?;lBqxR!OuT3y$>o@rnH!K;l$cx0$iU;7 zmzP@PoRe5woI3Ge1P2cTHv-YOfoRAF|Y%93=AAlniEQMfoVpd4A5u>Mh0FWOCLysL|C=9Gcaxh tGME_nfFv78kZB(SKadSl3bH_eK^QDA0wzTngg{bUKuIPBaRxyK4gf)CA58!N delta 245 zcmXYqzYf7r6vn?>)z(%2wUotVFeu^$#AIUe0GBjEXrvXZ$!2N#6dg?xg9osAA#q%W zbAI1B=lgOJHBocV_x%B2fTj*5?y{k+LuDv##8J3g;ji53V&g3jk+tU>DHKhZ$VKN~ z^qN}?=EV2CV7wJ!=!H5QhIZU%?GpnZ`Rm;NGm1BKy`c)38 zp2xAl5IgR9!n^Fb3}(}HrP}X^eqZ((oP&Xt%_-?#NF|kXB5%DbB}>}x@36do!|GPD z*%d8$B$VjV$QF$>{7+WQn3%)7i3xBMS#S<#klMBxthTroPDi*c=kTm8&nZNmp+-O1 z|NlhE{IpSJC9>TAwP1m^iqNWKbfVx?fmpzJz(l|#O#PnHZXg}d!noEm0V%V-Q*6!2 zK+oZBN(yG{Z@6g_uXci3fw6&HMi4@BJtm2Ot<8Ldl?5?|gu)N7 zwe%bO1>#@7P{IW6GA`bl?*`mJ@j55rKF@ne`s~>VFLTIIz7f Pi-%}4hx|u4!U>9h;2SIe diff --git a/twl/bin/de/matthiasmann/twl/theme/ImageManager.class b/twl/bin/de/matthiasmann/twl/theme/ImageManager.class index 21e6fab298e28c2f5d08be1207440c4213ddffc3..29f5766c9acac146aa29c26a57866b0243786dc3 100644 GIT binary patch literal 25155 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 MGb8x^Oa58^4>Xtpxc~qF literal 23181 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 diff --git a/twl/bin/de/matthiasmann/twl/theme/ParameterListImpl.class b/twl/bin/de/matthiasmann/twl/theme/ParameterListImpl.class index 1e35ada822786d4e0d8632fe117300bacf2da5c5..be4f994b12ec23030e750dd4a5b5df1691a83c39 100644 GIT binary patch literal 5332 zcma)Ai+3DV9sVZSWRlG^+veFOrM8fkWV<0)5TqM|kcX@!X(elH3uq^s$!6Q#nXo(C zCK2T!Di2XXd58!;!AGqH%9e*BzUn#tP3rNx_f96Wn@O6}liitnfA{x&zxUn#`+pyP z4B!Z^MsX02==gdRb@)az`tYcDdQ8XTQNBDOR=yd;rfp`eV)9yYDSN?56_)bJfmscaQD>f%Vv{-Bnl2aStYX@n%X6h|(#e?l zS+kfE@7`jB;52e@3y9;w5teHeh2auLgHF1Fnucu~p3a;xND z-#?I2?-P#Da;QHQuBd3)^H$L+4hcDWygoO-tU=@9hI3}VOjS385~w}5W5zWzXQ#|1 z=_@9th9cfw>`>#*Z?xllz;E-+xVGE97nvgws2CVtTJ(Y#qIF%`P1dkf{f{!*VFm)q;0^2jik zN9eIP*`Aq5!{bM5AeF#Ke~N+wQpc`ffW2^bicDQs?R8n1UV&vrGE}f3lQ&matApWd z>8jN+oK8#DZ)rF(oDNc6>+e#%JIX-rj_@FDIN~;2qq|I#^FUuZJ>ihp`U%-G3{-H1 z<+i@8x`T#2VPs{M8+acda7L`35k+g@L+~Sy0&B{^NBEPDw+#Fl9~f{^Ht;e2qT>?- zf5qPn{2l)g%m37HI1ESKK&ng@V}BEG2ktAQi@E%~5)GIt%b?0iRV{L&GwmWJIo=O# zP9=C5QsZ$<*)^UOe^oYMMl%drpGBC+D(jF3 z&cqgHe2-GnyGJ$4lWHa!b7~lQy^Yr$4y&e|y*9g|3u4Ty?}{PBo;YT)hlw%c`MI6m zSWgbQNZacv$qLVvQg+ET?F=itvp*o`H82TDQBPMSW2$K#BDrx%!*yXX9JA)i*?S%5 ztQyjR*8`gb&KDu^4%PN~Zyd8qnPP6q%{exgtE}{g>I31|QQ!0ORzh%GB}sGq}w|5j$e9DSjD|3K}l(xeh{i zqg=mT>NJ#$r&Gi2_$*fh%c94!C*IqR#tQUL&^VR2iiX4`YHX^Y`4Xk-rN%Zy_?(1+ zVcL2p`P>y?+~YIu!5uhC{RZtzQnrq=WC-m)XwxymoxAWk58v_dy9It!;zy?v@1W&P zG-#I+wcw*vI>ujls;m_rO~PxFNxfDT%3E zD1I~o_Yre4fYs__wfb0fG<1T}8d=@zX|Hna4yk>|RN`M~5stl#){WL3C(;+`+WWB^ z=>Xzpu1y84+pXgZM81z)LqZ#q_^|-~&W-pdh<}p!r-=XHHt?rv@TZA<497kE6?#`B zj128AiN9-l@G6=HD`>m0S7d51uTB%(B={UdJ1@cG>bURjwa`)}-E=>}4YbhlGt}c} z7=xUaG`#-n)9wv<>xqV9kF;a`C8wqXwK3QUh?=U47rnsMVD$81E9BpUePjx6X1Etvr7s2Je$492~{@tgsRtwDRQGP zPCa`?M7k67%XP0J7Vi~L`zrVpn=+sF3zVRDUgW%ai7|Q^d+`eP@junXEK?QS=cD%d z`O*gm7I7OXo5T|B7CupPO6)z%J-?>+>8t}~e2J*M%zBK^^Sodjdmje`#drnRS8#(E zu&TAF4*og^(Hj9mF`rP(CltduNr=jDo==L9a+}y&CZyV1=AI(6!WgV_wGLnVKN2I> Ai2wiq literal 5286 zcma)9`&V3775)wkTo^9lO$xLz50WyIp=jEsHbbZ_k8~7BT1HHuYAiWbNAlgx4*s5K8Jt* z@3VgZIEK$OR0tfMGy8Ie<1A#2V$QJbK4;15a~8~;*>}b$7&+513!~Yhlgcex8X^Kc zTRWts+u%ahnscqI1rCH+mjxE6UX(yZfws}}#wDY#;*)9)@?hMnm=0tM1R*S!X~X-7^}-!%b7M9y4qsV-}J-*`@6Hyi6_` zn-qu)=I6{PD$$^$4!VXWftHXIqG&{mG-(y6?1@d*LZDrTh8lr}(X4HbmvS>^A#Kc9 z%&>VhKWkW%Mj75Ebg(hF_VgilczWlFGbTwrxDi6maWd+K$wE2i1Hvh?Fs% ziR@+aXND=6@j)Gju%9Xw)v`1g$;+@udQ#z$3#L717R*AQv`cEZe~bPpvx`#9n2tD( z3N#VJmtoSdN~A-yKz9sUMzNUmnkd*WvL?Mcx^Qn4efWZg&(n2>^u4ChxtSgm*hBCk zbKWRfUY>`0c9SLr%g!weh?GFpC71J|P~pqcW_#C9IL7RSF=Nr|ks1<6I)x)&X>( zHMb?nNgZE9CnvZf>AHtEce$^C9>nF&=t)h*rZhamO|B-a+PhEW^OkAYQB30-I=+c# z={Mu9dApy(Xo`z-?!NRE1(#X^L%|EfYzdQ!r8LZ!!K7@*YQG2LZ(u54Um&_@|GtlI|jR=&XKTfftAS)gOf_X1tpI13yq%VyXv<;rqV z3mi@T!zTi?5&Kt#*B*rs75Ky_e+%>#b))XG8HaQ^H zS$X#ud6ND>#}9Fh(~)~Z;8=e;sL9%Wr%X=|Els6j=`=MG_^~`AuSIbcKh^Oj-eT`% ziz&P481^jFYwOvJ9h-{c9bDJ&v$BSA5q11r$}0~Yg(fk6q2oQg&sJM1HQIZ*6=5R`@(vE$ebxD}isKO7&MAxA37rt2+aE z7aKB*vxV%Ulg-;)F6&-z*Gpa>OZjgLOow0g{CcSI92_RD_8SupDzG+gcpYFpxA_;tsRxZjhe#>_?@!M!y#eo}qu7HePt=1n=F(oJ3crkf( z!C|gQmKQyi9r3Q_Bdh57CytCI?xHGjivbg>c;FU|DpkN{MEIO!iv4K7NfLf6K)Ayv z+`&X1X81a$cN~w9&KDK9_z#*i9O0Wsal(VQJ@|IQCl!2hEb$Reet;@*E3pxKkTHiS z!!TNLDuCVYW4HU*br_^=0J~KqcR}9~5Bs!-T~F*&3j5TUf^_wZ(i!*)Ax8sH^*&U+ z4^_c5Q?wTNGVM3(I;w(?jwSwuI;rYyjBn2E41u1au1{0zbO3NGU7rr-wpSxbfeCtU zhObiaRRQ>~ZiYWg_;ZAxBK$MEfIqtdUhao;^mgHwDXnZ4S=MORDnN#GYYU=M;9__4c)1D=Q*;H)yd)78l8)Ko-s}SQLB~#SJVh z#lrDel=xOwq=gkJDHbKkqN;auD=d@33MpLX4u3vCp~Wvpi`V)L$8szw3Ny*s79rKaA;w5p;Sot$vr z9*=jiFFE;MI1%ZH+(mUq#1$o?#$LO!yu#nFa>8Fl8(t%$*A=UW+$g>5B%S1V zs+D8EYZb4{Q5l^3Zzz84u945L*5fBb9pyV$lOHKf-X*5&knT9+y&)^JH$h!~avcrv zF8TEKD&FN#=F=}FT2P%gdD^_i!TdH)s&{xsT@Tc(+eh#A)#=7>sYwOB_ED4HF>k4f zdrHZ7AMl;OulH$;8Ie~upYiV%<0bk_#ton150YYh6*pJ$kvv}A@#2o~_jnGyA0X7= l6Ke1YHQ*CPh{3R`$|VW8^2v912<^VR!`K3!@~;Z~?f=UU$3*}D diff --git a/twl/bin/de/matthiasmann/twl/theme/ParameterMapImpl.class b/twl/bin/de/matthiasmann/twl/theme/ParameterMapImpl.class index 9dd35dcdea6c36dba08daadc8c7557e8ce90a88a..8643c25945990fe47e9373eb49f9e00ef051f847 100644 GIT binary patch literal 8721 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 diff --git a/twl/bin/de/matthiasmann/twl/theme/ParserUtil.class b/twl/bin/de/matthiasmann/twl/theme/ParserUtil.class index 67be85ce45a50fbc26026d70d314ade8c963efe5..26e07e754cd7463c187741613dd88fd7af45d771 100644 GIT binary patch literal 7111 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 F{|2JjJiGt^ literal 6638 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 S;AE&t7e2wNB2!W<-2VX9KR~Mh diff --git a/twl/bin/de/matthiasmann/twl/theme/StateSelectImage.class b/twl/bin/de/matthiasmann/twl/theme/StateSelectImage.class index 5e43ae93113568e4ecc89e5a88d3592b2a540c74..3bb77dced1bb03620e6d1ee4b86ef99f722f4df2 100644 GIT binary patch literal 2432 zcmb7GTT>iG7(KnWfn|_o$s&e}n1lqDg%LHP?!>Z_Luk@EH$3)S#~Lzlm=>gdirv{^PTf`!*758bO>M&b{r|p)FO%5 zI6lCff%!Nh{>W7|{GnX5*qYOclkxu_c5TT+`oQWHxCuB-PA1Iuc9C614=YT%}U zPXuDlmc1cM0$sNka?;weJ#W*oOIvoKV0k-v%aw(kbfs&}t97H?P?C9>^#m>iuHW{Y ze92n&Y)>xhg=))s(ItpLTi}*SJ8Rx}H-kl%}1My`Gmj0db26V@|>G#s%(o z|1X+>aZXYTTvn#jvnmjoD(0j>!-7+g*S5FTrMsd?2_zSaSv$XKyN>!U4@RgQh0Fw^ zdYf`f9@pha&w6T=y}xKb&?xlCK#PGj15CSSLwYxzoVO_u?(UfvsO7+%bT&4re1Lhd^r} z2_KGx3vx&AqKq|T*?hS=X%fYaFBiAntekaJrKFA>1-+yHp8e1^@g^osw4;Moo4AdP zK#Q8N@^)dvnm9TJGp<{7O}vg46K~+OiB`0k=tagvpKAJX$;2IeDsbk%53h+)j0vQJ zRtA@+qSF0V((Xkxd)g|??Zf#&|{qHJ<>roeqEhN_wFK=&g{ZS_wAzQJK}_KhHVE7wr>-8fVDA*i~M~TmoScD zOko6PIh*$5;vBm8MFyI;&^^UGqA_guP=r+(}5Q3QsRe0rWhPg{2 znCTx83lAQkR^S_chcv60p1Z80oBq0Tbly5I$B3WA7!SnghgIfr2Qi&pBHi28p58+p zA9D}&N+F+1T<1552I^5&BT-Q!LG=bS#{~5o(yJ3xafoUNb->Dzo-vZr+G55=uWIPs z9$p)crD95i!zXA~?^JA%R8o;t^Z*SpRIN&CqO)k^ALdrf5&EhoH0Q%s2w4?ER)vsN zCdBYGc1R;xw08(m;&tF1_F~#RO8+PNc}cSjE|;k*v6NX+@~io_qKxm-;xUDz6_3X3qLvosO<3w5kc@dpdI u1{0Vp(^YnpS|ddfs=uP-nc}7prvCviFBRkf literal 2456 zcmb7GT~iZh6n@@(>_S*Iqy`beT2LB7G>Qr;6d@6X7Nivmf_A1$@(!#G3A0(m-uox& zO{bmCaMO!^fn#myeXsi$dey(s);?zw18ujRfz0l{?|ILA&U2pgG5q}J_qzZF@PUbt zLb|B4YqsaDI(BuNTC6^K4Jg>5?vZQ)~8$HW5*XKeQj&*^*se$<8i6 z20W>s~tpebq2g@3qr*wW?j;$qlD!FPC&tK`kjX zjTA~w+3`jd!l}M_g-E_q)G;J+%tV{Qkv+=tB^t5Nj^he#MO}4VT^xU9R`}jv05r1H z422UGjv&ta(@t66-dJ1K?p<-KkeIF%?9#mLIzBfkdpw?5tjQoSf zV5MN%{*S7@`540Jw(vRmPp^U(2SU@`Yg1-l2yNjLpV$_ zS(=j7K$pRVI&30l!ZL9|p(Ch(UKLu?iuM+qqPOakKGlLKE?aDkiwey=n$*t9swdJb z76wHcDZ2Ki!aynzO@q+!GAmdr#c!eEsVU(^;j+B0$ZOQXRa{rNbWlTLN+D#Ek+TQF zz*2q8XNu3qG2FzYiCd&Qh@HTcTbRPztabg!E^TlwD4ahS_P!+{l06dLtTAq^`t*`| zr$}f*_^Z5}O!Wl@x7UmXR};itr|jwCymqCR6~==Rr ztEADzb%@VNK2e0MF}cam>Xv?>dW4d(^fSEi4LY78(Z8G7{TwYX(6jgqXMXa9M@1O< z@QXchx_=wJ>C84#>9gBN?>Ronc!2Y?dI87TQ0H+8m-)NKHoA@>A5gmH6B(SPF1`EF z3$igkegQltGl1v>cpE}5X)IzwnK)-6Ytk&GY)4$IM>2>ISAdoN4!z-l=eVTsCHJ9y zbX@bjTQ$A9cO~upUp9vRZDTah##P2w%gqB)FO0_1{heLu9Srjs*}+@FPz_6rUm(ZK z=J&A?Z?F+(?BhPhIJNS=b{sdj3RBAAQTOxom~|D>>T8vk=3K;x<=?pWhgwzw>{Ic&NFPvCZP$dW2bi zC8tqhPJhM4{$$?SmxyR1ne5;CP`5ySCHxi;z$WiG_uQ zjqo{q26126+;i@E_uX?|-naARtiS&}y#OmzVrVi^`k6Lm#=(uzLncDj;B1UJa)#w2 z%sUhu7FwI1?G1I^ezjH;nn8-1I0Kpl$@Yhu$SdMy_t-zF2mY~J4_u8$$)T)SB&}H@ zt)LYz2_zfUt7_$}8q_LVhYkNIRM-o}y>?)&*@{BzrqERAnjh|-`se<3H9S>B!i$~o zvL4iMC9sxPSR_pXVM!CBt02KrD2AllmkC=i;XR_f(gT)Pe!#x#4h~CA$@`!v)gwwt zR+SkM#l>z4Bp78(&@kg8@r4;DORkKQ{`WbM-kjyUd+awd&-Cm+(wpk*;25bxL|BLD oZ7Oyvb2i3&pqs6N!!lX<5o4_X_K5GOF`noStE{M#LM^6#0ml?NDF6Tf delta 491 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 literal 2568 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

    This is only called once until all open popups are closed.

    + *

    When a menu is displayed as menu bar then no events are fired.

    + * + * @param menu the {@code Menu} which for which a popup will be opened + */ + public void menuOpening(Menu menu); + + /** + * Called after a popup has been opened. + *

    When a menu is displayed as menu bar then no events are fired.

    + * + * @param menu the {@code Menu} which has been opened + * @see #menuOpening(de.matthiasmann.twl.Menu) + */ + public void menuOpened(Menu menu); + + /** + * Called after a popup has been closed. + *

    When a menu is displayed as menu bar then no events are fired.

    + * + * @param menu the {@code Menu} which has been closed + */ + public void menuClosed(Menu menu); + } + private final ArrayList elements = new ArrayList(); + private final TypeMapping classAlignments = new TypeMapping(); private String popupTheme; + private Listener[] listeners; /** * Creates a new menu without name. @@ -69,6 +101,14 @@ public Menu() { public Menu(String name) { super(name); } + + public void addListener(Listener listener) { + listeners = CallbackSupport.addCallbackToList(listeners, listener, Listener.class); + } + + public void removeListener(Listener listener) { + listeners = CallbackSupport.removeCallbackFromList(listeners, listener); + } /** * Returns the theme which is used when this menu is displayed as popup/sub menu. @@ -89,7 +129,40 @@ public void setPopupTheme(String popupTheme) { } /** - * Returns a mutable iterator which iterators over all menu elements + * Sets the default alignment based on menu element subclasses. + *

    By default all alignments are {@link Alignment#FILL}

    + * + * @param clazz the class for which a default alignment should be set + * @param value the alignment + */ + public void setClassAlignment(Class clazz, Alignment value) { + if(value == null) { + throw new NullPointerException("value"); + } + if(value == Alignment.FILL) { + classAlignments.remove(clazz); + } else { + classAlignments.put(clazz, value); + } + } + + /** + * Retrieves the default alignment for the given menu element class. + *

    By default all alignments are {@link Alignment#FILL}

    + * + * @param clazz the menu element class + * @return the alignment + */ + public Alignment getClassAlignment(Class clazz) { + Alignment alignment = classAlignments.get(clazz); + if(alignment == null) { + return Alignment.FILL; + } + return alignment; + } + + /** + * Returns a mutable iterator which iterates over all menu elements * @return a iterator */ public Iterator iterator() { @@ -175,7 +248,7 @@ public Menu addSpacer() { * @see #createMenuBar() */ public void createMenuBar(Widget container) { - MenuManager mm = new MenuManager(container, true); + MenuManager mm = createMenuManager(container, true); for(Widget w : createWidgets(mm, 0)) { container.add(w); } @@ -191,12 +264,23 @@ public Widget createMenuBar() { DialogLayout l = new DialogLayout(); setWidgetTheme(l, "menubar"); - MenuManager mm = new MenuManager(l, true); + MenuManager mm = createMenuManager(l, true); Widget[] widgets = createWidgets(mm, 0); l.setHorizontalGroup(l.createSequentialGroup().addWidgetsWithGap("menuitem", widgets)); l.setVerticalGroup(l.createParallelGroup(widgets)); + for(int i=0,n=elements.size() ; iThe default implementation calls {@link Widget#handleEvent(de.matthiasmann.twl.Event) }

    + * + * @param evt the event + * @return true if the event has been handled, false otherwise. + */ protected boolean handleEventPopup(Event evt) { return super.handleEvent(evt); } @@ -285,11 +300,18 @@ protected final boolean isMouseInside(Event evt) { * Also called by the default implementation of {@code mouseClickedOutside} * when {@code closeOnClickedOutside} is active. * + *

    By default it calls {@link #closePopup() } except when a + * {@link #setRequestCloseCallback(java.lang.Runnable) } had been set.

    + * * @see #setCloseOnEscape(boolean) * @see #mouseClickedOutside(de.matthiasmann.twl.Event) */ protected void requestPopupClose() { - closePopup(); + if(requestCloseCallback != null) { + requestCloseCallback.run(); + } else { + closePopup(); + } } /** diff --git a/twl/src/de/matthiasmann/twl/Rect.java b/twl/src/de/matthiasmann/twl/Rect.java index b3ededb..b980423 100644 --- a/twl/src/de/matthiasmann/twl/Rect.java +++ b/twl/src/de/matthiasmann/twl/Rect.java @@ -44,10 +44,12 @@ public class Rect { public Rect() { } + @SuppressWarnings("OverridableMethodCallInConstructor") public Rect(int x, int y, int w, int h) { setXYWH(x, y, w, h); } + @SuppressWarnings("OverridableMethodCallInConstructor") public Rect(Rect src) { set(src.getX(), src.getY(), src.getRight(), src.getBottom()); } @@ -66,6 +68,13 @@ public void set(int x0, int y0, int x1, int y1) { this.y1 = y1; } + public void set(Rect src) { + this.x0 = src.x0; + this.y0 = src.y0; + this.x1 = src.x1; + this.y1 = src.y1; + } + /** * Computes the intersection of this rectangle with the other rectangle. * If they don't overlapp then this rect will be set to zero width and height. diff --git a/twl/src/de/matthiasmann/twl/ResizableFrame.java b/twl/src/de/matthiasmann/twl/ResizableFrame.java index fc63b56..2225145 100644 --- a/twl/src/de/matthiasmann/twl/ResizableFrame.java +++ b/twl/src/de/matthiasmann/twl/ResizableFrame.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -34,8 +34,15 @@ import de.matthiasmann.twl.utils.TintAnimator; /** - * A resizable frame + * A resizable frame. * + *

    All child widgets (which are not part of the frame itself) cover + * the complete inner area {@link #layoutChildFullInnerArea(de.matthiasmann.twl.Widget) }.

    + * + *

    The preferred way to use the ResizableFrame is to add a single + * widget which will manage the layout of all it's children. + * {@link DialogLayout} can be used for this to avoid creating a new class.

    + * * @author Matthias Mann */ public class ResizableFrame extends Widget { @@ -78,6 +85,7 @@ private enum DragMode { private final MouseCursor[] cursors; private ResizableAxis resizableAxis = ResizableAxis.BOTH; + private boolean draggable = true; private DragMode dragMode = DragMode.NONE; private int dragStartX; private int dragStartY; @@ -140,6 +148,23 @@ public void setResizableAxis(ResizableAxis resizableAxis) { } } + public boolean isDraggable() { + return draggable; + } + + /** + * Controls weather the ResizableFrame can be dragged via the title bar or + * not, default is true. + * + *

    When set to false the resizing should also be disabled to present a + * consistent behavior to the user.

    + * + * @param movable if dragging via the title bar is allowed - default is true. + */ + public void setDraggable(boolean movable) { + this.draggable = movable; + } + public boolean hasTitleBar() { return titleWidget != null && titleWidget.getParent() == this; } @@ -163,6 +188,23 @@ public void removeCloseCallback(Runnable cb) { } } + public int getFadeDurationActivate() { + return fadeDurationActivate; + } + + public int getFadeDurationDeactivate() { + return fadeDurationDeactivate; + } + + public int getFadeDurationHide() { + return fadeDurationHide; + } + + public int getFadeDurationShow() { + return fadeDurationShow; + } + + @Override public void setVisible(boolean visible) { if(visible) { @@ -494,7 +536,11 @@ private DragMode getDragMode(int mx, int my) { if(titleWidget != null && titleWidget.getParent() == this) { if(titleWidget.isInside(mx, my)) { - return DragMode.POSITION; + if(draggable) { + return DragMode.POSITION; + } else { + return DragMode.NONE; + } } top = my < titleWidget.getY(); } diff --git a/twl/src/de/matthiasmann/twl/Scrollbar.java b/twl/src/de/matthiasmann/twl/Scrollbar.java index c7b0387..eb13fc6 100644 --- a/twl/src/de/matthiasmann/twl/Scrollbar.java +++ b/twl/src/de/matthiasmann/twl/Scrollbar.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,6 +29,7 @@ */ package de.matthiasmann.twl; +import de.matthiasmann.twl.model.IntegerModel; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.utils.CallbackSupport; @@ -62,14 +63,15 @@ public enum Orientation { private final Button btnUpLeft; private final Button btnDownRight; private final DraggableButton thumb; - private final DraggableButton.DragListener dragListener; - private final Runnable timerCallback; + private final L dragTimerCB; private Timer timer; private int trackClicked; private int trackClickLimit; private Runnable[] callbacks; private Image trackImageUpLeft; private Image trackImageDownRight; + private IntegerModel model; + private Runnable modelCB; private int pageSize; private int stepSize; @@ -105,25 +107,7 @@ public void run() { btnDownRight.setTheme("downbutton"); } - dragListener = new DraggableButton.DragListener() { - private int startValue; - public void dragStarted() { - startValue = getValue(); - } - public void dragged(int deltaX, int deltaY) { - int mouseDelta; - if(getOrientation() == Orientation.HORIZONTAL) { - mouseDelta = deltaX; - } else { - mouseDelta = deltaY; - } - int delta = (getMaxValue() - getMinValue()) * mouseDelta / calcThumbArea(); - int newValue = range(startValue + delta); - setValue(newValue); - } - public void dragStopped() { - } - }; + dragTimerCB = new L(); btnUpLeft.setCanAcceptKeyboardFocus(false); btnUpLeft.getModel().addStateCallback(cbUpdateTimer); @@ -131,13 +115,7 @@ public void dragStopped() { btnDownRight.getModel().addStateCallback(cbUpdateTimer); thumb.setCanAcceptKeyboardFocus(false); thumb.setTheme("thumb"); - thumb.setListener(dragListener); - - timerCallback = new Runnable() { - public void run() { - onTimer(REPEAT_DELAY); - } - }; + thumb.setListener(dragTimerCB); add(btnUpLeft); add(btnDownRight); @@ -167,6 +145,30 @@ public Orientation getOrientation() { return orientation; } + public IntegerModel getModel() { + return model; + } + + public void setModel(IntegerModel model) { + if(this.model != model) { + if(this.model != null) { + this.model.removeCallback(modelCB); + } + this.model = model; + if(model != null) { + if(modelCB == null) { + modelCB = new Runnable() { + public void run() { + syncModel(); + } + }; + } + model.addCallback(modelCB); + syncModel(); + } + } + } + public int getValue() { return value; } @@ -182,6 +184,9 @@ public void setValue(int value, boolean fireCallbacks) { this.value = value; setThumbPos(); firePropertyChange("value", oldValue, value); + if(model != null) { + model.setValue(value); + } if(fireCallbacks) { doCallback(); } @@ -288,15 +293,15 @@ public void setScaleThumb(boolean scaleThumb) { public void externalDragStart() { thumb.getAnimationState().setAnimationState(Button.STATE_PRESSED, true); - dragListener.dragStarted(); + dragTimerCB.dragStarted(); } public void externalDragged(int deltaX, int deltaY) { - dragListener.dragged(deltaX, deltaY); + dragTimerCB.dragged(deltaX, deltaY); } public void externalDragStopped() { - dragListener.dragStopped(); + // dragTimerCB.dragStopped(); (it's empty anyway) thumb.getAnimationState().setAnimationState(Button.STATE_PRESSED, false); } @@ -366,13 +371,20 @@ protected void paintWidget(GUI gui) { protected void afterAddToGUI(GUI gui) { super.afterAddToGUI(gui); timer = gui.createTimer(); - timer.setCallback(timerCallback); + timer.setCallback(dragTimerCB); timer.setContinuous(true); + if(model != null) { + // modelCB is created when the model was set + model.addCallback(modelCB); + } } @Override protected void beforeRemoveFromGUI(GUI gui) { super.beforeRemoveFromGUI(gui); + if(model != null) { + model.removeCallback(modelCB); + } if(timer != null) { timer.stop(); } @@ -506,13 +518,22 @@ void updateTimer() { btnDownRight.getModel().isArmed()) { if(!timer.isRunning()) { onTimer(INITIAL_DELAY); - timer.start(); + // onTimer() can call setValue() which calls user code + // that user code could potentially remove the Scrollbar from GUI + if(timer != null) { + timer.start(); + } } } else { timer.stop(); } } } + + void syncModel() { + setMinMaxValue(model.getMinValue(), model.getMaxValue()); + setValue(model.getValue()); + } @Override public int getMinWidth() { @@ -596,4 +617,27 @@ private void setThumbPos() { thumb.setPosition(getX(), ypos); } } + + final class L implements DraggableButton.DragListener, Runnable { + private int startValue; + public void dragStarted() { + startValue = getValue(); + } + public void dragged(int deltaX, int deltaY) { + int mouseDelta; + if(getOrientation() == Orientation.HORIZONTAL) { + mouseDelta = deltaX; + } else { + mouseDelta = deltaY; + } + int delta = (getMaxValue() - getMinValue()) * mouseDelta / calcThumbArea(); + int newValue = range(startValue + delta); + setValue(newValue); + } + public void dragStopped() { + } + public void run() { + onTimer(REPEAT_DELAY); + } + }; } diff --git a/twl/src/de/matthiasmann/twl/SimpleDialog.java b/twl/src/de/matthiasmann/twl/SimpleDialog.java index a688612..f5b9ba1 100644 --- a/twl/src/de/matthiasmann/twl/SimpleDialog.java +++ b/twl/src/de/matthiasmann/twl/SimpleDialog.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -44,6 +44,7 @@ public class SimpleDialog { private Object msg; private Runnable cbOk; private Runnable cbCancel; + private boolean focusCancelButton; public SimpleDialog() { } @@ -114,6 +115,20 @@ public void setCancelCallback(Runnable cbCancel) { this.cbCancel = cbCancel; } + public boolean isFocusCancelButton() { + return focusCancelButton; + } + + /** + * Should the cancel button be focused when the dialog is created? + * Default is false (eg focus the message or the OK button). + * + * @param focusCancelButton true to focus the cancel button + */ + public void setFocusCancelButton(boolean focusCancelButton) { + this.focusCancelButton = focusCancelButton; + } + /** * Shows the dialog centered * @@ -155,9 +170,12 @@ public PopupWindow showDialog(Widget owner) { btnOk.setTheme("btnOk"); btnOk.addCallback(new ButtonCB(popupWindow, cbOk)); + ButtonCB btnCancelCallback = new ButtonCB(popupWindow, cbCancel); + popupWindow.setRequestCloseCallback(btnCancelCallback); + Button btnCancel = new Button("Cancel"); btnCancel.setTheme("btnCancel"); - btnCancel.addCallback(new ButtonCB(popupWindow, cbCancel)); + btnCancel.addCallback(btnCancelCallback); DialogLayout layout = new DialogLayout(); layout.setTheme("content"); @@ -198,7 +216,9 @@ public PopupWindow showDialog(Widget owner) { popupWindow.add(layout); popupWindow.openPopupCentered(); - if(msgWidget != null && msgWidget.canAcceptKeyboardFocus()) { + if(focusCancelButton) { + btnCancel.requestKeyboardFocus(); + } else if(msgWidget != null && msgWidget.canAcceptKeyboardFocus()) { msgWidget.requestKeyboardFocus(); } diff --git a/twl/src/de/matthiasmann/twl/SplitPane.java b/twl/src/de/matthiasmann/twl/SplitPane.java index 5b8f405..daaac3a 100644 --- a/twl/src/de/matthiasmann/twl/SplitPane.java +++ b/twl/src/de/matthiasmann/twl/SplitPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -40,11 +40,23 @@ public enum Direction { int get(int x, int y) { return x; } + int getMinSize(Widget w) { + return w.getMinWidth(); + } + int getPrefSize(Widget w) { + return w.getPreferredWidth(); + } }, VERTICAL("splitterVertical") { int get(int x, int y) { return y; } + int getMinSize(Widget w) { + return w.getMinHeight(); + } + int getPrefSize(Widget w) { + return w.getPreferredHeight(); + } }; final String splitterTheme; @@ -52,21 +64,44 @@ int get(int x, int y) { this.splitterTheme = splitterTheme; } abstract int get(int x, int y); + abstract int getMinSize(Widget w); + abstract int getPrefSize(Widget w); } + /** + * Magic constant for {@link #setSplitPosition(int) } to keep both + * widgets on equal size. + */ public static final int CENTER = -1; + /** + * Magic constant for {@link #setSplitPosition(int) } to keep the first + * (or second widget when {@link #getReverseSplitPosition() } is active) + * in it's minimum size. + */ + public static final int MIN_SIZE = -2; + + /** + * Magic constant for {@link #setSplitPosition(int) } to keep the first + * (or second widget when {@link #getReverseSplitPosition() } is active) + * in it's preferred size. + */ + public static final int PREFERRED_SIZE = -3; + private final DraggableButton splitter; private Direction direction; private int splitPosition = CENTER; private boolean reverseSplitPosition; + private boolean respectMinSizes; + @SuppressWarnings("OverridableMethodCallInConstructor") public SplitPane() { splitter = new DraggableButton(); + splitter.setCanAcceptKeyboardFocus(false); splitter.setListener(new DraggableButton.DragListener() { int initialPos; public void dragStarted() { - initialPos = getSplitPosNoCenter(); + initialPos = getEffectiveSplitPosition(); } public void dragged(int deltaX, int deltaY) { SplitPane.this.dragged(initialPos, deltaX, deltaY); @@ -101,8 +136,11 @@ public int getSplitPosition() { } public void setSplitPosition(int pos) { + if(pos < PREFERRED_SIZE) { + throw new IllegalArgumentException("pos"); + } splitPosition = pos; - invalidateLayout(); + invalidateLayoutLocally(); } public boolean getReverseSplitPosition() { @@ -110,7 +148,21 @@ public boolean getReverseSplitPosition() { } public void setReverseSplitPosition(boolean reverseSplitPosition) { - this.reverseSplitPosition = reverseSplitPosition; + if(this.reverseSplitPosition != reverseSplitPosition) { + this.reverseSplitPosition = reverseSplitPosition; + invalidateLayoutLocally(); + } + } + + public boolean isRespectMinSizes() { + return respectMinSizes; + } + + public void setRespectMinSizes(boolean respectMinSizes) { + if(this.respectMinSizes != respectMinSizes) { + this.respectMinSizes = respectMinSizes; + invalidateLayoutLocally(); + } } void dragged(int initialPos, int deltaX, int deltaY) { @@ -199,7 +251,7 @@ protected void layout() { int innerX = getInnerX(); int innerY = getInnerY(); - int splitPos = getSplitPosNoCenter(); + int splitPos = getEffectiveSplitPosition(); if(reverseSplitPosition) { splitPos = getMaxSplitPosition() - splitPos; @@ -236,12 +288,73 @@ protected void layout() { } } - int getSplitPosNoCenter() { - if(splitPosition == CENTER) { - return getMaxSplitPosition()/2; - } else { - return clamp(splitPosition); + int getEffectiveSplitPosition() { + final int maxSplitPosition = getMaxSplitPosition(); + + int pos = splitPosition; + switch(pos) { + case CENTER: + pos = maxSplitPosition/2; + break; + case MIN_SIZE: { + Widget w = getPrimaryWidget(); + if(w != null) { + pos = direction.getMinSize(w); + } else { + pos = maxSplitPosition/2; + } + break; + } + case PREFERRED_SIZE: { + Widget w = getPrimaryWidget(); + if(w != null) { + pos = direction.getPrefSize(w); + } else { + pos = maxSplitPosition/2; + } + break; + } + } + + int minValue = 0; + int maxValue = maxSplitPosition; + + if(respectMinSizes) { + Widget a = null; + Widget b = null; + for(int i=0 ; i idx) { + return getChild(idx); } + return null; } private int clamp(int pos) { diff --git a/twl/src/de/matthiasmann/twl/TabbedPane.java b/twl/src/de/matthiasmann/twl/TabbedPane.java index b3d9b65..7aaae1a 100644 --- a/twl/src/de/matthiasmann/twl/TabbedPane.java +++ b/twl/src/de/matthiasmann/twl/TabbedPane.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -176,6 +176,8 @@ public void setActiveTab(Tab tab) { } if(scrollTabs) { + validateLayout(); + int pos, end, size; if(tabPosition.horz) { pos = tab.button.getX() - tabBox.getX(); @@ -195,6 +197,10 @@ public void setActiveTab(Tab tab) { setScrollPos(end - size); } } + + if(tab.pane != null) { + tab.pane.requestKeyboardFocus(); + } } } @@ -313,29 +319,29 @@ protected void layout() { switch(tabPosition) { case TOP: tabBoxClip.setPosition(getInnerX(), getInnerY()); - tabBoxClip.setSize(getInnerWidth() - scrollCtrlsWidth, tabBoxHeight); - container.setSize(getInnerWidth(), getInnerHeight() - tabBoxHeight); + tabBoxClip.setSize(Math.max(0, getInnerWidth() - scrollCtrlsWidth), tabBoxHeight); + container.setSize(getInnerWidth(), Math.max(0, getInnerHeight() - tabBoxHeight)); container.setPosition(getInnerX(), tabBoxClip.getBottom()); break; case LEFT: tabBoxClip.setPosition(getInnerX(), getInnerY()); - tabBoxClip.setSize(tabBoxWidth, getInnerHeight() - scrollCtrlsHeight); - container.setSize(getInnerWidth() - tabBoxWidth, getInnerHeight()); + tabBoxClip.setSize(tabBoxWidth, Math.max(0, getInnerHeight() - scrollCtrlsHeight)); + container.setSize(Math.max(0, getInnerWidth() - tabBoxWidth), getInnerHeight()); container.setPosition(tabBoxClip.getRight(), getInnerY()); break; case RIGHT: tabBoxClip.setPosition(getInnerX() - tabBoxWidth, getInnerY()); - tabBoxClip.setSize(tabBoxWidth, getInnerHeight() - scrollCtrlsHeight); - container.setSize(getInnerWidth() - tabBoxWidth, getInnerHeight()); + tabBoxClip.setSize(tabBoxWidth, Math.max(0, getInnerHeight() - scrollCtrlsHeight)); + container.setSize(Math.max(0, getInnerWidth() - tabBoxWidth), getInnerHeight()); container.setPosition(getInnerX(), getInnerY()); break; case BOTTOM: tabBoxClip.setPosition(getInnerX(), getInnerY() - tabBoxHeight); - tabBoxClip.setSize(getInnerWidth() - scrollCtrlsWidth, tabBoxHeight); - container.setSize(getInnerWidth(), getInnerHeight() - tabBoxHeight); + tabBoxClip.setSize(Math.max(0, getInnerWidth() - scrollCtrlsWidth), tabBoxHeight); + container.setSize(getInnerWidth(), Math.max(0, getInnerHeight() - tabBoxHeight)); container.setPosition(getInnerX(), getInnerY()); break; } @@ -435,12 +441,12 @@ private void validateTab(Tab tab) { } public class Tab extends HasCallback implements BooleanModel { - final ToggleButton button; + final TabButton button; Widget pane; + Runnable closeCallback; Tab() { - button = new ToggleButton(this); - button.setTheme("tabbutton"); + button = new TabButton(this); } public boolean getValue() { @@ -475,11 +481,33 @@ public Tab setTitle(String title) { return this; } + /** + * Sets the user theme for the tab button. If no user theme is set + * ({@code null}) then it will use "tabbutton" or + * "tabbuttonWithCloseButton" if a close callback is registered. + * + * @param theme the user theme name - can be null. + * @return {@code this} + */ public Tab setTheme(String theme) { - button.setTheme(theme); + button.setUserTheme(theme); return this; } + public Runnable getCloseCallback() { + return closeCallback; + } + + public void setCloseCallback(Runnable closeCallback) { + if(this.closeCallback != null) { + button.removeCloseButton(); + } + this.closeCallback = closeCallback; + if(closeCallback != null) { + button.setCloseButton(closeCallback); + } + } + @Override protected void doCallback() { if(pane != null) { @@ -489,39 +517,87 @@ protected void doCallback() { } } - private static class Container extends Widget { - @Override - public int getMinWidth() { - return Math.max(super.getMinWidth(), getBorderHorizontal() + - BoxLayout.computeMinWidthVertical(this)); + private static class TabButton extends ToggleButton { + Button closeButton; + Alignment closeButtonAlignment; + int closeButtonOffsetX; + int closeButtonOffsetY; + String userTheme; + + TabButton(BooleanModel model) { + super(model); + closeButtonAlignment = Alignment.RIGHT; } - @Override - public int getMinHeight() { - return Math.max(super.getMinHeight(), getBorderVertical() + - BoxLayout.computeMinHeightHorizontal(this)); + public void setUserTheme(String userTheme) { + this.userTheme = userTheme; + doSetTheme(); + } + + private void doSetTheme() { + if(userTheme != null) { + setTheme(userTheme); + } else if(closeButton != null) { + setTheme("tabbuttonWithCloseButton"); + } else { + setTheme("tabbutton"); + } + reapplyTheme(); } @Override - public int getPreferredInnerWidth() { - return BoxLayout.computePreferredWidthVertical(this); + protected void applyTheme(ThemeInfo themeInfo) { + super.applyTheme(themeInfo); + if(closeButton != null) { + closeButtonAlignment = themeInfo.getParameter("closeButtonAlignment", Alignment.RIGHT); + closeButtonOffsetX = themeInfo.getParameter("closeButtonOffsetX", 0); + closeButtonOffsetY = themeInfo.getParameter("closeButtonOffsetY", 0); + } else { + closeButtonAlignment = Alignment.RIGHT; + closeButtonOffsetX = 0; + closeButtonOffsetY = 0; + } + } + + void setCloseButton(Runnable callback) { + closeButton = new Button(); + closeButton.setTheme("closeButton"); + doSetTheme(); + add(closeButton); + closeButton.addCallback(callback); + } + + void removeCloseButton() { + removeChild(closeButton); + closeButton = null; + doSetTheme(); } @Override public int getPreferredInnerHeight() { - return BoxLayout.computePreferredHeightHorizontal(this); + return computeTextHeight(); } + @Override + public int getPreferredInnerWidth() { + return computeTextWidth(); + } + @Override protected void layout() { - layoutChildrenFullInnerArea(); + if(closeButton != null) { + closeButton.adjustSize(); + closeButton.setPosition( + getX() + closeButtonOffsetX + closeButtonAlignment.computePositionX(getWidth(), closeButton.getWidth()), + getY() + closeButtonOffsetY + closeButtonAlignment.computePositionY(getHeight(), closeButton.getHeight())); + } } } private class CB implements Runnable { final int dir; - public CB(int dir) { + CB(int dir) { this.dir = dir; } diff --git a/twl/src/de/matthiasmann/twl/TableBase.java b/twl/src/de/matthiasmann/twl/TableBase.java index 5a68acf..1ad5474 100644 --- a/twl/src/de/matthiasmann/twl/TableBase.java +++ b/twl/src/de/matthiasmann/twl/TableBase.java @@ -36,6 +36,7 @@ import de.matthiasmann.twl.renderer.AnimationState.StateKey; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.renderer.MouseCursor; +import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.utils.CallbackSupport; import de.matthiasmann.twl.utils.SizeSequence; import de.matthiasmann.twl.utils.SparseGrid; @@ -188,6 +189,7 @@ public interface DragListener { public static final StateKey STATE_ROW_SELECTED = StateKey.get("rowSelected"); public static final StateKey STATE_ROW_HOVER = StateKey.get("rowHover"); public static final StateKey STATE_ROW_DROPTARGET = StateKey.get("rowDropTarget"); + public static final StateKey STATE_ROW_ODD = StateKey.get("rowOdd"); public static final StateKey STATE_LEAD_ROW = StateKey.get("leadRow"); public static final StateKey STATE_SELECTED = StateKey.get("selected"); public static final StateKey STATE_SORT_ASCENDING = StateKey.get("sortAscending"); @@ -220,6 +222,7 @@ public interface DragListener { protected MouseCursor columnResizeCursor; protected MouseCursor normalCursor; protected MouseCursor dragNotPossibleCursor; + protected boolean ensureColumnHeaderMinWidth; protected int numRows; protected int numColumns; @@ -621,6 +624,7 @@ protected void applyThemeTableBase(ThemeInfo themeInfo) { this.defaultColumnWidth = themeInfo.getParameter("columnHeaderWidth", 256); this.columnHeaderHeight = themeInfo.getParameter("columnHeaderHeight", 10); this.columnDividerDragableDistance = themeInfo.getParameter("columnDividerDragableDistance", 3); + this.ensureColumnHeaderMinWidth = themeInfo.getParameter("ensureColumnHeaderMinWidth", false); for(CellRenderer cellRenderer : cellRenderers.getUniqueValues()) { applyCellRendererTheme(cellRenderer); @@ -784,8 +788,9 @@ protected void paintWidget(GUI gui) { final int innerHeight = getInnerHeight() - columnHeaderHeight; final int offsetX = getOffsetX(); final int offsetY = getOffsetY(); + final Renderer renderer = gui.getRenderer(); - gui.clipEnter(innerX, innerY, innerWidth, innerHeight); + renderer.clipEnter(innerX, innerY, innerWidth, innerHeight); try { final AnimationState animState = getAnimationState(); final int leadRow; @@ -866,7 +871,7 @@ protected void paintWidget(GUI gui) { imageRowDropMarker.draw(animState, getOffsetX(), getOffsetY() + y, columnModel.getEndPosition(), 1); } } finally { - gui.clipLeave(); + renderer.clipLeave(); } } @@ -887,6 +892,7 @@ private void paintRowImage(Image img, int leadRow) { lastMouseY >= curY && lastMouseY < (curY + curRowHeight)); animState.setAnimationState(STATE_LEAD_ROW, row == leadRow); animState.setAnimationState(STATE_ROW_DROPTARGET, !dropMarkerBeforeRow && row == dropMarkerRow); + animState.setAnimationState(STATE_ROW_ODD, (row & 1) == 1); img.draw(animState, x, curY, width, curRowHeight); rowStartPos = rowEndPos; @@ -1231,7 +1237,7 @@ Widget routeMouseEvent(Event evt) { if(lastMouseRow != -1 || lastMouseColumn != -1) { lastMouseRow = -1; lastMouseColumn = -1; - updateTooltip(); + resetTooltip(); } } else { final int row = getRowUnderMouse(evt.getMouseY()); @@ -1240,7 +1246,7 @@ Widget routeMouseEvent(Event evt) { if(lastMouseRow != row || lastMouseColumn != column) { lastMouseRow = row; lastMouseColumn = column; - updateTooltip(); + resetTooltip(); } } } @@ -1613,6 +1619,9 @@ protected boolean update(int index) { width = clampColumnWidth(columnHeaders[index].springWidth); } else { width = computePreferredColumnWidth(index); + if(ensureColumnHeaderMinWidth) { + width = Math.max(width, columnHeaders[index].getMinWidth()); + } } return setSize(index, width); } @@ -1717,6 +1726,17 @@ protected boolean handleEvent(Event evt) { return super.handleEvent(evt); } + @Override + protected void paintWidget(GUI gui) { + Renderer renderer = gui.getRenderer(); + renderer.clipEnter(getX(), getY(), getWidth(), getHeight()); + try { + paintLabelText(getAnimationState()); + } finally { + renderer.clipLeave(); + } + } + public void run() { columnHeaderClicked(column); } diff --git a/twl/src/de/matthiasmann/twl/TableRowSelectionManager.java b/twl/src/de/matthiasmann/twl/TableRowSelectionManager.java index 57ebe89..292b516 100644 --- a/twl/src/de/matthiasmann/twl/TableRowSelectionManager.java +++ b/twl/src/de/matthiasmann/twl/TableRowSelectionManager.java @@ -66,6 +66,10 @@ public TableRowSelectionManager() { this(new DefaultTableSelectionModel()); } + public TableSelectionModel getSelectionModel() { + return selectionModel; + } + public void setAssociatedTable(TableBase base) { if(tableBase != base) { if(tableBase != null && base != null) { diff --git a/twl/src/de/matthiasmann/twl/TableSelectionManager.java b/twl/src/de/matthiasmann/twl/TableSelectionManager.java index 1a7b068..fb5148f 100644 --- a/twl/src/de/matthiasmann/twl/TableSelectionManager.java +++ b/twl/src/de/matthiasmann/twl/TableSelectionManager.java @@ -29,6 +29,8 @@ */ package de.matthiasmann.twl; +import de.matthiasmann.twl.model.TableSelectionModel; + /** * * @author Matthias Mann @@ -40,6 +42,8 @@ public enum SelectionGranularity { CELLS } + public TableSelectionModel getSelectionModel(); + public void setAssociatedTable(TableBase base); public SelectionGranularity getSelectionGranularity(); diff --git a/twl/src/de/matthiasmann/twl/TextArea.java b/twl/src/de/matthiasmann/twl/TextArea.java index 14a1a84..6bc978d 100644 --- a/twl/src/de/matthiasmann/twl/TextArea.java +++ b/twl/src/de/matthiasmann/twl/TextArea.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -37,6 +37,7 @@ import de.matthiasmann.twl.renderer.FontCache; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.renderer.MouseCursor; +import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.textarea.OrderedListType; import de.matthiasmann.twl.textarea.Style; import de.matthiasmann.twl.textarea.StyleAttribute; @@ -48,6 +49,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.HashMap; +import java.util.Map; import java.util.logging.Level; import java.util.logging.Logger; @@ -79,6 +81,8 @@ public interface Callback { public static final StateKey STATE_HOVER = StateKey.get("hover"); + static final char[] EMPTY_CHAR_ARRAY = new char[0]; + private final HashMap widgets; private final HashMap widgetResolvers; private final HashMap userImages; @@ -95,10 +99,12 @@ public interface Callback { private MouseCursor mouseCursorLink; private DraggableButton.DragListener dragListener; - final LClip layoutRoot; - final ArrayList allBGImages; + private final LClip layoutRoot; + private final ArrayList allBGImages; + private final AnimationState elementsAnimationState; private boolean inLayoutCode; private boolean forceRelayout; + private Dimension preferredInnerSize; private int lastMouseX; private int lastMouseY; @@ -106,7 +112,8 @@ public interface Callback { private boolean dragging; private int dragStartX; private int dragStartY; - LElement curLElementUnderMouse; + private LElement curLElementUnderMouse; + private long hoverUpdateTime; public TextArea() { this.widgets = new HashMap(); @@ -114,8 +121,16 @@ public TextArea() { this.userImages = new HashMap(); this.imageResolvers = new ArrayList(); this.layoutRoot = new LClip(null); - this.layoutRoot.lineInfo = new char[0]; this.allBGImages = new ArrayList(); + this.elementsAnimationState = new AnimationState(getAnimationState()) { + @Override + public int getAnimationTime(StateKey stateKey) { + if(stateKey == STATE_HOVER) { + return getHoverAnimationTime(); + } + return super.getAnimationTime(stateKey); + } + }; this.modelCB = new Runnable() { public void run() { @@ -292,6 +307,12 @@ protected void applyThemeTextArea(ThemeInfo themeInfo) { forceRelayout(); } + @Override + protected void afterAddToGUI(GUI gui) { + super.afterAddToGUI(gui); + hoverUpdateTime = getTime(); + } + @Override public void insertChild(Widget child, int index) { throw new UnsupportedOperationException("use registerWidget"); @@ -307,13 +328,52 @@ public Widget removeChild(int index) { throw new UnsupportedOperationException("use registerWidget"); } + private void computePreferredInnerSize() { + int prefWidth = -1; + int prefHeight = -1; + + if(getMaxWidth() > 0) { + final int borderHorizontal = getBorderHorizontal(); + final int maxWidth = Math.max(0, getMaxWidth() - borderHorizontal); + final int minWidth = Math.max(0, getMinWidth() - borderHorizontal); + + if(minWidth < maxWidth) { + //System.out.println("Doing preferred size computation"); + + LClip tmpRoot = new LClip(null); + tmpRoot.width = maxWidth; + Box box = new Box(tmpRoot, 0, 0, 0); + layoutElements(box, model); + box.finish(); + + prefWidth = Math.max(0, maxWidth - box.minRemainingWidth); + prefHeight = box.curY; + } + } + preferredInnerSize = new Dimension(prefWidth, prefHeight); + } + @Override public int getPreferredInnerWidth() { + if(preferredInnerSize == null) { + computePreferredInnerSize(); + } + if(preferredInnerSize.getX() >= 0) { + return preferredInnerSize.getX(); + } return getInnerWidth(); } @Override public int getPreferredInnerHeight() { + if(getInnerWidth() == 0) { + if(preferredInnerSize == null) { + computePreferredInnerSize(); + } + if(preferredInnerSize.getY() >= 0) { + return preferredInnerSize.getY(); + } + } validateLayout(); return layoutRoot.height; } @@ -321,15 +381,13 @@ public int getPreferredInnerHeight() { @Override public int getPreferredWidth() { int maxWidth = getMaxWidth(); - if(maxWidth > 0) { - return maxWidth; - } return computeSize(getMinWidth(), super.getPreferredWidth(), maxWidth); } @Override public void setMaxSize(int width, int height) { if(width != getMaxWidth()) { + preferredInnerSize = null; invalidateLayout(); } super.setMaxSize(width, height); @@ -338,6 +396,7 @@ public void setMaxSize(int width, int height) { @Override public void setMinSize(int width, int height) { if(width != getMinWidth()) { + preferredInnerSize = null; invalidateLayout(); } super.setMinSize(width, height); @@ -345,10 +404,9 @@ public void setMinSize(int width, int height) { @Override protected void layout() { - int targetWidth = computeSize(getMinWidth(), getWidth(), getMaxWidth()); - targetWidth -= getBorderHorizontal(); + int targetWidth = getInnerWidth(); - //System.out.println(this+" minWidth="+getMinWidth()+" width="+getWidth()+" maxWidth="+getMaxWidth()); + //System.out.println(this+" minWidth="+getMinWidth()+" width="+getWidth()+" maxWidth="+getMaxWidth()+" targetWidth="+targetWidth+" preferredInnerSize="+preferredInnerSize); // only recompute the layout when it has changed if(layoutRoot.width != targetWidth || forceRelayout) { @@ -371,6 +429,7 @@ protected void layout() { // set position & size of all widget elements layoutRoot.adjustWidget(getInnerX(), getInnerY()); + layoutRoot.collectBGImages(0, 0, allBGImages); } updateMouseHover(); } finally { @@ -381,10 +440,14 @@ protected void layout() { styleClassResolver.layoutFinished(); } + //System.out.println("layoutRoot.height="+layoutRoot.height+" box.curY="+box.curY+" remaining="+box.minRemainingWidth); + if(layoutRoot.height != box.curY) { layoutRoot.height = box.curY; - // call outside of inLayoutCode range - invalidateLayout(); + if(getInnerHeight() != box.curY) { + // call outside of inLayoutCode range + invalidateLayout(); + } } } } @@ -394,13 +457,14 @@ protected void paintWidget(GUI gui) { final ArrayList bi = allBGImages; final int innerX = getInnerX(); final int innerY = getInnerY(); - final AnimationState as = getAnimationState(); + final AnimationState as = elementsAnimationState; + final Renderer renderer = gui.getRenderer(); for(int i=0,n=bi.size() ; i contentHeight) { + int amount = 0; + switch(style.get(StyleAttribute.VERTICAL_ALIGNMENT, styleClassResolver)) { + case BOTTOM: + amount = boxHeight - contentHeight; + break; + + case FILL: + case MIDDLE: + amount = (boxHeight - contentHeight)/2; + break; + } + if(amount > 0) { + clip.moveContentY(amount); + } + } + + clip.height = boxHeight; clip.marginBottom = (short)Math.max(marginBottom, box.marginBottomAbs - box.curY); return box; } - private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { + private void layoutBlockElement(Box box, TextAreaModel.ContainerElement be) { box.nextLine(false); final Style style = be.getStyle(); @@ -1140,17 +1251,25 @@ private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { int bgWidth; int remaining = Math.max(0, box.computeRightPadding(marginRight) - bgX); + int paddingLeft = convertToPX0(style, StyleAttribute.PADDING_LEFT, box.boxWidth); + int paddingRight = convertToPX0(style, StyleAttribute.PADDING_RIGHT, box.boxWidth); if(floatPosition == TextAreaModel.FloatPosition.NONE) { - bgWidth = remaining; + bgWidth = convertToPX(style, StyleAttribute.WIDTH, remaining, remaining); } else { - bgWidth = convertToPX(style, StyleAttribute.WIDTH, box.boxWidth, box.lineWidth); - } + bgWidth = convertToPX(style, StyleAttribute.WIDTH, box.boxWidth, Integer.MIN_VALUE); + if(bgWidth == Integer.MIN_VALUE) { + LClip dummy = new LClip(null); + dummy.width = Math.max(0, box.lineWidth - paddingLeft - paddingRight); - int paddingLeft = convertToPX0(style, StyleAttribute.PADDING_LEFT, bgWidth); - int paddingRight = convertToPX0(style, StyleAttribute.PADDING_RIGHT, bgWidth); - - bgWidth += paddingLeft + paddingRight; + Box dummyBox = layoutBox(dummy, box.boxWidth, paddingLeft, paddingRight, be, null); + dummyBox.nextLine(false); + + bgWidth = Math.max(0, dummy.width - dummyBox.minRemainingWidth); + } + } + + bgWidth = Math.max(0, bgWidth) + paddingLeft + paddingRight; if(floatPosition != TextAreaModel.FloatPosition.NONE) { box.advancePastFloaters(bgWidth, marginLeft, marginRight); @@ -1160,7 +1279,7 @@ private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { remaining = Math.max(0, box.computeRightPadding(marginRight) - bgX); } - bgWidth = Math.max(0, Math.min(bgWidth, remaining)); + bgWidth = Math.min(bgWidth, remaining); if(floatPosition == TextAreaModel.FloatPosition.RIGHT) { bgX = box.computeRightPadding(marginRight) - bgWidth; @@ -1172,9 +1291,10 @@ private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { clip.width = bgWidth; clip.marginLeft = (short)marginLeft; clip.marginRight = (short)marginRight; + clip.href = box.href; box.layout.add(clip); - layoutBox(clip, box.boxWidth, paddingLeft, paddingRight, be); + Box clipBox = layoutBox(clip, box.boxWidth, paddingLeft, paddingRight, be, box.href); // sync main box with layout box.lineStartIdx = box.layout.size(); @@ -1182,6 +1302,7 @@ private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { if(floatPosition == TextAreaModel.FloatPosition.NONE) { box.advanceToY(bgY + clip.height); box.setMarginBottom(clip.marginBottom); + box.accountMinRemaining(clipBox.minRemainingWidth); } else { if(floatPosition == TextAreaModel.FloatPosition.RIGHT) { box.objRight.add(clip); @@ -1196,9 +1317,97 @@ private void layoutBlockElement(Box box, TextAreaModel.BlockElement be) { bgImage.y = bgY; bgImage.width = bgWidth; bgImage.height = clip.height; + bgImage.hoverSrc = clip; } } + private void computeTableWidth(TextAreaModel.TableElement te, + int maxTableWidth, int columnWidth[], int columnSpacing[], boolean[] columnsWithFixedWidth) { + final int numColumns = te.getNumColumns(); + final int numRows = te.getNumRows(); + final int cellSpacing = te.getCellSpacing(); + final int cellPadding = te.getCellPadding(); + + HashMap colspanWidths = null; + + for(int col=0 ; col 1 || !hasFixedWidth)) { + int paddingLeft = Math.max(cellPadding, convertToPX0(cellStyle, StyleAttribute.PADDING_LEFT, maxTableWidth)); + int paddingRight = Math.max(cellPadding, convertToPX0(cellStyle, StyleAttribute.PADDING_RIGHT, maxTableWidth)); + + LClip dummy = new LClip(null); + dummy.width = maxTableWidth; + Box dummyBox = layoutBox(dummy, maxTableWidth, paddingLeft, paddingRight, cell, null); + dummyBox.finish(); + + cellWidth = maxTableWidth - dummyBox.minRemainingWidth; + } else if(colspan == 1 && cellWidth >= 0) { + hasFixedWidth = true; + } + + if(colspan > 1) { + if(colspanWidths == null) { + colspanWidths = new HashMap(); + } + Integer key = (col << 16) + colspan; + Integer value = colspanWidths.get(key); + if(value == null || cellWidth > value) { + colspanWidths.put(key, cellWidth); + } + } else { + width = Math.max(width, cellWidth); + marginLeft = Math.max(marginLeft, convertToPX(cellStyle, StyleAttribute.MARGIN_LEFT, maxTableWidth, 0)); + marginRight = Math.max(marginRight, convertToPX(cellStyle, StyleAttribute.MARGIN_LEFT, maxTableWidth, 0)); + } + } + } + + columnsWithFixedWidth[col] = hasFixedWidth; + columnWidth[col] = width; + columnSpacing[col ] = Math.max(columnSpacing[col], marginLeft); + columnSpacing[col+1] = Math.max(cellSpacing, marginRight); + } + + if(colspanWidths != null) { + for(Map.Entry e : colspanWidths.entrySet()) { + int key = e.getKey(); + int col = key >>> 16; + int colspan = key & 0xFFFF; + int width = e.getValue(); + int remainingCols = colspan; + + for(int i=0 ; i 0) { + for(int i=0 ; i 0 ; i++) { + if(!columnsWithFixedWidth[col+i]) { + int colWidth = width / remainingCols; + columnWidth[col+i] = Math.max(columnWidth[col+i], colWidth); + width -= colWidth; + remainingCols--; + } + } + } + } + } + } + private void layoutTableElement(Box box, TextAreaModel.TableElement te) { final int numColumns = te.getNumColumns(); final int numRows = te.getNumRows(); @@ -1215,73 +1424,70 @@ private void layoutTableElement(Box box, TextAreaModel.TableElement te) { int left = box.computeLeftPadding(convertToPX0(tableStyle, StyleAttribute.MARGIN_LEFT, box.boxWidth)); int right = box.computeRightPadding(convertToPX0(tableStyle, StyleAttribute.MARGIN_RIGHT, box.boxWidth)); - int tableWidth = Math.min(right - left, convertToPX0(tableStyle, StyleAttribute.WIDTH, box.boxWidth)); + int maxTableWidth = Math.max(0, right - left); + int tableWidth = Math.min(maxTableWidth, convertToPX(tableStyle, StyleAttribute.WIDTH, box.boxWidth, Integer.MIN_VALUE)); + boolean autoTableWidth = tableWidth == Integer.MIN_VALUE; if(tableWidth <= 0) { - tableWidth = Math.max(0, right - left); + tableWidth = maxTableWidth; } - + int columnWidth[] = new int[numColumns]; int columnSpacing[] = new int[numColumns + 1]; - int columnWidthSum = 0; - int columnsWithoutWidth = 0; - + boolean[] columnsWithFixedWidth = new boolean[numColumns]; + columnSpacing[0] = Math.max(cellSpacing, convertToPX0(tableStyle, StyleAttribute.PADDING_LEFT, box.boxWidth)); - for(int col=0 ; col 0) { - int remainingWidth = Math.max(0, tableWidth - columnSpacingSum - columnWidthSum); - for(int col=0 ; col 0) { int available = availableColumnWidth; int toDistribute = columnWidthSum; - + int remainingCols = numColumns; + for(int col=0 ; col 0) ? width * available / toDistribute : 0; - columnWidth[col] = newWidth; - available -= newWidth; - toDistribute -= width; + if(columnsWithFixedWidth[col]) { + int width = columnWidth[col]; + available -= width; + toDistribute -= width; + remainingCols--; + } + } + + boolean allColumns = false; + if(availableColumnWidth < 0) { + available = availableColumnWidth; + toDistribute = columnWidthSum; + remainingCols = numColumns; + allColumns = true; + } + + for(int col=0 ; col 0 ; col++) { + if(allColumns || !columnsWithFixedWidth[col]) { + int width = columnWidth[col]; + int newWidth = (toDistribute > 0) ? width * available / toDistribute : 0; + columnWidth[col] = newWidth; + available -= newWidth; + toDistribute -= width; + } } } @@ -1331,21 +1537,22 @@ private void layoutTableElement(Box box, TextAreaModel.TableElement te) { int paddingLeft = Math.max(cellPadding, convertToPX0(cellStyle, StyleAttribute.PADDING_LEFT, tableWidth)); int paddingRight = Math.max(cellPadding, convertToPX0(cellStyle, StyleAttribute.PADDING_RIGHT, tableWidth)); + LClip clip = new LClip(cell); LImage bgImage = createBGImage(box, cell); if(bgImage != null) { bgImage.x = x; bgImage.width = width; + bgImage.hoverSrc = clip; bgImages[col] = bgImage; } - LClip clip = new LClip(cell); clip.x = x; clip.y = box.curY; clip.width = width; clip.marginTop = (short)convertToPX0(cellStyle, StyleAttribute.MARGIN_TOP, tableWidth); box.layout.add(clip); - layoutBox(clip, tableWidth, paddingLeft, paddingRight, cell); + layoutBox(clip, tableWidth, paddingLeft, paddingRight, cell, null); col += Math.max(0, cell.getColspan()-1); } @@ -1374,6 +1581,7 @@ private void layoutTableElement(Box box, TextAreaModel.TableElement te) { box.curY += Math.max(cellSpacing, convertToPX0(tableStyle, StyleAttribute.PADDING_BOTTOM, box.boxWidth)); box.checkFloaters(); + box.accountMinRemaining(Math.max(0, box.lineWidth - tableWidth)); if(tableBGImage != null) { tableBGImage.height = box.curY - tableBGImage.y; @@ -1390,7 +1598,17 @@ private void layoutTableElement(Box box, TextAreaModel.TableElement te) { } private LImage createBGImage(Box box, TextAreaModel.Element element) { - Image image = selectImage(element.getStyle(), StyleAttribute.BACKGROUND_IMAGE); + Style style = element.getStyle(); + Image image = selectImage(style, StyleAttribute.BACKGROUND_IMAGE); + if(image == null) { + Color color = style.get(StyleAttribute.BACKGROUND_COLOR, styleClassResolver); + if(color.getA() != 0) { + Image white = selectImage("white"); + if(white != null) { + image = white.createTintedVersion(color); + } + } + } if(image != null) { LImage bgImage = new LImage(element, image); bgImage.y = box.curY; @@ -1437,13 +1655,14 @@ class Box { int minLineHeight; int lastLineEnd; int lastLineBottom; + int minRemainingWidth; boolean inParagraph; boolean wasAutoBreak; boolean wasPreformatted; TextAreaModel.HAlignment textAlignment; String href; - public Box(LClip clip, int paddingLeft, int paddingRight, int paddingTop) { + Box(LClip clip, int paddingLeft, int paddingRight, int paddingTop) { this.clip = clip; this.layout = clip.layout; this.boxLeft = paddingLeft; @@ -1454,6 +1673,7 @@ public Box(LClip clip, int paddingLeft, int paddingRight, int paddingTop) { this.curY = paddingTop; this.lineStartX = boxLeft; this.lineWidth = boxWidth; + this.minRemainingWidth = boxWidth; this.textAlignment = TextAreaModel.HAlignment.LEFT; assert layout.isEmpty(); } @@ -1468,6 +1688,8 @@ void computePadding() { if(isAtStartOfLine()) { curX = lineStartX; } + + accountMinRemaining(getRemaining()); } int computeLeftPadding(int marginLeft) { @@ -1511,6 +1733,10 @@ void setMarginBottom(int marginBottom) { int getRemaining() { return Math.max(0, lineWidth - curX + lineStartX); } + + void accountMinRemaining(int remaining) { + minRemainingWidth = Math.min(minRemainingWidth, remaining); + } int getXAndAdvance(int amount) { int x = curX; @@ -1602,6 +1828,8 @@ boolean nextLine(boolean force) { return false; } + accountMinRemaining(getRemaining()); + int targetY = curY; int lineHeight = minLineHeight; @@ -1727,9 +1955,9 @@ void setupTextParams(Style style, Font font, boolean isParagraphStart) { marginRight = convertToPX0(style, StyleAttribute.MARGIN_RIGHT, boxWidth); textAlignment = style.get(StyleAttribute.HORIZONTAL_ALIGNMENT, styleClassResolver); computePadding(); - curX = Math.max(0, lineStartX + convertToPX(style, StyleAttribute.TEXT_IDENT, boxWidth, 0)); + curX = Math.max(0, lineStartX + convertToPX(style, StyleAttribute.TEXT_INDENT, boxWidth, 0)); } - + marginTop = convertToPX0(style, StyleAttribute.MARGIN_TOP, boxWidth); } @@ -1773,13 +2001,15 @@ static class LElement { short marginRight; short marginBottom; String href; + boolean isHover; - public LElement(TextAreaModel.Element element) { + LElement(TextAreaModel.Element element) { this.element = element; } void adjustWidget(int offX, int offY) {} - void draw(int offX, int offY, AnimationState as) {} + void collectBGImages(int offX, int offY, ArrayList allBGImages) {} + void draw(int offX, int offY, AnimationState as, Renderer renderer) {} void destroy() {} boolean isInside(int x, int y) { @@ -1795,6 +2025,10 @@ LElement find(TextAreaModel.Element element, int[] offset) { } return null; } + boolean setHover(LElement le) { + isHover = (this == le) || (le != null && element == le.element); + return isHover; + } int bottom() { return y + height + marginBottom; @@ -1803,14 +2037,16 @@ int bottom() { static class LText extends LElement { final Font font; + final Color color; final String text; final int start; final int end; FontCache cache; - public LText(TextAreaModel.Element element, Font font, String text, int start, int end) { + LText(TextAreaModel.Element element, Font font, Color color, String text, int start, int end) { super(element); this.font = font; + this.color = Color.WHITE.equals(color) ? null : color; this.text = text; this.start = start; this.end = end; @@ -1825,7 +2061,23 @@ public LText(TextAreaModel.Element element, Font font, String text, int start, i } @Override - void draw(int offX, int offY, AnimationState as) { + void draw(int offX, int offY, AnimationState as, Renderer renderer) { + as.setAnimationState(STATE_HOVER, isHover); + if(color != null) { + drawTextWithColor(offX, offY, as, renderer); + } else { + drawText(offX, offY, as); + } + } + + private void drawTextWithColor(int offX, int offY, AnimationState as, Renderer renderer) { + Color c = color; + renderer.pushGlobalTintColor(c.getRedFloat(), c.getGreenFloat(), c.getBlueFloat(), c.getAlphaFloat()); + drawText(offX, offY, as); + renderer.popGlobalTintColor(); + } + + private void drawText(int offX, int offY, AnimationState as) { if(cache != null) { cache.draw(as, x+offX, y+offY); } else { @@ -1845,7 +2097,7 @@ void destroy() { static class LWidget extends LElement { final Widget widget; - public LWidget(TextAreaModel.Element element, Widget widget) { + LWidget(TextAreaModel.Element element, Widget widget) { super(element); this.widget = widget; } @@ -1859,60 +2111,56 @@ void adjustWidget(int offX, int offY) { static class LImage extends LElement { final Image img; + LElement hoverSrc; - public LImage(TextAreaModel.Element element, Image img) { + @SuppressWarnings("LeakingThisInConstructor") + LImage(TextAreaModel.Element element, Image img) { super(element); this.img = img; this.width = img.getWidth(); this.height = img.getHeight(); + this.hoverSrc = this; } @Override - void draw(int offX, int offY, AnimationState as) { + void draw(int offX, int offY, AnimationState as, Renderer renderer) { + as.setAnimationState(STATE_HOVER, hoverSrc.isHover); img.draw(as, x+offX, y+offY, width, height); } } - class LClip extends LElement { + static class LClip extends LElement { final ArrayList layout; final ArrayList bgImages; final ArrayList anchors; char[] lineInfo; - public LClip(TextAreaModel.Element element) { + LClip(TextAreaModel.Element element) { super(element); this.layout = new ArrayList(); this.bgImages = new ArrayList(); this.anchors = new ArrayList(); + this.lineInfo = EMPTY_CHAR_ARRAY; } @Override - void draw(int offX, int offY, AnimationState as) { + void draw(int offX, int offY, AnimationState as, Renderer renderer) { offX += x; offY += y; - GUI gui = getGUI(); - gui.clipEnter(offX, offY, width, height); + renderer.clipEnter(offX, offY, width, height); try { - if(!gui.clipEmpty()) { - drawNoClip(offX, offY, as); + if(!renderer.clipIsEmpty()) { + drawNoClip(offX, offY, as, renderer); } } finally { - gui.clipLeave(); + renderer.clipLeave(); } } - void drawNoClip(int offX, int offY, AnimationState as) { + void drawNoClip(int offX, int offY, AnimationState as, Renderer renderer) { final ArrayList ll = layout; - final TextAreaModel.Element hoverElement; - if(curLElementUnderMouse != null) { - hoverElement = curLElementUnderMouse.element; - } else { - hoverElement = null; - } for(int i=0,n=ll.size() ; i allBGImages) { + offX += x; + offY += y; for(int i=0,n=bgImages.size() ; i l, TextAreaModel.Element e, int[] offs } return null; } + + @Override + boolean setHover(LElement le) { + boolean childHover = false; + for(int i=0,n=layout.size() ; i 0) { + if(lineInfo[1] == 0) { + lineInfo[0] += amount; + } else { + int n = lineInfo.length; + char[] tmpLineInfo = new char[n+2]; + tmpLineInfo[0] = (char)amount; + for(int i=0 ; i 0) { + lineBottom += amount; + } + tmpLineInfo[i+2] = (char)lineBottom; + tmpLineInfo[i+3] = lineInfo[i+1]; + } + lineInfo = tmpLineInfo; + } + } + } } } diff --git a/twl/src/de/matthiasmann/twl/TreeTable.java b/twl/src/de/matthiasmann/twl/TreeTable.java index adc893f..42f4a1c 100644 --- a/twl/src/de/matthiasmann/twl/TreeTable.java +++ b/twl/src/de/matthiasmann/twl/TreeTable.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -30,7 +30,6 @@ package de.matthiasmann.twl; import de.matthiasmann.twl.model.BooleanModel; -import de.matthiasmann.twl.model.ToggleButtonModel; import de.matthiasmann.twl.model.TreeTableModel; import de.matthiasmann.twl.model.TreeTableNode; import de.matthiasmann.twl.utils.CallbackSupport; @@ -49,6 +48,11 @@ */ public class TreeTable extends TableBase { + public interface ExpandListener { + public void nodeExpanded(int row, TreeTableNode node); + public void nodeCollapsed(int row, TreeTableNode node); + } + private final ModelChangeListener modelChangeListener; private final TreeLeafCellRenderer leafRenderer; private final TreeNodeCellRenderer nodeRenderer; @@ -57,6 +61,7 @@ public class TreeTable extends TableBase { private int nodeStateTableSize; TreeTableModel model; private NodeState rootNodeState; + private ExpandListener[] expandListeners; @SuppressWarnings("LeakingThisInConstructor") public TreeTable() { @@ -102,6 +107,14 @@ public void setModel(TreeTableModel model) { invalidateLayout(); } + public void addExpandListener(ExpandListener listener) { + expandListeners = CallbackSupport.addCallbackToList(expandListeners, listener, ExpandListener.class); + } + + public void removeExpandListener(ExpandListener listener) { + expandListeners = CallbackSupport.removeCallbackFromList(expandListeners, listener); + } + @Override protected void applyTheme(ThemeInfo themeInfo) { super.applyTheme(themeInfo); @@ -277,6 +290,16 @@ protected void expandedChanged(NodeState ns) { scrollPane.scrollToAreaY(rowStart, height, rowHeight/2); } } + + if(expandListeners != null) { + for(ExpandListener el : expandListeners) { + if(ns.expanded) { + el.nodeExpanded(row, ns.key); + } else { + el.nodeCollapsed(row, ns.key); + } + } + } } protected int computeNumRows() { @@ -453,6 +476,7 @@ protected class NodeState extends HashEntry implements Runnable[] callbacks; int level; + @SuppressWarnings("LeakingThisInConstructor") public NodeState(TreeTableNode key, NodeState parent) { super(key); this.parent = parent; @@ -515,7 +539,7 @@ static int getLevel(TreeTableNode node) { return level; } - class TreeLeafCellRenderer implements CellRenderer { + class TreeLeafCellRenderer implements CellRenderer, CellWidgetCreator { protected int treeIndent; protected int level; protected Dimension treeButtonSize = new Dimension(5, 5); @@ -574,12 +598,72 @@ public Widget getCellRenderWidget(int x, int y, int width, int height, boolean i } return null; } + + public Widget updateWidget(Widget existingWidget) { + if(subRenderer instanceof CellWidgetCreator) { + CellWidgetCreator subCreator = (CellWidgetCreator)subRenderer; + return subCreator.updateWidget(existingWidget); + } + return null; + } + + public void positionWidget(Widget widget, int x, int y, int w, int h) { + if(subRenderer instanceof CellWidgetCreator) { + CellWidgetCreator subCreator = (CellWidgetCreator)subRenderer; + int indent = level * treeIndent; + subCreator.positionWidget(widget, x+indent, y, Math.max(0, w-indent), h); + } + } + } + + static class WidgetChain extends Widget { + final ToggleButton expandButton; + Widget userWidget; + + WidgetChain() { + setTheme(""); + expandButton = new ToggleButton(); + expandButton.setTheme("treeButton"); + add(expandButton); + } + + void setUserWidget(Widget userWidget) { + if(this.userWidget != userWidget) { + if(this.userWidget != null) { + removeChild(1); + } + this.userWidget = userWidget; + if(userWidget != null) { + insertChild(userWidget, 1); + } + } + } } - class TreeNodeCellRenderer extends TreeLeafCellRenderer implements CellWidgetCreator { + class TreeNodeCellRenderer extends TreeLeafCellRenderer { private NodeState nodeState; + @Override public Widget updateWidget(Widget existingWidget) { + if(subRenderer instanceof CellWidgetCreator) { + CellWidgetCreator subCreator = (CellWidgetCreator)subRenderer; + WidgetChain widgetChain = null; + if(existingWidget instanceof WidgetChain) { + widgetChain = (WidgetChain)existingWidget; + } + if(nodeState.hasNoChildren()) { + if(widgetChain != null) { + existingWidget = null; + } + return subCreator.updateWidget(existingWidget); + } + if(widgetChain == null) { + widgetChain = new WidgetChain(); + } + widgetChain.expandButton.setModel(nodeState); + widgetChain.setUserWidget(subCreator.updateWidget(widgetChain.userWidget)); + return widgetChain; + } if(nodeState.hasNoChildren()) { return null; } @@ -588,15 +672,29 @@ public Widget updateWidget(Widget existingWidget) { tb = new ToggleButton(); tb.setTheme("treeButton"); } - ((ToggleButtonModel)tb.getModel()).setModel(nodeState); + tb.setModel(nodeState); return tb; } + @Override public void positionWidget(Widget widget, int x, int y, int w, int h) { int indent = level * treeIndent; int availWidth = Math.max(0, w-indent); + int expandButtonWidth = Math.min(availWidth, treeButtonSize.getX()); widget.setPosition(x + indent, y + (h-treeButtonSize.getY())/2); - widget.setSize(Math.min(availWidth, treeButtonSize.getX()), treeButtonSize.getY()); + if(subRenderer instanceof CellWidgetCreator) { + CellWidgetCreator subCreator = (CellWidgetCreator)subRenderer; + WidgetChain widgetChain = (WidgetChain)widget; + ToggleButton expandButton = widgetChain.expandButton; + widgetChain.setSize(Math.max(0, w-indent), h); + expandButton.setSize(expandButtonWidth, treeButtonSize.getY()); + if(widgetChain.userWidget != null) { + subCreator.positionWidget(widgetChain.userWidget, + expandButton.getRight(), y, widget.getWidth(), h); + } + } else { + widget.setSize(expandButtonWidth, treeButtonSize.getY()); + } } public void setCellData(int row, int column, Object data, NodeState nodeState) { diff --git a/twl/src/de/matthiasmann/twl/ValueAdjuster.java b/twl/src/de/matthiasmann/twl/ValueAdjuster.java index 14cd7c2..d29d9b2 100644 --- a/twl/src/de/matthiasmann/twl/ValueAdjuster.java +++ b/twl/src/de/matthiasmann/twl/ValueAdjuster.java @@ -378,7 +378,7 @@ protected boolean handleEvent(Event evt) { } } } - return true; + return false; } } else if(!editField.isVisible() && useMouseWheel && evt.getType() == Event.Type.MOUSE_WHEEL) { if(evt.getMouseWheelDelta() < 0) { diff --git a/twl/src/de/matthiasmann/twl/ValueAdjusterInt.java b/twl/src/de/matthiasmann/twl/ValueAdjusterInt.java index 420efb4..9d70908 100644 --- a/twl/src/de/matthiasmann/twl/ValueAdjusterInt.java +++ b/twl/src/de/matthiasmann/twl/ValueAdjusterInt.java @@ -178,6 +178,8 @@ protected String formatText() { protected void syncWithModel() { cancelEdit(); + this.minValue = model.getMinValue(); + this.maxValue = model.getMaxValue(); this.value = model.getValue(); setDisplayText(); } diff --git a/twl/src/de/matthiasmann/twl/WheelWidget.java b/twl/src/de/matthiasmann/twl/WheelWidget.java new file mode 100644 index 0000000..946a711 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/WheelWidget.java @@ -0,0 +1,572 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl; + +import de.matthiasmann.twl.model.IntegerModel; +import de.matthiasmann.twl.model.ListModel; +import de.matthiasmann.twl.renderer.Image; +import de.matthiasmann.twl.utils.TypeMapping; + +/** + * A wheel widget. + * + * @param The data type for the wheel items + * + * @author Matthias Mann + */ +public class WheelWidget extends Widget { + + public interface ItemRenderer { + public Widget getRenderWidget(Object data); + } + + private final TypeMapping itemRenderer; + private final L listener; + private final R renderer; + private final Runnable timerCB; + + protected int itemHeight; + protected int numVisibleItems; + protected Image selectedOverlay; + + private static final int TIMER_INTERVAL = 30; + private static final int MIN_SPEED = 3; + private static final int MAX_SPEED = 100; + + protected Timer timer; + protected int dragStartY; + protected long lastDragTime; + protected long lastDragDelta; + protected int lastDragDist; + protected boolean hasDragStart; + protected boolean dragActive; + protected int scrollOffset; + protected int scrollAmount; + + protected ListModel model; + protected IntegerModel selectedModel; + protected int selected; + protected boolean cyclic; + + public WheelWidget() { + this.itemRenderer = new TypeMapping(); + this.listener = new L(); + this.renderer = new R(); + this.timerCB = new Runnable() { + public void run() { + onTimer(); + } + }; + + itemRenderer.put(String.class, new StringItemRenderer()); + + super.insertChild(renderer, 0); + setCanAcceptKeyboardFocus(true); + } + + public WheelWidget(ListModel model) { + this(); + this.model = model; + } + + public ListModel getModel() { + return model; + } + + public void setModel(ListModel model) { + removeListener(); + this.model = model; + addListener(); + invalidateLayout(); + } + + public IntegerModel getSelectedModel() { + return selectedModel; + } + + public void setSelectedModel(IntegerModel selectedModel) { + removeSelectedListener(); + this.selectedModel = selectedModel; + addSelectedListener(); + } + + public int getSelected() { + return selected; + } + + public void setSelected(int selected) { + int oldSelected = this.selected; + if(oldSelected != selected) { + this.selected = selected; + if(selectedModel != null) { + selectedModel.setValue(selected); + } + firePropertyChange("selected", oldSelected, selected); + } + } + + public boolean isCyclic() { + return cyclic; + } + + public void setCyclic(boolean cyclic) { + this.cyclic = cyclic; + } + + public int getItemHeight() { + return itemHeight; + } + + public int getNumVisibleItems() { + return numVisibleItems; + } + + public boolean removeItemRenderer(Class clazz) { + if(itemRenderer.remove(clazz)) { + super.removeAllChildren(); + invalidateLayout(); + return true; + } + return false; + } + + public void registerItemRenderer(Class clazz, ItemRenderer value) { + itemRenderer.put(clazz, value); + invalidateLayout(); + } + + public void scroll(int amount) { + scrollInt(amount); + scrollAmount = 0; + } + + protected void scrollInt(int amount) { + int pos = selected; + int half = itemHeight / 2; + + scrollOffset += amount; + while(scrollOffset >= half) { + scrollOffset -= itemHeight; + pos++; + } + while(scrollOffset <= -half) { + scrollOffset += itemHeight; + pos--; + } + + if(!cyclic) { + int n = getNumEntries(); + if(n > 0) { + while(pos >= n) { + pos--; + scrollOffset += itemHeight; + } + } + while(pos < 0) { + pos++; + scrollOffset -= itemHeight; + } + scrollOffset = Math.max(-itemHeight, Math.min(itemHeight, scrollOffset)); + } + + setSelected(pos); + + if(scrollOffset == 0 && scrollAmount == 0) { + stopTimer(); + } else { + startTimer(); + } + } + + public void autoScroll(int dir) { + if(dir != 0) { + if(scrollAmount != 0 && Integer.signum(scrollAmount) != Integer.signum(dir)) { + scrollAmount = dir; + } else { + scrollAmount += dir; + } + startTimer(); + } + } + + @Override + public int getPreferredInnerHeight() { + return numVisibleItems * itemHeight; + } + + @Override + public int getPreferredInnerWidth() { + int width = 0; + for(int i=0,n=getNumEntries() ; i 3 && lastDragDelta > 0) { + int amount = (int)Math.min(1000, absDist * 100 / lastDragDelta); + autoScroll(amount * Integer.signum(lastDragDist)); + } + + hasDragStart = false; + dragActive = false; + return true; + } + + if(evt.isMouseDragEvent()) { + if(hasDragStart) { + long time = getTime(); + dragActive = true; + lastDragDist = dragStartY - evt.getMouseY(); + lastDragDelta = Math.max(1, time - lastDragTime); + scroll(lastDragDist); + dragStartY = evt.getMouseY(); + lastDragTime = time; + } + return true; + } + + if(super.handleEvent(evt)) { + return true; + } + + switch(evt.getType()) { + case MOUSE_WHEEL: + autoScroll(itemHeight * evt.getMouseWheelDelta()); + return true; + + case MOUSE_BTNDOWN: + if(evt.getMouseButton() == Event.MOUSE_LBUTTON) { + dragStartY = evt.getMouseY(); + lastDragTime = getTime(); + hasDragStart = true; + } + return true; + + case KEY_PRESSED: + switch(evt.getKeyCode()) { + case Event.KEY_UP: + autoScroll(-itemHeight); + return true; + case Event.KEY_DOWN: + autoScroll(+itemHeight); + return true; + } + return false; + } + + return evt.isMouseEvent(); + } + + protected long getTime() { + GUI gui = getGUI(); + return (gui != null) ? gui.getCurrentTime() : 0; + } + + protected int getNumEntries() { + return (model == null) ? 0 : model.getNumEntries(); + } + + protected Widget getItemRenderer(int i) { + T item = model.getEntry(i); + if(item != null) { + ItemRenderer ir = itemRenderer.get(item.getClass()); + if(ir != null) { + Widget w = ir.getRenderWidget(item); + if(w != null) { + if(w.getParent() != renderer) { + w.setVisible(false); + renderer.add(w); + } + return w; + } + } + } + return null; + } + + protected void startTimer() { + if(timer != null && !timer.isRunning()) { + timer.start(); + } + } + + protected void stopTimer() { + if(timer != null) { + timer.stop(); + } + } + + protected void onTimer() { + int amount = scrollAmount; + int newAmount = amount; + + if(amount == 0 && !dragActive) { + amount = -scrollOffset; + } + + if(amount != 0) { + int absAmount = Math.abs(amount); + int speed = absAmount * TIMER_INTERVAL / 200; + int dir = Integer.signum(amount) * Math.min(absAmount, + Math.max(MIN_SPEED, Math.min(MAX_SPEED, speed))); + + if(newAmount != 0) { + newAmount -= dir; + } + + scrollAmount = newAmount; + scrollInt(dir); + } + } + + @Override + protected void layout() { + layoutChildFullInnerArea(renderer); + } + + @Override + protected void applyTheme(ThemeInfo themeInfo) { + super.applyTheme(themeInfo); + applyThemeWheel(themeInfo); + } + + protected void applyThemeWheel(ThemeInfo themeInfo) { + itemHeight = themeInfo.getParameter("itemHeight", 10); + numVisibleItems = themeInfo.getParameter("visibleItems", 5); + selectedOverlay = themeInfo.getImage("selectedOverlay"); + invalidateLayout(); + } + + @Override + protected void afterAddToGUI(GUI gui) { + super.afterAddToGUI(gui); + addListener(); + addSelectedListener(); + timer = gui.createTimer(); + timer.setCallback(timerCB); + timer.setDelay(TIMER_INTERVAL); + timer.setContinuous(true); + } + + @Override + protected void beforeRemoveFromGUI(GUI gui) { + timer.stop(); + timer = null; + removeListener(); + removeSelectedListener(); + super.beforeRemoveFromGUI(gui); + } + + @Override + public void insertChild(Widget child, int index) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public void removeAllChildren() throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + @Override + public Widget removeChild(int index) throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + + private void addListener() { + if(model != null) { + model.addChangeListener(listener); + } + } + + private void removeListener() { + if(model != null) { + model.removeChangeListener(listener); + } + } + + private void addSelectedListener() { + if(selectedModel != null) { + selectedModel.addCallback(listener); + syncSelected(); + } + } + + private void removeSelectedListener() { + if(selectedModel != null) { + selectedModel.removeCallback(listener); + } + } + + void syncSelected() { + setSelected(selectedModel.getValue()); + } + + void entriesDeleted(int first, int last) { + if(selected > first) { + if(selected > last) { + setSelected(selected - (last-first+1)); + } else { + setSelected(first); + } + } + invalidateLayout(); + } + + void entriesInserted(int first, int last) { + if(selected >= first) { + setSelected(selected + (last-first+1)); + } + invalidateLayout(); + } + + class L implements ListModel.ChangeListener, Runnable { + public void allChanged() { + invalidateLayout(); + } + public void entriesChanged(int first, int last) { + invalidateLayout(); + } + public void entriesDeleted(int first, int last) { + WheelWidget.this.entriesDeleted(first, last); + } + public void entriesInserted(int first, int last) { + WheelWidget.this.entriesInserted(first, last); + } + public void run() { + syncSelected(); + } + } + + class R extends Widget { + public R() { + setTheme(""); + setClip(true); + } + + @Override + protected void paintWidget(GUI gui) { + if(model == null) { + return; + } + + int width = getInnerWidth(); + int x = getInnerX(); + int y = getInnerY(); + + int numItems = model.getNumEntries(); + int numDraw = numVisibleItems; + int startIdx = selected - numVisibleItems/2; + + if((numDraw & 1) == 0) { + y -= itemHeight / 2; + numDraw++; + } + + if(scrollOffset > 0) { + y -= scrollOffset; + numDraw++; + } + if(scrollOffset < 0) { + y -= itemHeight + scrollOffset; + numDraw++; + startIdx--; + } + + main: for(int i=0 ; i= numItems) { + if(!cyclic) { + continue main; + } + idx -= numItems; + } + + Widget w = getItemRenderer(idx); + if(w != null) { + w.setSize(width, itemHeight); + w.setPosition(x, y + i*itemHeight); + w.validateLayout(); + paintChild(gui, w); + } + } + } + + @Override + public void invalidateLayout() { + } + + @Override + protected void sizeChanged() { + } + } + + public static class StringItemRenderer extends Label implements WheelWidget.ItemRenderer { + public StringItemRenderer() { + setCache(false); + } + + public Widget getRenderWidget(Object data) { + setText(String.valueOf(data)); + return this; + } + + @Override + protected void sizeChanged() { + } + } +} diff --git a/twl/src/de/matthiasmann/twl/Widget.java b/twl/src/de/matthiasmann/twl/Widget.java index e66a4fd..4637bfc 100644 --- a/twl/src/de/matthiasmann/twl/Widget.java +++ b/twl/src/de/matthiasmann/twl/Widget.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -32,6 +32,8 @@ import de.matthiasmann.twl.renderer.AnimationState.StateKey; import de.matthiasmann.twl.renderer.MouseCursor; import de.matthiasmann.twl.renderer.Image; +import de.matthiasmann.twl.renderer.OffscreenRenderer; +import de.matthiasmann.twl.renderer.OffscreenSurface; import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.theme.ThemeManager; import de.matthiasmann.twl.utils.TextUtil; @@ -104,6 +106,8 @@ public class Widget { private TintAnimator tintAnimator; private PropertyChangeSupport propertyChangeSupport; volatile GUI guiInstance; + private OffscreenSurface offscreenSurface; + private RenderOffscreen renderOffscreen; private final AnimationState animState; private final boolean sharedAnimState; @@ -118,6 +122,11 @@ public class Widget { private short maxWidth; private short maxHeight; + private short offscreenExtraLeft; + private short offscreenExtraTop; + private short offscreenExtraRight; + private short offscreenExtraBottom; + private ArrayList children; private Widget lastChildMouseOver; private Widget focusChild; @@ -671,6 +680,56 @@ public boolean setBorderSize(Border border) { } } + public short getOffscreenExtraTop() { + return offscreenExtraTop; + } + + public short getOffscreenExtraLeft() { + return offscreenExtraLeft; + } + + public short getOffscreenExtraBottom() { + return offscreenExtraBottom; + } + + public short getOffscreenExtraRight() { + return offscreenExtraRight; + } + + /** + * Sets the offscreen rendering extra area for this widget. + * @param top the extra area on top + * @param left the extra area on left + * @param bottom the extra area on bottom + * @param right the extra area on right + * @throws IllegalArgumentException if any of the parameters is negative. + * @see #setRenderOffscreen(de.matthiasmann.twl.Widget.RenderOffscreen) + */ + public void setOffscreenExtra(int top, int left, int bottom, int right) { + if(top < 0 || left < 0 || bottom < 0 || right < 0) { + throw new IllegalArgumentException("negative offscreen extra size"); + } + this.offscreenExtraTop = (short)top; + this.offscreenExtraLeft = (short)left; + this.offscreenExtraBottom = (short)bottom; + this.offscreenExtraRight = (short)right; + } + + /** + * Sets the offscreen rendering extra area for this widget. + * @param offscreenExtra the border object or null for no extra area + * @throws IllegalArgumentException if any of the values is negative. + * @see #setRenderOffscreen(de.matthiasmann.twl.Widget.RenderOffscreen) + */ + public void setOffscreenExtra(Border offscreenExtra) { + if(offscreenExtra == null) { + setOffscreenExtra(0, 0, 0, 0); + } else { + setOffscreenExtra(offscreenExtra.getBorderTop(), offscreenExtra.getBorderLeft(), + offscreenExtra.getBorderBottom(), offscreenExtra.getBorderRight()); + } + } + /** * Returns the minimum width of the widget. * Layout manager will allocate atleast the minimum width to a widget even @@ -1261,6 +1320,10 @@ public void destroy() { children.get(i).destroy(); } } + if(offscreenSurface != null) { + offscreenSurface.destroy(); + offscreenSurface = null; + } } public boolean canAcceptKeyboardFocus() { @@ -1284,7 +1347,7 @@ public void setDepthFocusTraversal(boolean depthFocusTraversal) { * *

    Use with care - users don't expect focus changes while working with the UI

    * - *

    Focus transfer only works when the widget is added to the GUi tree. + *

    Focus transfer only works when the widget is added to the GUI tree. * See {@link #getGUI()}.

    * * @return true if keyboard focus was transfered to this widget. @@ -1381,6 +1444,23 @@ public void setTintAnimator(TintAnimator tintAnimator) { this.tintAnimator = tintAnimator; } + /** + * Returns the currently active offscreen rendering delegate or null if none was set + * @return the currently active offscreen rendering delegate or null if none was set + */ + public RenderOffscreen getRenderOffscreen() { + return renderOffscreen; + } + + /** + * Sets set offscreen rendering delegate. Can be null to disable offscreen rendering. + * @param renderOffscreen the offscreen rendering delegate. + */ + public void setRenderOffscreen(RenderOffscreen renderOffscreen) { + this.renderOffscreen = renderOffscreen; + } + + /** * Returns the currently set tooltip content. * @return the currently set tooltip content. Can be null. @@ -1482,6 +1562,7 @@ protected void applyTheme(ThemeInfo themeInfo) { applyThemeBackground(themeInfo); applyThemeOverlay(themeInfo); applyThemeBorder(themeInfo); + applyThemeOffscreenExtra(themeInfo); applyThemeMinSize(themeInfo); applyThemeMaxSize(themeInfo); applyThemeMouseCursor(themeInfo); @@ -1502,6 +1583,10 @@ protected void applyThemeBorder(ThemeInfo themeInfo) { setBorderSize(themeInfo.getParameterValue("border", false, Border.class)); } + protected void applyThemeOffscreenExtra(ThemeInfo themeInfo) { + setOffscreenExtra(themeInfo.getParameterValue("offscreenExtra", false, Border.class)); + } + protected void applyThemeMinSize(ThemeInfo themeInfo) { setMinSize( themeInfo.getParameter("minWidth", 0), @@ -1569,7 +1654,20 @@ protected Object getTooltipContentAt(int mouseX, int mouseY) { protected void updateTooltip() { GUI gui = getGUI(); if(gui != null) { - gui.requestToolTipUpdate(this); + gui.requestTooltipUpdate(this, false); + } + } + + /** + * If this widget currently has an open tooltip then this tooltip is reset + * and the tooltip timer is restarted. + * + * @see #getTooltipContent() + */ + protected void resetTooltip() { + GUI gui = getGUI(); + if(gui != null) { + gui.requestTooltipUpdate(this, true); } } @@ -1896,26 +1994,22 @@ protected void keyboardFocusGained(FocusGainedCause cause, Widget previousWidget * This method is called when this widget has been disabled, * either directly or one of it's parents. * - * The default implementation does nothing. + *

    The default implementation does nothing.

    */ protected void widgetDisabled() { } /** * Paints this widget and it's children. - * A subclass should overwrite paintWidget() instead of this function. + *

    A subclass should overwrite paintWidget() instead of this function.

    * - * The default implementation calls the following method in order: - * paintBackground(gui) - * paintWidget(gui) - * paintChildren(gui) - * paintOverlay(gui) + *

    The default implementation calls the following method in order:

      + *
    1. {@link #paintBackground(de.matthiasmann.twl.GUI)}
    2. + *
    3. {@link #paintWidget(de.matthiasmann.twl.GUI)}
    4. + *
    5. {@link #paintChildren(de.matthiasmann.twl.GUI)}
    6. + *
    7. {@link #paintOverlay(de.matthiasmann.twl.GUI)}
    * * @param gui the GUI object - * @see #paintBackground(de.matthiasmann.twl.GUI) - * @see #paintWidget(de.matthiasmann.twl.GUI) - * @see #paintChildren(de.matthiasmann.twl.GUI) - * @see #paintOverlay(de.matthiasmann.twl.GUI) */ protected void paint(GUI gui) { paintBackground(gui); @@ -1925,9 +2019,14 @@ protected void paint(GUI gui) { } /** - * Called by paint() after painting the background and before painting all children. - * This should be overwritten instead of paint() if normal themeable - * painting is desired by the subclass. + * Called by {@link #paint(de.matthiasmann.twl.GUI)} after painting the + * background and before painting all children. + * + *

    This should be overwritten instead of {@code paint} if normal themeable + * painting is desired by the subclass.

    + * + *

    The default implementation does nothing.

    + * * @param gui the GUI object - it's the same as getGUI() */ protected void paintWidget(GUI gui) { @@ -1936,6 +2035,7 @@ protected void paintWidget(GUI gui) { /** * Paint the background image of this widget. * @param gui the GUI object + * @see #paint(de.matthiasmann.twl.GUI) */ protected void paintBackground(GUI gui) { Image bgImage = getBackground(); @@ -1947,6 +2047,7 @@ protected void paintBackground(GUI gui) { /** * Paints the overlay image of this widget. * @param gui the GUI object + * @see #paint(de.matthiasmann.twl.GUI) */ protected void paintOverlay(GUI gui) { Image ovImage = getOverlay(); @@ -1958,6 +2059,7 @@ protected void paintOverlay(GUI gui) { /** * Paints all children in index order. Invisible children are skipped. * @param gui the GUI object + * @see #paint(de.matthiasmann.twl.GUI) */ protected void paintChildren(GUI gui) { if(children != null) { @@ -1983,6 +2085,18 @@ protected void paintChild(GUI gui, Widget child) { child.drawWidget(gui); } + /** + * Called after all other widgets have been rendered when a drag operation is in progress. + * The mouse position can be outsife of this widget + * + * @param gui the GUI object + * @param mouseX the current mouse X position + * @param mouseY the current mouse Y position + * @param modifier the current active modifiers - see {@link Event#getModifiers() } + */ + protected void paintDragOverlay(GUI gui, int mouseX, int mouseY, int modifier) { + } + /** * Invalidates only the layout of this widget. Does not invalidate the layout of the parent. * Should only be used for things like scrolling. @@ -2366,7 +2480,15 @@ final void recalcOpenPopups(GUI gui) { setOpenPopup(gui, false); } + final boolean isLayoutInvalid() { + return layoutInvalid != 0; + } + final void drawWidget(GUI gui) { + if(renderOffscreen != null) { + drawWidgetOffscreen(gui); + return; + } if(tintAnimator != null && tintAnimator.hasTint()) { drawWidgetTint(gui); return; @@ -2396,12 +2518,51 @@ private void drawWidgetTint(GUI gui) { } private void drawWidgetClip(GUI gui) { - gui.clipEnter(posX, posY, width, height); + Renderer renderer = gui.getRenderer(); + renderer.clipEnter(posX, posY, width, height); try { paint(gui); } finally { - gui.clipLeave(); + renderer.clipLeave(); + } + } + + private void drawWidgetOffscreen(GUI gui) { + final RenderOffscreen ro = this.renderOffscreen; + final Renderer renderer = gui.getRenderer(); + final OffscreenRenderer offscreenRenderer = renderer.getOffscreenRenderer(); + if(offscreenRenderer != null) { + int extraTop = offscreenExtraTop; + int extraLeft = offscreenExtraLeft; + int extraRight = offscreenExtraRight; + int extraBottom = offscreenExtraBottom; + int[] effectExtra = ro.getEffectExtraArea(this); + if(effectExtra != null) { + extraTop += effectExtra[0]; + extraLeft += effectExtra[1]; + extraRight += effectExtra[2]; + extraBottom += effectExtra[3]; + } + offscreenSurface = offscreenRenderer.startOffscreenRendering( + offscreenSurface, posX-extraLeft, posY-extraTop, + width+extraLeft+extraRight, height+extraTop+extraBottom); + if(offscreenSurface != null) { + try { + if(tintAnimator != null && tintAnimator.hasTint()) { + drawWidgetTint(gui); + } else { + paint(gui); + } + } finally { + offscreenRenderer.endOffscreenRendering(); + } + ro.paintOffscreenSurface(gui, this, offscreenSurface); + return; + } } + renderOffscreen = null; + ro.offscreenRenderingFailed(this); + drawWidget(gui); } Widget getWidgetUnderMouse() { @@ -2560,10 +2721,6 @@ Widget routeMouseEvent(Event evt) { child.focusGainedCause = FocusGainedCause.MOUSE_BTNDOWN; if(child.isEnabled() && child.canAcceptKeyboardFocus()) { requestKeyboardFocus(child); - } else { - // when the clicked child doesn't want the focus - // then steal the focus from the current focused child - requestKeyboardFocus(null); } } finally { child.focusGainedCause = null; @@ -2635,7 +2792,7 @@ static boolean getSafeBooleanProperty(String name) { private boolean handleKeyEvent(Event evt) { if(children != null) { - if(focusKeyEnabled && evt.isKeyEvent() && evt.getKeyCode() == FOCUS_KEY && + if(focusKeyEnabled && evt.getKeyCode() == FOCUS_KEY && ((evt.getModifiers() & (Event.MODIFIER_CTRL|Event.MODIFIER_META|Event.MODIFIER_ALT)) == 0)) { handleFocusKeyEvent(evt); return true; @@ -2710,4 +2867,41 @@ private PropertyChangeSupport createPropertyChangeSupport() { private Logger getLogger() { return Logger.getLogger(Widget.class.getName()); } + + /** + * When this interface is installed in a Widget then the widget tries to + * render into an offscreen surface. + */ + public static interface RenderOffscreen { + /** + * This method is called after the widget has been sucessfully rendered + * into an offscreen surface. + * + * @param gui the GUI instance + * @param widget the widget + * @param surface the resulting offscreen surface + */ + public void paintOffscreenSurface(GUI gui, Widget widget, OffscreenSurface surface); + + /** + * Called when {@link OffscreenRenderer#startOffscreenRendering(de.matthiasmann.twl.renderer.OffscreenSurface, int, int, int, int) } + * failed. + * At the moment this method is called the RenderOffscreen instance has + * already been removed from the widget. + * @param widget the widget + */ + public void offscreenRenderingFailed(Widget widget); + + /** + * Returns the extra area around the widget needed for the effect. + *

    All returned values must be >= 0.

    + * + *

    The returned object can be reused on the next call and should not + * be stored by the caller.

    + * + * @param widget the widget + * @return the extra area in {@code top, left, right, bottom} order or null + */ + public int[] getEffectExtraArea(Widget widget); + } } diff --git a/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java b/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java index 0b0eee7..fc7a10c 100644 --- a/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java +++ b/twl/src/de/matthiasmann/twl/input/lwjgl/LWJGLInput.java @@ -65,7 +65,7 @@ public boolean pollInput(GUI gui) { if(Mouse.isCreated()) { while(Mouse.next()) { gui.handleMouse( - Mouse.getEventX()/RenderScale.scale, (gui.getHeight() - Mouse.getEventY() - 1)/RenderScale.scale, + Mouse.getEventX()/RenderScale.scale, (gui.getHeight() - Mouse.getEventY() - 1)/RenderScale.scale, Mouse.getEventButton(), Mouse.getEventButtonState()); int wheelDelta = Mouse.getEventDWheel(); diff --git a/twl/src/de/matthiasmann/twl/model/BooleanModel.java b/twl/src/de/matthiasmann/twl/model/BooleanModel.java index 36eab98..7a0f5ea 100644 --- a/twl/src/de/matthiasmann/twl/model/BooleanModel.java +++ b/twl/src/de/matthiasmann/twl/model/BooleanModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,19 +29,17 @@ */ package de.matthiasmann.twl.model; +import de.matthiasmann.twl.utils.WithRunnableCallback; + /** * A generic boolean model. * * @author Matthias Mann */ -public interface BooleanModel { +public interface BooleanModel extends WithRunnableCallback { public boolean getValue(); public void setValue(boolean value); - - public void addCallback(Runnable callback); - - public void removeCallback(Runnable callback); } diff --git a/twl/src/de/matthiasmann/twl/model/ColorModel.java b/twl/src/de/matthiasmann/twl/model/ColorModel.java new file mode 100644 index 0000000..20d9154 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/ColorModel.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.utils.WithRunnableCallback; + +/** + * A model which stores a color value. + * + * @author Matthias Mann + */ +public interface ColorModel extends WithRunnableCallback { + + public Color getValue(); + + public void setValue(Color value); + +} diff --git a/twl/src/de/matthiasmann/twl/model/DateModel.java b/twl/src/de/matthiasmann/twl/model/DateModel.java new file mode 100644 index 0000000..8fd1d31 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/DateModel.java @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +import de.matthiasmann.twl.utils.WithRunnableCallback; + +/** + * A date model which stores the current date in milliseconds + * + * @author Matthias Mann + * @see System#currentTimeMillis() + */ +public interface DateModel extends WithRunnableCallback { + + public long getValue(); + + public void setValue(long date); + +} diff --git a/twl/src/de/matthiasmann/twl/model/DefaultEditFieldModel.java b/twl/src/de/matthiasmann/twl/model/DefaultEditFieldModel.java new file mode 100644 index 0000000..26ab910 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/DefaultEditFieldModel.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +import de.matthiasmann.twl.utils.CallbackSupport; + +/** + * An {@code EditFieldModel} based on a {@link StringBuilder} + * + * @author Matthias Mann + */ +public class DefaultEditFieldModel implements EditFieldModel { + + private final StringBuilder sb; + private Callback[] callbacks; + + public DefaultEditFieldModel() { + this.sb = new StringBuilder(); + } + + public int length() { + return sb.length(); + } + + public char charAt(int index) { + return sb.charAt(index); + } + + public CharSequence subSequence(int start, int end) { + return sb.subSequence(start, end); + } + + @Override + public String toString() { + return sb.toString(); + } + + public void addCallback(Callback callback) { + callbacks = CallbackSupport.addCallbackToList(callbacks, callback, Callback.class); + } + + public void removeCallback(Callback callback) { + callbacks = CallbackSupport.removeCallbackFromList(callbacks, callback); + } + + public int replace(int start, int count, String replacement) { + checkRange(start, count); + int replacementLength = replacement.length(); + if(count > 0 || replacementLength > 0) { + sb.replace(start, start+count, replacement); + fireCallback(start, count, replacementLength); + } + return replacementLength; + } + + public boolean replace(int start, int count, char replacement) { + checkRange(start, count); + if(count == 0) { + sb.insert(start, replacement); + } else { + sb.delete(start, start+count-1); + sb.setCharAt(start, replacement); + } + fireCallback(start, count, 1); + return true; + } + + public String substring(int start, int end) { + return sb.substring(start, end); + } + + private void checkRange(int start, int count) { + int len = sb.length(); + if(start < 0 || start > len) { + throw new StringIndexOutOfBoundsException(start); + } + if(count < 0 || count > len - start) { + throw new StringIndexOutOfBoundsException(); + } + } + + private void fireCallback(int start, int oldCount, int newCount) { + Callback[] cbs = this.callbacks; + if(cbs != null) { + for(Callback cb : cbs) { + cb.charactersChanged(start, oldCount, newCount); + } + } + } +} diff --git a/twl/src/de/matthiasmann/twl/model/EditFieldModel.java b/twl/src/de/matthiasmann/twl/model/EditFieldModel.java new file mode 100644 index 0000000..413522c --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/EditFieldModel.java @@ -0,0 +1,74 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +/** + * + * @author Matthias Mann + */ +public interface EditFieldModel extends ObservableCharSequence { + + /** + * Replace {@code count} characters starting at {@code start} with the + * specified {@code replacement} text. + * @param start the start index + * @param count the number of characters to replace, can be 0. + * @param replacement the replacement text, can be empty. + * @return the number of characters which have been inserted, or -1 if + * no replacement has been performed. + * @throws StringIndexOutOfBoundsException if {@code start} or {@code count} + * are outside the sequence + * @throws NullPointerException when replacement is {@code null} + */ + public int replace(int start, int count, String replacement); + + /** + * Replace {@code count} characters starting at {@code start} with the + * specified {@code replacement} character. + * @param start the start index + * @param count the number of characters to replace, can be 0. + * @param replacement the replacement character + * @return true if the sequence was changed, false otherwise. + * @throws StringIndexOutOfBoundsException if {@code start} or {@code count} + * are outside the sequence + */ + public boolean replace(int start, int count, char replacement); + + /** + * Returns a String containing the specified range from this sequence. + * @param start the start index + * @param end the end index + * @return the String object + * @throws StringIndexOutOfBoundsException if {@code start} or {@code count} + * are outside the sequence + * @see #subSequence(int, int) + */ + public String substring(int start, int end); +} diff --git a/twl/src/de/matthiasmann/twl/model/EnumModel.java b/twl/src/de/matthiasmann/twl/model/EnumModel.java index 4373cde..72b159c 100644 --- a/twl/src/de/matthiasmann/twl/model/EnumModel.java +++ b/twl/src/de/matthiasmann/twl/model/EnumModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,21 +29,20 @@ */ package de.matthiasmann.twl.model; +import de.matthiasmann.twl.utils.WithRunnableCallback; + /** * A generic model for enum values based on a generic enum type. * * @param The enum type * @author Matthias Mann */ -public interface EnumModel> { +public interface EnumModel> extends WithRunnableCallback { public Class getEnumClass(); public T getValue(); public void setValue(T value); - - public void addCallback(Runnable callback); - public void removeCallback(Runnable callback); } diff --git a/twl/src/de/matthiasmann/twl/model/FloatModel.java b/twl/src/de/matthiasmann/twl/model/FloatModel.java index 1479a09..47dd1ff 100644 --- a/twl/src/de/matthiasmann/twl/model/FloatModel.java +++ b/twl/src/de/matthiasmann/twl/model/FloatModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,12 +29,14 @@ */ package de.matthiasmann.twl.model; +import de.matthiasmann.twl.utils.WithRunnableCallback; + /** * A generic model for float values. * * @author Matthias Mann */ -public interface FloatModel { +public interface FloatModel extends WithRunnableCallback { public float getValue(); @@ -43,8 +45,5 @@ public interface FloatModel { public float getMaxValue(); public void setValue(float value); - - public void addCallback(Runnable callback); - - public void removeCallback(Runnable callback); + } diff --git a/twl/src/de/matthiasmann/twl/model/HasCallback.java b/twl/src/de/matthiasmann/twl/model/HasCallback.java index 6d729e0..2fde57b 100644 --- a/twl/src/de/matthiasmann/twl/model/HasCallback.java +++ b/twl/src/de/matthiasmann/twl/model/HasCallback.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -30,13 +30,14 @@ package de.matthiasmann.twl.model; import de.matthiasmann.twl.utils.CallbackSupport; +import de.matthiasmann.twl.utils.WithRunnableCallback; /** * A class to manage callbacks. * * @author Matthias Mann */ -public class HasCallback { +public class HasCallback implements WithRunnableCallback { private Runnable[] callbacks; diff --git a/twl/src/de/matthiasmann/twl/model/IntegerModel.java b/twl/src/de/matthiasmann/twl/model/IntegerModel.java index a963e83..7d29180 100644 --- a/twl/src/de/matthiasmann/twl/model/IntegerModel.java +++ b/twl/src/de/matthiasmann/twl/model/IntegerModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,12 +29,14 @@ */ package de.matthiasmann.twl.model; +import de.matthiasmann.twl.utils.WithRunnableCallback; + /** * A generic model for integer values. * * @author Matthias Mann */ -public interface IntegerModel { +public interface IntegerModel extends WithRunnableCallback { public int getValue(); @@ -43,8 +45,5 @@ public interface IntegerModel { public int getMaxValue(); public void setValue(int value); - - public void addCallback(Runnable callback); - public void removeCallback(Runnable callback); } diff --git a/twl/src/de/matthiasmann/twl/model/ListSelectionModel.java b/twl/src/de/matthiasmann/twl/model/ListSelectionModel.java new file mode 100644 index 0000000..a806a91 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/ListSelectionModel.java @@ -0,0 +1,75 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +/** + * Represents the selection of a list box or combo box. + * + * Implementation should not register callbacks on the list model. + * + * @param the data type of the list model + * @author Matthias Mann + */ +public interface ListSelectionModel extends IntegerModel { + + /** + * The index when nothing is selected + */ + public static final int NO_SELECTION = -1; + + public ListModel getListModel(); + + /** + * Returns the selected entry in the list or null if nothing is selected. + * @return the selected entry or null. + */ + public T getSelectedEntry(); + + /** + * Selects the specified entry or nothing if the entry was not found. + * + * This method behaves like {@code setSelectedEntry(entry, NO_SELECTION)} + * + * @param entry the entry to select - can be null. + * @return true if the entry was found + * @see #setSelectedEntry(java.lang.Object, int) + * @see #NO_SELECTION + */ + public boolean setSelectedEntry(T entry); + + /** + * Selects the specified entry or the default index if the entry was not found + * @param entry the entry to select - can be null. + * @param defaultIndex the index to select when the entry was not found + * @return true if the entry was found + * @see #NO_SELECTION + */ + public boolean setSelectedEntry(T entry, int defaultIndex); +} diff --git a/twl/src/de/matthiasmann/twl/model/ObservableCharSequence.java b/twl/src/de/matthiasmann/twl/model/ObservableCharSequence.java new file mode 100644 index 0000000..9f0c094 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/ObservableCharSequence.java @@ -0,0 +1,52 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +/** + * A {@link CharSequence} with change callback support. + * + * @author Matthias Mann + */ +public interface ObservableCharSequence extends CharSequence { + + public interface Callback { + /** + * The sequence has been modified. + * @param start the start offset of the change + * @param oldCount the number of characters which have been replaced + * @param newCount the number of new characters inserted + */ + public void charactersChanged(int start, int oldCount, int newCount); + } + + public void addCallback(Callback callback); + + public void removeCallback(Callback callback); +} diff --git a/twl/src/de/matthiasmann/twl/model/PersistentColorModel.java b/twl/src/de/matthiasmann/twl/model/PersistentColorModel.java new file mode 100644 index 0000000..ef91d84 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/PersistentColorModel.java @@ -0,0 +1,101 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +import de.matthiasmann.twl.Color; +import java.util.prefs.Preferences; + +/** + * A Persistent color model. + * + * @author Matthias Mann + */ +public class PersistentColorModel extends HasCallback implements ColorModel { + + private final Preferences prefs; + private final String prefKey; + + private Color value; + private IllegalArgumentException initialError; + + public PersistentColorModel(Preferences prefs, String prefKey, Color defaultValue) { + if(prefs == null) { + throw new NullPointerException("prefs"); + } + if(prefKey == null) { + throw new NullPointerException("prefKey"); + } + if(defaultValue == null) { + throw new NullPointerException("defaultValue"); + } + + this.prefs = prefs; + this.prefKey = prefKey; + this.value = defaultValue; + + try { + String text = prefs.get(prefKey, null); + if(text != null) { + Color aValue = Color.parserColor(text); + if(aValue != null) { + value = aValue; + } else { + initialError = new IllegalArgumentException("Unknown color name: " + text); + } + } + } catch (IllegalArgumentException ex) { + initialError = ex; + } + } + + public IllegalArgumentException getInitialError() { + return initialError; + } + + public void clearInitialError() { + initialError = null; + } + + public Color getValue() { + return value; + } + + public void setValue(Color value) { + if(this.value != value) { + this.value = value; + storeSettings(); + doCallback(); + } + } + + private void storeSettings() { + prefs.put(prefKey, value.toString()); + } +} diff --git a/twl/src/de/matthiasmann/twl/model/SimpleDateModel.java b/twl/src/de/matthiasmann/twl/model/SimpleDateModel.java new file mode 100644 index 0000000..d5ac23d --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/SimpleDateModel.java @@ -0,0 +1,63 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +/** + * A simple date model + * + * @author Matthias Mann + */ +public class SimpleDateModel extends HasCallback implements DateModel { + + private long date; + + /** + * Initializes the date to the current system date + * @see System#currentTimeMillis() + */ + public SimpleDateModel() { + this.date = System.currentTimeMillis(); + } + + public SimpleDateModel(long date) { + this.date = date; + } + + public long getValue() { + return date; + } + + public void setValue(long date) { + if(this.date != date) { + this.date = date; + doCallback(); + } + } +} diff --git a/twl/src/de/matthiasmann/twl/model/SimpleListSelectionModel.java b/twl/src/de/matthiasmann/twl/model/SimpleListSelectionModel.java new file mode 100644 index 0000000..ecd0680 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/SimpleListSelectionModel.java @@ -0,0 +1,100 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +/** + * A simple list selection model + * + * @param the data type of the list model + * @author Matthias Mann + */ +public class SimpleListSelectionModel extends HasCallback implements ListSelectionModel { + + private final ListModel listModel; + private int selected; + + public SimpleListSelectionModel(ListModel listModel) { + if(listModel == null) { + throw new NullPointerException("listModel"); + } + this.listModel = listModel; + } + + public ListModel getListModel() { + return listModel; + } + + public T getSelectedEntry() { + if(selected >= 0 && selected < listModel.getNumEntries()) { + return listModel.getEntry(selected); + } else { + return null; + } + } + + public boolean setSelectedEntry(T entry) { + return setSelectedEntry(entry, NO_SELECTION); + } + + public boolean setSelectedEntry(T entry, int defaultIndex) { + if(entry != null) { + for(int i=0,n=listModel.getNumEntries() ; i rows) { - insertRows(rows.size(), rows); + insertRows(this.rows.size(), rows); } public void insertRow(int index, Object ... data) { diff --git a/twl/src/de/matthiasmann/twl/model/StringAttributes.java b/twl/src/de/matthiasmann/twl/model/StringAttributes.java new file mode 100644 index 0000000..496a44e --- /dev/null +++ b/twl/src/de/matthiasmann/twl/model/StringAttributes.java @@ -0,0 +1,323 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.model; + +import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import de.matthiasmann.twl.renderer.AttributedString; +import java.util.ArrayList; +import java.util.BitSet; + +/** + * + * @author Matthias Mann + */ +public class StringAttributes implements AttributedString { + + private final CharSequence seq; + private final AnimationState baseAnimState; + private final ArrayList markers; + + private int position; + private int markerIdx; + + private StringAttributes(AnimationState baseAnimState, CharSequence seq) { + if(seq == null) { + throw new NullPointerException("seq"); + } + + this.seq = seq; + this.baseAnimState = baseAnimState; + this.markers = new ArrayList(); + } + + public StringAttributes(String text, AnimationState baseAnimState) { + this(baseAnimState, text); + } + + public StringAttributes(String text) { + this(text, null); + } + + public StringAttributes(ObservableCharSequence cs, AnimationState baseAnimState) { + this(baseAnimState, cs); + + cs.addCallback(new ObservableCharSequence.Callback() { + public void charactersChanged(int start, int oldCount, int newCount) { + if(start < 0) { + throw new IllegalArgumentException("start"); + } + if(oldCount > 0) { + delete(start, oldCount); + } + if(newCount > 0) { + insert(start, newCount); + } + } + }); + } + + public StringAttributes(ObservableCharSequence cs) { + this(cs, null); + } + + public char charAt(int index) { + return seq.charAt(index); + } + + public int length() { + return seq.length(); + } + + public CharSequence subSequence(int start, int end) { + return seq.subSequence(start, end); + } + + @Override + public String toString() { + return seq.toString(); + } + + public int getPosition() { + return position; + } + + public void setPosition(int pos) { + if(pos < 0 || pos > seq.length()) { + throw new IllegalArgumentException("pos"); + } + this.position = pos; + + int idx = find(pos); + if(idx >= 0) { + this.markerIdx = idx; + } else if(pos > lastMarkerPos()) { + this.markerIdx = markers.size(); + } else { + // select the marker to the left + this.markerIdx = (idx & IDX_MASK) - 1; + } + } + + public int advance() { + if(markerIdx+1 < markers.size()) { + markerIdx++; + position = markers.get(markerIdx).position; + } else { + position = seq.length(); + } + return position; + } + + public boolean getAnimationState(StateKey state) { + if(markerIdx >= 0 && markerIdx < markers.size()) { + Marker marker = markers.get(markerIdx); + int bitIdx = state.getID() << 1; + if(marker.get(bitIdx)) { + return marker.get(bitIdx+1); + } + } + if(baseAnimState != null) { + return baseAnimState.getAnimationState(state); + } + return false; + } + + public int getAnimationTime(StateKey state) { + if(baseAnimState != null) { + return baseAnimState.getAnimationTime(state); + } + return 0; + } + + public boolean getShouldAnimateState(StateKey state) { + if(baseAnimState != null) { + return baseAnimState.getShouldAnimateState(state); + } + return false; + } + + public void setAnimationState(StateKey key, int from, int end, boolean active) { + if(key == null) { + throw new NullPointerException("key"); + } + if(from > end) { + throw new IllegalArgumentException("negative range"); + } + if(from < 0 || end > seq.length()) { + throw new IllegalArgumentException("range outside of sequence"); + } + if(from == end) { + return; + } + int fromIdx = markerIndexAt(from); + int endIdx = markerIndexAt(end); + int bitIdx = key.getID() << 1; + for(int i=fromIdx ; i end) { + throw new IllegalArgumentException("negative range"); + } + if(from < 0 || end > seq.length()) { + throw new IllegalArgumentException("range outside of sequence"); + } + if(from == end) { + return; + } + int fromIdx = markerIndexAt(from); + int endIdx = markerIndexAt(end); + removeRange(fromIdx, endIdx, key); + } + + public void removeAnimationState(StateKey key) { + if(key == null) { + throw new NullPointerException("key"); + } + removeRange(0, markers.size(), key); + } + + private void removeRange(int start, int end, StateKey key) { + int bitIdx = key.getID() << 1; + for(int i=start ; i 1) { + Marker prev = markers.get(0); + for(int i=1 ; istartIdx ;) { + markers.remove(--idx); + } + } + + private int lastMarkerPos() { + int numMarkers = markers.size(); + if(numMarkers > 0) { + return markers.get(numMarkers-1).position; + } else { + return 0; + } + } + + private int markerIndexAt(int pos) { + int idx = find(pos); + if(idx < 0) { + idx &= IDX_MASK; + insertMarker(idx, pos); + } + return idx; + } + + private void insertMarker(int idx, int pos) { + Marker newMarker = new Marker(); + if(idx > 0) { + Marker leftMarker = markers.get(idx - 1); + assert leftMarker.position < pos; + newMarker.or(leftMarker); + } + newMarker.position = pos; + markers.add(idx, newMarker); + } + + private static final int NOT_FOUND = Integer.MIN_VALUE; + private static final int IDX_MASK = Integer.MAX_VALUE; + + private int find(int pos) { + int lo = 0; + int hi = markers.size(); + while(lo < hi) { + int mid = (lo + hi) >>> 1; + int markerPos = markers.get(mid).position; + if(pos < markerPos) { + hi = mid; + } else if(pos > markerPos) { + lo = mid + 1; + } else { + return mid; + } + } + return lo | NOT_FOUND; + } + + static class Marker extends BitSet { + int position; + } +} diff --git a/twl/src/de/matthiasmann/twl/model/StringModel.java b/twl/src/de/matthiasmann/twl/model/StringModel.java index 9c33c04..10fb915 100644 --- a/twl/src/de/matthiasmann/twl/model/StringModel.java +++ b/twl/src/de/matthiasmann/twl/model/StringModel.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,17 +29,17 @@ */ package de.matthiasmann.twl.model; +import de.matthiasmann.twl.utils.WithRunnableCallback; + /** * A string data model. * * @author Matthias Mann */ -public interface StringModel { +public interface StringModel extends WithRunnableCallback { + String getValue(); void setValue(String value); - - public void addCallback(Runnable callback); - - public void removeCallback(Runnable callback); + } diff --git a/twl/src/de/matthiasmann/twl/renderer/AnimationState.java b/twl/src/de/matthiasmann/twl/renderer/AnimationState.java index f3fdb6b..2f607b0 100644 --- a/twl/src/de/matthiasmann/twl/renderer/AnimationState.java +++ b/twl/src/de/matthiasmann/twl/renderer/AnimationState.java @@ -29,6 +29,7 @@ */ package de.matthiasmann.twl.renderer; +import java.util.ArrayList; import java.util.HashMap; /** @@ -75,6 +76,8 @@ public static final class StateKey { private static final HashMap keys = new HashMap(); + private static final ArrayList keysByID = + new ArrayList(); private StateKey(String name, int id) { this.name = name; @@ -131,9 +134,20 @@ public synchronized static StateKey get(String name) { if(key == null) { key = new StateKey(name, keys.size()); keys.put(name, key); + keysByID.add(key); } return key; } + + /** + * Returns the StateKey for the specified id. + * @param id the ID to lookup + * @return the StateKey + * @throws IndexOutOfBoundsException if the ID is invalid + */ + public synchronized static StateKey get(int id) { + return keysByID.get(id); + } public synchronized static int getNumStateKeys() { return keys.size(); diff --git a/twl/src/de/matthiasmann/twl/renderer/AnimationStateString.java b/twl/src/de/matthiasmann/twl/renderer/AnimationStateString.java new file mode 100644 index 0000000..a60436e --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/AnimationStateString.java @@ -0,0 +1,17 @@ +package de.matthiasmann.twl.renderer; + +import de.matthiasmann.twl.AnimationState; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; + +public class AnimationStateString extends AnimationState { + String stateKey; + + public AnimationStateString(String key) + { + stateKey = key; + } + + public boolean getAnimationState(StateKey stateKey) { + return stateKey.getName().contains(this.stateKey); // No, this might fuck up sometimes. But who cares, it works for what I'm doing. + } +} diff --git a/twl/src/de/matthiasmann/twl/renderer/AttributedString.java b/twl/src/de/matthiasmann/twl/renderer/AttributedString.java new file mode 100644 index 0000000..af84c7e --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/AttributedString.java @@ -0,0 +1,57 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +/** + * An attribute string which also works as an iterator. + * + * @author Matthias Mann + */ +public interface AttributedString extends CharSequence, AnimationState { + + /** + * Returns the current position of the attribute iterator + * @return the current position + */ + public int getPosition(); + + /** + * Changes the current position. + * @param pos the new position + * @throws IllegalArgumentException when {@code pos} is < 0 or > length() + */ + public void setPosition(int pos); + + /** + * Moves the current position forward to the next segment. + * @return the new position + */ + public int advance(); +} diff --git a/twl/src/de/matthiasmann/twl/renderer/AttributedStringFontCache.java b/twl/src/de/matthiasmann/twl/renderer/AttributedStringFontCache.java new file mode 100644 index 0000000..f2c3f44 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/AttributedStringFontCache.java @@ -0,0 +1,56 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +/** + * + * @author Matthias Mann + */ +public interface AttributedStringFontCache extends Resource { + + /** + * Returns the width in pixels of the cached text block + * @return the width in pixels of the cached text block + */ + public int getWidth(); + + /** + * Returns the height in pixels of the cached text block + * @return the height in pixels of the cached text block + */ + public int getHeight(); + + /** + * Draw the cached text block at the given coordinates + * @param x the left coordinate + * @param y the top coordinate + */ + public void draw(int x, int y); +} diff --git a/twl/src/de/matthiasmann/twl/renderer/DynamicImage.java b/twl/src/de/matthiasmann/twl/renderer/DynamicImage.java index 40a1a97..eb0f347 100644 --- a/twl/src/de/matthiasmann/twl/renderer/DynamicImage.java +++ b/twl/src/de/matthiasmann/twl/renderer/DynamicImage.java @@ -59,6 +59,17 @@ public enum Format { */ public void update(ByteBuffer data, Format format); + /** + * Updates the complete image. + * + * @param data The new texels + * @param stride The number of bytes from one row to the next + * @param format The format of the texel data + * @throws IllegalArgumentException if the ByteBuffer does not contain enough data + * or the stride is not a multiple of the bytes per pixel of specifed format + */ + public void update(ByteBuffer data, int stride, Format format); + /** * Updates a region of the image with new data. * @@ -72,5 +83,21 @@ public enum Format { * or the ByteBuffer does not contain enough data */ public void update(int xoffset, int yoffset, int width, int height, ByteBuffer data, Format format); + + /** + * Updates a region of the image with new data. + * + * @param xoffset Specifies a texel offset in the x direction within the image + * @param yoffset Specifies a texel offset in the y direction within the image + * @param width Specifies the width of the update area + * @param height Specifies the height of the update area + * @param data The new texels + * @param stride The number of bytes from one row to the next + * @param format The format of the texel data + * @throws IllegalArgumentException if the update area is not within the image bounds + * or the ByteBuffer does not contain enough data + * or the stride is not a multiple of the bytes per pixel of specifed format + */ + public void update(int xoffset, int yoffset, int width, int height, ByteBuffer data, int stride, Format format); } diff --git a/twl/src/de/matthiasmann/twl/renderer/Font.java b/twl/src/de/matthiasmann/twl/renderer/Font.java index 03ab938..886f532 100644 --- a/twl/src/de/matthiasmann/twl/renderer/Font.java +++ b/twl/src/de/matthiasmann/twl/renderer/Font.java @@ -38,6 +38,12 @@ */ public interface Font extends Resource { + /** + * Returns true if the font is proportional or false if it's fixed width. + * @return true if the font is proportional + */ + boolean isProportional(); + /** * Returns the base line of the font measured in pixels from the top of the text bounding box * @return the base line of the font measured in pixels from the top of the text bounding box @@ -50,6 +56,10 @@ public interface Font extends Resource { */ int getLineHeight(); + /** + * Returns the width of a ' ' + * @return the width of a ' ' + */ int getSpaceWidth(); /** @@ -100,7 +110,7 @@ public interface Font extends Resource { int computeVisibleGlpyhs(CharSequence str, int start, int end, int width); /** - * Draws multi line text - lines are spliited at '\n' + * Draws multi line text - lines are splitted at '\n' * @param as A time source for animation - may be null * @param x left coordinate of the text block * @param y top coordinate of the text block diff --git a/twl/src/de/matthiasmann/twl/renderer/Font2.java b/twl/src/de/matthiasmann/twl/renderer/Font2.java new file mode 100644 index 0000000..4739cfb --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/Font2.java @@ -0,0 +1,55 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +/** + * Extended font rendering API + * + * @author Matthias Mann + */ +public interface Font2 extends Font { + + int drawText(int x, int y, AttributedString attributedString); + + int drawText(int x, int y, AttributedString attributedString, int start, int end); + + void drawMultiLineText(int x, int y, AttributedString attributedString); + + void drawMultiLineText(int x, int y, AttributedString attributedString, int start, int end); + + AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, AttributedString attributedString); + + AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, AttributedString attributedString, int start, int end); + + AttributedStringFontCache cacheMultiLineText(AttributedStringFontCache prevCache, AttributedString attributedString); + + AttributedStringFontCache cacheMultiLineText(AttributedStringFontCache prevCache, AttributedString attributedString, int start, int end); + +} diff --git a/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java b/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java new file mode 100644 index 0000000..ff1e51c --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/OffscreenRenderer.java @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +/** + * An interface to allow offscreen rendering for special effects + * + * @author Matthias Mann + */ +public interface OffscreenRenderer { + + /** + * Starts offscreen rendering. All following rendering operations will render + * into the returned offscreen surface. Rendering outside the specified area + * will be ignored. + * + * @param oldSurface the previous offscreen surface to reuse / overwrite + * @param x the X coordinate of the region, can be negative. + * @param y the Y coordinate of the region, can be negative. + * @param width the width, can be larger then the screen size + * @param height the height, can be larger then the screen size + * @return the OffscreenSurface or null if offscreen rendering could not be started. + */ + public OffscreenSurface startOffscreenRendering(OffscreenSurface oldSurface, + int x, int y, int width, int height); + + /** + * Ends the current offscreen rendering. + * Only call this method after a sucessful call of + * {@link #startOffscreenRendering(de.matthiasmann.twl.renderer.OffscreenSurface, int, int, int, int) } + */ + public void endOffscreenRendering(); +} diff --git a/twl/src/de/matthiasmann/twl/renderer/OffscreenSurface.java b/twl/src/de/matthiasmann/twl/renderer/OffscreenSurface.java new file mode 100644 index 0000000..612cbe0 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/OffscreenSurface.java @@ -0,0 +1,42 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer; + +/** + * An offscreen surface. + * + *

    It exposes all Image methods, in order to do special effects + * you need to cast this to the implementation

    . + * + * @author Matthias Mann + */ +public interface OffscreenSurface extends Resource, Image { + +} diff --git a/twl/src/de/matthiasmann/twl/renderer/Renderer.java b/twl/src/de/matthiasmann/twl/renderer/Renderer.java index bd86713..6488f0d 100644 --- a/twl/src/de/matthiasmann/twl/renderer/Renderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/Renderer.java @@ -56,11 +56,11 @@ public interface Renderer { * must be called.

    * @return true if rendering was started, false otherwise */ - public boolean startRenderering(); + public boolean startRendering(); /** * Clean up after rendering TWL. - * Only call this method when {@link #startRenderering()} returned {@code true} + * Only call this method when {@link #startRendering()} returned {@code true} */ public void endRendering(); @@ -133,6 +133,15 @@ public interface Renderer { */ public LineRenderer getLineRenderer(); + /** + * Returns the offscreen renderer. If offscreen rendering is not supported then this method returns null. + * + * This is an optional operation. + * + * @return the offscreen renderer or null if not supported. + */ + public OffscreenRenderer getOffscreenRenderer(); + /** * Creates a dynamic image with undefined content. * @@ -143,13 +152,43 @@ public interface Renderer { * @return a new dynamic image or null if the image could not be created */ public DynamicImage createDynamicImage(int width, int height); - + /** - * Sets the clipping area for all rendering operations. - * @param rect A rectangle or null to disable clipping. + * Enters a clip region. + * + * The new clip region is the intersection of the current clip region with + * the specified coordinates. + * + * @param x the left edge + * @param y the top edge + * @param w the width + * @param h the height */ - public void setClipRect(Rect rect); - + public void clipEnter(int x, int y, int w, int h); + + /** + * Enters a clip region. + * + * The new clip region is the intersection of the current clip region with + * the specified coordinates. + * + * @param rect the coordinates + */ + public void clipEnter(Rect rect); + + /** + * Checks if the active clip region is empty (nothing will render). + * @return true if the active clip region is empty + */ + public boolean clipIsEmpty(); + + /** + * Leaves a clip region creeated by {@code #clipEnter} + * @see #clipEnter(int, int, int, int) + * @see #clipEnter(de.matthiasmann.twl.Rect) + */ + public void clipLeave(); + public void setCursor(MouseCursor cursor); /** diff --git a/twl/src/de/matthiasmann/twl/renderer/Texture.java b/twl/src/de/matthiasmann/twl/renderer/Texture.java index dcc4c8e..34952b6 100644 --- a/twl/src/de/matthiasmann/twl/renderer/Texture.java +++ b/twl/src/de/matthiasmann/twl/renderer/Texture.java @@ -57,11 +57,12 @@ public interface Texture extends Resource { * @param width width in pixels of the image - if negative the image is horizontaly flipped * @param height height in pixels of the image - if negative the image is vertically flipped * @param tintColor the tintColor - maybe null - * @param tiled truw if this image should do tiled rendering + * @param tiled true if this image should do tiled rendering + * @param rotation the rotation to apply to this sub section while rendering * @see Image#createTintedVersion(de.matthiasmann.twl.Color) * @return an image object */ - public Image getImage(int x, int y, int width, int height, Color tintColor, boolean tiled); + public Image getImage(int x, int y, int width, int height, Color tintColor, boolean tiled, Rotation rotation); public MouseCursor createCursor(int x, int y, int width, int height, int hotSpotX, int hotSpotY, Image imageRef); @@ -69,4 +70,11 @@ public interface Texture extends Resource { * After calling this function getImage() and createCursor() may fail to work */ public void themeLoadingDone(); + + public enum Rotation { + NONE, + CLOCKWISE_90, + CLOCKWISE_180, + CLOCKWISE_270 + } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java index b1d0395..f3ca1e5 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/BitmapFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -40,13 +40,15 @@ import java.io.InputStreamReader; import java.io.Reader; import java.net.URL; +import java.nio.FloatBuffer; import java.util.HashMap; import org.lwjgl.opengl.GL11; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; /** - * A Bitmap Font class. Parses the output of AngelCode's BMFont tool. + * A Bitmap Font class. Renders fonts generated by TWL Theme Editor's + * "Create font" tool. * * @author Matthias Mann */ @@ -63,12 +65,21 @@ static class Glyph extends TextureAreaBase { byte[][] kerning; public Glyph(int x, int y, int width, int height, int texWidth, int texHeight) { - super(x, y, width, height, texWidth, texHeight); + super(x, y, (height <= 0) ? 0 : width, height, texWidth, texHeight); } void draw(int x, int y) { drawQuad(x+xoffset, y+yoffset, width, height); } + + void draw(FloatBuffer va, int x, int y) { + x += xoffset; + y += yoffset; + va.put(tx0).put(ty0).put(x ).put(y); + va.put(tx0).put(ty1).put(x ).put(y + height); + va.put(tx1).put(ty1).put(x + width).put(y + height); + va.put(tx1).put(ty0).put(x + width).put(y); + } int getKerning(char ch) { if(kerning != null) { @@ -98,6 +109,7 @@ void setKerning(int ch, int value) { private final int baseLine; private final int spaceWidth; private final int ex; + private final boolean proportional; public BitmapFont(LWJGLRenderer renderer, XMLParser xmlp, URL baseUrl) throws XmlPullParserException, IOException { xmlp.require(XmlPullParser.START_TAG, null, "font"); @@ -138,6 +150,9 @@ public BitmapFont(LWJGLRenderer renderer, XMLParser xmlp, URL baseUrl) throws Xm xmlp.ignoreOtherAttributes(); xmlp.nextTag(); + int firstXAdvance = Integer.MIN_VALUE; + boolean prop = true; + glyphs = new Glyph[PAGES][]; while(!xmlp.isEndTag()) { xmlp.require(XmlPullParser.START_TAG, null, "char"); @@ -158,6 +173,13 @@ public BitmapFont(LWJGLRenderer renderer, XMLParser xmlp, URL baseUrl) throws Xm xmlp.nextTag(); xmlp.require(XmlPullParser.END_TAG, null, "char"); xmlp.nextTag(); + if(g.xadvance != firstXAdvance && g.xadvance > 0) { + if(firstXAdvance == Integer.MIN_VALUE) { + firstXAdvance = g.xadvance; + } else { + prop = false; + } + } } xmlp.require(XmlPullParser.END_TAG, null, "chars"); @@ -186,6 +208,8 @@ public BitmapFont(LWJGLRenderer renderer, XMLParser xmlp, URL baseUrl) throws Xm Glyph gx = getGlyph('x'); ex = (gx != null) ? gx.height : 1; + + proportional = prop; } public BitmapFont(LWJGLRenderer renderer, Reader reader, URL baseUrl) throws IOException { @@ -210,6 +234,8 @@ public BitmapFont(LWJGLRenderer renderer, Reader reader, URL baseUrl) throws IOE this.glyphs = new Glyph[PAGES][]; parseFntLine(parseFntLine(br, "chars"), params); int charCount = parseInt(params, "count"); + int firstXAdvance = Integer.MIN_VALUE; + boolean prop = true; for(int charIdx=0 ; charIdx 0) { + if(firstXAdvance == Integer.MIN_VALUE) { + firstXAdvance = g.xadvance; + } else { + prop = false; + } + } } parseFntLine(parseFntLine(br, "kernings"), params); int kerningCount = parseInt(params, "count"); @@ -241,6 +275,8 @@ public BitmapFont(LWJGLRenderer renderer, Reader reader, URL baseUrl) throws IOE Glyph gx = getGlyph('x'); ex = (gx != null) ? gx.height : 1; + + this.proportional = prop; } public static BitmapFont loadFont(LWJGLRenderer renderer, URL url) throws IOException { @@ -268,6 +304,10 @@ public static BitmapFont loadFont(LWJGLRenderer renderer, URL url) throws IOExce } } } + + public boolean isProportional() { + return proportional; + } public int getBaseLine() { return baseLine; @@ -313,7 +353,7 @@ private void addKerning(int first, int second, int amount) { } } - private Glyph getGlyph(char ch) { + final Glyph getGlyph(char ch) { Glyph[] page = glyphs[ch >> LOG2_PAGE_SIZE]; if(page != null) { return page[ch & (PAGE_SIZE-1)]; @@ -355,10 +395,17 @@ public int computeVisibleGlpyhs(CharSequence str, int start, int end, int availW width += lastGlyph.getKerning(ch); } lastGlyph = g; - if(width + g.width + g.xoffset > availWidth) { - break; + if(proportional) { + width += g.xadvance; + if(width > availWidth) { + break; + } + } else { + if(width + g.width + g.xoffset > availWidth) { + break; + } + width += g.xadvance; } - width += g.xadvance; } } return index - start; @@ -370,7 +417,9 @@ protected int drawText(int x, int y, CharSequence str, int start, int end) { while(start < end) { lastGlyph = getGlyph(str.charAt(start++)); if(lastGlyph != null) { - lastGlyph.draw(x, y); + if(lastGlyph.width > 0) { + lastGlyph.draw(x, y); + } x += lastGlyph.xadvance; break; } @@ -381,7 +430,9 @@ protected int drawText(int x, int y, CharSequence str, int start, int end) { if(g != null) { x += lastGlyph.getKerning(ch); lastGlyph = g; - g.draw(x, y); + if(g.width > 0) { + g.draw(x, y); + } x += g.xadvance; } } @@ -514,6 +565,10 @@ public FontCache cacheText(LWJGLFontCache cache, CharSequence str, int start, in return null; } + boolean bind() { + return texture.bind(); + } + protected boolean prepare() { if(texture.bind()) { GL11.glBegin(GL11.GL_QUADS); diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java new file mode 100644 index 0000000..d0afd5a --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLAttributedStringFontCache.java @@ -0,0 +1,159 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer.lwjgl; + +import de.matthiasmann.twl.renderer.AttributedStringFontCache; +import de.matthiasmann.twl.renderer.lwjgl.LWJGLFont.FontState; +import java.nio.FloatBuffer; +import org.lwjgl.BufferUtils; +import org.lwjgl.opengl.GL11; + +/** + * + * @author Matthias Mann + */ +public class LWJGLAttributedStringFontCache implements AttributedStringFontCache { + + final LWJGLRenderer renderer; + final BitmapFont font; + int width; + int height; + FloatBuffer va; + private Run[] runs; + private int numRuns; + + public LWJGLAttributedStringFontCache(LWJGLRenderer renderer, BitmapFont font) { + this.renderer = renderer; + this.font = font; + this.runs = new Run[8]; + } + + void allocateVA(int maxGlyphs) { + int capacity = 4 * 4 * maxGlyphs; + if(va == null || va.capacity() < capacity) { + va = BufferUtils.createFloatBuffer(capacity); + } + va.clear(); + numRuns = 0; + } + + Run addRun() { + if(runs.length == numRuns) { + grow(); + } + Run run = runs[numRuns]; + if(run == null) { + run = new Run(); + runs[numRuns] = run; + } + numRuns++; + return run; + } + + private void grow() { + Run[] newRuns = new Run[numRuns * 2]; + System.arraycopy(runs, 0, newRuns, 0, numRuns); + runs = newRuns; + } + + public void destroy() { + } + + public int getWidth() { + return width; + } + + public int getHeight() { + return height; + } + + public void draw(int x, int y) { + if(font.bind()) { + va.position(2); + GL11.glVertexPointer(2, 4*4, va); + va.position(0); + GL11.glTexCoordPointer(2, 4*4, va); + GL11.glEnableClientState(GL11.GL_VERTEX_ARRAY); + GL11.glEnableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, 0f); + final TintStack tintStack = renderer.tintStack; + + try { + int idx = 0; + for(int i=0 ; i 0) { + GL11.glDrawArrays(GL11.GL_QUADS, idx, numVertices); + idx += numVertices; + } + + if(state.style != 0) { + drawLines(run); + } + } + } finally { + GL11.glPopMatrix(); + GL11.glDisableClientState(GL11.GL_VERTEX_ARRAY); + GL11.glDisableClientState(GL11.GL_TEXTURE_COORD_ARRAY); + } + } + } + + private void drawLines(Run run) { + final FontState state = run.state; + + if((state.style & LWJGLFont.STYLE_UNDERLINE) != 0) { + font.drawLine( + run.x, + run.y + font.getBaseLine() + state.underlineOffset, + run.xend); + } + if((state.style & LWJGLFont.STYLE_LINETHROUGH) != 0) { + font.drawLine( + run.x, + run.y + font.getLineHeight()/2, + run.xend); + } + } + + static class Run { + LWJGLFont.FontState state; + int numVertices; + int x; + int xend; + int y; + } +} diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java index c3c56ea..a961579 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.java @@ -67,10 +67,18 @@ public void destroy() { } public void update(ByteBuffer data, Format format) { - update(0, 0, width, height, data, format); + update(0, 0, width, height, data, width*4, format); + } + + public void update(ByteBuffer data, int stride, Format format) { + update(0, 0, width, height, data, stride, format); } public void update(int xoffset, int yoffset, int width, int height, ByteBuffer data, Format format) { + update(xoffset, yoffset, width, height, data, width*4, format); + } + + public void update(int xoffset, int yoffset, int width, int height, ByteBuffer data, int stride, Format format) { if(xoffset < 0 || yoffset < 0 || getWidth() <= 0 || getHeight() <= 0) { throw new IllegalArgumentException("Negative offsets or size <= 0"); } @@ -86,12 +94,20 @@ public void update(int xoffset, int yoffset, int width, int height, ByteBuffer d if(format == null) { throw new NullPointerException("format"); } - if(data.remaining() < width*height*4) { + if(stride < 0 || (stride & 3) != 0) { + throw new IllegalArgumentException("stride"); + } + if(stride < width*4) { + throw new IllegalArgumentException("stride too short for width"); + } + if(data.remaining() < stride*(height-1)+width*4) { throw new IllegalArgumentException("Not enough data remaining in the buffer"); } int glFormat = (format == Format.RGBA) ? GL11.GL_RGBA : GL12.GL_BGRA; bind(); + GL11.glPixelStorei(GL11.GL_UNPACK_ROW_LENGTH, stride/4); GL11.glTexSubImage2D(target, 0, xoffset, yoffset, width, height, glFormat, GL11.GL_UNSIGNED_BYTE, data); + GL11.glPixelStorei(GL11.GL_UNPACK_ROW_LENGTH, 0); } public Image createTintedVersion(Color color) { diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java index 623dc7f..462d7a4 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -32,65 +32,99 @@ import de.matthiasmann.twl.Color; import de.matthiasmann.twl.HAlignment; import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.AttributedString; +import de.matthiasmann.twl.renderer.AttributedStringFontCache; import de.matthiasmann.twl.renderer.Font; +import de.matthiasmann.twl.renderer.Font2; import de.matthiasmann.twl.renderer.FontCache; import de.matthiasmann.twl.renderer.FontParameter; import de.matthiasmann.twl.utils.StateExpression; -import java.util.ArrayList; +import de.matthiasmann.twl.utils.StateSelect; +import de.matthiasmann.twl.utils.TextUtil; import java.util.Collection; -import java.util.HashMap; import java.util.Map; /** * * @author Matthias Mann */ -public class LWJGLFont implements Font { +public class LWJGLFont implements Font, Font2 { static final int STYLE_UNDERLINE = 1; static final int STYLE_LINETHROUGH = 2; private final LWJGLRenderer renderer; private final BitmapFont font; - private final FontState[] fontStates; + public final FontState[] fontStates; + private final StateSelect stateSelect; private int[] multiLineInfo; + + public LWJGLFont clone() + { + return new LWJGLFont(this); + } + + private LWJGLFont(LWJGLFont oldFont) + { + renderer = oldFont.renderer; + font = oldFont.font; + stateSelect = oldFont.stateSelect; + fontStates = new FontState[oldFont.fontStates.length]; + for (int i = 0; i < fontStates.length; i++) { + FontState oldState = oldFont.fontStates[i]; + fontStates[i] = new FontState(oldState.color,oldState.offsetX,oldState.offsetY,oldState.style,oldState.underlineOffset); + } + } LWJGLFont(LWJGLRenderer renderer, BitmapFont font, Map params, Collection condParams) { this.renderer = renderer; this.font = font; + + StateExpression[] expr = new StateExpression[condParams.size()]; + fontStates = new FontState[expr.length + 1]; - ArrayList states = new ArrayList(); + int idx = 0; for(FontParameter p : condParams) { - HashMap effective = new HashMap(params); - effective.putAll(p.getParams()); - states.add(createFontState(p.getCondition(), effective)); + fontStates[idx] = createFontState(p.getParams(), params); + expr[idx++] = p.getCondition(); } - states.add(createFontState(null, params)); - this.fontStates = states.toArray(new FontState[states.size()]); + fontStates[idx] = createFontState(params, null); + stateSelect = new StateSelect(expr); } - private FontState createFontState(StateExpression cond, Map params) { - String colorStr = params.get("color"); + private FontState createFontState(Map params, Map baseParams) { + String colorStr = get(params, baseParams, "color"); + Color color; if(colorStr == null) { - throw new IllegalArgumentException("color needs to be defined"); + color = Color.WHITE; + } else { + color = Color.parserColor(colorStr); + if(color == null) { + throw new IllegalArgumentException("unknown color name: " + colorStr); + } } - int offsetX = parseInt(params.get("offsetX"), 0); - int offsetY = parseInt(params.get("offsetY"), 0); + int offsetX = parseInt(get(params, baseParams, "offsetX"), 0); + int offsetY = parseInt(get(params, baseParams, "offsetY"), 0); int style = 0; - int underlineOffset = parseInt(params.get("underlineOffset"), 0); - Color color = Color.parserColor(colorStr); - if(color == null) { - throw new IllegalArgumentException("unknown color name: " + colorStr); - } - if(parseBoolean(params.get("underline"))) { + int underlineOffset = parseInt(get(params, baseParams, "underlineOffset"), 0); + if(parseBoolean(get(params, baseParams, "underline"))) { style |= STYLE_UNDERLINE; } - if(parseBoolean(params.get("linethrough"))) { + if(parseBoolean(get(params, baseParams, "linethrough"))) { style |= STYLE_LINETHROUGH; } - FontState p = new FontState(cond, color, offsetX, offsetY, style, underlineOffset); + FontState p = new FontState(color, offsetX, offsetY, style, underlineOffset); return p; } + + private static String get(Map params, Map baseParams, String key) { + String value = params.get(key); + // use contains to mimick behavior of putAll + if(value == null && baseParams != null && !params.containsKey(key)) { + value = baseParams.get(key); + } + return value; + } private static int parseInt(String valueStr, int defaultValue) { if(valueStr == null) { @@ -105,15 +139,9 @@ private static boolean parseBoolean(String valueStr) { } return Boolean.parseBoolean(valueStr); } - - FontState evalFontState(AnimationState as) { - int i = 0; - for(int n=fontStates.length-1 ; i 0) { + g.draw(x, y); + } + x += g.xadvance; + } + } + drawLine(fontState, x, y, x - runStart); + x -= fontState.offsetX; + y -= fontState.offsetY; + if(multiLine && start < end && attributedString.charAt(start) == '\n') { + attributedString.setPosition(++start); + x = startX; + y += font.getLineHeight(); + lastGlyph = null; + } + }while(start < end); + } finally { + font.cleanup(); + } + return x - startX; } - public int getEM() { - return font.getEM(); + public AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, AttributedString attributedString) { + return cacheText(prevCache, attributedString, 0, attributedString.length(), false); } - public int getEX() { - return font.getEX(); + public AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, AttributedString attributedString, int start, int end) { + return cacheText(prevCache, attributedString, start, end, false); } - public void destroy() { - font.destroy(); + public AttributedStringFontCache cacheMultiLineText(AttributedStringFontCache prevCache, AttributedString attributedString) { + return cacheText(prevCache, attributedString, 0, attributedString.length(), true); + } + + public AttributedStringFontCache cacheMultiLineText(AttributedStringFontCache prevCache, AttributedString attributedString, int start, int end) { + return cacheText(prevCache, attributedString, start, end, true); + } + + private AttributedStringFontCache cacheText(AttributedStringFontCache prevCache, AttributedString attributedString, int start, int end, boolean multiLine) { + if(end <= start) { + return null; + } + LWJGLAttributedStringFontCache cache = (LWJGLAttributedStringFontCache)prevCache; + if(cache == null) { + cache = new LWJGLAttributedStringFontCache(renderer, font); + } + cache.allocateVA(end - start); + attributedString.setPosition(start); + BitmapFont.Glyph lastGlyph = null; + int x = 0; + int y = 0; + int width = 0; + do{ + final FontState fontState = evalFontState(attributedString); + + x += fontState.offsetX; + y += fontState.offsetY; + int runLength = 0; + int xStart = x; + + int nextStop = Math.min(end, attributedString.advance()); + while(nextStop < end && fontState == evalFontState(attributedString)) { + nextStop = Math.min(end, attributedString.advance()); + } + + if(multiLine) { + nextStop = TextUtil.indexOf(attributedString, '\n', start, nextStop); + } + + while(start < nextStop) { + char ch = attributedString.charAt(start++); + BitmapFont.Glyph g = font.getGlyph(ch); + if(g != null) { + if(lastGlyph != null) { + x += lastGlyph.getKerning(ch); + } + lastGlyph = g; + if(g.width > 0 && g.height > 0) { + g.draw(cache.va, x, y); + runLength++; + } + x += g.xadvance; + } + } + + x -= fontState.offsetX; + y -= fontState.offsetY; + + if(runLength > 0 || fontState.style != 0) { + LWJGLAttributedStringFontCache.Run run = cache.addRun(); + run.state = fontState; + run.numVertices = runLength * 4; + run.x = xStart; + run.xend = x; + run.y = y; + } + + if(multiLine && start < end && attributedString.charAt(start) == '\n') { + attributedString.setPosition(++start); + width = Math.max(width, x); + x = 0; + y += font.getLineHeight(); + lastGlyph = null; + } + }while(start < end); + + if(x > 0) { + width = Math.max(width, x); + y += font.getLineHeight(); + } + + cache.width = width; + cache.height = y; + return cache; } - static class FontState { - final StateExpression condition; - final Color color; - final int offsetX; - final int offsetY; - final int style; - final int underlineOffset; - - public FontState(StateExpression condition, Color color, int offsetX, int offsetY, int style, int underlineOffset) { - this.condition = condition; + public static class FontState { + Color color; + int offsetX; + int offsetY; + int style; + int underlineOffset; + + public FontState(Color color, int offsetX, int offsetY, int style, int underlineOffset) { this.color = color; this.offsetX = offsetX; this.offsetY = offsetY; this.style = style; this.underlineOffset = underlineOffset; } + + public Color getColor() { + return color; + } + + public boolean getLineThrough() { + return (style & 2) == 2; + } + + public int getOffsetX() { + return offsetX; + } + + public int getOffsetY() { + return offsetY; + } + + public boolean getUnderline() { + return (style & 1) == 1; + } + + public int getUnderlineOffset() { + return underlineOffset; + } + + public void setColor(Color col) { + color = col; + } + + public void setUnderlineOffset(int i) { + underlineOffset = i; + } + + public void setUnderline(boolean val) { + if (getUnderline() != val) { + style ^= 1; + } + } + + public void setOffsetY(int i) { + offsetY = i; + } + + public void setOffsetX(int i) { + offsetX = i; + } + + public void setLineThrough(boolean val) { + if (getLineThrough() != val) { + style ^= 2; + } + } } } diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java index 49fdeb9..5bfa7d3 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -40,8 +40,10 @@ import de.matthiasmann.twl.renderer.MouseCursor; import de.matthiasmann.twl.renderer.Font; import de.matthiasmann.twl.renderer.LineRenderer; +import de.matthiasmann.twl.renderer.OffscreenRenderer; import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.renderer.Texture; +import de.matthiasmann.twl.utils.ClipStack; import java.io.IOException; import java.net.URL; import java.nio.ByteBuffer; @@ -81,7 +83,7 @@ public class LWJGLRenderer implements Renderer, LineRenderer { final int maxTextureSize; private int viewportX; - private int viewportY; + private int viewportBottom; private int width; private int height; private boolean hasScissor; @@ -96,16 +98,23 @@ public class LWJGLRenderer implements Renderer, LineRenderer { final SWCursorAnimState swCursorAnimState; final ArrayList textureAreas; + final ArrayList rotatedTextureAreas; final ArrayList dynamicImages; TintStack tintStack; - + + protected final ClipStack clipStack; + protected final Rect clipRectTemp; + @SuppressWarnings("OverridableMethodCallInConstructor") public LWJGLRenderer() throws LWJGLException { this.ib16 = BufferUtils.createIntBuffer(16); this.textureAreas = new ArrayList(); + this.rotatedTextureAreas = new ArrayList(); this.dynamicImages = new ArrayList(); this.tintStateRoot = new TintStack(); this.tintStack = tintStateRoot; + this.clipStack = new ClipStack(); + this.clipRectTemp = new Rect(); syncViewportSize(); GL11.glGetInteger(GL11.GL_MAX_TEXTURE_SIZE, ib16); @@ -181,8 +190,12 @@ public void setActiveCacheContext(CacheContext cc) throws IllegalStateException for(TextureArea ta : textureAreas) { ta.destroyRepeatCache(); } + for(TextureAreaRotated tar : rotatedTextureAreas) { + tar.destroyRepeatCache(); + } } finally { textureAreas.clear(); + rotatedTextureAreas.clear(); } } @@ -203,9 +216,26 @@ public void syncViewportSize() { ib16.clear(); GL11.glGetInteger(GL11.GL_VIEWPORT, ib16); viewportX = ib16.get(0); - viewportY = ib16.get(1); width = ib16.get(2); height = ib16.get(3); + viewportBottom = ib16.get(1) + height; + } + + /** + * Sets the viewport size & position. + *

    This method is preferred over {@link #syncViewportSize() } as it avoids + * calling {@link GL11#glGetInteger(int, java.nio.IntBuffer) }.

    + * + * @param x the X position (GL_VIEWPORT index 0) + * @param y the Y position (GL_VIEWPORT index 1) + * @param width the width (GL_VIEWPORT index 2) + * @param height the height (GL_VIEWPORT index 3) + */ + public void setViewport(int x, int y, int width, int height) { + this.viewportX = x; + this.viewportBottom = y + height; + this.width = width; + this.height = height; } public long getTimeMillis() { @@ -216,18 +246,8 @@ public long getTimeMillis() { } return time; } - - /** - * Setup GL to start rendering the GUI. It assumes default GL state. - */ - public boolean startRenderering() { - if(width <= 0 || height <= 0) { - return false; - } - - hasScissor = false; - tintStack = tintStateRoot; - + + protected void setupGLState() { GL11.glPushAttrib(GL11.GL_ENABLE_BIT|GL11.GL_TRANSFORM_BIT|GL11.GL_HINT_BIT| GL11.GL_COLOR_BUFFER_BIT|GL11.GL_SCISSOR_BIT|GL11.GL_LINE_BIT|GL11.GL_TEXTURE_BIT); GL11.glMatrixMode(GL11.GL_PROJECTION); @@ -242,23 +262,56 @@ public boolean startRenderering() { GL11.glEnable(GL11.GL_LINE_SMOOTH); GL11.glDisable(GL11.GL_DEPTH_TEST); GL11.glDisable(GL11.GL_LIGHTING); + GL11.glDisable(GL11.GL_SCISSOR_TEST); GL11.glBlendFunc(GL11.GL_SRC_ALPHA, GL11.GL_ONE_MINUS_SRC_ALPHA); GL11.glHint(GL11.GL_LINE_SMOOTH_HINT, GL11.GL_NICEST); - RenderScale.doscale(); + } + + protected void revertGLState() { + GL11.glPopMatrix(); + GL11.glMatrixMode(GL11.GL_PROJECTION); + GL11.glPopMatrix(); + GL11.glPopAttrib(); + } + + /** + * Setup GL to start rendering the GUI. It assumes default GL state. + */ + public boolean startRendering() { + if(width <= 0 || height <= 0) { + return false; + } + prepareForRendering(); + setupGLState(); + RenderScale.doscale(); return true; } public void endRendering() { - if(swCursor != null) { - tintStack = tintStateRoot; - swCursor.render(mouseX, mouseY); - } + renderSWCursor(); RenderScale.descale(); - GL11.glPopMatrix(); - GL11.glMatrixMode(GL11.GL_PROJECTION); - GL11.glPopMatrix(); - GL11.glPopAttrib(); + revertGLState(); + } + + /** + * Call to revert the GL state to the state before calling + * {@link #startRendering()}. + * @see #resumeRendering() + */ + public void pauseRendering() { + RenderScale.descale(); + revertGLState(); + } + + /** + * Resume rendering after a call to {@link #pauseRendering()}. + */ + public void resumeRendering() { + hasScissor = false; + setupGLState(); + RenderScale.doscale(); + setClipRect(); } public int getHeight() { @@ -268,13 +321,49 @@ public int getHeight() { public int getWidth() { return width; } + + /** + * Retrieves the X position of the OpenGL viewport (index 0 of GL_VIEWPORT) + * @return the X position of the OpenGL viewport + */ + public int getViewportX() { + return viewportX; + } + + /** + * Retrieves the Y position of the OpenGL viewport (index 1 of GL_VIEWPORT) + * @return the Y position of the OpenGL viewport + */ + public int getViewportY() { + return viewportBottom - height; + } - public Font loadFont(URL baseUrl, Map parameter, Collection conditionalParameter) throws IOException { + /** + * Loads a font (either BMFont XML or ASCII format). + *

    If the parameter @code "filename"} is specified then it will be resolved + * against the specified URL, otherwise the URL is used directly.

    + *

    The parameter {@code "color"} is required and must be in a format + * parsable by {@link Color#parserColor(java.lang.String)}

    + * @param url the url for the font file + * @param parameter a list of parameters for loading this font + * @param conditionalParameter condition parameters for use with {@link AnimationState} + * @return a Font object + * @throws IOException if the font could not be loaded + */ + public Font loadFont(URL url, Map parameter, Collection conditionalParameter) throws IOException { + if(url == null) { + throw new NullPointerException("url"); + } + if(parameter == null) { + throw new NullPointerException("parameter"); + } + if(conditionalParameter == null) { + throw new NullPointerException("conditionalParameter"); + } String fileName = parameter.get("filename"); - if(fileName == null) { - throw new IllegalArgumentException("filename parameter required"); + if(fileName != null) { + url = new URL(url, fileName); } - URL url = new URL(baseUrl, fileName); BitmapFont bmFont = activeCacheContext().loadBitmapFont(url); return new LWJGLFont(this, bmFont, parameter, conditionalParameter); } @@ -303,6 +392,10 @@ public LineRenderer getLineRenderer() { return this; } + public OffscreenRenderer getOffscreenRenderer() { + return null; + } + public DynamicImage createDynamicImage(int width, int height) { if(width <= 0) { throw new IllegalArgumentException("width"); @@ -349,30 +442,36 @@ public DynamicImage createDynamicImage(int width, int height) { return image; } - public void setClipRect(Rect rect) { - if(rect == null) { - GL11.glDisable(GL11.GL_SCISSOR_TEST); - hasScissor = false; - } else { - GL11.glScissor(viewportX + rect.getX()*RenderScale.scale, viewportY + getHeight() - rect.getBottom()*RenderScale.scale, rect.getWidth()*RenderScale.scale, rect.getHeight()*RenderScale.scale); - if(!hasScissor) { - GL11.glEnable(GL11.GL_SCISSOR_TEST); - hasScissor = true; - } - } + public void clipEnter(int x, int y, int w, int h) { + clipStack.push(x, y, w, h); + setClipRect(); + } + + public void clipEnter(Rect rect) { + clipStack.push(rect); + setClipRect(); + } + + public void clipLeave() { + clipStack.pop(); + setClipRect(); + } + + public boolean clipIsEmpty() { + return clipStack.isClipEmpty(); } public void setCursor(MouseCursor cursor) { try { - if(Mouse.isInsideWindow()) { - swCursor = null; + swCursor = null; + if(isMouseInsideWindow()) { if(cursor instanceof LWJGLCursor) { - Mouse.setNativeCursor(((LWJGLCursor)cursor).cursor); + setNativeCursor(((LWJGLCursor)cursor).cursor); } else if(cursor instanceof SWCursor) { - Mouse.setNativeCursor(emptyCursor); + setNativeCursor(emptyCursor); swCursor = (SWCursor)cursor; } else { - Mouse.setNativeCursor(null); + setNativeCursor(null); } } } catch(LWJGLException ex) { @@ -413,6 +512,15 @@ public void pushGlobalTintColor(float r, float g, float b, float a) { public void popGlobalTintColor() { tintStack = tintStack.pop(); } + + /** + * Pushes a white entry on the tint stack which ignores the previous + * tint color. It must be removed by calling {@link #popGlobalTintColor()}. + *

    This is useful when rendering to texture

    + */ + public void pushGlobalTintColorReset() { + tintStack = tintStack.pushReset(); + } /** * Calls GL11.glColor4f() with the specified color multiplied by the current global tint color. @@ -473,12 +581,59 @@ private static void drawLineAsQuad(float x0, float y0, float x1, float y1, float GL11.glVertex2f(x1 + dx + dy, y1 + dy - dx); } + protected void prepareForRendering() { + hasScissor = false; + tintStack = tintStateRoot; + clipStack.clearStack(); + } + + protected void renderSWCursor() { + if(swCursor != null) { + tintStack = tintStateRoot; + swCursor.render(mouseX, mouseY); + } + } + + protected void setNativeCursor(Cursor cursor) throws LWJGLException { + Mouse.setNativeCursor(cursor); + } + + protected boolean isMouseInsideWindow() { + return Mouse.isInsideWindow(); + } + protected void getTintedColor(Color color, float[] result) { result[0] = tintStack.r*(color.getR()&255); result[1] = tintStack.g*(color.getG()&255); result[2] = tintStack.b*(color.getB()&255); result[3] = tintStack.a*(color.getA()&255); } + + /** + * Computes the tinted color from the given color. + * @param color the input color in RGBA order, value range is 0.0 (black) to 255.0 (white). + * @param result the tinted color in RGBA order, can be the same array as color. + */ + protected void getTintedColor(float[] color, float[] result) { + result[0] = tintStack.r*color[0]; + result[1] = tintStack.g*color[1]; + result[2] = tintStack.b*color[2]; + result[3] = tintStack.a*color[3]; + } + + public void setClipRect() { + final Rect rect = clipRectTemp; + if(clipStack.getClipRect(rect)) { + GL11.glScissor(viewportX + rect.getX()*RenderScale.scale, viewportBottom - rect.getBottom()*RenderScale.scale, rect.getWidth()*RenderScale.scale, rect.getHeight()*RenderScale.scale); + if(!hasScissor) { + GL11.glEnable(GL11.GL_SCISSOR_TEST); + hasScissor = true; + } + } else if(hasScissor) { + GL11.glDisable(GL11.GL_SCISSOR_TEST); + hasScissor = false; + } + } Logger getLogger() { return Logger.getLogger(LWJGLRenderer.class.getName()); diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java index b1eda18..77dace4 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.java @@ -203,7 +203,7 @@ boolean bind() { return false; } - public Image getImage(int x, int y, int width, int height, Color tintColor, boolean tiled) { + public Image getImage(int x, int y, int width, int height, Color tintColor, boolean tiled, Rotation rotation) { if(x < 0 || x >= getWidth()) { throw new IllegalArgumentException("x"); } @@ -216,10 +216,13 @@ public Image getImage(int x, int y, int width, int height, Color tintColor, bool if(y + Math.abs(height) > getHeight()) { throw new IllegalArgumentException("height"); } - if(tiled && (width <= 0 || height <= 0)) { - throw new IllegalArgumentException("Tiled rendering requires positive width & height"); + if(rotation != Rotation.NONE || (tiled && (width < 0 || height < 0))) { + return new TextureAreaRotated(this, x, y, width, height, tintColor, tiled, rotation); + } else if(tiled) { + return new TextureAreaTiled(this, x, y, width, height, tintColor); + } else { + return new TextureArea(this, x, y, width, height, tintColor); } - return new TextureArea(this, x, y, width, height, tintColor, tiled); } public MouseCursor createCursor(int x, int y, int width, int height, int hotSpotX, int hotSpotY, Image imageRef) { diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureArea.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureArea.java index d79ee55..9e8e478 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureArea.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureArea.java @@ -42,26 +42,22 @@ */ public class TextureArea extends TextureAreaBase implements Image, SupportsDrawRepeat { - private static final int REPEAT_CACHE_SIZE = 10; + protected static final int REPEAT_CACHE_SIZE = 10; - private final LWJGLTexture texture; - private final Color tintColor; - private final boolean tile; - private int repeatCacheID = -1; + protected final LWJGLTexture texture; + protected final Color tintColor; + protected int repeatCacheID = -1; - public TextureArea(LWJGLTexture texture, int x, int y, int width, int height, - Color tintColor, boolean tile) { + public TextureArea(LWJGLTexture texture, int x, int y, int width, int height, Color tintColor) { super(x, y, width, height, texture.getTexWidth(), texture.getTexHeight()); this.texture = texture; this.tintColor = (tintColor == null) ? Color.WHITE : tintColor; - this.tile = tile; } TextureArea(TextureArea src, Color tintColor) { super(src); this.texture = src.texture; this.tintColor = tintColor; - this.tile = src.tile; } public void draw(AnimationState as, int x, int y) { @@ -70,13 +66,9 @@ public void draw(AnimationState as, int x, int y) { public void draw(AnimationState as, int x, int y, int w, int h) { if(texture.bind(tintColor)) { - if(tile) { - drawTiled(x, y, w, h); - } else { - GL11.glBegin(GL11.GL_QUADS); - drawQuad(x, y, w, h); - GL11.glEnd(); - } + GL11.glBegin(GL11.GL_QUADS); + drawQuad(x, y, w, h); + GL11.glEnd(); } } @@ -113,7 +105,7 @@ private void drawRepeatSlow(int x, int y, int width, int height, int repeatCount GL11.glEnd(); } - private void drawRepeat(int x, int y, int repeatCountX, int repeatCountY) { + protected void drawRepeat(int x, int y, int repeatCountX, int repeatCountY) { final int w = width; final int h = height; GL11.glBegin(GL11.GL_QUADS); @@ -129,7 +121,7 @@ private void drawRepeat(int x, int y, int repeatCountX, int repeatCountY) { GL11.glEnd(); } - private void drawRepeatCached(int x, int y, int repeatCountX, int repeatCountY) { + protected void drawRepeatCached(int x, int y, int repeatCountX, int repeatCountY) { if(repeatCacheID < 0) { createRepeatCache(); } @@ -162,65 +154,7 @@ private void drawRepeatCached(int x, int y, int repeatCountX, int repeatCountY) } } - private void drawTiled(int x, int y, int width, int height) { - int repeatCountX = width / this.width; - int repeatCountY = height / this.height; - - if(repeatCountX < REPEAT_CACHE_SIZE || repeatCountY < REPEAT_CACHE_SIZE) { - drawRepeat(x, y, repeatCountX, repeatCountY); - } else { - drawRepeatCached(x, y, repeatCountX, repeatCountY); - } - - int drawnX = repeatCountX * this.width; - int drawnY = repeatCountY * this.height; - int restWidth = width - drawnX; - int restHeight = height - drawnY; - if(restWidth > 0 || restHeight > 0) { - GL11.glBegin(GL11.GL_QUADS); - if(restWidth > 0 && repeatCountY > 0) { - drawClipped(x + drawnX, y, restWidth, this.height, 1, repeatCountY); - } - if(restHeight > 0) { - if(repeatCountX > 0) { - drawClipped(x, y + drawnY, this.width, restHeight, repeatCountX, 1); - } - if(restWidth > 0) { - drawClipped(x + drawnX, y + drawnY, restWidth, restHeight, 1, 1); - } - } - GL11.glEnd(); - } - } - - private void drawClipped(int x, int y, int width, int height, int repeatCountX, int repeatCountY) { - float ctx0 = tx0; - float cty0 = ty0; - float ctx1 = tx1; - float cty1 = ty1; - if(this.width > 1) { - ctx1 = ctx0 + width / (float)texture.getTexWidth(); - } - if(this.height > 1) { - cty1 = cty0 + height / (float)texture.getTexHeight(); - } - - while(repeatCountY-- > 0) { - int y1 = y + height; - int x0 = x; - for(int cx=repeatCountX ; cx-- > 0 ;) { - int x1 = x0 + width; - GL11.glTexCoord2f(ctx0, cty0); GL11.glVertex2i(x0, y ); - GL11.glTexCoord2f(ctx0, cty1); GL11.glVertex2i(x0, y1); - GL11.glTexCoord2f(ctx1, cty1); GL11.glVertex2i(x1, y1); - GL11.glTexCoord2f(ctx1, cty0); GL11.glVertex2i(x1, y ); - x0 = x1; - } - y = y1; - } - } - - private void createRepeatCache() { + protected void createRepeatCache() { repeatCacheID = GL11.glGenLists(1); texture.renderer.textureAreas.add(this); @@ -233,14 +167,6 @@ void destroyRepeatCache() { GL11.glDeleteLists(repeatCacheID, 1); repeatCacheID = -1; } - - int getX() { - return (int)(tx0 * texture.getTexWidth()); - } - - int getY() { - return (int)(ty0 * texture.getTexHeight()); - } public Image createTintedVersion(Color color) { if(color == null) { diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java index 4199399..58e7a58 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaBase.java @@ -54,10 +54,14 @@ public class TextureAreaBase { if(width == 1) { fx += 0.5f; width = 0; + } else if(width < -1) { + fx -= width + 1; } if(height == 1) { fy += 0.5f; height = 0; + } else if(height < -1) { + fy -= height + 1; } this.tx0 = fx / texWidth; this.ty0 = fy / texHeight; diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaRotated.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaRotated.java new file mode 100644 index 0000000..4e19052 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaRotated.java @@ -0,0 +1,319 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer.lwjgl; + +import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.Image; +import de.matthiasmann.twl.renderer.Texture; +import org.lwjgl.opengl.GL11; + +/** + * A rotated, tiled or flipped area inside a OpenGL texture used as UI image + * + * @author Matthias Mann + */ +public class TextureAreaRotated implements Image { + + protected static final int REPEAT_CACHE_SIZE = 10; + + private final LWJGLTexture texture; + private final Color tintColor; + private final float txTL; + private final float tyTL; + private final float txTR; + private final float tyTR; + private final float txBL; + private final float tyBL; + private final float txBR; + private final float tyBR; + private final char width; + private final char height; + private final boolean tiled; + protected int repeatCacheID = -1; + + public TextureAreaRotated(LWJGLTexture texture, int x, int y, int width, int height, + Color tintColor, boolean tiled, Texture.Rotation rotation) { + // negative size allows for flipping + if(rotation == Texture.Rotation.CLOCKWISE_90 || rotation == Texture.Rotation.CLOCKWISE_270) { + this.width = (char)Math.abs(height); + this.height = (char)Math.abs(width); + } else { + this.width = (char)Math.abs(width); + this.height = (char)Math.abs(height); + } + + float fx = x; + float fy = y; + if(width == 1) { + fx += 0.5f; + width = 0; + } else if(width < -1) { + fx -= width + 1; + } + if(height == 1) { + fy += 0.5f; + height = 0; + } else if(height < -1) { + fy -= height + 1; + } + + float texWidth = texture.getTexWidth(); + float texHeight = texture.getTexHeight(); + + float tx0 = fx / texWidth; + float ty0 = fy / texHeight; + float tx1 = tx0 + (width / texWidth); + float ty1 = ty0 + (height / texHeight); + + switch(rotation) { + default: + txTL = txBL = tx0; + txTR = txBR = tx1; + tyTL = tyTR = ty0; + tyBL = tyBR = ty1; + break; + case CLOCKWISE_90: + txTL = tx0; tyTL = ty1; + txTR = tx0; tyTR = ty0; + txBL = tx1; tyBL = ty1; + txBR = tx1; tyBR = ty0; + break; + case CLOCKWISE_180: + txTL = tx1; tyTL = ty1; + txTR = tx0; tyTR = ty1; + txBL = tx1; tyBL = ty0; + txBR = tx0; tyBR = ty0; + break; + case CLOCKWISE_270: + txTL = tx1; tyTL = ty0; + txTR = tx1; tyTR = ty1; + txBL = tx0; tyBL = ty0; + txBR = tx0; tyBR = ty1; + break; + } + this.texture = texture; + this.tintColor = (tintColor == null) ? Color.WHITE : tintColor; + this.tiled = tiled; + } + + TextureAreaRotated(TextureAreaRotated src, Color tintColor) { + this.txTL = src.txTL; + this.tyTL = src.tyTL; + this.txTR = src.txTR; + this.tyTR = src.tyTR; + this.txBL = src.txBL; + this.tyBL = src.tyBL; + this.txBR = src.txBR; + this.tyBR = src.tyBR; + this.width = src.width; + this.height = src.height; + this.texture = src.texture; + this.tiled = src.tiled; + this.tintColor = tintColor; + } + + public int getHeight() { + return height; + } + + public int getWidth() { + return width; + } + + public void draw(AnimationState as, int x, int y) { + draw(as, x, y, width, height); + } + + public void draw(AnimationState as, int x, int y, int w, int h) { + if(texture.bind(tintColor)) { + if(tiled) { + drawTiled(x, y, w, h); + } else { + GL11.glBegin(GL11.GL_QUADS); + drawQuad(x, y, w, h); + GL11.glEnd(); + } + } + } + + private void drawRepeat(int x, int y, int repeatCountX, int repeatCountY) { + GL11.glBegin(GL11.GL_QUADS); + final int w = width; + final int h = height; + while(repeatCountY-- > 0) { + int curX = x; + int cntX = repeatCountX; + while(cntX-- > 0) { + drawQuad(curX, y, w, h); + curX += w; + } + y += h; + } + GL11.glEnd(); + } + + private void drawTiled(int x, int y, int w, int h) { + int repeatCountX = w / this.width; + int repeatCountY = h / this.height; + + if(repeatCountX < REPEAT_CACHE_SIZE || repeatCountY < REPEAT_CACHE_SIZE) { + drawRepeat(x, y, repeatCountX, repeatCountY); + } else { + drawRepeatCached(x, y, repeatCountX, repeatCountY); + } + + int drawnX = repeatCountX * this.width; + int drawnY = repeatCountY * this.height; + int restWidth = w - drawnX; + int restHeight = h - drawnY; + if(restWidth > 0 || restHeight > 0) { + GL11.glBegin(GL11.GL_QUADS); + if(restWidth > 0 && repeatCountY > 0) { + drawClipped(x + drawnX, y, restWidth, this.height, 1, repeatCountY); + } + if(restHeight > 0) { + if(repeatCountX > 0) { + drawClipped(x, y + drawnY, this.width, restHeight, repeatCountX, 1); + } + if(restWidth > 0) { + drawClipped(x + drawnX, y + drawnY, restWidth, restHeight, 1, 1); + } + } + GL11.glEnd(); + } + } + + + protected void drawRepeatCached(int x, int y, int repeatCountX, int repeatCountY) { + if(repeatCacheID < 0) { + createRepeatCache(); + } + + int cacheBlocksX = repeatCountX / REPEAT_CACHE_SIZE; + int repeatsByCacheX = cacheBlocksX * REPEAT_CACHE_SIZE; + + if(repeatCountX > repeatsByCacheX) { + drawRepeat(x + width * repeatsByCacheX, y, + repeatCountX - repeatsByCacheX, repeatCountY); + } + + do { + GL11.glPushMatrix(); + GL11.glTranslatef(x, y, 0f); + GL11.glCallList(repeatCacheID); + + for(int i=1 ; i= REPEAT_CACHE_SIZE); + + if(repeatCountY > 0) { + drawRepeat(x, y, repeatsByCacheX, repeatCountY); + } + } + + private void drawClipped(int x, int y, int width, int height, int repeatCountX, int repeatCountY) { + float ctxTL = txTL; + float ctyTL = tyTL; + float ctxTR = txTR; + float ctyTR = tyTR; + float ctxBL = txBL; + float ctyBL = tyBL; + float ctxBR = txBR; + float ctyBR = tyBR; + + if(this.width > 1) { + float f = width / (float)this.width; + ctxTR = ctxTL + (ctxTR - ctxTL) * f; + ctyTR = ctyTL + (ctyTR - ctyTL) * f; + ctxBR = ctxBL + (ctxBR - ctxBL) * f; + ctyBR = ctyBL + (ctyBR - ctyBL) * f; + } + if(this.height > 1) { + float f = height / (float)this.height; + ctxBL = ctxTL + (ctxBL - ctxTL) * f; + ctyBL = ctyTL + (ctyBL - ctyTL) * f; + ctxBR = ctxTR + (ctxBR - ctxTR) * f; + ctyBR = ctyTR + (ctyBR - ctyTR) * f; + } + + while(repeatCountY-- > 0) { + int y1 = y + height; + int x0 = x; + for(int cx=repeatCountX ; cx-- > 0 ;) { + int x1 = x0 + width; + GL11.glTexCoord2f(ctxTL, ctyTL); GL11.glVertex2i(x0, y ); + GL11.glTexCoord2f(ctxBL, ctyBL); GL11.glVertex2i(x0, y1); + GL11.glTexCoord2f(ctxBR, ctyBR); GL11.glVertex2i(x1, y1); + GL11.glTexCoord2f(ctxTR, ctyTR); GL11.glVertex2i(x1, y ); + x0 = x1; + } + y = y1; + } + } + + private void drawQuad(int x, int y, int w, int h) { + GL11.glTexCoord2f(txTL, tyTL); GL11.glVertex2i(x , y ); + GL11.glTexCoord2f(txBL, tyBL); GL11.glVertex2i(x , y + h); + GL11.glTexCoord2f(txBR, tyBR); GL11.glVertex2i(x + w, y + h); + GL11.glTexCoord2f(txTR, tyTR); GL11.glVertex2i(x + w, y ); + } + + private void createRepeatCache() { + repeatCacheID = GL11.glGenLists(1); + texture.renderer.rotatedTextureAreas.add(this); + + GL11.glNewList(repeatCacheID, GL11.GL_COMPILE); + drawRepeat(0, 0, REPEAT_CACHE_SIZE, REPEAT_CACHE_SIZE); + GL11.glEndList(); + } + + void destroyRepeatCache() { + GL11.glDeleteLists(repeatCacheID, 1); + repeatCacheID = -1; + } + + public Image createTintedVersion(Color color) { + if(color == null) { + throw new NullPointerException("color"); + } + Color newTintColor = tintColor.multiply(color); + if(newTintColor.equals(tintColor)) { + return this; + } + return new TextureAreaRotated(this, newTintColor); + } +} diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaTiled.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaTiled.java new file mode 100644 index 0000000..f7cf55b --- /dev/null +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TextureAreaTiled.java @@ -0,0 +1,124 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.renderer.lwjgl; + +import de.matthiasmann.twl.Color; +import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.Image; +import org.lwjgl.opengl.GL11; + +/** + * A tiled area inside a OpenGL texture used as UI image + * + * @author Matthias Mann + */ +public class TextureAreaTiled extends TextureArea { + + public TextureAreaTiled(LWJGLTexture texture, int x, int y, int width, int height, Color tintColor) { + super(texture, x, y, width, height, tintColor); + } + + TextureAreaTiled(TextureAreaTiled src, Color tintColor) { + super(src, tintColor); + } + + @Override + public void draw(AnimationState as, int x, int y, int w, int h) { + if(texture.bind(tintColor)) { + int repeatCountX = w / this.width; + int repeatCountY = h / this.height; + + if(repeatCountX < REPEAT_CACHE_SIZE || repeatCountY < REPEAT_CACHE_SIZE) { + drawRepeat(x, y, repeatCountX, repeatCountY); + } else { + drawRepeatCached(x, y, repeatCountX, repeatCountY); + } + + int drawnX = repeatCountX * this.width; + int drawnY = repeatCountY * this.height; + int restWidth = w - drawnX; + int restHeight = h - drawnY; + if(restWidth > 0 || restHeight > 0) { + GL11.glBegin(GL11.GL_QUADS); + if(restWidth > 0 && repeatCountY > 0) { + drawClipped(x + drawnX, y, restWidth, this.height, 1, repeatCountY); + } + if(restHeight > 0) { + if(repeatCountX > 0) { + drawClipped(x, y + drawnY, this.width, restHeight, repeatCountX, 1); + } + if(restWidth > 0) { + drawClipped(x + drawnX, y + drawnY, restWidth, restHeight, 1, 1); + } + } + GL11.glEnd(); + } + } + } + + private void drawClipped(int x, int y, int width, int height, int repeatCountX, int repeatCountY) { + float ctx0 = tx0; + float cty0 = ty0; + float ctx1 = tx1; + float cty1 = ty1; + if(this.width > 1) { + ctx1 = ctx0 + width / (float)texture.getTexWidth(); + } + if(this.height > 1) { + cty1 = cty0 + height / (float)texture.getTexHeight(); + } + + while(repeatCountY-- > 0) { + int y1 = y + height; + int x0 = x; + for(int cx=repeatCountX ; cx-- > 0 ;) { + int x1 = x0 + width; + GL11.glTexCoord2f(ctx0, cty0); GL11.glVertex2i(x0, y ); + GL11.glTexCoord2f(ctx0, cty1); GL11.glVertex2i(x0, y1); + GL11.glTexCoord2f(ctx1, cty1); GL11.glVertex2i(x1, y1); + GL11.glTexCoord2f(ctx1, cty0); GL11.glVertex2i(x1, y ); + x0 = x1; + } + y = y1; + } + } + + @Override + public Image createTintedVersion(Color color) { + if(color == null) { + throw new NullPointerException("color"); + } + Color newTintColor = tintColor.multiply(color); + if(newTintColor.equals(tintColor)) { + return this; + } + return new TextureAreaTiled(this, newTintColor); + } +} diff --git a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java index e440fd8..28477e4 100644 --- a/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java +++ b/twl/src/de/matthiasmann/twl/renderer/lwjgl/TintStack.java @@ -56,7 +56,18 @@ public TintStack() { private TintStack(TintStack prev) { this.prev = prev; } - + + public TintStack pushReset() { + if(next == null) { + next = new TintStack(this); + } + next.r = ONE_OVER_255; + next.g = ONE_OVER_255; + next.b = ONE_OVER_255; + next.a = ONE_OVER_255; + return next; + } + public TintStack push(float r, float g, float b, float a) { if(next == null) { next = new TintStack(this); @@ -67,7 +78,7 @@ public TintStack push(float r, float g, float b, float a) { next.a = this.a * a; return next; } - + public TintStack pop() { return prev; } diff --git a/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java b/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java index 5cc33d8..d1b361d 100644 --- a/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java +++ b/twl/src/de/matthiasmann/twl/textarea/CSSStyle.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -29,6 +29,7 @@ */ package de.matthiasmann.twl.textarea; +import de.matthiasmann.twl.Color; import de.matthiasmann.twl.utils.ParameterStringParser; import de.matthiasmann.twl.utils.TextUtil; import java.util.HashMap; @@ -78,11 +79,11 @@ protected void parseCSSAttribute(String key, String value) { return; } if("text-indent".equals(key)) { - parseValueUnit(StyleAttribute.TEXT_IDENT, value); + parseValueUnit(StyleAttribute.TEXT_INDENT, value); return; } - if("font-family".equals(key) || "font".equals(key)) { - put(StyleAttribute.FONT_NAME, value); + if("font-family".equals(key) || "font".equals(key) || "-twl-font".equals(key)) { + put(StyleAttribute.FONT_NAME, stripQuotes(value.trim())); return; } if("text-align".equals(key)) { @@ -133,6 +134,14 @@ protected void parseCSSAttribute(String key, String value) { parseURL(StyleAttribute.BACKGROUND_IMAGE, value); return; } + if("background-color".equals(key) || "-twl-background-color".equals(key)) { + parseColor(StyleAttribute.BACKGROUND_COLOR, value); + return; + } + if("color".equals(key)) { + parseColor(StyleAttribute.COLOR, value); + return; + } throw new IllegalArgumentException("Unsupported key: " + key); } @@ -231,13 +240,65 @@ private> void parseEnum(StyleAttribute attribute, String va private void parseURL(StyleAttribute attribute, String value) { if(value.startsWith("url(") && value.endsWith(")")) { value = value.substring(4, value.length() - 1).trim(); - if((value.startsWith("\"") && value.endsWith("\"")) || - (value.startsWith("'") && value.endsWith("'"))) { - value = value.substring(1, value.length() - 1); - } + value = stripQuotes(value); } put(attribute, value); } + + private String stripQuotes(String value) { + if((value.startsWith("\"") && value.endsWith("\"")) || + (value.startsWith("'") && value.endsWith("'"))) { + value = value.substring(1, value.length() - 1); + } + return value; + } + + private void parseColor(StyleAttribute attribute, String value) { + Color color; + if(value.startsWith("rgb(") && value.endsWith(")")) { + value = value.substring(4, value.length() - 1).trim(); + byte[] rgb = parseRGBA(value, 3); + color = new Color(rgb[0], rgb[1], rgb[2], (byte)255); + } else if(value.startsWith("rgba(") && value.endsWith(")")) { + value = value.substring(5, value.length() - 1).trim(); + byte[] rgba = parseRGBA(value, 4); + color = new Color(rgba[0], rgba[1], rgba[2], rgba[3]); + } else { + color = Color.parserColor(value); + if(color == null) { + throw new IllegalArgumentException("unknown color name: " + value); + } + } + put(attribute, color); + } + + private byte[] parseRGBA(String value, int numElements) { + String[] parts = value.split(","); + if(parts.length != numElements) { + throw new IllegalArgumentException("3 values required for rgb()"); + } + byte[] rgba = new byte[numElements]; + for(int i=0 ; i PRE = new HashMap(); static final HashMap BREAKWORD = new HashMap(); diff --git a/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java b/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java index a42e08b..376d6e0 100644 --- a/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java +++ b/twl/src/de/matthiasmann/twl/textarea/HTMLTextAreaModel.java @@ -32,6 +32,7 @@ import de.matthiasmann.twl.model.HasCallback; import de.matthiasmann.twl.utils.MultiStringReader; import de.matthiasmann.twl.utils.TextUtil; +import de.matthiasmann.twl.utils.XMLParser; import java.io.IOException; import java.io.InputStream; import java.io.InputStreamReader; @@ -45,7 +46,6 @@ import java.util.logging.Logger; import org.xmlpull.v1.XmlPullParser; import org.xmlpull.v1.XmlPullParserException; -import org.xmlpull.v1.XmlPullParserFactory; /** * A simple XHTML parser. @@ -120,6 +120,7 @@ public HTMLTextAreaModel() { * @param html the HTML to parse * @see #setHtml(java.lang.String) */ + @SuppressWarnings("OverridableMethodCallInConstructor") public HTMLTextAreaModel(String html) { this(); setHtml(html); @@ -133,6 +134,7 @@ public HTMLTextAreaModel(String html) { * @param r the reader to parse html from * @throws IOException if an error occured while reading */ + @SuppressWarnings("OverridableMethodCallInConstructor") public HTMLTextAreaModel(Reader r) throws IOException { this(); parseXHTML(r); @@ -225,10 +227,7 @@ public void parseXHTML(Reader reader) { this.title = null; try { - XmlPullParserFactory xppf = XmlPullParserFactory.newInstance(); - xppf.setNamespaceAware(false); - xppf.setValidating(false); - XmlPullParser xpp = xppf.newPullParser(); + XmlPullParser xpp = XMLParser.createParser(); xpp.setInput(reader); xpp.defineEntityReplacementText("nbsp", "\u00A0"); xpp.require(XmlPullParser.START_DOCUMENT, null, null); @@ -305,7 +304,7 @@ private void parseMain(XmlPullParser xpp) throws XmlPullParserException, IOExcep String btnName = TextUtil.notNull(xpp.getAttributeValue(null, "name")); String btnParam = TextUtil.notNull(xpp.getAttributeValue(null, "value")); element = new WidgetElement(style, btnName, btnParam); - } else if("ul".equals(name) || "h1".equals(name)) { + } else if("ul".equals(name)) { ContainerElement ce = new ContainerElement(style); parseContainer(xpp, ce); element = ce; @@ -318,7 +317,7 @@ private void parseMain(XmlPullParser xpp) throws XmlPullParserException, IOExcep parseContainer(xpp, le); element = le; --level; - } else if("div".equals(name)) { + } else if("div".equals(name) || isHeading(name)) { BlockElement be = new BlockElement(style); parseContainer(xpp, be); element = be; @@ -510,6 +509,11 @@ private static boolean isXHTML(String doc) { return false; } + private boolean isHeading(String name) { + return name.length() == 2 && name.charAt(0) == 'h' && + (name.charAt(1) >= '0' && name.charAt(1) <= '6'); + } + private boolean isPre() { return getStyle().get(StyleAttribute.PREFORMATTED, null); } diff --git a/twl/src/de/matthiasmann/twl/textarea/Style.java b/twl/src/de/matthiasmann/twl/textarea/Style.java index b066a0c..b05ccde 100644 --- a/twl/src/de/matthiasmann/twl/textarea/Style.java +++ b/twl/src/de/matthiasmann/twl/textarea/Style.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -41,7 +41,7 @@ public class Style { private final Style parent; private final StyleSheetKey styleSheetKey; - private final Object[] values; + private Object[] values; /** * Creates an empty Style without a parent, class reference and no attributes @@ -59,7 +59,6 @@ public Style() { public Style(Style parent, StyleSheetKey styleSheetKey) { this.parent = parent; this.styleSheetKey = styleSheetKey; - this.values = new Object[StyleAttribute.getNumAttributes()]; } /** @@ -81,7 +80,7 @@ public Style(Style parent, StyleSheetKey styleSheetKey, Map, O protected Style(Style src) { this.parent = src.parent; this.styleSheetKey = src.styleSheetKey; - this.values = src.values.clone(); + this.values = (src.values != null) ? src.values.clone() : null; } /** @@ -112,12 +111,12 @@ private static Style doResolve(Style style, int ord, StyleSheetResolver resolver if(style.parent == null) { return style; } - if(style.values[ord] != null) { + if(style.rawGet(ord) != null) { return style; } - if(resolver != null) { + if(resolver != null && style.styleSheetKey != null) { Style styleSheetStyle = resolver.resolve(style); - if(styleSheetStyle != null && styleSheetStyle.values[ord] != null) { + if(styleSheetStyle != null && styleSheetStyle.rawGet(ord) != null) { // return main style here because class style has no parent chain return style; } @@ -139,15 +138,17 @@ private static Style doResolve(Style style, int ord, StyleSheetResolver resolver * @return The attribute value if it was set, or the default value of the attribute. */ public V getNoResolve(StyleAttribute attribute, StyleSheetResolver resolver) { - Object value = values[attribute.ordinal()]; - if(value == null && resolver != null) { - Style styleSheetStyle = resolver.resolve(this); - if(styleSheetStyle != null) { - value = styleSheetStyle.values[attribute.ordinal()]; - } - } + Object value = rawGet(attribute.ordinal()); if(value == null) { - return attribute.getDefaultValue(); + if(resolver != null && styleSheetKey != null) { + Style styleSheetStyle = resolver.resolve(this); + if(styleSheetStyle != null) { + value = styleSheetStyle.rawGet(attribute.ordinal()); + } + } + if(value == null) { + return attribute.getDefaultValue(); + } } return attribute.getDataType().cast(value); } @@ -216,34 +217,89 @@ public Style with(StyleAttribute attribute, V value) { newStyle.put(attribute, value); return newStyle; } - + + /** + * Returns a Style which doesn't contain any value for an attribute where + * {@link StyleAttribute#isInherited() } returns false. + * + * @return a Style with the same parent, styleSheetKey and modified attribute. + */ + public Style withoutNonInheritable() { + if(values != null) { + for(int i=0,n=values.length ; i attribute = StyleAttribute.getAttribute(i); + if(attribute.isInherited()) { + result.put(attribute, value); + } + } + } + return result; + } + protected void put(StyleAttribute attribute, Object value) { if(attribute == null) { throw new IllegalArgumentException("attribute is null"); } - if(value != null && !attribute.getDataType().isInstance(value)) { - throw new IllegalArgumentException("value is a " + value.getClass() + - " but must be a " + attribute.getDataType()); + if(value == null) { + if(values == null) { + return; + } + } else { + if(!attribute.getDataType().isInstance(value)) { + throw new IllegalArgumentException("value is a " + value.getClass() + + " but must be a " + attribute.getDataType()); + } + ensureValues(); } values[attribute.ordinal()] = value; } - protected void putAll(Map, Object> values) { + protected final void putAll(Map, Object> values) { for(Map.Entry, Object> e : values.entrySet()) { put(e.getKey(), e.getValue()); } } - protected void putAll(Style src) { - for(int i=0,n=values.length ; i the data type for this style attribute * @author Matthias Mann */ public final class StyleAttribute { @@ -49,20 +51,22 @@ public final class StyleAttribute { // cascading attributes public static final StyleAttribute HORIZONTAL_ALIGNMENT = new StyleAttribute(true, HAlignment.class, HAlignment.LEFT); public static final StyleAttribute VERTICAL_ALIGNMENT = new StyleAttribute(true, VAlignment.class, VAlignment.BOTTOM); - public static final StyleAttribute TEXT_IDENT = new StyleAttribute(true, Value.class, Value.ZERO_PX); + public static final StyleAttribute TEXT_INDENT = new StyleAttribute(true, Value.class, Value.ZERO_PX); public static final StyleAttribute FONT_NAME = new StyleAttribute(true, String.class, "default"); public static final StyleAttribute LIST_STYLE_IMAGE = new StyleAttribute(true, String.class, "ul-bullet"); public static final StyleAttribute LIST_STYLE_TYPE = new StyleAttribute(true, OrderedListType.class, OrderedListType.DECIMAL); public static final StyleAttribute PREFORMATTED = new StyleAttribute(true, Boolean.class, Boolean.FALSE); public static final StyleAttribute BREAKWORD = new StyleAttribute(true, Boolean.class, Boolean.FALSE); + public static final StyleAttribute COLOR = new StyleAttribute(true, Color.class, Color.WHITE); // non cascading attribute public static final StyleAttribute CLEAR = new StyleAttribute(false, Clear.class, Clear.NONE); public static final StyleAttribute DISPLAY = new StyleAttribute(false, Display.class, Display.INLINE); public static final StyleAttribute FLOAT_POSITION = new StyleAttribute(false, FloatPosition.class, FloatPosition.NONE); - public static final StyleAttribute WIDTH = new StyleAttribute(false, Value.class, Value.ZERO_PX); + public static final StyleAttribute WIDTH = new StyleAttribute(false, Value.class, Value.AUTO); public static final StyleAttribute HEIGHT = new StyleAttribute(false, Value.class, Value.AUTO); public static final StyleAttribute BACKGROUND_IMAGE = new StyleAttribute(false, String.class, null); + public static final StyleAttribute BACKGROUND_COLOR = new StyleAttribute(false, Color.class, Color.TRANSPARENT); public static final StyleAttribute MARGIN_TOP = new StyleAttribute(false, Value.class, Value.ZERO_PX); public static final StyleAttribute MARGIN_LEFT = new StyleAttribute(false, Value.class, Value.ZERO_PX); public static final StyleAttribute MARGIN_RIGHT = new StyleAttribute(false, Value.class, Value.ZERO_PX); @@ -131,6 +135,7 @@ public String toString() { private final T defaultValue; private final int ordinal; + @SuppressWarnings("LeakingThisInConstructor") private StyleAttribute(boolean inherited, Class dataType, T defaultValue) { this.inherited = inherited; this.dataType = dataType; diff --git a/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java b/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java index 835bfd7..c195b83 100644 --- a/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java +++ b/twl/src/de/matthiasmann/twl/textarea/StyleSheet.java @@ -45,6 +45,8 @@ */ public class StyleSheet implements StyleSheetResolver { + static final Object NULL = new Object(); + private final ArrayList rules; private final IdentityHashMap cache; @@ -190,18 +192,17 @@ public void startLayout() { } public Style resolve(Style style) { - while(style.getStyleSheetKey() == null) { - style = style.getParent(); - if(style == null) { - return null; - } - } - Object cacheData = cache.get(style); - if(cacheData != null) { - return (cacheData == this) ? null : (Style)cacheData; + if(cacheData == null) { + return resolveSlow(style); } - + if(cacheData == NULL) { + return null; + } + return (Style)cacheData; + } + + private Style resolveSlow(Style style) { Selector[] candidates = new Selector[rules.size()]; int numCandidates = 0; @@ -235,9 +236,13 @@ public Style resolve(Style style) { } } - cache.put(style, (result == null) ? this : result); + putIntoCache(style, result); return result; } + + private void putIntoCache(Style key, Style style) { + cache.put(key, (style == null) ? NULL : style); + } private boolean matches(Selector selector, Style style) { do { @@ -263,7 +268,7 @@ static class Selector extends StyleSheetKey implements Comparable { CSSStyle style; int score; - public Selector(String element, String className, String id, Selector tail) { + Selector(String element, String className, String id, Selector tail) { super(element, className, id); this.tail = tail; } diff --git a/twl/src/de/matthiasmann/twl/theme/ImageManager.java b/twl/src/de/matthiasmann/twl/theme/ImageManager.java index d66f9a8..c2dfbb4 100644 --- a/twl/src/de/matthiasmann/twl/theme/ImageManager.java +++ b/twl/src/de/matthiasmann/twl/theme/ImageManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -36,6 +36,7 @@ import de.matthiasmann.twl.renderer.Renderer; import de.matthiasmann.twl.renderer.Texture; import de.matthiasmann.twl.utils.StateExpression; +import de.matthiasmann.twl.utils.StateSelect; import de.matthiasmann.twl.utils.TextUtil; import de.matthiasmann.twl.utils.XMLParser; import java.io.IOException; @@ -54,6 +55,7 @@ */ class ImageManager { + private final ParameterMapImpl constants; private final Renderer renderer; private final TreeMap images; private final TreeMap cursors; @@ -61,13 +63,16 @@ class ImageManager { private Texture currentTexture; static final EmptyImage NONE = new EmptyImage(0, 0); + static final MouseCursor NOCURSOR = new MouseCursor() {}; - ImageManager(Renderer renderer) { + ImageManager(ParameterMapImpl constants, Renderer renderer) { + this.constants = constants; this.renderer = renderer; this.images = new TreeMap(); this.cursors = new TreeMap(); images.put("none", NONE); + cursors.put("os-default", NOCURSOR); } Image getImage(String name) { @@ -91,23 +96,23 @@ Image getReferencedImage(XMLParser xmlp, String ref) throws XmlPullParserExcepti } MouseCursor getReferencedCursor(XMLParser xmlp, String ref) throws XmlPullParserException { - MouseCursor cursor = getCursor(ref); + MouseCursor cursor = cursors.get(ref); if(cursor == null) { throw xmlp.error("referenced cursor \"" + ref + "\" not found"); } - return cursor; + return unwrapCursor(cursor); } Map getImages(String ref, String name) { - return ParserUtil.resolve(images, ref, name); + return ParserUtil.resolve(images, ref, name, null); } public MouseCursor getCursor(String name) { - return cursors.get(name); + return unwrapCursor(cursors.get(name)); } Map getCursors(String ref, String name) { - return ParserUtil.resolve(cursors, ref, name); + return ParserUtil.resolve(cursors, ref, name, NOCURSOR); } void parseImages(XMLParser xmlp, URL baseUrl) throws XmlPullParserException, IOException { @@ -156,6 +161,10 @@ void parseImages(XMLParser xmlp, URL baseUrl) throws XmlPullParserException, IOE } } + private MouseCursor unwrapCursor(MouseCursor cursor) { + return (cursor == NOCURSOR) ? null : cursor; + } + private void checkImageName(String name, XMLParser xmlp) throws XmlPullParserException, XmlPullParserException { ParserUtil.checkNameNotEmpty(name, xmlp); if(images.containsKey(name)) { @@ -175,6 +184,9 @@ private void parseCursor(XMLParser xmlp, String name) throws IOException, XmlPul MouseCursor cursor; if(ref != null) { cursor = cursors.get(ref); + if(cursor == null) { + throw xmlp.error("referenced cursor \"" + ref + "\" not found"); + } } else { ImageParams imageParams = new ImageParams(); parseRectFromAttribute(xmlp, imageParams); @@ -187,10 +199,11 @@ private void parseCursor(XMLParser xmlp, String name) throws IOException, XmlPul imageRef = getReferencedImage(xmlp, imageRefStr); } cursor = currentTexture.createCursor(imageParams.x, imageParams.y, imageParams.w, imageParams.h, hotSpotX, hotSpotY, imageRef); + if(cursor == null) { + cursor = NOCURSOR; + } } - if(cursor != null) { - cursors.put(name, cursor); - } + cursors.put(name, cursor); xmlp.nextTag(); } @@ -289,15 +302,14 @@ private Image parseStateSelect(XMLParser xmlp, ImageParams params) throws IOExce if(conditions.size() < 1) { throw xmlp.error("state select image needs atleast 1 condition"); } - Image image = new StateSelectImage( - stateImages.toArray(new Image[stateImages.size()]), - conditions.toArray(new StateExpression[conditions.size()]), - params.border); + StateSelect select = new StateSelect(conditions.toArray(new StateExpression[conditions.size()])); + Image image = new StateSelectImage(stateImages.toArray(new Image[stateImages.size()]), select, params.border); return image; } private Image parseArea(XMLParser xmlp, ImageParams params) throws IOException, XmlPullParserException { parseRectFromAttribute(xmlp, params); + parseRotationFromAttribute(xmlp, params); boolean tiled = xmlp.parseBoolFromAttribute("tiled", false); final int[] splitx = parseSplit2(xmlp, "splitx", Math.abs(params.w)); final int[] splity = parseSplit2(xmlp, "splity", Math.abs(params.h)); @@ -307,7 +319,7 @@ private Image parseArea(XMLParser xmlp, ImageParams params) throws IOException, final int columns = (splitx != null) ? 3 : 1; final int rows = (splity != null) ? 3 : 1; final Image[] imageParts = new Image[columns * rows]; - for(int r=0,idx=0 ; r frames) throws XmlPullParserException, IOException { ImageParams params = new ImageParams(); parseRectFromAttribute(xmlp, params); + parseRotationFromAttribute(xmlp, params); int duration = xmlp.parseIntFromAttribute("duration"); if(duration < 1) { throw new IllegalArgumentException("duration must be >= 1 ms"); @@ -489,7 +531,7 @@ private void parseAnimFrames(XMLParser xmlp, ArrayList fr throw new IllegalArgumentException("offsets required for multiple frames"); } for(int i=0 ; i texWidth || x1 < 0 || x1 > texWidth || - y < 0 || y > texHeight || y1 < 0 || y1 > texHeight) { + if(x < 0 || x >= texWidth || x1 < 0 || x1 > texWidth || + y < 0 || y >= texHeight || y1 < 0 || y1 > texHeight) { getLogger().log(Level.WARNING, "texture partly outside of file: {0}", xmlp.getPositionDescription()); x = Math.max(0, Math.min(x, texWidth)); - w = Math.max(0, Math.min(x1, texWidth)) - x; y = Math.max(0, Math.min(y, texHeight)); - h = Math.max(0, Math.min(y1, texHeight)) - y; + w = Integer.signum(w) * (Math.max(0, Math.min(x1, texWidth)) - x); + h = Integer.signum(h) * (Math.max(0, Math.min(y1, texHeight)) - y); } - return texture.getImage(x, y, w, h, tintColor, tiled); + return texture.getImage(x, y, w, h, tintColor, tiled, rotation); } private void parseRectFromAttribute(XMLParser xmlp, ImageParams params) throws XmlPullParserException { @@ -620,9 +654,24 @@ private void parseRectFromAttribute(XMLParser xmlp, ImageParams params) throws X throw xmlp.error("can't parse xywh argument", ex); } } + + private void parseRotationFromAttribute(XMLParser xmlp, ImageParams params) throws XmlPullParserException { + if(currentTexture == null) { + throw xmlp.error("can't create area outside of object"); + } + int rot = xmlp.parseIntFromAttribute("rot", 0); + switch(rot) { + case 0: params.rot = Texture.Rotation.NONE; break; + case 90: params.rot = Texture.Rotation.CLOCKWISE_90; break; + case 180: params.rot = Texture.Rotation.CLOCKWISE_180; break; + case 270: params.rot = Texture.Rotation.CLOCKWISE_270; break; + default: + throw xmlp.error("invalid rotation angle"); + } + } private void parseStdAttributes(XMLParser xmlp, ImageParams params) throws XmlPullParserException { - params.tintColor = ParserUtil.parseColorFromAttribute(xmlp, "tint", null); + params.tintColor = ParserUtil.parseColorFromAttribute(xmlp, "tint", constants, null); params.border = ParserUtil.parseBorderFromAttribute(xmlp, "border"); params.inset = ParserUtil.parseBorderFromAttribute(xmlp, "inset"); params.repeatX = xmlp.parseBoolFromAttribute("repeatX", false); @@ -647,6 +696,7 @@ static class ImageParams { int sizeOverwriteV = -1; boolean center; StateExpression condition; + Texture.Rotation rot; } static class AnimParams { diff --git a/twl/src/de/matthiasmann/twl/theme/ParameterMapImpl.java b/twl/src/de/matthiasmann/twl/theme/ParameterMapImpl.java index ab495bf..267e6e3 100644 --- a/twl/src/de/matthiasmann/twl/theme/ParameterMapImpl.java +++ b/twl/src/de/matthiasmann/twl/theme/ParameterMapImpl.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -36,7 +36,7 @@ import de.matthiasmann.twl.renderer.Font; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.renderer.MouseCursor; -import java.util.HashMap; +import de.matthiasmann.twl.utils.CascadedHashMap; import java.util.Map; /** @@ -45,11 +45,15 @@ */ class ParameterMapImpl extends ThemeChildImpl implements ParameterMap { - final HashMap params; + private final CascadedHashMap params; ParameterMapImpl(ThemeManager manager, ThemeInfoImpl parent) { super(manager, parent); - this.params = new HashMap(); + this.params = new CascadedHashMap(); + } + + void copy(ParameterMapImpl src) { + params.collapseAndSetFallback(src.params); } public Font getFont(String name) { @@ -177,20 +181,40 @@ protected void replacingWithDifferentType(String paramName, Class oldType, Cl DebugHook.getDebugHook().replacingWithDifferentType(this, paramName, oldType, newType, getParentDescription()); } - void addParameters(Map params) { + Object getParam(String name) { + return params.get(name); + } + + void put(Map params) { for(Map.Entry e : params.entrySet()) { - String paramName = e.getKey(); - Object value = e.getValue(); - Object old = this.params.put(paramName, value); - if(old != null) { - Class oldClass = old.getClass(); - Class newClass = (value != null) ? value.getClass() : null; - - if(oldClass != newClass) { - replacingWithDifferentType(paramName, oldClass, newClass); - } + put(e.getKey(), e.getValue()); + } + } + + void put(String paramName, Object value) { + Object old = params.put(paramName, value); + if(old != null && value != null) { + Class oldClass = old.getClass(); + Class newClass = value.getClass(); + + if(oldClass != newClass && !areTypesCompatible(oldClass, newClass)) { + replacingWithDifferentType(paramName, oldClass, newClass); + } + } + } + + private static boolean areTypesCompatible(Class classA, Class classB) { + for(Class clazz : BASE_CLASSES) { + if(clazz.isAssignableFrom(classA) && clazz.isAssignableFrom(classB)) { + return true; } } + return false; } + private static final Class BASE_CLASSES[] = { + Image.class, + Font.class, + MouseCursor.class + }; } diff --git a/twl/src/de/matthiasmann/twl/theme/ParserUtil.java b/twl/src/de/matthiasmann/twl/theme/ParserUtil.java index fc005d4..1842ab1 100644 --- a/twl/src/de/matthiasmann/twl/theme/ParserUtil.java +++ b/twl/src/de/matthiasmann/twl/theme/ParserUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -94,17 +94,20 @@ static Border parseBorder(XMLParser xmlp, String value) throws XmlPullParserExce } } - static Color parseColorFromAttribute(XMLParser xmlp, String attribute, Color defaultColor) throws XmlPullParserException { + static Color parseColorFromAttribute(XMLParser xmlp, String attribute, ParameterMapImpl constants, Color defaultColor) throws XmlPullParserException { String value = xmlp.getAttributeValue(null, attribute); if(value == null) { return defaultColor; } - return parseColor(xmlp, value); + return parseColor(xmlp, value, constants); } - static Color parseColor(XMLParser xmlp, String value) throws XmlPullParserException { + static Color parseColor(XMLParser xmlp, String value, ParameterMapImpl constants) throws XmlPullParserException { try { Color color = Color.parserColor(value); + if(color == null && constants != null) { + color = constants.getParameterValue(value, false, Color.class); + } if(color == null) { throw xmlp.error("Unknown color name: " + value); } @@ -135,7 +138,7 @@ static SortedMap find(SortedMap map, String baseName) { return map.subMap(baseName, baseName.concat("\uFFFF")); } - static Map resolve(SortedMap map, String ref, String name) { + static Map resolve(SortedMap map, String ref, String name, V mapToNull) { name = ParserUtil.appendDot(name); int refLen = ref.length() - 1; ref = ref.substring(0, refLen); @@ -149,7 +152,11 @@ static Map resolve(SortedMap map, String ref, String name for(Map.Entry texEntry : matched.entrySet()) { String entryName = texEntry.getKey(); assert entryName.startsWith(ref); - result.put(name.concat(entryName.substring(refLen)), texEntry.getValue()); + V value = texEntry.getValue(); + if(value == mapToNull) { + value = null; + } + result.put(name.concat(entryName.substring(refLen)), value); } return result; diff --git a/twl/src/de/matthiasmann/twl/theme/StateSelectImage.java b/twl/src/de/matthiasmann/twl/theme/StateSelectImage.java index 64775f3..6da50b7 100644 --- a/twl/src/de/matthiasmann/twl/theme/StateSelectImage.java +++ b/twl/src/de/matthiasmann/twl/theme/StateSelectImage.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -33,7 +33,7 @@ import de.matthiasmann.twl.Color; import de.matthiasmann.twl.renderer.AnimationState; import de.matthiasmann.twl.renderer.Image; -import de.matthiasmann.twl.utils.StateExpression; +import de.matthiasmann.twl.utils.StateSelect; /** * @@ -42,15 +42,15 @@ class StateSelectImage implements Image, HasBorder { private final Image[] images; - private final StateExpression[] conditions; + private final StateSelect select; private final Border border; - StateSelectImage(Image[] images, StateExpression[] conditions, Border border) { - assert images.length >= conditions.length; - assert images.length <= conditions.length + 1; + StateSelectImage(Image[] images, StateSelect select, Border border) { + assert images.length >= select.getNumExpressions(); + assert images.length <= select.getNumExpressions() + 1; this.images = images; - this.conditions = conditions; + this.select = select; this.border = border; } @@ -67,12 +67,7 @@ public void draw(AnimationState as, int x, int y) { } public void draw(AnimationState as, int x, int y, int width, int height) { - int idx = 0; - for(; idx children; + private final CascadedHashMap children; boolean maybeUsedFromWildcard; String wildcardImportPath; public ThemeInfoImpl(ThemeManager manager, String name, ThemeInfoImpl parent) { super(manager, parent); this.name = name; - this.children = new HashMap(); + this.children = new CascadedHashMap(); } void copy(ThemeInfoImpl src) { - children.putAll(src.children); - params.putAll(src.params); + super.copy(src); + children.collapseAndSetFallback(src.children); wildcardImportPath = src.wildcardImportPath; } @@ -62,18 +62,30 @@ public String getName() { } public ThemeInfo getChildTheme(String theme) { + return getChildThemeImpl(theme, true); + } + + ThemeInfo getChildThemeImpl(String theme, boolean useFallback) { ThemeInfo info = children.get(theme); if(info == null) { if(wildcardImportPath != null) { - info = manager.resolveWildcard(wildcardImportPath, theme); + info = manager.resolveWildcard(wildcardImportPath, theme, useFallback); } - if(info == null) { + if(info == null && useFallback) { DebugHook.getDebugHook().missingChildTheme(this, theme); } } return info; } + final ThemeInfoImpl getTheme(String name) { + return children.get(name); + } + + void putTheme(String name, ThemeInfoImpl child) { + children.put(name, child); + } + public String getThemePath() { return getThemePath(0).toString(); } diff --git a/twl/src/de/matthiasmann/twl/theme/ThemeManager.java b/twl/src/de/matthiasmann/twl/theme/ThemeManager.java index ba7e805..6b0db65 100644 --- a/twl/src/de/matthiasmann/twl/theme/ThemeManager.java +++ b/twl/src/de/matthiasmann/twl/theme/ThemeManager.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -37,6 +37,7 @@ import de.matthiasmann.twl.InputMap; import de.matthiasmann.twl.KeyStroke; import de.matthiasmann.twl.ListBox; +import de.matthiasmann.twl.ParameterMap; import de.matthiasmann.twl.renderer.Font; import de.matthiasmann.twl.renderer.Image; import de.matthiasmann.twl.PositionAnimatedPanel; @@ -52,7 +53,6 @@ import java.net.URL; import java.text.ParseException; import java.util.ArrayList; -import java.util.Collections; import java.util.HashMap; import java.util.LinkedHashSet; import java.util.Map; @@ -76,13 +76,13 @@ public class ThemeManager { static final Object NULL = new Object(); + final ParameterMapImpl constants; private final Renderer renderer; private final CacheContext cacheContext; private final ImageManager imageManager; private final HashMap fonts; private final HashMap themes; private final HashMap inputMaps; - final HashMap constants; private final MathInterpreter mathInterpreter; private Font defaultFont; private Font firstFont; @@ -91,13 +91,13 @@ public class ThemeManager { final ParameterListImpl emptyList; private ThemeManager(Renderer renderer, CacheContext cacheContext) throws XmlPullParserException, IOException { + this.constants = new ParameterMapImpl(this, null); this.renderer = renderer; this.cacheContext = cacheContext; - this.imageManager = new ImageManager(renderer); + this.imageManager = new ImageManager(constants, renderer); this.fonts = new HashMap(); this.themes = new HashMap(); this.inputMaps = new HashMap(); - this.constants = new HashMap(); this.emptyMap = new ParameterMapImpl(this, null); this.emptyList = new ParameterListImpl(this, null); this.mathInterpreter = new MathInterpreter(); @@ -165,7 +165,7 @@ public static ThemeManager createThemeManager(URL url, Renderer renderer) throws * @param cacheContext The cache context into which the resources are loaded * @return a new ThemeManager * @throws IOException if an error occured while loading - * @throws NullPointerException if one of the passed parameters is {@code null} + * @throws IllegalArgumentException if one of the passed parameters is {@code null} * @see Renderer#setActiveCacheContext(de.matthiasmann.twl.renderer.CacheContext) * @see #destroy() */ @@ -206,12 +206,21 @@ public static> void registerEnumType(String name, Class enu } public ThemeInfo findThemeInfo(String themePath) { - return findThemeInfo(themePath, true); + return findThemeInfo(themePath, true, true); } - private ThemeInfo findThemeInfo(String themePath, boolean warn) { + private ThemeInfo findThemeInfo(String themePath, boolean warn, boolean useFallback) { int start = TextUtil.indexOf(themePath, '.', 0); ThemeInfo info = themes.get(themePath.substring(0, start)); + if(info == null) { + info = themes.get("*"); + if(info != null) { + if(!useFallback) { + return null; + } + DebugHook.getDebugHook().usingFallbackTheme(themePath); + } + } while(info != null && ++start < themePath.length()) { int next = TextUtil.indexOf(themePath, '.', start); info = info.getChildTheme(themePath.substring(start, next)); @@ -239,20 +248,15 @@ public Object getCursor(String name) { return imageManager.getCursor(name); } - public final void insertConstant(String name, Object value) { - if(constants.containsKey(name)) { - throw new IllegalArgumentException("Constant '"+name+"' already declared"); - } - if(value == null) { - value = NULL; - } - constants.put(name, value); + public ParameterMap getConstants() { + return constants; } - protected void insertDefaultConstants() { - insertConstant("SINGLE_COLUMN", ListBox.SINGLE_COLUMN); + private void insertDefaultConstants() { + constants.put("SINGLE_COLUMN", ListBox.SINGLE_COLUMN); + constants.put("MAX", Short.MAX_VALUE); } - + private void parseThemeFile(URL url) throws XmlPullParserException, IOException { try { XMLParser xmlp = new XMLParser(url); @@ -311,11 +315,7 @@ private void parseThemeFile(XMLParser xmlp, URL baseUrl) throws XmlPullParserExc defaultFont = font; } } else if("constantDef".equals(tagName)) { - Map value = parseParam(xmlp, baseUrl, "constantDef", null); - if(value.size() != 1) { - throw xmlp.error("constant definitions must define exactly 1 value"); - } - insertConstant(name, value.values().iterator().next()); + parseParam(xmlp, baseUrl, "constantDef", null, constants); } else { throw xmlp.unexpected(); } @@ -340,7 +340,7 @@ private InputMap parseInputMap(XMLParser xmlp, String name, ThemeInfoImpl parent if(parent == null) { throw xmlp.error("Can't merge on top level"); } - Object o = parent.params.get(name); + Object o = parent.getParam(name); if(o instanceof InputMap) { base = (InputMap)o; } else if(o != null) { @@ -402,9 +402,12 @@ private void parseThemeWildcardRef(XMLParser xmlp, ThemeInfoImpl parent) throws } private ThemeInfoImpl parseTheme(XMLParser xmlp, String themeName, ThemeInfoImpl parent, URL baseUrl) throws IOException, XmlPullParserException { - ParserUtil.checkNameNotEmpty(themeName, xmlp); - if(themeName.indexOf('.') >= 0 || themeName.indexOf('*') >= 0) { - throw xmlp.error("name must not contain '.' or '*'"); + // allow top level theme "*" as fallback theme + if(!themeName.equals("*") || parent != null) { + ParserUtil.checkNameNotEmpty(themeName, xmlp); + if(themeName.indexOf('.') >= 0) { + throw xmlp.error("'.' is not allowed in names"); + } } ThemeInfoImpl ti = new ThemeInfoImpl(this, themeName, parent); ThemeInfoImpl oldEnv = mathInterpreter.setEnv(ti); @@ -413,34 +416,39 @@ private ThemeInfoImpl parseTheme(XMLParser xmlp, String themeName, ThemeInfoImpl if(parent == null) { throw xmlp.error("Can't merge on top level"); } - ThemeInfoImpl tiPrev = parent.children.get(themeName); + ThemeInfoImpl tiPrev = parent.getTheme(themeName); if(tiPrev != null) { ti.copy(tiPrev); } } String ref = xmlp.getAttributeValue(null, "ref"); if(ref != null) { - ThemeInfoImpl tiRef = (ThemeInfoImpl)findThemeInfo(ref); + ThemeInfoImpl tiRef = null; + if(parent != null) { + tiRef = parent.getTheme(ref); + } + if(tiRef == null) { + tiRef = (ThemeInfoImpl)findThemeInfo(ref); + } if(tiRef == null) { throw xmlp.error("referenced theme info not found: " + ref); } ti.copy(tiRef); } - ti.maybeUsedFromWildcard = xmlp.parseBoolFromAttribute("allowWildcard", false); + ti.maybeUsedFromWildcard = xmlp.parseBoolFromAttribute("allowWildcard", true); xmlp.nextTag(); while(!xmlp.isEndTag()) { xmlp.require(XmlPullParser.START_TAG, null, null); final String tagName = xmlp.getName(); final String name = xmlp.getAttributeNotNull("name"); if("param".equals(tagName)) { - Map entries = parseParam(xmlp, baseUrl, "param", ti); - ti.params.putAll(entries); + parseParam(xmlp, baseUrl, "param", ti, ti); } else if("theme".equals(tagName)) { if(name.length() == 0) { parseThemeWildcardRef(xmlp, ti); } else { ThemeInfoImpl tiChild = parseTheme(xmlp, name, ti, baseUrl); - ti.children.put(name, tiChild); + ti.putTheme(name, tiChild); } } else { throw xmlp.unexpected(); @@ -454,8 +462,7 @@ private ThemeInfoImpl parseTheme(XMLParser xmlp, String themeName, ThemeInfoImpl return ti; } - @SuppressWarnings("unchecked") - private Map parseParam(XMLParser xmlp, URL baseUrl, String tagName, ThemeInfoImpl parent) throws XmlPullParserException, IOException { + private void parseParam(XMLParser xmlp, URL baseUrl, String tagName, ThemeInfoImpl parent, ParameterMapImpl target) throws XmlPullParserException, IOException { try { xmlp.require(XmlPullParser.START_TAG, null, tagName); String name = xmlp.getAttributeNotNull("name"); @@ -466,10 +473,16 @@ private ThemeInfoImpl parseTheme(XMLParser xmlp, String themeName, ThemeInfoImpl xmlp.nextTag(); xmlp.require(XmlPullParser.END_TAG, null, tagName); if(value instanceof Map) { - return (Map)value; + @SuppressWarnings("unchecked") + Map map = (Map)value; + if(parent == null && map.size() != 1) { + throw xmlp.error("constant definitions must define exactly 1 value"); + } + target.put(map); + } else { + ParserUtil.checkNameNotEmpty(name, xmlp); + target.put(name, value); } - ParserUtil.checkNameNotEmpty(name, xmlp); - return Collections.singletonMap(name, value); } catch (NumberFormatException ex) { throw xmlp.error("unable to parse value", ex); } @@ -494,26 +507,26 @@ private ParameterMapImpl parseMap(XMLParser xmlp, URL baseUrl, String name, Them if(parent == null) { throw xmlp.error("Can't merge on top level"); } - Object obj = parent.params.get(name); + Object obj = parent.getParam(name); if(obj instanceof ParameterMapImpl) { ParameterMapImpl base = (ParameterMapImpl)obj; - result.params.putAll(base.params); + result.copy(base); } else if(obj != null) { throw xmlp.error("Can only merge with map - found a " + obj.getClass().getSimpleName()); } } String ref = xmlp.getAttributeValue(null, "ref"); if(ref != null) { - Object obj = parent.params.get(ref); + Object obj = parent.getParam(ref); if(obj == null) { - obj = constants.get(ref); + obj = constants.getParam(ref); if(obj == null) { throw new IOException("Referenced map not found: " + ref); } } if(obj instanceof ParameterMapImpl) { ParameterMapImpl base = (ParameterMapImpl)obj; - result.params.putAll(base.params); + result.copy(base); } else { throw new IOException("Expected a map got a " + obj.getClass().getSimpleName()); } @@ -521,9 +534,8 @@ private ParameterMapImpl parseMap(XMLParser xmlp, URL baseUrl, String name, Them xmlp.nextTag(); while(xmlp.isStartTag()) { String tagName = xmlp.getName(); - Map params = parseParam(xmlp, baseUrl, "param", parent); + parseParam(xmlp, baseUrl, "param", parent, result); xmlp.require(XmlPullParser.END_TAG, null, tagName); - result.addParameters(params); xmlp.nextTag(); } return result; @@ -559,7 +571,7 @@ private Object parseValue(XMLParser xmlp, String tagName, String wildcardName, U String value = xmlp.nextText(); if("color".equals(tagName)) { - return ParserUtil.parseColor(xmlp, value); + return ParserUtil.parseColor(xmlp, value, constants); } if("float".equals(tagName)) { return parseMath(xmlp, value).floatValue(); @@ -587,7 +599,7 @@ private Object parseValue(XMLParser xmlp, String tagName, String wildcardName, U return parseObject(xmlp, value, DialogLayout.Gap.class); } if("constant".equals(tagName)) { - Object result = constants.get(value); + Object result = constants.getParam(value); if(result == null) { throw xmlp.error("Unknown constant: " + value); } @@ -622,12 +634,12 @@ private Object parseValue(XMLParser xmlp, String tagName, String wildcardName, U throw xmlp.error("unable to parse value", ex); } } - + private Number parseMath(XMLParser xmlp, String str) throws XmlPullParserException { try { return mathInterpreter.execute(str); } catch(ParseException ex) { - throw xmlp.error("unable to evaluate", ex); + throw xmlp.error("unable to evaluate", unwrap(ex)); } } @@ -635,14 +647,22 @@ private T parseObject(XMLParser xmlp, String str, Class type) throws XmlPu try { return mathInterpreter.executeCreateObject(str, type); } catch(ParseException ex) { - throw xmlp.error("unable to evaluate", ex); + throw xmlp.error("unable to evaluate", unwrap(ex)); + } + } + + private Throwable unwrap(ParseException ex) { + if(ex.getCause() != null) { + return ex.getCause(); + } else { + return ex; } } - ThemeInfo resolveWildcard(String base, String name) { + ThemeInfo resolveWildcard(String base, String name, boolean useFallback) { assert(base.length() == 0 || base.endsWith(".")); String fullPath = base.concat(name); - ThemeInfo info = findThemeInfo(fullPath, false); + ThemeInfo info = findThemeInfo(fullPath, false, useFallback); if(info != null && ((ThemeInfoImpl)info).maybeUsedFromWildcard) { return info; } @@ -659,30 +679,41 @@ public ThemeInfoImpl setEnv(ThemeInfoImpl env) { } public void accessVariable(String name) { - if(env != null) { - Object obj = env.getParameterValue(name, false); + for(ThemeInfoImpl e=env ; e!=null ; e=e.parent) { + Object obj = e.getParam(name); if(obj != null) { push(obj); return; } - obj = env.getChildTheme(name); + obj = e.getChildThemeImpl(name, false); if(obj != null) { push(obj); return; } } - Object obj = constants.get(name); + Object obj = constants.getParam(name); if(obj != null) { push(obj); return; } + Font font = fonts.get(name); + if(font != null) { + push(font); + return; + } throw new IllegalArgumentException("variable not found: " + name); } @Override protected Object accessField(Object obj, String field) { + if(obj instanceof ThemeInfoImpl) { + Object result = ((ThemeInfoImpl)obj).getTheme(field); + if(result != null) { + return result; + } + } if(obj instanceof ParameterMapImpl) { - Object result = ((ParameterMapImpl)obj).getParameterValue(field, false); + Object result = ((ParameterMapImpl)obj).getParam(field); if(result == null) { throw new IllegalArgumentException("field not found: " + field); } diff --git a/twl/src/de/matthiasmann/twl/theme/theme.dtd b/twl/src/de/matthiasmann/twl/theme/theme.dtd index a998afb..20530a5 100644 --- a/twl/src/de/matthiasmann/twl/theme/theme.dtd +++ b/twl/src/de/matthiasmann/twl/theme/theme.dtd @@ -29,6 +29,7 @@ splitx CDATA #IMPLIED splity CDATA #IMPLIED center (true|false) #IMPLIED + rot (0|90|180|270) #IMPLIED if CDATA #IMPLIED unless CDATA #IMPLIED> diff --git a/twl/src/de/matthiasmann/twl/utils/AbstractMathInterpreter.java b/twl/src/de/matthiasmann/twl/utils/AbstractMathInterpreter.java index 568f56b..3d47cc6 100644 --- a/twl/src/de/matthiasmann/twl/utils/AbstractMathInterpreter.java +++ b/twl/src/de/matthiasmann/twl/utils/AbstractMathInterpreter.java @@ -113,7 +113,7 @@ public T executeCreateObject(String str, Class type) throws ParseException return type.cast(c.newInstance(stack.toArray(new Object[count]))); } catch (Exception ex) { Logger.getLogger(AbstractMathInterpreter.class.getName()).log( - Level.SEVERE, "can't instanciate object", ex); + Level.SEVERE, "can't instantiate object", ex); } } } @@ -197,6 +197,15 @@ public void div() { } } + public void negate() { + Number a = popNumber(); + if(isFloat(a)) { + push(-a.floatValue()); + } else { + push(-a.intValue()); + } + } + public void accessArray() { Number idx = popNumber(); Object obj = pop(); @@ -223,29 +232,47 @@ public void accessField(String field) { } protected Object accessField(Object obj, String field) { + Class clazz = obj.getClass(); try { - if(obj.getClass().isArray()) { + if(clazz.isArray()) { if("length".equals(field)) { return Array.getLength(obj); } } else { - for(Method m : obj.getClass().getMethods()) { - if((m.getModifiers() & Modifier.STATIC) == 0 && - m.getReturnType() != Void.TYPE && - m.getParameterTypes().length == 0 && - (cmpName(m, field, "get") || cmpName(m, field, "is"))) { - return m.invoke(obj); + Method m = findGetter(clazz, field); + if(m == null) { + for(Class i : clazz.getInterfaces()) { + m = findGetter(i, field); + if(m != null) { + break; + } } } + if(m != null) { + return m.invoke(obj); + } } - throw new IllegalStateException("unknown field '"+field+ - "' of class '"+obj.getClass()+"'"); } catch(Throwable ex) { throw new IllegalStateException("error accessing field '"+field+ - "' of class '"+obj.getClass()+"'", ex); + "' of class '"+clazz+"'", ex); } + throw new IllegalStateException("unknown field '"+field+ + "' of class '"+clazz+"'"); } + private static Method findGetter(Class clazz, String field) { + for(Method m : clazz.getMethods()) { + if(!Modifier.isStatic(m.getModifiers()) && + m.getReturnType() != Void.TYPE && + Modifier.isPublic(m.getDeclaringClass().getModifiers()) && + m.getParameterTypes().length == 0 && + (cmpName(m, field, "get") || cmpName(m, field, "is"))) { + return m; + } + } + return null; + } + private static boolean cmpName(Method m, String fieldName, String prefix) { String methodName = m.getName(); int prefixLength = prefix.length(); diff --git a/twl/src/de/matthiasmann/twl/utils/CascadedHashMap.java b/twl/src/de/matthiasmann/twl/utils/CascadedHashMap.java new file mode 100644 index 0000000..d378fa3 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/utils/CascadedHashMap.java @@ -0,0 +1,156 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.utils; + +/** + * An add only hash map which support for a fallback hash map. + *

    The primary use for this class is to store hierarchic data structures.

    + * + * @param the key type + * @param the value type + * @author Matthias Mann + */ +public class CascadedHashMap { + + private Entry table[]; + private int size; + private CascadedHashMap fallback; + + public CascadedHashMap() { + } + + /** + * Retrieves a value from this map or it's fallback map when present. + * + * @param key the key to lookup + * @return the value or null when not found + */ + public V get(K key) { + Entry entry = getEntry(this, key); + if(entry != null) { + return entry.value; + } + return null; + } + + /** + * Puts an entry into this map + * + * @param key the key + * @param value the value + * @return the old (replaced) value or null if no entry was replaced + * @throws NullPointerException when key is null + */ + public V put(K key, V value) { + if(key == null) { + throw new NullPointerException("key"); + } + + V oldValue = null; + if(table != null) { + Entry entry = HashEntry.get(table, key); + if(entry != null) { + oldValue = entry.value; + entry.value = value; + return oldValue; + } + if(fallback != null) { + oldValue = fallback.get(key); + } + } + + insertEntry(key, value); + return oldValue; + } + + /** + * Collapses the existing fallback (by copying it into this map) and + * sets a new fallback map. + * + * @param map + */ + public void collapseAndSetFallback(CascadedHashMap map) { + if(fallback != null) { + collapsePutAll(fallback); + fallback = null; + } + fallback = map; + } + + protected static Entry getEntry(CascadedHashMap map, K key) { + do { + if(map.table != null) { + Entry entry = HashEntry.get(map.table, key); + if(entry != null) { + return entry; + } + } + map = map.fallback; + } while(map != null); + return null; + } + + private void collapsePutAll(CascadedHashMap map) { + do { + Entry tab[] = map.table; + if(tab != null) { + for(int i=0,n=tab.length ; i e = tab[i]; + while(e != null) { + if(HashEntry.get(table, e.key) == null) { + insertEntry(e.key, e.value); + } + e = e.next; + } + } + } + map = map.fallback; + } while(map != null); + } + + @SuppressWarnings("unchecked") + private void insertEntry(K key, V value) { + if(table == null) { + table = (Entry[])new Entry[16]; + } + table = HashEntry.maybeResizeTable(table, ++size); + Entry entry = new Entry(key, value); + HashEntry.insertEntry(table, entry); + } + + protected static class Entry extends HashEntry> { + V value; + + public Entry(K key, V value) { + super(key); + this.value = value; + } + } +} diff --git a/twl/src/de/matthiasmann/twl/utils/ClipStack.java b/twl/src/de/matthiasmann/twl/utils/ClipStack.java new file mode 100644 index 0000000..025f998 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/utils/ClipStack.java @@ -0,0 +1,174 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.utils; + +import de.matthiasmann.twl.Rect; + +/** + * A stack for clipping regions + * + * @author Matthias Mann + */ +public class ClipStack { + + private Entry[] clipRects; + private int numClipRects; + + public ClipStack() { + this.clipRects = new Entry[8]; + } + + /** + * Pushes the intersection of the new clip region and the current clip region + * onto the stack. + * + * @param x the left start + * @param y the top start + * @param w the width + * @param h the height + * @see #pop() + */ + public void push(int x, int y, int w, int h) { + Entry tos = push(); + tos.setXYWH(x, y, w, h); + intersect(tos); + } + + /** + * Pushes the intersection of the new clip region and the current clip region + * onto the stack. + * + * @param rect the new clip region. + * @throws NullPointerException if rect is null + * @see #pop() + */ + public void push(Rect rect) { + if(rect == null) { + throw new NullPointerException("rect"); + } + Entry tos = push(); + tos.set(rect); + intersect(tos); + } + + /** + * Pushes an "disable clipping" onto the stack. + * @see #pop() + */ + public void pushDisable() { + Entry rect = push(); + rect.disabled = true; + } + + /** + * Removes the active clip regions from the stack. + * @throws IllegalStateException when no clip regions are on the stack + */ + public void pop() { + if(numClipRects == 0) { + underflow(); + } + numClipRects--; + } + + /** + * Checks if the top of stack is an empty region (nothing will be rendered). + * This can be used to speedup rendering by skipping all rendering when the + * clip region is empty. + * @return true if the TOS is an empty region + */ + public boolean isClipEmpty() { + Entry tos = clipRects[numClipRects-1]; + return tos.isEmpty() && !tos.disabled; + } + + /** + * Retrieves the active clip region from the top of the stack + * @param rect the rect coordinates - may not be updated when clipping is disabled + * @return true if clipping is active, false if clipping is disabled + */ + public boolean getClipRect(Rect rect) { + if(numClipRects == 0) { + return false; + } + Entry tos = clipRects[numClipRects-1]; + rect.set(tos); + return !tos.disabled; + } + + /** + * Returns the current number of entries in the clip stack + * @return the number of entries + */ + public int getStackSize() { + return numClipRects; + } + + /** + * Clears the clip stack + */ + public void clearStack() { + numClipRects = 0; + } + + protected Entry push() { + if(numClipRects == clipRects.length) { + grow(); + } + Entry rect; + if((rect = clipRects[numClipRects]) == null) { + rect = new Entry(); + clipRects[numClipRects] = rect; + } + rect.disabled = false; + numClipRects++; + return rect; + } + + protected void intersect(Rect tos) { + if(numClipRects > 1) { + tos.intersect(clipRects[numClipRects-2]); + } + } + + private void grow() { + Entry[] newRects = new Entry[numClipRects*2]; + System.arraycopy(clipRects, 0, newRects, 0, numClipRects); + clipRects = newRects; + } + + private void underflow() { + throw new IllegalStateException("empty"); + } + + protected static class Entry extends Rect { + boolean disabled; + } +} diff --git a/twl/src/de/matthiasmann/twl/utils/PNGDecoder.java b/twl/src/de/matthiasmann/twl/utils/PNGDecoder.java index b791433..99271af 100644 --- a/twl/src/de/matthiasmann/twl/utils/PNGDecoder.java +++ b/twl/src/de/matthiasmann/twl/utils/PNGDecoder.java @@ -144,8 +144,27 @@ public int getWidth() { return width; } + /** + * Checks if the image has a real alpha channel. + * This method does not check for the presence of a tRNS chunk. + * + * @return true if the image has an alpha channel + * @see #hasAlpha() + */ + public boolean hasAlphaChannel() { + return colorType == COLOR_TRUEALPHA || colorType == COLOR_GREYALPHA; + } + + /** + * Checks if the image has transparency information either from + * an alpha channel or from a tRNS chunk. + * + * @return true if the image has transparency + * @see #hasAlphaChannel() + * @see #overwriteTRNS(byte, byte, byte) + */ public boolean hasAlpha() { - return colorType == COLOR_TRUEALPHA || + return hasAlphaChannel() || paletteA != null || transPixel != null; } @@ -155,6 +174,34 @@ public boolean isRGB() { colorType == COLOR_INDEXED; } + /** + * Overwrites the tRNS chunk entry to make a selected color transparent. + *

    This can only be invoked when the image has no alpha channel.

    + *

    Calling this method causes {@link #hasAlpha()} to return true.

    + * + * @param r the red component of the color to make transparent + * @param g the green component of the color to make transparent + * @param b the blue component of the color to make transparent + * @throws UnsupportedOperationException if the tRNS chunk data can't be set + * @see #hasAlphaChannel() + */ + public void overwriteTRNS(byte r, byte g, byte b) { + if(hasAlphaChannel()) { + throw new UnsupportedOperationException("image has an alpha channel"); + } + byte[] pal = this.palette; + if(pal == null) { + transPixel = new byte[] { 0, r, 0, g, 0, b }; + } else { + paletteA = new byte[pal.length/3]; + for(int i=0,j=0 ; i 8) { - throw new ParseException("number to large at " + pos, pos); + throw new ParseException("Number to large at " + pos, pos); } if(pos == start) { - unexpected(peek()); + unexpected((pos < len) ? str.charAt(pos) : -1); } interpreter.loadConst((int)Long.parseLong(str.substring(start, pos), 16)); } diff --git a/twl/src/de/matthiasmann/twl/utils/StateExpression.java b/twl/src/de/matthiasmann/twl/utils/StateExpression.java index 378cb8d..4a34455 100644 --- a/twl/src/de/matthiasmann/twl/utils/StateExpression.java +++ b/twl/src/de/matthiasmann/twl/utils/StateExpression.java @@ -33,6 +33,7 @@ import de.matthiasmann.twl.renderer.AnimationState.StateKey; import java.text.ParseException; import java.util.ArrayList; +import java.util.BitSet; /** * A class to handle animation state expression @@ -117,14 +118,11 @@ private static StateExpression parse(StringIterator si) throws ParseException { StateExpression[] childArray = children.toArray(new StateExpression[children.size()]); - if(kind == '^') { - return new Xor(childArray); - } else { - return new AndOr(kind, childArray); - } + assert kind == '|' || kind == '+' || kind == '^'; + return new Logic(kind, childArray); } - static class StringIterator { + private static class StringIterator { final String str; int pos; @@ -175,46 +173,49 @@ String getIdent() { } } - protected boolean negate; + StateExpression() { + } + + abstract void getUsedStateKeys(BitSet bs); + + boolean negate; - static class AndOr extends StateExpression { - private final StateExpression[] children; - private final boolean kind; - public AndOr(char kind, StateExpression ... children) { - assert kind == '|' || kind == '+'; + static class Logic extends StateExpression { + final StateExpression[] children; + final boolean and; + final boolean xor; + + Logic(char kind, StateExpression ... children) { this.children = children; - this.kind = kind == '|'; + this.and = kind == '+'; + this.xor = kind == '^'; } @Override public boolean evaluate(AnimationState as) { + boolean result = and ^ negate; for(StateExpression e : children) { - if(kind == e.evaluate(as)) { - return kind ^ negate; + boolean value = e.evaluate(as); + if(xor) { + result ^= value; + } else if(and != value) { + return result ^ true; } } - return !kind ^ negate; - } - } - - static class Xor extends StateExpression { - private final StateExpression[] children; - public Xor(StateExpression ... children) { - this.children = children; + return result; } @Override - public boolean evaluate(AnimationState as) { - boolean result = negate; + void getUsedStateKeys(BitSet bs) { for(StateExpression e : children) { - result ^= e.evaluate(as); + e.getUsedStateKeys(bs); } - return result; } } - + static class Check extends StateExpression { - private final StateKey state; + final StateKey state; + public Check(String state) { this.state = StateKey.get(state); } @@ -223,5 +224,10 @@ public Check(String state) { public boolean evaluate(AnimationState as) { return negate ^ (as != null && as.getAnimationState(state)); } + + @Override + void getUsedStateKeys(BitSet bs) { + bs.set(state.getID()); + } } } diff --git a/twl/src/de/matthiasmann/twl/utils/StateSelect.java b/twl/src/de/matthiasmann/twl/utils/StateSelect.java new file mode 100644 index 0000000..2a9b580 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/utils/StateSelect.java @@ -0,0 +1,117 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.utils; + +import de.matthiasmann.twl.renderer.AnimationState; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; + +/** + * + * @author Matthias Mann + */ +public class StateSelect { + + private static boolean useOptimizer = false; + + private final StateExpression[] expressions; + private final StateKey[] programKeys; + private final short[] programCodes; + + public StateSelect(StateExpression ... expressions) { + this.expressions = expressions; + + StateSelectOptimizer sso = useOptimizer + ? StateSelectOptimizer.optimize(expressions) + : null; + + if(sso != null) { + programKeys = sso.getProgramKeys(); + programCodes = sso.getProgramCodes(); + } else { + programKeys = null; + programCodes = null; + } + } + + public static boolean isUseOptimizer() { + return useOptimizer; + } + + /** + * Controls the use of the StateSelectOptimizer. + * + * @param useOptimizer true if the StateSelectOptimizer should be used + */ + public static void setUseOptimizer(boolean useOptimizer) { + StateSelect.useOptimizer = useOptimizer; + } + + public int getNumExpressions() { + return expressions.length; + } + + public StateExpression getExpression(int idx) { + return expressions[idx]; + } + + public int evaluate(AnimationState as, int noMatchIndex) { + if(programKeys != null) { + return evaluateProgram(as, noMatchIndex); + } + return evaluateExpr(as, noMatchIndex); + } + + private int evaluateExpr(AnimationState as, int noMatchIndex) { + for(int i=0,n=expressions.length ; i> 1])) { + pos++; + } + pos = programCodes[pos]; + } while(pos >= 0); + + if(pos == -1) { + return noMatchIndex; + } + return pos & CODE_MASK; + } + + static final int CODE_RESULT = 0x8000; + static final int CODE_MASK = 0x7FFF; +} diff --git a/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java b/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java new file mode 100644 index 0000000..1ea75ac --- /dev/null +++ b/twl/src/de/matthiasmann/twl/utils/StateSelectOptimizer.java @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.utils; + +import de.matthiasmann.twl.AnimationState; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import java.util.BitSet; + +/** + * + * @author Matthias Mann + */ +public final class StateSelectOptimizer { + + private final StateKey[] keys; + private final byte[] matrix; + + private final StateKey[] programKeys; + private final short[] programCodes; + private int programIdx; + + public static StateSelectOptimizer optimize(StateExpression ... expressions) { + final int numExpr = expressions.length; + if(numExpr == 0) { + return null; + } + + BitSet bs = new BitSet(); + for(StateExpression e : expressions) { + e.getUsedStateKeys(bs); + } + + final int numKeys = bs.cardinality(); + if(numKeys == 0 || numKeys >= 255) { + return null; + } + + final StateKey[] keys = new StateKey[numKeys]; + for(int keyIdx=0,keyID=-1 ; (keyID=bs.nextSetBit(keyID+1)) >= 0 ; keyIdx++) { + keys[keyIdx] = StateKey.get(keyID); + } + + final int matrixSize = 1 << numKeys; + final byte[] matrix = new byte[matrixSize]; + AnimationState as = new AnimationState(null, keys[numKeys-1].getID()+1); + + for(int matrixIdx=0 ; matrixIdx 50% of the allocated + // so no need for copying the arrays + return programKeys; + } + + public short[] getProgramCodes() { + return programCodes; + } + + private StateSelectOptimizer(StateKey[] keys, byte[] matrix) { + this.keys = keys; + this.matrix = matrix; + + programKeys = new StateKey[matrix.length-1]; + programCodes = new short[matrix.length*2-2]; + } + + private int compute(int bits, int mask) { + if(mask == matrix.length-1) { + int result = matrix[bits] - 1; + return result | StateSelect.CODE_RESULT; + } + + int best = -1; + int bestScore = -1; + int bestSet0 = 0; + int bestSet1 = 0; + + int matrixIdxInc = (bits == 0) ? 1 : Integer.lowestOneBit(bits); + + for(int keyIdx=0 ; keyIdx bestScore) { + bestScore = score; + bestSet0 = set0; + bestSet1 = set1; + best = keyIdx; + } + } + } + + if(best < 0) { + throw new AssertionError(); + } + + if(bestSet0 == bestSet1 && (bestSet0 & (bestSet0-1)) == 0) { + int result = Integer.numberOfTrailingZeros(bestSet0) - 1; + return result | StateSelect.CODE_RESULT; + } + + int bestMask = 1 << best; + mask |= bestMask; + + int idx = programIdx; + programIdx += 2; + programKeys[idx >> 1] = keys[best]; + programCodes[idx + 0] = (short)compute(bits | bestMask, mask); + programCodes[idx + 1] = (short)compute(bits, mask); + + return idx; + } +} diff --git a/twl/src/de/matthiasmann/twl/utils/TextUtil.java b/twl/src/de/matthiasmann/twl/utils/TextUtil.java index 9c574f6..e34ac53 100644 --- a/twl/src/de/matthiasmann/twl/utils/TextUtil.java +++ b/twl/src/de/matthiasmann/twl/utils/TextUtil.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -90,24 +90,35 @@ public static String notNull(String str) { * Searches for a specific character. * @param cs the CharSequence to search in * @param ch the character to search - * @param start the start index. must be >= 0. + * @param start the start index. must be >= 0. * @return the index of the character or cs.length(). */ public static int indexOf(CharSequence cs, char ch, int start) { - final int n = cs.length(); - for(; start= 0. + * @param start the start index. must be >= 0. * @return the index of the character or str.length(). */ public static int indexOf(String str, char ch, int start) { @@ -128,6 +139,47 @@ public static int skipSpaces(CharSequence s, int start, int end) { } return start; } + + /** + * Returns a whitespace trimmed substring. + * + * This method is mostly equivant to + *
    {@code s.subSequence(start).toString().trim() }
    + * + * @param s the sequence + * @param start the start index (inclusive) + * @return the sub string without leading or trailing whitespace + * @see Character#isWhitespace(char) + */ + public static String trim(CharSequence s, int start) { + return trim(s, start, s.length()); + } + + /** + * Returns a whitespace trimmed substring. + * + * This method is mostly equivant to + *
    {@code s.subSequence(start, end).toString().trim() }
    + * + * @param s the sequence + * @param start the start index (inclusive) + * @param end the end index (exclusive) + * @return the sub string without leading or trailing whitespace + * @see Character#isWhitespace(char) + */ + public static String trim(CharSequence s, int start, int end) { + start = skipSpaces(s, start, end); + while(end > start && Character.isWhitespace(s.charAt(end-1))) { + end--; + } + if(s instanceof String) { + return ((String)s).substring(start, end); + } + if(s instanceof StringBuilder) { + return ((StringBuilder)s).substring(start, end); + } + return s.subSequence(start, end).toString(); + } public static String createString(char ch, int len) { char[] buf = new char[len]; diff --git a/twl/src/de/matthiasmann/twl/utils/TypeMapping.java b/twl/src/de/matthiasmann/twl/utils/TypeMapping.java index c0aeeb2..270f587 100644 --- a/twl/src/de/matthiasmann/twl/utils/TypeMapping.java +++ b/twl/src/de/matthiasmann/twl/utils/TypeMapping.java @@ -70,6 +70,15 @@ public V get(Class clazz) { } return slowGet(clazz); } + + public boolean remove(Class clazz) { + if(HashEntry.remove(table, clazz) != null) { + removeCached(); + size--; + return true; + } + return false; + } public Set getUniqueValues() { HashSet result = new HashSet(); diff --git a/twl/src/de/matthiasmann/twl/utils/WithRunnableCallback.java b/twl/src/de/matthiasmann/twl/utils/WithRunnableCallback.java new file mode 100644 index 0000000..52175b1 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/utils/WithRunnableCallback.java @@ -0,0 +1,43 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl.utils; + +/** + * An interface to add/remove callbacks of type Runnable + * + * @author Matthias Mann + */ +public interface WithRunnableCallback { + + public void addCallback(Runnable cb); + + public void removeCallback(Runnable cb); + +} diff --git a/twl/src/de/matthiasmann/twl/utils/XMLParser.java b/twl/src/de/matthiasmann/twl/utils/XMLParser.java index 2672600..0ea4f45 100644 --- a/twl/src/de/matthiasmann/twl/utils/XMLParser.java +++ b/twl/src/de/matthiasmann/twl/utils/XMLParser.java @@ -34,7 +34,6 @@ import java.io.IOException; import java.io.InputStream; import java.net.URL; -import java.net.URLStreamHandler; import java.util.BitSet; import java.util.Collections; import java.util.LinkedHashMap; @@ -57,13 +56,30 @@ public class XMLParser implements Closeable { private static final Class[] XPP_CLASS = {XmlPullParser.class}; + private static boolean hasXMP1 = true; private final XmlPullParser xpp; private final String source; private final InputStream inputStream; private final BitSet unusedAttributes = new BitSet(); private String loggerName = XMLParser.class.getName(); - + + public static XmlPullParser createParser() throws XmlPullParserException { + if(hasXMP1) { + try { + XmlPullParser xpp = new org.xmlpull.mxp1.MXParserCachingStrings(); + xpp.setFeature(XmlPullParser.FEATURE_PROCESS_NAMESPACES, false); + // doesn't support FEATURE_VALIDATION + return xpp; + } catch(Throwable ex) { + hasXMP1 = false; + Logger.getLogger(XMLParser.class.getName()).log( + Level.WARNING, "Failed direct instantation", ex); + } + } + return XPPF.newPullParser(); + } + public XMLParser(XmlPullParser xpp, String source) { if(xpp == null) { throw new NullPointerException("xpp"); @@ -103,10 +119,7 @@ public XMLParser(URL url) throws XmlPullParserException, IOException { } if(xpp_ == null) { - XmlPullParserFactory factory = XmlPullParserFactory.newInstance(); - factory.setNamespaceAware(false); - factory.setValidating(false); - xpp_ = factory.newPullParser(); + xpp_ = createParser(); is = url.openStream(); if(is == null) { throw new FileNotFoundException(source); @@ -400,4 +413,29 @@ protected Logger getLogger() { return Logger.getLogger(loggerName); } + static class XPPF { + private static final XmlPullParserFactory xppf; + private static XmlPullParserException xppfex; + + static { + XmlPullParserFactory f = null; + try { + f = XmlPullParserFactory.newInstance(); + f.setNamespaceAware(false); + f.setValidating(false); + } catch(XmlPullParserException ex) { + Logger.getLogger(XMLParser.class.getName()).log( + Level.SEVERE, "Unable to construct XmlPullParserFactory", ex); + xppfex = ex; + } + xppf = f; + } + + static XmlPullParser newPullParser() throws XmlPullParserException { + if(xppf != null) { + return xppf.newPullParser(); + } + throw xppfex; + } + } } From a5c8808e038e5a5e78d167c370b2dbd81ad2ab52 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 14 Jan 2012 00:30:29 -0330 Subject: [PATCH 26/49] Updated GuiApiFontHelper for the new TWL. Fixed up WidgetItem2DRender. --- mcp/GuiApiFontHelper.java | 368 +++++------------------------------- mcp/WidgetItem2DRender.java | 40 ++-- 2 files changed, 72 insertions(+), 336 deletions(-) diff --git a/mcp/GuiApiFontHelper.java b/mcp/GuiApiFontHelper.java index 3cec664..d854c8d 100644 --- a/mcp/GuiApiFontHelper.java +++ b/mcp/GuiApiFontHelper.java @@ -1,8 +1,5 @@ package net.minecraft.src; -import java.lang.reflect.Field; -import java.util.ArrayList; -import java.util.Collection; import java.util.HashMap; import java.util.Map; @@ -10,10 +7,8 @@ import de.matthiasmann.twl.EditField; import de.matthiasmann.twl.TextWidget; import de.matthiasmann.twl.Widget; -import de.matthiasmann.twl.renderer.AnimationState.StateKey; -import de.matthiasmann.twl.renderer.FontParameter; +import de.matthiasmann.twl.renderer.AnimationStateString; import de.matthiasmann.twl.renderer.lwjgl.LWJGLFont; -import de.matthiasmann.twl.utils.StateExpression; /** * This class is designed to enable you to make clones of the GuiAPI font, @@ -24,108 +19,6 @@ * */ public class GuiApiFontHelper { - private class FontStateHelper { - private Color color; - private StateExpression condition; - private Object fontState; - private int offsetX; - private int offsetY; - private int style; - private int underlineOffset; - - public FontStateHelper(Object font) throws Throwable { - fontState = font; - condition = (StateExpression) GuiApiFontHelper.fontStateCondition - .get(fontState); - color = ((Color) GuiApiFontHelper.fontStateColor.get(fontState)); - offsetX = GuiApiFontHelper.fontStateOffsetX.getInt(fontState); - underlineOffset = GuiApiFontHelper.fontStateUnderlineOffset - .getInt(fontState); - offsetY = GuiApiFontHelper.fontStateOffsetY.getInt(fontState); - style = GuiApiFontHelper.fontStateStyle.getInt(fontState); - } - - public Color getColor() { - return color; - } - - public StateExpression getCondition() { - return condition; - } - - public boolean getLineThrough() { - return (style & 2) == 2; - } - - public int getOffsetX() { - return offsetX; - } - - public int getOffsetY() { - return offsetY; - } - - public boolean getUnderline() { - return (style & 1) == 1; - } - - public int getUnderlineOffset() { - return underlineOffset; - } - - public void setColor(Color col) { - color = col; - SyncWithState(); - } - - public void setInternalReference(Object ref) { - fontState = ref; - } - - public void setLineThrough(boolean val) { - if (getLineThrough() != val) { - style ^= 2; - SyncWithState(); - } - } - - public void setOffsetX(int i) { - offsetX = i; - SyncWithState(); - } - - public void setOffsetY(int i) { - offsetY = i; - SyncWithState(); - } - - public void setUnderline(boolean val) { - if (getUnderline() != val) { - style ^= 1; - SyncWithState(); - } - } - - public void setUnderlineOffset(int i) { - underlineOffset = i; - SyncWithState(); - } - - public void SyncWithState() { - try { - GuiApiFontHelper.fontStateColor.set(fontState, color); - GuiApiFontHelper.fontStateCondition.set(fontState, condition); - GuiApiFontHelper.fontStateOffsetX.set(fontState, offsetX); - GuiApiFontHelper.fontStateOffsetY.set(fontState, offsetY); - GuiApiFontHelper.fontStateUnderlineOffset.set(fontState, - underlineOffset); - GuiApiFontHelper.fontStateStyle.set(fontState, style); - } catch (Throwable e) { - e.printStackTrace(); - } - } - } - /** * These are the font states you can use for your settings. Most of the * time, the only ones you will use would be normal and hover. @@ -138,60 +31,16 @@ enum FontStates { } private static Map customFontWidgets; - private static Field editFieldTextRenderer; - - static Field fontStateColor; - static Field fontStateCondition; - static Field fontStateOffsetX; - static Field fontStateOffsetY; - static Field fontStateStyle; - static Field fontStateUnderlineOffset; - private static Field getState; - - private static Field lwjglFontStates; + private static Map stateTable; static { GuiApiFontHelper.customFontWidgets = new HashMap(); try { - GuiApiFontHelper.editFieldTextRenderer = EditField.class - .getDeclaredField("textRenderer"); - GuiApiFontHelper.editFieldTextRenderer.setAccessible(true); - - GuiApiFontHelper.lwjglFontStates = LWJGLFont.class - .getDeclaredField("fontStates"); - GuiApiFontHelper.lwjglFontStates.setAccessible(true); - - Class fontState = LWJGLFont.class.getDeclaredClasses()[0]; - - GuiApiFontHelper.fontStateCondition = fontState - .getDeclaredField("condition"); - GuiApiFontHelper.fontStateCondition.setAccessible(true); - - GuiApiFontHelper.fontStateColor = fontState - .getDeclaredField("color"); - GuiApiFontHelper.fontStateColor.setAccessible(true); - - GuiApiFontHelper.fontStateOffsetX = fontState - .getDeclaredField("offsetX"); - GuiApiFontHelper.fontStateOffsetX.setAccessible(true); - - GuiApiFontHelper.fontStateOffsetY = fontState - .getDeclaredField("offsetY"); - GuiApiFontHelper.fontStateOffsetY.setAccessible(true); - - GuiApiFontHelper.fontStateStyle = fontState - .getDeclaredField("style"); - GuiApiFontHelper.fontStateStyle.setAccessible(true); - - GuiApiFontHelper.fontStateUnderlineOffset = fontState - .getDeclaredField("underlineOffset"); - GuiApiFontHelper.fontStateUnderlineOffset.setAccessible(true); - - Class[] stateClasses = StateExpression.class.getDeclaredClasses(); - - GuiApiFontHelper.getState = stateClasses[1] - .getDeclaredField("state"); - GuiApiFontHelper.getState.setAccessible(true); - + GuiApiFontHelper.stateTable = new HashMap(); + FontStates[] states = FontStates.values(); + for (int i = 0; i < states.length; i++) { + GuiApiFontHelper.stateTable.put(states[i], + new AnimationStateString(states[i].name())); + } } catch (Throwable e) { throw new RuntimeException(e); } @@ -221,133 +70,16 @@ public static void resyncCustomFonts() { } } - LWJGLFont myFont; - - private Map states; + private LWJGLFont myFont; /** * This creates a new GuiApiFontHelper with it's own internal font * reference. */ public GuiApiFontHelper() { - states = new HashMap(); - try { - GuiWidgetScreen widgetScreen = GuiWidgetScreen.getInstance(); - LWJGLFont baseFont = (LWJGLFont) widgetScreen.theme - .getDefaultFont(); - - Object[] fontStateObjects = (Object[]) GuiApiFontHelper.lwjglFontStates - .get(baseFont); - - FontStateHelper[] fontStates = new FontStateHelper[fontStateObjects.length]; - - for (int i = 0; i < fontStates.length; i++) { - fontStates[i] = new FontStateHelper(fontStateObjects[i]); - StateExpression exp = fontStates[i].getCondition(); - if (exp == null) { - states.put(FontStates.normal, fontStates[i]); - } else { - StateKey key = (StateKey) GuiApiFontHelper.getState - .get(exp); - String name = key.getName(); - states.put(FontStates.valueOf(name), fontStates[i]); - } - } - - HashMap defaultParams = new HashMap(); - - int defStateNum = -1; - FontStateHelper defHelper = states.get(FontStates.normal); - for (int i = 0; i < fontStates.length; i++) { - if (fontStates[i] == defHelper) { - defStateNum = i; - - defaultParams.put("color", defHelper.getColor().toString()); - defaultParams.put("offsetX", - Integer.toString(defHelper.getOffsetX())); - defaultParams.put("offsetY", - Integer.toString(defHelper.getOffsetY())); - defaultParams.put("underlineOffset", - Integer.toString(defHelper.getUnderlineOffset())); - defaultParams.put("underline", - Boolean.toString(defHelper.getUnderline())); - defaultParams.put("linethrough", - Boolean.toString(defHelper.getLineThrough())); - break; - } - } - - defaultParams.put("filename", "font.fnt"); - - Collection conditionalParameters = new ArrayList(); - - for (int i = 0; i < fontStates.length; i++) { - if (i == defStateNum) { - continue; - } - FontStateHelper fontHelper = fontStates[i]; - - Map differences = new HashMap(); - - if (fontHelper.getColor() != defHelper.getColor()) { - differences.put("color", fontHelper.getColor().toString()); - } - - if (fontHelper.getOffsetX() != defHelper.getOffsetX()) { - differences.put("offsetX", - Integer.toString(fontHelper.getOffsetX())); - } - - if (fontHelper.getOffsetY() != defHelper.getOffsetY()) { - differences.put("offsetY", - Integer.toString(fontHelper.getOffsetY())); - } - - if (fontHelper.getUnderlineOffset() != defHelper - .getUnderlineOffset()) { - differences.put("underlineOffset", - Integer.toString(fontHelper.getUnderlineOffset())); - } - - if (fontHelper.getUnderline() != defHelper.getUnderline()) { - differences.put("underline", - Boolean.toString(fontHelper.getUnderline())); - } - - if (fontHelper.getLineThrough() != defHelper.getLineThrough()) { - differences.put("linethrough", - Boolean.toString(fontHelper.getLineThrough())); - } - - conditionalParameters.add(new FontParameter(fontHelper - .getCondition(), differences)); - } - - myFont = (LWJGLFont) widgetScreen.renderer.loadFont( - GuiWidgetScreen.themeURL, defaultParams, - conditionalParameters); - - fontStateObjects = (Object[]) GuiApiFontHelper.lwjglFontStates - .get(myFont); - - for (int i = 0; i < fontStateObjects.length; i++) { - FontStateHelper updatedReference = new FontStateHelper( - fontStateObjects[i]); - StateExpression exp = updatedReference.getCondition(); - if (exp == null) { - states.get(FontStates.normal).setInternalReference( - fontStateObjects[i]); - } else { - FontStates state = FontStates - .valueOf(((StateKey) GuiApiFontHelper.getState - .get(exp)).getName()); - states.get(state).setInternalReference(fontStateObjects[i]); - } - } - - } catch (Throwable e) { - throw new RuntimeException(e); - } + GuiWidgetScreen widgetScreen = GuiWidgetScreen.getInstance(); + LWJGLFont baseFont = (LWJGLFont) widgetScreen.theme.getDefaultFont(); + myFont = baseFont.clone(); } /** @@ -356,10 +88,8 @@ public GuiApiFontHelper() { * @return The Color for this font according to the specified state. */ public Color getColor(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getColor(); - } - return null; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getColor(); } /** @@ -368,10 +98,8 @@ public Color getColor(FontStates state) { * @return The LineThrough for this font according to the specified state. */ public boolean getLineThrough(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getLineThrough(); - } - return false; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getLineThrough(); } /** @@ -380,10 +108,8 @@ public boolean getLineThrough(FontStates state) { * @return The OffsetX for this font according to the specified state. */ public int getOffsetX(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getOffsetX(); - } - return 0; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getOffsetX(); } /** @@ -392,10 +118,8 @@ public int getOffsetX(FontStates state) { * @return The OffsetY for this font according to the specified state. */ public int getOffsetY(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getOffsetY(); - } - return 0; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getOffsetY(); } /** @@ -404,10 +128,8 @@ public int getOffsetY(FontStates state) { * @return The Underline for this font according to the specified state. */ public boolean getUnderline(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getUnderline(); - } - return false; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getUnderline(); } /** @@ -417,10 +139,8 @@ public boolean getUnderline(FontStates state) { * state. */ public int getUnderlineOffset(FontStates state) { - if (states.containsKey(state)) { - return states.get(state).getUnderlineOffset(); - } - return 0; + return myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .getUnderlineOffset(); } /** @@ -430,9 +150,9 @@ public int getUnderlineOffset(FontStates state) { * The Color you wish to this fontstate to have for this font. */ public void setColor(FontStates state, Color col) { - if (states.containsKey(state)) { - states.get(state).setColor(col); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)).setColor( + col); + GuiApiFontHelper.resyncCustomFonts(); } /** @@ -441,13 +161,11 @@ public void setColor(FontStates state, Color col) { */ public void setFont(EditField widget) { try { - setFont((TextWidget) GuiApiFontHelper.editFieldTextRenderer - .get(widget)); + setFont(widget.textRenderer); GuiApiFontHelper.customFontWidgets.put(widget, this); } catch (Throwable e) { e.printStackTrace(); } - } /** @@ -481,9 +199,9 @@ public void setFont(WidgetText widget) { * font. */ public void setLineThrough(FontStates state, boolean val) { - if (states.containsKey(state)) { - states.get(state).setLineThrough(val); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .setLineThrough(val); + GuiApiFontHelper.resyncCustomFonts(); } /** @@ -493,9 +211,9 @@ public void setLineThrough(FontStates state, boolean val) { * The OffsetX you wish to this fontstate to have for this font. */ public void setOffsetX(FontStates state, int i) { - if (states.containsKey(state)) { - states.get(state).setOffsetX(i); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .setOffsetX(i); + GuiApiFontHelper.resyncCustomFonts(); } /** @@ -505,9 +223,9 @@ public void setOffsetX(FontStates state, int i) { * The OffsetY you wish to this fontstate to have for this font. */ public void setOffsetY(FontStates state, int i) { - if (states.containsKey(state)) { - states.get(state).setOffsetY(i); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .setOffsetY(i); + GuiApiFontHelper.resyncCustomFonts(); } /** @@ -518,9 +236,9 @@ public void setOffsetY(FontStates state, int i) { * font. */ public void setUnderline(FontStates state, boolean val) { - if (states.containsKey(state)) { - states.get(state).setUnderline(val); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .setUnderline(val); + GuiApiFontHelper.resyncCustomFonts(); } /** @@ -531,9 +249,9 @@ public void setUnderline(FontStates state, boolean val) { * this font. */ public void setUnderlineOffset(FontStates state, int i) { - if (states.containsKey(state)) { - states.get(state).setUnderlineOffset(i); - } + myFont.evalFontState(GuiApiFontHelper.stateTable.get(state)) + .setUnderlineOffset(i); + GuiApiFontHelper.resyncCustomFonts(); } } diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index a1c4ce9..4150385 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -13,12 +13,12 @@ * border as per the theme for progressbars. This can be changed via setTheme, * see mod_GuiApiTWLExamples.SetUpColouringWindow comments for details. * - * @author Shawn + * @author ShaRose * */ public class WidgetItem2DRender extends Widget { - private static RenderItem renderer = new RenderItem(); + private static RenderItem itemRenderer = new RenderItem(); private int renderID; @@ -71,8 +71,8 @@ protected void paintWidget(GUI gui) { float scalex = 1f; float scaley = 1f; - int maxWidth = getInnerWidth(); - int maxHeight = getInnerHeight(); + int maxWidth = getInnerWidth() - 4; + int maxHeight = getInnerHeight() - 4; int scaleType = getScaleType(); @@ -118,31 +118,49 @@ protected void paintWidget(GUI gui) { y /= scaley; break; } - default: throw new IndexOutOfBoundsException( "Scale Type is out of bounds! This should never happen!"); } + x += 2; + y += 1; + if ((minecraft == null) || (Item.itemsList[getRenderID()] == null)) { // draw black or something? Maybe NULL? return; } + GuiWidgetScreen screen = GuiWidgetScreen.getInstance(); + screen.renderer.pauseRendering(); + + screen.renderer.setClipRect(); + GL11.glEnable(GL11.GL_SCISSOR_TEST); GL11.glPushMatrix(); - GL11.glDisable(3042 /* GL_BLEND *//* GL_BLEND */); + + GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); RenderHelper.enableStandardItemLighting(); + RenderHelper.func_41089_c(); + + if (getRenderID() == Block.chest.blockID) { + minecraft.renderEngine.bindTexture(minecraft.renderEngine + .getTexture("/item/chest.png")); + } + GL11.glScalef(scalex, scaley, 1); - ItemStack stack = new ItemStack(getRenderID(), 1, 0); - WidgetItem2DRender.renderer.renderItemIntoGUI(minecraft.fontRenderer, - minecraft.renderEngine, stack, x, y); - WidgetItem2DRender.renderer.renderItemOverlayIntoGUI( - minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + ItemStack stack = new ItemStack(getRenderID(), 0, 0); + WidgetItem2DRender.itemRenderer.renderItemIntoGUI( + minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + WidgetItem2DRender.itemRenderer.renderItemOverlayIntoGUI( + minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); RenderHelper.disableStandardItemLighting(); GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); + GL11.glPopMatrix(); + GL11.glDisable(GL11.GL_SCISSOR_TEST); + screen.renderer.resumeRendering(); } /** From ca567d999ac22704168f688f480580d5cd2310ca Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 14 Jan 2012 19:39:11 -0330 Subject: [PATCH 27/49] Updated to 1.1. Fixed a bug in GuiApiTWLExamples that I thought I had fixed several months ago. --- mcp/GuiOptions.java | 169 ++++++++++++++++++--------------- mcp/mod_GuiApiTWLExamples.java | 23 ++++- 2 files changed, 115 insertions(+), 77 deletions(-) diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java index 38843d5..754584d 100644 --- a/mcp/GuiOptions.java +++ b/mcp/GuiOptions.java @@ -4,6 +4,7 @@ import net.minecraft.src.GameSettings; import net.minecraft.src.GuiButton; import net.minecraft.src.GuiControls; +import net.minecraft.src.GuiLanguage; import net.minecraft.src.GuiScreen; import net.minecraft.src.GuiSlider; import net.minecraft.src.GuiSmallButton; @@ -11,84 +12,104 @@ import net.minecraft.src.StatCollector; import net.minecraft.src.StringTranslate; -public class GuiOptions extends GuiScreen { - - private GuiScreen parentScreen; - protected String screenTitle = "Options"; - private GameSettings options; - private static EnumOptions[] relevantOptions = new EnumOptions[]{EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; - - - public GuiOptions(GuiScreen var1, GameSettings var2) { - this.parentScreen = var1; - this.options = var2; - } - - public void initGui() { - StringTranslate var1 = StringTranslate.getInstance(); - this.screenTitle = var1.translateKey("options.title"); - int var2 = 0; - EnumOptions[] var3 = relevantOptions; - int var4 = var3.length; - - for(int var5 = 0; var5 < var4; ++var5) { - EnumOptions var6 = var3[var5]; - if(!var6.getEnumFloat()) { - GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); - if(var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { - var7.enabled = false; - var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore"); +public class GuiOptions extends GuiScreen +{ + private GuiScreen parentScreen; + protected String screenTitle = "Options"; + private GameSettings options; + private static EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; + + public GuiOptions(GuiScreen var1, GameSettings var2) + { + this.parentScreen = var1; + this.options = var2; + } + + public void initGui() + { + StringTranslate var1 = StringTranslate.getInstance(); + this.screenTitle = var1.translateKey("options.title"); + int var2 = 0; + EnumOptions[] var3 = relevantOptions; + int var4 = var3.length; + + for (int var5 = 0; var5 < var4; ++var5) + { + EnumOptions var6 = var3[var5]; + if (!var6.getEnumFloat()) + { + GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); + if (var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) + { + var7.enabled = false; + var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore"); + } + + this.controlList.add(var7); + } + else + { + this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); } - this.controlList.add(var7); - } else { - this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); - } - - ++var2; - } - - this.controlList.add(new GuiButton(101, this.width / 2 - 100, this.height / 6 + 96, var1.translateKey("options.video"))); - this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 120, var1.translateKey("options.controls"))); - this.controlList.add(new GuiButton(300, this.width / 2 - 100, this.height / 6 + 144, "Global Mod Settings")); - this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); - } - - protected void actionPerformed(GuiButton var1) { - if(var1.enabled) { - if(var1.id < 100 && var1 instanceof GuiSmallButton) { - this.options.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); - var1.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); - } - - if(var1.id == 101) { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); - } - - if(var1.id == 100) { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiControls(this, this.options)); - } + ++var2; + } + this.controlList.add(new GuiButton(101, this.width / 2 - 100, this.height / 6 + 72, var1.translateKey("options.video"))); + this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 96, var1.translateKey("options.controls"))); + this.controlList.add(new GuiButton(102, this.width / 2 - 100, this.height / 6 + 120, var1.translateKey("options.language"))); + + this.controlList.add(new GuiButton(300, this.width / 2 - 100, this.height / 6 + 144, "Global Mod Settings")); //GuiAPI Edit: Please make sure to modify the values above to make room + + this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); + } + + protected void actionPerformed(GuiButton var1) + { + if (var1.enabled) + { + if (var1.id < 100 && var1 instanceof GuiSmallButton) + { + this.options.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); + var1.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + } - if(var1.id == 200) { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(this.parentScreen); - } + if (var1.id == 101) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); + } - if(var1.id == 300) { - this.mc.gameSettings.saveOptions(); - ModSettingScreen.guiContext = ""; - WidgetSetting.updateAll(); - GuiModScreen.show((GuiModScreen)(new GuiModSelect(this))); - } - } - } + if (var1.id == 100) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiControls(this, this.options)); + } - public void drawScreen(int var1, int var2, float var3) { - this.drawDefaultBackground(); - this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); - super.drawScreen(var1, var2, var3); - } + if (var1.id == 102) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiLanguage(this, this.options)); + } + if (var1.id == 200) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(this.parentScreen); + } + + if(var1.id == 300) { //GuiAPI Edit + this.mc.gameSettings.saveOptions(); + ModSettingScreen.guiContext = ""; + WidgetSetting.updateAll(); + GuiModScreen.show(new GuiModSelect(this)); + } + } + } + + public void drawScreen(int var1, int var2, float var3) + { + this.drawDefaultBackground(); + this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); + super.drawScreen(var1, var2, var3); + } } diff --git a/mcp/mod_GuiApiTWLExamples.java b/mcp/mod_GuiApiTWLExamples.java index dc45d0d..b762545 100644 --- a/mcp/mod_GuiApiTWLExamples.java +++ b/mcp/mod_GuiApiTWLExamples.java @@ -5,6 +5,7 @@ import net.minecraft.src.GuiApiFontHelper.FontStates; import de.matthiasmann.twl.ColorSelector; import de.matthiasmann.twl.Label; +import de.matthiasmann.twl.ListBox; import de.matthiasmann.twl.ProgressBar; import de.matthiasmann.twl.Widget; import de.matthiasmann.twl.model.ColorSpaceHSL; @@ -20,10 +21,26 @@ private static void addRandomListboxOption(SettingList setting) { @SuppressWarnings("unused") private static void removeSelectedListboxOption(SettingList setting) { - int selected = ((WidgetList) setting.displayWidget).listBox - .getSelected(); + + ListBox listbox = ((WidgetList) setting.displayWidget).listBox; + int selected = listbox.getSelected(); + if (selected == -1) { + return; + } setting.get().remove(selected); setting.displayWidget.update(); + + if (selected == listbox.getNumEntries()) // I'm only removing one at a + // time, so this is OK. + { + selected--; + } + if (selected == -1) { + return; // This is if there aren't any entries to select left. I + // could also check getNumEntries to see if it's 0. + } + + listbox.setSelected(selected); } @SuppressWarnings("unused") @@ -115,7 +132,7 @@ private void SetUpListBox() { "ListBox Test One", "listboxTest1", "Option 1", "Option 2", "Option 3", "Option 4", "Option 5", "Option 6"); ((WidgetList) listBoxSettingTest.displayWidget).listBox - .setTheme("/listbox-noback"); + .setTheme("/listbox"); widgetSingleColumn.heightOverrideExceptions.put( listBoxSettingTest.displayWidget, 140); From a1ccd42e6245a4593d90f884b404056d27d3ca3d Mon Sep 17 00:00:00 2001 From: ShaRose Date: Thu, 2 Feb 2012 21:02:53 -0330 Subject: [PATCH 28/49] Added toString to ModAction. Added bounds updating for WidgetFloat and WidgetInt. Updated WidgetItem2DRender so it uses ItemStack instead of just a render ID: This allows support for Damage values / Subitems to render correctly. Added WidgetTick, to allow Runnable calls on things such as a frame being drawn, every X milliseconds, after X milliseconds of the screen being shown, etc. This is extendable. Added a new example showing off the new uses of WidgetItem2DRender and WidgetTick. Does not currently show the extendability of WidgetTick.iTick. --- mcp/ModAction.java | 7 +- mcp/WidgetFloat.java | 1 + mcp/WidgetInt.java | 1 + mcp/WidgetItem2DRender.java | 58 +++++- mcp/WidgetTick.java | 301 +++++++++++++++++++++++++++++ mcp/mod_GuiApiItemTickExample.java | 183 ++++++++++++++++++ 6 files changed, 542 insertions(+), 9 deletions(-) create mode 100644 mcp/WidgetTick.java create mode 100644 mcp/mod_GuiApiItemTickExample.java diff --git a/mcp/ModAction.java b/mcp/ModAction.java index a059641..178d04f 100644 --- a/mcp/ModAction.java +++ b/mcp/ModAction.java @@ -36,11 +36,11 @@ private static Boolean checkArguments(Class[] classTypes, Object[] arguments) { } private Object[] defaultArguments; + private ArrayList mergedActions = new ArrayList(); private String methodName; private Class[] methodParams = new Class[0]; private Object objectRef; - private Object tag; /** @@ -296,4 +296,9 @@ private void setupHandler(Object o, String method) { methodName = method; objectRef = o; } + + @Override + public String toString() { + return "ModAction [methodName=" + methodName + ", tag=" + tag + "]"; + } } \ No newline at end of file diff --git a/mcp/WidgetFloat.java b/mcp/WidgetFloat.java index 4ec9687..71c19a4 100644 --- a/mcp/WidgetFloat.java +++ b/mcp/WidgetFloat.java @@ -82,6 +82,7 @@ public void run() { @Override public void update() { slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setMinMaxValue(settingReference.minimumValue, settingReference.maximumValue); slider.setFormat(String.format("%s: %%.%df", niceName, decimalPlaces)); } diff --git a/mcp/WidgetInt.java b/mcp/WidgetInt.java index cb6617f..fcdd228 100644 --- a/mcp/WidgetInt.java +++ b/mcp/WidgetInt.java @@ -65,6 +65,7 @@ public void run() { @Override public void update() { slider.setValue(settingReference.get(ModSettingScreen.guiContext)); + slider.setMinMaxValue(settingReference.minimumValue, settingReference.maximumValue); slider.setFormat(String.format("%s: %%.0f", niceName)); ModSettings.dbgout("update " + settingReference.get(ModSettingScreen.guiContext) + " -> " diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index 4150385..b833071 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -20,7 +20,7 @@ public class WidgetItem2DRender extends Widget { private static RenderItem itemRenderer = new RenderItem(); - private int renderID; + private ItemStack renderStack; private int scaleType = 0; @@ -33,14 +33,24 @@ public WidgetItem2DRender() { /** * This makes the widget render the Item that is in the slot dictated by - * renderID. Note, if that ID slot is empty it will render as if you pass 0. + * renderID. Note, if that ID slot is empty it will render as if you pass 0, and that the damage will be 0. * * @param renderID */ public WidgetItem2DRender(int renderID) { + this(new ItemStack(renderID, 0, 0)); + } + + /** + * This makes the widget render the Item that is in the slot dictated by + * renderID. Note, if that ID slot is empty it will render as if you pass 0. + * + * @param renderID + */ + public WidgetItem2DRender(ItemStack renderStack) { setMinSize(16, 16); setTheme("/progressbar"); - setRenderID(renderID); + setRenderStack(renderStack); } /** @@ -49,7 +59,16 @@ public WidgetItem2DRender(int renderID) { * @return The current ID to render. */ public int getRenderID() { - return renderID; + return renderStack == null ? 0 : renderStack.itemID; + } + + /** + * This gets the ItemStack this Widget is supposed to render. + * + * @return The current ID to render. + */ + public ItemStack getRenderStack() { + return renderStack; } /** @@ -126,7 +145,7 @@ protected void paintWidget(GUI gui) { x += 2; y += 1; - if ((minecraft == null) || (Item.itemsList[getRenderID()] == null)) { + if ((minecraft == null) || (getRenderStack() == null) || (getRenderStack().getItem() == null)) { // draw black or something? Maybe NULL? return; } @@ -150,7 +169,7 @@ protected void paintWidget(GUI gui) { GL11.glScalef(scalex, scaley, 1); - ItemStack stack = new ItemStack(getRenderID(), 0, 0); + ItemStack stack = getRenderStack(); WidgetItem2DRender.itemRenderer.renderItemIntoGUI( minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); WidgetItem2DRender.itemRenderer.renderItemOverlayIntoGUI( @@ -164,7 +183,7 @@ protected void paintWidget(GUI gui) { } /** - * This sets the current ID to render. This checks bounds. + * This sets the current ID to render. This checks bounds. ItemStack damage and count will stay the same. * * @param renderID * The ID you want this widget to render. @@ -176,7 +195,30 @@ public void setRenderID(int renderID) { "Render ID must be within the possible bounds of an Item ID! (%s - %s)", 0, Item.itemsList.length - 1)); } - this.renderID = renderID; + if(renderStack == null) + renderStack = new ItemStack(renderID,0,0); + renderStack.itemID = renderID; + } + + + /** + * This sets the ItemStack to render. This checks bounds. + * + * @param stack The ItemStack you want this widget to render. Can't be null. + */ + public void setRenderStack(ItemStack stack) + { + if(stack == null) + { + throw new IllegalArgumentException("stack cannot be null."); + } + if ((stack.itemID >= Item.itemsList.length) || (stack.itemID < 0)) { + throw new IndexOutOfBoundsException( + String.format( + "Render ID must be within the possible bounds of an Item ID! (%s - %s)", + 0, Item.itemsList.length - 1)); + } + renderStack = stack; } /** diff --git a/mcp/WidgetTick.java b/mcp/WidgetTick.java new file mode 100644 index 0000000..7079f0a --- /dev/null +++ b/mcp/WidgetTick.java @@ -0,0 +1,301 @@ +package net.minecraft.src; + +import java.util.ArrayList; +import java.util.Collections; +import java.util.List; + +import de.matthiasmann.twl.GUI; +import de.matthiasmann.twl.Widget; + +/** + * This is a dummy Widget that you can use to call a Runnable object every + * frame, or every X milliseconds. You can also use it for one-off events, such + * as calling a method 5 seconds after a Widget is shown. + * + * @author ShaRose + */ +public class WidgetTick extends Widget { + + /** + * This is a Tick that calls the passed Runnable each time a specific delay + * is passed. + * + * @author ShaRose + */ + public class DelayTick implements iTick { + + long lastTick; + boolean removeSelf = false; + Runnable tickCallback; + long timeToTick; + + /** + * Creates a new DelayTick that calls each time a specific delay passes. + * + * @param callback + * The Runnable it will call. + * @param delay + * The delay on the tick. If 0, it will call on the first + * frame it is checked. + */ + public DelayTick(Runnable callback, int delay) { + if (callback == null) { + throw new IllegalArgumentException("Callback cannot be null."); + } + if (delay < 0) { + throw new IllegalArgumentException("Delay must be 0 or higher."); + } + lastTick = 0; + timeToTick = delay; + tickCallback = callback; + } + + @Override + public void checkTick() { + long millis = System.currentTimeMillis(); + if ((lastTick + timeToTick) < millis) { + lastTick = millis; + tickCallback.run(); + } + } + + /** + * If this method is called, this tick will remove itself next frame. + */ + public void removeSelf() { + removeSelf = true; + } + + @Override + public boolean shouldRemove() { + return removeSelf; + } + } + + /** + * This is a Tick that calls the passed Runnable each frame. + * + * @author ShaRose + */ + public class FrameTick implements iTick { + boolean removeSelf = false; + + Runnable tickCallback; + + /** + * Creates a new FrameTick that calls each frame. + * + * @param callback + * The Runnable it will call. + */ + public FrameTick(Runnable callback) { + if (callback == null) { + throw new IllegalArgumentException("Callback cannot be null."); + } + tickCallback = callback; + } + + @Override + public void checkTick() { + tickCallback.run(); + } + + /** + * If this method is called, this tick will remove itself next frame. + */ + public void removeSelf() { + removeSelf = true; + } + + @Override + public boolean shouldRemove() { + return removeSelf; + } + + @Override + public String toString() { + return "FrameTick [tickCallback=" + tickCallback + "]"; + } + } + + /** + * This is an interface that is used by GuiAPI for ticks. You can use it as + * well for creating custom tick patterns. + * + * @author ShaRose + */ + public interface iTick { + /** + * This is called once a frame if this Tick is added to a WidgetTick, + * and said WidgetTick is drawn. + */ + void checkTick(); + + /** + * @return Should this Tick be removed from the list? + */ + boolean shouldRemove(); + } + + /** + * This is a Tick that calls the passed Runnable after a configurable delay. + * After it is called, it tries to remove itself. + * + * @author ShaRose + */ + public class SingleTick implements iTick { + int delayBeforeRemove; + + Runnable tickCallback; + long timeToTick; + + /** + * Creates a new SingleTick that is only called once, with a + * configurable delay. After this one tick it removes itself. + * + * @param callback + * The Runnable it will call. + * @param delay + * The delay on the tick. If 0, it will call on the first + * frame it is checked. + */ + public SingleTick(Runnable callback, int delay) { + if (callback == null) { + throw new IllegalArgumentException("Callback cannot be null."); + } + if (delay < 0) { + throw new IllegalArgumentException("Delay must be 0 or higher."); + } + timeToTick = -1; + delayBeforeRemove = delay; + tickCallback = callback; + } + + @Override + public void checkTick() { + if (delayBeforeRemove == 0) { + tickCallback.run(); + } + if (timeToTick == -1) { + timeToTick = System.currentTimeMillis() + delayBeforeRemove; + } else { + if (timeToTick < System.currentTimeMillis()) { + tickCallback.run(); + } + } + } + + @Override + public boolean shouldRemove() { + if (delayBeforeRemove == 0) { + return true; + } + return timeToTick < System.currentTimeMillis(); + } + + @Override + public String toString() { + return "SingleTick [tickCallback=" + tickCallback + "]"; + } + } + + protected ArrayList ticks = new ArrayList(); + + /** + * This creates a new WidgetTick. It does nothing besides setting the max + * size to 0,0. + */ + public WidgetTick() { + setMaxSize(0, 0); + } + + /** + * This creates and adds a new Tick that calls every frame. + * + * @param callback + * The callback you want this to call. + * @return {@link #FrameTick} + */ + public FrameTick addCallback(Runnable callback) { + FrameTick tick = new FrameTick(callback); + ticks.add(tick); + return tick; + } + + /** + * This creates and adds a tick that calls at a configurable delay. + * + * @param callback + * The callback you want this to call. + * @param timepertick + * @return {@link #DelayTick} + */ + public DelayTick addCallback(Runnable callback, int timepertick) { + DelayTick tick = new DelayTick(callback, timepertick); + ticks.add(tick); + return tick; + } + + /** + * This adds an {@link #iTick} to the internal array. This is so you can + * create your own custom ticks and add them if you want something more + * powerful. + * + * @param tick + * The {@link #iTick} to add. + * @return true if it was able to be added, false otherwise. + */ + public boolean addCustomTick(iTick tick) { + return ticks.add(tick); + } + + /** + * This creates and adds a tick that is called only once after a delay, and + * then removes itself. + * + * @param callback + * The callback you want this to call. + * @param delay + * The delay on the tick. + * @return The created {@link #SingleTick} + */ + public SingleTick addTimedCallback(Runnable callback, int delay) { + SingleTick tick = new SingleTick(callback, delay); + ticks.add(tick); + return tick; + } + + /** + * Gets an unmodifiable copy of the currently registered ticks. + * + * @return A unmodifiable copy of the tick list. + */ + public List getTickArrayCopy() { + return Collections.unmodifiableList(ticks); + } + + @Override + protected void paintWidget(GUI gui) { + iTick[] removedTicks = new iTick[ticks.size()]; + for (int i = 0; i < ticks.size(); i++) { + iTick tick = ticks.get(i); + try { + tick.checkTick(); + } catch (Exception e) { + e.printStackTrace(); + throw new RuntimeException("Error when calling tick " + tick + + " at position " + i + " in WidgetTick.", e); + } + if (tick.shouldRemove()) { + removedTicks[i] = tick; + } + } + for (int i = 0; i < removedTicks.length; i++) { + iTick tick = removedTicks[i]; + if (tick != null) { + ticks.remove(tick); + } + } + + } +} diff --git a/mcp/mod_GuiApiItemTickExample.java b/mcp/mod_GuiApiItemTickExample.java new file mode 100644 index 0000000..351e92b --- /dev/null +++ b/mcp/mod_GuiApiItemTickExample.java @@ -0,0 +1,183 @@ +package net.minecraft.src; + +/** + * This is an example specifically focused to some usage of {@link WidgetTick} + * and {@link WidgetItem2DRender}. We'll be making a {@link ModScreen} that lets + * you select an Item ID and a damage value to display, as well as making it so + * that if the selected Item ID is a SubItem, if a toggle is on it will + * automatically cycle it once a second. + * + * @author ShaRose + */ +public class mod_GuiApiItemTickExample extends BaseMod { + + /** The mod screen. */ + public ModSettingScreen myModScreen; + + /** The settings. */ + public ModSettings mySettings; + + /** The setting boolean Auto Cycle SubItems. */ + public SettingBoolean settingBooleanAutoCycleSubItems; + + /** The setting int for Item Damage. */ + public SettingInt settingIntItemDamage; + + /** The setting int Item ID. */ + public SettingInt settingIntItemID; + + /** The {@link WidgetItem2DRender} this uses to render Item Icons. */ + public WidgetItem2DRender widgetRenderer; + + /** + * This {@link WidgetTick} is used to call {@link #onTick()} every 1000ms (1 + * second). + */ + public WidgetTick widgetTicker; + + @Override + public String getVersion() { + return "1.0"; + } + + @Override + public void load() { + // Create the ModSettings, ModSettingScreen, and set the + // ModSettingScreen to use a single column, like in the intermediate + // examples. + mySettings = new ModSettings("mod_GuiApiItemTickExample"); + myModScreen = new ModSettingScreen("GuiAPI Item / Tick Example"); + myModScreen.setSingleColumn(true); + + // Create a ModAction for the onUpdate() method. + ModAction onUpdateAction = new ModAction(this, "onUpdate"); + + // Create a SettingInt with a range between 1 and the max Item id, and + // then add it to the ModSettingScreen using a ModSettings helper. + settingIntItemID = mySettings.addSetting(myModScreen, + "Selected Item ID", "settingIntItemID", 1, 1, + Item.itemsList.length - 1); + + // Add a callback so whenever it's changed, it calls that onUpdate + // ModAction from earlier. + settingIntItemID.displayWidget.addCallback(onUpdateAction); + + // Create a SettingInt with the full range of a Short (Damage is saved + // as a Short for ItemStacks), and then add it to the ModSettingScreen + // using a ModSettings helper. + settingIntItemDamage = mySettings.addSetting(myModScreen, + "SubItem / Damage", "settingIntItemDamage", 0, Short.MIN_VALUE, + Short.MAX_VALUE); + + // Add a callback so whenever it's changed, it calls that onUpdate + // ModAction from earlier. + settingIntItemDamage.displayWidget.addCallback(onUpdateAction); + + // Create a SettingBoolean to enable / disable automated SubItem + // cycling, and then add it to the ModSettingScreen using a ModSettings + // helper. + settingBooleanAutoCycleSubItems = mySettings.addSetting(myModScreen, + "Automatically cycle SubItems", + "settingBooleanAutoCycleSubItems", true, "Yes", "No"); + + // Load any saved settings, if any. + mySettings.load(); + + // Make a new WidgetItem2DRender with the selected Item ID and Damage. + widgetRenderer = new WidgetItem2DRender(new ItemStack( + settingIntItemID.get(), 1, settingIntItemDamage.get())); + + // Add it to the ModSettingScreen. + myModScreen.append(widgetRenderer); + + // Now create a new WidgetTick. + widgetTicker = new WidgetTick(); + + // Add it to myModScreen.theWidget. It will be a WidgetSimplewindow by + // default, so you can do the same for any SubScreens you use. + // Preferably do NOT add this to any layout columns like + // WidgetClassicTwocolumn or WidgetSinglecolumn, as it will draw a space + // for the WidgetTick. We don't want it drawn, so we'll add it to a + // widget that won't add it to the layout. + myModScreen.theWidget.add(widgetTicker); + + // Create a ModAction for onTick, and then add it to the WidgetTick we + // created so it will call it every 1000 milliseconds, or 1 second. For + // example, to make it 'tick' twice a second, the second argument would + // be 500. If you wanted it to call every frame, make it 0. + widgetTicker.addCallback(new ModAction(this, "onTick"), 1000); + } + + /** + * This method is called every 1000ms (1 second) by {@link #widgetTicker}. + */ + @SuppressWarnings("unused") + private void onTick() { + // Are we supposed to cycle SubItems in the first place? If not, return. + if (!settingBooleanAutoCycleSubItems.get()) { + return; + } + + // Get the current stack. + ItemStack stack = new ItemStack(settingIntItemID.get(), 1, + settingIntItemDamage.get()); + + // Is the Item null, or is it NOT a subtype? If so, return. + if ((stack.getItem() == null) || !stack.getHasSubtypes()) { + return; + } + + // Get the damage. + int value = stack.getItemDamage(); + + if ((value >= 31) || (value < 0)) { + value = 0; // If greater than or equal to 31 or lower than 0, make + // it 0. + } else { + value++; // Else, increase. + } + + // And set settingIntItemDamage's value. This will also call onUpdate() + // for us, since it will call settingIntItemDamage's callbacks. + settingIntItemDamage.set(value); + } + + /** + * This is called whenever {@link #settingIntItemID} or + * {@link #settingIntItemDamage} change. It sets max / min bounds depending + * on if it's a subitem or not, and updates {@link #widgetRenderer} so it + * renders with the new Item ID and Damage value. + */ + @SuppressWarnings("unused") + private void onUpdate() { + // Get the current stack. + ItemStack stack = new ItemStack(settingIntItemID.get(), 1, + settingIntItemDamage.get()); + // Is the current item not null, AND have the SubTypes flag set? + if ((stack.getItem() != null) && stack.getHasSubtypes()) { + // If yes, set the range as 0 - 31. Normally SubItems only use 0 - + // 15, to keep compatibility with blocks, and as well there are a + // few ways of trying to find the max SubItem index for any given + // Item, but they don't always work, so we are hardcoding it for + // this demo's purposes. + settingIntItemDamage.maximumValue = 31; + settingIntItemDamage.minimumValue = 0; + // Make sure to update the Display Widget so it reflects the correct + // range. Note, this WILL cap the value if needed. + settingIntItemDamage.displayWidget.update(); + } else { + // If not, set the range as the same as a Short. This is what + // ItemStack saves damage as. + settingIntItemDamage.maximumValue = Short.MAX_VALUE; + settingIntItemDamage.minimumValue = Short.MIN_VALUE; + // Make sure to update the Display Widget so it reflects the correct + // range. Note, this WILL cap the value if needed. + settingIntItemDamage.displayWidget.update(); + } + // Finally, set the Render Stack. Note, that if the Item is null, the + // WidgetItem2DRender will just not render anything, which is what we + // want. + widgetRenderer.setRenderStack(stack); + } + +} From f3e5a7c994a93e4a649a4ce2f8e2a084440b0cff Mon Sep 17 00:00:00 2001 From: ShaRose Date: Fri, 3 Feb 2012 16:21:15 -0330 Subject: [PATCH 29/49] Moved some stuff around to fix a dumb bug when I should have known better. --- mcp/mod_GuiApiItemTickExample.java | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/mcp/mod_GuiApiItemTickExample.java b/mcp/mod_GuiApiItemTickExample.java index 351e92b..33f2692 100644 --- a/mcp/mod_GuiApiItemTickExample.java +++ b/mcp/mod_GuiApiItemTickExample.java @@ -80,12 +80,8 @@ public void load() { "Automatically cycle SubItems", "settingBooleanAutoCycleSubItems", true, "Yes", "No"); - // Load any saved settings, if any. - mySettings.load(); - - // Make a new WidgetItem2DRender with the selected Item ID and Damage. - widgetRenderer = new WidgetItem2DRender(new ItemStack( - settingIntItemID.get(), 1, settingIntItemDamage.get())); + // Make a new WidgetItem2DRender. + widgetRenderer = new WidgetItem2DRender(new ItemStack(1, 1, 0)); // Add it to the ModSettingScreen. myModScreen.append(widgetRenderer); @@ -106,6 +102,10 @@ public void load() { // example, to make it 'tick' twice a second, the second argument would // be 500. If you wanted it to call every frame, make it 0. widgetTicker.addCallback(new ModAction(this, "onTick"), 1000); + + // Load any saved settings, if any. This will call the onUpdate method + // automatically. + mySettings.load(); } /** From 78df5fd8bef4d027ae8e7d01c09535167900c667 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sun, 4 Mar 2012 21:52:14 -0330 Subject: [PATCH 30/49] Updated to 1.2.3. --- mcp/GuiOptions.java | 65 ++++++++++++++++++++++--------------- mcp/WidgetItem2DRender.java | 2 +- 2 files changed, 39 insertions(+), 28 deletions(-) diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java index 754584d..05f4eb3 100644 --- a/mcp/GuiOptions.java +++ b/mcp/GuiOptions.java @@ -1,30 +1,32 @@ package net.minecraft.src; -import net.minecraft.src.EnumOptions; -import net.minecraft.src.GameSettings; -import net.minecraft.src.GuiButton; -import net.minecraft.src.GuiControls; -import net.minecraft.src.GuiLanguage; -import net.minecraft.src.GuiScreen; -import net.minecraft.src.GuiSlider; -import net.minecraft.src.GuiSmallButton; -import net.minecraft.src.GuiVideoSettings; -import net.minecraft.src.StatCollector; -import net.minecraft.src.StringTranslate; - public class GuiOptions extends GuiScreen { + /** + * A reference to the screen object that created this. Used for navigating between screens. + */ private GuiScreen parentScreen; + + /** The title string that is displayed in the top-center of the screen. */ protected String screenTitle = "Options"; + + /** Reference to the GameSettings object. */ private GameSettings options; + + /** + * An array of options that can be changed directly from the options GUI. + */ private static EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; - public GuiOptions(GuiScreen var1, GameSettings var2) + public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings) { - this.parentScreen = var1; - this.options = var2; + this.parentScreen = par1GuiScreen; + this.options = par2GameSettings; } + /** + * Adds the buttons (and other controls) to the screen in question. + */ public void initGui() { StringTranslate var1 = StringTranslate.getInstance(); @@ -36,9 +38,11 @@ public void initGui() for (int var5 = 0; var5 < var4; ++var5) { EnumOptions var6 = var3[var5]; + if (!var6.getEnumFloat()) { GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); + if (var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) { var7.enabled = false; @@ -54,6 +58,7 @@ public void initGui() ++var2; } + this.controlList.add(new GuiButton(101, this.width / 2 - 100, this.height / 6 + 72, var1.translateKey("options.video"))); this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 96, var1.translateKey("options.controls"))); this.controlList.add(new GuiButton(102, this.width / 2 - 100, this.height / 6 + 120, var1.translateKey("options.language"))); @@ -63,41 +68,44 @@ public void initGui() this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); } - protected void actionPerformed(GuiButton var1) + /** + * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). + */ + protected void actionPerformed(GuiButton par1GuiButton) { - if (var1.enabled) + if (par1GuiButton.enabled) { - if (var1.id < 100 && var1 instanceof GuiSmallButton) + if (par1GuiButton.id < 100 && par1GuiButton instanceof GuiSmallButton) { - this.options.setOptionValue(((GuiSmallButton)var1).returnEnumOptions(), 1); - var1.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(var1.id)); + this.options.setOptionValue(((GuiSmallButton)par1GuiButton).returnEnumOptions(), 1); + par1GuiButton.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(par1GuiButton.id)); } - if (var1.id == 101) + if (par1GuiButton.id == 101) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); } - if (var1.id == 100) + if (par1GuiButton.id == 100) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(new GuiControls(this, this.options)); } - if (var1.id == 102) + if (par1GuiButton.id == 102) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(new GuiLanguage(this, this.options)); } - if (var1.id == 200) + if (par1GuiButton.id == 200) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(this.parentScreen); } - if(var1.id == 300) { //GuiAPI Edit + if(par1GuiButton.id == 300) { //GuiAPI Edit this.mc.gameSettings.saveOptions(); ModSettingScreen.guiContext = ""; WidgetSetting.updateAll(); @@ -106,10 +114,13 @@ protected void actionPerformed(GuiButton var1) } } - public void drawScreen(int var1, int var2, float var3) + /** + * Draws the screen and all the components in it. + */ + public void drawScreen(int par1, int par2, float par3) { this.drawDefaultBackground(); this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); - super.drawScreen(var1, var2, var3); + super.drawScreen(par1, par2, par3); } } diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index b833071..ecb9ac2 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -160,7 +160,7 @@ protected void paintWidget(GUI gui) { GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); RenderHelper.enableStandardItemLighting(); - RenderHelper.func_41089_c(); + RenderHelper.enableGUIStandardItemLighting(); if (getRenderID() == Block.chest.blockID) { minecraft.renderEngine.bindTexture(minecraft.renderEngine From c7c9f1f10f06f0807d1de0490249ffee51946f5b Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 27 Mar 2012 20:59:12 -0230 Subject: [PATCH 31/49] Added some debug stuff to LWJGLTexture (Meaning to do it for a while, for more information for a rare bug. Hasn't come up lately, but hey, why not) --- .../twl/renderer/lwjgl/LWJGLTexture.class | Bin 6292 -> 6377 bytes .../twl/renderer/lwjgl/LWJGLTexture.java | 16 +++++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLTexture.class index 3ed6fd3c8902ac88c56712549da27138da567dd6..b23afd99b23373acb795d76d25ee09f1ef62913b 100644 GIT binary patch delta 1396 zcmZXUYfzMB6vuzhzOXO5`y%bKi+~H1jS0IZ(YMG;SVor(vuOgSQqdrx(#goQwDmGw z%+j&fGC;YMh$QGV+;+Obhf-^%i__HPU>azanbFuVP2)^sC83Ey#{xg>`tP=jZ1@#G-=W7 z=55|_v4<7|Hsot;uZ!DgbxX=Vo!6$tyDo~^uSL5_hmJbnMm26`9SETAX zm6~g)j?UtQ5r@;{xWx~4p*h1mVRFpkq`l6JEd0@8kRgjx44Is^_=z(nKU@65CX2KD zYH^N;#a6ai%+uPvTKuNPc_NC`>he|P`OB+T$NTzF_PojNW!QVV?q}xwd6>oH`n32Du!1Fh!xE> z;$|z^qfT!g|9NwbD@`(-UHHcN)i@v&jFH-nKa>^!21ZNu2b=Ind4a4(X3G^uMq(Ff z0{As(M6@~4>sP9u^cWeVWf_JM%)0E!kS;P?nf(9c@ew-HZu4Fp-AkS@uSytJErWdw zizo22oNS)tI#!DJDQ=*KLRJZzo)O}#ri3-j=UK{ljt5!GBdlWu&r5Wa^=#l(HnNRP z)bj!jyhuAQagdk!h|To#3P;$&*An#&uSJDFTU7$DD-&Dguv5)qmnxz`-A<#rnqTWept%9WAxv%kVRq%3%HZJP;u=ZA~@n&iD!MDP@??~f&CUcBw z3~&?2xs?;bvy(FTL1E*Nu<4Yr=d?V8XY8`HjmoeG($-#cjud%Tu9c@F#IU?F7bxXV dmN3HO{3X2n+g?4fUR|>N>2n;)VV9-P_!m$(L?HkG delta 1270 zcmZ{jX>3$g6vuyeUfVm%E9K2h+i5#fS<=?dAf?8rEGeQ8)KpNTF^vlqRAf=qxI|oP zQPdch)K{?!rPNZYwB-ZcCYaEwA5@HSi$=m?QBkVYHGD7{^xQ|wH@}?wzyEX2JgiveaoXoD)eH0y%^{nk?p9sB=$OqnjM*G#O!KYHcYLooVe zl?GjF#7{>2>}LB5r=Ma%^NY=|Y_R!_iT(+1H%MIob2O70l-F@i<&>Yp6l4wHOlj2AEg4S}9wd@XcxO~% zN8&pP$r(+wvsfOr3Ni=CH3~y|w>&4R)F}CBVrdGDjb+6X#!fUTRUio$b~Ee$osETY zbq_i->NZm>1GJ6|)=TF$;&2Z|+{bM0C&>d`#6wi^Fw1y^Y98fAHdD)E+{+V!p5$5T zX=IBG(KGB}EBknkcX?hu_eJ^GmpDU%O0Z4Mph=a`tdg{-d9Ka=j#L(CyqnriWIuhAi$7_nG+rl^V3>PR(6PY1V4) z)>0sW*!=v33ybCH^=uG%vzU*T%KP#zE2X` Date: Thu, 5 Apr 2012 16:46:52 -0230 Subject: [PATCH 32/49] Added the Ingame Message example. Updated the ant script to accomadate it. --- GuiAPIAnt.xml | 6 ++-- mcp/ItemGuiApiExample.java | 48 +++++++++++++++++++++++++ mcp/mod_GuiApiIngameMessageExample.java | 33 +++++++++++++++++ 3 files changed, 83 insertions(+), 4 deletions(-) create mode 100644 mcp/ItemGuiApiExample.java create mode 100644 mcp/mod_GuiApiIngameMessageExample.java diff --git a/GuiAPIAnt.xml b/GuiAPIAnt.xml index 4219d94..b236a6c 100644 --- a/GuiAPIAnt.xml +++ b/GuiAPIAnt.xml @@ -4,11 +4,10 @@ - - + @@ -21,11 +20,10 @@ - - + diff --git a/mcp/ItemGuiApiExample.java b/mcp/ItemGuiApiExample.java new file mode 100644 index 0000000..7c9f27e --- /dev/null +++ b/mcp/ItemGuiApiExample.java @@ -0,0 +1,48 @@ +package net.minecraft.src; + +import de.matthiasmann.twl.Widget; + +/** + * This is a small example for displaying widgets in game. When you use this + * item, it simply shows a text display with a back button. + * + * @author ShaRose + */ +public class ItemGuiApiExample extends Item { + + /** + * Default constructor for Items. + * + * @param par1 + */ + protected ItemGuiApiExample(int itemID) { + super(itemID); + } + + @Override + public int getColorFromDamage(int par1, int par2) { + // This simply tints the sign black to differentiate it. This way I + // didn't have to use a sprite. (This isn't a part of GuiAPI) + return 986895; + } + + @Override + public ItemStack onItemRightClick(ItemStack par1ItemStack, World par2World, + EntityPlayer par3EntityPlayer) { + Widget textDisplay = GuiApiHelper + .makeTextDisplayAndGoBack( + "An example message.", + "This is a message that should be displayed when you right click with the test item selected.", + "Go back to the game.", false); + // I'm going to be creating a simple text display widget. To keep things + // small, I'll be using an existing feature from GuiApiHelper: + // makeTextDisplayAndGoBack. It makes a window with a text bar on top, a + // message (that will size itself, and if needed will use scrollbars), + // and a button to go back to whatever was open previously. It should be + // easy to see what's what for this method. + GuiModScreen.show(textDisplay); + // Finally, 'show' your new widget. + return par1ItemStack; + // Return the ItemStack without any changes (we aren't using it up). + } +} diff --git a/mcp/mod_GuiApiIngameMessageExample.java b/mcp/mod_GuiApiIngameMessageExample.java new file mode 100644 index 0000000..32e34b4 --- /dev/null +++ b/mcp/mod_GuiApiIngameMessageExample.java @@ -0,0 +1,33 @@ +package net.minecraft.src; + +/** + * This is a small example for how to make a user dialog. This part is just + * creating the item. Please view {@link ItemGuiApiExample} for the real code. + * + * @author ShaRose + */ +public class mod_GuiApiIngameMessageExample extends BaseMod { + + /** + * A reference to the Example item. + */ + Item exampleItem; + + @Override + public String getVersion() { + return "1.2.4"; + } + + @Override + public void load() { + exampleItem = new ItemGuiApiExample(30012).setItemName( + "GuiApiExampleItem").setIconCoord(10, 2); + // Create the example item, set the Name, and give it the sign's icon. + ModLoader.addName(exampleItem, "GuiAPI Example Item"); + // Give it a 'real' name. + ModLoader.addShapelessRecipe(new ItemStack(exampleItem), new Object[] { + new ItemStack(Item.sign), new ItemStack(Item.paper) }); + // Just a shapeless recipe. Normal sign and some paper. + } + +} From e79fc48eb081487394a7c93c4ae25f7ce264c153 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sat, 28 Apr 2012 20:29:45 -0230 Subject: [PATCH 33/49] Fixed it so that GuiAPI supports Minecraft launchers that install mods via Custom Classloaders. Added a try / catch block in WidgetItem2DRender so that if an exception is thrown during Item render it catches it instead of crashing. Added support so that you can set a flag to allow editing on ValueSliders. (WidgetInt / WidgetFloat) --- mcp/GuiWidgetScreen.java | 18 ++++++++--- mcp/WidgetItem2DRender.java | 62 ++++++++++++++++++++----------------- mcp/WidgetSlider.java | 29 +++++++++++++++-- 3 files changed, 74 insertions(+), 35 deletions(-) diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 65453d2..8794955 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -1,6 +1,9 @@ package net.minecraft.src; +import java.io.IOException; import java.net.URL; +import java.net.URLConnection; +import java.net.URLStreamHandler; import net.minecraft.client.Minecraft; import de.matthiasmann.twl.GUI; @@ -59,11 +62,16 @@ public static GuiWidgetScreen getInstance() { String themename = "twlGuiTheme.xml"; GuiWidgetScreen.instance.gui = new GUI(GuiWidgetScreen.instance, GuiWidgetScreen.instance.renderer, new LWJGLInput()); - GuiWidgetScreen.themeURL = GuiWidgetScreen.class.getClassLoader() - .getResource(themename); - // themeURL = new URL("file:/G:/MineCraft/GitHub/GuiAPI/theme/" + - // themename); // Testing - ModSettings.dbgout(GuiWidgetScreen.themeURL.toString()); + + GuiWidgetScreen.themeURL = new URL("classloader","",-1,themename,new URLStreamHandler(){ + @Override + protected URLConnection openConnection(URL paramURL) throws IOException { + String file = paramURL.getFile(); + if(file.startsWith("/")) { file = file.substring(1); } + return GuiWidgetScreen.class.getClassLoader().getResource(file).openConnection(); + } + }); + GuiWidgetScreen.instance.theme = ThemeManager .createThemeManager(GuiWidgetScreen.themeURL, GuiWidgetScreen.instance.renderer); diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index ecb9ac2..dbe5deb 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -33,14 +33,15 @@ public WidgetItem2DRender() { /** * This makes the widget render the Item that is in the slot dictated by - * renderID. Note, if that ID slot is empty it will render as if you pass 0, and that the damage will be 0. + * renderID. Note, if that ID slot is empty it will render as if you pass 0, + * and that the damage will be 0. * * @param renderID */ public WidgetItem2DRender(int renderID) { this(new ItemStack(renderID, 0, 0)); } - + /** * This makes the widget render the Item that is in the slot dictated by * renderID. Note, if that ID slot is empty it will render as if you pass 0. @@ -61,7 +62,7 @@ public WidgetItem2DRender(ItemStack renderStack) { public int getRenderID() { return renderStack == null ? 0 : renderStack.itemID; } - + /** * This gets the ItemStack this Widget is supposed to render. * @@ -82,7 +83,7 @@ public int getScaleType() { @Override protected void paintWidget(GUI gui) { - + Minecraft minecraft = ModSettings.getMcinst(); int x = getX(); @@ -93,13 +94,13 @@ protected void paintWidget(GUI gui) { int maxWidth = getInnerWidth() - 4; int maxHeight = getInnerHeight() - 4; - int scaleType = getScaleType(); + int scale = getScaleType(); - if ((scaleType == -1) && ((maxWidth < 16) || (maxHeight < 16))) { - scaleType = 0; + if ((scale == -1) && ((maxWidth < 16) || (maxHeight < 16))) { + scale = 0; } - switch (scaleType) { + switch (scale) { case 0: { // largest square int size = 0; @@ -145,7 +146,8 @@ protected void paintWidget(GUI gui) { x += 2; y += 1; - if ((minecraft == null) || (getRenderStack() == null) || (getRenderStack().getItem() == null)) { + if ((minecraft == null) || (getRenderStack() == null) + || (getRenderStack().getItem() == null)) { // draw black or something? Maybe NULL? return; } @@ -162,18 +164,22 @@ protected void paintWidget(GUI gui) { RenderHelper.enableStandardItemLighting(); RenderHelper.enableGUIStandardItemLighting(); - if (getRenderID() == Block.chest.blockID) { - minecraft.renderEngine.bindTexture(minecraft.renderEngine - .getTexture("/item/chest.png")); - } - GL11.glScalef(scalex, scaley, 1); ItemStack stack = getRenderStack(); - WidgetItem2DRender.itemRenderer.renderItemIntoGUI( - minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); - WidgetItem2DRender.itemRenderer.renderItemOverlayIntoGUI( - minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + try { + WidgetItem2DRender.itemRenderer + .renderItemIntoGUI(minecraft.fontRenderer, + minecraft.renderEngine, stack, x, y); + WidgetItem2DRender.itemRenderer + .renderItemOverlayIntoGUI(minecraft.fontRenderer, + minecraft.renderEngine, stack, x, y); + } catch (Throwable e) { + ModSettings + .dbgout("WidgetItem2DRender: Failed to render Itemstack '" + + stack.toString() + + "' due to unhandled exception."); + } RenderHelper.disableStandardItemLighting(); GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); @@ -183,7 +189,8 @@ protected void paintWidget(GUI gui) { } /** - * This sets the current ID to render. This checks bounds. ItemStack damage and count will stay the same. + * This sets the current ID to render. This checks bounds. ItemStack damage + * and count will stay the same. * * @param renderID * The ID you want this widget to render. @@ -195,21 +202,20 @@ public void setRenderID(int renderID) { "Render ID must be within the possible bounds of an Item ID! (%s - %s)", 0, Item.itemsList.length - 1)); } - if(renderStack == null) - renderStack = new ItemStack(renderID,0,0); + if (renderStack == null) { + renderStack = new ItemStack(renderID, 0, 0); + } renderStack.itemID = renderID; } - - + /** * This sets the ItemStack to render. This checks bounds. * - * @param stack The ItemStack you want this widget to render. Can't be null. + * @param stack + * The ItemStack you want this widget to render. Can't be null. */ - public void setRenderStack(ItemStack stack) - { - if(stack == null) - { + public void setRenderStack(ItemStack stack) { + if (stack == null) { throw new IllegalArgumentException("stack cannot be null."); } if ((stack.itemID >= Item.itemsList.length) || (stack.itemID < 0)) { diff --git a/mcp/WidgetSlider.java b/mcp/WidgetSlider.java index 86917d2..f2e6261 100644 --- a/mcp/WidgetSlider.java +++ b/mcp/WidgetSlider.java @@ -12,7 +12,7 @@ public class WidgetSlider extends ValueAdjusterFloat { /** * This is the basic constructor. It just calls the ValueAdjusterFloat - * constructor. + * constructor, as well as adding an option to allow editing the value with text. * * @param f * The FloatModel to use. @@ -20,9 +20,34 @@ public class WidgetSlider extends ValueAdjusterFloat { public WidgetSlider(FloatModel f) { super(f); } + + private boolean canEdit = false;; + + public void setCanEdit(boolean value) + { + canEdit = value; + } + + public boolean getCanEdit() + { + return canEdit; + } @Override public void startEdit() { - cancelEdit(); + if(!getCanEdit()) + { + cancelEdit(); + } + else + { + super.startEdit(); + } + } + + @Override + protected String onEditStart() + { + return Float.toString(getValue()); } } From 4e4f31068a006a630bce30ca5462cfd30bdc2cf3 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Mon, 7 May 2012 14:53:03 -0230 Subject: [PATCH 34/49] Added some javadoc to the Slider. --- mcp/WidgetSlider.java | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/mcp/WidgetSlider.java b/mcp/WidgetSlider.java index f2e6261..156c5a2 100644 --- a/mcp/WidgetSlider.java +++ b/mcp/WidgetSlider.java @@ -23,11 +23,18 @@ public WidgetSlider(FloatModel f) { private boolean canEdit = false;; + /** + * Specifies whether or not to allow the user to click on the Slider to enter a numberic value. + * @param value Whether or not to allow Editing. + */ public void setCanEdit(boolean value) { canEdit = value; } + /** + * @return True if the user can edit this Slider by clicking on it: False otherwise. + */ public boolean getCanEdit() { return canEdit; From 16b10f299dc9f206aab48928ad82e37f2afe66ea Mon Sep 17 00:00:00 2001 From: ShaRose Date: Mon, 7 May 2012 16:25:40 -0230 Subject: [PATCH 35/49] Fixed some javadoc derps. --- mcp/ItemGuiApiExample.java | 2 +- mcp/WidgetItem2DRender.java | 5 ++--- mcp/WidgetTick.java | 10 +++++----- mcp/mod_GuiApiItemTickExample.java | 2 +- 4 files changed, 9 insertions(+), 10 deletions(-) diff --git a/mcp/ItemGuiApiExample.java b/mcp/ItemGuiApiExample.java index 7c9f27e..0d65902 100644 --- a/mcp/ItemGuiApiExample.java +++ b/mcp/ItemGuiApiExample.java @@ -13,7 +13,7 @@ public class ItemGuiApiExample extends Item { /** * Default constructor for Items. * - * @param par1 + * @param itemID */ protected ItemGuiApiExample(int itemID) { super(itemID); diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index dbe5deb..38f49f1 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -43,10 +43,9 @@ public WidgetItem2DRender(int renderID) { } /** - * This makes the widget render the Item that is in the slot dictated by - * renderID. Note, if that ID slot is empty it will render as if you pass 0. + * This makes the widget render the ItemStack passed. * - * @param renderID + * @param renderStack */ public WidgetItem2DRender(ItemStack renderStack) { setMinSize(16, 16); diff --git a/mcp/WidgetTick.java b/mcp/WidgetTick.java index 7079f0a..eb5932b 100644 --- a/mcp/WidgetTick.java +++ b/mcp/WidgetTick.java @@ -214,7 +214,7 @@ public WidgetTick() { * * @param callback * The callback you want this to call. - * @return {@link #FrameTick} + * @return {@link WidgetTick.FrameTick} */ public FrameTick addCallback(Runnable callback) { FrameTick tick = new FrameTick(callback); @@ -228,7 +228,7 @@ public FrameTick addCallback(Runnable callback) { * @param callback * The callback you want this to call. * @param timepertick - * @return {@link #DelayTick} + * @return {@link WidgetTick.DelayTick} */ public DelayTick addCallback(Runnable callback, int timepertick) { DelayTick tick = new DelayTick(callback, timepertick); @@ -237,12 +237,12 @@ public DelayTick addCallback(Runnable callback, int timepertick) { } /** - * This adds an {@link #iTick} to the internal array. This is so you can + * This adds an {@link WidgetTick.iTick} to the internal array. This is so you can * create your own custom ticks and add them if you want something more * powerful. * * @param tick - * The {@link #iTick} to add. + * The {@link WidgetTick.iTick} to add. * @return true if it was able to be added, false otherwise. */ public boolean addCustomTick(iTick tick) { @@ -257,7 +257,7 @@ public boolean addCustomTick(iTick tick) { * The callback you want this to call. * @param delay * The delay on the tick. - * @return The created {@link #SingleTick} + * @return The created {@link WidgetTick.SingleTick} */ public SingleTick addTimedCallback(Runnable callback, int delay) { SingleTick tick = new SingleTick(callback, delay); diff --git a/mcp/mod_GuiApiItemTickExample.java b/mcp/mod_GuiApiItemTickExample.java index 33f2692..60fa41d 100644 --- a/mcp/mod_GuiApiItemTickExample.java +++ b/mcp/mod_GuiApiItemTickExample.java @@ -2,7 +2,7 @@ /** * This is an example specifically focused to some usage of {@link WidgetTick} - * and {@link WidgetItem2DRender}. We'll be making a {@link ModScreen} that lets + * and {@link WidgetItem2DRender}. We'll be making a {@link ModSettingScreen} that lets * you select an Item ID and a damage value to display, as well as making it so * that if the selected Item ID is a SubItem, if a toggle is on it will * automatically cycle it once a second. From 38992687762dd5208c31ad18c9affab14b422cce Mon Sep 17 00:00:00 2001 From: ShaRose Date: Mon, 7 May 2012 16:28:23 -0230 Subject: [PATCH 36/49] Added borders to a few widgets (TextArea, Buttons, Label, Listboxes, etc) --- theme/twlGuiTheme.xml | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/theme/twlGuiTheme.xml b/theme/twlGuiTheme.xml index 0802b08..4548917 100644 --- a/theme/twlGuiTheme.xml +++ b/theme/twlGuiTheme.xml @@ -82,11 +82,13 @@ - + + 2 button - center + center + 4 @@ -200,7 +202,8 @@ - + + 4 @@ -242,11 +245,13 @@ - button + button + 4 - + + 4 From f092b04d281935f197f696a431f2bb8e1776b79c Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 8 May 2012 20:11:54 -0230 Subject: [PATCH 37/49] Added a todo to remind me to change WidgetSimplewindow.scrollPane to a ScrollPane instead of a Widget. Changed a variable name in the constructor for said class it doesn't conflict (Will fix this better when I do the above fix). Fixed a typo in mod_GuiApiTWLExamples. Added textAlignment tags to Progressbars (They now center the text). --- mcp/WidgetSimplewindow.java | 8 ++++---- mcp/mod_GuiApiTWLExamples.java | 3 ++- theme/twlGuiTheme.xml | 12 ++++++++---- 3 files changed, 14 insertions(+), 9 deletions(-) diff --git a/mcp/WidgetSimplewindow.java b/mcp/WidgetSimplewindow.java index d57a3b9..9e0b0ea 100644 --- a/mcp/WidgetSimplewindow.java +++ b/mcp/WidgetSimplewindow.java @@ -36,7 +36,7 @@ public class WidgetSimplewindow extends Widget { /** * This is a reference to the ScrollPane that the Main Widget is in. */ - public Widget scrollPane = null; + public Widget scrollPane = null; //TODO: Make this ScrollPane next release. /** * This is a reference to the Label that acts as the title on top. */ @@ -98,9 +98,9 @@ public WidgetSimplewindow(Widget w, String s) { * @param showbackButton */ public WidgetSimplewindow(Widget w, String s, Boolean showbackButton) { - ScrollPane scrollPane = new ScrollPane(w); - scrollPane.setFixed(ScrollPane.Fixed.HORIZONTAL); - this.scrollPane = scrollPane; + ScrollPane scrollpane = new ScrollPane(w); + scrollpane.setFixed(ScrollPane.Fixed.HORIZONTAL); + this.scrollPane = scrollpane; mainWidget = w; setTheme(""); init(showbackButton, s); diff --git a/mcp/mod_GuiApiTWLExamples.java b/mcp/mod_GuiApiTWLExamples.java index b762545..e3fa00b 100644 --- a/mcp/mod_GuiApiTWLExamples.java +++ b/mcp/mod_GuiApiTWLExamples.java @@ -84,7 +84,7 @@ private void SetUpColouringWindow() { WidgetSinglecolumn widgetSingleColumn = new WidgetSinglecolumn(); widgetSingleColumn.childDefaultWidth = 300; - colorLabel = new Label("This is an example of coloring a label's Test."); + colorLabel = new Label("This is an example of coloring a label's Text."); widgetSingleColumn.add(colorLabel); colorFontHelper.setFont(colorLabel); colorProgressBar = new ProgressBar(); @@ -126,6 +126,7 @@ private void SetUpColouringWindow() { "GuiAPI / TWL Coloring examples!"); } + private void SetUpListBox() { WidgetSinglecolumn widgetSingleColumn = new WidgetSinglecolumn(); listBoxSettingTest = modSettings.addSetting(widgetSingleColumn, diff --git a/theme/twlGuiTheme.xml b/theme/twlGuiTheme.xml index 4548917..fef3be3 100644 --- a/theme/twlGuiTheme.xml +++ b/theme/twlGuiTheme.xml @@ -257,22 +257,26 @@ background progress - button-border + button-border + CENTER background progress-white - button-border + button-border + CENTER none progress - button-border + button-border + CENTER none progress-white - button-border + button-border + CENTER From a082fadbb963925ced30a536f5decf7e499f4ac3 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Tue, 8 May 2012 20:14:44 -0230 Subject: [PATCH 38/49] Removed what was left of the 'jar protection' code. --- mcp/GuiWidgetScreen.java | 14 ++------------ 1 file changed, 2 insertions(+), 12 deletions(-) diff --git a/mcp/GuiWidgetScreen.java b/mcp/GuiWidgetScreen.java index 8794955..ca3fa21 100644 --- a/mcp/GuiWidgetScreen.java +++ b/mcp/GuiWidgetScreen.java @@ -44,18 +44,6 @@ public static GuiWidgetScreen getInstance() { return GuiWidgetScreen.instance; } - String GuiAPILoc = GuiWidgetScreen.class.getProtectionDomain() - .getCodeSource().getLocation().toString(); - // normally I would just use Minecraft.class, but with a mod that edits - // it it might have issues. But nobody is going to ever need or want to - // edit EnumOS2.class. - String MinecraftLoc = EnumOS2.class.getProtectionDomain() - .getCodeSource().getLocation().toString(); - - if (!GuiAPILoc.equals(MinecraftLoc)) { - throw new RuntimeException( - "GuiAPI has detected that it was not installed directly into the minecraft jar as required. If you are trying to use a mod manager such as MyCraft, or you are trying to use Modloader's mods folder, this would cause this issue. Please install directly into the minecraft jar in order for GuiAPI to work correctly."); - } try { GuiWidgetScreen.instance = new GuiWidgetScreen(); GuiWidgetScreen.instance.renderer = new LWJGLRenderer(); @@ -72,6 +60,8 @@ protected URLConnection openConnection(URL paramURL) throws IOException { } }); + //GuiWidgetScreen.themeURL = new URL("file:\\G:\\MineCraft\\GitHub\\GuiAPI\\theme\\twlGuiTheme.xml"); + GuiWidgetScreen.instance.theme = ThemeManager .createThemeManager(GuiWidgetScreen.themeURL, GuiWidgetScreen.instance.renderer); From 67940368ccd8e3cca37c1a3185c6430665e513ee Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 25 Jul 2012 13:54:52 -0230 Subject: [PATCH 39/49] Added an interface for widgets to always draw on WidgetClassicTwoColumn / WidgetSinglecolumn. Added said interface to WidgetTick. Added clipping support for WidgetClassicTwoColumn / WidgetSinglecolumn for ScrollPanes (aka MASSIVE performance increase for large windows) --- mcp/IWidgetAlwaysDraw.java | 5 ++++ mcp/WidgetClassicTwocolumn.java | 42 +++++++++++++++++++++++++++++++++ mcp/WidgetTick.java | 2 +- 3 files changed, 48 insertions(+), 1 deletion(-) create mode 100644 mcp/IWidgetAlwaysDraw.java diff --git a/mcp/IWidgetAlwaysDraw.java b/mcp/IWidgetAlwaysDraw.java new file mode 100644 index 0000000..ebc862c --- /dev/null +++ b/mcp/IWidgetAlwaysDraw.java @@ -0,0 +1,5 @@ +package net.minecraft.src; + +public interface IWidgetAlwaysDraw { + +} diff --git a/mcp/WidgetClassicTwocolumn.java b/mcp/WidgetClassicTwocolumn.java index 6ca9916..b2edfcf 100644 --- a/mcp/WidgetClassicTwocolumn.java +++ b/mcp/WidgetClassicTwocolumn.java @@ -3,6 +3,8 @@ import java.util.HashMap; import java.util.Map; +import de.matthiasmann.twl.GUI; +import de.matthiasmann.twl.ScrollPane; import de.matthiasmann.twl.Widget; /** @@ -25,6 +27,46 @@ public class WidgetClassicTwocolumn extends Widget { * This is the amount of padding to use between widgets vertically. */ public int defaultPadding = 4; + + protected void paintChildren(GUI gui) { + + ScrollPane pane = ScrollPane.getContainingScrollPane(this); + boolean isScrolling = pane != null; + + int minY = 0; + int maxY = 0; + if(isScrolling) + { + minY = getParent().getY(); + maxY = minY + pane.getContentAreaHeight(); + } + + for(int i=0,n=getNumChildren() ; i= minY && child.getY() <= maxY) + { + draw = true; + } + } + } + if(draw) + { + paintChild(gui, child); + } + } + } + } + /** * This is a map to override the heights of specific widgets. It is an * override to overrideHeight. If you set the Integer as 0, it will use what diff --git a/mcp/WidgetTick.java b/mcp/WidgetTick.java index eb5932b..262090e 100644 --- a/mcp/WidgetTick.java +++ b/mcp/WidgetTick.java @@ -14,7 +14,7 @@ * * @author ShaRose */ -public class WidgetTick extends Widget { +public class WidgetTick extends Widget implements IWidgetAlwaysDraw { /** * This is a Tick that calls the passed Runnable each time a specific delay From 5f3205591d66c1763bbd90b73e9c917531f3410f Mon Sep 17 00:00:00 2001 From: ShaRose Date: Wed, 25 Jul 2012 17:21:28 -0230 Subject: [PATCH 40/49] Added even MORE breakage detection for WidgetItem2DRender. Removed the dbgout call though: It was never used anyways. This includes a fix to the dreaded "Already tesselating!" exceptions! Hopefully, all of them! (At least me testing with all the mods in DireWolf20's LP worked, so) --- mcp/WidgetItem2DRender.java | 41 ++++++++++++++++++++++++++++++++----- 1 file changed, 36 insertions(+), 5 deletions(-) diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index 38f49f1..5bc8384 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -1,5 +1,7 @@ package net.minecraft.src; +import java.util.logging.Level; + import net.minecraft.client.Minecraft; import org.lwjgl.opengl.GL11; @@ -157,7 +159,6 @@ protected void paintWidget(GUI gui) { screen.renderer.setClipRect(); GL11.glEnable(GL11.GL_SCISSOR_TEST); GL11.glPushMatrix(); - GL11.glDisable(GL11.GL_BLEND); GL11.glEnable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); RenderHelper.enableStandardItemLighting(); @@ -166,19 +167,49 @@ protected void paintWidget(GUI gui) { GL11.glScalef(scalex, scaley, 1); ItemStack stack = getRenderStack(); + + if(Tessellator.instance.isDrawing) + { + //Yes, this IS stuff to work around 'bad' mods :D + Tessellator.instance.isDrawing = false; + } + int stackBeforeDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); try { + WidgetItem2DRender.itemRenderer .renderItemIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + if(Tessellator.instance.isDrawing) + { + //Yes, this IS stuff to work around 'bad' mods :D + Tessellator.instance.isDrawing = false; + } WidgetItem2DRender.itemRenderer .renderItemOverlayIntoGUI(minecraft.fontRenderer, minecraft.renderEngine, stack, x, y); + if(Tessellator.instance.isDrawing) + { + //Yes, this IS stuff to work around 'bad' mods :D + Tessellator.instance.isDrawing = false; + } } catch (Throwable e) { - ModSettings - .dbgout("WidgetItem2DRender: Failed to render Itemstack '" - + stack.toString() - + "' due to unhandled exception."); + if(Tessellator.instance.isDrawing) + { + //Yes, this IS stuff to work around 'bad' mods :D + Tessellator.instance.isDrawing = false; + } + } + + int stackAfterDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); + + if(stackBeforeDraw != stackAfterDraw) + { + //Yes, this IS stuff to work around 'bad' mods :D + for (int i = 0; i < stackAfterDraw - stackBeforeDraw; i++) { + GL11.glPopMatrix(); + } } + RenderHelper.disableStandardItemLighting(); GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); From cf98d2ce614347164a47fb12e63eb2bd28785105 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Sun, 5 Aug 2012 01:12:45 -0230 Subject: [PATCH 41/49] Updated to 1.3.1. Updated ModSettings.getMcinst() to just use Minecraft.getMinecraft() now. Also, because of this got rid of ModSettings.presetMcint(Minecraft) because it's not like anyone used it, and I honestly have no idea why the hell it was there in the first place tbh because it would just break stuff. Removed an unused import for WidgetItem2DRender, which shouldn't have been there anyways (It was a leftover from debugging stuff). WidgetItem2DRender now has to use reflection to get the isDrawing field from the tesselator because mojang made it a private field. If it can't get it, it will just print to console and that part of the protection will be removed, but it's not likely to happen so. --- mcp/GuiModScreen.java | 2 +- mcp/GuiOptions.java | 53 ++++++++++++-------- mcp/ModSettings.java | 45 +---------------- mcp/WidgetItem2DRender.java | 98 +++++++++++++++++++++++++++++-------- 4 files changed, 114 insertions(+), 84 deletions(-) diff --git a/mcp/GuiModScreen.java b/mcp/GuiModScreen.java index a5f7665..4b6b73f 100644 --- a/mcp/GuiModScreen.java +++ b/mcp/GuiModScreen.java @@ -144,7 +144,7 @@ public void drawScreen(int var1, int var2, float var3) { GuiWidgetScreen.getInstance().minecraftInstance.gameSettings, GuiWidgetScreen.getInstance().minecraftInstance.displayWidth, GuiWidgetScreen.getInstance().minecraftInstance.displayHeight); - RenderScale.scale = var5.scaleFactor; + RenderScale.scale = var5.getScaleFactor(); var4.syncViewportSize(); GuiWidgetScreen.getInstance().gui.update(); } diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java index 05f4eb3..5e1974b 100644 --- a/mcp/GuiOptions.java +++ b/mcp/GuiOptions.java @@ -3,20 +3,20 @@ public class GuiOptions extends GuiScreen { /** - * A reference to the screen object that created this. Used for navigating between screens. + * An array of options that can be changed directly from the options GUI. */ - private GuiScreen parentScreen; + private static final EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; - /** The title string that is displayed in the top-center of the screen. */ - protected String screenTitle = "Options"; + /** + * A reference to the screen object that created this. Used for navigating between screens. + */ + private final GuiScreen parentScreen; /** Reference to the GameSettings object. */ - private GameSettings options; + private final GameSettings options; - /** - * An array of options that can be changed directly from the options GUI. - */ - private static EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; + /** The title string that is displayed in the top-center of the screen. */ + protected String screenTitle = "Options"; public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings) { @@ -30,8 +30,8 @@ public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings) public void initGui() { StringTranslate var1 = StringTranslate.getInstance(); - this.screenTitle = var1.translateKey("options.title"); int var2 = 0; + this.screenTitle = var1.translateKey("options.title"); EnumOptions[] var3 = relevantOptions; int var4 = var3.length; @@ -39,7 +39,11 @@ public void initGui() { EnumOptions var6 = var3[var5]; - if (!var6.getEnumFloat()) + if (var6.getEnumFloat()) + { + this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); + } + else { GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); @@ -51,19 +55,17 @@ public void initGui() this.controlList.add(var7); } - else - { - this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); - } ++var2; } - this.controlList.add(new GuiButton(101, this.width / 2 - 100, this.height / 6 + 72, var1.translateKey("options.video"))); - this.controlList.add(new GuiButton(100, this.width / 2 - 100, this.height / 6 + 96, var1.translateKey("options.controls"))); - this.controlList.add(new GuiButton(102, this.width / 2 - 100, this.height / 6 + 120, var1.translateKey("options.language"))); + this.controlList.add(new GuiButton(101, this.width / 2 - 152, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.video"))); + this.controlList.add(new GuiButton(100, this.width / 2 + 2, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.controls"))); + this.controlList.add(new GuiButton(102, this.width / 2 - 152, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.language"))); + this.controlList.add(new GuiButton(103, this.width / 2 + 2, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.chat.title"))); + this.controlList.add(new GuiButton(104, this.width / 2 + 2, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.snooper.view"))); - this.controlList.add(new GuiButton(300, this.width / 2 - 100, this.height / 6 + 144, "Global Mod Settings")); //GuiAPI Edit: Please make sure to modify the values above to make room + this.controlList.add(new GuiButton(300, this.width / 2 - 152, this.height / 6 + 144 - 6, 150, 20, "Global Mod Options")); // GuiAPI Edit this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); } @@ -99,12 +101,23 @@ protected void actionPerformed(GuiButton par1GuiButton) this.mc.displayGuiScreen(new GuiLanguage(this, this.options)); } + if (par1GuiButton.id == 103) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new ScreenChatOptions(this, this.options)); + } + + if (par1GuiButton.id == 104) + { + this.mc.gameSettings.saveOptions(); + this.mc.displayGuiScreen(new GuiSnooper(this, this.options)); + } + if (par1GuiButton.id == 200) { this.mc.gameSettings.saveOptions(); this.mc.displayGuiScreen(this.parentScreen); } - if(par1GuiButton.id == 300) { //GuiAPI Edit this.mc.gameSettings.saveOptions(); ModSettingScreen.guiContext = ""; diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index 5125fbd..07f9e63 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -34,7 +34,7 @@ public class ModSettings { * Debug mode flag. Should always be false. */ public static final boolean debug = false; - private static Minecraft minecraftInstance; + static { ModSettings.contextDatadirs = new HashMap(); ModSettings.currentContext = ""; @@ -72,38 +72,7 @@ public static File getAppDir(String app) { * @return The minecraft instance. */ public static Minecraft getMcinst() { - if (ModSettings.minecraftInstance != null) { - return ModSettings.minecraftInstance; - } - Field f; - try { - f = Minecraft.class.getDeclaredFields()[1]; - f.setAccessible(true); - Minecraft m = (Minecraft) f.get(null); - if (m != null) { - ModSettings.minecraftInstance = m; - return m; - } - f = Thread.class.getDeclaredField("target"); - f.setAccessible(true); - ThreadGroup group = Thread.currentThread().getThreadGroup(); - int count = group.activeCount(); - Thread[] threads = new Thread[count]; - group.enumerate(threads); - for (int i = 0; i < threads.length; i++) { - if (threads[i].getName().equals("Minecraft main thread")) { - m = (Minecraft) f.get(threads[i]); - if (m != null) { - ModSettings.minecraftInstance = m; - return m; - } - } - } - } catch (Throwable t) { - throw new RuntimeException(t); - } - throw new RuntimeException( - "You are a godless monkey! why are you doing weird things with the innards of minecraft?"); + return Minecraft.getMinecraft(); } /** @@ -118,16 +87,6 @@ public static void loadAll(String context) { } } - /** - * Set the Minecraft instance that getMcinst returns. - * - * @param m - * The Minecraft Instance. - */ - public static void presetMcint(Minecraft m) { - ModSettings.minecraftInstance = m; - } - /** * Sets the context for mods. This means you can specify a context on a per * world / per server basis, or anything else you would prefer. This will diff --git a/mcp/WidgetItem2DRender.java b/mcp/WidgetItem2DRender.java index 5bc8384..228244a 100644 --- a/mcp/WidgetItem2DRender.java +++ b/mcp/WidgetItem2DRender.java @@ -1,6 +1,6 @@ package net.minecraft.src; -import java.util.logging.Level; +import java.lang.reflect.Field; import net.minecraft.client.Minecraft; @@ -20,8 +20,33 @@ */ public class WidgetItem2DRender extends Widget { + private static Field isDrawingField; + private static RenderItem itemRenderer = new RenderItem(); + static + { + try + { + WidgetItem2DRender.isDrawingField = Tessellator.class.getDeclaredField("z"); + WidgetItem2DRender.isDrawingField.setAccessible(true); + } + catch(Throwable e) + { + try + { + WidgetItem2DRender.isDrawingField = Tessellator.class.getDeclaredField("isDrawing"); + WidgetItem2DRender.isDrawingField.setAccessible(true); + } + catch(Throwable e2) + { + System.out.println("GuiAPI Warning: Unable to get Tessellator.isDrawing field! There will be a chance of crashes if you attempt to render a mod item!"); + } + + } + + } + private ItemStack renderStack; private int scaleType = 0; @@ -82,9 +107,26 @@ public int getScaleType() { return scaleType; } + private boolean isDrawing(Tessellator tesselator) + { + if(WidgetItem2DRender.isDrawingField == null) + { + return false; + } + try + { + WidgetItem2DRender.isDrawingField.getBoolean(tesselator); + } + catch(Throwable e) + { + + } + return false; + } + @Override protected void paintWidget(GUI gui) { - + Minecraft minecraft = ModSettings.getMcinst(); int x = getX(); @@ -167,49 +209,49 @@ protected void paintWidget(GUI gui) { GL11.glScalef(scalex, scaley, 1); ItemStack stack = getRenderStack(); - - if(Tessellator.instance.isDrawing) + + if(isDrawing(Tessellator.instance)) { //Yes, this IS stuff to work around 'bad' mods :D - Tessellator.instance.isDrawing = false; + setDrawing(Tessellator.instance, false); } int stackBeforeDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); try { - + WidgetItem2DRender.itemRenderer - .renderItemIntoGUI(minecraft.fontRenderer, - minecraft.renderEngine, stack, x, y); - if(Tessellator.instance.isDrawing) + .renderItemIntoGUI(minecraft.fontRenderer, + minecraft.renderEngine, stack, x, y); + if(isDrawing(Tessellator.instance)) { //Yes, this IS stuff to work around 'bad' mods :D - Tessellator.instance.isDrawing = false; + setDrawing(Tessellator.instance, false); } WidgetItem2DRender.itemRenderer - .renderItemOverlayIntoGUI(minecraft.fontRenderer, - minecraft.renderEngine, stack, x, y); - if(Tessellator.instance.isDrawing) + .renderItemOverlayIntoGUI(minecraft.fontRenderer, + minecraft.renderEngine, stack, x, y); + if(isDrawing(Tessellator.instance)) { //Yes, this IS stuff to work around 'bad' mods :D - Tessellator.instance.isDrawing = false; + setDrawing(Tessellator.instance, false); } } catch (Throwable e) { - if(Tessellator.instance.isDrawing) + if(isDrawing(Tessellator.instance)) { //Yes, this IS stuff to work around 'bad' mods :D - Tessellator.instance.isDrawing = false; + setDrawing(Tessellator.instance, false); } } - + int stackAfterDraw = GL11.glGetInteger(GL11.GL_MODELVIEW_STACK_DEPTH); - + if(stackBeforeDraw != stackAfterDraw) { //Yes, this IS stuff to work around 'bad' mods :D - for (int i = 0; i < stackAfterDraw - stackBeforeDraw; i++) { + for (int i = 0; i < (stackAfterDraw - stackBeforeDraw); i++) { GL11.glPopMatrix(); } } - + RenderHelper.disableStandardItemLighting(); GL11.glDisable(32826 /* GL_RESCALE_NORMAL_EXT *//* GL_RESCALE_NORMAL_EXT */); @@ -218,6 +260,22 @@ protected void paintWidget(GUI gui) { screen.renderer.resumeRendering(); } + private void setDrawing(Tessellator tesselator, boolean state) + { + if(WidgetItem2DRender.isDrawingField == null) + { + return; + } + try + { + WidgetItem2DRender.isDrawingField.setBoolean(tesselator, state); + } + catch(Throwable e) + { + + } + } + /** * This sets the current ID to render. This checks bounds. ItemStack damage * and count will stay the same. From 45db4e2e69ec84149127a47c10c384c0496d5593 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Tellef=20M=2E=20=C3=85mdal?= Date: Mon, 6 Aug 2012 19:41:17 +0200 Subject: [PATCH 42/49] Fix for MCP sandboxing to work Files created via ModSettings should now be created at the proper location depending on where minecraft is located. The change should not be noticeable by user. --- mcp/ModSettings.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index 07f9e63..5adc63c 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -62,7 +62,7 @@ public static void dbgout(String s) { * @return A File reference to the directory created. */ public static File getAppDir(String app) { - return Minecraft.getAppDir(app); + return new File(Minecraft.getMinecraftDir(),app); } /** @@ -908,7 +908,7 @@ public void load(String context) { if (ModSettings.contextDatadirs.get(context) == null) { break; } - File path = ModSettings.getAppDir("minecraft/" + File path = ModSettings.getAppDir("/" + ModSettings.contextDatadirs.get(context) + "/" + backendname + "/"); if (!path.exists()) { @@ -982,7 +982,7 @@ public void save(String context) { return; } try { - File path = ModSettings.getAppDir("minecraft/" + File path = ModSettings.getAppDir("/" + ModSettings.contextDatadirs.get(context) + "/" + backendname + "/"); ModSettings.dbgout("saving context " + context + " (" From 2ea8a824c422d0ab1d9e102f6400ca7df3b87842 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Mon, 6 Aug 2012 18:43:55 -0230 Subject: [PATCH 43/49] Pulled Vayner's request, changed it so that it attempts to get a Canonical path. --- mcp/ModSettings.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mcp/ModSettings.java b/mcp/ModSettings.java index 5adc63c..3688851 100644 --- a/mcp/ModSettings.java +++ b/mcp/ModSettings.java @@ -3,6 +3,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; +import java.io.IOException; import java.lang.reflect.Field; import java.security.InvalidParameterException; import java.util.ArrayList; @@ -62,7 +63,15 @@ public static void dbgout(String s) { * @return A File reference to the directory created. */ public static File getAppDir(String app) { - return new File(Minecraft.getMinecraftDir(),app); + try { + return new File(Minecraft.getMinecraftDir(), app) + .getCanonicalFile(); // Attempt to clean it up a bit. + } catch (IOException e) { + // If it can't be cleaned for whatever reason, just return the + // 'unclean' path. Normally I would just add throws, but that might + // break other mods. + return new File(Minecraft.getMinecraftDir(), app); + } } /** From d15e4ec16944fd54eb810e2c6bad64f427c03c70 Mon Sep 17 00:00:00 2001 From: ShaRose Date: Thu, 22 Nov 2012 00:02:07 -0330 Subject: [PATCH 44/49] Updated TWL. Added a file saying which revision of TWL we are currently using. Updated to 0.15.0 / 0.15.1 (1.4.4 / 1.4.5). --- mcp/GuiApiButton.java | 25 + mcp/GuiOptions.java | 139 -- mcp/ItemGuiApiExample.java | 2 +- mcp/mod_GuiAPI.java | 130 ++ mcp/mod_GuiApiIngameMessageExample.java | 4 +- readme.md | 23 +- theme/scrollwindow.png | Bin 708 -> 851 bytes theme/twlGuiTheme.xml | 183 ++- theme/twlGuiThemeIndentedbuttons.png | Bin 1222 -> 1293 bytes .../de/matthiasmann/twl/AnimatedWindow.class | Bin 5645 -> 5642 bytes twl/bin/de/matthiasmann/twl/Button.class | Bin 7662 -> 7662 bytes twl/bin/de/matthiasmann/twl/Color.class | Bin 5730 -> 6031 bytes .../de/matthiasmann/twl/ColorSelector.class | Bin 13984 -> 13786 bytes twl/bin/de/matthiasmann/twl/ComboBox.class | Bin 10529 -> 10529 bytes .../de/matthiasmann/twl/ComboBoxBase.class | Bin 4243 -> 4243 bytes twl/bin/de/matthiasmann/twl/DebugHook.class | Bin 5449 -> 5370 bytes twl/bin/de/matthiasmann/twl/DesktopArea.class | Bin 1982 -> 1982 bytes .../matthiasmann/twl/DialogLayout$Group.class | Bin 7476 -> 7470 bytes .../twl/DialogLayout$ParallelGroup.class | Bin 2434 -> 2434 bytes .../twl/DialogLayout$SequentialGroup.class | Bin 4462 -> 4462 bytes .../twl/DialogLayout$SpringDelta.class | Bin 930 -> 930 bytes .../de/matthiasmann/twl/DialogLayout.class | Bin 12105 -> 12110 bytes twl/bin/de/matthiasmann/twl/EditField$1.class | Bin 677 -> 677 bytes twl/bin/de/matthiasmann/twl/EditField$2.class | Bin 678 -> 678 bytes twl/bin/de/matthiasmann/twl/EditField$3.class | Bin 681 -> 681 bytes twl/bin/de/matthiasmann/twl/EditField$4.class | Bin 767 -> 767 bytes twl/bin/de/matthiasmann/twl/EditField$5.class | Bin 672 -> 672 bytes .../twl/EditField$ModelChangeListener.class | Bin 648 -> 648 bytes .../twl/EditField$PasswordMasker.class | Bin 1030 -> 1030 bytes .../twl/EditField$TextRenderer.class | Bin 5128 -> 5406 bytes twl/bin/de/matthiasmann/twl/EditField.class | Bin 26119 -> 27048 bytes .../twl/EditFieldAutoCompletionWindow.class | Bin 8215 -> 8212 bytes twl/bin/de/matthiasmann/twl/Event.class | Bin 9529 -> 9704 bytes twl/bin/de/matthiasmann/twl/FPSCounter.class | Bin 2265 -> 2265 bytes .../de/matthiasmann/twl/FileSelector$13.class | Bin 1594 -> 1594 bytes .../de/matthiasmann/twl/FileSelector$14.class | Bin 1997 -> 1994 bytes .../de/matthiasmann/twl/FileSelector$15.class | Bin 800 -> 800 bytes .../de/matthiasmann/twl/FileSelector$16.class | Bin 1330 -> 1330 bytes .../twl/FileSelector$FileFiltersModel.class | Bin 2244 -> 2244 bytes .../twl/FileSelector$NameSorter.class | Bin 1487 -> 1487 bytes .../de/matthiasmann/twl/FileSelector.class | Bin 21686 -> 22253 bytes twl/bin/de/matthiasmann/twl/FileTable.class | Bin 11006 -> 11006 bytes .../twl/FolderBrowser$FolderModel.class | Bin 3155 -> 3152 bytes .../de/matthiasmann/twl/FolderBrowser.class | Bin 6964 -> 6964 bytes twl/bin/de/matthiasmann/twl/GUI$1.class | Bin 824 -> 824 bytes twl/bin/de/matthiasmann/twl/GUI$AC.class | Bin 2124 -> 2124 bytes twl/bin/de/matthiasmann/twl/GUI$TF.class | Bin 1348 -> 1348 bytes .../matthiasmann/twl/GUI$TooltipWindow.class | Bin 2100 -> 2100 bytes twl/bin/de/matthiasmann/twl/GUI.class | Bin 24938 -> 25626 bytes twl/bin/de/matthiasmann/twl/Label.class | Bin 5626 -> 5650 bytes .../twl/ListBox$ListBoxLabel.class | Bin 4549 -> 4546 bytes twl/bin/de/matthiasmann/twl/ListBox.class | Bin 18232 -> 18226 bytes twl/bin/de/matthiasmann/twl/MenuAction.class | Bin 1563 -> 1563 bytes .../de/matthiasmann/twl/MenuCheckbox.class | Bin 1957 -> 1957 bytes twl/bin/de/matthiasmann/twl/MenuManager.class | Bin 6028 -> 6060 bytes twl/bin/de/matthiasmann/twl/PopupWindow.class | Bin 4622 -> 4846 bytes .../twl/PropertySheet$ComboBoxEditor.class | Bin 2982 -> 3150 bytes ...ComboBoxEditorFactory$ModelForwarder.class | Bin 3113 -> 3113 bytes .../PropertySheet$ComboBoxEditorFactory.class | Bin 2406 -> 2406 bytes .../twl/PropertySheet$EditorRenderer.class | Bin 2221 -> 2288 bytes .../twl/PropertySheet$LeafNode.class | Bin 1693 -> 1693 bytes .../twl/PropertySheet$ListNode.class | Bin 2064 -> 2064 bytes .../twl/PropertySheet$Model.class | Bin 1205 -> 1205 bytes .../twl/PropertySheet$PropertyEditor.class | Bin 361 -> 396 bytes ...opertySheet$PropertyListCellRenderer.class | Bin 2693 -> 2758 bytes .../twl/PropertySheet$PropertyNode.class | Bin 1570 -> 1570 bytes .../twl/PropertySheet$StringEditor.class | Bin 2311 -> 2461 bytes .../PropertySheet$StringEditorFactory.class | Bin 1307 -> 1307 bytes .../twl/PropertySheet$TreeGenerator.class | Bin 2094 -> 2094 bytes .../de/matthiasmann/twl/PropertySheet.class | Bin 7041 -> 7041 bytes .../de/matthiasmann/twl/RadialPopupMenu.class | Bin 6169 -> 6169 bytes .../de/matthiasmann/twl/ResizableFrame.class | Bin 16179 -> 16775 bytes twl/bin/de/matthiasmann/twl/ScrollPane.class | Bin 15564 -> 15561 bytes twl/bin/de/matthiasmann/twl/Scrollbar.class | Bin 13844 -> 13844 bytes .../twl/SplitPane$Direction$1.class | Bin 1088 -> 1088 bytes .../twl/SplitPane$Direction$2.class | Bin 1090 -> 1090 bytes .../twl/SplitPane$Direction.class | Bin 1824 -> 1824 bytes .../de/matthiasmann/twl/TabbedPane$CB.class | Bin 664 -> 664 bytes .../de/matthiasmann/twl/TabbedPane$Tab.class | Bin 2558 -> 2941 bytes twl/bin/de/matthiasmann/twl/TabbedPane.class | Bin 11199 -> 11570 bytes .../twl/TableBase$CellWidgetContainer.class | Bin 1016 -> 1016 bytes .../twl/TableBase$ColumnHeader$1.class | Bin 1308 -> 1308 bytes .../twl/TableBase$ColumnHeader.class | Bin 3268 -> 3268 bytes .../twl/TableBase$ColumnSizeSequence.class | Bin 2439 -> 3008 bytes .../twl/TableBase$InsertCellWidgets.class | Bin 1086 -> 1086 bytes .../twl/TableBase$RemoveCellWidgets.class | Bin 1293 -> 1293 bytes .../twl/TableBase$RowSizeSequence.class | Bin 841 -> 841 bytes .../twl/TableBase$StringCellRenderer.class | Bin 1947 -> 1947 bytes .../twl/TableBase$WidgetEntry.class | Bin 679 -> 679 bytes twl/bin/de/matthiasmann/twl/TableBase.class | Bin 38846 -> 39850 bytes .../matthiasmann/twl/TableSearchWindow.class | Bin 7025 -> 7025 bytes twl/bin/de/matthiasmann/twl/TextArea$1.class | Bin 1113 -> 616 bytes .../de/matthiasmann/twl/TextArea$Box.class | Bin 11209 -> 11498 bytes .../de/matthiasmann/twl/TextArea$LClip.class | Bin 5611 -> 5765 bytes .../matthiasmann/twl/TextArea$LElement.class | Bin 2635 -> 2607 bytes .../de/matthiasmann/twl/TextArea$LImage.class | Bin 1890 -> 1600 bytes .../de/matthiasmann/twl/TextArea$LText.class | Bin 3571 -> 3538 bytes .../matthiasmann/twl/TextArea$LWidget.class | Bin 1148 -> 1148 bytes twl/bin/de/matthiasmann/twl/TextArea.class | Bin 45522 -> 51646 bytes twl/bin/de/matthiasmann/twl/TextWidget.class | Bin 8855 -> 8980 bytes .../de/matthiasmann/twl/TreeComboBox.class | Bin 7670 -> 7670 bytes .../twl/TreePathDisplay$PathEditField.class | Bin 1401 -> 1334 bytes .../de/matthiasmann/twl/TreePathDisplay.class | Bin 6720 -> 6720 bytes .../twl/TreeTable$NodeState.class | Bin 3028 -> 3025 bytes .../twl/TreeTable$TreeLeafCellRenderer.class | Bin 3938 -> 3906 bytes .../twl/TreeTable$TreeNodeCellRenderer.class | Bin 3529 -> 3533 bytes .../de/matthiasmann/twl/ValueAdjuster.class | Bin 10831 -> 10831 bytes .../matthiasmann/twl/ValueAdjusterFloat.class | Bin 5958 -> 5963 bytes twl/bin/de/matthiasmann/twl/Widget.class | Bin 44195 -> 45101 bytes .../twl/model/AbstractOptionModel.class | Bin 1465 -> 1465 bytes .../twl/model/AbstractProperty.class | Bin 1405 -> 1543 bytes .../twl/model/AbstractTableModel.class | Bin 3330 -> 3431 bytes .../matthiasmann/twl/model/HasCallback.class | Bin 1100 -> 1217 bytes .../twl/model/JavaFileSystemModel.class | Bin 5772 -> 5887 bytes .../twl/model/ReorderListModel.class | Bin 6638 -> 6638 bytes .../twl/model/SimpleButtonModel.class | Bin 3435 -> 3432 bytes .../twl/model/SimpleTableModel.class | Bin 4201 -> 4205 bytes .../de/matthiasmann/twl/model/SortOrder.class | Bin 1609 -> 1609 bytes .../twl/model/ToggleButtonModel.class | Bin 2900 -> 2897 bytes .../twl/renderer/FontParameter.class | Bin 1291 -> 5581 bytes .../matthiasmann/twl/renderer/Renderer.class | Bin 1533 -> 1560 bytes .../twl/renderer/lwjgl/BitmapFont.class | Bin 17158 -> 17152 bytes .../renderer/lwjgl/LWJGLCacheContext.class | Bin 6752 -> 8030 bytes .../renderer/lwjgl/LWJGLDynamicImage.class | Bin 4757 -> 5080 bytes .../renderer/lwjgl/LWJGLFont$FontState.class | Bin 1996 -> 3209 bytes .../twl/renderer/lwjgl/LWJGLFont.class | Bin 16166 -> 13036 bytes .../LWJGLRenderer$SWCursorAnimState.class | Bin 1817 -> 1817 bytes .../twl/renderer/lwjgl/LWJGLRenderer.class | Bin 18996 -> 20287 bytes .../twl/renderer/lwjgl/LWJGLTexture.class | Bin 6377 -> 6304 bytes .../twl/renderer/lwjgl/PNGDecoder.class | Bin 2662 -> 0 bytes .../twl/renderer/lwjgl/TextureArea.class | Bin 4723 -> 4720 bytes .../twl/renderer/lwjgl/TextureAreaBase.class | Bin 1615 -> 1622 bytes .../twl/renderer/lwjgl/TintStack.class | Bin 1904 -> 2334 bytes .../twl/textarea/CSSStyle$1.class | Bin 989 -> 989 bytes .../matthiasmann/twl/textarea/CSSStyle.class | Bin 12155 -> 16231 bytes .../twl/textarea/HTMLTextAreaModel.class | Bin 15902 -> 15899 bytes .../de/matthiasmann/twl/textarea/Parser.class | Bin 8117 -> 8142 bytes .../twl/textarea/SimpleTextAreaModel.class | Bin 2120 -> 2377 bytes .../de/matthiasmann/twl/textarea/Style.class | Bin 7804 -> 8086 bytes .../twl/textarea/StyleAttribute.class | Bin 7549 -> 8797 bytes .../twl/textarea/StyleSheet$Selector.class | Bin 1308 -> 1375 bytes .../twl/textarea/StyleSheet.class | Bin 6386 -> 10404 bytes .../textarea/TextAreaModel$BlockElement.class | Bin 610 -> 610 bytes .../twl/textarea/TextAreaModel$Clear.class | Bin 1303 -> 1303 bytes .../TextAreaModel$ContainerElement.class | Bin 1719 -> 1719 bytes .../twl/textarea/TextAreaModel$Display.class | Bin 1217 -> 1217 bytes .../twl/textarea/TextAreaModel$Element.class | Bin 1078 -> 1078 bytes .../TextAreaModel$FloatPosition.class | Bin 1308 -> 1308 bytes .../textarea/TextAreaModel$HAlignment.class | Bin 1343 -> 1343 bytes .../textarea/TextAreaModel$ImageElement.class | Bin 1118 -> 1118 bytes .../textarea/TextAreaModel$LinkElement.class | Bin 936 -> 936 bytes .../textarea/TextAreaModel$ListElement.class | Bin 607 -> 607 bytes .../TextAreaModel$OrderedListElement.class | Bin 798 -> 798 bytes .../TextAreaModel$ParagraphElement.class | Bin 622 -> 622 bytes .../TextAreaModel$TableCellElement.class | Bin 883 -> 883 bytes .../textarea/TextAreaModel$TableElement.class | Bin 2555 -> 2555 bytes .../textarea/TextAreaModel$TextElement.class | Bin 1003 -> 1003 bytes .../textarea/TextAreaModel$VAlignment.class | Bin 1340 -> 1340 bytes .../TextAreaModel$WidgetElement.class | Bin 973 -> 973 bytes .../twl/textarea/Value$Unit.class | Bin 1687 -> 1748 bytes .../twl/theme/ImageAdjustments.class | Bin 2750 -> 2868 bytes .../twl/theme/ImageManager$AnimParams.class | Bin 553 -> 553 bytes .../twl/theme/ImageManager$ImageParams.class | Bin 979 -> 979 bytes .../matthiasmann/twl/theme/ImageManager.class | Bin 25155 -> 28300 bytes .../twl/theme/ParameterMapImpl.class | Bin 8721 -> 8725 bytes .../twl/theme/StateSelectImage.class | Bin 2432 -> 2424 bytes .../theme/ThemeManager$MathInterpreter.class | Bin 3014 -> 3014 bytes .../matthiasmann/twl/theme/ThemeManager.class | Bin 22557 -> 26930 bytes .../twl/utils/CallbackSupport.class | Bin 3591 -> 3591 bytes .../twl/utils/NaturalSortComparator.class | Bin 3138 -> 3138 bytes .../twl/utils/ParameterStringParser.class | Bin 2125 -> 2045 bytes .../twl/utils/SimpleMathParser.class | Bin 5885 -> 5882 bytes .../twl/utils/StateExpression$Check.class | Bin 1360 -> 1279 bytes .../StateExpression$StringIterator.class | Bin 2153 -> 2153 bytes .../twl/utils/StateExpression.class | Bin 2996 -> 3206 bytes .../de/matthiasmann/twl/utils/TextUtil.class | Bin 4972 -> 4974 bytes ...intAnimator$AnimationStateTimeSource.class | Bin 1814 -> 1814 bytes .../utils/TintAnimator$GUITimeSource.class | Bin 1270 -> 1643 bytes .../matthiasmann/twl/utils/TintAnimator.class | Bin 3378 -> 4696 bytes .../de/matthiasmann/twl/utils/XMLParser.class | Bin 11668 -> 11978 bytes twl/current revision.txt | 1 + twl/src/de/matthiasmann/twl/BorderLayout.java | 321 +++++ twl/src/de/matthiasmann/twl/Color.java | 26 +- .../de/matthiasmann/twl/ColorSelector.java | 2 +- twl/src/de/matthiasmann/twl/DatePicker.java | 5 +- twl/src/de/matthiasmann/twl/DebugHook.java | 2 +- twl/src/de/matthiasmann/twl/DesktopArea.java | 8 +- twl/src/de/matthiasmann/twl/DialogLayout.java | 14 +- twl/src/de/matthiasmann/twl/EditField.java | 97 +- twl/src/de/matthiasmann/twl/Event.java | 9 +- twl/src/de/matthiasmann/twl/FPSCounter.java | 71 +- twl/src/de/matthiasmann/twl/FileSelector.java | 17 + twl/src/de/matthiasmann/twl/GUI.java | 84 +- twl/src/de/matthiasmann/twl/MenuAction.java | 20 +- twl/src/de/matthiasmann/twl/MenuManager.java | 4 +- twl/src/de/matthiasmann/twl/PopupWindow.java | 10 +- .../de/matthiasmann/twl/PropertySheet.java | 38 +- .../de/matthiasmann/twl/ResizableFrame.java | 66 +- twl/src/de/matthiasmann/twl/TabbedPane.java | 34 +- twl/src/de/matthiasmann/twl/TableBase.java | 107 +- twl/src/de/matthiasmann/twl/TextArea.java | 530 +++++-- twl/src/de/matthiasmann/twl/TextWidget.java | 20 +- .../de/matthiasmann/twl/TreePathDisplay.java | 4 +- twl/src/de/matthiasmann/twl/TreeTable.java | 12 +- .../matthiasmann/twl/ValueAdjusterFloat.java | 7 +- twl/src/de/matthiasmann/twl/Widget.java | 126 +- .../twl/input/lwjgl/LWJGLInput.java | 2 +- twl/src/de/matthiasmann/twl/license.html | 2 +- twl/src/de/matthiasmann/twl/license.txt | 2 +- .../twl/model/AbstractProperty.java | 8 +- .../twl/model/AbstractTableModel.java | 6 +- .../matthiasmann/twl/model/HasCallback.java | 10 +- .../twl/model/JavaFileSystemModel.java | 8 +- .../matthiasmann/twl/renderer/FontMapper.java | 93 ++ .../twl/renderer/FontParameter.java | 192 ++- .../matthiasmann/twl/renderer/Gradient.java | 131 ++ .../twl/renderer/OffscreenRenderer.java | 9 +- .../matthiasmann/twl/renderer/Renderer.java | 25 +- .../twl/renderer/lwjgl/GradientImage.java | 233 ++++ .../lwjgl/LWJGLAttributedStringFontCache.java | 29 +- .../twl/renderer/lwjgl/LWJGLCacheContext.java | 48 +- .../twl/renderer/lwjgl/LWJGLDynamicImage.java | 21 +- .../twl/renderer/lwjgl/LWJGLFont.java | 141 +- .../twl/renderer/lwjgl/LWJGLRenderer.java | 136 +- .../twl/renderer/lwjgl/LWJGLTexture.java | 36 +- .../twl/renderer/lwjgl/PNGDecoder.java | 94 -- .../twl/renderer/lwjgl/TextureAreaBase.java | 14 +- .../twl/renderer/lwjgl/TintStack.java | 33 +- .../twl/renderer/lwjgl/VertexArray.java | 78 ++ .../matthiasmann/twl/textarea/CSSStyle.java | 154 ++- .../twl/textarea/HTMLTextAreaModel.java | 4 +- .../de/matthiasmann/twl/textarea/Parser.java | 1231 +++++++++-------- .../twl/textarea/SimpleTextAreaModel.java | 48 +- .../de/matthiasmann/twl/textarea/Style.java | 14 +- .../twl/textarea/StyleAttribute.java | 16 +- .../matthiasmann/twl/textarea/StyleSheet.java | 135 +- .../twl/textarea/TextAreaModel.java | 9 +- .../twl/textarea/TextDecoration.java | 41 + .../de/matthiasmann/twl/textarea/Value.java | 1 + .../de/matthiasmann/twl/textarea/parser.flex | 5 +- .../twl/theme/ImageAdjustments.java | 10 +- .../matthiasmann/twl/theme/ImageManager.java | 102 +- .../twl/theme/StateSelectImage.java | 16 +- .../twl/theme/ThemeException.java | 111 ++ .../matthiasmann/twl/theme/ThemeManager.java | 135 +- twl/src/de/matthiasmann/twl/theme/theme.dtd | 19 +- .../twl/utils/CallbackSupport.java | 62 +- .../de/matthiasmann/twl/utils/ClipStack.java | 7 +- .../twl/utils/ParameterStringParser.java | 9 +- .../twl/utils/StateExpression.java | 27 +- .../matthiasmann/twl/utils/StateSelect.java | 55 +- .../twl/utils/StateSelectOptimizer.java | 38 +- .../de/matthiasmann/twl/utils/StringList.java | 147 ++ .../matthiasmann/twl/utils/TintAnimator.java | 126 +- .../de/matthiasmann/twl/utils/XMLParser.java | 19 +- 255 files changed, 4472 insertions(+), 1561 deletions(-) create mode 100644 mcp/GuiApiButton.java delete mode 100644 mcp/GuiOptions.java create mode 100644 mcp/mod_GuiAPI.java delete mode 100644 twl/bin/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.class create mode 100644 twl/current revision.txt create mode 100644 twl/src/de/matthiasmann/twl/BorderLayout.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/FontMapper.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/Gradient.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/GradientImage.java delete mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.java create mode 100644 twl/src/de/matthiasmann/twl/renderer/lwjgl/VertexArray.java create mode 100644 twl/src/de/matthiasmann/twl/textarea/TextDecoration.java create mode 100644 twl/src/de/matthiasmann/twl/theme/ThemeException.java create mode 100644 twl/src/de/matthiasmann/twl/utils/StringList.java diff --git a/mcp/GuiApiButton.java b/mcp/GuiApiButton.java new file mode 100644 index 0000000..269f5b9 --- /dev/null +++ b/mcp/GuiApiButton.java @@ -0,0 +1,25 @@ +package net.minecraft.src; + +import net.minecraft.client.Minecraft; + +public class GuiApiButton extends GuiButton { + + public GuiApiButton(int par1, int par2, int par3, int par4, int par5, + String par6Str) { + super(par1, par2, par3, par4, par5, par6Str); + } + + @Override + public boolean mousePressed(Minecraft par1Minecraft, int par2, int par3) + { + if(super.mousePressed(par1Minecraft, par2, par3)) + { + par1Minecraft.gameSettings.saveOptions(); + ModSettingScreen.guiContext = ""; + WidgetSetting.updateAll(); + GuiModScreen.show(new GuiModSelect(par1Minecraft.currentScreen)); + return true; + } + return false; + } +} diff --git a/mcp/GuiOptions.java b/mcp/GuiOptions.java deleted file mode 100644 index 5e1974b..0000000 --- a/mcp/GuiOptions.java +++ /dev/null @@ -1,139 +0,0 @@ -package net.minecraft.src; - -public class GuiOptions extends GuiScreen -{ - /** - * An array of options that can be changed directly from the options GUI. - */ - private static final EnumOptions[] relevantOptions = new EnumOptions[] {EnumOptions.MUSIC, EnumOptions.SOUND, EnumOptions.INVERT_MOUSE, EnumOptions.SENSITIVITY, EnumOptions.FOV, EnumOptions.DIFFICULTY}; - - /** - * A reference to the screen object that created this. Used for navigating between screens. - */ - private final GuiScreen parentScreen; - - /** Reference to the GameSettings object. */ - private final GameSettings options; - - /** The title string that is displayed in the top-center of the screen. */ - protected String screenTitle = "Options"; - - public GuiOptions(GuiScreen par1GuiScreen, GameSettings par2GameSettings) - { - this.parentScreen = par1GuiScreen; - this.options = par2GameSettings; - } - - /** - * Adds the buttons (and other controls) to the screen in question. - */ - public void initGui() - { - StringTranslate var1 = StringTranslate.getInstance(); - int var2 = 0; - this.screenTitle = var1.translateKey("options.title"); - EnumOptions[] var3 = relevantOptions; - int var4 = var3.length; - - for (int var5 = 0; var5 < var4; ++var5) - { - EnumOptions var6 = var3[var5]; - - if (var6.getEnumFloat()) - { - this.controlList.add(new GuiSlider(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6), this.options.getOptionFloatValue(var6))); - } - else - { - GuiSmallButton var7 = new GuiSmallButton(var6.returnEnumOrdinal(), this.width / 2 - 155 + var2 % 2 * 160, this.height / 6 + 24 * (var2 >> 1), var6, this.options.getKeyBinding(var6)); - - if (var6 == EnumOptions.DIFFICULTY && this.mc.theWorld != null && this.mc.theWorld.getWorldInfo().isHardcoreModeEnabled()) - { - var7.enabled = false; - var7.displayString = StatCollector.translateToLocal("options.difficulty") + ": " + StatCollector.translateToLocal("options.difficulty.hardcore"); - } - - this.controlList.add(var7); - } - - ++var2; - } - - this.controlList.add(new GuiButton(101, this.width / 2 - 152, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.video"))); - this.controlList.add(new GuiButton(100, this.width / 2 + 2, this.height / 6 + 96 - 6, 150, 20, var1.translateKey("options.controls"))); - this.controlList.add(new GuiButton(102, this.width / 2 - 152, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.language"))); - this.controlList.add(new GuiButton(103, this.width / 2 + 2, this.height / 6 + 120 - 6, 150, 20, var1.translateKey("options.chat.title"))); - this.controlList.add(new GuiButton(104, this.width / 2 + 2, this.height / 6 + 144 - 6, 150, 20, var1.translateKey("options.snooper.view"))); - - this.controlList.add(new GuiButton(300, this.width / 2 - 152, this.height / 6 + 144 - 6, 150, 20, "Global Mod Options")); // GuiAPI Edit - - this.controlList.add(new GuiButton(200, this.width / 2 - 100, this.height / 6 + 168, var1.translateKey("gui.done"))); - } - - /** - * Fired when a control is clicked. This is the equivalent of ActionListener.actionPerformed(ActionEvent e). - */ - protected void actionPerformed(GuiButton par1GuiButton) - { - if (par1GuiButton.enabled) - { - if (par1GuiButton.id < 100 && par1GuiButton instanceof GuiSmallButton) - { - this.options.setOptionValue(((GuiSmallButton)par1GuiButton).returnEnumOptions(), 1); - par1GuiButton.displayString = this.options.getKeyBinding(EnumOptions.getEnumOptions(par1GuiButton.id)); - } - - if (par1GuiButton.id == 101) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiVideoSettings(this, this.options)); - } - - if (par1GuiButton.id == 100) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiControls(this, this.options)); - } - - if (par1GuiButton.id == 102) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiLanguage(this, this.options)); - } - - if (par1GuiButton.id == 103) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new ScreenChatOptions(this, this.options)); - } - - if (par1GuiButton.id == 104) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(new GuiSnooper(this, this.options)); - } - - if (par1GuiButton.id == 200) - { - this.mc.gameSettings.saveOptions(); - this.mc.displayGuiScreen(this.parentScreen); - } - if(par1GuiButton.id == 300) { //GuiAPI Edit - this.mc.gameSettings.saveOptions(); - ModSettingScreen.guiContext = ""; - WidgetSetting.updateAll(); - GuiModScreen.show(new GuiModSelect(this)); - } - } - } - - /** - * Draws the screen and all the components in it. - */ - public void drawScreen(int par1, int par2, float par3) - { - this.drawDefaultBackground(); - this.drawCenteredString(this.fontRenderer, this.screenTitle, this.width / 2, 20, 16777215); - super.drawScreen(par1, par2, par3); - } -} diff --git a/mcp/ItemGuiApiExample.java b/mcp/ItemGuiApiExample.java index 0d65902..34cf9ef 100644 --- a/mcp/ItemGuiApiExample.java +++ b/mcp/ItemGuiApiExample.java @@ -20,7 +20,7 @@ protected ItemGuiApiExample(int itemID) { } @Override - public int getColorFromDamage(int par1, int par2) { + public int getColorFromItemStack(ItemStack par1ItemStack, int par2) { // This simply tints the sign black to differentiate it. This way I // didn't have to use a sprite. (This isn't a part of GuiAPI) return 986895; diff --git a/mcp/mod_GuiAPI.java b/mcp/mod_GuiAPI.java new file mode 100644 index 0000000..d1b0110 --- /dev/null +++ b/mcp/mod_GuiAPI.java @@ -0,0 +1,130 @@ +package net.minecraft.src; + +import java.util.ArrayList; + +import net.minecraft.client.Minecraft; + +public class mod_GuiAPI extends BaseMod { + + boolean cacheCheck = false; + + @Override + public String getVersion() { + return "0.15.1 for 1.4.5"; + } + + @Override + public void load() { + ModLoader.setInGUIHook(this, true, false); + } + + @Override + public boolean onTickInGUI(float tick, Minecraft game, GuiScreen gui) + { + if(gui instanceof GuiOptions) + { + if(cacheCheck) + { + // Cached so we don't have to check this every frame + return true; + } + // First get a list of buttons + ArrayList buttonsPreSorted = new ArrayList(); + for (Object guiButton : gui.controlList) { + if(!(guiButton instanceof GuiButton)) + continue; + if(guiButton instanceof GuiSlider) + continue; + if(guiButton instanceof GuiSmallButton) + continue; + buttonsPreSorted.add((GuiButton)guiButton); + } + // Now sort by position. First, get the buttons with IDs of 101 and 100: 101 is left, 100 is right. + // Any button that doesn't have a position that doesn't fit into those 'columns' is ignored. + // Likewise with buttons that are too high, so we'll be storing the min y position too. + int leftPos = -1; // Video settings, aka 101 + int rightPos = -1; // Controls, aka 100 + int minY = -1; + for (GuiButton guiButton : buttonsPreSorted) { + if(guiButton.id == 101) + { + leftPos = guiButton.xPosition; + minY = guiButton.yPosition; + } + if(guiButton.id == 100) + { + rightPos = guiButton.xPosition; + minY = guiButton.yPosition; + } + } + + // Now make an array for it. Adding two as a 'just in case' thing: it should have room anyways. + + GuiButton[] sortedArray = new GuiButton[buttonsPreSorted.size() + 2]; + + for (GuiButton guiButton : buttonsPreSorted) { + if(guiButton.yPosition < minY) + { + continue; // Too high + } + if(guiButton.xPosition != leftPos && guiButton.xPosition != rightPos) + { + continue; // Not in the columns we are after + } + + // Now we know it's one of the ones we are after: but where does it go? let's get the X and Y pos needed. + // All the buttons are 24 pixels away from each other on Y, and we can check whether it's left or right. + + // This means that 0 is on top, 1 is the row below that, 2 is the row below that, etc. + int position = (guiButton.yPosition - minY) / 24; + + // Wonder what this could possibly mean. + boolean isRight = guiButton.xPosition == rightPos; + + // Now to get the final index, get the position * 2, and if it's on the right, add 1. + + int index = position * 2; + if(isRight) + { + index++; + } + + // Finally, add it to the array. + sortedArray[index] = guiButton; + } + + // Finally, add the GuiAPI button in the first available slot. I'm not gonna bother setting up a scroll area. + // This was for compat with other mods, of which I'm aware there are 2. And adding it would break those anyways. + + for (int i = 0; i < sortedArray.length; i++) { + if(sortedArray[i] != null) + continue; + // Ok! Now to get the positions needed! Is it on the left, or right? + boolean isRight = (i % 2 == 1); + int yIndex = i; + if(isRight) + { + // If it's on the right, lower it by 1. + yIndex--; + } + yIndex /= 2; // and divide by 2 + + // now to get the positions! + int xPos = (isRight ? rightPos : leftPos); + int yPos = minY + (yIndex * 24); + + // Finally, after all that work we can add the button. Finally. + gui.controlList.add(new GuiApiButton(300, xPos, yPos, 150, 20, "Global Mod Options")); + + // set the cache! + cacheCheck = true; + return true; + } + } + else + { + cacheCheck = false; + } + return true; + } +} diff --git a/mcp/mod_GuiApiIngameMessageExample.java b/mcp/mod_GuiApiIngameMessageExample.java index 32e34b4..fe4d64c 100644 --- a/mcp/mod_GuiApiIngameMessageExample.java +++ b/mcp/mod_GuiApiIngameMessageExample.java @@ -15,12 +15,12 @@ public class mod_GuiApiIngameMessageExample extends BaseMod { @Override public String getVersion() { - return "1.2.4"; + return "1.0"; } @Override public void load() { - exampleItem = new ItemGuiApiExample(30012).setItemName( + exampleItem = new ItemGuiApiExample(28000).setItemName( "GuiApiExampleItem").setIconCoord(10, 2); // Create the example item, set the Name, and give it the sign's icon. ModLoader.addName(exampleItem, "GuiAPI Example Item"); diff --git a/readme.md b/readme.md index 9e311b0..616f0a8 100644 --- a/readme.md +++ b/readme.md @@ -6,24 +6,15 @@ GuiAPI uses the TWL library from Matthias Mann, see http://twl.l33tlabs.org/ Building -------- -* Currently, GuiAPI uses MCP for the most part, so you are going to need to decompile a jar with it. To start, we need to make sure we have all the needed references, so before you decompile install the following: - - twl/bin/* - - xpp3-1.1.4c/* - - theme/* -* Add ModLoader or any other APIs you want to use at this point. ModLoader is not required to build this though. -* Decompile with MCP. It shouldn't decompile anything you added though, but that's OK. -* After that, drag in all the mcp source files from mcp/* EXCEPT for GuiOptions.java. - - That's a base class, so we are going to edit the small changes we made in. I'm not going to go into much detail, since you can see the finished file, but I'll explain a bit. The code itself you can view in the patched GuiOptions.java. -* Now we need to patch GuiOptions.java to add the Global Mod Settings button. - - In public void initGui(), you need to add the Global Mod Settings button. Add it in second last, before gui.done. - - Then, move options.video and options.controls up slightly in the same method. I suggest getting rid of the + 12 parts for each, as I did. - - Now we need to add the button handler. So in protected void actionPerformed(GuiButton var1) add a handler for the ID you used. I used 300. -* Now recompile and test! You are all done. Again, if you have any issues patching GuiOptions.java just look at the prepatched version. +* Decompile Minecraft with MCP. If you are using forge, use that install script. Basically start as if you weren't going to use GuiAPI at all. +* Now, download the Dev package you need for your version of GuiAPI. For example, if you were developing for 0.15.1, since there's no 0.15.1 dev package, you would download the dev package for 0.15.0. Copy the contents of this into Minecraft.jar. +* After that, drag in all the mcp source files from mcp/* into the src\minecraft\net\minecraft\src directory in MCP. +* Now recompile and test! You are all done. Packaging --------- -To create a distributable archive, package twl/bin/*, xpp*/*, theme/*, and bin/*. The only base Minecraft class this edits is GuiOptions. +To create a distributable archive, package twl/bin/*, xpp*/*, theme/*, and bin/*. Credits ------- @@ -36,6 +27,4 @@ Credits Documentation ------------- -Read all javadocs at https://dl.dropbox.com/u/3687570/GuiAPI%20Javadoc/index.html - -They are updated as I commit. Note the documentation isn't that great (It's not my strong point), I just tried to tag everything and explain roughly what it does. +All releases should be tagged here on github, and you can view the docs there. I haven't bothered setting up proper javadocs hosting on github yet. \ No newline at end of file diff --git a/theme/scrollwindow.png b/theme/scrollwindow.png index 6b30b65636865944a7bce55039db498a6d3b9d3a..c8b1020eef1416c4fb455f37f89f890bbe218380 100644 GIT binary patch literal 851 zcmeAS@N?(olHy`uVBq!ia0y~yU<5K5893O0R7}x|G$6%U;1OBOz`!jG!i)^F=12eq z*-JcqUD@w&i!utZ=S1`NGB7ZG@^oLdfU1omtwU=h-w%^5D1si}S zGH@^`Fc4;Z&|lS2q5nijzV+<0s+`k4nrrv}j4p{S|GM-~>E3ydcx`!_J(0v}_A z<`bQAps_`#y5sexzpGo++40=zT#+`zJcbWk4Ga?u8J7O}|M#rbrMLAEHf+pPN(wy@$+uQ{exd|V zV}{bB6%#hkiE_7_efF3@hnkWfm*wf!QVxcn%mpzgBF_Pp?R(GL7{8b4joLr14^KE5 z7*9O+VPI+a$+lpNdV@5h1H-4tNO!y2Z?6e-oZ@)4GWYgfk@eb3pUk`0tk393N)R*9 c3N+08&630H%V|I7kOs&OPgg&ebxsLQ0E0@v0ssI2 literal 708 zcmeAS@N?(olHy`uVBq!ia0vp^TYz{O2OE$qzPxl1kYX$ja(7}_cTVOdki(Yb?d}4k zf#9d}?s_1_S>O>_%)r1c48n{Iv*t(u1=&kHeO=javvaWPYA(r3+X@uoC~=J_an8@p zP0cG|_;zO6eg+0615X#nkcwMx@A!Hhc93XzxIUBXXs^9^K;cW(B16RsTgy+~Gw#?W za&Z1sr`tzrORtyB@R^r>^Q!sG>4~=-(hsVb`WjE!vF_A0r3?WR4k?!21&$XKz)Z(x zD6@$T%2Z1f6TCn3%%{mWH}90comLjR{nzu&8MnW^JMS45x>~4to$@2&$&qn$^q~AW$8|tza!6CQjY6POh|V zDk_Op&ybw5I5#?+PZHv5^2}#*R3;pJEWF7f?njI!NBZTuTh-ndm;Mr|wmIgM&fK$U z!8sSiXPzliHg=R(dhyvOZRfN|tJhy|O-()?@MG%Zvz%}F_V#N#a^ISM=y9dMmIdE8 z@=Us!x7~GJc3SrGm6@{^9x1I1?m&+&Y@yL}PG9ta{leUTPD_F5iNVv=&t;ucLK6UU C$O^vz diff --git a/theme/twlGuiTheme.xml b/theme/twlGuiTheme.xml index fef3be3..0a0ea2e 100644 --- a/theme/twlGuiTheme.xml +++ b/theme/twlGuiTheme.xml @@ -80,7 +80,9 @@ 0 -defaultInputMap - + + + 2 @@ -89,7 +91,124 @@ button center 4 - + + + 10 + + + + 20 + + + + + font.lineHeight + 6 + + + + + propertysheet.sublist.* + + + + + treetable.treebutton.* + + + columnHeader.* + + 256 + 20 + 3 + none + + true + table.row.* + + ctrl SPACE + DOWN + UP + NEXT + PRIOR + HOME + END + shift DOWN + shift UP + shift NEXT + shift PRIOR + shift HOME + shift END + ctrl DOWN + ctrl UP + ctrl NEXT + ctrl PRIOR + ctrl HOME + ctrl END + ADD + SUBTRACT + + + 20 + + + 20 + + + 0,3,0,0 + normal + + + + + 0 + + treepathdisplay.node.* + + + 2,0 + + node.font.lineHeight + 4 + center + + + + + button-border-normal + treecomboboxPopup + + combobox.display.* + 50 + + 3 + + + + + + + + combobox.button.* + 18 + + + + + button-border-normal + 2 + + + none + 0 + 0 + + + 300 + + + + + + @@ -194,17 +313,25 @@ scrollwindow_shadow - background - - - - + background + + + - 4 - + 4 + + normal + + normal + + + 15 + 14,11 + + none @@ -247,13 +374,44 @@ button 4 - + + font.lineHeight + 10 + SINGLE_COLUMN + true + false + false + 8000 + 8000 + 1 + + + + + + + + - + 4 - + + + + + + + + + 5,5 + 8,8 + 10,10 + 15,15 + + + + background progress @@ -283,6 +441,5 @@ background - diff --git a/theme/twlGuiThemeIndentedbuttons.png b/theme/twlGuiThemeIndentedbuttons.png index 00f02541c08c4f76054f2882ab2c557f1ad4d5ca..5655b260d39d71a86c23fb4c7659f92d66663b28 100644 GIT binary patch delta 1281 zcmV+c1^)WR35^ONiBL{Q4GJ0x0000DNk~Le0000$0000$2nGNE0IF$m-jP5af7}Zd z0TC4O{(TYv0013nR9JLFZ*6U5Zgc_CX>@2HM@dakWG-a~000Do zNkl1Kb6C`*{yI=geiEsq1>&vnOPlG9%(h!1JdoB`a$+;$NgN+#Iuo zlmzo2XGK*I5mJJ$pZ_>+0?dq*qfP+@xLhvGb0Iufm(J(; z(t|d0>S}itk&9yPh`__cwB0xO6xhe1Xn%jZv>vc@;nM|^;12GPe{&)N-n?y$jH7Vf zIt9|k`G{ay8g72{h1P;ry9UTv4&Ha2FmMH=ln`wYVB7c;5vD28np1A(yr__Xx_WPb zTZNP|a0S#_Syv+>c=Rxll9E(-^e~aL;^yQe5Ef0TqBnqlAyFzX`7%(zTx+wwL#d|D1qd-ja) ze)<{N%KCk{Lo+BDlES)ef1{rI`}WmmZHavXXZR5)@bcx$|LqAre*BnMuU>uHo?uFe z%jH7dRL{L9IE^iYzW+)|Inin(KF}820*{JH*9)2yl?-H3e@=Y)?GNK7z}?Z5?}At9 z2@!-^E1DE>*;Zd6<%GLa*V=zS=t#Kn1ij1OGO?~JW_B1I;eol4G~wZd1-7k!=5|nM z=xxy4Xsz-3&1*_7s4CVvzeR;4iPjpmR_4pxn`AgsnaE}E1T4z}aix?(DFs0Y0u}An zmv25m%7+y8f9Mqx#L*OomBQESl`{3f0fImfa?V}%Z=T@(bVzouaHGe*E)U%V*JZu; z`*`O79TG3e-CDdS<@TOoJwbEp2Ix&NW`@uk<53+RwAKz!@b)#dCs;~3g6pepL8Ujk z*4kY~q?G!}Bh2&Mdq%{#6u94HdN6xq+Z*04nA{wsf72ldmUa0wJi+}z$1ZgCB!ox* zZli>|W6ipa_8u*UO+ZTNSd87hm$&pO;O_TLPI^_e+A!`w7n1nWPC7 zWu9j=bx%-5Nhy&u-FSk1LD~~FwkNnLzFSdK*Lrw@9u9Wz38vhov5F463ml%HS^pQv zt^|cmSM7bk;1PsU3OVQPq3Pg4=*g2OeDmVPf8ONocRX*cp*rrVpPt}}6DLlbIC0{{ ri4!MIoH%jf#EBCpPMkP#;eSad^gZEa<4 zbO1wgWnpw>WFU8GbZ8()Nlj2!fese{00bdPL_t(Y$F-J0kK9BMg}D5apPLsvh_6@9+8jx1R@KDFxsJaQk@&D5Y?jXWF_R@9YOm zQ+cegl)~%#m0FawIr)qPCp>UpFcUnIQWRA|L@3T-cV7T9lkh}Em@dYDvO2vv5d%FVX)UN#iAZ`ltvLX#2h(Kdp#XFb z*46p*uZ3C-Q=v7d*r>8j%DRqa-SQLPVk}sLD{OY_w!DO*Vic$NfkmZxpeQ|KXt#o`lDLCW*nH zY?BlbN*Q4L{mjH8P*t|u18`XudJjYewMVh`J}RB(GOFDNv^u%9tlMGxlojA|xiHU_ zjAUH~AM<5^xCd?ZQ^ln!9)Sql-A&tjPo})fM|AxEu=D{SL&#$Rgb0X$QjAP^|Dm5& z;OH-Wv}_w^naQ$r!sFnz_oTOfp}|t*;BDyirb07Av_pb#auE@x$>=?(H#!p)3}|bN zfovVrdQ)L*jdgW0lh5xa%oJ1M^Sg;sl<=UKP|D*v4kR&rMWhsG!ziYr6uD3SYf{dd0Ut{)B98 zJiQ{IJJbTEux{>he@FcRKGW4pZs1%@J#rWcz?;imp0=04iQyB*cLTe2*MM5^K608^z zL0jAS{?`6Yro>pcIQ8mdg7bCc=$ot$!$EG-a8NPAE>3Gs(2s# zhzce~@152f^JN}G%V4S#rIzQJLSCu0QfoyJl0-#^)yL+8R*uz+933Tj4C&C}^?IdF z0|+2V1fi5N_IAsZ{nvx+S+mix+uLa<>$0Bnf=7ow*2?5$WBVb0x9=R8;^8BZZXUWj z!Wh(1eI&j2BU5hwPMK0`JzgHxR8bkk_ufwxo7t!gVV>u~`Q|F+xm%2fJJI_9_5}zJ zkkNjUEbH=dbJ&A>7w!(4k>lA$K}6u)M{GQy;Q%zV!^k3Hv?F865pm)b8CCbzaUb~{ z5r?>sOxaJEuQR4_hKe%JGioDKR1`DA)NV3m7{-3^Ia9WcxD{zz+mR`e0e;RDD`OQ^ z^w{MiQ{2a|)O}NgZ5t3iHn>_VrIhVQ)DvO9eEE{E-@N%p7mkP%PrY|k^<=RBTc-RC XgV3=IVC)jx00000NkvXXu0mjf#8N?t diff --git a/twl/bin/de/matthiasmann/twl/AnimatedWindow.class b/twl/bin/de/matthiasmann/twl/AnimatedWindow.class index d17b92e84f5d70bddcaaffea7356ef769d8635aa..cfd5ca56c240a029078aab4fe6bb11101a113f32 100644 GIT binary patch delta 572 zcmWlX$7_^P6i3fDW_P5kU7 zuI$D(mN;tcE%t8gZJ~dIAb!8idFPhLz3^U3syS8Y{#WV(M)S*)q0pB~R`>`jWvd*k zJ!@F&$m(1ttaoha!#Iy;qdJ?_xkN&!B$#jZL)2S(351lf*tDGsoE~j@C>^> zd)O=NQ)R#GfUI41FtWDxK{GNO@*L)f3P-i-G1+m?2~G+f3Qq~ARXrm+E1XME~yfKHlj(f&^s*ML!88bEJp{!eY zBs>-xght_s@RVo9LaH3kjTgK$UMam;c&+ps<1O!u_d<^*rs~8c)EXc7Xnf+cTa)f02n2MJ;{ghP{)!y(B5VPkSs&=htgrwm*ceU2E* O85^CRAbP|~#=w91OoQhD delta 582 zcmWlXM^9Bj7>1vNTnFcVu`Esu8{^KHu)zf=wgu6|XkzX{c8Uqc#FZOOEWouF^rATS zg1uq)st5|$P{iJ_VxW8CFl$fd@PzHiKB zo-vt;#%!h;^A)Es)$zdS4t=T0>_cNFvy3{;C#hM(0>>kxN9D(4j5$;py|O35Q{kDg zQm7T43om$SEF$B0WxVE%@mAZ5g?HNSGv4#T_$YkRAIB^cm$20M%opP;{f=+OcYYW@ z_2Dn!cfMsDropCZnrddV4aQ-Fq3oTk zl{w7xpsrR{T52Sgn6*AqjHv7-g~sArOfk)(%pRH{ay#dP!KU_)`@6q;zVkbe?>pb^ zoBUjH!;Yb??Eo&PA~!;4cOeBI33Ld2Ebxi_%4l?fo7txV+XX%o_}qmr@TD7HVTX=R zH@?OFCvQ*o`c-JMo>o zk2rBu-hFNaaZECP@5FH(CxreWK~74zAD#F~gJoG_?icu3%Kk;OIyzJrr!*@Xjf(A8 zfz$j62>VU58n_Cfzl%}%{GnMEEV2E`B}Uci8D^GZXC;u zY=fdzwhNlIsHmP?}V@lOS4WZM}lS@QI15K6_3YxnQWTXbgD_1CSVsxk}w0p z90Iz4Gq#=Ll<%mD+*cX7o8V+pQ6GuSCFo3N)Xa+v8?UXYs}9GOXcB?2!ByoAL%xeZDtLnoI(DdZt!n!70TcAZiU z@{&&{zd->s>Xc?sI*l;4mYi5c~zm+*0MY-w=nNP{WdpsM;QzvF+RrAoxdn?R)M zPb69`he23bp()mYO-K*G+HcOY;`|Sj~621$kJbHXs`smlzt^0Aa7-RkbN0 zyoNjeD?%ufTpR!~vdzgIv-f zmi1yi4xf*I|ljTc{aoT%EB{T?^*rgPA$1$F7o7$9QXs$s7bZjUmUfgKT4uou^o7beIYn!my xTp73}k6V<19m5h}+GxOODh#oe@0XdCRzd-DW?F%^6>YJH()vi>#_l$J_z#buYgGUM delta 1421 zcmZuxYiv|i5dLP*?%wU)(`C2qf^~~sX_wkY(pC~6QA`CBH4rt$7-Phw8niJ@OE98A zq4j};AHtR+sE7~br9vyZAX>Goh#;?0tYB4CtWpuQJba*S&E_2&VmlNgns3;boWYb^?-6tWrTyuIg%0nshqB^E?GXOoMc~8m^hGZOe8k_ z!aM>>z)SE=ntIjbDTJ6w`eLc$)IzDWiV}62L*7#IE%Dt)JI!q0qARv&%)x^i4++c_ zm?y9pNsVTKB?1OXi~O1_3RvXRltnfn-!%L3Z?h<7=8n1L zX8-j?qo{}wDv8(J8?T-5K>W^zx`tUAui#adQnAJ}SZ+pJqoN5Kt*L}A;pU4H72|Hv z*o4ig>DEjy<)u1;wH`{E%ZJ50^{wW{P%JwekKuM6I+8X`Q)Zz#6s!Jcfm`S0hgmcp z9%evx*(P`+aOORp0L4TQLG@ zRAC#g;cH)w?U>G&?=I}%@!5s>eAAQI!`6Fw>wVaW4*oiT!|1{Z9Hbz+-6Ccp$ob>3 z+Bi8SwAz&9R*qZ4n{z`Xh5ubf1pYx(Sy(r508_)EeiY(muFlKC7(YAIc+*-@^y zm;WM;{p)1MoAy!{s@twJ0C diff --git a/twl/bin/de/matthiasmann/twl/ColorSelector.class b/twl/bin/de/matthiasmann/twl/ColorSelector.class index 04cdd7d19d25f39cf5482cf625f04db352d686fd..79336cc3e8d8e1a90b92b573ea8f1dafff4005d8 100644 GIT binary patch delta 5531 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 IDlszZe>)5~)c^nh delta 5641 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 diff --git a/twl/bin/de/matthiasmann/twl/ComboBox.class b/twl/bin/de/matthiasmann/twl/ComboBox.class index 9e719d370d08f4ad00c6aea7cd01198a00337f57..f6a33bafecda9f823077c1b0e8456a800d17bb76 100644 GIT binary patch delta 47 ncmZ1&v@mGHFAa4G1_%&^(n3%=jnR}Lok5bJoRNp2f{haZ#LEUo delta 47 ocmZ1&v@mGHFAeoHMpK4#21$l;MjnO=Hckd11_%&^(h?9F0Q4gUMgRZ+ diff --git a/twl/bin/de/matthiasmann/twl/ComboBoxBase.class b/twl/bin/de/matthiasmann/twl/ComboBoxBase.class index 1f63119715670cfec5b208f69dab0a4e06da6f8c..fd9b958402d6502a20dd18927a168dad54ff7c92 100644 GIT binary patch delta 1164 zcmZuv*-leY6kVsiZQ=H`lu8673Z+C0)*zxLCWt^qthOSk2#N!09kD0{2T(Ccd^Evp zjQ9g4s1fB21?LGBXMHdx{(`S+(7g}Wv?jL6zGt7a*4m@tGkhiElOtmQ7T}AHN*r_G zxQ+^R>9C+Xl};xdIH|*qQ|$COaJs+bo9HsUVopvq1|7KSz%>B~$WSa6Z4b7##N*Mp z5ft->d&Od_HH?U{%$}K5)!EU}7L&MvA&D?Xph@C3njE+zF^VyX&3v~u*pCAean5Tw zY9u-k8UAg{(|qJnPcyhg^`)}t>xM>^N2ph8j0(M8)Eb6f=wC}OlI}q5uR}ecXDsPj!$^=kCP`qEiS2XxldyG3 z*uMb;cUS37I0H*q*G&OIso5xaHbrIq>9jCFj;U`WzZqMIC3q}~T`Ef!F`HKl^ya0P z1T)WMdP#koVro2b#T<}VsQgM-X^8Pf)EMBRiBG{fv?zQIy0L>!7R<&W?4*-bHAjba z5{*KL^fY4bGBrnCQPT9g=LT7GA=LtEx*7mdXiQP1>7qgIR+?T^VUNgY66-yE5jQl$-20^i+BDV^f9+-6RvoJKd3(rCp& zN=zabF%=L9m=b(yqgURW0F_&#ni{}iw3}t8!tx7J{J<>AhIUki8BEJBPE7DTy%_M| zLQ;zV7;0jh%-OSNtu-@yM)&Ey!tu$WQ2K!}Qgl0D!U;Q_dTco9fEB0MIc-Dlg~IQmTla`X_8nD zw)&Q6bF7PlcO@#YQ6QUxdcMVF6#xbF5{tKYE9xY6BP3CaEfPZrOWZ@)hGB^jj7sd_ zn_X<~vw6T~3=bt9G5#^TPuM(V^Nh`NHZL$P@sb5zvHP0c2|m4H^Ons)%9@9FsI%d{ z#0Pwo_{8_0@kOEqha}p$u5zrCh$A#OWy#WfV3S_zs1;SZ z?#T6Trii3F&_t?H185p|NxlZ^TcN)>{DcklY4IV7r0sbNUmoH3`_i2?W2c(w%SyR(5`q$2DC1m;vHl#|At1xhw~)UR z4a5>W7R4@-h0B@E+XlMzpfQ1&WiUOY-l&)wPh2tk{D0A=?*3y?758@`)(DvBLr{5n3U$f8v diff --git a/twl/bin/de/matthiasmann/twl/DebugHook.class b/twl/bin/de/matthiasmann/twl/DebugHook.class index 0e16c568339d02c923cadabbf7d86654a63f9b5f..fd600177b4613d500549f30a7731fb05819ddc75 100644 GIT binary patch delta 1766 zcmbu9_jeRk6vsa^n`GY3P6{R`w38!-cn&UbVpakRNWcWkVo;)3Kxyh)5Mm^P1$2o9 zQHr7i_TIowiiv{3*brjNzo5VSlgA(I-a8W~>%sDaKg@e?ZhPPRz4yN3$)8Tk4gGfL z2#{jfrH+m`1>Eg&51kI%9PTwVxfHTpMfb(IpB)Z6U0ga0yL8{J%L6VCvd8d{;o$^T z_=dfPeX81Sc*O9i%VRulctS-_>d#Y#ryZVIZg|%4oZ)%H3#xq4@RH$W!z=o?-*CY2 zs^PT+uk%KNH+f5!w;c`|x*WP)YUyz3vB1L1w6s=(niy$5>Twl9N>;G;hmJM*k;{ygAKJ@sAW^K`R5*A@TEhq$5$Nn_?muyk6Yt^>sI$vCTi?loz%t>A_S%E zGv&`_7Nv3)@UqSkNv-UXK84ACtggUhuB=6Ya0+M2*$WMrM}z#una=`|sB?9o0k<2w zkJumu2SsWTMkv*|GsWR78r8u+R-Cft`ac&>%xTz4K?A4I6oefob_?ZXakfZfSS4~i zhjZ0Y1oiT%`3Vpg1rWnn)(Av}a2^?1Ef)P<2#IEofK-f&|0BlvG%E~$sAOurrsf7v zmN1@{JkJTy?Gq&81;OnXvLx_KmNv{E^<2s{E(ts*Nv1G8@|-RaFA@)xT`VzdIWHAk zTW;T9x=+}fS2inPuR%%#osnlJmvUL)*~#UBr)rnUNpI+6IakPZR?xiqL|WT15A2SoFS&Ll4`XovQl(m_g))-xei+i=^K;DgV821+W!&8^#L_$ZeVRt zy#EK|Mv1mgIZ+r}Pio48u}L1n+wx$fA~sSH8>xtmlrR^vk)m~kjnoNjs8z^@TK$!c zo3u9-#=`Qcvqy`vS(Cor;Z~7p3%3Xnx62Kqt)`MYM53+cVgE{{ z<*@ljd5psHZV|sbHKE+U5B=V}%<_jm96Q5Z(epMrsJ1lrVQQE4b9xW9K5~CPQ3^9D TCOO${wsMB-u4tWFIe_^CPvz?f delta 1841 zcmbtU>sM4&6#v~jGu$(GF2lr_&s9u@E#k3+NoAnIgshMXNPAdGAYK$5Mq&^vtsxt& z%$`Rx%QAbv6R@GAMCqmUqQ13OYxSW|{Ry_J)!ygMx=gNGedxnIkNrBo{o8xr-!48~ znwtFc*l_?+{9w{D=!X~go7jN|45SV06sR}h!!8y*=*L5N*uZWRCI$r_;e8J;kD7Q4 zj|)5@@MHkz;VA(ru$NW41ojC$ZDK#35jeo2XZiA+z(E7gHwnBTa7f@qfy1nPN#JFH zR|H<=+iL=^3%nulW&m&D?Ev1vyS%(-;C+E30z(FdO;lpgzz0J=PI-L0HLNL-RpMM} zdh}2v?)Y!ZC~)_}IcHIIdxq zTxQLZLI1qaI8InNi3tOrTKEi2vc_NR`5Y6n-CsQW3kzT3lm?%j*wPcRFpkp}CP{hF zZ+ph^mGqhmX#ZN4o9*FmEPRXa3}h@!;gp5%>GeZqae3KFJ8pOO+v_4-9r5_uj?PVy z{tb4I9qHQK7wPFvCc6{svy%Dpq*)w-2CFfVu=^U~9m%Af9Qnn(NKZwnkQ%W@$+Xq z<0^I}fdigmpAB(^g6PE3vJe@<)wqUM4UPX4f}-hJkc{!V|A?^yO$)J@iya(X@9aRSIm{FRS<-DDOc3>?-AcLb6PELgCQ`6aOq;Bd_**KVDE~c1^Ddu8| zp_7m>rWn>KOnhRT4ko9PY}MvkF*>IKYz3wZIuo+j&y#yoquQ1jtYGT-cZdJVh z2V)~e+r*qOjON0I92f(r!d*EqqAnXzmyM{)MilWZ8&TqrE5yIvv)N!PhYhy+I~xh^ zO@qz`TT2}G6U-ou?H1ya3)$+X*opy?ar?GnE773mv>8k8CJDEh1^o}q)C}BnhPuir z?Kbk;?hG1`B8EJwP({P=kHK6$ia_DQ4D!q9D-6?;K`?`Y>ED4fl#(*oo0E5ui>)X- vlmhp1Y9i diff --git a/twl/bin/de/matthiasmann/twl/DesktopArea.class b/twl/bin/de/matthiasmann/twl/DesktopArea.class index 65f3aca3328940a3d6d0e82e00b2c2591fd3ddd5..24d13e350771d3d0d4a41c247375effffc60b7d8 100644 GIT binary patch delta 138 zcmdnTzmI>zQx;Bb1{MY#22KXu$?sTlWepiv8H|8DV+MW(69z>FQwB8#GX`A-b0EuV zas_K9t36P?!{leIS9P6%YF!w(7+isB-55j}+!^E;JQy?>ycjGPycrxAd>FDA{28VL h`Ewb9C%<4jAf^d4i2zQx;Bj1{MYl22KXe$?sTlWpx=?8T5cWeFlC80|rF~Lk2YlBL-atV+KqR{DSR(m@3dD2B0n`UI#`7Mh0sjhl#-k0E1H%+W-In diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$Group.class b/twl/bin/de/matthiasmann/twl/DialogLayout$Group.class index 838ed5672151205b8cc6a4c2c642d7949a01daad..616f08db2e4d2e05ddb8555996cc505fc96686ea 100644 GIT binary patch delta 1317 zcmYk62~d?)6vuzxlo@1CgH zmesElor6}ZKI&X;eWVxqr(|`q(Idpg!t(f-Pi#K*800gL1AK0C(Blif)P4TWszZF` zafq)yzTsPsxm@mXnC~o{szvqXwb#_uOFfV8`N3#@w6G;Vv!<@zqk%OZKk>8l;qeQ< zT1?P+kr{fon;i9<$L}1`2izI4e|R)=#HjzY$Pq@mUT;Okc>G0~$5E5bmTY#R$68uF z)*EOyaI=9S104niIp$H#Jdfih`kNCrCoRqv@mRemE=hOC`g@N>_xsgyn`L@bV%opK z;e_;&OuG4Gox~y1=6ai@HdjeTescRPIZ~qzC5BF0!KJc;1a6SX7mjX}C?d>h(mNAF z(am9w#Y&oVO497;Rm1xRR_i561>-VEP?=PS)(d+jaUnB@tE|xjNo9rk*lG&#YAWff zAk0h**UB7bLMAQLiF%gkq;|Z7G9x`bxi;@SMyXO$WfI{QgcSM0b;}2=D-;d zH?cu)3)Ey)i(;NA=1b)ovegw#P*;+t7DxvRDN@x;Q?U(hKTPsvbuzmcuMzjJl2#wN$3D?38I_j7%d#u0`4KG!#B3UX10Y>xkfF ze*=EiNSs=s&kY9rZNkFbA6*@+%WD$%W*OB=X?PU{YBgo5MMkuikZNO&S~qgsAXCG~ z^`-tlD$Hfn1*tWYHi%EV_;iSmX0qz!9JP^RwTV)-`4o@Lu*crioQnU(?PHVl<6|== rvgXSxmMf1yv2x@O-@`@9k~g4-8qB-%9*YUc8`8s0QH+;$559i@D9jmA delta 1285 zcmYk6c~DkW7{-5x@5H^|=Zoq#(=4lFHBw1~oRA8DW+c7W~naE0Yv^&yC2LJI{IFbKmEAmpSKjSFEmR-8`_i z7bsORVa9N$M9v^#e@tZ=!+-x6UT1~Zd-U>x z!v>F|c*(}R?9$<|(IbynZJDoGc->)BSRyuC=M9G~R^UwwZ&}!ClWeoF-3GjE;hiu? zkoc}G_dOdE{C>YDLDh$Jx8ht=;-;EyA*ZK9Z&j+#oE1AQd5gn`4t)+EIeZ*^eLd@A z>y+AL65U;Dnc3scQaemTxGe7$ZuP0<6p8iugijql^V!MgKD+qB;Y**d_*zk9N)F31 zJHi)F+08dTyZP4VJHGd+XNJ!Y{HSoJ%x<1Ib52vUB=`A=pDpzlg(Lfu8=IPa+F0WA zE5AuaK706GkuS2@W}TNF{=?@__A15%i3Yr!gui^+*=t4iDRP7D+Bnzkr`qRl_L+vb zg0iJ7^SQx-v2dG({T7y6*vSE(vpL6Sz*+~T7NvT6;|9XI#i7+~NXc}qp$?L4R-}v= z+WprkN{xovm}e%X)*g8c(@}B&Q@B>Fn82DZR!DZ+SYXzq*2c95F^Yxa4@;|yTQumm zvDjRaHf}@~DLR`P;rfAA8k3kTo>f?4Hl|gVkHXQpBHHuvHOQ4S7zsIa&?JnL zg(ta_#FQDB%Ji8fB^<6x$!T^uV=33;nV`#=s4J+^#{`0zLd&3l2Cg%G>ACUO z_Y>bQNt7L<@gpaVtRh}l6Vb>sdtg zMbi3gvpt%YVyGT$R1@PSNyBnh&4Flf!5qT6iA3Fe$cU1LMwDdh6DIaJnCTf!C38jp za+%B(Qs0$~(^pZgua=3lP^;URs^<-Lm%-SeyZssePX>FoO!4r>qWPk;Ky=zgXCcLU z5##k@Ds=}{dg&n=Ie|v+@Z6gJrW?cUQcnzbFhSN*d8G>Fl2>Y1E_4?sY9)8Pi$?6b U@&T6-kvF1?7ln~0>np_k10PQpJOBUy diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$ParallelGroup.class b/twl/bin/de/matthiasmann/twl/DialogLayout$ParallelGroup.class index 4e93adcf7a38f8633d01b85adc2ea0cad9cd6f61..11b543476774dcd4dffca0e2ceeb91fe70936e7d 100644 GIT binary patch delta 99 zcmZn?ZW7**&C2S*z{To0xq!81@>#a3$!Toqlh?6VO?GEbmrP|~VohTZW=&^MV9j7K zV$Ec*1@fI)b0!~WKPp-Xlqq6RWG!YeW-Vc`W-VlJWG$b(kYfRBHG>e)G&fEg01`nM AtpET3 delta 103 zcmZn?ZW7**&B|)Sz{P4ixq!7s(vg9Q)rmov)tNzo)rG-`)s?{($aiM-n0%Z)adH}4 z`s6pPRg>M>(*K$eKNQA;$vNdw zp-pX~MWG7^X60+dAbeHQqIOzY2&wo=EqY+T<-O;e^~ic8eZ#K-q3ej-!HEoa6-JZnyB2x9{)v62S-2DQ8TBoI#kgsNx(N_y!5SMLXZ2gY&q+ z_vmu`DnDd)gU2kofDjjv&rc}fXH@fxOP0{dueic*xW#4McI+-!(96|KN2thR8}M_} zC0nTDHk$YY=eUE5+{I=7M3TSI!{09bgB1UwkN@z9`%Lz3kfQ@A5)qbAssL&f zM6Ghss1VL84@u?Yo(gbZg?Q}#rz*xX9mWfVF{BcVs1#Y1VOr&wR|P)mD3%n#cU59d zRoGHB_Ecj~ndPX~idAQoidsy^E#9UR)~R~Cm!Ofg;pva5-LqaHYKuxeEg0xpZUNfgUMj5%hO||aU^=ji{y+Uh2zNN z6BO_%YB+&RYH|TJ@ zlkeldeZ^L>06!OTf*+B~PblJNr!1kB%V_5cy19xT$L{hA`nVQv@dqsQ4IaNcWgX?* zz!m<$Rc_)2w{Vl&2y+Lwm~`q-M7WCw+`}M$#Rt-Fr}S|jsr-Wg|GJ0&kjMWh;Q`8c zh|4^}H34B6?uocBVaWB5m*+4G!n|dI|cATXRxF!eAQWODH}V=!Jcxl zuRMb?ELHiIr2;F|ISVOh^-U_YR-Lyt2Rc-2VU<{~O08dIHlT7FR;7)p%ATp(V!CKA QRBH)^Y)+Tru~P{<2I?MY2LJ#7 diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout$SpringDelta.class b/twl/bin/de/matthiasmann/twl/DialogLayout$SpringDelta.class index f13fb1d0bbdf1dfbe2a2c15f2a9961aab8ea3b9b..1c008e9fabcb11fc69862c9de36eddb26dd324d3 100644 GIT binary patch delta 37 tcmZ3)zKDIpHYVQr3@j`Q7&uuLGVrl1ntYfklyT`~NoFs`*^^V4?EuSd3XuQ+ delta 37 tcmZ3)zKDIpHYVQ53@j{D7&uv`GVrlXn|zollyT-{NoFs`{>drKb^yj*3P}I} diff --git a/twl/bin/de/matthiasmann/twl/DialogLayout.class b/twl/bin/de/matthiasmann/twl/DialogLayout.class index 03806df495b77b44c27dfa093bbbb083f30535a7..2b5a1a311c593ca3fb8acabbea2b39f0c9247b1e 100644 GIT binary patch delta 1589 zcmY*ZX;hR|7=EAm2EK2;xic`r$R^{0v$3gYm~CR2$e?Da(RK_>GB*U$(xL{nz0~AZ zqJY_kwwW?&W}#Uop{T8(l~Dfmc#hV|G=aLWnCEon%yZxMd6zqPT4x@e89vmzXD<=u zpv$Bx47QO6Lm1L@3^mExXYrcK;$ySlq!kFT8e}z{A%oRSma-VK8HRD(aE1}A<}i%Z zG0MO-Cb^NzFj^VIxR$fW*l-=LH*kZA8*!74u_p2`j+L7^^A>|@b&R)B8g8{?0`fU$ zqCp$@EHJ2!&yYd&d=?tiz(JEZb23||@MyQOG?n3YZtD(~rkR73XF7{BIOb0F6tQ#{ z!`;dulaLZ-recm#6M0a=>MUN)19r?tsT~hu4#Pt_=GrKPd7M1oRFW#?!2*VbOkKv( zB8GDIR_LfSX*wQeSj6=^iXq(P1p(?8g`$*HLBC{g>@{f+L?~sxY@x z&FXTNR&b4#tUkr+(>k6p5M$Cjv#?1oKmu| zbasA8d0&iXX70v(QGcOB{l z`qM5!o2gMyEv*+wkdvH=Xpp7O{KSm{uVa&-E%dIScIwdahQOP6OCE6gqu&;I2aWQa z(`(->umv1~_vGLhfB1b;Wj_%35L*Quq!vM~42KzxD8NV9Ca8fn3Odi#PtplN#~Ds5 z72DAy5TPzXoeHpnrC(XvsT}khtEX7q#qcr1ZhRuJ2cHW1T@lEZ7`o$ zq2}68#{|B>m!K@UU5l61Q4YDyCVT=1UmQv91g&JEIUSXeW{czQgwdf=B*= z!Oh@+Q{YFmOTR14(SdeBJ7}H2ah#Avu2g$J#0mU_p9OxAVOL`GNpymSUMUjmVB%Im zO%wqovo&(cH98JKne468CXh?+_Kwji)b*bA-iIVP*|$c^AtAebZf%CTygz*NjX(b; zsLy%X?N64~{$bi*bU`-x$Js6td#rRxc?vW&y_^^bU9p0CWL+Rn>!DuR85k?*ACL-O zPCe?k))`2UdBLE~0*$F*m6gFf%}TvB=?Ste7`Pe@D^Qc3Xa6ryZAuoV7p3YjR3cF# zY_y6jFqLdoM0WKRa$owrn%bI7%_ttoeo!>UAx7o=KQb0BS)b9E%^qeegjyz9D4_oL z;^_=&v|m~6WOX{a$*a@3X!VfYvOKd4{bg5XfqELjtXW#3+S}@^!uY xEYD;u%}h~T>Y-AguLs3A1OrrGef%~;52=Y#K?Xc>ZFY%1P;po=NM6jI`Y$|kQ}h4; delta 1553 zcmY*ZX;hSD6u!?4!}rZMFYB;OAfvGk+aM5_wg{$?LlUKBWyctj2tt+tOp8J-+sv%q zQdYwj)D}xev?wUb7Rj{Cq*bVMI{m7X{)i;S-W%09ojLQo&%O7#%X{B*z9Y*IEpHv3 z>>nhe9E=&%f_N)Ak-(6sA<3YCDNnMYJSpsU8MGd$Y^Jf9&XB=oCNnof7Q;-|Wi#Zk znagmIhCChl21Q~P!^O(kirJh!$BIjEsgBDGT#mUK3Jert9vfG1=6s#nG%T=E02=LY+GJ^yt*dXR%IQd|s_nH;Wc=W(j+);j5K0yO!ZP9&0hPB}S}@T+j3d)-2`7 zjm&ORAf1S9J2HiU4zK@k^L=V>T zIP2J4&+L9qdVtLhY(A*rAswLxRb!S8JG&m{OFY7gM>T9TsDWSFgU7gsN_1iqKf&V; z9h+J7goY;#T7#!JO=@^rdQ7?5&wy-;>wQ(VmGdiVn!FmefGkD6y5@QfTS37k-jx+A zioEqx8Vzl7w=I%nb zKs40gYANL(k?+KXhg$v0?*?GITV}{ z_@Y2BcF13YlWaQ$cHt!@!OPMal45&>+BLi?up6(*(vT?I>)0cxo3;rWmklBIIeXz3 z*hiy+PAWhjvoU7-Re*kA^G7xhFucL=Ci(^5!rO8%B-Sy2K@IN+yo(_X9RlysQGxey zP@W3ON&Em-fe+d95hs4ka0tT!pD;Vj@Tn{cO%6YzZib`yOwd{0!Z|u4TSN2g-GU}* zK;UyaFK`Sd&`fzMc!vBrG(6qHfk0@2`Vb@V1&#{@@w&cbh++svh`NL-zP}!F>Tb@o@hDceGyxHs~n;c7y zlxLEw_1`B5>NhUoijf;qvdn*|%N|H6v`)~U${#>yRb-)=SFp(C`Ns>Ils&Ej^CX>@ z?$l^G;c^L8g$u2tNtl$gz-mSSmxe`2Bjm=^46{Ya`%~xsCxt~xEolX|f2C@FvNUaJ zoDQo>C33)^O=N;iaa9aL{e$Gev}I%FN=3sVRn3rkQvI^?pK{}?(EpD$iL%B`3P)@o_{{pTXO56Yd diff --git a/twl/bin/de/matthiasmann/twl/EditField$1.class b/twl/bin/de/matthiasmann/twl/EditField$1.class index 72c409daf67744ec9213f90a0bc94fcf5461381c..9f9fa6fc9fc3e02b68a88f3de019eca591140620 100644 GIT binary patch delta 25 gcmZ3=x|DT;CKD60)MRZYJ2qw+26krI$@xrX07t9@(*OVf delta 25 hcmZ3=x|DT;CKD6Wi^Hq)$ delta 25 hcmZ3+x{P&$784WGyU99Cc5F-^7}%LUPA*_F0{~#S2T=e3 diff --git a/twl/bin/de/matthiasmann/twl/EditField$3.class b/twl/bin/de/matthiasmann/twl/EditField$3.class index 7ada7ea5682ffb7ab1d953f67013d081522b03c9..569206e47b639726e70507c1d9da5ad8134d6fb7 100644 GIT binary patch delta 25 gcmZ3NCg4_ delta 23 ecmZ3$x`1_qDib5qWHlyxRu%?!X4c7BOlAN*o&;qQ23mP?akm~;S6*9LF^ delta 23 ecmeBR?O@#?&crx(vILVo>wE@wmIaezm~;S1Ed|;D diff --git a/twl/bin/de/matthiasmann/twl/EditField$PasswordMasker.class b/twl/bin/de/matthiasmann/twl/EditField$PasswordMasker.class index bcae6e023f2477f285c7cef917adb99a3fd3db7d..0afeea1f4fc758142adb47b740be32c8e53d72c4 100644 GIT binary patch delta 43 zcmZqUXye#$i-|XZfrT}Zfs-|ffsZwL@^hw8#XBthnMM+%fkXuwXRU>N}agMXORxB)}@QpQ>()zYAsFS z8m`shbqd!j+@Nry&PH!iyjfwHI&V>kg;~z6DcnX~3b(UDeRt^AbqaSX+@)~0POMZ| zrF>Q^+>=6tH41A}xR-Tm-KTKB=6FCCKbXuzJgn9u;Vi*NHQi&X{BaF=+~*0O`uanC z5_~b9^m!^)9D3Jlh&i)8$*b`QRn5B~w$tPvKZN5QLs{?hv||H<9UB!I+2nYJXC2Qm zz%fu^9#xM1YHenV<9S~2=oDLKIz=7la-QQwUH_7XpTktg%S`uaaJ-^%TNNfU$?+<$ zIbP=t$D6v>TMBRUj^kanIkr>f^Pb~*3ey!Z`keF!?%v_birP}_u1#z&kv3R%I!ympOnG{O!df* zU73&(+u|iZRg}2ZrhB;AWz|FHmd~!ND66dY=$IGV9&QzB@)UWrmynjx|CX3JQe+Qr zm`6l{M^#pq&7V|0vwDt4>Wq06RST-iO3P}hH0fS@x4&w(?1(1<~3Ee^D3w zMIfZ6A}1%~WQ-i&Fg%9K=tN>8T;_lgVm2cLW+&EsM%aAL3F2!-f?x_IjFP`vqZuPU z!&pwzEn>@EeN?0SO1ojcmdIVSHoGY>dl+E8Ww7~( zCg8OrQWx;*M3V6Om1Of9Y36tG%pdeMe=@=R%|dgS#Zoy{I$qZGl>(hE#Y<#@WScCO zFEh1GylOc^d|u!?Q!K4bEoX@plCoaL6tN6xRCBgiwtYZ5Lg)~~J{6ZvIL)cnc*hDg|Pqs}W$0pO$rqJI;7-E|-!Zznbn;I}4DeQXE5@nJo zOh(3eCW(q^QaO*XR8Scw&_bGIhFBpoDF_%FvdPP5rV>_mK zq6BnZYC}M`L^i{w3*8K%*-~h>qN~lMw{1;{&0?%=!$i?O#U8^fn@zPnmK$vj%WW4{ z*j!fGJl5E*frME?afXnZEi97c=tc!%d?{eJxDVDg$+|Nd(Dg*a^>JON`jW?;sKHPkM+_d6HBqc!Ol5E!mjgfY(6Q zkzecB<`z!`H5e$D1>2prwg(+-PkPv16xsrcZ6T$$59PKWm9{?%>;P)*KyJ20th0mI zXonot@Qrb0l1JKnuH>$i%T*zSk2Ji)?-1#dagcW2F=@i6Qcog5?%YplodX)djkUw2 zYetY}OMt@Yl7@HAQ;<0I-=5?9wf|7miH1$s8nYf!tDWVQ{-s6f8LnH%Zd zZjPNhwYaT_Pn!8iu#sN$R{GZ1=xD4RL&T1iemzP0blg$Gy2rCyayeh*$a6*q<~IrR z@%|x44#3l=GtO#?s8;H2@;A^&a^`NOh5i~jP99fpJ-PKqaTu*6N-=fpTGjSC`jLVa@}j>{WJdpeQ02{ delta 1821 zcmY+F32;ro9%3z)8x$8>32J&)`3 z3ALV#@)R?4I#Z!k;c10g8jU}r_^iTn>YT0ce1ti?5M?g&qP$2#ee*T-JcXAOURGG3 zfmak3DxXCPi=(9Ss={kgmatT)Bx0NC(SR3imPI(q64ilv&EDNNh;S zju%WQF3GcuVXS4d?x@rRcQDMdh2a6KELFO5t3rQnvuxvC%X@6Mysz1ID15+&mYwXf z>}Gtx9?M>K30=!aI^Sp6&&Rs|6UzY(S`I0E%E7Ld!jYmFuweYT0vC58zsLR zr3BQii=3X!Q!sLbUGeB9vtEQqk}(=>=OmWuV!|WOIO-=Ah%yU)JS| zH9*cYnSoMmpjd&_D!ss~ltJS2oNusLA!pq#R+60bbcTp!NT-CMV)>07?NpM^(Zln+ zLhlSY5|{pS3=do~#4*gn3d6&M&1Z6YM@TbA$u!5vHpgjhPSDnzq@y`ScXOJa=1Y2+ zuN>pv!mcfsqD+#7N$*;oVTl$oTxvw*t1IIWY0@2cij_pB^pG+(WRn}?E-`(_GlS51 z@g=*Hy<7N-&K9yvy4TS?RJYvGEs$iGuZ8Y6Li1ap`5mpy_p~=ZP+)$fulb2V=4Xn` zFN`t2Qeu8%j`^MW<_{K{KjowU#d7nvlQ2dojucWOg+*AX_HkkYIl$JnK3H)<*5c8Q zt|uC1*Xqia_idEZ)rzT3p^=+0(JAz$Q;Qfa(PSsEG3LCu0uiX{R9`h&UNx!SKeQ30 z@=iFVW7GFLrJdzYV9s!v`IjtnmNw=bd6J`x+`j>Sh;hD8v7gK&KcLhPGuKaHr5|OB zpX$`rv~|^m_NkI)zDFt)%Q#MG)wH!G$VzRIQO)IElXPKmuby{EZq}xH%^VGPG5s_m zemd!XhD&WF4b-bmt+yiyPj|~ps2aqf`E^kwwwdO!a>Aq5$*ktCCu_uSa8asAZ7NS+ zpV|yXOs+}MC{{^ZNzrl-X*yJKr94nx1ugaYNOI3deSMXr<&EEjsGmiKpG`wQ=b{pg Y{?E3da4B|-CeTB9O4WAqGjToUKNxN<{{R30 diff --git a/twl/bin/de/matthiasmann/twl/EditField.class b/twl/bin/de/matthiasmann/twl/EditField.class index 1da8ae2f5c8e29d551812fc37e910f91706ca78a..87ad4eb74610a9c206157113f72b099ecb40f3d9 100644 GIT binary patch literal 27048 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 N!atNRsjH`#{y*tK0T=)P literal 26119 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 diff --git a/twl/bin/de/matthiasmann/twl/EditFieldAutoCompletionWindow.class b/twl/bin/de/matthiasmann/twl/EditFieldAutoCompletionWindow.class index c6e52ded60f621123a1f1c781d50c9714914eabc..0e785d97c38e549c8064ce9094937b284fd39a6e 100644 GIT binary patch delta 987 zcmW-gS#Xp^6ot=8CiMJ07YK$elVpYfYGj!(U_el;07Y4;;sLY-LA02HC{Qp^grcNa zQobno0D(pkK@kOIQ@{Zc1QZu`aADsUWtByCMFaNrC&}X|PtsS1Q&i z)+@eNY_Q11M#Uz@H-SIr+iHte*c{+HtTFiBq7Xks@FTWpldTbK!*+umx_hT$m(I3Z zqdkhB^sApE_yxZz_8ROn*l%$F2Nj154qGH}M2klaj#(VX35%0B72q_^gz=lL_UdxK zr^cm9N2JoPmiByYaOLQ+!$zeA?_sX?o+)hTfkk>sjiN9588#9&_J^|xn-U54x=FYV zkrqL|Fvdut43tj}L^U8ZA`E?bKpY(ViWIkF!kJk)8aN3!l(*XLb=jsnJu~sB5NHYJ^kW zwEX<&RD)^F`x;Dt0D~+8uix^IhNy9y^LufIs~7FgnXXUt`M_a{&jYjEisTX%Ma!Movm{s{qd+~R^E+5Wa%{lebCJijZXLuZB-Ze;d+eCSGIF)nb= u#8x)?2ygfz&=Zw-#jjy>#m7$KExFJo;}u-wCd5aYPkbc{pSo-DlK%k8ncHvx delta 1041 zcmW-gX>e3U6otGyi!@WsPh_MX|& z2B3z+EE=%NV6{aao)3`38iN-s^6{c3YpusRgO@A>M>YLbqhoqPUdzXCI>+yd<7(v(i$C#~Mt`gJk5-&e{A=)^ z!ASyyG-NXAY4uI1Y&M-G?1=2Wna1mK&8#ixa`^n@n+#4F{O<=fIPGn_oo09BkT;Q= zA5AiHh8W?F+ZuNwsB3>#a6N7i-`UG`Dp%E~nwlo08mD9h<4Iv2+xZA7!5EAc+>Bd< z5#|%+u6v}sR&WzW3znc+Sb%AQ89u^PWQ2xMVL&SkDS`(vOIXPEel~Z^){ian;|V*k zqu^GIGrT}p%uYn{?Wwy{)lI3)r0S8=8`F2*HTjN=U@0Eg-cH!r11oix1&UD^ZP-P4 zq2HWcSwbY-118}%hdqLru#{!Oa(5(5gcXbnyRkcw^iGpq4J(B`XbpP`d+{Q}i-o<} z$4!!fsVeq0yhPYf+a?s%-VTy#@lyhk|C%`GX3%`*LekI`YK=~(wOL< gQ4GN|E{OMJt4qWixYA9JPc_f_l{`G>j>dbR16}&$T>t<8 diff --git a/twl/bin/de/matthiasmann/twl/Event.class b/twl/bin/de/matthiasmann/twl/Event.class index 801710ab8d470dd2404ffdae695931bb19cbafa3..598a949b284f93795646765461c4932c3c55caf3 100644 GIT binary patch literal 9704 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 diff --git a/twl/bin/de/matthiasmann/twl/FPSCounter.class b/twl/bin/de/matthiasmann/twl/FPSCounter.class index c249e866368331b98c300339caafeba14d1e03b4..7cbcf572a5a3ade1c195482168eb22fa6fd1050e 100644 GIT binary patch delta 1212 zcmZ`&OK%fb6#njv$CC_`hZ8$)GB&ZpE1A5YkfLCk5U0EY4VZ=oHLV>mw!v{y=K+FN zrVvzwXiJ!N`r5EY!U+PwqKhsnbzlAh5)y2YX!>2-JT~2&d*zzIp0->e=_# zzYm`P_z*J&*5g1mf;gz-P!$dvP%%=4BQkW2RG*rX$6B8`lRbLcm* z1tAkd&JMNBKY%_HyAUyP9y?8BF=Zl$Y3GXi%gO55a|#?FXnTqS}50V|*3siZJc_Fs(p5@BlUO71VlB7gayfd|Kdl)P=q9WTK0jxV!e! z4j0jAtE=$dV@(yEwEN(p{g{2Wk&yw^VGzw2A~8{};}i5?FZ!6Z2m41!?IFZ)7++un zlRVQniYXjJ9>>weGCQDQ3=QZ;8$H72^Io3P+sc?IdE4kItP^rFTF~9&60hKKZfRDN zPr_14uneBSIEO#wJl1xL3Fnp8+BiYbGVZmOQS%7uctexZ?QSll2tSQllGsSPB$B3b z-rN3OY$)~L&N~&NmJdj7dCL?_xop55zYo7FeyRvRcdGoxWv}7`yK@!I?>5%Jx4<;V zoMD?hEQnd>Pxt16!u9o4N`6b^as!Kf1#LLo^;auct5Fr!}nqAT0zS|*P^->tlw(Y8#D1cE3oKfck@~g{)(FNWe>x_<+XpTpAmlVO+UkxM7J!m zy!OoIb>JQfZzLr}1b%9`LP=dk3$F23TqMlv6xsLO(G6m|$!*=j0sMeb{75z2#!1|v zvYgV0b{X+o{w63#sUHoWW0=cOSUE;{wsBU;X$>^rYZyBAip{2%3{$dFOZ)!=x6jxk delta 1267 zcmZ8g-%}e^6#nl1$ilL10?mSu07)!ux|JUm=!jr{K#M|)rShX<$C{)B8cbS*(CKK$ zIAc1kPV0#K=0hEM!B=M*!?X_0_~?W0_0{S0%|D=1jo)2jnQ?dK-m_=VJ?Hz*`R?QT z$Mplh{qt}ez!Bt3v|+p!tvF-gYz-z%sCc^u=cH@W#Cg0Uttk`Jn4z^k+8@<p@kyII{laSCMjm5MOrq7Ot)2l6e6mesN@M?9i-$np#^B z(61-6YiWKhUt4v1ly0kT^>Q+so}ZO&H?ORSdH1PuFp{>gfJF=Kh#0tHA%i6g`_WpTHh`pKNqAoToe>u?-0*+cn{f|tf;xN}?1h~G&~s zj3M^%4bnPJ?+NtcB;Qjw&G$S;aRG(Xcpq;eg)>;hSq1@p(CM+!i5M;7L>IcbORI-I z;aRWJQkdptjy*yMz4SIgtFWeOpieMr&);u(S-{r(;L=x4A@VK_d$jK&7ZK=Bxu z+<_@JXWDJ{4T%fxtgpRriSg2JhqMjsc?5N?VP6^gFHWcgWtV;fi33R@PLcXNi>5s` zjXQ^5aIlG3a*%il#Lr_Kaur*;S}W|#JwQ-PyjMb3ko{M_C)_e@=P(ifzh(vvSVAL} z5JJw48V3rdluR|{pF||PIO%L3YrT)SQ&cOhfu2ynTuyv5!!0{hR4U10#A2Q9D&9B%Y^tAn1z0dLSMCaAC&i^#_Lp+AQz z;?Lm|_A~NRnEby17Yc+SDR)xVC)(M*+Vrr~E(K0Ic#BIQLp3+$lF{59YS>Xr2=2J$|y7#pJ=`FEUfMtK9g>xOrkNa`od vx^*Eg#ul2LM`)Rojxs_&A-r3Bub2ETTY8V<{EFjj^1tczLhw>ZrH=gzB~rzk diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$13.class b/twl/bin/de/matthiasmann/twl/FileSelector$13.class index 8b2a1105a24cc3b132168155ab9af9332037d7e4..0210d20be1097a340a2f2970efcd3da1c1d30d5f 100644 GIT binary patch delta 45 zcmdnRvx{egG%MqQ$ug|bqK6pRnGQ4XF&$wLV>-$p#dM58nd#)@9@bc({43S~04Nv@ AWdHyG delta 45 zcmdnRvx{egG%Mr!$ug|bq8l05nKm)-F>PiLW7@(X#k7?{nQ6!59@bc({43S~037fP A-2eap diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$14.class b/twl/bin/de/matthiasmann/twl/FileSelector$14.class index 11b3e3a12aa9773253214db1daf871714c677a4d..31b017fcba391e6e513ab9d1b7035d9cc6a105b9 100644 GIT binary patch delta 363 zcmXAlM@mFd5Jk^_Uw!tsq*cr)A}xZ5v^nQ&n{&2pQ=>?OB8FwiUx$J?bKn95x8PKa z1Hp*{@ja};y%la8z}Gi|ldmPR`rn$9%3 z==SKLSJQ8cK@VZbGn!$m8PP;Eqnfds=#`WHpO0%MG?RXjYFHl^rYIBgDG;*B5pu~B z3Mtb}3p30LbIc11ENYg7WmX(A4q~UV@L?LU0_=QyUil{d#)H_w`gL?JJ xzWU-+ef#Bl+Nt!MCz<2xC^cD@>17(WA@ngo!5==fJre)` delta 365 zcmX|-NlOD!5QM*Zi9R!VkTJw1f}kW94>B4P_kG_ru5pcVixCMZn*Sm5I~2s5pl1=h zit9n}S9lQLAlQfM>Y}=#`XTTbNI(4C+yOBTe3X)Kq1lBNlOU}oZM6GnqQiwwKV5W7 zdi?a#XVTArWXK&xOcbN0_Kdlnamj>aQZjXwzA&smJ}sG%%xc{Ui^RsXB1u$HNmvo0 zOi@mSqKc?wPBG7dVv!}qGAYT5VwE)m>o8Nu*hiUs)}B8-$>p>9qGFv5$)+OhE^iq` z&W}S*O_9&J7gkw@ZTIYsVwXL|KG}bR*SR(P*Oq6*V>~&j;>+r1O2i9FyizCLs2A_V y#Roa@NkM!$5t%e>=S)Uow&DBMi9Iyv-w7J^|G=x`$EnpUsI^kv-BJuPO!yaY6FiIn diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$15.class b/twl/bin/de/matthiasmann/twl/FileSelector$15.class index 35d6341481c47a0c8a56cf64fc28fc2c39762a80..c801cb0cb219b5d9378f907924d68409ab8e2a02 100644 GIT binary patch delta 23 fcmZ3$wt#KJQYOY9lb12sv;JaWXZk()6_XhNYM=dH6_XhNXtM~M diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$16.class b/twl/bin/de/matthiasmann/twl/FileSelector$16.class index 67c04b1c80c6385fa749fc94babf79b7d2f056a4..f630b1fd4f4b011ef9f36f842fde224df7c811d9 100644 GIT binary patch delta 33 ocmdnQwTWwk4GZJn$+j#Woc|fvnHd-an3*Q`u>=Ff9Px# delta 33 ocmdnQwTWwk4GZI&$+j#WobMRencg!9Fnyfd#}W(_d&Cj|0KMo7k^lez diff --git a/twl/bin/de/matthiasmann/twl/FileSelector$FileFiltersModel.class b/twl/bin/de/matthiasmann/twl/FileSelector$FileFiltersModel.class index 427bf72d97cde514256482c8a4c5796bdd0beb59..9ca3378197580caebc43da39d7eea9272c3359ac 100644 GIT binary patch delta 105 zcmV-v0G9v65yTO&#svi(00aXblgkA|0U(nP222Gb00sjjlVAo@0Vk8R22Twt00;vs z01*Q$02c!-lMn}J5ibA<126y$12F&=12O;{12mI~2Vem#` Cj|x`+ delta 49 zcmX@leV%*6Ocq{C1{P*322N&c1_5T9$;(&*c%6YFE#& CY6-po diff --git a/twl/bin/de/matthiasmann/twl/FileSelector.class b/twl/bin/de/matthiasmann/twl/FileSelector.class index dc8820f925fc451be1e3c4f8fff8841ef9e0d666..f6da9ed7e70d83a66a1e5574dce222c27d0e0a27 100644 GIT binary patch delta 9768 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 K%CROdlJKd~r-|7{Spv{)44Pt!2-Gm}3z z`HL{`w#eo$b?B=wf35W%lfSX39e-=`UW;=1KPG=?Q6BHokKczmS35tL{9lWT;@;?w zVUD1uqd!?x%KNnQv&s7{D)(mm66RmEgBb@bs?-_f{F_od80HpJ$f9n%4}IaVh$)6e zwO&6EmY^vii|V|-8J4gqX%^L^AIAbKEa|4$7WLOdE=!8NoicINX(KuHKDK@2}MH8h&zm$fhlNG0l z{DTgaX;E%UXNyiz8WZ_9Q@Vtu!lKjpBc0zBEvYmmYSC1Q=}46+)fP?n#OfB7?xyrG zrN*L}QftvUaujqVJ#}WUu+(YYJ1l*|e1|E0VQr}ob9{+5j@F_ScYhQOjwQ$%TR3|rxb^2F&u6qBXsWZ+8wFIDAm?z)yxU1s4=FDwdfWZXUces zZk2J`nUEfriE^UOoMg(M(xg#NvS^{4tfWrS;#4h8Q!1w`(aG99Lt9f!In$Deye?X}SDOi<`{2+?-B3? zXumXB(8Y#y*(eDGze!uOwRlXSjUn?aWU*?X#xy z3g^nKI|6|Av=hlbR(OBYkY6Y|G|cZg0zrpuXU!JZDR7TF~YQ7dTJlm1os3A(S@A zPMc@Q%S;9CvUBsoMh7l-F3GD6&yZJa?ugE#c|DC1)L-S*8>OhbW#Wo0rUsg1z8{39q1R$AV+WaQJW%FX5V)I6R%;qz+)s4H`yk7bC;2MW3J-TBu z!Ud)gwv9ByvW;}Zwv7zv+Q>B8F!ga(6qP$;iqf2is?v*Xqb*-z8(BuSZL~9T0GKbg zja(EwA3nadLs|SouSG<5*!)+F@lE=n0L+a-1E$G^eIZK8d9&u0%$_#= z>^bO61J@2lv1xR);fPbPT77Ao@@k`UB(OCuoHK29w;8j}on{-QMkm`SGsFuG__0j@?@o8Qo}CZp1ZpY>ykx^4%tyTLKm>$iGc`nW3QVwEpuRN4G@ z=ztfhBC3^7H@@8Yu(&q8yV1ioYNUm!qcgTgN2hPc{*|?g^(Ym$rxv}8I@{>2tv*`x z)uP_0^WCvc%~5J1Fq{GN>Nc(@alY$VoCSCJ);9X-?EXfcKie5t5(qUI1N^R4(@Pf* z^t)Ya>a;t^HU>+JX$-NAV*uS4Y#eJFLyhBX-po(f#xU98Y$+K8GQ*YM8AT;d=hER^ z;gnWYG(A_^lX--*zC41!k?nLYtKs9FNo7NMWYe;;Z06BT>&u4+`2^?J%8MMMGPkKm z?4ZeGobE?m6A#iJobrk&qI(*xY>j1ZjW9;c*=P&5qqZ8wQu^5%u-tjrz;2Cb<<{7> zZjIRF)(A^(jj-g_2up5_utXFGL&PO_0Q=jmv7y}>``4`zOOlK$F&}}(9Y?4_ExIM# z8XLl`5tmStZcMk2z3JB2yl##C>(=lX!p!a0z{MZ0|v`A21Ng;~!K(uT^ z2qu#U@nF&_9{{yFa2nSc-t?K_h2!Lw;Y?VkR&WpXyRedlob63llniMC%bd^HrxrBukSa&mD!_xeUkR|t_xsm zxYQ*2E1is02&1|dW3|c`bvU|#iW9VCE!x7Zyf01R9ZvE_KJ?cQf-LGMY0(XFDlSaW z$n{AIt_Sh86z1zv(nY*RD%i!}Fz;M^xb~K3^9*uMaGYw|eb;(A8?_>i!hosk+i&qPn_(&pQI^ z>keoA;1OBR_E-a^XFOQZipDn5b+FzItqS(6_XrTJ1ETeRfJnodBAUZ8=^;9=qelxOm#=;KJ^ zbDa&I1}L@%*T2RRw0cz4cIdb&L5l-x4c%iN$MzHi$M|#5?{>UtJP%)ffpYjomu-nh zBI$YU`3hxAX_z^WPgy8(7I)023AwRNYKeTnxOSdDP3C_c~p6OR)`n7S?dd=liifbUr~Gh znyPpYUTD6-Bg|eGj~C?!B;_8!*CXM3P7t9$W~0eBw1A|z$?8U}Z{QqEz!BC5ew`1z z$6>(Z9`Yt1H6ogi@#N^EG$uhCTA_MKzX#GEfb>To{fSEWf7F%tQFq>-g0x2xX^#}7 zh^v_;fb+McNk)+%iUN3^$A04xczfB&+a3pCq2I7Q4uW?}ily>=eyqoJU*OvyumRHD z4inguH_@+XsT$CTH)e0zL_xLSq@v$h#uZnD0%B061o0jbqCzpLv!qeAST1{Sn{-Qx z+szY~^00qz=39J+G$Hr_KnAh}e5;So58H7!^^H9&R7pmPbgilHwq)My?K^V@aG#%` z$C{~`>9G7MSt&#^k}ARt!H1v`IIaOI)2C9{Opgm47W5>SGNipr%Jaj_q_~;v_(AU< zM?^OJkB~)@$PoWqq2b<=0__korE+9s9e}L(50KsNBfBH%ZS#DOD1fwHIBurRaVCwA zY0)a|-zQp~-Hnb?N_d#0Hd03Iq?{ts#bxGMy}(yP7=d#h-wA`Xp>%|yJAJFC6MQvd z@*?~}DqL!P*=9oRDqBb3xY0RvSUCP+R4UK_flT&idmi1Q)j-L zR{&EobyS$VQghHfNs#k>kX-;$V`f9)5-LJ_0`d%9X)XAVaWOk4=Kg#f?tmrs}>+5>zqY9K}vObYw%3gS?cM)IYLDX_k(LnHu&jh}Du>X!GTu}!pH=Z&u3QWr4lg1N!mz)H%i&JEVq zha#b>W_n&|KF(P!U$%m;(>s~q`Xa;O&?5l;cz_>Cl`@K=ast(2tdESPelm_ul<{#o z4UMUCqAS@c$jJqi&-X#y0k~i#uZB1Vort5v{Wyb$XfSo+HMl4mIC2&91Na)C;Z(>E zq7?+|NxYUHapKT-|-sst?cQ8=;Sr5OGhYPN=)e zX|A|EDR>qYA`hr+0o){uT-kKW%Ba89S+I3_!e$Q$*L-i?w;R_ch6Z<`$XnnL&VYbu-jk-{7C^xv0 z$|8Z>P;I>#F}Kl5LSqyU&DDVo=Wt zC@Kdouck*HqcT@LAzFZAld93Ac}U>uA^|)AME!YJQ-wbdF?x;f8A7Z1QP$iQpjF(2 zmVn`1uD5s>{3(>#0v>vAX2$-;A7ev#uJa4=&lDVI@`fS!Pme5tL-W*)HgNESBaFxK z0jA4wO;-W}ID+6=&9fby0|;vB{3`c!of)n2j@KJ$r$(^Ft%`OJ5ppT~>M}&HD-cSr zbam#%^Zcaq=lk&-GUDP0y(TUkswvV=-yDX`uJt1QRf zy_@>W3K}T!dtKoAXjYGRCcQ}+3iFT%Xg!HXGp2MJqc6k$Q35xb15^VYXR>k)U;>um zhIr_1^BKat5;}7;z1JAsMDLH>Odm8tsX><~A64#^uDn z@s;sWRds^Ct%?NPGN@&O_9o~*I&wt>16S0CF!WtY->lLBth*u-O3?fSeXj$1-2u}b z_`%cgj6cvYZ17*zy{qHk%*jx5&jfve?vGPd*PH35#%MK;5&x?XM*@*>f?|>2X4(h+ zZ=#>ktKLle8>5l%Ci>-f#+X8Qla?(o##59fTX8ho1_ykay5rrnPM*c#;W-*2+i6%_ zo~Kdr0*#j))F?ZVO_UZZ9527WDm6Ssi3@T2EDv|GNQy|SAQ$Tw`skFF*4 zz_A-S1h$#N*VfU!ZbPxH^UpwXq{Qu%#6IZ7W<_GRpJ>Qx80OY89#`VWDB)1 z@Yyh^%m`3dBS=vrL@~ppUPjoJ4yP$9gVHsu8x+G&u5a@@ZY1fQ3`xD+o2;@aaD$VV z40A}@=;2Qv?UCk35sG(lK)JaDBUMYngq+e zho0c^MYHJ-R7|&WkVEjZaj3(fil=){Lw^TqE0hMe337TUjmO}B(HR?HT1B_;m3T6` z3&+7_6rob(um38&in{rAtzYZUBl@r2t4NcE{u}6)L__=| diff --git a/twl/bin/de/matthiasmann/twl/FileTable.class b/twl/bin/de/matthiasmann/twl/FileTable.class index 9a44adeee95fb9692fbd9df105920238dbdeb972..c8bebd0cc1738427b91f5fb4b9e211492260a6f5 100644 GIT binary patch delta 3205 zcmZ`*32;^A75>i4d%1ZpfAW$CCMJ)Ngand2=wuQ^aTj%*>Np*X1C_SpfPfY)7DbUg zK?H;VX>!2@En8b@)dCvOx?yc=vAEWif{LwMtAZ#lh%xw`|K8kpWnwb(pZo4T%Xjv_ zXH3tS3A=h8-T|OlHYP9$`{S671942m$8j9QC;IfM9*6Y!OpnhUe33w0StsJl1dqcG zzDl3~NA%6tdUQMZCV?Itbkuhj7n2#1m#v1tv78tbZaTAsp+>C_= zOR-Qe%)KvXpgYwR<;=hhZmX$F8Fb1|4Q67N!Ai6XhFF$8rnKRo)Qj1e@#w+EH$!B2<%ZjX7CUmHux_s$Z}a>WTmtl zJV(=b9$VZql4n+T$|@tP70fMitC8FAw2|BOSfkqRz`m}v$x(?Grhx^P()g1`G~AXl za+WfqmNJ=^GPag7ua+{kmNL7RGIW+QdX_S!qFSoO+psI5D8klO;cz|O8;Pu$x3;&GV z3O1E-52Q;hh7_WFaSfw!EgNz=igA4iODe#U(uSd$jpWXO6!Vcq?JgNmbDnzO0hvo6^9W=GxdraBin6+FLRN%?ihbJ)a4-I( zLhi1L(X6wIfi*2!H$Q~K@s`47Y+*Vp_`j9)8bdxt;6B_>^@V6g7r*8(IE~oGC(T`N zW$M#*@_C_Q40=%P-~o~P!_*?Q`k-2+#ByrT2xVA9B@dxY+{Xvj5y|^Lk}B_O5UY$u zBE)vQMHjJEz>@1my+)A3&(}PXR0}cDtC`4q!|3(NUChX)P*i#|B04=F5r(C$vWZ|G ztE_Cywo_FArV5X+{XHk6h!hs_nbU{oDmTAMB~P!av;p-RF)X=*1LM1rkM~)_gO07? z9U;Wo#`;TdV@VDptc}%{NpHuX%rIcmJ%PWf z7gQ52#O7lQ@wGm%6ytCBdmqBXw|bK@TakPFl;#HUrOzhS3>Gkh!*{}oZbCFi!;ur3 zGy6hH3Vg40Ffa)DXQ})@u#=~{GHDzGqs5lY4Bd|A%&_eko_PSrW$VIg{I@Cm4rl4R ztn&A)danwTLC})A0xh;Ao?>TcyKx(<9XC<4n&DnwbFmHgXbzE+FaW#oG<&K7r{Njf zQwEpfSw2PBKjU;W5ma`2+? z_JMBvz`;vL;2c4$>?r4b#A5)Q0_x@Vwiw%LPqEXfL@lt;9ac?Rq8LP4Pi0!{C-7UE zm|x+>h;s7`VE?pJI*Bsd`HH;McD{zRAr$%oL~OtJ6FJNk6xCaYnkCz2I;>7LW!!TI zk6@f;53U*8Ypo`*)<3XT8dxg}S!+7hTA2giT14+8*2zPIFQb96L+Vb<_U?~;!Ag!V zZ|G{RPCr!e-{xT?Yc>uIJ<5nbi(faeVYe&uv@s9MtMD*Tfd51MDV0bn+47bhla}MM| z!P+TheQVpq_^)fHgW<^w)=qwC?Mw>-I?X0Pa30h3KigiTF%bXfQ;uB}b`|B@Zn3K< u4j!92`&WW14YVSz!19=Bkr!7?l| zxD|`subYDt9tI#DFuAkiASV5a3R~Wfct}-%F zzHRU_ZDAH>J2J`Oewl3KYMEm2ghH4q(~Mjr-!bxC9B?ZO>#DPIt-&8vWFaBQb#lGI z9L!bw-xHilBLm&`!X=V>k zblV5TzH0D1HY$4hbhDb6DYG1zZDfwjHFyJmF<6Z?M&_xOf9UZBZgXV5kq+!L_=yVN zgN=e_tFqlh-8YL;W3#fr$UlD!Ka)*&SvDe65daPG%8*rd| zV`_AwgDGOom1;gnBN}f@89GauW=ol2OBq~CnQTj$Z%dhSOBp^(89_^#V$uQ)4QVX| zEFqpQf2~H;omlxbS?fMn*_>X-H-=w;(YPIVkP7a^UCQfzR#`u4E#D-F5ST{1*FgEp z?C$|SKQI96v4IkTAN!J*rfWNLlGh@I>q3&nfn;$Y$waA5YHzlhfLLY+oQL=#0#%jI z*T4-{jR!au0N#YnzVH>~R+ zgVWZhA|eD9BZeiML`y?z5`jMnY~dHp%2xbLr7011BY!(zgk!tBUpMZ@1HSN?gwiPJJkeWYOssd;W-&aq^OwBoIX5VH(8^SXV+BQfO?G> zmfX#nI$m;5zcoDc#2VfcLY!-?r~4X9@)%)ltj3x>ct*XTns6buo>++c`oU6yXYpJ=!XvkL1o8Jq#QuJzxkY^G^GP*> zh0Nf{m*7OVBATb+$P3Mxw?aw^eXn#dFbK)>RQ?6L$WvXJI)Q=FVoPO4>_ltkcVUMw<-J%XX(4F^7pKIuL@H^&{DbvEw&V1VhwA%aUH82H&M5a;oe*~)`oiw zhsbFdj90LiJynIX@GIL>1{3jXK1J9+6Ld2X*g%Ze^~6r9#5cH27ZHcf4sY7Wc#C*7 z=&2Ss$EeP6@R~N3gV#kEs~()<;CDyi97U|+80US&V*s2&>g5Kv7(46Fu+ynbEwIoX zR!v%>7)shmWm@c~@>`mi|Gnd8&hMgh3Kh2V6?wVsd<|(+DD;Jh*nS@%a)c`= zs@D!ROEz^_oodOr7Y-Z6IL#hbH@?qWU0`isV68l`RuQt+a-y{g2fnq4-b<{LpANg4 z2F4F>_)4yKzv&BBb9{M2S8FASXuP-wWe)yaOn|(rSOwj~&!B=s!_%j$f(#wW`KeEu zHLcGkn>BT;9{ceoGa1!8iPdp_LmPF>Y4FB?S4Ry#2%v!jWE=UC^!F`}5^tKt5$Qp# zgTF(WL;UBVR7QvR`z{v|y`NeAPc>eWTRU=Lh_}rL6VZE{;yd25YCB^{s6azOA+~7=nND zDbFqnyNZ&wTkI+-zz4pUlQI=21j?hkc4a1%FP03JTo#K@kxgz^R>aXc4g$M?^&%=Lt#3 zc>q^FfN{q{mL{%Dco2O61?#FYIjO3zD)s-#soC7OT=nbR^k<-v$%u$HOOAG7M+`e7 zI@pz=lid+r?1`&xp~te9eU|+ki0Gv+&A}KB2}k0EQp7QiTe6(6oaB^MrPFaZV|Cge zi<}kC8DwC%QvO&i8{4CX!g=9>|6%4#*?$l6%Pu+wxTI~zAeV(Jj;maA40F@a;HSbG z-xB6)Z#iyrM;LM3WmLH5xX%M$374eCcqlyblVNM2%DC{@@q}^5Ql1LW9M5^-cuCo@ zfhNZ*UOV3K*04&|7x@`U`S(HA*CoCrCJfvDH5d4yWUXJB95nAfO(o|Oh59r_eL`WL zfKX@<)(Z6`HT<6m>oBaR(a+fCP!0VrTg+@^lXeZ8l{+)tHGes!zqN(cs%F@##vd}J zQp|>hSekVwV2vIvP4JVvX)}bhC#g7RH=(0DlF!@-r+_n F`VAGCSDF9- delta 504 zcmYL`$xc*J5Qe{V?}h4n`j}3Ln6{Nf)VL57#96dO0Tl$CX$2>=K~WUvSzDaPc5$|> zcmw0k5Vt0-OneP_0b^+E;)3L)s=lh!|0i{RW`AW%KW4vv16ueL6SK>bWw+3tKu1g` zd(!M>UrZO>Nwr_-vGmesIl#e~LmWegu9M=+!r1=9`eYKhD+neJP}HU20tVV{ZzQB@hKC+Gskl#9Cf@9UOHa!+VO^A z#|Ab!-tx}zo)3OmROcsyjOOprN5i%`l}c1LuRfkkU diff --git a/twl/bin/de/matthiasmann/twl/FolderBrowser.class b/twl/bin/de/matthiasmann/twl/FolderBrowser.class index 98722e07f391a76bceab1f02068306402570f2b9..0403cc8ffa84909cc3813a84e95f6706f8032a50 100644 GIT binary patch delta 2005 zcmZ`)Yj0Fl6kX@GoqOl>(8o+W)0rvIX@Ods(!_*@kl12FFfn{Fh#1r=NK2tD6$(hJ zQbny*6osoIzQ6}ovDl}y7Hxf-_(A*uCMJF{s4?*)rcu{9_cC*B>LhcXd+oi~+3TD; z*)ZAA|J~m+vjA=ojS}bafy5RJOWckNHa>K)O(GW~VJ?o^7?W@?t|t>VCMELmk)B+% zF(pxe3wko`;A1_R(aj~@d=kc|nAM{>8=pzUF|MJX>quY761HDz;8!-jmiPwW+GsuD z_Jv0r{4CLc88;>>Vk0)LNHpVDiS_u+!SA}CaW{$G5&}7GJzWB|?pS`xJ(CxixFWhj zPA7U4I??5}I92(bLMUv*odR|4pEB(pvD6ao3QOT$Y!^tmX)9$`aun{u-2zLwQc}>| zeR$LM-tL136n5Y~w13XT{~?_#q5(G`xy6lnr!!S*1&zi-no7nVhYxnvFv6mxdYq?dl?#W zKZnXQ#6IljOgrh(PTb?gr$o2ADsuBWZ51=H0pAK3(AA>d0qzw-{KI@L8wYJ1GEPX< zI2nqpSd)#~Myp*WsOK)4aTi4|`iKyC&_kY#ru(zNJ&e&202XC{MLsZB*G`9I_y*%h zlb=NSG|~&n?}d%-MY%tWBjl-l)I&7U4Uk7Cm7^S3!~h|)xIci-^KonVNQ2$Ek}VWOX=#0Zmc)h(i4Ay~dh`U53#(S^kr%`udrH?5Ib6DY z^);kI0?!(IpxXDLrIZ7)l91zGzV6l1y0!Y$3%CKi&u8g8k{Ax8S^i&el3?Cj6SXB) zcWV|riZI4djBx|5Fb=PQfpR~aFrs)KCs;n6jRR{QNwHq*@}#fmA7ep9U!gY3NO=6Gi0U8LuAX>&meCrtE|tS+4qcenJ>~0foR3PA4|V?26L|LG@~^on)-Eh z8+k=mvtX~`b#umpnYe?#LcnMF4c6Y`_hKW?;4JOhQGqw{7W2_rN#sPYn@8Hl+l=r| z=3>`!PfK59Z?tzG|1b&0y~`u~h`BiDvnomMWQM)TR7z*)S#8eb#W&jU7)e&`$a25R sT>fH><^wf~WH6C{+Ns$>l6jA=Eo$@*_DNE5_|e?TaWnt=7x%h<0rdhQJ^%m! delta 1991 zcmZ`)TWnNS6kTVgoqOl>*w?f(orlnAd03m$#Ds>B*digA7=8#M;sXV13rwllDoTA+ zQL&1ma8$%6J^;m9T3YD?ZR0!fL-b!`;*UWMiJzE8UFY1(%(Y^Zo_ij9?Y-97d!HF= z8EfhP=C7$~09T1tiT80rVm&^PxB-I>K6J5Bq6kA#Zk}{7Ea76rEKWHXl_8rH0qI(v|dwEHhNC%jJP@U zDCE$kH@o#EIUy7_;wFJ6{fErzVYiffA%)v;yFglhAF0wmx=}YL!U{Lz7Jc5W3vb32 z9gD6@2tZ+%xJ-#sQKs-D1{AiVoeUdtccMdKE4C?-;I^m{NhMMutwcs#uJAIt6dpjA zgIOi!iTMiqja99&%8ELLJJ9ZkdLONBsgv_cP?OzbV15De&)ap< zmQw6F_3<0$8LyDz4z5~w&bxqnfSL<#}Ma4=ggdGa(ti#X2(L$B>yocCPqtIP`TX z?GNH1>NGx@A=>B$D5jITVNOCYd?I$UCx9;Yxp)bDnCJa?#CXv^#S#GxyHHGNg}aR8 zHAMW>K1%;yHq1^ZJ$XL&aP}A;=jb!z%p>N^CDu2G*mYh`pJ2ZJi>{xG-ZKa7f!Ra` ztY@m$vmmOgo0|(FR^>&k!c(kAuONyLYBcr82C>NA>SaU@R?lB@5vh>GGu9qh?E5gK z6oyzx$g>__eWAK(nYr~+9)J&C2~Hq|!2r$7zriVj*|#?8rg+oZ0(clvjGzLiEV$M> zya)y|KAR|Fcn;4qeTI#T&@577g{jK}entNf4_5SPR`j^_`2Q7s&_^y!WCOi0#gaY~ zKwhe(wO7)5Un1F9XohK)?@ZtdT>lD$d5f&_vx()rZ&{NLWU3*bsRq1+L$osrnW;>K zYWezE1ev{o+w#X7D>{YyG?|2{| zcfhX@Fh8#|_aXj5ti~I7lXhECiz9f8d<-jzaO{d%WF5TC2=C+@yOC$6^hKegy?#7z z2`0Se5q`uXyz8r~O0|>W?o>K$7oUTK74>$6gq9m6;lN&fs@ZbEc^gjOpjNcz^ diff --git a/twl/bin/de/matthiasmann/twl/GUI$1.class b/twl/bin/de/matthiasmann/twl/GUI$1.class index a2ad5d24fc15131c099694690e2e77ded4864e44..13fe6ef7a6a311c7184cf3adf89791204a801c31 100644 GIT binary patch delta 19 bcmdnNwu5cM1|~+9$s3sh7&#_0F`EGZKlBAr delta 19 bcmdnNwu5cM1|~-4$s3sh7}+N?F`EGZKjZ~Z diff --git a/twl/bin/de/matthiasmann/twl/GUI$AC.class b/twl/bin/de/matthiasmann/twl/GUI$AC.class index 23d98cfed4d5d7855a85f1785351eb085f0dd1a3..6441a7b3f8c5cf6d540066e8e54e5703df64fd48 100644 GIT binary patch delta 85 zcmX>ja7JK5D4Spx11D=Y10QP-gD`6^gCuL;ja7JK5D4Spi11D=J10QP`gD`72gCuLj|tSJn}tf>svtZ9?|*=O)(16Ab!Rpl|Luog`I!X5zt()@g8*wKgCT3x%NaCTD;e}ys~OB$YZ$D6vK%ON7KdaT`lWdDL?HIUO?HPnw u9T;R-9T_xPof-64T^Y<--59KZv+z?FXo|YqD@*+(WSO5@<-~L(lYI0qZYk&FIIo=SC!hH|g+Cw9$y83J zaWb8g6F8aSl_&b-Oh4tySw308O|v9H{WXOj_yb2#}1C+Bi<9w+B>asekAz&E*cArHIAFE5stFtsk_{s-Q4dx-1c2gzQ_F@ z<a#xNRSoy1A`~ll{EN1N`A2S0Cr(2~M8mwx_)EX+Q0NJYdi>oIJ~OeVyusjq z%%z`jm!C2cZ*u8p-1Zg|5{Fd8($88^R^%A<_RXGj$Jl;CmbU92Q;UQAZ3 zlvi1P`bc@Wl7?pG<;3Sx=|1J>#tcquByuY!+tTSPmFbtiP+2?y+FDuki&b`p@TeS4 za{Ve#4S>w5fnJp_z%sIH+S^0Xs@7mFNyCw6uoe&4SYBH&iZMGry*>Nsy=k z%&JIxXDrwrTOMrf3Mt5pLgV~-wNRg2d&)znp^QGAA}7FVxos9suK*|er+NljBt zW$l{z)wPwYc+3}qhPXdBRW~eme;jKP2Rqw>?d|2UEv@D8@8u0n z$610r;r5QMn4l3UN9d2`HQWV#z0FUf2`1Vc-RL84W!JKmhN76fRS58^CkNd2)^e>5A2*^(Gk6>M!?8*JVL__Z5@ zn}g-8!S?m#4PEW+!L_X+bj?~9Y3}M=9NHG2&=7`qmsz194A&cD!5Em6tEtd?`<15T z^TK5{qxCx7oiS%lQ1iK_eO<($ET|+UfMgGh$`2>{FKrDrhc-l7u|L2`hf#4*sdo$G z(&W}NfEeG1wZXNa*8YT5e{^-O-vT`Zx@`!y)OUp19he}CgGNqb$R@R!?*b}4qSctN&@0=g*WZ}e4NvjCA zhhuXD1;(eOz}Hpagyn*)st9Y8?Ama9Xh~Pw+EBEK;qme!&B4~?!DyK4PNM~_3XBR; zP5`L^1s0^9-O++62d2hs{r?X@Dd%&mcBVllHf!^yx?qQ1rB_}JH^HlhcvS&dj&r7U zThoRR>;BTzD8=||x$aXJY!9vvMQ1TsTemwcg8t*Nf--PmG$f9d;o~QyT!uqZbjR75 z>|UIDBBwVarokr;%nAK~|2kI$`GA-{5(SOwXPBF~I1-zq(C;Cw*cwBSPaIhd*eX!0 zEM(>V0EzeS>^%VDm0~n=6*j zbTPwGxpV#voz3X~w>ghV@iD;hehE7Td| zle{Sm3#;Ln+NP%F>l{moU1cjy^)|M2C%__3+oEk|n8#c3w~fv3NIQHQ*tY2~pG{Ae z^;D*Q5)|w>Z1k@gRe~n=qc-}p!3ILXrT{Z3_1aTIVV#lVM#m_m95-mwWR0)k&e`bf z7)*|RoQ=M{TLvfl^zn!WC;RsKlA9cpaJ#RJ64()5LO%*Y>ZWH2)DutD>>F0XKCtrnoU>upDiH>cy2V* z7TFxCY;Dyruw;Es@j-3AIG~Fm7spsVjsSnKWn))o%ovhsaG2p_;t

    Cr)AGb)uoJ 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 AA^-pY literal 24938 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 E2S+pUa{vGU diff --git a/twl/bin/de/matthiasmann/twl/Label.class b/twl/bin/de/matthiasmann/twl/Label.class index 5b49a214bbf84a77ccebe02061f7d207d5d5bbfd..eae6de00e59141398c2972c26cab390d07dd1f43 100644 GIT binary patch delta 426 zcmW-cw@!mG6h_YCI&!E2*ewJfH~q7LJ7U+r}y4VAe4~M%ff^h zSXg-hRtAJ`Wa;>xdp}$DZ&9c?@b(wG14{W;bZbfoY9m3fsd_|v1%0CZiUG|aLyAh- zhXo^&9+k|PRO3D-2x%N9r8lL?V_F6?f?2s{PBYJ}Vj-DDO(2J*Wa<^mK2}(j)S8@J zm(+%60-Ms?(rmLMy%u5*&!MXG<6qkxCMbsj-w$<-% zYd!soyRB;{mh@pQJ0qT`+XSLcgX+$Y*~GcAx#iC0o(G#Inr$AbvU%cJ@e=t_pDrug zY4K%8UUj3Vpd8CA(1ll|U6XDRHs+$n(36<7JMSr3k-Cf?cX7bNr3ffGOrkT9>!QN! Tna0b^Ys;&1%@+>%s?Plf$U|P0 delta 406 zcmW-bIWvP%6o#KK6K-;SL#UWhDbd)f6f&bS`~VFzQRhDd5qpAs_I+PtiCD7Osgw$h z(W(6aMaDhm-g(aZp7Y*2CsF@f7k(?`?twuL z)R-VH=}E~MP6Vf3&Nvs9lEH=8w3j9>1y|C$R@^8uimXLxTQC&r z4W-sYA&n|mH?9(l6qrpM-)R+|@I6}j|}`f#Pc zbZ4=z5z8F#)ZS2bjnDCyS6iNRS9#oB-)G@cgcbd`7%(9h5n4>GFsjLH)*PrZ>n8aO GRQ&<=K3tao diff --git a/twl/bin/de/matthiasmann/twl/ListBox$ListBoxLabel.class b/twl/bin/de/matthiasmann/twl/ListBox$ListBoxLabel.class index f19b1622cb4a848f0d936fd9ab516aaa664deb2c..986e212a5ef18e8b02b6898f9b74cd76ada9afce 100644 GIT binary patch delta 719 zcmZXS+f&U^6vscmb7`ORv#Zk-qZtoos*#!uhG{Z}Oq~%WaZYX_Q4~d#OGI)fa@o0G zbIo0HEqXB1gJwK<^Xw1s;14K!#f%wV*7vg3+OyW|HIVWtrDbraw;z~Fze^gGE~!)n zSTDFCXhXHI8etn0APT1xETU_edDh1obZjjKZ*zU4}or=kVyCgIP+07o8X7;-5 zqa{d${nFQ3DCPmt2Spzed05yH8Rw|TV*#>U(m5XBgyN*)l%m}sE)ty+4VOp4Md7?? zIA3w5dvM5!wfVD(a|&Y}^Uc%ebo6w1e>!>RndP7=YZ~fnE1EPHxTwiulI9YZH516R zEt)G_)m$S}?CTEL*EBb{skud``Rt!weOq&fyPA94*F2z0@lf-K$BHMKr#x4@&~)=s z(?gkN8Ot@VM7|dJhPRq`%+#!8m1d2E_ab}gbMRNy)i*XNJ~*VCuikNHyhoe%m;&EN zhiPV!H>u}GOsmS7t0=&uusCm+gge=>1g+Ddc87)b>wD}ThO#GYl;TaPoK!u4W%*b9lGQc`AEN0-hUw@j3B-^8CBgYOK Vu^7!wwkOpFp@2Q8W}f9H{{r&*hpPYp delta 714 zcmZXS*-ukZ5XOHOTF>p}2qmbIHxnQ#1fxbnFh()ZxD?USx}#8~Dhi0UE>#it6&JYf zJ1XuQ))f>J5`Ey^Xa5KP0Pu_nG125?=KH=`GLtg{dEfHd28Vk4f$4m8C?MvL&qkX~ z;y3$@X%MtU&{l^=nglfq+Gf+@u$>)}5EnTiW~XA8!*2E{rixFB+3RB;`yE<2;LyfF z9}x~o-Ql2!M}!|0eoW|bK__IKlR{6~6gy1fw9OgCS;aZUd5g?&WL_jt8xB+k$|Hda zMMuxzkmWaV^Ewr-;-V4VA8CEorBp}yFRT1Ab1YPSL%gLin$%q3s-~DJnrmFwOr*$^ zXl`&*bBiL8Z(CrxY3^`W)5SgayLV>nzUBelnuk2nJm!hwspc8a6)!X|d9CQtydkA| zOO0j~t2OV0z8Cs|kD5=+)~scnCMu>^Xdj;~ys@U1L{jm^ts52h^jpm6^o((v?Fp$2 z6;-7R6bngH%vUTLCR^Z$6jW3Wo39*^(iI|ESS+T>?anMoU&2!NXJ%DFh-#yTO|mu~ zatN{9plMRh3WHXf%<8P*f0_P&GCi`LJCIe8v4$E`=aHq{Y=77ITIvj+YdR{t`J=6| z5;V)YgZ@O$-=K%IaXxI;yP@n^B^&+>P*0)pg?P=cUtlu1<{sK9HN!@XUsjfDuBjdT Mwz;KNUX|tk29Mr`D*ylh diff --git a/twl/bin/de/matthiasmann/twl/ListBox.class b/twl/bin/de/matthiasmann/twl/ListBox.class index b0fc9c7bdae2e1f3c0c77f6e0acaff78a9602625..6b22e90a9f5156e0c2383d09ff47dc951ea2ad7c 100644 GIT binary patch delta 2052 zcmZuyXLwXq5S=r-;qAV?#E^tg3`5<(Ex!EP$Bf*L=d}xy{}zVisXr%qGG2< zsx%u&QNV(TfFdXslp-o3B+l6cfB3mS&OI}C&fK{(cXyXg!oo?2Zzx^9Nmn+dmgxYd^kZliI#hdX?Ul}qjywd`#x!5jr0wJQl+QO!P3xmn=-CaTisO6Q+15jv>Gk44mrWNgq$) zX-_tBeTML?hvy=A-j^nr7QuAJ%^=JqyuchUlD*_3J_|4Vn1xq(fmi8#Eh@9{I%D3T zK2h zDnFv^W15=@Tj<-$ET52l%6dNI#^+?)Y*I07BmIKRU>dg5{F3GlnqLui(%eP1oA5Qw zZy2|S=C{23UKY5I>^rjW3H!PG1A`L};YYHc==+)MfG_bFexdy<;UJrP$irb@#0hiif%X*uDlPBVhZX}KxYoL1KwPHXDv zPBXPuur;j>&Inw3<9>E>ZDcyFLpT!=C+p=Mr*-A1g9qPfww;G0Ipz?SKb&mf?wMxF zVL9Too}6%6--5M)HgwuZ&vM#WD+d$Po5!0tJzJYP`IFJd4b04OP`jRW(e8MXw{0fY zujWp3(ahl-dRh=#>N%dC>$H`g=V=?K=iA|WfdQh-ltV$zC(_s(GJ?t zA)bmfht@dHX@PAcA*N0{QQVHKkSxVOey7=)W@lcQ8`=dU9P-h@>4nUHkzVYyt9El* zMAqFHJl5KS!95AR2)zk?G}-3am$aV&dIlS+W}|;_uxiuf0Zs?%ActWXerj;J9Nb{1 zLxLU|J!3=J{nMx&7R=6Q5FPIH5;;*3TXHO8OTE_J%Ip`|^H2o)c<2UEVt<4G-#KPa zIgIYbd27)lSeI8HJxhMg8?NzQ@~Tvl8>A6><3jOdq_ji2`I2O_IP@_Vk?j&fUt>|5 zWfV1y#cX&X^fOi&Ip(Wj%(wA{(BGJoJ@QJ0cE8Ll*P=i=R>Vc+?(!_?n=HBI5>%71 z=ojp0-=IYgO9AolFa{V?X^7DnXe=a!=z>8qSHd!1c4M&llI;7j9Ycba`8h*};<&Ue zl?>}hos;(UMfEbtkmT|vc^Jx8!7|(Ht6e6U|J_OKN}04e)z^f?+8pMjf;IWwLziGg zklJBmi%Sy~ij2a@M1_@P7+j)4Cj&6bSlIG+!DYshq^;D)=pdzIlhEa+Z`X0hzxpx% z>aVQOXUM>Wiu&HTBB3vk#-{IDaCYcQ)8APzGV9d&nHBmZsg_WMY%o=DMNnE$A6EtS zI!#O~;%l%6QpERBWH-mv!3Uj&*)K$P;TT*SJW<#?dL71CkYa3bsIXDiWaIo~l`q!m RY*|n#YJVMTwRQU%{{VHpzUBY` delta 2015 zcmZuydti-q7=EAkZ2Qjn&Tlg|WaKDo5w=W)A{#Thu$X(A%Tg_h(*5G3o32y7?vk!_ zL0D9)+*6?t)l!sF=&q!-Tza2_{_6bke9!y--skWym>I^?jC+RgEa5rkc%JM9AMsh3?PC^RWCJhJ`Eo>_$19AP zLw%y+xiseyUS-I9*0X@-Lf?X`sCbP{EQ-o~Sj^^M_wa@)B?=tu5h|I)$KHkR%KGt9@**cc~ zA=yWaTTj^rni~lp)3=FPHj{nAdOqdBXJj=t)hKF6KPNMofh{z@p!p@ut%PkfzasmZ zu$|^NjQf`64mSTC3;dpJC)qB-Zl3%{Y>_YFYzdTrTrUW4~P4^hd+F| zi<66DFR%F1!#*E>p_Va!d#LkeD*j>m{T>c5!jezJFCGs1^6=q}9kMB?STPFAqiP#d zHNA#BP4YEaQ#|z`64YrcgoBo$xrkJ43@r)6uX@1s0ispgQr}c>pWSVWs_E(7L20nH z{wBC!L4(|qR3~#~o|8oeXpWfEG_B_}T@E^}Zy-D53&K_>i{*8v4K%}PrUAyv1}D|> zmXo*T9ZwrN`At)U+>GqBMh=(raF^_cvB_SJOCm+airzgl>2M@l}97~L3sdY$_eNNW!G}}zs zBfmR6QT97+Wx?87PjcEu+d6Hh^@1sx?c=#l^YmmVe=)kwz|8gzYE9Y*t!a%|xO|z{ICLLmc{=uq-*%%t^ZkQV#=Jb3W?l1x)ZGEw{d?)Mm z0;gs2BP1)BoSGF>G|F!{f;*_k3?rGrlUhjApnXPDdkIH59bL7t(Vi1J^*v<2!=8r{ z*vCU3h`phGG1%b$Pin=NB%Bx2byj)iFDzha;CQ54zz**u+xpYIO z`I2S5I1DrvmKq6Rkgyk&wNdc`L@Uqh8T0QU1lB8?v$r7D40`l zY&3C##xenegUtmecIao35D!x@)R;;uT!dl9LQ;(0IA7*TlFXNF7;e5~`&!iCf*`jr z4`o4F;W0(*+(Q}rho!N1tHmK{CTWLfa`Yr|Du<-w(P1SHY<5YBJyaK#ghpX>;JUBv zP@X79WLvD&g)0>!K*yRbUhYHeX)I>x}Q3!=9%aOi4p zW8ehQ8yFZEm>C3tq!a@ikhEjqWUyxtU~ps*XK-SWXK-OqXKbh-d{=IxQB;Ka27&8i|RC;UhGmi6*ormVLJ_Trqoh z>?LYQT=)T8_!ayn#PepF>VjFkd+&Sao_EfDb2f1{G5B@)<0sJMO~`dt#+amOv(*CS zP{mrndWg?Pz^1LAgcN9n)Y&TV)b2bB*=EP?>;~)w>^tBPz3TNkAD$n#`~6Pe!Rx+1 z>Kr>PzCP+Sy6uybx9{5hZo8LG8bAH)Or3xHLjhO$s?Uv0z5GnU{nL4!IQnjk6`|*+soO30HX|16mQh1FeZYzs&5Hs9SWeH}r zT7s8CT5M^H!{*n4j+*gxkp80qR8lt@)sJ&kiVgryZ(mxB2@0$js{v+I-buRr>VbiU?+4# zuFykz>`29~>b?JzltxNQLwg?MEXb%)-vb_6A?c;RE}{r(Gd`4~`Ty~H#fi@HT>fr<^E z%>a)rpEtIC8&ISdkg#23$DZs4?6Gf84tx%M-dzqNGaY_7I~#m?|M_${91I=e^q(`I z{&6emH`6Rf%!JgaheYX(X?qR`es#O$CoBok2wDEI=SJpSEZOsLbULGTR@H`fwNOZ| za4rQ5b6NxK(B=Uzc_5N(BS>`C_IWN>%Qh-=D;tIb~htX`?nHQt(DlK78ub%&{ C_BHVU diff --git a/twl/bin/de/matthiasmann/twl/MenuManager.class b/twl/bin/de/matthiasmann/twl/MenuManager.class index 331ea24ea9b5e80016deb6490b296e57244b2518..67459d366daf13cc8c32c6facc0d6601c704d060 100644 GIT binary patch delta 2344 zcmY*a3zUpi9RJ;U?6)&}cV_ne2<@gKD{HZJTIaBbY#s*{B8eTWthT|<61EzpQlaAO zwW&NRkD_R`6~#)FXGs#NyeU*xN-XvJe>2wj&Y9o+-}`?*?w#qmOL9Y-F0Nb+ppD9Q zqX%Acp*vnS@QNFDRLSO51GC+T!E3U4-M|}exWbz`A~V;(JU8Mo-%a+L0<THWmnP zp==ikEEaf2;9Y_FqOnA%r6D2T6L?=>nZR;^4+N@3W`)3qvaJ#7BY}_I_yjBEY?W+3 z75GeGwPayAStB9Ty0I3Y%h@`izK|r=yRiXZ3Vh{4s5>?ady^<{7K2*^tnF5j-e%xy z;cXZAR(Lx^{yR5z;(Hf%;Rj*t7RFX#5aO}NjRO2=V6O{B_*q>2BCyZEegg*-prE@2 z0wv|0W6J!&U`epLObxcFdFE#O76(NRnzJ1@t3%a09J^KCARN}{h29Doqx|Fjx#KEI z%W}I7F9}qXR!r>b5032VAEPk{l^VC>4ux!UtUcY#vK!uO^W^-9Mql*1;=GNYtkjAfgPUANm*LVPxj6vfBPHOy)Kjb8!@h47c)CoK!&Q42Qe+itC?cbvL zkHA@he+AA7oENAUxFB#*;6EHUSOcY$O=E(x>w(IloEj!AsTgHw6)TiW0y(6WTO2%w zDO$xTtuYYy7%E;X52I3E<jb|mF0l3@j5SyR(yjYkeHj{)m z9WxA-tW}CiGgP`(87fn&t5hSc8Z$rD1eNBT*tYSbF-EJaMJtOZ%9Um|vd2{`SCu2= zDh+lC_=lF23|Fw1j|(U`f)%63C^&-^{_+ZBb1Hi9Vi`!3=8;O2_OSDJlD44__iT%G z&R$q&%)(k3w6!u%u0HAv!o9@7+)ajqa}6`zlizy?_nEw#yuNUvE!=2_6y(!)0d7P` z6qA!B(r5)ghH@2Z7_D;zNl9Eb(!)_A*3Fro)MjEc#^QIf^tDAh8}vuuK1+6+Cr=HT z zR;rk1sZ^B;T#DWYwuD+@&Ox4s>sXYFo$6IyyHZ2UHNL5#VjhoRIUXh}NQD?oK^ZDY z8F-qUain6g5!YipDHo;d8eG&xT*#SZApz9kL1rO^tiuF`=inVbY-Q%OLTL$CJ(@GK z#3aLW5$5^?U;0F4U=okGlu=Rgt+etznb0^#@^xFLr?D*4qbjWTff zv6+=txFXpRDHqb2>8Fr>BnjPO1)MoG(6xwP#=Q-fdp$R* z+Lt1rMx>1nxqDDHj)*U*T}aeYIdI@Z@5BPuVjS;`(SgUqDN!?r zKbZoxoDdz!(x_Uf1{1v6;cWOMnCp@zu^=6iI}RwOay!P5!y-nP_-ziK^OBxN=95!6+A6#QM3ZLnZDFCt1+#ZF0hXmZ$ICG1GoVPS)L;-(^0g? zF?8lTU&MVczV3baxEE7eu5W8J!Az@2IcVN+1^PyXngD0^1$bnhQ_jIS$8tfQ)JWj{ zU@k~a4s~UWt!vOt`f9f(EYT7?#X{8azMkd_btbA9sZkzSj1;QzPatBmJ6D+!uNd6` zci48<%eKRB##!3_m$uKNxDTbnPnP#e!yeZ41u|`T5k0xKVCUrG%O@|Wd<7inZ@3n5 P{fQ66F6>mPg&F??KGu~v delta 2266 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 delta 2100 zcmZ`)X>b%p7=1l^%x1PX*$p9)iV{o$u@Z~KL;@ikDa+|rmm ze01Ld0PXnJ!6{f%hBmAvTx;XH7}_0#v5xEO2{$+x#(HkNk#LiPn{kUHA8sXVAY=)* z5pE}JB-}yToeu88-JIP++r5PKPF55)(I^VTxR1vBIor(H1B5Mf@*v$kMA%B(!wy_L zQig4Kl(WYOkMqM5geSRtitsd-&ye7gtsVn0pV@T)7XVU8@n~$K~7^21~u~7t1&?OyIj6Uc%QJ3@B#KN z)A$hkH7?=$Qo>cZ+{OWok8se&ry7Uwna1b*@&(~bDz3ye8ecJj!?az^2!_b}TH_lo z2GFNa=WdNvxhrFFHy@p?YPbsZ^e@Q$8O>Q8ZBjr;BUCbZnOQ808Kp92lzPZm4TUaD z7wmSwFY8bG+M0O7{9($JfV${**+B~e?KHD+Y zK}4|JC{!1A`ME_+br|*nMq)`ZTI1E(V%S3?I$k)k<4~#NHR5>fD2{m?bi4>>cuDy6 z%Sr)br3G9!VkBqcERS6*K}#O7(nvN)B-v3SVM8zyY5jthJ6Cs0Lu7SJN3kJJ_KFrm zBYJVR>`Y6UV^II0*~SuCpMyT~-JkV|!ak;J8jDAs^w{Ktprnsvd%xK}Ju$791+SE@ zgd3sSXlOLqyKcWmjVKROR zl)lvuqZ!Nmn`H_)nU_l8LR@6@swx`#i+V>y?^n_L4N3eFs7$3_nMz!2jxvITNw82E zqns=pkvvC6d2>Z;n#zUy@fXJ8??8m(J;kx&ZMms+TJ}o1sX0tno-Iqa~MS&&BbPAgfh7~S(YE)A|!}2vOPb17nnVyBaR7Pn-H=nAT=^vBogsrAx zjOs#->NZ-1NAEaKi)n;mjR^_LdrvJlRe8b^DwMO;RgWlS5LXKWk!U{>9Vmx1eO%I5 VB~%Nm@rjI%2yT<#>Bs4D{{xQ)1C9Uy diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditor.class b/twl/bin/de/matthiasmann/twl/PropertySheet$ComboBoxEditor.class index 551e0f8c5b9131570ad517048bb76967af23024c..c68e04bddb6f548a5aca1c77fc48578445534cb8 100644 GIT binary patch delta 565 zcmXYuOHWf#6otRt+uPgQ9tT*O0wyI~#Fo36bqWznR9Zd zzGKk%h$1FNf+Qx69GLh6{42(Nt7owGx6WGG$;nyH{OoA{__MYF3~(<&J11OHoOC#q zz+xmcr$ZSH?U{tqSV(7+oMSws^GPl+5!#EPTna0f!{AC7Tn$%VbC`6Paws~Kg!q&{ zJ?S6t7ldq~SXyZ=S-WTaIj`>dwQ;XlDb)q1cSuj)gdkdzMZs=(#d=kURZCu_S`Riw ze~pw489EGEx(yYohP~`EcvKy37;bXQFip+DH_UL`Fw2~w&b(nC`;9*Nj-f%#u)w0j z-PN6TBO-3F>=Zg55|u}|@|d(dp-Y~!Ri2TP=Rq=lUtR>iW&p}sW*8W1ftOZMn`L=c1^Pa>=Q&B;#Cm_KJh6ZsnQ_uDjrdtDI2WQruQdDy9T~Hd<~( zr=mwfe|>KLYkNCxDvAB^X-zMAO+N+A3=Pd7CCw}i#hhlI1{zW^D~w;KfIKgh^2NrUL_{J`K{`Gk4eZA0@)xZn;eua4$D)H z$}@A)Uzg`59Td$Uzv#WNdoQgU^IqZ0wrK`cF=jW|%5~7PLq=Y6NZwG8x0L0b83|k7 zd$RJu{0i67UDEQ=Hh{mI!JX^fA6r2b?^P6NiLlZ`l& z7+*}D%2_7*nt`414TB)#I|ebv_Y4Y*9~e{^KTcNQDrNo5z{dDxat^ok!O7ViX^cmJr2b?^P6Ni{lZ`l& z7*9=}%2_6QmVuq|9D^X^1qLz3iwp{kml#wSFHctBDrLROz{YrOat^okBd!m#JFeEh3(+E;+IWUt z8_%&zk#RRAV(y5R&|U~+-M{L9yRIFFjfo}tP42q0dU-fPB`Am@20=S1Q)MPSWP~CK z_p_dSo1}AyP7qT#N7!Zz9VwirUEl(S_*=pSdK8XzCFl_gl9=>f`b4Itk)c&!7#BH( zn+at)%(D1PQA9*cOJ<1-fNXk_j7Bg@3`Pzi7L8(zkSftQAx)x7xJ*_BCNRkg6uUw@ zGZpO%ujsj)VXcl|pAytZ-S??QpBl}6hjIi>;1K%hEG6mKYto5hft=K3{k)$6n!gg2&|^K?NoB(axh{U;$@C{9jHiU=U%NrZqgGK#casA@e_{WLp{l delta 919 zcmZ8g%Tg0j5IuKZH#3=022DgDQ37b35DbU{K0q|!`+-WL3pcKH;lg#k!J40Np;b~U zmM$#Ueu7`&&Yk7yJ5xi7#dP=d^f|Zt^qoKPhj{(hzwbW)EaF*!GOqXtuvUh~x|pj0 zHgK(k>l&L9Zi%^}aZ}@##vP4&yWKH6eQ7twM{y*?A;cjb;9-buJkod^;tZPUJGNz`Z+>Nt^eykd<< zjwtyItKxoxZ9#oB#L`G06lw-#HETH6vf_d=!bwb#iUepdl6E3YGqQmm!x@H-NzURF zT$Y|jGe3KdUZ9rqUhL51&7sMyVsgqa$n>vQAMC5t8mf(o+61lqly-iKJ?ibxl?gmQ z1hot390Vc)@31Lp-cQ;;p})W?gx<=PSwKlG8kQuhER^vvpDW{Y%b7AhI#{4GiZ}F} zoRR+46GNjc8K$aHF({YxhfP1g2M>bELR#odG7FFNFP;|kO= zv|7Q4S~b+!`r?8*#tNPbH<`>PWq+~RB*BbU^Yz8J$jD`9mzcM386)%!&aBbJVNd?F SF2+#eb-j(de2?hwd;Wh=<3T$B diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$LeafNode.class b/twl/bin/de/matthiasmann/twl/PropertySheet$LeafNode.class index 16d636a6b81d77e7d9dd49be3d6590608c9d41ec..d8f8e39e318fea339554f8fb999f93ba9b343b77 100644 GIT binary patch delta 57 zcmV-90LK5F4V?|JM+FV%00sc)01E)=01yD`lT-zr4eS6M0PO%K0PX-Q0PmCj1zHL7 P00{u}01W{3lVJut|FaSM delta 57 zcmV-90LK5F4V?|JM+FVl00sco01E)u01yD!lT-zr4cY)40NVg20Nem80Ns=R1zHK= P00{u%01W`+lVJut>a7tq diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$ListNode.class b/twl/bin/de/matthiasmann/twl/PropertySheet$ListNode.class index 392d248d5e183e338c744605e1a54d320cb851ce..9b111fcb603db77aaedf0ef70eab0c2e676c310b 100644 GIT binary patch delta 62 zcmbOrFhO9$1~$Rp46F=)7`Pe!GAJ_qXV73|n0$~ekBO0KvLU+%8zU(M()XH*j)hbvkgE1 delta 62 zcmV-E0Kxx|5ReeCum%z700jW*01E)?03iVF04Mff$?3=9lL3?l3d{Ok-u69v*F`3mxjGfOh_^TIPz(o;(q8Q3*Efj~2A uVu=c)@Wh!@8CfUmGb$*tFfwp4a07KSG4Oy%UIsxR&Bee7gnSGFY@7h%8WN@e delta 72 zcmeBSe#sff$?3=9lL3_|P-yzC4D69v*HPE=wMWMnXyEX$}k@kSvd%VaM`1t|t5 Y1}>mNCI)T>ejv@ozzBpq418>y09=9#@c;k- diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyListCellRenderer.class b/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyListCellRenderer.class index 4d0ed16eaa4822a1556218ac08135e1468de7587..b5071b40756c8a43ae09aef7734f3fc607b8db04 100644 GIT binary patch delta 1049 zcmYL{$x;(x6otP(>7-3)6_6HV7z7+b08v0t91sUI4mhBqI7UT8nZ$^SLvSp&RzHGU z7f#h$E-W{?uw3{m`T&;qwyChlz30y7{OM=zcQ^mz@8>T-8_#1T*d1p%eKvdIgxRZ^ zjLkj`_Q#2GKr;sw^=s}>T*AYOj;J}RWoKQ3nV~~?^PBEnWPurZ)^jVwp zVVmsR2fvNE z>sWSTq;()SJvt%F=a{m2Wa!qTUXPWs9vj*uaJ@O}Pg%*$;au;n+~mOM?6AQ~4S5rh zKj!KCY&34HXNC@MD%#<_ve$PdL^Sd?3l5g6Hk92BEOhVNdSEupM`IwDa1;#HP~RviJK+3rh+xbrPVB@+f=gKEMt}QII>=r zvYJNmhBQrugU#Z#7K*%98*Gef#w5wlkA{k)&9oFoe+pMQO~2AgR{1O%R8;L+K8pv_ zKBb*eC7yJn7o=LI)mXUNjb8plxi&2c`hDzoRJaizSI6HJY1HHcWwoMgg(#~dY3fOt z22r+>j9C>Z+xwqFfu4|IEv zN`yQ@DOuH$us*U>$+vu^(r4NH+b`0srjeLQQ(>9{M!Ho7i;P^lWxu|$%Vt5!$Yl## z14b^}=n+O1+vzP_&q#-I%$fO1|NoP0T;swKw;6jLz18VByUwLTF6AicI2BRIty~TXxkZPRk|N114h=t`dB?vn zjWC<>!DI#>{1adB3yigPDf7;(^{o4|*89zU;pV^p`S=My8Z#lpu-`!(2W%X45Wpev zblT_=p*yyuy znK1wS7g0`68ea{!R<{K@3ahYMVGXVj61vn#IAUB?NFb@_0#$^;lJ$*Z4Ib=Q~Wb~|+(O>Mw zmKd)HzC=XmGKvUEARGp7#dZ+H+}Ei}*BbbMQb~&V`5x>ySmg#i zM5X-o^4u!eJXi4+MZ85Zl2n3P3Zs=u(M1uTPp9M{>u-{0#IPP){1vijU?dmIVk@J7 zj~W@7K1yR7UpUD!!#-J(|5&qH;tj zAM+_?7Au#I%RR7z`^!;Xv@#M#E_Py<&&Wj^e}u_zH})(|Z{iHeqLoRDe~|PClr09A p2N3phGeV<*4!?3AYFJlu&loOZBjaXVLJQk**8OZxA&+~A{{`(3b%g)` diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyNode.class b/twl/bin/de/matthiasmann/twl/PropertySheet$PropertyNode.class index baab99ff0052d3cf0fb24d4e8f571e8ad8ac0e0e..8dfc31b235b3d9dca387b198061a214dd11b1e5a 100644 GIT binary patch delta 55 zcmZ3)vxsNIZ5G}g46F=08MqjBF$gm3p8SHPfORjBw{LPRs}1Wx1{Q`xljpHIvL0dJ LWH>tc39B6d*v1h3 delta 55 zcmZ3)vxsNIZ5G~T46F>x8Mqi$FbFcNocw~NfOR#Hw`OuIs}1XV1{Q`5ljpHIvTkDF LWY|3U39B6d#u5-o diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$StringEditor.class b/twl/bin/de/matthiasmann/twl/PropertySheet$StringEditor.class index f8be046c09d42fb07a6aeb130c144883ba6bc9a4..7e4caf70fb0cc7fe4e8eab8686ffcf507bb8d66a 100644 GIT binary patch delta 589 zcmXYuZ*L4y6vm%3yEAuZT!P&dDM`1Bw9@JdO{4y`iltQjS+-QsVaDuiXLo3)T7vbT zYDDC|_6;PBc;|%=;CuK4-ikPP>n8Vke&;#o-uvRd-TXP*`uX?!4*>hnaFD~OjVz7} zoN$m@D^6-EI~y2xOAYsHD>gNo)3 zv9azxa7&Tf3`&(`E^G!8A?gyd=og3x{pwRXr&g)s+wWAtpp42{<$N7!nuSdfa@4?f zYN9}~ime&CuQrLi`ek*S3C}EWHDWFzLrbbE4$vd@Q7m^ohDlE#=_$6-GxX4N?4?)O zPcJY)FELDS)KKPi>m9PRjBWHDy|jWZ{w4`x?L!f}*a-)5h_#dXGP}ucq`qiHfz{H} z^r3xnV6FTAq@Fm8LEUFM!eq4RC{wCU!x-#Cn&Xjnc?>(*JGhzUr*YK$#}00~evn4pvh13u+LDMb;~LIKgjgZC(fwwO|!5(mcM z^o||*1Bh|vfQd7Il<{7j?7hx9v;8&w`S!){KR>U5M^t<=Onao6Q9Sl(`+v+jn)9um zceK#X6P`L+bd-0rq$v2@VA+{xisw$QxOkyhQ@m8XQWOO*3ahPrHL8U|-%1$e>cRJm z)7Z^|;5VbQs8tGT=aCs{D-Lc@(o8U<*`%b{(roiav%_1>JIb0}%0kv$#j+1Idrk-J z3%8Dg4?(ULG%C4bt66PSGzWy5h+)N{Fl;`?Gv-RVe+tUneSL9E*p4KA|sph z$`<{yZN4SN| zb!O$gsi!_IH%ZGGJW+?ywK&}RV delta 19 acmbQuHJfWgCJSTv&a7SqcC@9tKSS diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet$TreeGenerator.class b/twl/bin/de/matthiasmann/twl/PropertySheet$TreeGenerator.class index 8fc0a04e05c6bebc06e3a6399902dc03e7acff6e..6f672be7b32622fe0536e4a9fd858e13d5ee772a 100644 GIT binary patch delta 83 zcmZ1{uufouD;w__22O^v415gd7=#(lPYz;>L47V6886HeN$DRNHY8O}{U$DRNHv}hLs diff --git a/twl/bin/de/matthiasmann/twl/PropertySheet.class b/twl/bin/de/matthiasmann/twl/PropertySheet.class index f378b7c1f5282a372ae937e8bec0f3e36eea48c5..1b2e46970076a2220397da7449b020c3e3751908 100644 GIT binary patch delta 234 zcmWNLJxfAi7(kDZn3`t7^=g(w&>$@l$^}atf+&Ip!3$RQ0S!uFgCY$nTn&o+hjcr9L@x=}ZV-Zlve? zij-BSqP9ES+@tY8fGYDmvcwY+Y8X7TN`n|p612$iDnxvdi?8Gzk6w|)t@3C^zAdla4CMwzWbgz-?zWL&)(!}&yR)j?Du1dVBQz= zfsGG?$iyKr17Z$~85GnJ*>F_MF?s#S#>f7t*ce0v2W9mWSsfA?$8DSlqF4x;@Tr)S zVvcwB&ryfE|JG=7%<7K*n- z%r9uu_!Yk?R64y@sdK`s^EK|oDveg0(Ksu>-|>e=J05m^uSTr^AFBxoEP2;XtQxqV}vgXva$_NXr<)U663)ZTY0teDce?ltpX~ju~z;` z6{BhJ2)1ZEj~yD_*kP+Qt-AmR8v+N2^IjzX!VF<2UidFxm)DBQr~w{RnWtdj9rMDt|9_=MDvHq5;&IPFbN zN804h zO_T>Jo$i{rFsC~`TsEd-_Jlfk4x+>PHvO_D*&Al^!1WB@$nbL+ejaks>4(gn@Q6r1swDY&dXo=njPb&f4!t_2A}$XeD_ z&MFis*b84leSA0}Mcq$P$#5|=T z5}DaDTbt2kGV98&zE0|sMg714f;dcn5HTDztYPASl4Ld|cm~^v6fPcqjPA4XzTKHq z=$e=zS7mhqt?=ALTR)p%t5>eQxWJrfod}HIFQ=IL=M?#cOI&JFTq<6`i$r+Q@^;IbS_wk%Q|=)WFZoU**5?1B${LAxVmj*OXFL9y1x?2hNgrg1qwO z5}i&;ZX+eOe0j6#njO(wC%{G-*p((zIzot)jLC>S%|}4x$!l*(su;QA7$wcC-|zf(urw zrq6}Cvg1+}ETGmA|DcXIF29}ew>kql;~zzq`kkAl4{c_0-g!6oJLfy!J@=%ywzqcC z=}QAA0gPAi0A^yZjeP-F*zd;-91wHR#vvaT1dxlv^8R*!<{k0g^Yy2v|%@c2-nBS0ay6pPm6}Vq;XEe^r*5C1m#wtAG{AAbr7i+X*i^7%8xImFp z>kD@(K;tj`t?`cwrV_!ZjBevZL1Ml1y#Pra^X4cKCuq7s*nJ}OsER9DpW;UjT93h zS{17jTaD5xs!FwrVT)E};+3OEVT`Heh$p{)j6d$Fr&v&!!=tw_mtP8GeClVO)QV4t zgtQUvrTnyaI2|KKcP`;t5IMBt;l%`mP=`CsK8rStyKpz3;w{BJL@C^hgrK=rW8MMp z*kkbaalwLw%jGg~qY0yp?@fnMVD)M6S|+vN#DZ1L0*Vp_OoRuM$Y%-)F_mjKqZ|z` zKJhG{xbz1@Eh8!iDoFQ%6fq|mj8qNrxMf%#JPYCBd>_1KhU|^7c;I%XZ)EzJOg{_7 zXmX`4$)+wb5?_{@4Pe4GjB6-{p@PCwh-%>L^B|l~q}MMzNBf zoXg~F;>ptY#4d9xLxuJ#w3#>)LlYQhO(by zJu6&IejVY`>Y=`JM-eWUiOCCVfTzMW4MU{1!NztH+DU1iAgQNZ;+CgL2>}nRsI)0B zp@~vgu$1YYf~rnQKZOKCY_n}_<{U=5fidS36Js-X(vvP|%9hxKM~&dJ_E@$=FVuOq zh#3u%f{+!|Rn96DE!_uiXm` z;W<1{lt*T!LH}G-?V3*CFv@8j)3+|PyNfdDBzgqRtP}VY3B6-aVB%3asp%yDSHKTU z^rMS>W>My8tPSx)woI7eT^OKhViOvlSS9GjD|4zJMj@kU-{ z?v@|byuWgny(nQ5NgG+Xg11fDC`1NL>NbNVJ6G|UYjf)5< lbq?1N`DUi}%fxH^uXty;_3Zz|%M*p)VoVEroO8t${{mBfFOC2J diff --git a/twl/bin/de/matthiasmann/twl/ResizableFrame.class b/twl/bin/de/matthiasmann/twl/ResizableFrame.class index c85b1671462fb246bc20d4bd30827d73f1111f55..d5a1468df66d3d76dc8c08c96406cdeb2181e6ac 100644 GIT binary patch literal 16775 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 delta 7930 zcmbVR2Y8g#(w>>!&6a#55R#A{0s)c@3894+a)Wdcq)8KjKthuu5Crw=Dn(H2p9ld| zKmiL%CcMY!*rP1)gZ?(eASfHY#{d$5yKv&#Szf!nvF`d*~;{Td+OA zTRrr%(%I&rUldn(=vT#+9{OGJb`Slbc!!66(_Jrk=&bf%^w0&xJ3aKL;$0p(t@FD* z^sR@!^U(Jm`awn5Cn-`9@oySgI6D`CA?PPQCTLf)Cvc zE6n2`J#Mj0Rj09WUQov0v}Ke;oE+ve%HVe$GdlmF zEz>=#v!H*N&-?fS|LNt6d`V|vxl$pYum~o^feCS9ow&3c<_iG2weQi*P->odb;hR) z!?k7UY#p75&~Bu5>*`_{&N?_j$^Ao;22pbdNOg(c9A0EzR7L!9+|} z?`hLYW_F!YG;3DLEVpDbdAiLkn$UN8afw^}Omzm9%$js_(by@COS;URG>geMXmFRo z-ADK6(yhB&nq&E((xTFmJ|#CX<=J;QQ??d3zi{~u85ZD@ZD;ykcYyHLUww->ekD`X zl%kua&n`7|OL`SeE1psU&)c@u+s>?Wrh#wV?3uHs&r|`J!h#(pKS=u>I795k5pSn? zrWVZ|I;psHB9j-*UL}(zOf1FfvC~USr%!cDjy*oIXB)Z%^`r%TWYLETKBiAB$)(RM z`jkF{WR|p~Z!9{k-~_#ANh@h>pN!0odY?Y9qzy+|^dtS#lD3j(H>}$z5%jzkoul&> z4^YbOq`gJ|qBBeh_WrPhfF&KUKsrh%i?7B4`V9;@6?7z@V=d{dpn&UI^evsT=sN{J zDEJ;g{>J&16k=AoD7XTE+j5@89k`<j4OGe8WONw-4tb%dcE!I|v zg7GrJl8Fi?X?L<*Z*gZXuw;tb?@9>6*YPNe$M7hol;V;Wc4=&sJvqwf2j{7lOoJn3 zy4+yN47Kn~nPmxLz>?V@!Xp{6onRl2fm^WtMoZ?X<1gx_xe9JlaI=D2ROP=z298#} zhpRNVD!5HSK*8;*QH~{d$b7dfuw>TxJV~#op@NcELHG`8YLGIE6X%umn$e!NmnRXsbCcV zom8KGuHXv=Un=-Y!PfxtsFHe&69FHW)t0PLo&mm{$vM8LxWtmR@`Qc7{w98M>mAYW zaZFX-^(&f+ymL>VSv+Z4(G+`HY@^7C2_>a{r_Y{M($!?<*85_!INXWBE=-P$%q#4d z8a&SHwvLTUcgA|F*A7E!R=0=S3zCN0>B-{~!*!@8cdcMAn7;PHEkFc7{`Ud$WeolrUoNP z4aVtWF!I%4q^!XRT&hEqg{a1&~AYl z#V-Fg@|B~3D-JNs3k3&3b0Mbjd)FBTRdimBR% zmT?HP52Fs^Xb=f!NcKPEaQsz{yDuw89gc7sLC!YJg|7az)PRZ`WSd&UHdW7etW&m5 zl88vOBf0Kn_&PUYNvQtIFUz+cM^$YufQH6e{=^D$Zl(^^+kIwu9Za%5#1vsQGKFz{ zxD=MxQ$>l{+$ghEt>K>zVH_9SW#o5}#1`td7>+gDMm8D@)i*cF%BfYoYYm&O+<@b- zuFB%@HOE(N^fhkLqtG~k;2)!?sOc60J&H#ZI0Jlcfoq08=0x$N#{A-m1yBbVKb``PF?D}5O3 zd?dZG39*KVUoT~GLryb}?pb4|p4>Oom_#Gq!;tRzJ1D$w z^F0NQJZFqEc`bEp9^-7)(G~C7MlB9dA~L^DysMIOv&_f~)KX~B28yT|=Rpgcyy4OT ze^yj0`$Us7#@k~l4$^&vbo-i8P$uP}Zs~%4PgE^~Q5qHD?3;!Xs(%~YvLWp-_F^U#Ig;?0yk2B5%g}QRq z5N-~$yQz?~aR55VN1ZtbEgVCfU+oICT5xWaD-tN|BKh3hlKBEa z!=d#RXoXQ@>WLj1me~l)ZaU~haS#b|=do}KWq_zo&!k4&)65dBsWHkb?u9XYNYOIx zjTSs;AIwU1qvSOz{g4&lTzhKs$svmM2lD|G#RDmg2T@DD1|kfhems<}<6$(OheM$e zG@q}fC43z%uad}1$Dp`M6h#N2J|vn$fd^|{!kh;NW&Dq9gOUYvacDa4h?3=WODQM6v0!d zDNjdQ&oJDBl}fiDcSAIW9051?zl4oAJDcd)*&j8EQ$Mo|*_@o$j4^spJq(nBt!3ppD$782g^}0EgQ}znv`EfUCC!P=HV%r1LnvBRW_9x5s`Uq3G;go# zgNM#?NMDBdTp6+_F+>W~O$ksM-&98RtlX(a^`^Lvh#yCQuf|*18k{R@5erX1{neDm z>!}-Wz@tyFs!;#NVTHz{6KUJR#G{~e^P70oG#gnZri+FKdh%OC8A z*4*qHN$fXUX9kw;pyK=mg3IcYM7`i0rkD*%^&)a+kTmr;ygsi+7_2sD(( zc6z3aT+WSH`fROoRYD?bVi5MJaoK4ehr5WWF7Bcdl+l9Q z^6xwzg`WedGz0h3#Hx#?0eK?|kr0hJAp*?$_e4qO=1DER@bP5aDklA8Joaf>(l!wx zv~exDo$!gHKzq-vsp{o9lhA#>dNR+Y-A%TuLweuxGKzwcoMq(RLUYUEpzH~`B6RnnF+s;{lYq)OUqwz zqwRJ@hqS9kCm&`Qamb&^R>OLICP*#W!+=h8cP{5&D8 z=mTj(Ur1Z}T2S6g2l`Pu(y!8qewWU40k4%Lh3u3o*ehK*Lb`F3^xy{4lM|&kr%E4A z$6I2C^y6&2AGVYM#_PR;KB@LPYTYTCM(QV?O4)koM&OHR8Unz9GBysy!6!(i=IrGg z&~i~HI>$563PWkco!SKOR92PLuVJ0OMf5`uujvf1w!oiMLA(6P6|~zA$BwU{J&Gq) z&|byMDrleLzj$m>I1Ew|`{J7Ogt|6BU!EXV>C{l(~bU;Q>l3Yva zG7<*Aj@rm*Dv&WoSAS5PYF&{s!3cLzZ=*GSQa~zAh5in6!y)ZlqComMz9x>~gu4*2``5tORJkEW}S9cj9-7MTp2H z^t0SU=kTKHz=LW8UQ*NWklIEb=i<1K%Oac3p2?sL=;_2ntlL8yLF zWu79uL!pG#nm>Y1VRnwr25?}uErR*u>(LnwRiE@fOIEX((dYnSNGKxPy$_zb)&??4H zcDG_M+yqxgvMy0Rc~C^V`8FJp=9G-QM19B#9Se?UWSpm~!t;X&(TK-kjYd1OFe&_i zmK{m@X7H-rzpzVf2`W4BqOps@WjDph9!izHlqvhDt-K5ezd}RgfU%=~(-TU|;B%z5 zRCKKzh8lJB>K_Uv)D+rM9rP(<0IGI;L>X<&=W<&VLZJwA5;axqsvHsXm|HKfd?%yH5A@T<`OK-m-CP#}%(TzNl10 zQgwtcnHcIz6nSBpkNmKc!@`n_;j~5&HxLB|H->Q&ZuTXNLV8A0j-qvo!DyaE2Dkc> zfZLdJJ8=gakMU$4&#}Zf-gjp)d6&U>Pd50{5EH2HW)ByMVj^)5<-H8tN8HbT4-k`x z2Z@K6_b@Tp;1OS1@#;)GN<2nPVUMY_9;Y?U#}f#AOfSZhj(E!8X0pe?J`yd0~`1sbX z+*#l8ngg`H=M6Qjy8J-rkL>jm>wb>NR2-r_O#I@b0>64V;>$w(=HYh_l^*`^@TZ3= zgTI1~F+K2iFg_*)$4X|zG!5Z+urj<{Q5{V3r^JqSZ%s*q$PqwFZ0&hKX;2zBJr)MX zg8tE-5tWTrHaKWZFgu!7FV<>Ejg@`sSy?5kt%lVE712H^zSW3YtF`5b)i@%m@fOX{ z+{$4&Xf+`i65qUgywyb6Z>3DuTC{YQ)^S1EF59fubrK!ut0$FK>l3F*mDL7v)M^st z=~5ZYOiW2nwc1dVEow^AkZxtKtgsls*1KhoLABLJ+SuqBR-15`Go^}!jnb^9xG^z^ zna6n7SwvGg1Zf;ht5rA1tse>|n%H1MLhGJq^UjcLG}_E+b3MnR2|X={Ft^fDTUl*Q z*@kFKoU7+qZ6_60Qz_GeLkYb@=~mCz_CaQ1Yp;WLr05ikPRtHnpcz&>2W5#FoieR< zL7dU9R zGOL#}zYlQ*<(1s)RZ<0M@t^V~b!_p~+SkfbS!@(muhDEPrLx$f9~X5kpR1n(`XbKi zb(H6U z8q=+)&?&8wpp(ngMroV&mhJi*}bDVH0VRMB>&^olg|H5 z6v3ciWJV4K2kSE?n_SmSF(k<8+^%b(v-xR%@{m@i&V*CvLL8Mvk_7%VBO&*fB4MqS NmE?ZBtM&S*G8i7g2o#4B!AN>WQQl1J7K0Lww;J3QN(ydg z&K<;P7QQo(*&IuWFlkO$%qr9Ji2Z#q*Z#?l3@i6fS z^Cl3F8ax(CCYR2|q%Nqg>aZ0;^{b^@x-$R&xMlhXL<2F(_WzUBJmQ- zzHBgs6Q?rviovu{@=(agbb4N8%Ui3z#9y_$-vBr%)(otmv1xr4)Jan z_c`w|{62BYIg1hBrwC>ld=Q{4lzjFjh7Vcsqd>MtF$W)WJ97is!LdA$bq4e3pC8DE zKsE-lm1+T_3j<_vtT0#0#g|;~s}MV}i`LileZw7o%arek-NYVt`+Ej{2=SwDxwn4e zGP`O0%oR?RYPXlpeXR8h=k1TmBpjgpl{gsUHyjG^dno1jBf#MRe+Kv~z>xrd8~o#1 zC3M13H#Q*y$IGTBG)Tk=w=}X?RowV+VwDpAYRYOx4*@8%)n)^WTt(7kqej)>xa%3~ z98Hk5R@QiE6*nW+Jgutr(ZI@1jaXSG%dLhQxc#y28BwcNt65EwLsnx%vZh!xLSrij zWRKNU*EhLw#}up8WtWxJQfbk|TUx^hWs7XKn&u^1(sza&wt6N}Q;t|om!no|QP!5j zZc1uKVwTl9TGt&&u2nYcM)Rz8;KYtZClA@=8-Uhq#Wq=D z^%4d;6J7j?*QaK+3Zl~%hm=_=xC%4^uKYkddSrPX!gOjTE2 z-Nt+9bygP2e1EZ4^R=gy3Yl-wi|y#eQ(W(X9!Rprtip}6ctAllj>sDhFW-J$H<>y2 z?!D)C?(d#+?z#87d+Xg>N1nd$&?7|Dr&fgNeqJA;dwD~Ie!^p6^fp>N9-)x)V?stY zSv(n`uru-zi?7%@GR_M-cMS2torgyG89T^#@Zq_y@Ihvp8xEvHJUMr5VI)|#Pt&t> zM8tEN=4c;N+-7TeZ0#4fZM*drP5WtH(*c^dcj?xG1^NY3z5TUVtxop>!$&l~Nc-$_ zdV2Lk^h?bzbD^e_{EEe|YCcBCG#}^JG@sy;nx3LrO;3yX0|dX$Z)ko~^nXnU?b+gV z)hT{Q)8q7nrYGsQ7N64e7dqyyH<0er^r{#f5TehBnZMIJn!C7L^DxGEk>8cEe`xxv zsQjL0?ctL3iD&sG&1blfN#Aze)RwDmx^qi%RTAtE)9>u>mo)VPdXX+_MO>g2i%?vu zRe&orS8|o+8m_WbP^*wC&}?y`eY#|I{183H6y0|Fb=QAk{ASqQeACp8+cf=#9<#@z z>6y2*iV#GR2rZ&mm1q@}UQEO?5v3x^L@bBkX0EkVxmFdbQq#lqD@#>rRgF!nIQ+yd zT&q{t!NUu{i-z6S=7eaO8C-=zDGvd(mP@(^dxBz$2-_YYh5g!sU1fhCF^dhijs!s-2 zh&ZkKHD5+=&3!fYcHzu!nkA;6BexYjNO9WZ`@NS+B?U28DtTvGq@HP!dZtC1p;h7@ z(_+`A#r8~#WHK${V_F2nw8$%I*Gg`g0i>g8k&&iFI+zxDV_GDsX_0DZyFnU91oDq| zd%U{+d5lFsgXrUA(be=P^fYFP3hB@E0$R~OBKmW;#>33d+h4Ak*(hpB3PAqbRg<3V znW-PS|02jKI*R!+QWs%6V9`q!y=>7dM3qp&5fGd9NFqI$>Gwdh2d1@884&b zFveIV8FP_AIZg(-n5e!nyXLpC@4NEu`!zZt`q+ecO?(o{ z?4#g==qM5c1!i!k4;=EGc9LEfuzg!?MN3xqyLolrpf`=~?%HeM--5dC8S$^6{AIM&TV#v>N;Aa@{bKISGT@)D?yaut9B(O3y!Fd`S-s9n&iajyE;1B^9QO2wrRG6T#!ews6%|nrEn+NS zc4m<}Pkn4b1&7xd++RO1CN3;BrXC02393RiG@=S;9hLHyNYOvd65^;Jsj4unoTh&n zTRq8dg4{y#s_O;$X$nJ5d&p^22#4G>y@#H-WSY(zaxuDr-bXJ;3Hl_GeHKAzqATe? z=oQdPT1_9IXVDrOqI2jK(oy@ChKd=K8(A5a{1IA}8==#ABZM-Q2b|6YpUn$Kc_UVc zNT^XFvbnLv!BzDG4(}0%@eGJilr=5qVyfX1s^^$5x=AlaNx6W*!;Nk<3Y&qvj8eIb%5oSL zoBGBn++$KMuK<@xfLMrxSZYFUu-D}hsmmea@W7RP zjf>uZC`j@}GBx{YUFHA{Wlv;@)Lm`_y%b(bX&<$SM=c_+0@z|W)+u@qr(4YC9CQnn za4VH_n~z9^i)I7@iDPy#iM6E4M^N~xYZCJ`k>z1319yN!r?KMXm5&1#xp@^qSdmu} z{bHBS)~00k?%`h0>GM&EdQ?grhuR04>at}N*R`Bp=bkF|bfd2B`Ac+H=GBe4x}(i? z#x16l^Xk01%ed5a$EX{YFx*kpK2KNVdSjFdd95+x)XA_HkuaC>aubnqu5iuu$#0s$ zT`TtH>7zMU3$OR_S-Ovd@|bfCjJbS@GVKTGV;L~IGRw$`^aS!`6GeE^$EwIy!tW0zmZT^c9dgM|A~efQ=s8zJ8HFy; zFzV0;)QZcZSz3_5t5ZmT*bcG}w~c~HaVFK3-Nm4{!l1i?>;flu0BAf)%@#hJxg5YB zWK!K(V5bM{^Z{|TRO1T9E459KbBmch@;utr@qqE1x%l{=B`Dv+8E%K-kLUspja+Q z9K5St6G8;?PYirRnoom WQ;O03Xdf7<#*5GS)ArfHy8i(fl;?Q> delta 4136 zcmZu!X>gTS8GhcAd-;-^b8`bB`z71WLT>iWKm#Q~AQ0kGI(F)AhoQ7em+2tYj+pU> zIx^Fa%vXOnqfYCL)h@w8N~mq^g0{6(ORY-jik5C_fr^xBLGXFc_vPM8nq=mjbI*C7 z_dMs_&iQWLa_g4i1Lq!i7(lOCQh>W;RSb8?>KJ}5YYI3T^<-@f(cs5Aof-3FeGCP` z%(y2X+c~^W_U+s;D39*kKO)cg5xG$gOnpNhld0jnhN!Hc+L#}UluTJ1#35~-wb+9x zL6!fl;)NwEzq)nnb=O+lhrJfl*egisy#Jt`pSKV9`v+}9TmS;)c`Ju8<)5+Jmj4P5 zSb0f2i=*N^kYgUfR>lVMmq{UO({DFic>vURGs&%Jdmk@prsqr9(QcT*Ns!A@AzkKP>*LBEQF^KUB0j zc~D-oa!Ndbz5a^Ln=ZZjrcHIr>Ut~=;A#IyMNK_~p2s^X8zb|r$&*qmWm0aX zO3FPGu_kKfS(zuEf3j$K)nnK%NNl~~ij7}ccMbJ!xO($dTP=Qr{r>y+6j_tdQL#4jwOOD|i8c$_NRuQzQ)*3_DYtkK4|%4-no1tpRMAG#EJ!?Ey z->DWn!Nzp)r*!Ghf2%>yPy}bS`5(=Nw>Xl1Z3eXY2piL_O%I(~VtRFQP@9vc&&pD~ zJ@w7vck(Ch!6XE`7}^HEL>2DM`MnzpGzPi0Km*V9j6K&g=v>bbV{glstpuhh756AVSyGa6mbaBw~2#`O$P*E7`Ecab!6gzX>wwyMgu=QtN5 z4d7Goa2fu@k>x6ok3Zut>{b4d%1>QaRUq=5|MlvLwJKJJJhuM{#dM@+7W9$f^CV|* znCm4l=czl-!wVi>^zaf;P9dg%>hy<`jRRQ@-=@L7<2aN#P9+)TC3ux8h5yVWhx}o( zJ_q?dB(Ng~S)4%@hscPglS7_JR$i6e^Jbp=mO0P;H@v3uJcL?JZ4yo2hseDg7^s4I zZgOW1IGQoqQM|5T|N2E`Em_$g%qjZ@-gL5)i!P^q=hbvgsC@$yjAjlps`Z3&YSk$6 zlGSnkVDu`KQ@I@b@8Lu)$H_VOWswQNE9grN0xw-1na04-?hHN%j@>-#9;YK<Tv>|Km|*11501lP^ruoDZJ~pP(wvvDhjCOUpVP>b=Q5DF+x}kRy3FBoCrQB0TknoxN%{k(yaV0v^1QFAvdc=mibF zSh{*IR;Bl0Fq@G@T6d*^^iq5%HRe!@WvIpURX|-L`C-v}sIkQzE{s)4xgF(IHHfaP{C-(r!d{N51&kv(Ir_%fv3k9C+iWD@f=o#8CHc-A@NFTi|Ff6 zwfbLf`5KGG(Uw$Cwzh8005%h#@|u0~V9sE;iP&mMI_%)$r-+r-^{&utU=3W4N?Anb zN15kiQo~UMKjB=ho4bZ{b#4xP76tDOj-;O9EyPSQ#I+#Bu#15{b48ROdJaRZBp+Zg zFN^Cy0XBI z46q{y$g8C?&X8_lCUM`X6Y1UhJi5L8Zf7}n@yTs7P`OQ7B~8Jf;+(X(i*FB(Gkx5t z{Oui09zOvbg*!VwOFhxft{e}H&FH~cc;N;fh*T#MmgRuYTZi4$c?+?pItRyeSAC2{GL+(XWjivvbZE-W)WIV zZ4Pcp&bIVjD?Px6d#GStw#Jzzf}2sv&x9=JSzt!8KKK<(uG#x}8sDE)viUiY)slJT z>4(9EVE=_4n=MqPZw^#MmV`#Ky_znEdiz?lx@Xcrt(vb1_N6n}K*RFG!=16W@AEkZ z8s!<+qRouu>@$9$f!bj7yHdeZPxf_ah`!hV#ZT*wnxM;3Aw#l^X^_NCEP$GBH=t22 zc7eG+vwAyMSGd*pxjO7t!JG+_Hpc2U!Z{WOe{!I%btSbM`6%vWe-R%=<+uaCKr!xO RfA?@DBPjUm_D>Jg{2$IR=&}F+ diff --git a/twl/bin/de/matthiasmann/twl/SplitPane$Direction$1.class b/twl/bin/de/matthiasmann/twl/SplitPane$Direction$1.class index 7e8fe2e78439a8a7fdc4f8a4413c9b25fef48fa3..0931582827b8e9e747ea9526c1ed695dca4084be 100644 GIT binary patch delta 233 zcmX@Waezbq)W2Q(7#J9g81%RpSQ+HG7!(*3L4*=JgEBjV>O}c$1x}aDqSWM)%=|n? z1|HA6ywoD+oW$bd)M7>k21W*LpUDduH8&nNVBE~iq`)Z54>XN|fs;XiL6CtN$P!`@ zo@~Z!C<_s1Vh~{v1?pm8U}6vhvY3D@aR!OWEzBlRovaL!3{qef(m?Uk%qETyoiK4` q1{tt!Sq3>E%>r~Z0|PG*O95?TWl&+@ap44t0)YbugBpltU;qG`vm7J< delta 228 zcmX@Waezbq)W2Q(7#J9g81%RpSQ+HF7~~lgK!hSYgAzM~%0&5WVFpG99?!hI)FS7c z#Ny)AVnzn-$@)z4lTR~pZ@g^4$jr#Vx%n5PCZjMP&>#i|P6mDk0S0CuOOQcmvKh0X zEJU1%L6|`VXchwl6N4y_#RO!DF^ErYVK#y4WMz7O}c$1x}aDqSWM)%=|n? z1|HA6ywoD+oW$bd)M7>k21W*LpUDduH8&nNVBE~iq{Jx94>XN|fs;XiL6CtN$P!`@ zo@~KvC<_s1Vh~{v1?pm8U}6vhvY3D@aR!OWZOkT6ovaL!3{qef(m?UE%qETyoiK4` q1{tt!Sq3>E%>r~Z0|PG*O95?TWl&+@ap44t0)YbugBpltU;qH2!5lCE delta 228 zcmXwzyOIH65QV>ge#*?SE<0HF!CHwbx0*mmk$4P&h!X6)gIvv%D4AdbAtmxQ8z}7- zbf43w`kd~Ac`)7Mb^izSY1@RU*tk^htrnpkp|Non4vN@xwVMBqmowj=`-)c3G2Gy! zqT5SXX@#}>S1sklB?v4MB+%#PR6(wV1R0v5ee*N1Xx?YI0p`9MEdT%j diff --git a/twl/bin/de/matthiasmann/twl/SplitPane$Direction.class b/twl/bin/de/matthiasmann/twl/SplitPane$Direction.class index 1fd16ed2c1879c184b0c8221defa1c774c4f26cf..44c9f122ddf3295d4df89f9fbada4fec0d920286 100644 GIT binary patch delta 608 zcmYk4%}!cT6otQYFL2L=n=47Hh#)FjDJb?&``-xS4_I4L(~+~rkjA9JM4UO`6-@36 z@CptZU!$+kN#CFYXWjb}tCO?N-fN$=);T$&a1>q^zR!AWrFlS0mu;UUJ0821oMkVK z&j)R_Jvx@WWj{?gZhiDPF!sct4?9QQ&tIDd zSHl|mN>Ri3(H}RT$}xSvwVKGed8VV? z#ILGQ(8wb-kk!)yGb$~$mEKsN%$b1%J4|_ zaAdwB>%8pSxFmFt85QM*(u|3aY%dx~iHnxFau)!b*3ID^p`X-y#aV)QyW%zCC%+m$2HBhId(R_2_5bCjsOKpmnR0v< zEEmW5m1l~hJR^*HG~&O0MOP*={S3X9QQS%m2Ez=+yQznUAZU-E8YtRLrBS0*?c{Qd z3Le#XJ6#&6sh3d&bs^(SB*>q1`TQ+1DLkJ{<#=y=__9@3tm@n)AY~KH+43D>vvrHR zNoHz_1);Dll{Ps#7}ua~8sl{0(N5+vU`Ab^hRB-d%wnu_w30k;xrk&J&7uZR1gDjq zWLtN5uaeITnbdM`=0(b}Bq>|i@j<8=aePeV?evKi@jAj)){?il$n5;6X{fiyH19-E h(eBS~*Vz#2v#G7n`sB^rnt#DOgaE&8U`Z( diff --git a/twl/bin/de/matthiasmann/twl/TabbedPane$Tab.class b/twl/bin/de/matthiasmann/twl/TabbedPane$Tab.class index 5617798905f376281f530dc671bf6af145876592..5a29d8de33eb4e405543f6ee9534d8d2fbb8d570 100644 GIT binary patch literal 2941 zcma)8O>-1g6g{u!yVIFWhA_bZNelrdGspmnAOi>)1)||Y5`y4o&rF*%^z`6NPeA{N z3x9yJaiLWZs8UO?M~N6fV-QU(dbgo^#&4-TC6d zr=J5jfOj(}U|z*2&Zcl)MGP1C$x9iW!$p-Y3%p(A?IjgUxUAClWffO&mA9{O#;bgJ zjpJVDyEpjmO}^9lQfKf+3e6OZ6y6d@)_acAwgobadVN;jYjd`3bZVB~?HXNy(tOjX zv~-DqCWZDZO`tqR0%&=Y}ekvW&m=Ca{X)L_GEca55ES#`Z} zU0`JXn!c)6EZttNTSq_RWvrfr<-wdzKP&@7ioyP;c4ddK9wd>CgU0x{YOOg{pj z4I@Hn@6=$xJD+>;}aaO+}LDOA7AYQ!6q!O#18G@oyl+N}Gj2CAjEBbb)2*?Ya zh}JG6xdazoG#yrYxES($!ReUxay7aV5e_v2X-haBMEKMsf+t*-7$NGx(fbh^X}c7h z{rV{X^fjUyirO5eD}#JRD@KbHB^+y-ve8WwND1fm3@~w}u^<*02+EDJ%;V|L>%6%8G`^uuX%BJsPgzx`yo-*I=QQ zf~}#A8ycR#-W1-}(7}EUT^!Qjpr>IK$22^SDGfJyJAp|Jw=k#S9h}y126F;akESB9 zGb*S>gJV_B=-t4HT@R0&ZMQ8$x6g7CwQ^Ko;F&-~A>ZGm&k~(uvvVK8G5D>24$jzJ+un$afy10viP^* z(jAC9NR~cCDt;UB*hlm*<^m=;KztJd8kRs6ib+5jIw2@zANJFgnO-DJW;(d_eGD*e zX$>hR=;3(;zeQYp2TgqM;ugFFiObRt;7Nkx3NZ-g{}c{N{0gniIYHRzkLkt}?(zH~ z#53Uwej0~l@_Uk8m6OXK;2^K}k!PNFkm21L)XQvgx_lpnGLauxgC>73uVFBdGKDl* z^CQyYCk%<7F)n_=4)H5?i{DTYzvGDbBP6ft%d5I4@5!T69p6gi4&xa~aaK}Psb+!- zW=nxcm5maAQpLYQ$f}R5;s~mQBXAVQB;Emc52P7y4MPE%XW8E&%hJAO$MLMp5Br_l znEX#DIq>@gPRiutQcRK^%>`}h33-5o_%|dZ=?h8n%hn}6`%q(sHyWd;NGk&&ys$Af zY0PtYK0;W2gD_<%QrIb+mdPC{Y?55f--mlxYuLmx^VB%p_Jb5J%< uY1Cs>b^>{YUPQ`NNZP0@CnqgWs4uu9^&+;?%KI4o_dEvv&-on65dQ%vvurm2 delta 1082 zcmZ{j+fNfg6vn@^y==RTWob)M(9#yQ*ot7Wic|y<#S7k1RJ?)rdt&gp&pwiUH2x17 z6r(XlO(c<+_@KsHO!N=XL?1M2AfB_`wELhBotZOpzHfeW_H-sT8!1lD-hT)nhl@c( z(QBX<>ve1};K4@O=?|h0n+zT{OSnbCtp*0L&ERmmfgRW>;Vx0^mSKnj$a#}D9~N9Mm#q{jYudY(XC^c&}_B&qE^Bi8%pAk zLLKTA4x?G&2#zW=V7|gJjOZ9uIF1tvOOVlVQsER@6i%aE;SA0yoReVz;tJ={t#AQd z3Tx3#NICwYiF@7$WEK7Se3VHEF?eCheOwmEMfS`VfN6pmIX3v0M2fSUtZ)8w>q3r0 z{8-Q<1nDtq=?NC`p5hF!<6<=POaf_Z`t?*!G=4d!r>@)@CpXKdK4{fF#3@VBV#}`U z@nYqwXYkTA6g{`)F=#BA1z)fCgsNlSC;rPnv zIkbz|>Ie)BNp1=OMt_L_y+Sp;Mx5TDiQXbj@6bx`(Mca&T!k`M!7gcu%L^^uz^*Hh zx4l0E8tnHO@)r8U-k)6_M%lx_N~~f9p`)Z^o?g~S1q^Z3WCB$?i!gDuhJ*`{?8h%L6;-G;?N|R#+)iaO`;}~y#q5lg(?R!e2Xvg*tM_c zW&r)@gHAsYqF;#6Z`9ErG}4R=44FJ~XA6KuRmtH<#XHPL&*xKlrW?Bu&0J~n8&lk9{$(Q<*twNoCf^`O?Pw) diff --git a/twl/bin/de/matthiasmann/twl/TabbedPane.class b/twl/bin/de/matthiasmann/twl/TabbedPane.class index ce1e28a562257fc00ae3bf3ef95e0d5aeadccf5e..3068d328213f8b8ff51451a19ca6a1f79c5cae64 100644 GIT binary patch literal 11570 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 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$CellWidgetContainer.class b/twl/bin/de/matthiasmann/twl/TableBase$CellWidgetContainer.class index dc7b296ffe25874f6611f53e570bc4d9e0c1fa28..d11fd5175887c8d49033d3aeae4f2340b58da247 100644 GIT binary patch delta 65 zcmeyt{)2r(GZP=X8UqWvIs+HG1_M94=H!V?=1lB*lTR@@GO-&^=4A%*EPy=u$*Igr SOzgIkJDGtJPLt0t>i_`XiVnU2 delta 65 zcmeyt{)2r(GZP=%bp{r;8w^}*HyQZZZcU!ZWX{BPfAT3NM<%u>lX;neyq7?p{Nz+- TB__6alRKG#5}zlZVb%cvvY-_1 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader$1.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader$1.class index 7402812cf362c24463dde556bfa662bbaca1f6bd..0c7af7eff7d32975dd534a6174c8caac93ec3bdb 100644 GIT binary patch delta 45 zcmbQkHHT|M7c=99$=%GJjF%^01(Me%%d>bg-UgELlRH?nS?@D&usxW(gCzw3bC?gL delta 45 ycmbQkHHT|M7c*ny*Ic@|H`9v~?{xr0TUbpiti+r-H`SW*B?whhVv diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnHeader.class index 329cc810dfa905eec060dee152bb68fcc09a483f..4519f23b9f796bb7989faef4deb92a5fd6bf6d42 100644 GIT binary patch delta 1169 zcmZXU*-u<$6u^IXmha=vd@Lf{uvFSYD=>n{rqs3+3bxusL`4&$qKr>~5#kex#J!8w z(rZgMO#c8MG_`&3!6%+f+w@;BF{wP%s4r^Lfalz~876U(Ip^Ns=jL+rBQsMA3%LakmREmI$1>*}0ez0IRh(CGLF1PkD_nG3;&Qp;3RfMg8u$$Z*Uu(a6 z1{BjuM8mF7S7?n;QGqle))bzU-YK#xc)cXM^tjk6Nr1V9Z|+iUZc}gW&@FZ+UeF*z z?-A|MOP|KcbC+m6OSb=j{Z<}gD9EVM{8|*8ECly65C!iO@0fbGH{95Z{k{;MQnUGu zq*)IUHF>uPp?K|0Gs{F37L56$uW8~Ml5%_>YktR>Kd3W*(qaAzDb2*iqc@_|(a2Lg zEzuqL>=j;&eR7^A?jBHM**~TUhN1-b{GJI-P^J*`x4{1)WBx4y?})%oipYaA0zOax zOH&W174DF7ha>K6sxusYp1UF3O&Tmk+@=Eep@`ccrH=fcJFMJ;jEdCNbjV*<<893~ zT#Gd!Jik*<;HA3MgkC(240fkmhYOwB6xOCGv!!8Bei2nsMNq{d4oj2{E{<0wm}hw| z#GFY_hK+4Qy0Mic?ZeVoH9KuBZMKfA=sue%YP7$A?dJ$bg_4xhV;qk*Bgr@A>c%b4 zTgELf;8`Y0#P7vI(}UuxO*^@d-kTyyZqm3lfbe43M$)#aXb3J!9OESkjqx(uMemSi Zn&flRELty){vKtKwnT}1RTkNU{~rh?iQ)hN delta 1165 zcmZXU>2FM76o;QX%X>RBZ>t(wRh6zvTT7|htGa1zwevwxj8D|k_#`y;eW|PV*7gOF zsML}mBGCvE{tf?x;GCJ8=_DqZ^WL0$e$Uz7+~NG;{Jigf-hBjS@*qMX8>38QlgsAb zyrS{*=!~$99qQW|Wf$=X^Vlt>cg?EaPxYg0dskQdVAGz??(TTEgSX$!^*REXUa@mC z+cxdnb7*f@TfB2u{Gda%cfcJx^wat4#HLVbsiIk(olc=Q7|QG^t8qZR$1G(`wjAe# zrG#Qj5ydViEvGnbIisGlYUWVua?Wy|3zm!OIj@12ESI@rxk|I8g;tlNmR_z|JZdf1 z)%2;kq52-nO>S9oZgaSY8j{n)_Juka6Y_RpxPmQbbT9YJJK$CNP%;qOKysLg58iB=2Jc?Qe2j>RUCz zVn4yJ$gFjmAWI?UiNK$dZ=R)rOMI}EB9h>I0XL+;($sJAgxjFpB|dj=bXsEcN$v~b z4pLxVrf~~X+|fR_KuT@=pWCS1CYr_SYO3U~t8qr=nq14<1U$J@N8p*d)R100ReBY% z^2U))-^(aJkYzq5M9D>r@hgHcETv6UI=CQCmSEahmcU$&ZAvsY5myHGS#~)rjeVii zd}WIHMzx%?&G)oM>r&V{ma{@AVQN^(Dt|MQ{I6Wtpi76#YL_)QE^9L+Ze6PB`4X#5 zTe*+Ub}<=mm@qPco=8M4Bn*Fq1+V@{!plrG(^5a+vwD JRlP{^`v-;yjEMjM diff --git a/twl/bin/de/matthiasmann/twl/TableBase$ColumnSizeSequence.class b/twl/bin/de/matthiasmann/twl/TableBase$ColumnSizeSequence.class index a419cd208d4e047bc202df17ff90294bcb9e03c2..6255e92c0d5c252fcb3cdebb089b80ec020a8026 100644 GIT binary patch literal 3008 zcmb7G`)?Fg6#nkc?45QQXss-^Y>Oxb%C@w%Xq87RQU!`FtyFpX=&(C2qx-1)5CkfS zRTC36YGMK!WAH(YXw=|pG!lQ}2mb=&ul}I^2Zk8*J2NA+b$zATx%ZxX?wRv_=X`hi z-IcE{0_ef1S~Oy73{BV;!*&eHV~5!8mDx~?v*B9KcGluHjEHSimiNWD+!ezZ?iZH_ zEbNY5x}!?N+#PDD8G-of6khG3(@V zU8TdBuKS&X8F!0QbT`sK{R%g?{fqCK-3sPFKJ6;h4S6|tXE}S&E%>n%8iw*I zC$rlrcoI7_nvw?h2J)G5HaF%Sb;sPt%Wf{k5cXg$=N1MsPO<3Hr{|wv-ul-N%)L%h z_neFb=8s{bZG(f7XY{a_E*(-(gZz04MzNfw)yt*bBOFuta;~HhD;M3dse+fA zVc}TGNj)~~Ooae+c`EIcn6241xQ6>pseE>-TyleKw!2Q+EettN=F1Fbw8@LrAq(R~ zH`_y@<3FJb;t`kW6bh{hYY+U-V;MKcV-b%JHA#8`wuPZ>g?xGH?^wQ@4*AIdN9(*Z z8~v8rYhk@YJVZZQa3|bC!A*+U1oSUBmHe3gbi3sb(1 zgG{KH1w~&w;ck5@<7B7i1YPRpisix_wG4Z?(0>7=Ut2AbHtEVZxyi0!N0e)19Z{<2 znW$QCT{jzKy3xFkr|UwevsS^ zKlgrqNTH9SMjwN%kE2dcqftMFmHGs_^-0{$b)P2CPOKxoAK;)^HYOE4EF`hEI5tD z&B3%L(Nlr_B^LH26U`MYI?tE^N6Vyc`bEU_OIV~|CO5C3Q@@Hk^lKQ@ulpP%nbXbm z7Y?LPMz5kA4N-P-KiCy)79uNu!wLb<`#yy7BZFvKM#79PVcXZJ+xG?PE4c1k{$~-| zhdVCz`{iyqi^dKXcSE$jDS83dSFqSG@XzgrA-)yp3gXwQ9UwVPBxhLVH_)Ts#72&H z>9?>`zwIOGX9_*2Wyjyn8ZIY}JFuRZR!|2Uh|XX~C$Q14LL+*y3H^QzM?%DcZYhl4 z=@zwcr-jWH?otH$E0$iSK7cJ42mq@I#uZIW2gxqk6pY3htT6i6+6m$lQ;TTAY>u1b zeKQ6d_?PDMVrFMw!j?G{4TtufYcGbEZi-RJHL;JEj*uJ04z{?EEA2ELl3RnaFBRnr zWHs~^Eb#@>bQwx0*Q8v{<~(tkp(41OK_a+^F9g$wQd`^Ek0$?p-p(4DRBavlxL4v> MHWiL=eA2A>1Ff9BvH$=8 delta 1263 zcmYk6&rcgi6vw}_KW6bVaZSTd+ob#m#w^rL45cXvG|ms`hJc-rKp;(m!JFWe*r_r3 zaj2|HNL7#Ro^s8FOQkB3yHtsUa;SRfAyN)iFFmz~_D^V2)bx$LqSb2Wy?O7=?Dw;8 zG|$^UKUn$kpQpP3l6V+ED?TvMhLa{zIAzlGw2Ykz(DZBoM=&W9Q*!uF#%z;f=S)oF zyeytEFl!@PRx4X#XuRc=XYz#wNywna2WIroX3Zx6 diff --git a/twl/bin/de/matthiasmann/twl/TableBase$InsertCellWidgets.class b/twl/bin/de/matthiasmann/twl/TableBase$InsertCellWidgets.class index a37bf80fd8bde916f24e631ce9500198818eae90..c039acba19c18fb9d0c2f7be284940430a9a0432 100644 GIT binary patch delta 23 fcmdnTv5#ZJL}tbVlP58|vL0gKWjj3i4s#L!XZ;9p delta 23 fcmdnTv5#ZJL}tdq$&;8}S&JEX*-9qgVNL=7UkV3< diff --git a/twl/bin/de/matthiasmann/twl/TableBase$RemoveCellWidgets.class b/twl/bin/de/matthiasmann/twl/TableBase$RemoveCellWidgets.class index 02b5a8d0a0fd668b19a134f0ca1e3437e36280a7..4d8c194217121a0ea7f6fcedf8b13b8867ae87a0 100644 GIT binary patch delta 35 rcmeC>>gC#?$ild7vJy+M;0^{hww(;TY`YkQ*mg5Wv+bSS#?lS|r~(Oh delta 35 qcmeC>>gC#?$ikRDS&1cBFq46eEsKGdEt^4zEr&sxEpKugOFICIo(G)( diff --git a/twl/bin/de/matthiasmann/twl/TableBase$RowSizeSequence.class b/twl/bin/de/matthiasmann/twl/TableBase$RowSizeSequence.class index 99d54df7c2a2505b7186234dc236216bd167f2dd..6233043207fcaf04a74cb1dd7415f0b2d2275d5b 100644 GIT binary patch delta 39 ucmX@fc9LyF6%%JR11nn&0~cHF-a-a;wju^mwn7Fuwvx#om?8nkh6$UTX$+HX8;}HfshsHoM6mm?8nKCAU=NyX%@)oW hI(agi1!Mf=Gi)KeNet}l$qfALDGbu=sgrft^8k-R5Yzww delta 77 zcmV-T0J8s^51S9LoCOXB_W%S2_y7q8`2Y?E`je^!JO&2-00jpBlk5db1p)vF2LqEk j23G+FlamHG0T7eS22>3b00##Y01pQh02>DulPw2sMfDPV diff --git a/twl/bin/de/matthiasmann/twl/TableBase$WidgetEntry.class b/twl/bin/de/matthiasmann/twl/TableBase$WidgetEntry.class index af343e9c61ad383212ce446d2f6db5a4b8dd75a5..6b3fff07cea40fb7740f386c78fd98f764cbf3fa 100644 GIT binary patch delta 14 VcmZ3^x}0@GCKD68!sKiw8vr1}1K9uo delta 14 VcmZ3^x}0@GCKD6e#mU)BHUK0s1c?9u diff --git a/twl/bin/de/matthiasmann/twl/TableBase.class b/twl/bin/de/matthiasmann/twl/TableBase.class index fd127bf1f6e54ab047d70a289fddfbb41860ddc0..53d23f8bfce1f0d687edb36324b3510e7cdf1547 100644 GIT binary patch literal 39850 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 diff --git a/twl/bin/de/matthiasmann/twl/TextArea$Box.class b/twl/bin/de/matthiasmann/twl/TextArea$Box.class index a6dbb0582c4a42e97b4244482064ebd21ba7ed34..aedfbda8809f9bf1918ce8959db531fbb7088a07 100644 GIT binary patch literal 11498 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 diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LClip.class b/twl/bin/de/matthiasmann/twl/TextArea$LClip.class index 115a6d6e0b24a0752861cc7cf9e1e97fdf245556..0064630c40ec6fb3831830f125450eb288d043fa 100644 GIT binary patch literal 5765 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 M@}JUc`4UzC0VUA>d;kCd diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LElement.class b/twl/bin/de/matthiasmann/twl/TextArea$LElement.class index b87f75dfb23826dfe02a2aa5307fab15d0514bd8..4a30f93bc9875750fbf350b8d113bd5f15dd7129 100644 GIT binary patch delta 1023 zcmaKr-D(p-6vzK(b~l|}H?1FOLE5Bgv?fiO7^7{~wi>M;tqOwBqNECf5p$Db5W%ZF zf|Pj&Z@jRjUTDz@UMN;UFT@8BAHpm3%AdoJ0*HhBY4;9%{%qhLi6qlVLZ2byI(yPZvT#VdTfax zS`ETjco+%Ucxvq@_1-R7!)ytXG2_#y&C7|pF|rmt#rAn#X$4KAfG#0p&2@wmdj0a!7cJLfv$whI@F Q7==Wc?Gd(}f%x;!NMPX;=&Aj=3-kZ1YQDQq`zxes|8GsUQ zY}hW_%&{F7VYrg7*B>_ex{d*Z5Zlt)$=w8lM# zVe+SblQ3941w)Q5^!2s@VDr9yfQbjjq&|qU*fO%l8bemxG_t}q`;F@iC9!Q5glkx0 z)y%V`xU46|b908p#ICs-vnl^U90EgH+>Q)%hiLCY2ly)({57Kd4Kj4L9~#Xz4kJse zv|@;p3OItCRFhSqK}xUu22 zhiLB8KTNn;qpQHnZF7{`w^hDkap(TRpBnx}EhPk)JaU6ZCi@_(-)PD45W6LAK! z{yUH3gv#+G%6^1V3IAJw4=Mnqm{2!*MLvboQYn7$s`@crHFrYQEC$&WvDdF=5&Kj% z&k)OmHa;gqRxsx$Ay@gAw8CRKhYI^K1l9turoiHf}+xYZ2Bjg$Z-o diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LImage.class b/twl/bin/de/matthiasmann/twl/TextArea$LImage.class index a7a98e19a863411f2dd6d88aba5295aa577293d3..74a4fd3ed83fb38522bea9e467a97aa1b353c52e 100644 GIT binary patch delta 699 zcmYk4T~8BH5Qg8`ExSF-N&!nzL@2b`{{grD5aUdX;9k7vnK?6aX3n1913&G9Uw^*+0FcMNg+b&LBAD&RUEC9L zgzgK?iR2ZBJg|_&Low$S(<7mR&|?W+FtKFf$?5KAS~)w9(TIsvg0<&1-@5H;v(_Ta zrZ<9jdi3lkYA1|%ffz!7T%!MW?%k5-m5a-(+U>P?<^2Qc1$##<0I|%;;Cm?V@ literal 1890 zcmbVNYf}5;LQjU6LPZ>o=bSa(4>|283O4%kCar?ENE(_r0ROaJSs*EuIIVIjYz7b z?(-OfTqqxMBV+6mOec!G#C4NFN$EN_=89^i!Yd5Jj<&M=*o+%o4cK~Q&O58=n)yP) zD+Z})C6Btv254fTj&Z6uX)G!WM{ zYL`~lGp1_t2H9`a`WUkcP~O{n$G}qLgy0r~OQjT@C*Xn`YP((1%ld5JN9s-){F(BB zvCHQ*QRf!BTH~M8Lsh|T#1-5?yM)&Y=I};A0z(Ss1zHfO1Ggk36{L_>u#6Q6s|wbz zu3$r4X9O8QmSNCohHY=P-cSp#ma5H@gtrV6PNG-0j$!)0##eM^z{y>`p0x>-_qn;L z<;?=E?#L)L(Q{Ni`RF3awfzEZq_-eB+)(pO8nhiEsvfIJV6ya2zPM5mlWpS*}cc?rFA-(R(f zd$><0vQC@_C#25T{VA!{Dugu~w;2TvfK!1o<~Las28=AMs4m0m&J^mxzE z;>EvUT7@%t6|M3bLh`y5K(uPG9zd8J4_N_(@sN-RAdF#*Sb>HyiXhy?9V5OAA#_>+ cx~YVdxCt3|@Dg|3;{R|GeRN(#4om3z3$(ofrT_o{ diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LText.class b/twl/bin/de/matthiasmann/twl/TextArea$LText.class index c1642607111d921e565e357ca167133aec69f9d3..d6005964d487f65ef2fb9e567e99c5c8b9f9415f 100644 GIT binary patch literal 3538 zcmb7HS$ES`5dLmrN0O~H8>WOMKrqBO2Dg-!mQWxB65Kk_CV@a2S`=G}1&$PCg+L44 zXz9MM(0!%bOV1&2(uY3s&_C3TLT6+-3lXOEIhs57-nld1%$*s@zg_#~R{$IEQwYsC zs33{~1uO9glR+kjm^>QBV>ry5#@rBdnJ}`@nH%P{5$19sQecFLJHq6sf-dAk7=_8i zVlu|$SQs`6Oq>vjjPu#!EIh&73Fc0+`o~%G6U?2G@T7#N1mt1MbarZvCgB;Hb$T-a zHD#K*-I3P{1-&59lFsVMQO$93hE^EWOf%_B!Z3!DhvJ^7>q^;r=fORSv?>1jp@4W(xw*^447`@>kMJK5q0qa0?enLDq6(M{yq@ z$b91ht9*6M2{_rV?sc@x(Qa+b^}tPzD8eOaZb+(%Zm5pJU6iG)XTrcs3=mp2NPErxXSW~Fi8n-igr@@(1U2=Fm7m$i1 zURH5GwyIc#78Nn9RS`$4iUeBe5>&i`S5>UTdKItXbro;$@>vyc^5iWRd>ikmco$n# zyodKy?8QSW9!5&V2l$ZUq~aXTtN4h?$4oxKc?qAY_za(`_yYS?e2K4Ae9gMPVe&1L z3rsrk9qamD#Xjtp@Pj~e**@WA{_65V(?u<(r`hsHO8rN|j{+O~v^!-Rfk5qz?Mh&! zpPo4tBCzI`GG6Jm_z9M-IyzGh0*!u>UiSJ%cW#OaZ1PX>@)2;$P|0wQWmE!re=T$T zcYSM{)g3!>n%%1(8`sT@-j+)FSG11`O8XJr;V!ycH%4+~o+^W05>+{GD${nqk#%y^ zJ|~J}ZN?fM8+Tl|-qx~M87!nuG77t`@`^0Pxg54 zE9#tKGSH)EJM)%S^ro}uW0$S#rnjn+%#QrH?oBxa?fJ2s=FNRmex5CXhOzNNt}Aa1 zY56{b-jmz_$=6sX{kXla!G)Pa9J^}^q0>oZaL8cWm-g+4#aS;`prFdczmGO0x2*e|SNd)7O;3TTzk*afO zXq3ddNFWlNf)u1C8xWI_Q&q|3RC44V?-qrovS(S|MLeHa;jfkDDHTHS`gb!>txVY`HO2|FZo z2q7fw1d;96NyKlj!j<0@t)cx+q>91CDKgIHms2<@>ACF^YPu6wpvGGhmr;9xLPt@r zn~BCkMy4oGl@Mx`FdCI=G$}Q%$194erafMc2k;;nQqh1ky2)e4ub|>88YS!r&;q?n zJtQ_MW+buJi>OarLIXVu=!wv?a0<5v;UeMPDJ&9TNEPk{)pOXCdV95jh?544q#-}0w3(nw)6#xJL literal 3571 zcmbVPX;%|x6n@??$qdO*wniIS3WyN`7)q(OVynm^(YOJE+C_)(LZTtT$>7#~uia}G zYil>V@VTC%C;iZme&}E7IkoprCQ)#TwVadt-gmqAxzD|GXZZ8)-~Ry6gGE1@aj+as z7%j&b#{DD?@pOX4B#Xl=js$QNPqX$6YtORwTmZ*#oHc{jrpl4PG*6`;Gnn<0mSmA) zqbFFLWRYeu7eEGC7V~`L6bqB><=B+P+JcJHD$WQfGuezKus%L5qjQF3B~wOj&d6k< z)|qtFl$mL1N;5i4hx!D(iEKJ+3e>rt9^g$nrC9PTnXHMQFisoMw2_&Oj#*|ZGs_lo zmSNJShzXRDb+&0Fl2V|})#fq;1ALN<__n1oDeEZ}=LOWEw49S1f*#9cq&bi_aygk3 zxZrM(u^FZ`qT{6Wld?BEEz_-zmA-p}a6eLr{qBfkvGxgKWPqFqRK`;oxo=@^N}A)w zRGL<5;@O0eo-oW5&z(hul0X4?;|x)t)fH0_eye?oNKs{xh+fwV_Xu2|V$3oUC-)lj zHVnHy&Z~G{#S1E4q$!0lZ5mWE2ijsWR~P-66qQgan;}bp+GeU!VFHPtfZYfs>lQxE3ON)|HmL1y*e#( zmYF?ACEdnz|5$dxOvvFBr?{e+sZIPi=;*>rI$E%vc-8STHt2W-uj*)JEsTvi+R&~e zf_CCw$7^_9M+Z7}yn#1$yv56J>v)GJ7x>`2cu&RqIzGV1IzGWg6`$((44>ck59;s*BBeiXNq|QwvxM`F0(yt4TfVc&H^pFLWR?JAp4TwnR5DC@comnUKCqnW|#+)-)h9bR?@daxrGo^6@4nU zsd!Qaea~$dREH{d+@cdMTOQh?bAMsDk`DA^XMt8+B=hVb+;t6AL`3y<)X?C)iONV_ zeOE}if!akPjr1FM@HQ1|_?A|UfL4PVtrm@15F50$cDTI-i=}YG7$EQ*ZWx24akya& zVb~5gj9o;KVuz-{)99mpdjC53u8=Jso$qE)TfHGAVvlU6{w4nD08&00O$v<6C6qmA^bg6$I0?h?}O64LGx(ryQ-kCL&QlI0~2^pW5o zy-G>uqz!U8-9$YPT_o!2j+3mfKb}W}f<=UB=2^Bu3qJa(^waWaR55v*=Nh)DHAB@} z(4@6uKnvT*BL!b2PdbU&#c96&dXE#!C;&LOIlqlx|v+YF7mK>}xK L{189kBZU3|4a$Jx diff --git a/twl/bin/de/matthiasmann/twl/TextArea$LWidget.class b/twl/bin/de/matthiasmann/twl/TextArea$LWidget.class index 722af9fa56ab7632e6fa57652aa9224af92fdae8..991128fc696005acf174990d90fa7ec9c83cd246 100644 GIT binary patch delta 37 tcmeyv@rPr>N@gxjT?ST8Jq9jL{mGk|^SL;U8ALcu7*se-C+n~T006Qv2j>6) delta 37 tcmeyv@rPr>N@gw&QwCNJGX^dW^U0f;^SL;z8ALd27*sfHC+n~T006Y$2oV4P diff --git a/twl/bin/de/matthiasmann/twl/TextArea.class b/twl/bin/de/matthiasmann/twl/TextArea.class index 68f4f95d0d24902012dfe860ab72d8360f64e270..a01bd6038ef0dcfbbe9636e48100aa217b305680 100644 GIT binary patch literal 51646 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 W1p9EqQhz~YCHawJRn2$T`TqoYEt*{b literal 45522 zcmc${2YgjU_6L4u=FYpxdpA8V;SoZw2~A4GfN1E!P=o+tgOEHR5)w!OvFoB@Z|f?k zsHm{(>Z&XR5et^ZzUuC}Ygu)5UEA8WxHgpk_slJMffteA-~Z>Y(r%cvVDQt*+tA&pGc}Tm2$Md>^I)bsd9n zy{*=#s10H2#?MmSkfLtn`%NioBj0aMkrv-?;mfVI+Qg0A#x-x}oI5zRnStHHmtXSb zSKRHLw)%Bg-KFlf#Y=qu4QJlNmwRn>UzmQ7`fR58S{Xxq(0N>pge!)^-q5Mm@l93kKI!mA^Uy3Zr7ZtWFOYrW@5+Tp-HXd7Pb($+0>`Xt)*QRA<{N2-EFW7w)}~o9W7> zy78quUwSZrJ^9j$-}dH9AAZp{Z1uDHtF!m*+sAnWFg~k@%V8k4x+7v0TLUB3AZsvR zhS=6nE_GO#c3Q(yt>M;)ur<;uv8}@~L)HzFlC$S9;^%T# zol=qN#Ch|=^rUs1ZO!NV@ez88xem^qm*3v6p)nBKFh_+e2hy{8`MR5hob z;4#(MR-EsPZEFeNmvSGq+{h`6>t&o*$EoFa1*DRIn|O%pIEC> z=`(9JBjr@Stl`UP-16!C_6&YJlONCG)Y+Umhg0YB%V!m9$r7q>mWjrgF^W_TLx-wPdTUUjxtF3Don4k0GwcOS(IB#9Vy3V?uFYB!_ zz5WumChhy4tS7-lu^z1r+}#bfbz{W3Nj+y<8*S_6i0E(Kf@ka2Fg;-n<2E;Or?>It zb_V2*Q~u&DgH@0<8SoE>(4O{nFU|L66 zzvas|&fCtZR&II+w{<^5x|1&t@QYo1d63(9$hIC1iz(J4sbUIP7mDuY3)tBd@HC{r z)23kVZ~>((wjSrk!5tP`;BJd8aJN75SYEQ8hoOiFMN50 zr{h&ly=Gglhs8>39WTK*816U0#;lbLz*}74Z|WSL8$7!fGr=fXjzrajEr@ZT*w)V42eT zBw~GP4YaM#BjQTyUy5koK2H6c>tWDGSzw(nSpQ|%zF>I&$Gv~asjoO?R?F96QEGjY zqM9S3pY?6n+G~B6Vtvne*$0uNDMgF0*sdiQl2*311d$-8yuLo(IKHl`sVUwhNLP%n zt6d=|R8hXXYDrv>T`{k=W=Xu6Usc9WZML-*lu|LVF1|cok6bmb;Z$Udud1tCR8_r9 zP@1VYE8f&lw<_K!DBZ2!mJyjbwe8C^)>Ovc;k?=`dYlKZKyXjdi(W83(A~0ZD!^C1>>ib&00`4 zYgXBOLGpz00DrZC9wW=CIHhV;)sU9v+PWcAs+yKgt6G72sk3XB)K@jPG-9aZ4=gdp z&8n-aUovENb7O7&lF>;abjLV)ELzNPd-TVPo-6;(-zG_ij90jx~ zAZXwZH}1najho|YiyP{jf#se_tIe!xtXdv#jyJj_6*9;}=}1j{aaBuQ^CVOj)GKM- z0Qp=9J*8HA3kmi6pOCbQ4_t45&7oS>@&-`D_?E_|hQ{d)jmxX*1QjK%9dtOYtp*y% zNNAv7BHNV0?xZp-u!S88_LG4Y1-ZNwbcBEXldd%+Ok1+~r(N?RiN@z_c#~V4T|e z3NwW9pbbIdcyPSM4UN@UE$+|+Wv^(AFOD}h#%m03on3nx3U*66)(N%XqD^3EE^3;Z z&8!@UcFPT}ybN%&3~*@oZ8<7%*C{+fOTdy)l9S+ujm@aq_JC^9>Xt^ISVC-%0%j)V}6o6{d{C*6Z5OhS6=92;+@IzB^G=rcG z1Mi3<>{kIxtXys;Tki z2Si2kB^C7Smo!ky>O}|TA3+7^e~t0w;2?euz{YA!lnR1Ibg(G7)DOs#3@pv|4UJ4b zjvs7?XFLj!j6$)W4l=w0z?ywtlT-_d0iWX7WHI++Ys6cZ| z4!L<-Ucb1(Peb}(hsun{al-1N!HcXxac)BF-7w=4uYDr72 zpjgt8a~UW7#$1km|gMjUxyg5%2lpF3&C6G~>YQ4{reJa%*~d_Cn2Q)y=Awp1C?iuE8f#C3 z;>+r4%JQmH(P8saPS)0Y$yC;*ymXk;Q{uHtmSVQ^K&9=$@k&AU0N(QtcHg&|B3HZ6gqC_;hPhO2y;~~eYkLu>U1-v@1aGRX!@%!~s@i(a!V5?) zOtApg)u=TqTvZA#Xj@0%ez&z_ z>okDV1Qm4rQW&wUq=gNEfJFJB+Yb^H)01P0&oWFL73}z_hK`v2+eoVIbxpjfxv^ml zIz@jqb@7R-jGLfq@_x+Q(F34F3y^?S)!5h@x4L*eZnBosOEKp#i{ji&B}QoLbmVdh zt0C#SF>Utd5^Psd_ehFhK2eV=o+%O{nlzMivv98R^=7vU~F~#H3=poUv z4yp^9nxxg_j(}!gc=|xKmlk6&BbkC4{%-^MKX%E4p4JYRg697i2$CWDAOqySvfaLn z+U89jR$BYVlYip=6I*u`xmry45lQK#gCVqQf`u&@TA!p1_;cIaGri%|#`YKEMwvoG)Mq{5u&^bTxpgim)_eQpX z;1@HBfl(McGHZf?8(k4gK5cPbLsj$4hNfCp4e>mw{qrH=uU%aRRG+;7K|tvCid^AOedWw6NSwO(+wS1kFB_F&so} zxZOZ9Sy$RRThJLlITC*)04}PXgc%(wXwFX#&1f^Dr~l;b{@776Jwe;9gP!F&&&z)l zD9NpuKy&t7>?uqu(~Z|H;`U+0nxNG`s*^(@tI-F6$aDP zT?DeOLlMOYGCQ|s*PQi~RkcmEFtsK!!gH!>R)GlOGqI^-gnzsdrd2AV(QM;DFXFT* zn}#WBnpfMrboPp>YT!3@5%xcq&4U94?Ib`p4wh@Y3Qj!hE<|Yr_6!38M+r|-)gmYW zn4T7vl_5NqvtvC{(=ZJ#jN1Cj25kIyz-fcwu>U40rWoF~omoR%smt5iP4{~l*MNP& z<*;_#m;R%-(%J5Y?#|nP7qQj%qNVNV}(>dVwc2 zZiaD4t2(hVNU))jjT!GPe=t>6-75C}s=w3e;% zz`@)(Fp)zW4uW4d2%x;Y{D*;SKiUIU;(_2LS3vw`JU4Zy3Z6Y?mR7Ziib|^ndt&b7 zPs<8yqhSZW0@fBdn)l?{U19Ihu+=p0!Dn}-B{&%UDNTj%+%sYo0uQGLE~0UD4b^SD z!(Oz+>sr^eEME@$ImO%!D&-bwPukL| zrb)G@#%sJT6#xO|arH8=`|ROxJV3<4npof5h%qIGO(AZex5-Achval?hcOLF&A#n)u1o+&;^)1T*FvpURT)DaJeU52TrAY{0fBbay|X0L@6-(FM8- zM%7ldysj?3q^hp0aY+jY5eLNu6@vV*;njV4OH*_A`iAE2ORHAJyH|Bz0n4Jk+0li% ztDqjM-9j8W)xD|?^HZ~?du@GpKMp5e@uGMMTOr9B2`0{ufU$Lvql@)GM-S42 z9r3bw#Sy;~d$94Fta@`hv&sa#Vt0GRz?QnxU6DR$kuj)B4~s89)6qkKZ`o5~L@t4~ z5AZ-dLb5)55N$ow(TC|_wjS>25qhMpOB{W;9)+FO@m2Nxn!CHpxw{wF+P#S*P`Wp9 z5U!(-(4~$Zt;aycPSyv9dpIgC{^95&agnq6Qi%&FZLA|l$dQg5CDG+kjy_tKIpSII zoFkscMUT_t9r1hd0wj~!Xm!I}9X&x$bi^OTA0hb@@&{v?E_1}6#2+1bge-OBI(d;J zJ`tY+!EGcsr@pCW#fpZ;=6KDF71#siJ&puA%tkbAKu#2@D zMnX{oIt~n3_fg7cRzE96RSsylkIUgGGb zy4DdN02+OYJk8O|(5m>5QBcRJk2tlQL8<4$rutfWzN1%g;gz_E&&1zARc(`3=7*k6 zY;0_3baW#_-oz#UDL!`ODzVSe&Abo>$-#mSPX>Fito%W^0>!A#o>Xykiyr34bL6>> zUL{vL;(bQwy8u_b$1so9s~vr+UgPM~xc}4j8IIT{b|C1&(P!$j9DTMv$I<7?i)?+K zqkpE?Vqe?Q=kp*h&=(?p`VipqL6Se0*E)KgMw=Hq`V#p7_PcnBE)_KN5Skm$F$55Y z=I-dr^yN5uaR~JpX#q&D$k!Zw1yApl`YLF2htSUcE>=hWLH@~+zmV6%9eD`txGOY( zXrsL4(8iPC25^+6LeOguq4xyC*atzSs>q>HUVA&wNqlrvf4TS2T1(VW9d&{_@lf#* z_^TYbPl-dD)%~q+M}EWb7tX0)R^PC?zPpE{?oBO=s`=beY4_8Io@wi=9es`dISUey z_%C?rJttpc-g%uP=gQ5FzFrR#RGe&L{6)N9__CwdqZz$H-vC{}rIA2ifI$vo{exXpc;WznZFKa_%pz~$%dPT(LnGRDo4$_T#Ptt_CwN=Gj=oJk z;ON`IlH?xwq$9u7cQ|@8^3-5XZQ;}qPW=)o`8B70#iMYtM6;D=zX^ zrtCKuM%UOdCkMPO07t*c6Y>_njU@vErXI`9zp=1?+tKf6C>Z~e!1BAe=y&x$9Mz&$ zIr=?r=6y!`2aJ~w^+%3cgBR*Fe)~^uKPl#eVVcbkUc(=Q8qtm#!gKj0xA=+vlzWC2 z^%>9Q=Y07W59;4cga2W=d`>>^=>H<6Ut{w7f?@a{U%uqaSKR%;WWx(4K7li{%hJ(b z>u+G~4esvfZ}nbBf2Y59^u7=|A%R{(k}nDr9J09WL!scgi4@%S;Dj{B6$F=%UmU)q@g+T!;e;|dl@-cvH^-j$#0ll_+uTsp4&~XQ zd|%;j?}>3jo%DrHD29s~sSbBSokImqs0#zpRlMe?2CS-3A)pI&<*|1Qb$3ENLOtzJ zFDKMnt%3nuI(p#XK|P?9zoUQSg!*U%)@XAg2x>>DuOsdkI}c_}4nLS>k=(tu1=BgSBf4z|mzmQ@c3L4i;mu8ax+Lk7T0@z;oj*4n>JGx<)&%>*2}W zJOLm+d)Uv316MEyXYY^Bz8xIGXkQM##EHqf^?OV1S=z4^_DA@098BlUPwz6Fi9 zi^1?pC%9z&`UhsgSqA4eVwvIjOB}`z)le7}0KwISikG_w5e^b+j*uU1Vw>S>^9Ks( zp{L<^OEQvW+HV@-dsSw;<~&FUHT=xV2G;CxIvPi5+a!61!%rw<4g!rHkffS9ZkKqX zX;Ndua<`k(AJE;2!5551{``e-r2 zEd~d3_<+Q?2HrYPJh_wJ2JN&e-mO;H_{D1Ga}!wAritJ{&y<5O*Mn>>jK>Bg0#3~V zoe*fEwh8@Z;k*z|pt!r3V3!Pog@e!YaRbE1xxC06#`fPL8*kGQFIvk7n=8zbZo^{D zK_~Bw57Pk;A+xrA|B^$JO=&=fM%1?ZIsw`?yX}5Yyf6(!fG$V_B&Vw86ga`_cOGPtK@6YoVTv%__#4eU8*M7cfDU9%Kv;fJkb=dh zh_I*0r^VW4++(JAUDH^Fz0#QsUNYS5CuozFIj~z6l1^=tAxcm4!8sU+IbJTT(?jX$ zU<{_Xe-0>Z+Kf4~CoY&Ut8DV*i4$Cun?^nKn>5gGV-(<=j5)7YRv=9rR)k;8Zf;ny zf?r462IozgII#lsZk8ne(q`)S9qi-WY$zI>qIk2aA4At1@<;RPMcxqD`ki5?sfa5cL}r(9*( zsQLbpC1@Gg3WVdILlyIUxoU)zDdL`cva$0&9nMaWcfGl_m%st>^A`p@^|~W8-c+p#HZr6yV1j#13KKt&kF2Z5mys4By@ zoU7j(C$pi4jMY_5d}fnBP||Ex2DZyjZN@slGPe33&qSEuadEMWiQ?&GM zx=Na$qyLX8hBtkN$Dj}6lW`TT6Ao#FoKp} zPcHaUAnA7;+U660pElvOU6Ib(KtW%&&7OM623?3oq()u!;YvRRYMr!T0SF%#7nHTY+O#cbxe?z@VK zlPVz=yr)^^lc(S@&3ha-qq1_wG%T2T&o+A7;Cz>!$N zdmHb)urVMe&|V<%Yn#g4AmAB`-Ic-Qaa>t_O_>`r40`W9dv$Gd^->PFsfqVa{9aaX zd@rlFzrK67Ux;mvRh;6SGGkWx@iV4ZmQ^e$t0F9)!FfxHN+aqQ{YY#$WhJyw?FZpuv$Cm5^P{~DP z`x;mX4)8g>!E?TX@wAweMwWZv=pbzvqq;X2MMFQlVc%91lv~@xy8XDSCYJTXe(d}u zHlYFaM5b%LV@`A2 z#hRs<6C7c0lQsB^K;!KA%9c1zFBn6NX>Z)DiDk#kn=uOmzUUwm*dE6|$t0bZ_7j@4 zh}p>SVhD{&;NiqI5PinW8XUZoth*a8Rx&Z!zB67?5Rc}JMr8wLohfyiInCfl@bZ*T z!CYff$5qT2e+*QYit^c&3uaf&ub8-?d|KILtVCyK*@Ow@(bUF8Fjv-b0@&=0naF|tBVe;F#=mNE%ZT5m12n{qWoTtN+X9XQj zv%vOTOVdCYMm(keOZux2g}QJJIaWyyJv z%Pf);Zm|4~6a;W?_?&BIfaO(H!&t<6u5FsfA*8@O9}mjI*G_72j3fw1;$5j0kkiz} zwG^zwWGg1Az8X9~if6>E2G396ld_0qH0>aG)U<)nQFBK?pSdHZ&)gBwXYL4{ zGatGOf2HR$KB$VVKjDTfd@b4R?Jxg%W8+!3i|?g-X0cZ6@5 zJ0j7{9U*AujsP@sN9>rnBUF$mvlB<1;dwgxL`*NP|Hji+(l{AGR8zErMA0si^LLQi zPF7n|wAB(5cj!)=(chjfT?cG=|Qg$#f>oqYJ5;E*1YpNymjzd?EgaCx-t^ z5B^Cc@jt$7j6R}8#jTXr)=N6!v%_>Hdbx^H>1xwbo?F^$3H3M-7_AHOmH66ga|l19 zrY_n>`S&8>0v$4$*Cqg@1Aq`x>{UL`185*u-b0yu!(Z-B>LjVCcsu16@1e9}H!Fs$ zR_e?kD}$J>WFx&E*A0|QH&TplqC(n8{pc1drdtz+FfbUxKz9h@Thz2j=4Jzuz2Z9$ zp5FrrjD`ipPg2@0Dwv<$Wd{{LGO(4p0*+nOZGLw59n|9y0AvAuJvUG~lA4q2z4yKR z_o&p{&+Ox879+RsytW~@b9*~Lxr5Sa3q|RdSe19uNcuI_=-o7xenXXXFP%*Hnc;MI z!3&17KzuLu8B{O8)FQaS49q5-o*7NeB_X9$-q`N;#x{AsvH2tI$0Pj_1JnDDp(mvP zWxxn+#~5}{Hr-EM=m8o=yFi~0(Ik2}0rtrO?2`l7Cre9e5B3mQ>1okafF6>z2YMAi zXS(gw9&``&{S)w+4Je2n#q}}3@&x76?-IzMQ_y!Ow{L?jASfN(r3BsGiSD?W;Rkfb zlRjWK6-^ts2ZV~bEFN2U1Em!e?x2D5+7oAAtRkYP(9qL>7wV)STTR02)zP!@~Q#AWf_@Xw?d{#V8pPzI*)2%2jC*KKOMM@{}p3- z10#NmI?>+}<~@a4-+9(siF{Y^_nF2X#~A?Mn1 z02ZMvk^{YA-$dZb=yHU9Fgy+9=J3*=IDOC_>a~j|%^$RlCJ$7D7ver;pk?mmNKf5C z$J{Fz#jdzEYg2S3OLPN}-J!$vpkbny0ggE!+7D)K1PAW}IE#kLA#y0@Kb`u@!=R%n z111>XcQnkF_&1y^K0o4tI@u$YNKx?)s$e8eYoix;iUwecAa_M^!W2byjsKr<3*{@+b`X z2uc&B3GJo_?WW7oatwwnI11Wpm$?9oqVO&{d4BeS9klQfJSFIMVytP)RY($8pF9d; zis>^fkA^stXcZ@>yjDk`P4lk9R>zxGT~^??D){u3*8(UWZT=8kQxeALx8Oqq1&NQ+ zxNV71kb|tcoGr)5BZ0Z9jZ}-Jp37HEtTG=%Uspn&>O@rJ-0TYHg?Z zE?PXlC>Bym?Vu&4c2Ug6BFW!DOJjB`)vBl!v$xSH+};>YEjtoxy>5O1bj#)2sh%gx zT_NKr6AF6;&^!&RWClgVOv)6;QWr6c`in{$BIeN%;y4hM1A5$rx-VRmmwv$LKav2xWQ!#jWGzL-DO8AWfVP=0JzY?I;T*|ApEH6!&+z&j%FS+|?gw<;7)rTUw_%?rD_Z= zY#X)|+)t~xuLSWf&c+%%CxJGzJ!ET2GgHA>#qlk#-3HJ(ufI+O-0;m%b_7TT>D5I{ zH>b7{jf>0k!TT@33crxD#6{ry7n`2k)tR97^1(YZTb=myoj0vmlRPLK8%x%C%>kXS z*}wD4(fJkV{7Q6wH9EiMP&>B};P0=>pMy|Y7(9c)t{me|T)f~G7_HmrwDq)|a|*EN zim>udFM|1f8gfSMG3wx`opc7GGk4ILW=V2UcTuv`f`K`($XJ?KnGj&L{2HB{g}<{~ z=^VE-u4%1wF4{Pc8$W#uMW&m?AU2NL`uQ39afxamR`ktO$WNTyPR(d=t($8jx%xhE ztZ8&EU4&6xL>HU8yWkf?K_zh=DC0(;?I!9bHi80ghRnVd(qI!7`yF(o*i6&Juc%Vo zNhgWBs7l;JDZ%0s_<+H_+lY!xx|)B!6WHwfMdy8pRj4N$F$gPIeh~d zr6CQU_q)2uD_}^kf+fCghUAJtCxHQBsYcM~DRP;&R7V0Xo=w4sOBBzp?d2+_OV$TND`p6iLGe+-ID9As9}@Mzhgdfi)3Dwy;dKk77!Qv- z6k}4tA!mutz+yg!w&WT}E@INWVOf0O)NN4C#Qb5-MIP%zm#!ym-35BQY`tI`?s8@W zSFEQQ1GmzZo2d_;4&Osv`G&Vw;eK@u64xN{^O~J>ts*@AV!c`0D996c_)fYGD<7QU z3hv>0>n?LcgX=ewR(Bz>VKa;}Zf`qX&G&1z)6d-whis)AHc&R20T7X0bR+crn;v0C zb_F*b^so_vms`3SD<3az*+Y}~wvBGx1H-^gO~-xM9vJz!m0B_D;S#M%LeWrEZ=y~y zD;gSBYRBwBJ86@owIM9D_pQ5BoBX?+dI3vc0IUDQ>iQat`x~sTy^zA+fdhR{#c(T4 zlHgnLA5}_=PLd&71mk!Kem|^MI#dr2L5s|w)i7|+f^m9*%%#g^K3xkt@=h6}dtg_# z$^v=>7T}|@J3R#h>{Z#5-i9sp0jwWO_7M*5*|J#V;+!t8V5ltuvnLx-*QQUYw`_uQ z*rNYXH`$Dpsp)^zMYbRnqPOWVKIw~fn@8Wv)$%l61tQNUbde`dm(UUnPa8vN;k`84 zmS^UrinP3fT+|yuwpp}iA=j2?+cc7w>^>?W7333r1LCy!46sM8XP`fp$^&>3T*|?$ z-1aElz8>CNGcmXArrTTTj(d%m-rQ#W7*d9@V#^Vf3(KOX9AyUWis%78;50ypcd`U)V+uw~fR>*skEASU z`7wDE70RO%R(RI{gsv{`xW8bbzK?m}{u)IE#`#NkP4I&F74!cZB<^GxP}54k<^s1A z-+@&FBl#9QIDqi3dA@CeVt2!<8!a~EoX%c`<6G%Bkh7dT4oQ^A*h=@{>6fi^Z=14F zLTTV}<5`EtI3`jrIhl&(6qtzRbcCErW%3xB2+eG!oIxkZW2stJ(n>ieVT_I57$vPR z#-vLh;Hbu%HoQj^4rO^kpxjNtpn1A80nv#^cLP8t#n)xuch-KYoji`ToS)E*?+Vc{ zw=V?y!ff()2)wB~9*AUAvdXx%0;mWBKfm2VR_fizbrl2SxREEJ-IEjAO;j0;$!5qK zW%p7hJioA|>VUOyAj3)4{sGnmr?{jrTET#{UbPO4$8)xZH6H=ViMHN(dhe>lKv zvK$R^lQ}?z(@NWLgR-<8q&9f}W|xA}YtiH>a5OASXx4W=N&X@NsGCiQ+kj=ZKl%>b zNv(pWgKO;&aO`(N;(kH9X=kZbR2;K*&;wic{eydQRRkk5Wjz(h2I?bMnqEerr2_PQ z8TLBHEV_aY1Y#I1Mx4%)MYZbH_Re%6ya=&3DqF|wZav!32T z&upR9$a>b#dUgjrw}onu^}L_;{0{p47CIJLFZfw6?4TF7&{$->=ucayQ#()8%NX&WTj?)t%kvcYxbZDfipo`B)2pe!Tth>^m`BRfsZ^ec<#`sw z$=MJm=g>m1)FtvfYLY*r)8tx+kMrp=c>%4L7t$?q9o>c1@>_W^#K$GH2XyiWc^SmV z<@68C);BWIzW6qn)o+7Y{npIB%Q@4@>7SMD|CfvD!}kR|a=s1I$8=ZBuKZVa(5ur2 zJxSJmyJ+3~frEC?Yb;kWW3O+gzhV-Z{@!RCuCXBHFTjbeg9UdzNc{$I)f>UsZ=xc( zF(5`XAAndKfLJWo%MDndsVL7*a0N>sTi$^BmRZy(1Yw+Rqb(`%K?9H8MtcBX3_7y_ z^PBE=1cS|rfDW?WV$kx0&wvh3`cKXmHKH5(IJP;p~C=1hnD`m({lp}8gcfK7Ya0fK#Ei^{{l8%&j zLBqbA=E~o|J9ZyPU@O(gZPXyQ)2R|Bm%N`Yk~PtY)E*{@j z`Z!p-pOk9O_%z7)tTZ&Jh_gNiHT=!M8 zhX{>*!`XN)Z>4WxCZ%kouKcu-vZ5(mY$-q0mDq!#*g`HhRrYc|8&cnvq()OWQtF^+ z>UNrn$r!{o)eicujXtNs>re7Q3dx5lUp|7lcofUAgh1lYgQY<;!MH7P|-wX5yt_CSG!v8>7>8(E_>8$}O04 z3x4JYgG$Jz2; zxOr`PpDnlA^0%z0>Ah6I&OCg(z@1UdEOUDjH!^C!zk_TG64hwL8z>UfTWQ}N)Yav? z(a;9UDJ}*s{{v~Wot7213c-);wf+KsU$zR#kHy=Bx}73}_>L)vhSt;3XkJ*Gsrw+V zfP$I})@-NAC=|jf89HwZZ8a~yXce}bpW@|jFmP|+^;VCt2( ziU{g$p=Dcz!}PgTr1_*M(pyEw;5&ip3HW0P#`+1I2CZ8lZIDLeoyK17O`k z8T)~lWkBQ+jx|O~0b0q%Ulwe53of9*S}C577uLeCyjBb~o!^HR(Jt+SJa{Gez%CAJG{95GTb0fXwccLGZ=Hbc`WAH_n zGG&VeDn-<)RMDcs;tYJCWvz0=wJJ^ApfU`BPjTtTCvb72PvA(gHo*qQjUIt>YCFi9 zHLe>CS!>D=m&sN{jf4yd=TW9}H1lxLx#xiVZs|kwaw5fDx?)M<%NwrV0|yUp$q;QX z9%v?5L@WGM-fod!ss&uk_~b^XRuN+Zqj-nt%ueSg+0x_}1*7b(qKj9g(9p$nw8wP8 zY_kx5gYb7G{*KAFW1*b_-$lFNlu`B;>g_&v^Ph9`?ZOLkME6t7Tllr_%C~bwk85ur zJL~Ly=Aq{=Zo% zSE^CnX{G8x&8iojt9sK~)t9bN{pe~n0Je59ZBzqklNwCFRzv6>b(onHc4Y%W{-n@$ z!&i8K+vQIA08a{1yTDC&A#9fqB4uIg`6l@g_#Uf*8{{MK6oqIs6ph{Bfp&tj$89|3 zDSJ^$`Hn`|@^M=}u@{Ol()EF9|j-+Dc+Jg*pAIJ^H z8)Mb;fOE=&K7)G5XJJLVDwfezieW_qPJFb(LlSSAF`O}vq@fjyJ`7K45p=6p-JL;~ zfQ%ucCIFukDN9YFeC2N9xX4S090-sX!~P&oei}LQ_v{8pKpww)ArZ8Efaam{MFZkX z9x7i!3k>41zz_R}2J9C77>|13y=p8wbW_3oHc<~w6|(nI^e^5i2EZ%g7Fw&|S9uL@ zXYDb8K(p|+NK)da=U~KHkeUWR^mNKpGbmdfOWo8gI!w)`k*bmo$McbD9!*fk(F}Eb zKr^{8|Jjqt_&+wF{$sts0ta?(Tj)dot?Vy-twTi)@X1K<|x`%8PLpQ@N-6{^-E`|iwiWnBtP+FFO z;m{PwJSZM$Wq2D~Hx{}&8SH5RMqGu_E~1#KrXDIz{nQeSdMS-kr_flnjK-_wG)vXf zajL9@#uvVd9s!cQ0X+i8AE&n1uhL@PbIMNBOE9iXC z6rSLnVJY!>G8YY??IsRy6{AW*oOeW!R|;>M zX5|@XXiO_0i)AHbEj<=UZ^c^NpjI(@6U`fx8IGphFUCMmLpcQ74TOTms$4X6hrqsm zcKe*M(Nwo$J~X;kaa3mb7IN06ieifm#b|0t%9eebi=!bJjBVIH8QK-8Mqs;%BC45k zR12`Y3K%{WG_?j;MsT1yi)O2{X}&s-PEU{9v3+Mv14t)0#`jxtr?oyZ0 zR&@onsw-)yx|$wQu93xBUjxMP>!3vrXxbgj&+cG;cFVs)bo2b|l5ZNHT*Twk7NQjH zHZ!HMhp=99ux5xx(K`7z`8LGuiLd}T=qbg_-XOB~A*3P2IN+f5y~B<Cq4-0bj-0M0qhC4FQ$+i=)?5s&RpSs4yLN zG;})^;H7QV_^%zSBz3L5Z_B=SQ8(pw@T^u*ww|(C*%>!zCx06j8qYXU8aC}?Ph*q# z(&$N@&`^rsOrRu1Q%WNEbG)T=2b~AP;F3|BRll8Lf~JKi5-D+_5e9Y=Zs?a`j+oXa zGRzS`^kI-SX#;h0i*ctB4|?Rf1>ZmLof$Yc^1dob{KU0A>qKivO~I~;yv0g{wx zWE1^jmzV=5Op>Cv?Hlv^B2-zKI4&SUUb0ae@sc{6;5K%RNK$=8_8Q%Q!~ zAJ3`_2}YhC&G2TfBqNqy9L-?0T1-Q7o0xvhb}@rfu0Bt=#ntC8{w5`kkvBIUUgZTj$mfApF)lJ}l8^P;urc!ka9j)%5>1s2b zq<%#U)vuu!-9^jP-B^$J(8cOrx?J5y*Q>2`xB4yJ2gBojwUeGx56~afBlMPfjJ{Bh z)3@qrk)@sy`RezgvwBJNP=AE7`zKMN{wzkTzliDTRWVn+CQeeXi^b{QnKs`b<2oJ{Nyd{}vyq|A^1k|HPN-OBqpL$vpL~?4kC` zV)dOIp}v=6Eh)!YO3t+`d7>4P3#=5m%u1D~SrNmLdxYUobq%Lq?mI+Xd}hE2JRcA zIEWk41F3%^Wy5E`+T|A?~u%sAG1$&{s#+apa?Xs8fX|B(D zd`E`~5pxRgs;kJ)55;2e{|&L_=g8=TO_F}1ny#wg)j%%kkHIjEYN5Ky6D1^aJ$tN=GEoIoZ^^+rR6OI=1yiI z82Wb%{fAl5jNv74D;NVnHD>9SeFNI4yAivhWMzD~jz;=eJ&snmiU-2WgIp-nIznc5th0=oOJ zd0T;fZkAZ=;(5!bEPBhQETlZjLdw^2-|{I7c^+jUg(zM6`<8jOK)`PYYXD z){&HBjioNuQGs%ZMuI^V27@Xz$`R|tnf#4Cs7aDP7U*?f?RB5S-TNM?vD|NETc^gM zZjD2y<0;#kkkFy;wukRO=rAYfFa)#P?GWGk^g28Z0PuLbLaxl2o}h2ebJff?-O(Me zu}ZAT*s+}gx+Rh3?~VQu^YlZ>pDp#^_ygboZ=f>f z_S0G8ox7c0$8DbL_e*s1X*e*%ahtKz%bGBp<*6p|r{Y1V(zXOlY_~N7pw0xUW?_D2 zQ*W!123m7yq&1I5TgTJU)(Hk|SFKG9;`6~SlZPp3z#gNNQJZpTuo(bHgBQA91;eZ| z2;&>+YeT=)B>6M7?)VTU76Qj3x&lL*@8P*<&{lE$4sn9(1&$ksHoLE1gQ~0f<%vLs z>&O%*8BKJnI2j{{1CgBx3!wdKSpD0@0(Y*!&_Z|sqezKqj$JOsO)Lb#f)~N@!+RBM zIT&uyHnHwr)^sR=WWgw~7Gh!-QPipi!>FOYR-8szi)oUzl%`p=G{;&-Cs@mAk<~zT z)(S9+m9)lcq%*80I?rmRb=GRS+&a}@m3=jRX|{2gYlO87gn!3~0Ju}2_LI0M*#a$Us^$?xb4qiWuSJsD2XU&gV3=y(a2ah>cm)8b%5i= zIbunxSUMY;60(Qw6t$9!I+w;BMAkacO`ZwrwwgkvX#=B9t2m`JofVs1rI?^t1`IwU z6|~B*wvh=Jnx>$4WpP|1 z3QUV-8j@LtuF|nn7t4%hZx_o9&1AYXli4cjJeqOg8E$|tkA*;v%VMDptV%x7L)Pga zpfkv^&H`sR8{FwU>S?W|{?_?4#JZ4*sWzbuI0*enGpf>*z^qJ-uOVpm(hs=%3b2LRuR|rggLEW!(bfYm*pe z-7b!>HjDAr7ExjSQp~jO6!WZW#7WlOqR#q_XteGz1odFGkwN3VuXi9Q#iCX5{txO1HWE`yXN@X2*UVc5fD!_bs?`FQ+F>`5!4xW%3+7)|8|}4KgWRSCSr0$EHhh6khnI z;%FK|{feVu^e>tX5WEs#S+v9=ZO%619L1J|ZT%KKB zZG=y_f~|#MD@m7hnCZ7)d#6GLpTG-+K1z8 z8B8y#FOF!~s-G*vI4zIEl_)jk8&I6&Z=AbiV$B5zSBG z$dYukp|lxZRW$gGM_O$DR+|himLpE(Ejei8NZmqHg8=c2SccgNiKf*=)43;(Ta9IK z9gtM|K(RxtVfJg}rix{3qd1tb8!8TYV08It+QMi$%x(k59WZsG0X4BW8&6vxd5EuV>d3hrka zs9`OiZLEb1wiXgc0tj9=gDK|saGPR-$U|IjULzPHME8Lva1cy z@y=B!W}0T>h?NcVz&b`u@1X%uLjdSGxB<{}af3mB9%LCe4)ugn+r`h?^fc@xL2$fG zAq&UdtXHVOdYyV%Z_r`Zn-CUnLF;%MTE{zdlJyU09PiO-*89*hKBOzHkLXtGW30VT zV3vFev*a`Si}f%1(E2xhZv9sX>no9AeIxR%Z$%I5J2AleUW~BziSb&B3T=r>t;GV3 z-6owXR_L%;ts~+r?T8C>nz&r2i|cfTxK(F~R-G#z)p_D+oiAS2oy40uCO*;y;@|ki zoPD~hOx4|Gn(igDb#EEdePnmtSN7BW~=9YM@b?BhuA56*kYinyp$3TlaZtkh~H4(qT9j$+koY zBI6tWhBp@HH1RQi$QyiNj(ArMMJg46$$!O$4I5lr;bL%MsT0quVaRjnH1UYxJ!!N~ z+-G=CI)eURG(0Lpw9?PiaE8=yjd_&1j}S%ROBt{Xv+t`$fM0-P7_PC87Iav`l%j8` ztl&Gk7>oy;CO1_Tfydwz*e;I=4Z|?7X)5P~wAPlu^)JpZVb2`Gm2thWBo&@M#p^j5 z+9Z}jw}Sr+5=50`sFKWRChT(2vl#bCt5{c>70cQq(qdVy;-b=QzFl0BQxwYvv*_Y6 zhTLebVGLE#9P2hpiDqn|xlzcuY-m_4=XmKxy^Pg0@?-g34CBb}5{*XlVp)c5 zbc%I?@aq!m#QdTJ%P0%2-$IdS?hPP#xWsa-+o_yAdyaQf9p1}GX6C8UoQ3y`OG=}$ za4c%}JT5KGi{;^bb2K-W*D5Z%oih1VG#91#wDJ}j3a*!H_+&KAjO@Q%z_C2}n!aC7 z`r1sf<@+~ybw)EP2Qdqpfp}E#uV`d&lyz3~Xf1@7A)TMrMo|8`Sa=UT$Nt94cZw_U zp+JawFAA)cQyc~+u4Es^PJy2p*)1*wq%7StGtYonPRkKjp9Mc3-d+>D&5UN0WT}$u zXm&JX6ZHZ_>Cxq2I`0D z&Z;ZPaVvV&qd7bPyva#u=&>#PCNU2(ds`wzWe8UoOd&ml96gk>^lKSWp z>aP!{Vm*om>m%qeJ(}6#@#8?f@gqR}^n5W?A1}t~ z6TqWJi{te|QKhTI61_;Q!Vmqd)g#5lda<|y-+8}JFBQ9Wt$0$OB3{tTz?YAb*ZNTOOy+WnLwk zp;ui(M;Trar5kCm;RSiLnR*+pl}`^+y5U-#XfO3wqtp>N8k7R3&u*mhuo0$IDHP{y zI*#_L(cmpPP_;i%W0189nac~Z1z;RQj#-m0AfBlTooh^q^p_+i_9E3KPxp`tYHcUn#FHJlNH!asl$HvkH z29^x*Cc>fF-I*!gfjU1CsVs3H;uJ1Zli}{XfgUokh}aNBw5a=a2BhR))fD6IoUiyq z7Bn?EUroiCM`&tD9fK6RJLjtkY$Iw4$=M3OAO()>$Z2W@QZ@p|Caal9rQov(W$IX@ zQo+r~s#*9}N7(F)B8cCEWH$J*d56tM;|djhD0d%@raMMYn*+@Zhbo8JYA!QUTg`)# zwhzWlR!6V7m?<-nqCZ&1R@l?IkIQ~bv(j?DqkguUkAGidB>QOKL3_Z)<~|xii06Vn zc_5qwl0g*g)%&QNaylr3*ETj;J&?PjMZ|ZCQg$PEG<;NHiw2Gw{vjP#endtB={>Q+ zpM`e1b}TOEm$1cuK?x%8AU;C4{=C#KTn}Ck+tRuZ)~+3Fx26;uE5+ATUA5F?`RXbZ zQ>b!q`nuXF)gC!b%;C93xe{NGBL82+!axrNRfprRjy%LfkS6AGDxgW~iv< zCIY_?v#lby2x956j9BIlacwN45dQ|7LcZ$Dg%sQZ84zpP50~Vq5(u(r&L+x_Wk+)d zLu6$|qYF#2*5-nJegMuHOE1ld=tG&NI+aXSbsmchm{Jw0c%ZuD?w_pY2c=&&yfG zcO^Swu$C1*MC(eU3V6uF2~ydU0Z7N@BA4g)qBMVC6tedhrI6}-a0({Y35E?DvHvcK z6&FWiZk!rti|g30*E!aC4-I$ydY##?2OWWp09K2!JH<+Je$;_>3@!TlZDM^apA~k~ zqiJNhX`8zSF`_S+%;;;o*nr)Jm@4TU?OeD?M4~Zh|D6XfEQtZSXlGV-81bD4mvo60 z?15*#q%c|-D}ctc30sq0xNx*^;b1Pp_k{~fx~we(rrzK(7nK%9Lq)Md5TWS|)K${e z%UK=dbYrb2R={>icdVKMHuHMKdhDTYu^!PFkE=(t3v2y7V%?$ZW5znidd!Y>=Xa;a zy1O_y1JA56#kzBU9wK4H+`zU;th;NwbO+IOjdqI_ur@U>+F6-_SZt*&1Oj5wE*SUP z&d^Q1a4k^}EmXvv4g)5Df=)36%E5J2uuYs>!zKt`iP>Ch-=BFVhqa-+K0tX4ClRyV z`HJOx6*1OM2&Gt?C$@a|hDRA@G1j-IB&estjjn@l0-(ZxiskO1?y+10N3IV?u1f^D zh6rMaIzS{KZVtj2V=1O+O5kl{-qaSvfdf5jp|PwbtR3BSLy5NT73g;&^OYp`X*>AH$zjom7dnO zK|9$@@9Hh|z5b=pdW(qYUyF2om*}tW7DI3!sqYn~`aUrUUg%@>c5xD1MOAu-i0k{s zQvHBfsdtGr`ayAyen?!XABHvch`0***XhT_2K|J%S^rMlruT>~`blx8eoEY}pB20G zbK)ueJhYhKLxXuie25=$`dq&RE#_JAo&K}b`W0v~ufno=T@J#JDjlxhlwks4_{h>TdeQqi0Ep`s7)J4OH2U*mVTzLDSSZ&gI^RXuR;r}wGBA)$^ANi{2EsgpulEe?g$ zvXHGBLn&%aC{>*k3abl4Y3lM&y1Fiup*Dsx)jgpswKJ5Xo(@ITtD$`LH~l~LUMQwM z4i%^`LS59}P@yG4U9HSeH!CkxV08)gvU-GiTO&h#t&D3vLb3=ozm7yV4 zOK7OIHZ;t-C^X!x5A1(^VXAV{)i;b<{joBYbVpde*nkkz&0N&RuJd(f1TQ7`u(WXTbsffYJ9f zHpsRaeJ_M(A5@^p=W!l@)3!Qej$b#f_dBp);-Nsup<; zU1}YrP65`^;3hxJ=$`5De-s(rGlMo;eT?o2C$)NCEklhgjQb%~hg7yW7QY6z9H|_s z(;Xi1CFp>6ARhvKA&o|y=RuegVHVohS z@vdSik7KpZt?QLZP*$O{a-FZJ^FH`O^H>4=;R;;WtC6`68*XrCAG8Yhj!ya*#W4!- zq{!b3vO5~i?mX5abAL=Dgk=N;dxWi43e;Lm1wW>iSAlQPqWNS9P8j$64&la#dFv15 zS^x-OdI9x3^yZ-GAIEdT8h>AO!BcZA75*O^;%RX9BC4w|5H;{C3gPxGzC$7TSI}G) zTJ(ceV}k@%4#fTxcGf(_21hZTq!DuqD@}_00xM@9gDasKW5j)B;(1^HE=He(|(1Pbcm?YPWE%%kf* z!|?p2jgyG}#_vij5Dq8TRA*f63I^z+{kJ10Vm2_z11N=mjL$_HtRFbQfHd9tesK#2 z9J^cR*b2r#<{F^fQ*2tTMi3yO@|vLXM0ClOGjqhP(B(EEvfE-EcfY{pkQ;>Rwv*|$ zV?1*jUmZIdUlYZG_u-j}2D!;xhGzqXaYLk6@@D^^rq17`VIYd*?|MyW3U<*Yqn(6~ zh0@7nk`A53zro#2DV<#$3f;O%|9~!j?n1>|KHTGY zIgaB(-hJOolE|32-TUX(6`j-8Z|yJ7uxh=E?3)}V)goEm&NPQ#lD6EID&KRukahr;Rb%_h$w(3@6dr0n1wS~5>Fq(fNE1$>9s!Mx#kkcG%|l| dd(lz4jQ=UDFfIo#LtmZ21*t3%p`o|X{{?^TRi^*| diff --git a/twl/bin/de/matthiasmann/twl/TextWidget.class b/twl/bin/de/matthiasmann/twl/TextWidget.class index 617b756c158b96c7965c9e3f7f2a415a4cac1ed2..98b7850adf772810c0c6d7a58534bf9c4904f5f8 100644 GIT binary patch literal 8980 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 M|7rx(jW^W)KV?i9jQ{`u delta 3954 zcmaJ^3!GGC75|@^J9}qm?k@Y9+4nBX5(~3W78V4Sg%x)JB`hRXP*aiRl_G6KM#iWm zMWsD1i5P|y2o|BTxUgoHR+yMtYNn}$Nm?cvrX}+7f4)1+O#55g-*3-%?sw1oobP|X z+0ePMBYyDI{SN|YmgynP!UG|E6c1#Q`tmLmsUQu#b$={T`s^Pt+!ha9rA9!8KKf`zf zNA&HRO5WmL9RJc7k7|r>tK)x%@DAQp?msH?U)6h0$uTAGD><&@gp!l$o-|0{aCC zQ6SrvA>4GQWY&#ajFk>9#XJX>W1%BC=ytFO-2ync1fO&;9}65@go|y-b?^-=ac~6| zx?3}=r!ST~Tk;(#kcflJXhNb==->j-;}A!Rq}Y}c2R%~iU==wXL@E$>q*8`DQbi8C^>LVzYTX;Idv`0j z1sfgQqk(+^*E+aK_r9faACVD`)W}F%MmZ9bT1V=n-j)VO8dYW!Zg+48w(541gSm0c zab&bKJJ^o6En^&P!!8FqRQ4|AcFR~tS~S_+Br;BYjF+<$7WncZQey zq}e?hjJk)06b2^EoH=Sz zyJ%MS)vRp0S=l?YastfC2Ah?0z_p6D7GnwNQa-gzfuAg3$Hc!6a<7qGMjE0gpcNUI zjOFAUPYj>Jm3&egSE&v6+WexHlza!}JB@tQ=-UZ-I=~8CO%2stX*3_rZ)GvkzqFHrUe{G2F#gFD6gZm zCRa!0&;jJS8w+BLHmEsC^Lb3vr0A*I=r z)NIl-M>*AGnX{?*d8{#tcSoW%sfbq(8Zi%mk$odl(VUW9lO~&$aHS3c@P(&pRlb-| zYmHXMQ)+9|)Uy9q%`s|g5m#@tlwRE2UED}7?hR>nQpLRv*AJqcQ9rOX>ju>(RH(LV z7dEq+6AQhG@cK}dtY(!W8RZgv$j&AIWiQtOL0bcZ-Y}@!8?i1C^u>vZ$mc{@rCZ=W zSD4$Wwaa76fLjqHzGUGxK5sUryx8)SvE>s}7baq3r&W!pr`FxZqNWLID%%YB79ONK zIMQ3w%v2`LRAN28MlDN$(`esXRFs1l8tFm22n zHfD-TKFrLw|G$~iWmoQ5ua)&lhn0&D3GU1ZCQCg>MhoH5+8FdcYSG5yrCbBHoA78 zKvgNiCD@Oq0J;<|{RVj&5GH?+ZXYA}IAQz=7VJq>^V$-_Q<#9K(T->MVSScx_Pj|X z#tK$0&lc*ONaSSz;WMMUsYG6Y3D57m|PP+Ga~nXowWQ4YPvr4Dabhwd$9&GW}hE{|A|zOeIj-wLj#CdW&Idy@#H$#I*D#t_tMPapALn *z)j-y}T0#aTRx8}T;Nc-N#l zhXYhexX^0bw6-~!^yXyJo6jWO&evYjD)@b>=rnD{7IFc@X{$2K2?(<*C(t4F@ALi` z(mRN$(XsNXZaw!=qwpT-G5S5u^M8U^aLUBwee`nh0~*u69Q=@+e%Nw&T{&~a_|dWT z%f^e0TISp33B0P{T#t9-718)vt)&Wj-Y^=}5YX2jNS+_3l#ez0k?1K?Z=(u{gHj0lBU-5(pPq8B{1E`O>v28N{wjubPzQe(+$ z!YHU{zZHc$~a3B1N3|bYP`hH9{d*uD;ZYy-=q!P9a zMO3O#A;b7HYB;7z4Q9wF6NY!iIyW(wUQ?`SX^usIyc?@mX4%DXbVABvd%Ls~QH#EE z*$EAyA8nLMckJa`Psa@?k)||9WoeF>TM6y*-mPBThN_M%=0=MddqMo0;$Bx(7@z8A zwjplv(p0D!hx*YjUIlE9!`Ue~9Dz)xJC=jcLa*a6OvYn2FV$D@F1=jZutwUkR;Hyz z6HkjK2lxY@Y})3?L6cEC~~ zNrmGTp%d9M9W^r3xb+Uh$RrAkL@)NzmDW85|7ilU&&GW=`gGlAho2I;^rGS8?>+|~ NLopBSX_+#$_ydaiVpjkF diff --git a/twl/bin/de/matthiasmann/twl/TreeComboBox.class b/twl/bin/de/matthiasmann/twl/TreeComboBox.class index de063197c962d6e112bf8dc582a1f94907578cb3..b2651ce95edea90de69ea22fb92ef4cbbb1b6ffe 100644 GIT binary patch delta 2177 zcmZuzTWnNS6kX@e)J|un!*p8Ou`L~xSHVQFq5YDWG>FE6s0b+1QeTJZov)vodNs=gLA(nUx4>EW;g6U2J+}IquXdfKATgSVQ-yjvjc(^aY-YS$ z*%~`l)ID(iiM6P1Cm)|%_88V{tiU}QPvA*sbv)nNjZIpmF{Ckw9*w8*jK;IvLmxJ4 ztj4`sRjZ7~%Xmd&B~~f4h%;x39ZB12s#aN5qg77TYV>2b#+%sfT!`o5do>QKyvACr zai-~9;4uBQ>z3xtS~Uv&eORM$1fOcWjlH&lR!!pier~H~^f4F;K zGd=vbPJ~z8jxH!HWv(pLph5z}_X;pDW@Svw882#9$~G%+V^;d+3UNkQwP@s5H8~l3 zKG!*G69cN(2~{m@e1In@`T=(0K|I8@7xj1;kI+u+*Bkqus%&2`&&ms2hDMwBkV~V$RJ!0^T3c`e$tG$p zB(pP1UTZzCwXWC4Nf?025z7(~24_R^Is%U*>-tK-Mi1DCjd+T70t~_`Px75rB1rDc zMo}0dTk-bNeZWCP@SZP_QBPSE&zV9{ zQma?iGh?!zLs!(Zh3Vpb+UU-oiEAdK5Bt!iOl-vqf_8%G=B`o^9A&!?B8g)@?I}-t zN?MC3iE0|w5*ynt$;EAKx3NRkZ4%fQ@sgq5l1??33S#JrGT5QUc08T&*^c;ZO9|MC zSB>pN`s(?@TMYFnRAS60H{r=m;5EEXgu*TtxwN|8hdhlb822G7JYAuBy(rH9;uw*)yUxAx@R z{%C0a-(`^D{G6-D6bQ>RDqQ+vCeFSCW<2VmFn~jTkS-DqFHrpmH zrkPom_vrGj-UwxV;^~b*T|@(k>73)-@O+(Z>MUjW560$C#^5g#;38|%V@=|y882X~ z$e<}kfrEy%XvuF4_i?)XG;Pl?q@f&60Q*9bQB_Ftz~^!{)?L1BdCrIULEcagv(f?FxxpD zPCEN6+c{Mea%!zaL}Lk-DinE;b=qPz@nyJOs{l4C6wKb*m>s?YcPdQfXM;UU0UBjz zZ)|$JtZa>KD(ap&|HN8U*(t_bYu00(#$8yh@hBd1R>h06%h;$@21hgwVU5NUcv9mj z?%^5qXspC4t+Fbo@e*FvxEm`JTIjDOW2=c;{UgL z`>@)Xq6>kK>1%;*Y3|XgQK;|1YK>2DP~&avv=y{!61VqqTQy^ivt8#RpHY&U#g749 zQb+jA4F0VX;gz@IHYjv3Z5HZLD^cQmEf^lNG9>1VmozISo0T^)D}8f?I3p}88u^ta zClkSEr&CVsR$WdgIlr-+Cu#ZtUcvoX%e5N~cmNO5PVCni`_5#(r;BG35a4qYg4m2G zo}=vrbj(GARUx_r{SY1&G;L;>Zy;0}LcG@PV&4?a=ku6!T?l(Sf*bXob{=z2t1gY+*1WMdca0(z~i(NU=Y@X6yI4P zg5*vsSJ4=uaQi4)#%tf@(;o4(v$$ORLZcms3chFBQIrPAR=K@2BCrn;yzdKS)KeD4 z)20xV)ak|bOdGGK@1lC1Wy*M;HoEg?;)?O;13q*$6PuZ6iDNL++)*upL+t#1q;S}$ zJ?&{vOIr~oQO&?wY-7uqT-?Umh4hWKhO~ z@!6lPzor_dZyBcV=>K~kI_{z4cmobmL76KCZRLul(<+L8z@_-nhph9Ebsq9fyd}tS zxwXgV_9sL0|1N_JCl@@zwy{Yvv*h&U=CEOY%jLVIVHRtxQ;c^>&W7JrwvJatbd=%#)XR~oJColKv z%;($0#S}BkiXL6j)f=I#1D@Up)HzHgF`aXq8=i0SP3_eT|H;_=#TcA60j{v7Jk}IG zHRAB2A;6k$sD<@`>b7;Vov%XNgK}ag| xxnvR-f>pCXQQ7A_urP?5xn9fKxQYJ^EDlGRq;}lGwTAohS6f+-aDFeO{{s|dKR*Bf diff --git a/twl/bin/de/matthiasmann/twl/TreePathDisplay$PathEditField.class b/twl/bin/de/matthiasmann/twl/TreePathDisplay$PathEditField.class index 5872d43654a49567aecfdee45c50d5af90689cea..38f6c967d6a01719c8a30e245ceebf2f49ef341f 100644 GIT binary patch delta 549 zcmZ9J%}(1;5QV>MCw4G5zd({=KuME8F(rgR3ltEnB3QF;w`C1W#LpujujmVa!~!8z zMq<$i=&Em1u|doPOGsFnx#!$FGiPS}6ePj^-{;3aK%eb^fY}joa{;4#QaZ0LQo5k% zbHE~9bxS@ypJju0{PXar-7|D9&pY==Ib-_qiMi_*C|WFeOM$v&g;mQJzFH;;Eo-d% zY*@arY1yJ4e|K);A8ymME-zZ~sk;`cCYVx5iwMf#NTni%QvA;i2W7eQgu#C*;_VOz zj8Pp%*Qjf(;62IIxO|k5`9&^r6SDVm;Zly5Gh=6O>G?GM!|>HuQI&SnIPi@>yqX@6PVM$MA}3pBLDxR|XSyx&SghSWX1Zbea3wyE8Ee557i9ooVi SI!wq}5v0F&T+SKc^1T42oiot@ delta 646 zcmZXSO-~bH6osGnZ942|&ScT|=<(NIpT7XBJc_7teNt&D!m;dO;#1GV z8xc3T<-6OyyW`VJ$ZE*llkH7o`spk4VSS3&QKRmdqTyI$-Eof%M~nH8O~-w<91qxb z?6B*2NW-v_j!ZXgn|k`%4%G?G8r+M+;oiZ~aBy_^^1!gLwER4MW7}pcJ+?f)#V>LF$a89T%WL2Z2_X(SfDV+#erj-M6;2Y|GqF9d zmSmLQGLe)rDqf_Ni;U`O;FORbQu+ChTCGrP=49g}s{<6W$Az&$(i#)A-iyPo!khKu zHWc%UX7W+K6&Yd1M8@PXGiNw@r?p1;tLU$xruM>EDyB@w1oTbFj;XR|>bbYMe8iye z1_Rn$(n#;JLaEaZVsyZT!sk=b{enT#8)N=I-oC$H=Zx}4Ghk8Q!mkm~<%%RMSA{Is Rm{XlrSJkgGt9n^j&u@wPXYw(N=&suoSfsNvmLzt~l;~C_gS>Mt+cTnrpnJpSk_*UaWTx8)pjqkS zgr$;n1!jBRsU#I`Lw;w9Cev>U6}6m3kyMl@nuC*3)_IAyd288~+YxV10*c!I&;ZlUymk(rCY2~4watA!=U7&vg7CvjSSag|6+K82P1_84-o zDotLlkG(Ycs@$#lW2q_}uWCr8tkJh>#O+?n>Tn0{qyh)$<1XCorObvpfo>M=QT)XI zX98UkZzSZtc-ioifdaKYWUT>`>a8{5$%C#nG(m#)GvFB}Pz!W8dh`2&F+~veA{p<>L>qA@#uhMq?Dkcz`P@gg(B6KIYPum(5@Yq87UF zpY147GVq{xU!g=DxdtbSW(ZdUFT8}0M!2%bRc5$?h>$_JGT11)87?WvYM-mxzr*UZ zJIq0#LrRUTM^VJk9>NL};NC=G&s0O)n|5^}4^rV_&o*3GmS+2Lnr+m#<$sL9Z7!@y z>-Jx;ioZ1W$!=fb*+*GAk1`m=a8`OnwY#uKT2UQfQ5|H^htk-(c-{e)n>6%QZlr5z MxHs4GD^E`U0&QztjsO4v delta 2317 zcmZ`)XK++i6#njRlDF^WCcEq=n}jfg5Hk$PFbM)0W*jsMOhVD1LLd|kAYgz13JO?O zL=o)p)L1AM>`0L&sDQow0B0;XIx1k{mx>h>qTjjuc)LQ_AGf`8zVm(Oo_lsr-#vX3 zAGYt@1>kIz>tHZehp@)RAUtm22?rT?QZ`RHSc|7+c*erB4s1Lp$Im->0WUgSt&{Cb z7S=o1fQ=R!WZoo)FU#l6vf3inTeGnZ+a0`u9U<&=@G6GACgbZe?2-t(#bJ+_y+g`3twyehG`10@QudrSg!F0+BE*eUm8cn=O)~&aSW4J*d>u`F;{rB zX#9;9g>sLh-CIuo(U{Q;qj`;)sd>=vHYTW24aoFc+QH9uP|1lB4_n$;)z3SU?3w6g4oB+KIYj2 zFwJO998EAViR7)Ok~9;or!gwt ziu{fkO(dg9WHk8^&^9)1<4W;6el`pG# z=JrGAf$MNRHN{bc`D7Qw0$N59JdT)!g|!xLIF162v|&e)!0wS)&+{Z=)Sxb4Cs~MG zS`@H#q{_C?izawMr~(48vlxI;d5icg_vfA4DCT`hyp&Hnfm>)eggti=ZZ*)eeZsRn z!l1atq#iIda}hX!DHd+CaQiU|2bOpgr{tGZ3B}}7Sjlgzkb~7}^m2XdJCd);-ICu# zR^fP6ov=!#tlqb($5Jn4wOEEb$-u$+xC?iCDYKzYpo@ij6hE>38KFz!^@Q9PFKaj{ z6sYkbYYdP)_ZlNl9(0Wf6C`Lq1D;`oS_m9RrLvio`?1_WUsN!V&`S$Sngx0Q`$ktP zlm?Z_Mpup%Yybf^r0#GH$0$nh09R57eS8Xi%%v+Yo56NOEp+1l*HNNm;6d-cLWQ-A zHKee(MPk+Q!n^U&NUSWzDl@Tyh%kc0%3!1HVq!@_R{OE4{X48qyTcp=+NIPO^(cxd z?IE-ofqM&!dZZfS-n6R=d5{VZd$!@CvNYRI(rlx?E&pN+?wF$9Y2E%yR`FNHKH2TN zdG=A3&Z88gDCaS+sCE~1Pb;beEUJSPeJCwjC(k>8m6RU9DmT)(G+fTL{CXv){{V+G BQd$52 diff --git a/twl/bin/de/matthiasmann/twl/TreeTable$NodeState.class b/twl/bin/de/matthiasmann/twl/TreeTable$NodeState.class index 8ce9370f191947b80de5abb089e10fc88f5a6e74..233704e3d947e60e5762664c033de24f048a05d6 100644 GIT binary patch delta 458 zcmX|-%P*W!7{-6!WgOo(XCZErOoo|3r4=he87*2m+K!^st#uiSsurzFFDxvqx|5v5 zPSSs&u@Q@=Yq4q4g@44hyk{gf&n-{hCwc$H{>Jvs{-6E^n%E5p=nskW!m0ragBFG? zyi^QFQH&@?Esxo7Trm+c$!o=3%WrHr74nK{YiAU*A!X!kJZIIsg|`+KY__QImlW@Q z?Kit>RIw~0$A8>Ir{cXPK~i&%2F)GnHO;J;BR^&i+_GZL2eML^pwautsyX))@ioml zpERG@(4Ws6|IW{CJOE7<5H{!3Ie-19Ds`TBk+=8n>hw2I%}*bnu7G^HwdzsmRp?Xb zHw;8E3>t=&N7NiOj0KD{VJK6cRP$ZH5bsq^8Kwhrm{I$KRpBtsO}q?G{G{7VOL*ze#a>Y)T~8&^#fb~G(iScS zi|%Vu;s0R0>J1fl4GG+=G`TvgR-$F3E^@1G77$e|@jKCEVY|NYmW~_lq(C^39AD1< G5bqk@+C}*Q diff --git a/twl/bin/de/matthiasmann/twl/TreeTable$TreeLeafCellRenderer.class b/twl/bin/de/matthiasmann/twl/TreeTable$TreeLeafCellRenderer.class index 3b14eaf026e3385087236df03e97c6a4f789f344..7f304f7b608b403c133989153a97f2c31027ea57 100644 GIT binary patch delta 1705 zcmYjSYjYE26n^&2W;fX^X`7NjnzU(pfhKK|8fsFg*jD6DMT&^ZwOm9C7B7f*;{A?V z*Bjn1s9zXu2dUH<8SsN2obfj}&8GXeAk`TC@I9+ZHGEIf=yOq>ef zQ438tEisSD*~cwDo{(fuitj1$Jsm<1o{`5H3ppPuVm@o(IXo|?Uy$vKCSDF9g;(V9 zs)^T3yl&!+`T2j<#cRHQv_KvO8-sY$`N7{cG>Ee{`j9d4mW{XZj)_?t@4~UsixoEB zL&nDY_`t@8_{hXL8y{n>qZ{id2JwlFPw|@VI)fo+IJj}Ni*hOokb)n&&}VOSVdt)_(Ot<5 zXl@2o;NFHtDQ@7i=v)crR;{8h!YHU71XUU_)r*8$fg$fKki?BBbEjb#tKGN`tF&6; z!fX{(24R&&kLq`0Vq^qzsm6%41|y8pa1++L(PyprN{KeOgUUA`1!_nX(mng9m8jIu z7TvR1VGFBTpM!cN543o$5 zj2jE2v)P}Z<&q1CUBWWj%YH|bEabe1eWda9AKCDj2*AUHGB_Uzu>;DcVa_B6;ZDW$>4`-9g}8r^d$#f z`>Cxor@LB%l;U4No9q^m&~O>a3!blzQk|?VsF-Ri$8n+ouDbz_gcD58TjhcM%&7_x zEMEod%Pye3WXL8FH4Y|y?NQ?h0i$}WlA>MOxITc+ui->Rz7`@+ zE5AqrXP^ViU7jN;fh z&k8<8Q4z)2lLZ_g5*HkF;lh8ybKGRBJ2wthuOFQ(@^0O_x9a=qtGb0l!x-Z+mM55CQaz8x$j0UPpn48zz+s2Sn6i01#uE+| z9MPC3_3l%Se4f^1QN^*t9CtC*mbqX~Lid0vlS(EW=JFY&U5yrSDzZC+21;SK$~ zY4euN+cxiCy@vUjmWlOFkA=N*f8TD{)ocy0Rn-~<}!W2NjYRB$A^+GnW`qwGUI`%0C?tj9I|RG9(V%%Bfe zBbH_?SCHja(Z*uf54GCFlp$3D-WIpM*kH+ohQrh4#HBuMT);dPLoU}A8$>rq)U_Z(n z#RM#00&C07(A*c*O*$3b*BEL_MfVF}Dx8YUvLwoCyWT!)ot21^Y&AL)W-GQCVUgKJ zF>AKdVRriXBa(U%OBj){ii(6Gws8lx!jLA^hdF2USdpWO}_ZR}|(ylR4@4x%LW~;STBaHHL+xOTFHOV|G(%_RwHPeZCn< zQYoDGFzS!d)u*eEc%LvYH@!hj`I!mOuSiL%VL@a|me9LYK|%KpCYvgnRJ*0otHb7< zN~VkY)>WP=`4v{UD9zOQLa983vOEP}G98D4FO<$=!52#FEpT5TPl5enmF4LZ{`boT d!vl26+8~v+@){jc{ns!?q9D$UIQB;4{{tK+)BFGc diff --git a/twl/bin/de/matthiasmann/twl/TreeTable$TreeNodeCellRenderer.class b/twl/bin/de/matthiasmann/twl/TreeTable$TreeNodeCellRenderer.class index b9e0cd66af1b08b8984524f38b87a37dcd95078f..bf56e97537b836de8a21b7b842e91ca64e5ab8af 100644 GIT binary patch delta 123 zcmX>peO7wIRSp($4NuR_*Ew!7t4?KLVPIuoV9?scpfHO;K$7J+1NUwQ#mMapO8d1W zS++8;X-UgWzRaU;t-y4EL6hkqgBeh@2}BQrIfEsT2h`0F!Qjup2xdhBSxjJ76hkxv LGl(_Wly?dM)^--_ delta 97 zcmX>reNuYERSqUmjmfaz12(f|kBC0|ZDy>Di1^8RjrZGA?6aV_eS0$+(h%i*Xf@ZfC4#eB&Sq04(wf AssI20 delta 55 zcmX>faz12(f|mYl#;FW*7$kuZ0;C}n<1z*|#^r3Bj4K(q7*_%5cE) diff --git a/twl/bin/de/matthiasmann/twl/ValueAdjusterFloat.class b/twl/bin/de/matthiasmann/twl/ValueAdjusterFloat.class index c5d97f1e43f4710e516f1b87864c1053dee592dd..49d87036f8a536aca735cd8521c272e7ba7275a6 100644 GIT binary patch delta 1218 zcmZ9LZ)_B05XOIdx9wiHOS#+YUFn^)QaEk*=uxR9h^V!ZLJX&XY4l8t5feW4gMK#k z9|fZ(=$jCuL5-%0P_b~m>y@h21WS-8q9B5bivNnnpdZ9UL*l%<4HwO3C-2NV^UTb% z&(7qI=5`DY)$=MN+Pr47n%6CMn|gw#j1Z4I9~e8vfjlMd_nTwSVNx9Jr3JM?jr#TO2zIpgppUpaiuS%-TV zu=vK|TfTER$M+ULIQ+|+Qaa!3*2g7vo1REqH8FXPIo5YiT+`<}+Itt>1F*?=Z`JVBVy3a`{E1Gsv zg|M5haK#-J7OGq{S@(>QNdf|$@j^mhuy3Mmkuu(l-S^A8Mq43Aj85DTt39(sM-qx^Ej!x8zr#W51f|38TC+OcdPI&onmv$|DUY0>R4m0 zIhQT7tW4Lw%i{-Bo>R$0W@xc+K1^O1xlQf|Wid^2m&|>QULt;3QGqijs=!&U6&91! z`s!XO;SdqGDLRfZE5GY`vi!m_e)W~*1o(5xGSzd51ufkI;fpk2H=yPMHT*6g;t%z4 zVpZzeYKP$ZPw8+`uK$wjR&{f7q1Q7*RL>=E&m=2C=#oGYLCN1Dt$#>!No`N|_4gcR tzBk3nf;Yi+C3>o*t3t>?*H_E^orIPK!ysXVSY(*wj2f03mWnp5_!q6n{N(@u delta 1246 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 YJwAkc_@3Y%H{ul95y2$?Z=s|4KfLpVwEzGB literal 1996 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 O;PRDTqDJ}#x&I$|cXH_f literal 16166 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 diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLRenderer.class index 5c4e5c32d429fdff745d8ae24b729d9ff53e7c6a..db7858f7f4b73f6b7e4b6144d0b50bab6d9c8c92 100644 GIT binary patch literal 20287 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 TZxm}5<>L>j-6&35l>h$#fzr}( literal 18996 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 delta 1636 zcmZXUYiv|i5XXOK@3wb$drR4NcWFyo3JR1hSW8TdNaP_^?h+t=xO3Z1M0K zue;gGHUm}`Xl%QiF*JE(%MQJ7rxtIxDPorv%_h6G*B)_bphX+s)MBp|Z)wr0k8IOg zyNBU)B+*Gki?>bodAOGS8h*!3?F(I_RBfwLV-2;twaD4vQ2XptiFYTO9Jctu9%c?V zkC+^?IBKsjC(JbY(c&207RTu}Ibrb=CrwUS{LE^L)BIv_hLFWN)>};0+8tW_s>N@F z6lrB8i%JSA=2aGqURoURZ_aFxaHoVECav-V)u{MK4mtHbWF2H2sb^!`?9c~Q8c zIJ~5KVO3b+udFI9C|_JwT3%53P`E;VMWMpN*0o9bs$WWJx%l0+aMt(*C8gn^V-$jn z373bf!}0yC7p>Js%^Km~1T`(#iHhI|=C@;H)njIFCV4;3>8S~wBz6V!J22aEX^%Es zwc6&Mp6cl&smq&uOk)u&v3jj@Mug<3cHSA&BJ^k@Wg~sW)0^i=?HR$V9b{FLXGE7x z;^{25k^Kr8vy}) z8Z<(B*~{xw>Hz5xGGb{NhLM$h$&w*eWH!<7|C_J$&^zrGZ*I+Y2FVP}lU^?qV&`MA z03Q|P@Gt|Y66+&ePc_3>Bz?VDT6hVQSjrTZF^xyLm*vc11(iG|-ZebVN}gjC>sd`5 zPg2iQH1jkqJj1)J;Q(v-m}mJ?ybkhwjWpvr<>Wt0aX|lLt*<19$HWjLp12(akv$zf6cxQYySJXGm-&>lWHbre;|>NmhnN zI_MKLr0?wWsUwTGNw!V&UyTSe^Enpu^8))C?3)ns7o9!EDPxJ+9{LSL!;69Ow(cK54 z(XFVSaEUd!$i?w$^l8EwxtFWaTD+h(2Fe)aIhzd~*NDaqXcmP9lMnFnAz6GRm3cxfwE3;6YpC@O4pVzx00;&%cBh2yTDvpHcXYboaLe_>O)YVldxx z6NkB#Bht-B<$8}v&v#4D9+w_HA+PXBdrn}LGVD`<<$cePA}`@J^4bMCD-Yv2rt&AV dI4_s>mt5B0_7lD8)I~cteY8V4>^bSf{{tg;a?1b! diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/PNGDecoder.class deleted file mode 100644 index 93dd95a95b6710a65fde5ba833f098e170cc920c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2662 zcmbtWZBr9h6n-vASO}{?6yFLhwy{D21X{HetQsOLKZi>akCL@``zE* zAMiszQKkbkb*BB^-_+^!xtkC$6FO)!bI#p+_uS{6m*<|%U;q662Y|2ea}eFQ(~1Ga zgZKm!K|Uqq+FiLe*@_-a1!*@er}v~vN_AhV@1;sfH6vA8K}NxB5S@6?f;lZ0Gx8w8G}a(b+w zxtwXGf@WDUcgu`9x|P!%-HDl7n;T|qHa&e;&l24k7YG>gT!F5JjtB%Nx3hZDHEgS- z;EBMQoSrpu`hvdgmK}Y{c6geCr;MrcEa3E=#EI1M{pnN{C0yA$-v6;11$^rT1~K~a z0Ifx9;~<)60)q{a%C2FSj^yvaae-6wu9kg1qZPe+C?G_;R(9=#ZQ9O3X2$ydM}*Bx zyvK+KRnAx>&BQBLpD3@dvy{n(9@mw=Vb)2u<~0wbMuR$R8kAgzWfu@ha$?>tJ6V0o zkaTQ6q|=b(vWi|@R-s{7#SMI;VhvdpQRGyN;A<5+)>UjEufmWfn^HZO%9N@gl_iyp zVS%gO?JzZKBerOj%EhAXxOy&A)E!Myvc^q;^M{taM2597Q8r9cT)I=_YkFBJL$77K zy?M>bnR;%lSH%m^<^@VBT$H8tOBGw#R`E)zQT#|Ue9)y52sg5?=MFDxBeS}K9VRzC z!pm1{7MWV;3Vsr}aRR6YwHJss+F0*umF8>~iA*Xp$9A@%yR!%Pg@GKy>tk@(bygeq zh~qXizBb2MGacdiEyK;`c^_Ge@X>}CWplC-+NPd$|I@z3wJWFsXIYtgU?O%k@_;V3 z`jDP;TwUZ>?IfH(N>p6t7qy$8bHLBGRjhCYUvfr!Tty#|`uQvoBa|qHsEH~%xaQ-V*U?=xy+uo8AHGy1x(EM00yELy z&^+)Kf#}XIlz~084E;jeNs6E-6p1=W8KGRKd`tO`65mBDHw7te6qRy{a+=b<^9~&= z@6frjk5K5$9?lZEYY*r4asE$k^?6~9;WVFzdB_Mh!KrUfFs*7lXQ*vod~LbBc$N^u&?st3pVjec4*4} zPqQnLJzRK$5QmFzpvV|xT<=YTJ2l@w^-`0j&M=BugfPdlEYSZ&mUG$jPptq~{gb`~ z;0yVJTpneJm6|WJI)1)ti$uEzy_#IAFZ?PA@WexmR7`6Tw_%KVlJ2+RCbK2U)8=Kt kcZ3X0B$lMoZDtm@#H{s@faqx9pTHk5c;_PjFLulEUycW;Qvd(} diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TextureArea.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TextureArea.class index 67ce662d9752d330399b350c6e2f13544ee26086..cb5e8c74cb29de21cf6d92e35caa11f13900af4b 100644 GIT binary patch delta 861 zcmYL`*-ukZ5XQgL+j6<5hn5-{p^s3eLuny4VMDPR?Ma0hqX1s4{Tg5rt_dQ=n; z7sOoz>yj9QZ$9|wf8moRJZTJZ=ETH@{`$?GnJ;H%MngYC(XV44M*xKJL1G7XGImL1 zVz+}3Y8ZPQ?8QD-`#Eud)j`G~NjS_MwGwqW!r@U?$5I2^#^kiru@wed{hIbPU! zsqhMe3a>GwFw8}7Fr+_wCVOKFZ}CpyJqGm;&m4DwKv)YgNq4xsv5L47x5(3da)QjW zk#CMxphsj?QX%F-P@KY3z(u+U#X9VbSc|Y&w|FO7G>Pu@*5p!bD$_9!SyTz6V?HU% zs8UjHqsmBmuz<7$k!B2+=zKL~3`bRVMuZCDD7_v_N!g~Ds zlt?D7pr3;P7GkAo7*8u+rGvhlEVlBHRi&|tGgf}MJ!1$6A%0`pFKTo1u63Jlz`NG8 z2a$maJ=;Ge$nE_6Qq%6HR~3?GOTJ>6Zt|yEbfQ?dKVFD+x2HC?snxV$K@%lotJyX0h$i;^K@uNDU>kjKVf$af C9hOo6 delta 912 zcmXw%*H08t6oo)Dk_2n6?^Z96?+#OAocSzo# zh3d~*9Oo?O6-8XI6q0Wl$RKgHv@qCGpeW*^rI<^W;fgVgw_N6m;i}~t*DW`gZMn%} z%M_+sX6bRBVv*k6QrzZ_<*qv4)8l;}q%044WO!_O!c)UD%X3;SZM0ins8a{+t~1&% z@zU~&*OoW5dJJ-&*Vi?M;^|sgnMcw8i;kIT<&m7y-*_0qNJEJyk6{!cL#cjspJnd7 zUzs_YA>szzwL?Op$1v6v#4Ez%D0j8-9%1RyU5Zx^mvi8m!%*_Y6LJ_PDjcW@q9TEs zC@RVb(P6yaLBa|*!nOqozu1C4lf)rS%=4Kn$^@>4Xl|m5ACtT?Iak`HGkcmCeX@kp z<&BY~gc(6VHyQs-*E3O^uc@MvYHpA!El8C?B>Ib_bo`wG-y|%edvFbjd+|9zcs6~Q z>k2dSvNc@GA0LEAq^dHsktn+1iLNH2S6J59(UOtwdGp=Pu6ZT@Lr(t-Nm9pxAf!7r zEEM&(impWCKgspHA9RyKdiRquy<%gOhZ{3IXFL<58f7>^cB<7|q{!gs2vT`E1~)^uhpWD_c>&4#_) zdXXuS7md_XH;*{8FEeUhCd8@pGI})K*A@rtlCwu!_mESLxZ#*vI&?YVUVnO=^TY*x zE*Wyg8`rFAkGuaitg)^y?M220L7}=TEVQgLg}h1%ZBnH)SDS{itS1I+sVsG#X{sFC Z8d#zHON+>|6X=9G5Leer zGG*1fW$sKz=G0Qri?Vkb4JJc#^V+0Ki<~|7X>&lI9%meKsk-8bYmT|&ghx&pYVyW8 zA6&4e6>k5Fu+D~VT8WHJfVZcV T+AXr|20Eb*l&i_tNPdDp$HyZl diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TintStack.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/TintStack.class index 113ac93e8681c86d991d77d38d41b8f543676042..a9de5ffb4ceb79de510e4d353924e057dc70d607 100644 GIT binary patch literal 2334 zcmb7E?@wD*7=BJ^d!f7h5bSWw;x?E!0L3#ywGcDz1%jpWix)7 zADoGQjB$xf;}YXH6aOgV^PYR#RdQoOlk=SOp40c&^S`=8(c05Fe-2_$i|4}Hi* zb5EasC#NNW4+WM5ZV7y3U?stQHGwtU7FZX^3v9^49XV|Z+!eSdP)MMNEd$#M=JwY5 zqwUiA&ZGIoMFo{t=wGY5&6ef1N|tkMD?}Tf{a9hPP`0y2R;zVbwVFqk>t@n388GMx+- zs;<3te6(+Sd)B_go8dzJz;a5KR~0$9jM95kVQ%Vd!HA>2#&Pp-$8Oq;>Ak7xvl$>O zI<2DBXh$OE6c(oP{GHj_z3>Fq>Q3Fuo!MIKK=c$Yh9>13CEtyDgM3%)){Z8hr50hs z-&Xx?MWL4zX&r^}{|%F*8h-jbC3fq_-hrL3O6>+ZeK1?I9$O|Z;j)Pf7&GxEMopvy z#s%IIxQH=@%vst?EWT~vzKM@9XJSWSS71*djTsZ4pk(4xfzJdUpk&~46JOxE!jMFj zbu71%-QKU+2W*K8VeSJO&IxCBIq%dh{nJ4aUL_c&dc$@(QyYc3Iks=b(a|h?h07f4B)<{{#&8~^PUT->g1d!ypzI+amqHPrKJK$yf10tGKFTib&}Kk9k^&@GYS|&d}p4%LB{@ zxIxP|X*s7Yo%jD8SfZZJm){kvg57ZEUOX*+G`xge&FVXja_7f-Ql`B7`;1Fxy z#M=i$4nI@Brz^i@W_b%ESYi9F()$`_ahut#cjdPfL^Z8-)d+)N9|l4F$)I90vCSuI279XW00VHef0zzjd+Y(2kuyOpCqor>YhQ04hh<=AQEa;WmP zQ04e(<-<_rg-~VVw6YVbyvWgN53FB@4ErKV`iGv?q<46FO`qaC4eOJ^)5x>hZ+QLH zfF*PdkJ+Q&YCryPWjZCwbV{_yR`)$NS$XN>lz5!b-X;avqD1M<5EtLG(|*)0{2oko YT%DF6Tf literal 1904 zcmb7FT~8ZF6g^|Fy|CQ?AtfJ8OPdc`V+aOf@?}B;4u+^UND#S-@_-hzb?hu_cfBNi zs?wMC-&Czs+NzbRyjALtYJ2YN;#g>3u(WsP&dj~{oHKLffByaBF93^pVqpxohcS$z zQF`;{JDDwsxg+MTn0sRGn|NSxELm8_Loq92J{R-I!YbBGlojmlt@XX_`ufh^;?k0W zswkW*cl=)H_+j1gj$8$!8@R6&=Bfv7;m`@g7cHlE==gpieC-ti*FSIrHz;_o+fA?V zwB?7pq0@L-Vw~@O6EbDMugPzppQDgnZuzZnMIoJ=uJcs6bHE~_)t2vW9Ubnw!Bc17 zU)S`0=)^6u0 zXtrJ~KbinJz}B<4l5I__7so9XH~fKQKaA zEa!j0(BBx%|B2ye%x@iINR}c>@g#Gyl0BK2GWm(|=>dKZ$#R7%KcZHvn8F(7P{v(6 z9^kheqq?bM)dhl>!lyB)w*-~pMoqFOfa0=oqb*uOF8CNj~Fs^1$U|c)7jyWCxlXwWH delta 31 mcmcc1ewTfN2s5L}WKrfAUULR+MhgZ3MoR_-M(fFS%<%wqq6TdM diff --git a/twl/bin/de/matthiasmann/twl/textarea/CSSStyle.class b/twl/bin/de/matthiasmann/twl/textarea/CSSStyle.class index 3905afd286b05154e1754c3b992443e79746e824..8311aebcc7eb4abea1a78725187a9d3e2d72bc24 100644 GIT binary patch literal 16231 zcmb_j34D`Pwm;`KZN8=-Pyz)ii$z&V+E4^VrHGbNAkqcf00L?aZD<2&Qj(Ny7Euw! z6?ef6aY3C?p=w(JalvIq#}ekv=Is0S-n{qb&H5Z1-~Ze%TO}gQ@2Smq@45G$d+yoK z{XXCO=YhjSG+iBa(D%8+K_-W!6}EGygKWG`ej@S{m7kdWbjhsscHUs;jSk+#n;rZG z{$f6ViN9>;YaCR_9R_ca=d}i3C(r9;##V!GaPT(1QGRa9=k0v6AiBliTcvZG!M98Q z4uf~dj5`H*mq6||_#WxpYv=nMG>PvQ-~$Hl6yUCWbRHDQLk2%AkVmBRsKL9X^Oy|p zG5B%mJYn#Y@_b5wdkubCI?qVwS%beKov+H;=L~*cIxon`K7;p5r`zBc<@u7qFUzyX z;9hz58T^Vo4;XwU-p$If8mLFxP90zY#wtSVV@-Ro)9f0LyqH-9jz)+?%2g%Q1Lk%%hp`nIK&uLe~ z9Q2qPZm1%8jxf|nLya<2v0ypFR(%bTLycBrjFV+&8ma`kqsH6SSq|E#&bF%w z!nqDZP0Ux5)MRv2siCGw$7QH8yDB%7+d&5)AvM)d75Q{PO*7OvhMI1u8HPI7Q0EEe znT9&wP!|~LLPO0mRHdP28|orM%`w!)hPuR1Rfd{tsA@yaGgM8!ny(fZYN0$mhPqUq zi|neFiI_}JDCCb+2Yu0~KgyJ|xUq(5SnV3$dS69XED)?%=!>@3`8q3^@|yx}Az!R3 z;%Az5;*8lADCi5dRW!vSflymz24rqH9Q6A_m2(8q+{T)!Mavo*=V8N!S})U*Q$yG4 zujuf_V(kH6w8Iw)Rm3&~D`NhQF<->*t7wR{`Xm0<+CVhs-PGyVJLP%2RkfaKCi}7) z&w_>CrhkEQPblVZ^G7tk!QPt7z4L0S8yc&;o`!lR@BahgUYuZ_za<>;#R6fAL#C&G zVNIjQyRcztO(Rp@>_8|Gn*(l@PFc!is}8q9219BCA%A^W$0~os>su8B#913|@dcOq zA_3_qfHv?8lAT<8QtnkZH8sUH1^p0DQE7(U5|Wf{jh1Ls&ykI^f@I2?$zOW%EiC+} zFsG^A?~g6=Z_3o43_9{UA@5L(X~HSs!g&Tof*y8WhLS)L-yFz50(N3mwvhFDc7Ohz9i}*VHF@MB5Bf3$j z8|ZF|`C8V(_Ou`o91;GQh9=3WiowWMb;Tg}$yp?pL1hN-a@P7cfwuL&U>DX|N1GeQ zsTxlSMb=ZKED(rNL{*B$sP$b;6IY&m)l#7a$IV$Kbd;TZ@_;SuoDXNB`7u8%3X!+L zA82bwBjLcbekSb~JNQGbOzc7AVj8U1>CKnGxR@@;!htC#rzT0dtqU0Jst%@U;X0Ld z6J#pRZAQCRuMTXi^@rMG?M#l4wrFTU47rY7)oZ*%22u-qzAziPr^sp!KnH*^20X)7 zo~S9{WW*os3W9>OnC6~}U8eg((Io=v9y?S;{=D7snYz)k)Jl&(o znheS^RK;>Rh(T}@%L3w>R-YEzPElb_+??qYWo?(988P zCuLckb!~xOb6Hn7CS`|1d(-N0FdTvBh_tOj?yzz$f>etI8l9DUdOrAK!vY`ErCBGX zvXg;fWp>ud7REX79mANKPm|r*^6MnR69uY+qCR%xg1J>pBeQVMGewxdtMNA)l#+0RF~t273VOW_4$Pk z()(43fR>eQ?2C!lk?av zHsot<#r1@#f?NP2T8-MlWoUp(0-+l9QV1b^$mnfLwK$>JAapFGaU5;yI?;q3$%*UFvSTy2n)a zs{8Efep5Z5c8YcEGS!3XA;jCxji!27Eanj&C0(5NQQh+6sJnTTsUDNAuzHVfOf%Kv z>ItyU*A)w!>PcyjS`u0t3U3GrBm9v-ONmw7%K4vCd*M>DnM}%C=z7|&o;KAp>RItl zUxD+!B3fpuud3(73WtOJflxazgSzL{3&N3oFp}i1n%lD3e${PPFPiEl^|GmYRIgq2 z$=p{=Ucd`Ma#ti+inB~Hc^=o8>=B^Uy243GCrV9jVlPv1HhOhX7xE53Q6%>$HPu0N zh-r9N;`CZMOG3ET5#8c)rqMGJs!$T~uj>lnqOxRlI8q{8O%dL}Grnr7!|F9ty{_Ic z)tmT%e!xK%PA;EZ;@{Yb+6jw%u@c$&2rhlHk(Od*((z6>N2WI=)k(Zl@=6!H?Tq;C z>Mc{ft=^3M-z%$LV-#g~wD+$69v~SEmT#iLqqQ8jDDPH@TJJ6A}|NDAj9=`2A~{ruFad z@9uxG|E2zy`+NF(`}_J|=|9kau>Vm1tNn-jUpufz47QxN4G=o ztR29z4gR)(q!A^bedr_Gjy!PW1}xI?-JQAUvzc+^sUv+yp2RIp;w)X!DE4tj+u^)$ zWfk8MzcYSU{Ozj$6t)U6n{D16Yq`p#Sg>}#t+3`jUSG`c5KVBYmZ%b z?D}I{kKJ%=+p!yu-E?gGvD=Q_e(Vk?P9O#k*aGQ=R|Ny>g2L zt)L8y>oY>7(#O+pa)26x^>9D%$a+lMeK6dH)TphZ7EejA@-Zpdo|+}YPHdZHEs8EH zZyPw~U+)is@TMBPwWxvfw37J~=U{oB4@t6I$GSgzUp3dGkE=3jjiV@C8v651=A(ts#n0ATObsJ@xZy>Jgy^&2OmpHqWoB^VE83 z;OBEXyP!h<`kifZBdFt`#9OH5#A~SG3mY0eE3jQvZ8Ki0EvT>46b#YyWWE)1LjGP) z^}uN+UMCUfh zsPZ;1ZfNpY@7?V4JWY#htCnNRGS56OqIcdx{e};S=T=oOTF}_Aq<&r!aVDs`p|$}S za}!U)TQ#@2$+H5RO*yILGT%Ia%g7dCuaYE64q&}?$g>hdrZL%cBdx+Yusfy!S0zcV zXXs}F1l7=4O#^NLvc2cY^bN^7Wax<23hSjO^j7z*Q(7aQ#Cy@aVB)m{e2xc9Y(aTk z1>$TtK{cX8hGW5q4=D)zhCL9S7ig1rCbrUQ(a5acTI?}e;e|(Af|jg;-`^<5$m$V2 zvj2$E&$w!GMArs7o1~{M)nFGnl?iw=O^n9t8kYDM- zHqjYi@0O3NoPv8Fcj^3-$DDMe)2=KR)t3k-tG2An(6GcF@Tr;%XwRpdPLc>qGM}Mo zQ095Qm`~ohLtzHQDjkf#H!J*V2d!V_V4}UIegVuKhMRbooH2?O1+nlFxkahgmn%tA z$()l(P3joLk*>1Ztc#^o9x0lYvKN6D*G;bn0=f@RGCcY$lvPwrU zz)3Pls`JS$dakZ_#dhY4%I9=Q=9(*tuY10YOxdoxvTh;_i6*|b&^L2JaYo^o`04_i zc^j9&#bv%1O@5K_sW+bqx0At=lli9H`Bk+|Kx~KmhZnEK3*3`>QE><9Zyi8aeM3E# zf6g1hfvdpOd^q=-##)c8HRaLlT?miAU?GhslfI9y%j`5tu04q9C+I2qDf+nZ7|_Q( zMyme{jH6&q^<_S4@l^lU=;P8Q)&DK}xV%aAWxh==^K8Yd|*Slu3qB(nuI^# z*8x(9reW$i^q**%)+G8b`fv1D?uzg$2bPP!PQRT!_qjJY(0s%a(KSJ8sh;ik}Z`iTCa8QPpWW-}ev%o{|F z^fCPtNBaa=2T{&(a@ujHZf8CZUnSy})H-j@#W*iy!XK77NA}RDo#b?t73TF&ad|hL z(MzNEmpR9z;C2f>)`E}IaEBJjnfsk3Wj!>0Cq&duXF*73?{`kHAj1Hec#tM72Xt}| zmF{;=u?B`<0RM?d%lA9o>Ge|qso3wFmY#M_H%+&u%}7r>*P3=-dfLoxI^UXhK^k~r zH_ftumFcy!0l8?ub545N#ocs?HLWT=Z7v|7q&f|mXF+Pxkogv5K^n3U5S-tWhFoev z7NsGzfPjEHf$SpFS)U$iz|i9T&dbt}MhnuEoa{{xEy2*z{RgRFc~be7LDMiU+SW^# zzXthh4dcPkBBD#7XNzbg)xz%U;dL6Qf)>ND8(}<6&^s?(LQBa*%jhz?9MBceyp^Zb^O zm!i0VjnOY?Jsiab823gP3Vk4R-Q`R_|x z;>YO`ewiNSS7|pNrajt{N-X71+7ExoHf=vJ2+l>zvY#_()Tog|hK?FO6#vSP^^Y-h zs6k5Z<}G7V%i%h5VN41tfI#US8>3nE|}Q0?v0{nE|}Y0-ob+&H!F* z0mnFf8py+30IZs2E4Cee7V`WZ{=}_`dmM|u#rV4(e?5BZVq4C1n4Gk)$Y@`c(Y`v- z-b=4!Sz=2r$C6Y#y=2>IEXfsAd#NeQlDyB@C9$L=Q@vZD+Bka;wI&o?!i(iYw?Ur? zdYBJAETX4r96duWdKLlaE70t((n5L;`u#jzNiRTe_t94BrXBPmJwz{I_RIL~p|lum;;n~~qiFc>;m4`M&gOLd^AU}Kn&CZ< zrDnVhs72g|oPJAB#OF?gR;=FdY_lLG-PDc%6nLH1)VtqByy~O1^_Uez{DA}RNUsZt zdhK_HEr__}&Td)aauf5vnN9>7iI3b?u}H<%K0VeYAcK zW`)Xg#`e$#U@srrM;qsqqgO1;ElN{DTa8dh6o=4`(NOv(g5S4jG<_QZ@jDRScj2Bs zr1Oy)T|hrXNc<68(~sfAehO#xGdQH5!y)|=j^|f!EWd_Z`VHLCZ)q3IVlTw@9MYN> z5nd01`I5DWP$rR+2lEgxdlwaRArBQ703lnM3|dL?pp|w3PO>|X(-=EDKO$r3@PAN~ z9WueienKYqSf)=;aU#Qzlo6DSEO!mKo{+cr9my`W#&|gvJ+>-2H zi~gl$&g*pFw9VjAmIxz!Scy_;^>=iHX++_*2(Fm4*?_seoHFFLlhkG9XU9i*F= z7u)*i7Rd0{eJS48L)l2Xxj!Qj`3rdeSMdICbQUtCGGs-PVpJl@n2WSx5fX|zIBPGI z^h$UfA2Yt9S0w7Z9WL-bHZ+e{BZC8Xxrj%>eV&AiGE(^ebr{p9!VG^5Tya!G8G zod?k%_<)g6ptJFu0-}EOnT {0-fyeV%V96jF$7jPUSk^v-)IX`v z&J$ql{1Jk(Xw^halU%wP$V58}TxH_*?-1if*Yb8cCFde?@CZ$Vj%5&IQjrUI5>M8# zp}gm9LNDIcZH$RbE6U;50umG7rE!@yaW`xNL&;poRaT5lUh^=M@UtM-v+=)OOrXg; ziKc>UNtpt5irk76xfOg4oRAbb6`JrIRBfd^ol)3m9$S)-`R8i>V?N@9O3a!GqUBfy z@o}1LM{Z+D;R1cMq!g}8NMQu5_#PzV_x8|zeRO}lt4zCathcm4msF785H6!4E>E$X zXhe$g5h=Rf!yNUcgP7-g2$g}!xKIqBp2s`>)MkIhv=#oMw;< zY&wT$>O;)2wn-ggM(PkVQtY3RV1GVViYK?>C}XuCax(-WE9GDy8iKeO2eD>VLU%+E z`NSUsL0S@*;KWrad$;=uf5%&cZ<|HPM#j9Vwz6DWV-GsJM*H1z8rC ztI3d8y6B7HUy7s1o~CQG3toJTcyaMYN}F4r90n2*Ewy$uHFk8N#q+@kIjpH!qJS5# zjuUv71FMXUb2)eF@@<66xl2czK`uLl_Fx}9w8)kAdzN<1g;7`27*HoWS{`IvVn<;h zaE`$?cp078CJgdro9Qm+!+IN2H#YC0BA4?K4H=~y2$MrxHaViL6)JS%)*iUcMKlfR zReI~`8C#=zbq+0nyznW7rJ=kU$|X)=ce(RXz158J#2H=X`iyn1^1NQ!Em83?M8%vL zNNw?#J45x-p8CDiQto_QFPxcN=q@*eIap}Vy0F-mH^W*x87lIGq+A2s(35aM@TF-t zl(b>X9A?pA$g>e#ZbA(4(s*7%GkGa3;$_sxm(vPfP7z)~U8r|9^A)I*uB4rOHEJ23 zW=kV{$#_`*BCZAFXTqxMxE@kjL8G`q!y+jd_>$7j-6`$dZD}W}u}RiiZ9bNyW!7Sd zQzY%6oC_(hR9X)C{RuA3PiG}Y&qV4Z`GV-` zj+9JxXi13i?BJCcm8h{@XAU_i17ZnziY#VQ-fpo zuB|z&>xr@AHTKX2F2G}j<&V zga}UJix7*GC~Pfvo_~<`Eys1;{!hn$%U~fTx-%d_=2Yw>ec~>L< z8jvT4zpf$gWkBB7kZ)u_KG2Z<49HOpiKigzGS0Nlc`SAAb!uH_cA0ZW3R_uf$Ml{0T{Hm#d>B^x2o2{) zQC#dsGWr-zhcljyORxF-5`xIfaA3VqR+thWzy%u$LOz6=&AJSGmS3Zn_;otWZ_xYv zCVh{O(C_&zI?ivSR(=O=>Rn`2U*|de9s=$Ayp%t{S4sUG<2Y~OV|*)rlON!3@e}-Q x-pAk3N+(I>7JMMu4o6AYZ4$3R3-2;{E&2+s_J?>nF-w$I)N%x7jl87z{{ZG=6Yu~4 literal 12155 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 Ce)Qx3 diff --git a/twl/bin/de/matthiasmann/twl/textarea/HTMLTextAreaModel.class b/twl/bin/de/matthiasmann/twl/textarea/HTMLTextAreaModel.class index c6b3306142ade05ede62871d7cb31e676327472a..0d4d921bbaa85f6ab5edffa6bed916ecf987fe53 100644 GIT binary patch delta 3240 zcmZ8j33yf25uShEa?ZOsNk~Xu61EV9BoGV%fe;f2i+~CO5d=X*6Nmu}0fD+uY|vsw zsx@*&YN29nv9z`VeJ<4&s#ZnZ&}yx1P9hq}S9!DzR~a;V#JDO(`BfxW4H~sTl_?S+@T@0sHZzMl(h!Fy0}Zl>r}GN!`)b)f}i3Zi=SC+PxvA>H`+PR=UODH%fo&Q8gY^?svNUUYCaq zwpwgccDow*gGIvPVYT>(#iJGxl|JU-k9gc7YVd?dHTbi|4uhQ@O~r#2f3bAbqIrVB zlOD~`&8H3i>d`FSd`3+_Yw?`HE{|$e^t_68TfAVAY4D;)4S31oWtG07T6>gxRsFuE zar{k}*H!k0E`QgJH!c2Q@s`CuE#9{1YH3H1|GzBW(L?{X_>aZA7VlXU8ock(O6;}x zKr#ET!T&s3g%9<|N6PKfxZ}>8`j1=5tR+AJINXJ7}ll0zShZ(YgHWGikTuUbNeAZ^wmPWVn;#VtNe} zZmL_l7{pKC=eQ5|bzH*z9G}Id{-N$UeoHuQfTQQRzvD6%?pfO9cp&D8-n{zSxsJ~k zDS9F-g1SX>uXmV+>1(s9vZvx=)f?pKB%N{yA?z^QugR+HGfP7m%%$S9ZV3pU;~`uQ z3e8{G;CLuk7(T~wC0DJ@D)m3e%D2PhkVIJN*JPLYgR>t>sX(PDH_itQ31oTk&Y>Cs zt$%#vkl~=nvf8@FdWSR6OQOaohmo>yHIHySl1tT{$S%SZhdRu0Jem&p55$Y&=h6XC z%AESf#-)pE=ge|Td0%%we z&kbprQlSfZqT@+)!0}|RF?^9&<0=0BoTBkl`C^H(s`|QxjgF^b5-3(xaPFkhQ)f&T zN71Tz%N8~cH$2_(B|JlY%migDsJ*7Pe`9S^L;q2W7B$w_HaWf&Q~b+wD=^D1%ggb% z#Y56b{yjw_&Bp}#gg*7(FB)z>6Mny7R#<#a=yN*g&nX@qJ48E03i`s| zT08=W69RD$|C=7i-fcc9pys zYL19|Lw8d;qQY6)Od%LpIl6<=5JQUWJ}+aZP4*#mhYK{0h(@YvAk?mbuA-49&I}6M zHBjBb&6M4AWXNuPhwRp7N+ZR>;I0ngRyq@z>IBaODp}%WPx~%a;i&+#FfEnGEE{o( zV4qCCAV9X1+qTQY#YzrxDZ>3|DDu!n@J{0fbQM{Mh_4B-Z5C97ZG(+@8M?_f2QZJL zcv6r`(g69-6QJ{wRBh0`cX{vJ-kDunshdF4dYrl^N#<#fW0aAk9Fd$LFG(W|@}-8U zTE}lAF9ShjFA$+ZBJ$G*9GYGr$%bhl%|6`>MC&^WzrH;-TK9jkWl~gQ>z$;DfyZ3_ zt{b`GiRlA#xVg6^ltN3X0)@iG=qBomBJ?4TrqRN{p~Wal31q1#qW(|~C+#o|eTDN7 zqbVp+D^luN=!dh!${uQI)0I5x+JhDDbpOfpD3!`E$&)k_{V5@kXP^dU!iD9tWg-TM z!H9Iz7z`9HN`Kyup}lekq#y=EqAnau@6jIFYI62Dl-yji2Y-vxIS|s`)W?GG5l0}F*(+wCd-QO0oqi`$bNlYVpROWuir%YhEveFQ= zM)bl$d-_@BHRU=tq*1A7hrgadlgq11xfqReC3?lflBASxFh)wHLwRHQrIXLY`GKW) z5TP8RI4%%-IvU~_FA?g)pNa{A54Dm*d`c!ySRtiW$Ulj<3n51J(H%E*LGENZOo2;7 z;j=;`#28CWC;7XF&WY<7Ya34y;=Z!S`i%IaD#nH6z4LFYI6oxMpZ`|HvF1zUXoL!= zmw4GJF!!T8(qs)ymr*i9fQ*QrJ37+7<21|>`68Mbz-$EOO9g^o zFcA$t9f{fvk@P3)LEFx86Mm1vM~#>n@VUK*|7@{UxN2O~)y zLmGy8Xz*7JD_JyOPB0eGqeAP*Q88_&N5V0hCGgGlV`xv2OtRO=#Qz delta 3239 zcmZ8j33$}i5ue}e@m~IU2_z(&ge&0)2_!&3AcQO2$SnpzPT61#U+-~t5k1|m2VI9^R++p!ukLufEgNHluJ%jHXZ1k`Rn?3vh zKTN`1xZ7fje%Y!a{YX9CqoMc)KUNp_s(719wt3i&pCn@kermDP;%CbKT$lTFx!=+& z2D?1!hhM1918V9)&Ec2zy1&`tA&)ZgE4BJ-i``0pWAIz0zw@XZdzAaVE`QMFVS~LE zk0|>`H4w9S)Z#I<__)QNEW#@NvxmRn2@7NJSC6LQNsE03PkA&Qdn}%|bkU-IvcWSR z&C<=k8|?RJu5Lc3rVm&gG&tl@R7HnX^t{Cj7Hte(^r#vyS-h;$BdYa^a!1wgKQxY4 zbvdT8*K~PZH~wkyFN=R$ykYSli}seDOyvKj#anvlZHsp-j$8cKqQKyUN9*ve#s3tu z_YB_mXahdbFDI4zP?u8{!wgP)v>ET}B2g47Wc~1wNB855R_9|6XYq-_ImKAw%EWn# zPnBM<_4v%<^CWzMi>h?V;Icf>D&{2n}xXwS7wmzwi*ms=4nSNb*fr*GK$65XZ=@TQ_j&ta&;kJ(3 zaeKoZ9CzegKhUNyGmkqtI!PZodXn}z?#x|4ef_kgBEPjY108pz!;bUmu;Ffw3%Jm5 zn&a+t6cntjT)7;?&+c;EgNqy&b5F;;xHqV?80g?n%?<4HUjG>U zUTS)l<0(AV@pW|8@ie~PaD|xU>Hev#g4Q?i3<-5e`E5&U9M6>KJ7s5ez0vV3o~;(= zfYO#kS4Df*L~E;ik6gB_rYc(NcrK>R!h#HrTMl{ob<)Zn|K_5o=xzo@9TNNqsQ1Rt88|Zc{2eIN3cUBdSsMK6OA!LgRvH zq^gD(Y|=nG(P$;k47xRIpuB~fExWCeF1uANvQ71rN{WSyj27X;)CFzS3HB#cGR4V} z=3N?sXA+nNX(cuzf-DN*q)f_0fNUwdahHdQm2Bith>K|;+DdRiO66*_7g>OaS0%7* zBUlOB2pe-9Iv~g2RgyKKAtz4d1|9QD^Rx5Q+g+jd0z|_l>JX<)gWQXh7N;zcTqZA0 z!wvGJb}3pvZIQ2Vmf7H=Pkd%)$tOsCX?|0^iMF@Yc6+mXx>wzc4XtuIh2v7F{5VZX zxXI?P+m=fno8C8z>${0kGOeUC6bP3@cTf)$q6c|2gO(;7T8yORge(OG)Elbd5T+R@ z63&x)SD;v}NHyo8CwhsMBeb3!3x*ZVyHxK0bkymddx-%#RSzfOhX^xg7Pb7 z3i^t{kTlE~Tq9hVy2;?`C!9fl$uFX+s)+$DnooJ+C=0!Rb(g26ysr1X-@6p2$_LfF-y42X-@%hc-F?-&X_+=^n8s4C zM3Ny|M=4DlN#f1-ZfkS8v=u`e)1{3VCRqfi4c(4%3~!3rQSb`oNK7L-4$l5s7swFy zQ5r4PQ6RlXc`f$y5`8O=E@fjh#x&L5lBAGpFjh*Vb9hJToa@G8f_PHgv;g`S!9=mA zw>^SM5)n($QZPB;Ls69CT$MHoDumP^_q#y`nbbv$>VrFa;F9cVa+ng38w&Oe3>RYz zeNPSyTo}>G)HrcM#64t>_2ux(%fxM77aTjRaSe`@gBLLCyITp1Dzq-1G%7SrXtmG`p&NvD6}nDnccGhw V4i>swXjJGlp??!POX#zd^nY$HWtRW| diff --git a/twl/bin/de/matthiasmann/twl/textarea/Parser.class b/twl/bin/de/matthiasmann/twl/textarea/Parser.class index 6ac3e25f39fb412d16dacdeaf0276df9aad8d05b..99b40ef37a10e32bc302d6947b69593f45ec5e3d 100644 GIT binary patch delta 4304 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 delta 920 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 WX6RUq*-KcCbp?_t`C?!V7Lvc}j4TNN diff --git a/twl/bin/de/matthiasmann/twl/textarea/StyleSheet.class b/twl/bin/de/matthiasmann/twl/textarea/StyleSheet.class index a87ee3323f1b8a6ac43f00b28be3dc43194a867b..a5f51cd5c9cffbc71c862a8c912f4410d89b2f4d 100644 GIT binary patch literal 10404 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 literal 6386 zcma)A33yc175?wcd-G;q9w7+~VMLIfkW2_*jW|IRBS<8m5)gw`c_hOl|wzzSR4iE0tx#K<^t+-#q zFLY$%0Syo8$iY_GJmg{Xub57d#`DDUBeq1{vhD43WkF&K{%gvQ$N!X0km7KF|Iro+csIg>N?(y1-$wVkzGBXx4n<_(bx$db7 z)kVxiG8Po5INF}+m9@c=1~ZYU51H`>GZHCDtO}PTf~yl|ENGTgC7Qy)s`_9sF}6p( zvKf+ZjagGqn#20gtf&n}5}`!X95Y@&&urwbs&8J+gm0OBysyTRw`+PR5=zVva28BF zpXMo#)>4vzm7z#*ezIX%Ft*TK7UoP|Wwgc&pKr!Oa-5n}s3`3*A+ioQ`JJ#4<&Kst_4Et}wKfw6szUJ(ul>&)=XSY1*cNy|nhoGXG&G|fsg zoaAvqb*E-((q2y@fp|?+`lhJh7vdKYm~d=DP^~dNPjp02G=D4@kA_!L<+BTpEt0KdCXPz6$7VuHUbzh0GtGoa zRa}%y+?U`K2g=QzjQFAI&oeA~Bl*x$K5~^%PrFD3&3=e+>2YYsx zX?T|&J-sHJLN~oCnvB&1XNP2*547&Z+B-?60Rt5{n~`p%g#M^+;0%-t_w5utBR z=eoU>F;`F_S*$op=08%Hqs(Mzn{?z@#X(kWC`Lic>qBA6>NIQF_NzTo73V~voFl%B zsBr}6Gm<=O<Y7C*C{CsYg~P4F9L{W>AJ9tRiO zGOnJ=_0#y+JDqc4Y(woQpKydHp1gov`r}Sw_(r*6!?{P46*ib-n9w3&lAvE zq4CFUA8PG>p%eMlK9^7PxqWH}h6dCWZ$J5{{4{>@nkLH6rz$((OPz(QmH)fv*ptOR zwH?PT_9_o@BmW)GPuhvsDf0O%>5Syb!JQaJUpwBGoBHRtH{t@XqHKgFm-%@Enm@;5 z%Wi3wqi;mE*V<|CX~Xb#jA+LR0kAP{JPj7>-1+Hd~klnGn;n~#;4*{E_al4^=J$d7o z@&Jbu>|sG_I5D8Nc0c7)y`CK?^r=3^Qc<%eTDz~J2>w<$TMy-JhY*X!Qc**1R;0I! zA#^EV4*x__fn3JWFwTx(T#aH>jb&U-pm+P}-<9<2bLquZbh2v8-Au$-G_7LIbQw#g zD-guBsKa`MSo18$tt_7IM;N;h!Cpl1G8*wJ;&=l|yoEKaT`y(Pc$rXexp3nOk&7$E za9kzE;A$~}uZm(^D^A39;uKsj&cZq|7e5t?af4Wjn<)K_BFLI4jGILiw~82A#9C|+ z>u|fc6?cdYxKnJwUE)D(6c6KW(T>gHN!%lL;a>3qTE(llU%bsdA7HEa1P_VNd43I83bfVND~y>lsj66F$*smn@IQFtddM%rt$xF!*)8KVy(SHo%zO$T8Rj@BGP zv4%_S|4xUhW_4i%N6rIq`?L4K;V5)=!L8v3-Y$&cLN|@!u@LPtn~o&HWt)OTxF3rB z@Hh@q6>$)w<;d1nYsLRu7p_DpFm~j`jfe})CIP`VW)=&1qes>!C zf0QweXGmk`QEB`bYsp>akF~U@ME6lr4(5g$@f7O+x$B*Wg9p3 zO&8D7L3R<5pJU3{L$rFH=(E>iW~Yl$Jy%FKx|kQwE2MKYGo{$+!UIPa25Gp`%?Um+ zYQj8~cAV7gBFR04MRK9kr}SE63G);1B6H45w8$$M$-tk4*O0e1e;}-ol68CVXaD zbPe<1B!;F84;TL?Txx}p0w0R4Fj6@lkE>~AH%BGxW4$Yd7SlD>^CsoTiH zZTJZ}IweyDmkm1ev! z+gTiIp4Qk`45DZpsye%-k>E%qc?ckn5#^8M_= z*Gw>7^o@gzk3%?~(vG3w#xVsH3Kf%t%Tle7JXO{jw=jiB%S=uyIoY~#spRB7O6uHY z+4nX#@4F=p2V*F`{Fl{z{_CIAjROopw8gPV8UQK`74VO0516p A6#xJL delta 47 zcmbQvHJxk217=3M$q$(gfTR$M9gqxUnJj3}z{}vkAjROwpw8gLV8UQG`74VO056>j A9RL6T diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ContainerElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ContainerElement.class index b99047fa17976ea8795e29f7b7da93843b665443..23ef97daed555f1a14307d7248c645bfe7b2af6a 100644 GIT binary patch delta 49 zcmdnayPbD~6D#L_23Cdx3<3-XCwsGcG9H;cmDQW^#N>xS_L<4rY>uoK7&sX&PA+6~ F0|13752FA8 delta 49 zcmdnayPbD~6D#Kd23CfH3<3;?CVR7bG9H~gmDQW^uoK88{g(O)g|} F0|15P532wG diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Display.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Display.class index 459cde1e9c9de958baae9e86dd233575e7d8dc1b..ab511387682291483271d650124ac12b509f6f44 100644 GIT binary patch delta 39 scmX@ed609%4rWHf$vc@1faEJ?J0PjalFMntz{_CFAjM!fc|MC00PbW89smFU delta 39 scmX@ed609%4rWH9$vc@1faEJ?J0PjalFMn#z{_C5AjM!bc|MC00Pe~PBme*a diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Element.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$Element.class index ab550321b33fdc62ab649f0ccb7d978f3600dd53..4c78f362f9490c8cd4d97165fa07449f062e2e1c 100644 GIT binary patch delta 59 zcmdnSv5jNHem@sHfmSt4}0QCI` Am;e9( delta 47 zcmdnbwV!JP2MeS2WKI?XAZf*72P7+5CJX8?@G|H!NHOR!s59s@m@sHhmSt4}0QI2= Apa1{> diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ImageElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ImageElement.class index 2341463dfe728a6131c3502620039f44ff117147..534d3407f77d6bc228ff3fd8aafdbd4e6b3ae4ac 100644 GIT binary patch delta 47 zcmV+~0MP&52;K;=EdvdX00jV#015z*01p6>lR5)k1(W~>0F{%R15g2+lkEdM0i=^E F1T-&y4DbK| delta 47 zcmV+~0MP&52;K;=EdvdY00jV$015z+01p6?lR5)k1(g5?0G5-S15g2-lkEdM0i}~F F1T-)?4EO*5 diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$LinkElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$LinkElement.class index b8b8e3ee64eb7b541c58e5a79c5603bd3aa2f1c3..c7b71a140b803528d9c6fb0f53f772594f66fdd5 100644 GIT binary patch delta 46 zcmZ3%zJh&2JR@_EtJ~%z#vDe@dkm}$_Zhet9!$Q@6u|g=vIes)>qns2r^#8&b^uNk B4p9IA delta 46 zcmZ3%zJh&2JR@^aYTD)`#vDe@`wXlM4;Z)@9!|c_6u|gmvIes)>nEVt=gC>jb^u&l B4z~aR diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ListElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ListElement.class index 57c7faab1a46cde8f8dbede92ea3ca6c84f6c0f8..e3a9d0d263e29bfab2c0dcc85652df19d8b5a668 100644 GIT binary patch delta 17 Ycmcc5a-U^`3=``w23CgOlNFil05`S;hyVZp delta 17 Ycmcc5a-U^`3=`{b23CeYlNFil05`-1iU0rr diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$OrderedListElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$OrderedListElement.class index 43dee3da33a1aef3f2d7b94ec7018a1b3d224827..73db5a5d136c130f1044a3fb2ad0a55717703ce1 100644 GIT binary patch delta 27 jcmbQoHjiz?1SU>a23AHk1};YS$upS(7`Z0DVln{$Q$Gds delta 27 jcmbQoHjiz?1SU>423AIP1};X9$upS(7`Z3EVln{$Q*j0N diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ParagraphElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$ParagraphElement.class index 02cb6b9c6e32e8654d3e03f561a11a697fbfd9ec..45bd03ef881f76cb818830dc62d176c7fe760409 100644 GIT binary patch delta 17 YcmaFI@{VPLHWTYL23CgalMR^c062dId;kCd delta 17 YcmaFI@{VPLHWTZ023Cd}lMR^c062{WegFUf diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TableCellElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TableCellElement.class index 9f25f118af184b2e76b0e0c9f8235c050f5e8c4f..86ae1e741460c7bf9813ef7541ee1ab63cfc42f5 100644 GIT binary patch delta 37 tcmey&_L*(N6ed;)1~x{?$upUJIAs`E8D$x`8099vV+vqYoNUi*0syl62wwmI delta 37 tcmey&_L*(N6edrt1~(SSvHLBVE$qt-y6(&z#b#$&%nbNz#zsL z#Gu3&%%H;?- D!TKN5 delta 164 zcmew@{9AYfJ2PYOW)9{sW?g*-Rz?E`PDVopVMb#HaYhpcMMiT5HAV{tZAME5Lq;nG zb4F_hM@Ab4Pe$9x-E19<4wD1fMJH>rt24R)SvHIwVE$qt-v`Wkz#bzQz`(;8$RNfT z%%H>=!l1(#HrbaWjxlQT8jc##IG|iSP%aTDmjskcVX$IMoovgQ$(q5y&X_rQHD>?- D)aD=o diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TextElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$TextElement.class index 814b9ff207a39f50e45bb0b895977e7731fd109b..67a3c86c124710900018ceed228bf66ed504ff5f 100644 GIT binary patch delta 45 zcmaFO{+fLQGc#`i11m!z12;nvg8)PEWC7*?#;VDQ%+8!G3~UUoK=HQ8Ynkl;^rs4A delta 45 zcmaFO{+fLQGc#`?11m!j12;o4g8)OxWC7*?#_Gw5%+8#x3~UT-K=Jm;Ynkl;^-&6I diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$VAlignment.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$VAlignment.class index 9329267db0bb8b7da7df5a1982a837a327345f23..e165683a0423fb01a5c8f2b4bb050f3919741b98 100644 GIT binary patch delta 47 zcmdnPwTEj1D+{C9WHuH9AZgBG2PDf_CJUM~@G@91NHJJ4s54kGm@t@4mSR-`0Qvg} A;{X5v delta 47 zcmdnPwTEj1D+{CfWHuH9AZgBG2PDf_CJS0H@G@93NHJJ3s54kIm@t@6mSR-`0Q#Q@ A>i_@% diff --git a/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$WidgetElement.class b/twl/bin/de/matthiasmann/twl/textarea/TextAreaModel$WidgetElement.class index 42611f08516de74623cd767d4e6220efd119732e..541a3b79421e191e75fc28abd75d49e7ead23433 100644 GIT binary patch delta 37 tcmX@hewKa17bf1d46F?67`PbLGw?HPn9Rr=#khHL46_a6_Q^AuO#s|43nBmj delta 37 tcmX@hewKa17bf0y46F?68MqiWFz_>MoXp4^#kgg146_a6j>$8bO#s}R3n%~p diff --git a/twl/bin/de/matthiasmann/twl/textarea/Value$Unit.class b/twl/bin/de/matthiasmann/twl/textarea/Value$Unit.class index b1a2cd66412a851c5ccd90f254e93e60f9fcf12f..ac74fed4eb14ef9ca2eee181aec0a73ff3d91d16 100644 GIT binary patch delta 799 zcmZvZOHWf_5Qd*~Y0uYkisdL^X~C9Kt55+^Q53a`_iK?VRw$7LOCyV#xa%))VY+bZ zUKb)HCK~+#uKfr858}*M5)JVzX5M#Z-no3|UFuh={d4#04`7D11U^@jEO0GgBH%`n z95>b6(#&l&cMQXZyGeofl;1ZL3=b4OG>jT*3KtDU!y|=DhA~53;bTL|@I>Kqz*7ge zCgyEx!L8M|cIMsQah*C5(%@OZN@v%t)TdbuIZZR>qQ5obq(uf z6QM)M&cfp)sBi*@$|xra5Ud@BLi)-^`5UL&-o7r?elg-X(Uj^V=`B zwKkI1f)$ytDpgJTSd(9cY~$JNtldlNbhBy+Na*wr&h7yBA52W-{l1T-h9JvLBF&xBW? delta 770 zcmZva&2LO$6vlt|Ywp{b+lHZPhIVFJRmM)Hu5Ke_*1@eWIQY%> z!$pT^rrmz^Vq$4^((T!)BS#|Um=9^jJzk|&p%t;8YY~GCMeJZ$=ue(&?m$GIehD8u ziWo>dDHPOmh9ipV`1hVJK8`5SAHVe8c5lphGRnTnY2Y z3nfm`#V&T^P?l&=P*3^;&L`Xzy!R40>=B!?wTARp*o!l53FEjno!Nw6{z9;VuMGDe z#y-hJNgJa&UFxD)Y&i~sp^o03m5ss;nR1g1x7f&Slvl*F)iJ9=`&37gQzbqJrS5V_ z?jPr{Sk*Bqs7iwJN5Xfu;je_d_TuD0f&3^f-H*c&CjP@V>*d^E$5ygolA~+nHzGmL zv-nrg=lF4Ns*v}xn?I9TruQ5E_3W0=%l6rLtBLQVO0{L2C1E6M&RhPhe6TqYKQD`F dQl&+mhR9CD9^<(5yPROVU|N_yr`cA`{QQzpfN0$VahlAUcpRurRaS zg_sU(EDR8s99T(M4HJKY|AX;;aX7!{eV+Hc=bW7DSLb7FfQhSyWTDELoNUP2aZ;udCf#&q)n|=X{gzFiEvlAnpKsKB>eMb9 z?wv8Q%WU+uNep56fX^^(Wa(ox+_!s)2}vg?{c(~r&C_tO;I`} zMhGagD7TmS!4iiobHobARA{owiFD4{2s821NL41c!~1w(>fxYQF}vZh_o9KkU>HM> zd~re4h<2r~us?Y&;@*%Hi8OgE5^ZALQ(Wgvb~&Vk(T9mW(o*~Xr+GuKxQwg_EwA3| Kp;<94jQj&|a!b4b delta 325 zcmWlVyGlb*5JlHD(c`^di};EnVj)Bjj3PF6k_TyW6QkyBUYZz9B!yVmrLh!2PGezV zCw5A#Eb;-i;$Qd;!8r^pX76FcWl{RqO3SkR20>Ze$S^zzICgnL;j7ex=Vww%c;S( z!I?pmu%hL1PFr!|a!JRfOJ~sc|5}zBWG6yaAc7)_ON?3KY?9FT>Nb!R*Aq7-Zd%-o zxT|`1@@Fr{40)C)utrfXB}tX3$TX>PLybG?JV>D@>GLd2UTE=7TkqSi;~hzM^`Bj` UdOG1WtZV(|tk@P2`PvxKf3>SSGynhq diff --git a/twl/bin/de/matthiasmann/twl/theme/ImageManager$AnimParams.class b/twl/bin/de/matthiasmann/twl/theme/ImageManager$AnimParams.class index 95107a2444e07d2402b013970c67bac437bc9efe..d2b29151658107ea0eceddde79f4087b25f42655 100644 GIT binary patch delta 14 VcmZ36&uE~EHbpR(81k(Tj delta 14 WcmZ37jeUtw(>Hq*Llm&(W diff --git a/twl/bin/de/matthiasmann/twl/theme/ImageManager$ImageParams.class b/twl/bin/de/matthiasmann/twl/theme/ImageManager$ImageParams.class index c2c1a65e4d325ea644d39ca2e99841084c585d4f..5d94a49f9a74d22fa30e4baf166572ebc89e6676 100644 GIT binary patch delta 21 dcmcc2ewls4G-l2}3@psd44lj?ljk#=002qL1%?0s delta 21 dcmcc2ewls4G-l2X3@l9B8914COrFnd0sv392A}`{ diff --git a/twl/bin/de/matthiasmann/twl/theme/ImageManager.class b/twl/bin/de/matthiasmann/twl/theme/ImageManager.class index 29f5766c9acac146aa29c26a57866b0243786dc3..143703ae94e7bb252416410c26be111b35ce4aba 100644 GIT binary patch literal 28300 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 literal 25155 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 MGb8x^Oa58^4>Xtpxc~qF diff --git a/twl/bin/de/matthiasmann/twl/theme/ParameterMapImpl.class b/twl/bin/de/matthiasmann/twl/theme/ParameterMapImpl.class index 8643c25945990fe47e9373eb49f9e00ef051f847..f02dd0f1c41bdb51f8876a8faabcc02d4df0724a 100644 GIT binary patch delta 34 qcmbQ}GSy{+hCJi;$(r)+{6Y*Y3=9l=8RQxEF&HuI-&`#}jR^pxcnK8% delta 30 mcmbR0GSOv&hCJiu$(r)++fP diff --git a/twl/bin/de/matthiasmann/twl/theme/StateSelectImage.class b/twl/bin/de/matthiasmann/twl/theme/StateSelectImage.class index 3bb77dced1bb03620e6d1ee4b86ef99f722f4df2..836d5e3a01724384f2496899be07e78f692c79c5 100644 GIT binary patch delta 343 zcmYLEO)mpc6g_X|&3n@}5t&vyXqybGlbM#5N!b$`v0zy%5}Pjk0@ARwl)JMOv6M!Y zg#>?q-(z9n&g;VBy?efLZti9N#~TJh?9)&dZazIa6J-iSjjqMH?r9up_@kV)V%x3I zWaz;0sqZB103K#wVH!n9{!8!yp0k)Ua~@@;J}Rg(cX37EPPNl~k6&QlA@>H^dxi7y z1nU;Xi7b!r|Ba|QhKk}bbkv{)wN*-s1y^k&t+ou}rK1Z~5mOIP&@6?~GjvRkIyuc^ z7X@@t#~v2h>P`Y!LX8rD_qE0*R TAd{}-=QileJrNPDW)A-VsVp`e delta 346 zcmYL^KTpFj5XGO9*iO}fwkT~m95kk8MTE^ z2Qmeup!7gZzAk zbqjxDJ16)54^cdZijpyOv`V4s)r$bZqjpS$Wr#yYL)8@CBNQ}So#+KRE-sFt2c4f) zv5N-!NU@K3?&weYuz*Fb_y^XInZX^bV}my;yqw84)MauEZ8Awzd7mvNg(Y?s#4l3X Ub}vdvk;=!VFZWce&~oYU4+pa~2mk;8 diff --git a/twl/bin/de/matthiasmann/twl/theme/ThemeManager$MathInterpreter.class b/twl/bin/de/matthiasmann/twl/theme/ThemeManager$MathInterpreter.class index 90818db9da459098dce3d8518cbf4aa509101ab9..7fbbd901bde1600f48031722e2430f9e528ae035 100644 GIT binary patch delta 172 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 literal 22557 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 yQcTr~-8)?RDxvlLni&3{>Y{}DhEk8Skh zl8wt4km!nyL0pyPnvDVs33gqg8?p?`G9p;Y#!ZaMGG-zjAbiWjxQ#qa*eJz>iAft% zxNTzEMiD0D#2phE8zK1!6=251T?HsO-I+`}+cBM*olVa!K6>I&X*b`yP*RC12lp}O zpcQQn8qwt7Fq+(N-o~mu*sBnlO3kI>)2YmOyp4CW_aPbCipPsXLJ3AG?OHQbhQ4nv**u|~|ILlE^D#qyzvPP1T zMf8W3YtYauJ!KyyE$Aux@qv6N^}Ijv!JlGek!^WX({fJJyau~TD3e=84>Ub z&}?885vA5KhMBZC8q0+vAxqC(hiL~Tn6@zE;1*^r z+;&ieX^FUFVctPRKFk8#wQz6c)l;8JdlmlW@P1Udc!&osx^UD*3tC;Yqt(m!+x+`b z?uCt*c^YRF5?+@-;msPIVFf6-ee?5E3#qw@#l@*b7kd!%?i=HjdDx93T6&bN z%V4t7ZKw^DE2YTYmF0dJj3z~?NdjQ>ABFZ-0XtW~kw>B%>JR>6Lp@GfZ|WK6^n%5^ zag4;TxuG7S5Z;k7#mNP^%QQDt&+Uz{MkA3;>kr+oK|ycymIJJ_tha39Bl%9~eShY| z?j^Fxmf7kllkI6q8&8r@HkZLEBEKGE4-?iXHn@(MQk$4W$U-0glrKNS05+Kw{Lczy zq5n73x{QflzI_o)?q=RHqCosT@>d9a;M{7sY^nT+6Mn3R=VqgD7UyWU`5ZNa_bt@k kz5S%BxtCfBYtX$0;M>tHm z*99TwEu6DZR4|v8s|vyVeCgq{)!!Z-&bX`UquGb^?xfMnc)?vV3L~8eJBXmm!8U;? zwmaxX59tmrV%EYX2bXch!6*(o*dgp*gxz1pm@kT}3Q6~i8Fpt?ySrk(s3itOu#{XZ zRpyf8w@TGw`Tm1)#fmh57NVR-+V2WRS zT6YN5SsNaGdS1mY!*yM(-nwpqUZ7e&`D9%_hy^DJBBNnf) z`0@XW4f%sanVR#|lz}4g*9bhvCI)|`>mAzH>e*X_)_85|jny@3)ObRTr&@!Pr=)&k XZ4n&OOOP}9tqlD^8?FzNYT(E}Cg5o1 delta 978 zcmaJVLP6;XupP^zeaph#P*pgcrT6nu?^2#RQ+F}{*&B;g0l ziY*~w<3bW8#)V5wNR0jrXQ7zV#j7cIMXpe)@w{QWy7JvIB*Dq$k#KiyxEtDW3 zm`fHeV@RSt6IV=JRnTX%GYTuul`@zZc5~{BUW03Hw^mJm-JRA3Tf&Igh+>b8N-=v; zWn&-q6K-P!qb6?HxQSafPN3aJwV)3m;{Mi>q1(7)!m)7|8Mj^kk@IIJoS8&c!Kmx0 zPbuuW?>uqhQ_l3gc#0J#lO3lVdvbPoVlq2E``F2h3pQ0hLdJ5g1~7RVDq>V3qC8Js z^qNTXJk@!gT0BoV^d^D|HK>I`%$+xqs?J?A8gun5HNc=fLf=R)kx(cv5)#deght0f z#wF15G=_;oCYlt1MMTGOSZ1>xr-Umr2&G*BV6?!g$l1)4baxUi zjQ)nm2ZUA_724%N0R4Om1KxaB{vb$L3tDMo?pJ@TP0monGBCw$K14AdZ97ZpwjnxHG27ZU znrqEiZmanzo1d}y#s8W$c}~JiwncIZYg*R1fYwNK5oL@6kyY&eh|&cF=agE`|B6PI zP$7k=F}79G^2_<3lO8_0in4c{q6oz6vlt&p6l+@bGJyOy;tImNRaf!gGB3*q$2SmktRw~^a<6GQhIBi$4%8( zL(Q{NRa|N+RkPMS{RQ47%K75ux4!kAwbssBIe+qh=Vy8bI~I$%vmlC{D*eO#ZUfDOV%rJJNS3tK|AvQ6H0VTZh(8F80# zC$(GHqrxV6dzCha>|?)hK;A*ALm`K02|2=1l^hE=F1yumB4jLe0Vfqt38#fKA!j+K zhVzZH@tPdgN7&G(dUtN z13}uw6T`;z^WM_W2g^q)4WBHZ`J$GumT!7#0ShhP>2i}3IdP(M5L1(zl-uY>mvG&=GyP~SH!82mk5+Nnym?-Y8<`sI>qOI1&FRHa TXN)CGjA9r~D2V11CUX7(S7elR delta 657 zcmXAn$xl;J6vltAuk=1%uQ4%D6J4mR)C3nSOhh;82Ex+Bn207-yRz2$S`~z(&hvy< z5l0+wo~??2q9P99JYb!tjT`?06Nh`^=6ApIz3-fxbMtQSNYO`RA&sMgHw_VUA-VTA0 za;K7OzFhJwAKcC)jVj90x=m^l9ag&tZ;8=BP)T*vAydea2GnaYD|Mf>VOi zK4&;94d-P1c^Q8})J2a=9+xGP_qd|Cs<`G5txjbVK{`lSI_TuZ-M?OjRv*wFjv4E83D?MgP zWV~D8TfQOEHmEH5*Zw80Vus@oQY4)aHP#7ZpMsDynaL%~UHb&4w`8Vk_c3Lq&92?S kbd}C?7Mqc=(XPBrO{`_;Qrj7#j!E|P?Sx7@XJVxIA0aoJ5&!@I diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression$Check.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression$Check.class index 250530a627c66f9f76d6168ce7c76954aa6e4f81..e41fa5be76252ef37bc54af87d8bd5cea641792d 100644 GIT binary patch delta 476 zcmYk3DNh4I6vuxvyJgw!P>w>m%2Doax$h!SginCMkRT8QMW}BAhTvco3W>oqff5iT z7z7Fp2n>7-;O)|sW|Eor=Dq*_H^+nJhJ!> zIfrpY?4Yn+*m0ORUEK=Kto&)I5Ui*pTdI@6quLuzFlBIQFibNen?}6n4D&2FEE<+r zR!jxQIvW)AMX+z36f=UWmoq4uLZL*K#0eUs9au-p0MEZg`MDc(Nit2d%n9j*S8U!y z`%a5wslRTLv`Hqq$W@73iuQ`RVeJCx58Z$YREMau1u`VM&18)yr}p|oUa;| esj>`x^ox}y6G9lk$l4;2C*Kv9bA(UXiu()9#xphm delta 567 zcmZXRyGvX_7{z}x_v&@8<0JbpQCFkJ*WO*TiLXRg1tCoyjaW#Uz!uBm0|m1PsTNYC zvRQ7GzrZFMm|X!?NU!lM-2U5T?o(~9Uh%%Wr>gJy7qk~uGZI7 w?RHqG-NCyZ$FCOu$zT4z<7IBV4BhmIl;(*wp;v}OZm5Nkk_Tw5zGi~DO9^03zyJUM diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression$StringIterator.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression$StringIterator.class index ebb64b7a7c7a72ae588d21c386d1fd4ac96a2a0e..f8669daeeb01da3fab7f198de653953df062e416 100644 GIT binary patch delta 105 zcmV-v0G9vh5a|%G3Iz#$00aPj00{tplM@A10fLih1x}M_1q_qJ1#u0E01p6*06GAT z07L+elR*Y|0g;or26qXS01g0_01*I~lQ{=t37h~C0G$9H0H2ek2Xqai00jV~02TnH L03!gXlO_m5$bK6s delta 103 zcmV-t0GR*j5a|%G3Iz#)00aPn00{ttlM@A10fv)l1x^8qleh(Z4UPa00FMAV0FeMh z0FskI26q9Kleq?W37G&60Ga?10GyLK2V)7K01*J803HCNlcfiA4W|GF0H^>K0I2{Y J0IZWH2t%L@8uS1F diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression.class index 2ec190b1c6c4b6405386654befa480a865636794..8c0fb28f7ebe41deee26134437537f91173d3394 100644 GIT binary patch delta 1371 zcmYk6+jCP@6vlr$Npq6ZlhS({l45V#ODeGlm0H0TEGpDeD7Olr-S3#QH#z&%F8c%LeCHOD7LD9xkz&f?824J#Ql}^yi5`na zrc&{-NP8j?o$ib$Qx;pa|6v_@oN0?kc+}v8#bZ3Kh|H*B`&U&O-F!GUIBJpR34^CB zp5dfUJZ14L&sjXr3kv6naG$}87BBI##VfpO@tQ`h*VJWM>apnfaHKt%j3spG9f`z5 zLSwzIsJ}r};#}r5J12(YgBCN`c7ZeE(}ZsrylL?kQ})T6Yi@(ninTK;+*H$(il$=Q zV$%xGvg#a;r4(E1I+w|NQi=HZaBIDN)LCK|D}Ua9nXQVJx_`~qvblbbJ?I{_e{z2! zwS|RjwX0HQS0&5hkiRq*^2_v7%FXRkG!PceD-*a?B39d<8qMj5SXSZ|d7F5e$dg4Y z;dTP7qnc*1B6%*6H;Z?ToLbY^O5#HjxmK|9@JoC%PVNwYF6ue~gY^b2+$jc^1h-=9 z(Q9InW&UBuVhkRk69D;CJNFMBFffql&rN*C@Gvv(Hv9P33hHx?F^ zXDEJG8*0NDN?d30ly8{B7b-u4ry-P~prQ97xvqgP$({SFNn%Rh!I0dX3;1UVgz_uS zQj|?SL+&DFy$b}c`~zi$of%eMC3tR;P;V$)uI-lzW+=bPss(O3mwg=FwGXMYFL_(i zLv%61c3J6eSyP_wtQJNOy3L8Xo$_y@0o0h}HR-w9E29P5?ZOje@ zJgSB^+NJlos*+8T;$X9YSYo;1yGJxVusRB_lWWkS%q8+vn_42MTuX#xfU7)Cf4=4Y z1IrBN|8JV;*HiM-GEN~>@`Id)1uD*q;y|~^loLLa`sTCcYi0@JKB-iU+%I)Yoove@ zX`pr42q-MlJ+GX_aLwUzet~}()t!wAXDiR4+2Lzb!qX|)4j!OJ&ME=-Nu#Q>D;kuA R)gQwkw@5_?c~V9c_#3?i?(YBq delta 1281 zcmYL|+fUnN7{@ImafOV}iKB#sqf2tqvIs7?d4Az&RAH zM|9I^%+DK{353Lu7!TmKl8A0I-WZM1I}jiSRQ$^jD{H0DrHmWMT+Hkv0)=7=#zgJM!PPjXDtWin6MHb|O5P1%qM(wZjCuuYs(HWj9NnlqZSOY@(pl6K9I z!rpzpZ(wvHJ#uzjGol!*bbnGi+<8wrWcLlFPxm*DjrC5tZN5!z(A%Rr-C^&i#m$U5 zBzf53X~rDJX>quZjc$!q5^Xk%36p+?a}LjPUNhr6YmVP-1@?FTFFf0GM}D)(nq<#V{mTY^ztuzzGQ-RIEE+nP%b?=a?G z^!?`U)TeCk;J}2UsB&+W`@3H2-q7#WSQYX>6+(tb{&GqPml%9m`7Hq_AyH7SbH8*{ zyPpKMWojf7#V_^&sca@+h%90Y5w^0PZETWC0!!=$>DVmZLi!jk44*ybJ0#&W*Pl9Nr9YIRQpJDkE5@=}Q``ODnpeiJOugck_M z!&P(m7dR{hU&L2rUBjP@__C}yBAMWfsntnj?R?js;3;)zgPtgZxgZl;RW{AYX<#QC~MrR4F&{dpTrsT$dSWeQLC32JK zV$x*3CYq)6Cb72Ma6A^Cnx!}vPR_C>7Vgdg+@4<{o{Cj3Q?{6U1oPG(lW=G3?U`QM z7^GcP)gi(;AQCyqG>5oACzm+N`=q$cG3M#wBaX{l4_D-C$kNYs2Kbhfd?yG$lI9nN z`Bn7(2WR+`QKcADLB>@9=Trrgs!=3qcx;gmrIfGONqt7Bs^s$=krw-8%UwdBPZ(*< zQ3?Uo#3M8ab0O70BlUO$EWx8R$?RhS=Sb~#*KUan@ii3QBBa@)>{aqrgIc9jS*u11 zb!7o>ao7p|g=3e7S2NUTQO_N5AR2EG7!ijkO34p=iDm9ylE5R#h<=Q$7ezTsx$Bty zrHQ?Aa--0Fw8}cb{{Mlt<~pFD&`?%BgSHm1yjNJa=MJnt*Obg%z=tQVLCHRk3zA1D XS}#5-_stV~k6_2e-z#2;-+=uuO0Lj- diff --git a/twl/bin/de/matthiasmann/twl/utils/TextUtil.class b/twl/bin/de/matthiasmann/twl/utils/TextUtil.class index 712dea883dbe4d37938eebd2ff4be08dffba7b22..90ebaadd176e891a2f5cd392438428e45f83558c 100644 GIT binary patch delta 65 zcmaE(_D*d=1~WH9?Z)gkyqwz^n1PUiA#id6pEv7H22nqzCsoNG!hQW delta 63 zcmaE-_C{?&1~V6f_QvctyqsGZn1PUi!GCfBpEvV12GPkI_$);I8NwKBfucZhh5!ab N21XET^IyI~761` XYz2(flP9q`vogMji%LMqUOjM!w04 XYz2&hlP9q`vq~~>GfGXq#byHlPu&UU diff --git a/twl/bin/de/matthiasmann/twl/utils/TintAnimator$GUITimeSource.class b/twl/bin/de/matthiasmann/twl/utils/TintAnimator$GUITimeSource.class index 8546c798999bd9e12e3052a6624422ef2fda04a9..b5cbd2263f4caf3823706a421a223a7f259ac27a 100644 GIT binary patch literal 1643 zcma)*-)<8}6vn^fe`{~oiDL+9Oq`S!h`lD5P)eXlQ<9L-fRiGUh61Y8jk7XKoprQc zL)D8`>J_ihC*X#QR%(J&Bzi}sK2z23&3Z`;U5VbznK^Uj%eH}BH(lD#xa}8Gn$<`y+ z_5>rfExWpH`Tl*!YHwSvTlF6`tGAu4hV4%a;*E|Y7>*3O_SG^YGHu`T{B>vB7RYsh zv17Yij@!6pw{4%UyMok=<2wGVV5}6GD7>w_AxJE=wwS2D=D7B1XM5B3)~(GZJ^5Oz zZZ$V7&r$2pnILsrkR^!%SZj5>I%ADxm$fZ4t#;ey_Ql9cJHFFwSJxfapK~1w(DF{c zk%pyZ*LJnG%N@-YS$GcUMeqBg9c^tlpY6OmYQM|4+)N! z%8`UBqd@Ogwd5!j26}nVKCm8I1`0SM7*+FX({dZt)lRc{v&Fh>Z}I!Oz2iGAS4CYl zkjD`NM=@xif-?ptaMr;47$&rVMJyROh9M2}8mcqBa9v2TQd>m^I&HQ}TrbeH4D7<9W7w_#SNB(@}~3TQDa1r*hz1 zAVEPXDgS0(sY)AD3I>+4(k2;Kz;TWvT>XqVBY+d;Gf3qxWS=8;Cm(-?#Ghtm7fDlg zkuvw7{l=g;iX2Cw0WyVzTtZqdBQMh!k{OK1XZS#7xes0$B*hp$StQF+4@dEUqZo)1 z!7(0ilu!;i9#ctG!UQ=owaQDJGJl8u3vy~HBBd4t+rOJ63gW_rV300UNCP4W*}5&W zck4zMicLYm;zpr=z(1hk2QC!ss;KXs1axyQ=bZOG=RNm+i?)Nt*6)|EffJk$iI}m( zc?Lr~>Hz~B2^EgIFzeD|A;*~urJl9STNW&*4B5N)?lfD5a&pm>My{^hywz+k8G_aJ zjaK{0%I&7XTwdGUn$nHa2CH_j>eps2N!Mzw{;MPne{Ai+xNkX=?3jvQWFndLDzzeK zBL>+OG0sH9B$bHW>=7|yiF1-$mJRdC8*e&!k)>6)+#!P7WUk2 zof*}O3@Pqab{}6ID90O^`a24*@U9j84KkZ?eVuIFCHG8ypOWGzImHiRd?e2&aXvG` z7smL?usXvjt5a5SRH?A(a3cXSVgBfbXDM3_s9-qAp}voW)E5lMhmBv5Z$5k?iI;Boo;# zL8Jbbu-+wnOeT1$M(-thz+VDxr@-Fkr4+b~$_1u4ET-FB;vI%8)e9N1r&aN&v0ta2 PL%W=0pR$6^#a!?gc0W~% diff --git a/twl/bin/de/matthiasmann/twl/utils/TintAnimator.class b/twl/bin/de/matthiasmann/twl/utils/TintAnimator.class index 19335f03b9279d5af98a32da469c933358c06191..bb188a47f65a9b70d46a550bc3c4ef61ae87c658 100644 GIT binary patch literal 4696 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 diff --git a/twl/bin/de/matthiasmann/twl/utils/XMLParser.class b/twl/bin/de/matthiasmann/twl/utils/XMLParser.class index 64489eea5dbbad47576459e139a743b6aca7dc57..92e0bb03a3ac7258f4511f47ac7e474b9a9d1265 100644 GIT binary patch literal 11978 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 G$@hPxM_y?F literal 11668 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 ASpWb4 diff --git a/twl/current revision.txt b/twl/current revision.txt new file mode 100644 index 0000000..96196df --- /dev/null +++ b/twl/current revision.txt @@ -0,0 +1 @@ +25636fe4a000 \ No newline at end of file diff --git a/twl/src/de/matthiasmann/twl/BorderLayout.java b/twl/src/de/matthiasmann/twl/BorderLayout.java new file mode 100644 index 0000000..01b36a2 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/BorderLayout.java @@ -0,0 +1,321 @@ +/* + * Copyright (c) 2008-2012, Stefan Lange + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Stefan Lange nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl; + +import java.util.EnumMap; + +/** + * A Layout Manager similar to the {@link java.awt.BorderLayout} from AWT. + * + *

    The layout can only have up to 5 children mapped to a specific {@link Location}. + * These Locations are: NORTH, SOUTH, + * EAST, WEST and CENTER.

    + * + *

    NORTH and SOUTH will both fill the available horizontal space.
    + * EAST and WEST will fill them self between + * NORTH and SOUTH.
    + * CENTER takes all the remaining space.

    + * + *

    All Locations will have at least their minimum size and the layout will + * resize itself according to that.

    + * + *
    + * + * Here is how the Layout looks like when all locations are filled: + * + *
    + * |=====================================|
    + * |                NORTH                |
    + * |==========+===============+==========|
    + * |          |               |          |
    + * |          |               |          |
    + * |   WEST   |    CENTER     |  EAST    |
    + * |          |               |          |
    + * |          |               |          |
    + * |==========+===============+==========|
    + * |                SOUTH                |
    + * |=====================================|
    + * 
    + * + * @author Stefan Lange + */ +public class BorderLayout extends Widget { + private final EnumMap widgets; + private int hgap, vgap; + + /** + * The location of a widget in the BorderLayout. + */ + public enum Location { + EAST, WEST, NORTH, SOUTH, CENTER + } + + public BorderLayout() { + widgets = new EnumMap(Location.class); + } + + /** + * Adds the specific + * widget to a + * location in the BorderLayout. + * + * @param widget the widget to add + * @param location the location to set the widget to + */ + public void add(Widget widget, Location location) { + if(widget == null) { + throw new NullPointerException("widget is null"); + } + if(location == null) { + throw new NullPointerException("location is null"); + } + if(widgets.containsKey(location)) { + throw new IllegalStateException("a widget was already added to that location: " + location); + } + + widgets.put(location, widget); + try { + super.insertChild(widget, getNumChildren()); + } catch(Exception e) { + removeChild(location); + } + + } + + /** + * @param location the location to look retrieve + * @return the child at the specific + * location or null if there is no child. + */ + public Widget getChild(Location location) { + if(location == null) { + throw new NullPointerException("location is null"); + } + return widgets.get(location); + } + + /** + * Remove the child at the specific + * location. + * + * @param location the location to remove + * @return the removed widget or null if there is no child. + */ + public Widget removeChild(Location location) { + if(location == null) { + throw new NullPointerException("location is null"); + } + Widget w = widgets.remove(location); + if(w != null) { + removeChild(w); + } + + return w; + } + + /** + * Adds the widget to the center location of the layout. + */ + @Override + public void add(Widget child) { + add(child, Location.CENTER); + } + + /** + * This is not supproted in the BorderLayout. + * + * @throws UnsupportedOperationException + */ + @Override + public void insertChild(Widget child, int index) throws UnsupportedOperationException { + throw new UnsupportedOperationException("insert child is not supported by the BorderLayout"); + } + + @Override + protected void childRemoved(Widget exChild) { + for(Location loc : widgets.keySet()) { + if(widgets.get(loc) == exChild) { + widgets.remove(loc); + break; + } + } + super.childRemoved(exChild); + } + + @Override + protected void allChildrenRemoved() { + widgets.clear(); + super.allChildrenRemoved(); + } + + @Override + protected void applyTheme(ThemeInfo themeInfo) { + hgap = themeInfo.getParameter("hgap", 0); + vgap = themeInfo.getParameter("vgap", 0); + + super.applyTheme(themeInfo); + } + + @Override + protected void layout() { + int top = getInnerY(); + int bottom = getInnerBottom(); + int left = getInnerX(); + int right = getInnerRight(); + + Widget w; + + if((w = widgets.get(Location.NORTH)) != null) { + w.setPosition(left, top); + w.setSize(Math.max(right - left, 0), Math.max(w.getPreferredHeight(), 0)); + top += w.getPreferredHeight() + vgap; + } + if((w = widgets.get(Location.SOUTH)) != null) { + w.setPosition(left, bottom - w.getPreferredHeight()); + w.setSize(Math.max(right - left, 0), Math.max(w.getPreferredHeight(), 0)); + bottom -= w.getPreferredHeight() + vgap; + } + if((w = widgets.get(Location.EAST)) != null) { + w.setPosition(right - w.getPreferredWidth(), top); + w.setSize(Math.max(w.getPreferredWidth(), 0), Math.max(bottom - top, 0)); + right -= w.getPreferredWidth() + hgap; + } + if((w = widgets.get(Location.WEST)) != null) { + w.setPosition(left, top); + w.setSize(Math.max(w.getPreferredWidth(), 0), Math.max(bottom - top, 0)); + left += w.getPreferredWidth() + hgap; + } + if((w = widgets.get(Location.CENTER)) != null) { + w.setPosition(left, top); + w.setSize(Math.max(right - left, 0), Math.max(bottom - top, 0)); + } + } + + @Override + public int getMinWidth() { + return computeMinWidth(); + } + + @Override + public int getMinHeight() { + return computeMinHeight(); + } + + @Override + public int getPreferredInnerWidth() { + return computePrefWidth(); + } + + @Override + public int getPreferredInnerHeight() { + return computePrefHeight(); + } + + private int computeMinWidth() { + int size = 0; + + size += getChildMinWidth(widgets.get(Location.EAST), hgap); + size += getChildMinWidth(widgets.get(Location.WEST), hgap); + size += getChildMinWidth(widgets.get(Location.CENTER), 0); + + size = Math.max(size, getChildMinWidth(widgets.get(Location.NORTH), 0)); + size = Math.max(size, getChildMinWidth(widgets.get(Location.SOUTH), 0)); + + return size; + } + + private int computeMinHeight() { + int size = 0; + + size = Math.max(size, getChildMinHeight(widgets.get(Location.EAST), 0)); + size = Math.max(size, getChildMinHeight(widgets.get(Location.WEST), 0)); + size = Math.max(size, getChildMinHeight(widgets.get(Location.CENTER), 0)); + + size += getChildMinHeight(widgets.get(Location.NORTH), vgap); + size += getChildMinHeight(widgets.get(Location.SOUTH), vgap); + + return size; + } + + private int computePrefWidth() { + int size = 0; + + size += getChildPrefWidth(widgets.get(Location.EAST), hgap); + size += getChildPrefWidth(widgets.get(Location.WEST), hgap); + size += getChildPrefWidth(widgets.get(Location.CENTER), 0); + + size = Math.max(size, getChildPrefWidth(widgets.get(Location.NORTH), 0)); + size = Math.max(size, getChildPrefWidth(widgets.get(Location.SOUTH), 0)); + + return size; + } + + private int computePrefHeight() { + int size = 0; + + size = Math.max(size, getChildPrefHeight(widgets.get(Location.EAST), 0)); + size = Math.max(size, getChildPrefHeight(widgets.get(Location.WEST), 0)); + size = Math.max(size, getChildPrefHeight(widgets.get(Location.CENTER), 0)); + + size += getChildPrefHeight(widgets.get(Location.NORTH), vgap); + size += getChildPrefHeight(widgets.get(Location.SOUTH), vgap); + + return size; + } + + // return 0 since a child of the BorderLayout can be null + private int getChildMinWidth(Widget w, int gap) { + if(w != null) { + return w.getMinWidth() + gap; + } + return 0; + } + + private int getChildMinHeight(Widget w, int gap) { + if(w != null) { + return w.getMinHeight() + gap; + } + return 0; + } + + private int getChildPrefWidth(Widget w, int gap) { + if(w != null) { + return computeSize(w.getMinWidth(), w.getPreferredWidth(), w.getMaxWidth()) + gap; + } + return 0; + } + + private int getChildPrefHeight(Widget w, int gap) { + if(w != null) { + return computeSize(w.getMinHeight(), w.getPreferredHeight(), w.getMaxHeight()) + gap; + } + return 0; + } +} \ No newline at end of file diff --git a/twl/src/de/matthiasmann/twl/Color.java b/twl/src/de/matthiasmann/twl/Color.java index cf4fc93..156a56b 100644 --- a/twl/src/de/matthiasmann/twl/Color.java +++ b/twl/src/de/matthiasmann/twl/Color.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -129,20 +129,36 @@ public byte getA() { return a; } + public int getRed() { + return r&255; + } + + public int getGreen() { + return g&255; + } + + public int getBlue() { + return b&255; + } + + public int getAlpha() { + return a&255; + } + public float getRedFloat() { - return (r & 255) / 255f; + return (r & 255) * (1.0f / 255f); } public float getGreenFloat() { - return (g & 255) / 255f; + return (g & 255) * (1.0f / 255f); } public float getBlueFloat() { - return (b & 255) / 255f; + return (b & 255) * (1.0f / 255f); } public float getAlphaFloat() { - return (a & 255) / 255f; + return (a & 255) * (1.0f / 255f); } public void getFloats(float[] dst, int off) { diff --git a/twl/src/de/matthiasmann/twl/ColorSelector.java b/twl/src/de/matthiasmann/twl/ColorSelector.java index 796d225..9ad1125 100644 --- a/twl/src/de/matthiasmann/twl/ColorSelector.java +++ b/twl/src/de/matthiasmann/twl/ColorSelector.java @@ -451,7 +451,7 @@ protected void createColorAreas() { if(showPreview) { if(previewTintAnimator == null) { - previewTintAnimator = new TintAnimator(new TintAnimator.GUITimeSource(this), getColor()); + previewTintAnimator = new TintAnimator(this, getColor()); } Widget previewArea = new Widget(); diff --git a/twl/src/de/matthiasmann/twl/DatePicker.java b/twl/src/de/matthiasmann/twl/DatePicker.java index fe0ded0..9cdb3c3 100644 --- a/twl/src/de/matthiasmann/twl/DatePicker.java +++ b/twl/src/de/matthiasmann/twl/DatePicker.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -42,6 +42,7 @@ import java.util.Date; import java.util.Locale; import de.matthiasmann.twl.model.DateModel; +import de.matthiasmann.twl.utils.TextUtil; /** * A date picker panel @@ -221,7 +222,7 @@ protected void parseDateImpl(final String text, boolean update) throws ParseExce String name = monthNames[i].toLowerCase(locale); if(name.length() > 0 && lowerText.startsWith(name)) { month = i; - lowerText = lowerText.substring(name.length()).trim(); + lowerText = TextUtil.trim(lowerText, name.length()); break outer; } } diff --git a/twl/src/de/matthiasmann/twl/DebugHook.java b/twl/src/de/matthiasmann/twl/DebugHook.java index 39ab8db..1a9e08f 100644 --- a/twl/src/de/matthiasmann/twl/DebugHook.java +++ b/twl/src/de/matthiasmann/twl/DebugHook.java @@ -144,6 +144,6 @@ public void guiLayoutValidated(int iterations, Collection loop) { * @param themePath the requested theme name */ public void usingFallbackTheme(String themePath) { - System.err.println("Selected fallback theme for missing theme \"" + themePath + "\""); + } } diff --git a/twl/src/de/matthiasmann/twl/DesktopArea.java b/twl/src/de/matthiasmann/twl/DesktopArea.java index 6da2116..c3b06a7 100644 --- a/twl/src/de/matthiasmann/twl/DesktopArea.java +++ b/twl/src/de/matthiasmann/twl/DesktopArea.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -30,7 +30,11 @@ package de.matthiasmann.twl; /** - * A widget which reorders it's child when they receive focus + * A widget which reorders it's child when they receive focus. + *

    This widget's main purpose is to act as a container for + * {@link ResizableFrame}.

    + *

    This widget has the {@link #setFocusKeyEnabled(boolean) } disabled by + * default so that the focus cycles within the current active child.

    * * @author Matthias Mann */ diff --git a/twl/src/de/matthiasmann/twl/DialogLayout.java b/twl/src/de/matthiasmann/twl/DialogLayout.java index d094f74..9206fb9 100644 --- a/twl/src/de/matthiasmann/twl/DialogLayout.java +++ b/twl/src/de/matthiasmann/twl/DialogLayout.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -1051,6 +1051,7 @@ public Group addMinGap(int minSize) { /** * Adds a flexible gap with no minimum size. * + *

    This is equivalent to {@code addGap(0, 0, Short.MAX_VALUE) }

    * @return this Group */ public Group addGap() { @@ -1058,6 +1059,17 @@ public Group addGap() { return this; } + /** + * Adds a named gap. + * + *

    Named gaps are configured via the theme parameter "namedGaps" which + * maps from names to <gap> objects.

    + * + *

    They behave equal to {@link #addGap(int, int, int) }.

    + * + * @param name the name of the gap (vcase sensitive) + * @return this Group + */ public Group addGap(String name) { if(name.length() == 0) { throw new IllegalArgumentException("name"); diff --git a/twl/src/de/matthiasmann/twl/EditField.java b/twl/src/de/matthiasmann/twl/EditField.java index 5d024dc..57556d8 100644 --- a/twl/src/de/matthiasmann/twl/EditField.java +++ b/twl/src/de/matthiasmann/twl/EditField.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -44,7 +44,16 @@ import java.util.concurrent.ExecutorService; /** - * A simple one line edit field + * A text edit control. + * + *

    It offers single or multi line editing, auto completion, + * syntax highlighting and info boxes.

    + * + *

    The single line editing (default mode) uses internal scrolling using + * the cursor position.

    + * + *

    The multi line version uses internal horizontal scrolling, but for + * vertical scrolling it should be wrapped into a {@see ScrollPane}.

    * * @author Matthias Mann */ @@ -69,7 +78,7 @@ public interface Callback { } final EditFieldModel editBuffer; - public final TextRenderer textRenderer; + public TextRenderer textRenderer; private PasswordMasker passwordMasking; private Runnable modelChangeListener; private StringModel model; @@ -283,16 +292,13 @@ public StringModel getModel() { } public void setModel(StringModel model) { + removeModelChangeListener(); if(this.model != null) { this.model.removeCallback(modelChangeListener); } this.model = model; - if(this.model != null) { - if(modelChangeListener == null) { - modelChangeListener = new ModelChangeListener(); - } - this.model.addCallback(modelChangeListener); - modelChanged(); + if(getGUI() != null) { + addModelChangeListener(); } } @@ -309,13 +315,17 @@ public void setModel(StringModel model) { * @see #setMultiLine(boolean) */ public void setText(String text) { + setText(text, false); + } + + void setText(String text, boolean fromModel) { text = TextUtil.limitStringLength(text, maxTextLength); editBuffer.replace(0, editBuffer.length(), text); cursorPos = multiLine ? 0 : editBuffer.length(); selectionStart = 0; selectionEnd = 0; updateSelection(); - updateText(autoCompletionOnSetText, Event.KEY_NONE); + updateText(autoCompletionOnSetText, fromModel, Event.KEY_NONE); scrollToCursor(true); } @@ -382,7 +392,7 @@ public void insertText(String str) { } } if(update) { - updateText(true, Event.KEY_NONE); + updateText(true, false, Event.KEY_NONE); } } } @@ -418,7 +428,7 @@ public void cutToClipboard() { text = getSelectedText(); if(!readOnly) { deleteSelection(); - updateText(true, Event.KEY_DELETE); + updateText(true, false, Event.KEY_DELETE); } if(isPasswordMasking()) { text = TextUtil.createString(passwordChar, text.length()); @@ -434,6 +444,34 @@ public void setMaxTextLength(int maxTextLength) { this.maxTextLength = maxTextLength; } + void removeModelChangeListener() { + if(model != null && modelChangeListener != null) { + model.removeCallback(modelChangeListener); + } + } + + void addModelChangeListener() { + if(model != null) { + if(modelChangeListener == null) { + modelChangeListener = new ModelChangeListener(); + } + model.addCallback(modelChangeListener); + modelChanged(); + } + } + + @Override + protected void afterAddToGUI(GUI gui) { + super.afterAddToGUI(gui); + addModelChangeListener(); + } + + @Override + protected void beforeRemoveFromGUI(GUI gui) { + removeModelChangeListener(); + super.beforeRemoveFromGUI(gui); + } + @Override protected void applyTheme(ThemeInfo themeInfo) { super.applyTheme(themeInfo); @@ -470,7 +508,17 @@ private void layoutInfoWindows() { } private void layoutAutocompletionWindow() { - autoCompletionWindow.setPosition(getX(), getBottom()); + int y = getBottom(); + GUI gui = getGUI(); + if(gui != null) { + if(y + autoCompletionHeight > gui.getInnerBottom()) { + int ytop = getY() - autoCompletionHeight; + if(ytop >= gui.getInnerY()) { + y = ytop; + } + } + } + autoCompletionWindow.setPosition(getX(), y); autoCompletionWindow.setSize(getWidth(), autoCompletionHeight); } @@ -662,6 +710,8 @@ public boolean handleEvent(Event evt) { return true; } break; + case Event.KEY_TAB: + return false; default: if(evt.hasKeyCharNoModifiers()) { insertChar(evt.getKeyChar()); @@ -775,8 +825,8 @@ public void run() { return menu; } - private void updateText(boolean updateAutoCompletion, int key) { - if(model != null) { + private void updateText(boolean updateAutoCompletion, boolean fromModel, int key) { + if(model != null && !fromModel) { try { model.setValue(getText()); if(errorMsgFromModel) { @@ -959,7 +1009,7 @@ protected void insertChar(char ch) { } } if(update) { - updateText(true, Event.KEY_NONE); + updateText(true, false, Event.KEY_NONE); } } } @@ -968,7 +1018,7 @@ protected void deletePrev() { if(!readOnly) { if(hasSelection()) { deleteSelection(); - updateText(true, Event.KEY_DELETE); + updateText(true, false, Event.KEY_DELETE); } else if(cursorPos > 0) { --cursorPos; deleteNext(); @@ -980,10 +1030,10 @@ protected void deleteNext() { if(!readOnly) { if(hasSelection()) { deleteSelection(); - updateText(true, Event.KEY_DELETE); + updateText(true, false, Event.KEY_DELETE); } else if(cursorPos < editBuffer.length()) { if(editBuffer.replace(cursorPos, 1, "") >= 0) { - updateText(true, Event.KEY_DELETE); + updateText(true, false, Event.KEY_DELETE); } } } @@ -998,7 +1048,7 @@ protected void deleteSelection() { protected void modelChanged() { String modelText = model.getValue(); if(editBuffer.length() != modelText.length() || !getText().equals(modelText)) { - setText(modelText); + setText(modelText, true); } } @@ -1301,7 +1351,12 @@ protected void sizeChanged() { @Override protected int computeTextX() { - return getInnerX() - lastScrollPos; + int x = getInnerX(); + int pos = getAlignment().hpos; + if(pos > 0) { + x += Math.max(0, getInnerWidth() - computeTextWidth()) * pos / 2; + } + return x - lastScrollPos; } @Override diff --git a/twl/src/de/matthiasmann/twl/Event.java b/twl/src/de/matthiasmann/twl/Event.java index 80cf05d..2c73235 100644 --- a/twl/src/de/matthiasmann/twl/Event.java +++ b/twl/src/de/matthiasmann/twl/Event.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -501,6 +501,13 @@ final Event createSubEvent(Type newType) { return subEvent; } + final Event createSubEvent(int x, int y) { + Event e = createSubEvent(type); + e.mouseX = x; + e.mouseY = y; + return e; + } + void setModifier(int mask, boolean pressed) { if(pressed) { modifier |= mask; diff --git a/twl/src/de/matthiasmann/twl/FPSCounter.java b/twl/src/de/matthiasmann/twl/FPSCounter.java index ad130a5..789f2fe 100644 --- a/twl/src/de/matthiasmann/twl/FPSCounter.java +++ b/twl/src/de/matthiasmann/twl/FPSCounter.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -31,9 +31,14 @@ /** * A simple FPS counter. - * Measures the time required to render a specified number of - * frames (default 100) using System.nanoTime. - * + * + *

    Measures the time required to render a specified number of + * frames (default 100) using System.nanoTime and displays the + * frame rate:

    {@code 1e9 * framesToCount / elapsedNanoseconds }
    + * + *

    This widget does not generate garbage while measuring and + * displaying the frame rate.

    + * * @see System#nanoTime() * @author Matthias Mann */ @@ -43,7 +48,7 @@ public class FPSCounter extends Label { private int frames; private int framesToCount = 100; - private final char[] fmtBuffer; + private final StringBuilder fmtBuffer; private final int decimalPoint; private final long scale; @@ -60,13 +65,14 @@ public FPSCounter(int numIntegerDigits, int numDecimalDigits) { if(numDecimalDigits < 0) { throw new IllegalArgumentException("numDecimalDigits must be >= 0"); } - decimalPoint = numDecimalDigits; + decimalPoint = numIntegerDigits + 1; startTime = System.nanoTime(); - fmtBuffer = new char[numIntegerDigits + numDecimalDigits + Integer.signum(numDecimalDigits)]; + fmtBuffer = new StringBuilder(); + fmtBuffer.setLength(numIntegerDigits + numDecimalDigits + Integer.signum(numDecimalDigits)); // compute the scale based on the number of decimal places long tmp = (long)1e9; - for(int i=0 ; i 0) { - buf[--pos] = (char)('0' + (value % 10)); - value /= 10; - if(--decimalPoint == 0) { - buf[--pos] = '.'; - } - } - if(value > 0) { - // when thw frame rate is too high, then we display "999.99" - for(int i=0 ; i> 1)) / elapsed)); frames = 0; } - private void updateText(int scaledValue) { - format(fmtBuffer, scaledValue, decimalPoint); - setText(new String(fmtBuffer)); + private void updateText(int value) { + StringBuilder buf = fmtBuffer; + int pos = buf.length(); + do { + buf.setCharAt(--pos, (char)('0' + (value % 10))); + value /= 10; + if(decimalPoint == pos) { + buf.setCharAt(--pos, '.'); + } + } while(pos > 0); + if(value > 0) { + // when the frame rate is too high, then we display "999.99" + pos = buf.length(); + do { + buf.setCharAt(--pos, '9'); + if(decimalPoint == pos) { + --pos; + } + } while(pos > 0); + } + setCharSequence(buf); } } diff --git a/twl/src/de/matthiasmann/twl/FileSelector.java b/twl/src/de/matthiasmann/twl/FileSelector.java index f1f2963..8dd6475 100644 --- a/twl/src/de/matthiasmann/twl/FileSelector.java +++ b/twl/src/de/matthiasmann/twl/FileSelector.java @@ -405,6 +405,23 @@ public void setAllowFolderSelection(boolean allowFolderSelection) { this.allowFolderSelection = allowFolderSelection; selectionChanged(); } + + public boolean getAllowHorizontalScrolling() { + return fileTableSP.getFixed() != ScrollPane.Fixed.HORIZONTAL; + } + + /** + * Controls if the file table allows horizontal scrolling or not. + * + * Default is true. + * + * @param allowHorizontalScrolling true if horizontal scrolling is allowed + */ + public void setAllowHorizontalScrolling(boolean allowHorizontalScrolling) { + fileTableSP.setFixed(allowHorizontalScrolling + ? ScrollPane.Fixed.NONE + : ScrollPane.Fixed.HORIZONTAL); + } public void addCallback(Callback callback) { callbacks = CallbackSupport.addCallbackToList(callbacks, callback, Callback.class); diff --git a/twl/src/de/matthiasmann/twl/GUI.java b/twl/src/de/matthiasmann/twl/GUI.java index 5abe239..4ddff9f 100644 --- a/twl/src/de/matthiasmann/twl/GUI.java +++ b/twl/src/de/matthiasmann/twl/GUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2011, Matthias Mann + * Copyright (c) 2008-2012, Matthias Mann * * All rights reserved. * @@ -120,6 +120,7 @@ public interface AsyncCompletionListener { private Widget lastMouseClickWidget; private PopupWindow boundDragPopup; private Runnable boundDragCallback; + private Widget focusKeyWidget; private int mouseIdleTime = 60; private boolean mouseIdleState; @@ -550,7 +551,10 @@ public void setSize() { *

    n(!wP6%n5{hj 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 D7uQ~V literal 44195 zcmbV#31An+_5YhazTe%=<|ZK_0U~GkCILk5OG5~Ugn%3(Uhsu{fj~%N4p6k(dbCx0 zh^@AuwH_6!wXLEADD|op@19z#J-l1%(ZgP9QU0Gdv%BBTHyiQyM>9J+JM-qvn>TOX zym>Rg#R9nm9;tuz`b(9BksR&5piV-(u@6`c_A8)!X<( zJExt;uN`r{)1h3wi<7%K*v4?TJEB!TpMwiHZ3o9LaPQR36 zmvL~pCBDheD>(Q(=lTK%U*zCQ4zA+hY7V}{!IvHVEBaSCb`6)<8P~71^shNoqko;> zud{?qzupo%`TZM~F2V2Om)%_K28S-uZ{*-xas4Jv{x%0Ub8rg>w>orKzm0?MaBw>Z zd${CY4!+C59UREGl0ck#>jIrstN_Crp)n}d5e*vG-WS^9nYevb8UaDan@oOXzd z{fL9Zoc3c5?&shE4j$y-Ar2nq;3phB!kK@{u}3*L!og#f{y2Bf6PErYKcBMnr!D;% zj{eNif3E)`uK&`Z7Ja>?|B9c#cJycU=Pdm<{PH|Q_$@|b2&-yHmhU;oP=-sjg3;`)aUU8hj^AAdW_!AJb<<1GD{j2VP9 zLvWyRpmSg#i(zsQ;~>sy7RPK3oVbzY&|V4GaQRy{2RR(%a*)SCJ_iLH6ml?tgCY)! zIT&b(Z)F)JMk&7xvIKLHQD$k0xKYmOgZX`krA_4LP)i)*#0pFNh~H1J#9>QtcN@bj z@fd#^&MzY@aa-IN$gBAR`GRrvK zSe0d*VXWrhOinuseQ%u2v2!?fE~Bu9U)M5HNyk`ctcPSVnpnJC!NK+XnqsPK;Cw9T zj7^r&Y#E!uI>r{uXyKM^<@8p|Xya$QWt_*)4$J7|rgd@gZcf=|8Qb}JzGYlsiEmiO z4*q^2CtbvuKEtt#8I4Og_E`=-$HAqXb{WSm=X_W2>*uqKFBo6s;7Sgz;^68mvBUUM zmholdD;#{4U$5a{Czrj}(y}d0^5NGUcddFE?`VEevww zCgu~#e~@A=dItjI77lJ@cDRl6L6prfZs*rMwtlLymxJ$e+8rFblgZ4&%(#nRzt6EB zaPUKZy_8<-wW>xi#6^I<9Mb%eW2+ zI@K|*wzU}_o7-Ati4lIe8G?!w^aZuc*DP6D-?(P!lBFw`E*CT~oh~b^pSz}R!NP{Q zf^yWCxeJ%q&S|Jef-N&Jf`Y_CLD_X}t({%T)~?f&E!`;{Q+O^~(NMd3$;uUL7B-$< z+puu%nuaBHwGI4D0Edik^Bb1TQ6F_dvGydI(Iu!nvWcsjn>MDp&=8}&t@8}^03PP{ z=BBPqD7`7wym1psXSXCTXzT7;*t#v*(%gi6>sy-Jf$y1u;@g@#o7c6ZK>1C{&L!=s z)}?Lj-S`+!wI-2{+&L|6>ys@l7u5R+X4j_FR+K1c*qq#!9M_U;-8gP}S4VT}Mxf%# zkBgJ7$&INFL6wn+%RJ*&Fc>cP3>$hy|XzOl8r6VHC1%0}3E5M^nylq>m1FZv= zU2SbGUCr&Ff0ra#7`r9wHmBAzp$cWqD>AZL&8_X-U5k@w_K?VW7kb|T!A`DcUXq!I zMrN+{Ga$Fy)!f>p7_hBhYIJusw{(tM5z2{@MeQAJ?WvBg3+gt3zNzKi?d@$H=*wY> z=<8C+*3NNDqw=6|*2eDUg^~}~qn}D6(VV|>A#&!m`D1T+cgKb#XCD`tJs^EBSiJ%O zlB+%jUj$W0!chD=Vp;D&4*+%&V^j{z{(8RmAm%zdH(_ivak^K~S=ZJ9VbYM=05S;- zV_PMxXhXkdsrWKAAYAn}r>(22Z7XES*5+2=#$(1tbb&W)tgXrOgXHA-esV!TvikG8 zI+Cis{N9PO&cfblUflzFrv^Bz-_+dF1VXY%kmHKkVq9%UNAiM(=1yi_dwKK5)?`Frczv?9cK!NPdlypIwIw^6 zWHAikCZuhWFDp8dXhCPPMNqy3fP~i04XKWWtsB}P#zXRH#iou_vZ;Y38LFEc{blA^ zk@zaMl>{tVRlBTl&6377D;pQoHqONqu%@5>}ck9FVVn^hDmUAv=Gf05)8ib zQ{_C9v&NfSH>En7F;vX;Ey*1_K*A7Ft757H#f_5LZ0hyU+CYZspF&5WvfpC;9 zz%mW%&baX$WKgoHskgLZrcPn52bWYTU{Ny7&ozT_wpxNR!#_n4K~p`*;VJ4<6y&;G zU;Z{Gd9Ew(NNvSj(_a&^!;>ev484uX)yC|+)SJPFRF3&1<^t)Ed0AUqm*O@^u({k*=p{@MAyuN%B)h{)82SJX z1XNLlK^*PzTGWgdp$$$mE5{!0S@Oll-fl{@ba``;CF2V1E}s017C9%z)_L=t*`cOE zXHy6z3!>D+#Hf^nM1F3+prO%XMIk$bX&$YgdKsVqqq$3bMMKV-61$>4$!ank*eBg5 zZ*iY59+~q&yxujS%M}4Jn2*x{RKGA1RT zh3N-+NtmlmIkiK;hBNpa*p3ojTwAv>Zu}PWRydyo4iff5WQ`3l&!VNB|!NFn*Sr;e+;mQfpb{>CMcH`KnZHON%Th$rf))b#`^MVG1f`mh4B5 zEo$zZ8>Pt>qfF$70UfFHx&b*uABOstN_NDJ7odV}Y~GgYZqLY&2i+tiDMxC{jj8i} zimL=juWerYl|nwRxx-s8fW2gy27dve#9410lvTNCF6o^Q%sLQAEe}?3Y4Z$pWAH?H zEsRx2KR_eb&AA|7@8VU_+!Rro8H+{ivfc|+L1X*DK(SB6f|jLCA1LFZ5$OjABf~RB zrm>>8FbymlJOO5A?Il&coD7yH3E!k4sG^_7`8m*AtV;Q>f=-BTho3ab4hN`;EDUKV;C7F~IeLx~gAuE<)81x^JkhMzQ?d3I}WZ@IvmjQXiU ze&v;=titYM>y=t)M%#hX`7r~g;m-+88~N$vU>e9vrz!nOP)Rx|Q^yHG2o#cVnm^kY zr9p(mKG;2-?)M+qE}iJHl+tcwi!zyv72MuwO!Hz%^Yo-2@M&x-8yL>Ox<*E@2#Bv& zCOa6IA-B8Ro6!G3wQff$&DdDHU_J@Dx*ZlrLDM5thrZgzS)ruRNQfmR1A+mzrn)w@ zHL1lOn_ZJzF?|(A6oUc+77ejWc5|mBslN^x63wCY+hCTI%Cer?1`3r$a-_L-q_H=W-zS_MiZwKHWlA~ zW3E?r9DPFZomM zTG1x6$CSkyvjHsIas{W%pim~VIw_Hy*w>0|(S(Gc?61GgqaseLsy}mWHb%NxDz0#BcOi+C^ zWu&eeHj+iMi?6?cggH>zw>4vMsWc>Pm-HU~ViM+ze}r26c2J=AFmO463*O?Uu7bc#m12R-`ltg)6cT0<0SJh%9V}u=4 zoNchNEN=V`*3L*s$3cwikupN!#nzQGrBT4@NVPy++Xh35-qZ||+e$B#I9uzxVSAO! zfSBSw_#0r7ky(7>EKG#FkzsVe*p>OMj&)hE6KF1bil>r7Z%PREN2EQcU_*09hB;2q zaId9NmPAhkf?p~W!TQexK8g^mXG%L7TaV=49{8>`wcU$Gj$t!J^kpc(QP>q=JXLR*b_0Gw=DAEaR7&4rP&_nxKG)RElo z%dDLA3+wvm3XEHrs#pY!j+8O}_i@X-j5FfK?;#`8fRyQ=Fr5&nS^y6MbR?zC%9c@O zr*dT6vp{9Z7vE5omD;cYgSwu}VP-uGqe<()^qSr$@)5x-{>c~zc=#oN`mf@~AL9B* zUh?^x?n)+rR78-fj5V?&(2She_Zfafk#s$cL_B|gr{uno2iW@IWUZ`Ey+13JEl~h2X z4n>S9UXtge)iQ-?b2M8b>$tWIkDk)P8Db2~#S{)#q9dGH)8qii@y>%nTDd`>q; zLyD!e*0~NN>k~4>T2ieW+0LaW*LA`j4D`Sjc~?sIw5J|I#zalHp2Um%=5;#y847lH z3x<%d#wzt1^0^DUJ#pg|#8x22Vzb{$MsN;v8!{{Gq!WRM-6!kApd1@cmnS!*=3rYM z+uHsf3vVAv!gaEQgW@%g_X9gSd56EFttD;n0fw#Eq=91#SRl}pz1j;^f}F)LjeDuQ zT9y=KHA8lmTu4MU(4$oUjh8xozBh|2snyWNX7~PPa5VYU>e#sN(YT{zlhW`T9ArW)j0JPS*@Ay6;V5w&hobIj`gW|&AeZk zrN}atJIEEk7B6z}tShb)Uw6efIQS+9PjT=J0^?QVHEaaB#_L*R+<3z^{$%_a!`wCA zH2&g>U1GOuyk)%R>T|>~_&7xMLvIrjSNDP|?h*T3aWCNOXX$6V;&t%`2XDIK4soX| z-s0D{`1N|m<4fYpuK1p~%N6g5e_}7pHQv^mUA+i__8X2Fdfe3u^#QKIpV;q;9u5u&cu~FMY732bU2za8`iYtgw9~_UAym4J$(GuVjon+Z+zNOV!>kn_ zSbwVEbqt!JEp@e@gLJ6fakV@KG$6>MRyQiE78l1{%|aj^7C&)~zanP*&G@^ZK~eNl z9pvgY`dC*h)Ld8l1!~dCv~pJ)z>tbL7|1~h0`UO1?0ya&;^0BCA1l59kzjkILQZoY zMki_$TycoA{|JFLAN0^nhNyEejf2(Nnb_2DHNh`24h#-X=0HOr4s-DzbMZ->HiH9j zfveSP^IUB*$4=p(j)Ml~v1`#A+F!UazvQlaMm!6$N||2K+*#2I<=!>^VZ0}3;^=Xs zIjOC+<$?+41I zu$+s$BJJ3OfWlJBRk480-Zv4kJ{%gDs%`(j-z2*W;+TPkFgxF}; z_`vuuZv4+Rjv609xB{i#xPGiPy4ni;WLJERS^Qh#CRco$gU7_<(1+8NNws`QH#W)U zu!mJ=z>==Eo+-Oo!^E5|)ij@q&{p7tF}kY)Mwg1Nwu;VF%LYtnD$jPgxCB)pkD4x! zXu*RIt&mmrUbMK{CgYf^XKPQndJY0{gSgSvZqz5Z+OISi7F3zuW_(vaM?W`il4}Z6 z1APO0xhjc*T+COFiJQ7>8m8%LZCbmlou{Q-GiLnV)m<=$c$CNd5d_+=nOAl&|NKgP z9l|+Hnp)p)qrRh~t;5v^0!8gP=C5wf{(bR-xEXiF(;%>ROkmt!pdptK|8cedYVW&Z zulTMjekksC#m(XtSG$`F-6p={ird8=jG?H(8Q8E~UDIxGwcQ-ttbNPXZsFio4sPS% zI~?53!5$9wa`0Ua7Kvw}9l54u+OBq%cDAdXtDW7CC{T7p*L2J*764VQcA|EYYr1B( zt4-0Sy4qY0)|ff2mein+lt-cLn+IL(YZ~Ym?@~^53^mskw{pwBtbN7R?m%GXnfb2v z4eff@EHDe><^b0$0+X3inFB#beTDWT*DTQ<#45104Qy6{1tpYb)xEBs&pq}$ z_u>=cNtl;hvs63@>Z7RmjQFf;4l>JJ@iXyrh(WHjoWH)HVJf;5U$qyw2Vdg8{38di zaqtQUmui=}=3sM(tDU2r>FTB0Q&364=}JyOYlCXm3l$`}=1}IEbT(x(=#x#$Wl8&% z)*Lr0T=N9&UDq6D4tKS8w0Gm?2-h5Gj>4MUHAi#%3xKuwkU46TS?Owj)Bf(7W4Lvf zqb1^R;;*im(5{J_Rjyf$#$bjpImmL&8c;>gLu2$@#=f}M=X7yYctT1;6JKgL{=w0?4;+G1!YZQ*Q(!HpG}LiC&QUS`sRUrIfSl zFktaHV4)YYR`52D`=OwRIgYz;5YvAMljjedHlEXT^pkm_Il(ngGACk*>6()`Wilp8 za|*|%n$ui!x(Q|Z53V`WoaLIcIr(Js6xXcfrv41C+6vZ^UUJPjW}R!!1veRgbj^Ab z6XK29w=$(+des9enDd!6X6v(DeY!rwH5Zr*UGr3w)Mp~i_`qBQox^N!&Be@jhcE*5 z)Ad!Z*=R0t&80d%oQ6QJ*XOzBGJajgy!bRSo6Gsb0+i71=YhL|zpmuqbpFt&FNvD~ zbcPPKafFnv$5Gr}b2STvGZE-3^(C(O7uRx@30d}l_Mj_%34v>#g9%PQ$2`|H*YG@$ zSlOx+dQ9ZfbYC%g^o8R;GkSCd&&}{;>+Ix|6On@5g0zfRHh-Qd*1Bern|=ug7jup4 z%=NB*hK{vvg)Hz1%Cl=WiFYth_F`9v9}_cQF19q~G6Uvwwst^yZVLPWi_)lsToJL9 z-Ja}dUD6t~N=*!|zLcq$h?2ufuglzXjGLI6Cr0I0@~nS9cp#p}P5S*oNr?g^O-Lb< zD)j{;E-G_St7k9{P4Q@d+jiykI3lX3q+!VNjoCpWD0K?oz$s{CRN0`~Wr00t>?h{y zV_dcyi;0dY=cXzKEW`q#(s1r&FMzGwwg9VBA z5<$}_ehx-tFw%m92F%``c!+Y;joz{k;K`C`rSz)f{n`|ka-KOp3f!5Y2B`59?w5f1 z*l__qy9yldV~2`)l#u*5JL1D}FqQ_VI_X*uyx}s|hXc=yM9Fvj@ixU*${lh{R?${J zH9sh`JDm2K;Eb&{$`?me7(&6LKq$p)Zp0qAG!>Udb+>0s#77Q_{%GJN$~}K#UmRNi~6yP&+e_!}F3&(qn;T1iKzB3+CoA zXhakj1s&mMMZ46N^Qz{qO$u=0IDHrtW#fE7dt3YbmbP`t7A}mA;?pfQOq=cXI4eR?ZMZ8(4O$Q{F*MFTr|mox*S^ml1GPP>CL z{`oA)y`N0xK4s9w=%gT75kXd8q+9}gXYN3lZ;VEZcK{>n_QX`=w+@d%#svuYZQ;Hw zY4a-&(3+QoQ5v&43-6Eu)}Pl|kOdu-r`D*oVTYa#&^1DO+DQ?DGn#LMLI9kr7RVvE zHn#0MKO0FIxDBeDbP#@B239CRL3C?s#X*(B=6P|F5gA{7tW>`Ob zD>JH{8`Qga$;##RYw8Lsg*`;Z58z@6kUqWxj`QX>W#`%J3!;(A5mx5Xrp)^Izo!nn=P)7sd zZVSs}lh>RawX?Ild!3gsD|$r9ud3UknNVf`%Ehn)!JgI>m^XP&>;?@_jcoiU%HjTI zS8N9VAIi}QG(&8}x#y`=$`(AtO4+<3pRn1%1@`>F8`Gmb(KCxpZpV%UjPi$VvC-$%86MIwg z37fTi!o)70u(Hc1Y`*dd3#fd;@++S({>mq;!}5t8DLhXR*npDnFe}R^499pD@K%<5 zVmC{sW4lQ{vEwA4*mROl>^I3Lwq4{CJ1_EyeH8h`R*HOLD@Q)DuOpw>(2-B_ip609FAv*^o`1LwShrMg8ZJO=~HKl2k}vq!PM{2GgB1jP9cG^nIE{KcG6gn-&0agvD)Bq?fd)tm#P7u)NEd%ZjZ9jV@)A;BM#?}k zk0Hs3i&x^}RS_4j5mm$sZ4e0?svg~I0f^~tgH(l8Jv1P*^By9L9u8674luICpTwV0 zD}#H}1J{6V)B(^VWO>>SYu*KopcOu4XbIHW;4=DGnP1 zHXagw?V+J*W*AFZxa(saSzA9Kje*1wBkqZvs=#OcYdrfN=u?PcQ4C6B0~HMX_vt+(-P$I6%YFbSowk zbn5`!IzhKC8Z5eL3Xb>k457sP)PO2e+3Uok%0d=sC6ce;VHFog|n!UmUad;+GE{~u}J|t6A;SrgIuZ=7Wmx+j)M`jjQ(_MxL zVBd;}!lN<^-xXOi+&8?!6Va7Y(xQ)s<8S2JObGXdAUM7RVkeIX2qOStR38XGj)VX| zk_ZTl!{|N`ei{h@-X;+c7>CL}5Y$Ygh?s5#JZ?M)vmgkW4uv`sfstrJFsA7sB{B)} zYzUdcfFSVOi2^l>v0+eEQJ{Vw3Ca#Yor0mpSQP_+qzs;noW!e78($AWD-IBIBB4nt z0TSaUQR@Tkod{?`!{)x%%nQ6pa(o#;48MiO@Ms@#3!Na}5g)nsRvI7^@iGc8N;oh% z)zl&e6J_N+RGraT zT5bq>Jb)e#pvM(-fP`n32l5S29fFCLmE8c9??%c#Of{ek^zZ=69+>OPDm7-gj|RicgcxLwS6*WLta&qrH!Ei zt%?R})ihYEp-OEm)o9~rf_5TJ)=r{X+C-|?CQ+j{g_gqOifJ`bVHdP!89T8_S}kKw zHjLQ&i_ivWMP4;w30s*7@Kgy97y%Do)e%~8WZ}`7g&QLa z4~#5am05UMWZ{y?!ecTEpB`DbG#GVZ2|HTSH50;_Aqc)~6560h2$ixsG9jEB2?4Hv zitbqH>8zsAgW%}A@*Bt>ir_5X~rx7g+~s=H<57d+fDDky#Y$p;@a?>Fi#^rx8mj z(zZ~()$HpLyLkRU z`y3t6E~UfTWpuxGg(P1)NOT2_(FS9<*z^^u(1sx9&>Xr@8;Y1o3#ePGKrBW}X{&Yu zVsScyQra-YEGBO-3?9^mBaJ!vL2U$LtS>#NjYNz`*@N0B#MF?ip?JPsag6H8X6?oM zNAwZ2ZSesOJ%)v&>3u;_0sk(4(9Q=+49-rJmz6`*oSexP*T{A$(HdH=X`?;dY^_q_ z#z4n-Lv$8^s&!x){zU-YErBZaEDSUufikEn57b5v)Uc|@z(zX$F}MU4Yp39^7JqZ_ zSLf9cTDxhtk)eHuvb8;-x`qYB9i}B9EtP_dSvwmbsI+h!A6a;QX5oX8HN!dABlI0$1D>!ZMGx-y~cok@EXgX#zd)#G%6_5_XAp2U3g6iw8W2BqenNkLys3K)G-!03|#MxPX7 zbSxV3VRB&CL=Wv&k3U9$KXN?&ShyD!mcAUaFpZ^LkZR9?L$JEneoMo(--WnjM1a`{ zZDPPBs5`e1b;ASMt9u4W#>11B_^0AeN#?%Vp7v&l_Wsgdu-kG3phWZtk5lx?Yxd!q5N*NbyVrEujTk@Aah)lhVT)mvi^ubiA51|Q&Pt{M5$TELb zlA}$B3BiEqOGt67VL3QVieskG$zD@TnlAZENrEiWKE|q>h2{xp2mH*vc3g>eaItD2 ztGXF@Em=Dg;Zk1f=af|+qSFL1;>dDpnb&y=X+_x@+^s#92I%9cL?2JX^$8)$R(t5= zLV=qph2Q`x(PqJXtdv$z^&=WC;@WJW1;6+R@-F+-3yz@Zb z`52_T=pZ#tC$~zU6DcFl>vDdMUi(E$a@CJyBg#@6XZR+AM(~7 zkGwco;Gq>(HBZkFsQP9JKU0+B1VTjNRhfmAeIm0kT&%sqpKc(Z9vaB2G6(V(F_5ps zK)xCS`AZncUk=gZ(+y;sk5_mIt?>pxUinRAmz6`1%pBCa7o^2hzY(UJZ;_)bgM$(q zdD?u?od4x%3ncY9wh%GJ+>oLU*!t993*bx)U>2;EYydg~f2;9#=0Q3OkF)W24*t%? zD^?V&)~(^DE1RW4;``|SAJS+&Jlj@!BTQ)UiuW3|360`(aCx1jUW?`$5|WFhCx}TK^&N+rw0$hwTd|sLG^JMC&ThI-E-JYTe_J zat7DBi?tfAsfX6%9pZ76E(bEiO?v0jc;_8lPdTH0n=NT>k~| z`6cD)zovouvw-p(O~iA$u58!b6Q!7qSuqt5ZlzKZvXV92H!A-19V1~}QiN0EuH?D_Lv%pvC+XnuI z6?1V_-q;@6cmoZUOXp2~5#werV>74dvl$Fl(nZFtR97{)hc-_(i_C+xWj8rRW?tfE z8qMVoQ_JcDw6&nMhuZjaJDvsSA?TqFhI6?Ny57%wFm9T-r&0lk`(Lp1`;?=9NJaYp zs2s-B3jHGtsADu1`$AI;Z1);EEi?>TZp0{Q#A%aZ(RN%?e*@lcF|uiokt0bo8)Vo- zCuyf?%fR6)sX=y!PG`|P*&POz(-qos9vDn6k7GH;8;nYZmXMWml*&YL{zurZ5*+=I zhQAMZ`Rozy_18%rXWI#EfOVpc8GUAiZR5TMF0_@A*4?fQ>1B+F?C{eA>+WpS&Mk|SiKC}%H+ggTmbvw4*XugMIq!oJ=&Mmxq#fHr7)lHX7pN*li5ZA z$hje5eD`5GA0p*~2azqb?leA+I=(=K#+4!TL$)n#1504PwnB|v9oRs7K1jPsYxY_+ z2jZGXkdvsw%&?<}F3hCRH^?@=8LGlJ`k;(de7UP|UQe|HZVAd9`A8swFOu>!vBwjp zpOLR}>QiF)Vou=Z^1A9UU4o{5c0UyL8z`sTqwjYp%clXSltU7Kt}3x#PMPJ6HP`{G zsyRTHvi(Mx_IJ`?<1QLud>0gs*I>ry zsMz=o4KtnxL7t-oZhK(^FuMfUotpQOQOQM3Cai64)CZL z1C2WaEfJRfqi}(db^F6}zgKsyBGDv%Kv((-bfv|K>I3vuBwSOyhpYq~TCTy%PXA?R z0(*hgRAO}QBJ7^v4_1YiFkchWcT?VBu56sJtb5}C|=ikk)GnuU~a z4xkFNh^ozEIuY?HW(mzUOR3%*M5mf%bhcSeNplFL%!*(*RFf$wpu?s*!c#KKsN7RB zPo;r!5U`Bipy(rcY5VCOdJzr9Q#hv?0CgPWP2nc z@k~UfOE8&;oF9!yJQI=GK;-0p5Mj?RMg#|OJ&N4zvG;Uz5EfVy@z8fs4ZmSrVj?n) zyCCVm#j77)blo&7QFeg7U4B=ieAYauvy(#wje*A#cJ$~(`BW?{twLr4<(P}9)NG_O z^E9yVavEc?@y|vS*Q08`AhP)9qKZe={+Y<)ILz%KA0C$Z87ix(ws0~>!{tHU;lc%( zWczxk=CpDC3hna|HQ$n1^No>(zo325E8J`Oa7*Sm{0_$9?Gi#?fxw=nJPxnau8Kh9 z)=WgAH#e@Dp^%a+*e90}+NoU|fza)l2>mJ&AzX71MVZ^v$jCLX`FkMq zhY%v+H7`2@Ga}b%*GC|-Clir3A`!to3SQx5-tcA-wMQxMdolHYcR%gn6b2Vsu9$y? z1o;~T)jvXD2ZkgFWJLjx`=+)ls-b%_8w%~v{IH*fvbQrg6c<@|u(knLR&fVN$BR37 z&EV9q55}E$C(?+@-I`dO;xUV|@QZ&1u`F4G@@ft1jlRFf0M8>Mj{QI01yI_zB{fJW zVc7S<5qS@XuXvm^fmNgLaUi!Bzt6EBaPUJ8?&jbg4)$?yFF5YLblau#UJSbuu`+UE z<&+y6Oao#=s5CZ|hQumpcArpza5tWHp*1`Q@?H)-DneGIEDIVk{9%Sqk7CfXMqK9>=D)@s`DG!i@3Q zA$pt{Pxa8#nULp$)C)q8qezV#XgtX4Fvgib zN~&(@>_KVeNulTT^~vF~6uxgE{fE1RR(!6Ti|RJouP z?mqGGuT6{M9(oQ_z;Al!`3xm6c29^nVcZXEKbDdmccOUURsc_KLoOiwb{E`la2n)= zJ_gI!Q$X`+jE0|u0OtmyAXk%seT1`tFfK*$YFGz^*{)K^v;Gm#9giv)Jznfv%ZsSx zca$Gf8cKyK7SvLx`J^w@9zsJjzrK9b_i(Uf`80}g2d_d!Fd7D?!LY^f7PdB?zq;Ue z2k7_gN0uY)sxa01AO64}7=UNR;qx<7%W;zCbLkEo1-li+{sNreLI=Ks3HDt~u79H` zvA^)i>`zM_q`1s%(?HWr87nm(3_xP%U?=MyF9U^w-IRkz z{yusgKSXa%H>#jW#cTFbY#;rl6qZY;)X*oubso#qw`5IRLrlg> zV@z+rE5!rw-sTpdG;FB`L-bw#w&B>|Q;C_x1Fsd_F@zmro_D zE~N_e)iH8Gzv8$?L*hCOiyM@{t!?AtF`5#$XlC4{+ITkA$8)G5o=?l;1$276h|Y>v z(t12M#fxbRp55_5^qF`WT^cW^FT@AaSK>oxS9}=V6dz7^#7EGh$p2(~3_XMA^YLo> zW4wm`6<5|A-g&Eq1JX}%P)(J-2_Jn^tfs>G(lZ57+!dfM+-ctOG(_+{z z$6x4d9gM3m2!s`!fCebU=Svs_ZumMLh`NxViUNU)7(EbGj6oC@;e#hW2!pS@I$puB z7j3#A?#=WH!e>m@$o{9vjHxHS7H8X%68TKs09Rs000?RSQVox927oP*0B{4P2VfTJ zXUa1MeE@U=z_t+id@BO7D=tJ2;3~vV1M0H?^||AK!d-`-2GrF6^`(A5Ju6RZ8GH}o zr=id{07`9HWs(>-t9k(X<;`0|IQX3l1_~&HI{=Rd;(Nydfh*@c5dHGzJ_$mh?_*)` zErQ1@csRPC_M%sCJ~)GCYvzo1GI{d|2=|x-pyuW7ozj5&QGIZDnQkLMH|dEtm`~mP1G5%yIr45JpLH2^ zh~A6gY-}$TIu2V!95OuqKN=qYC`8_n|EE`@Nkg@l17|#`Ob=&YJcBQbjKJid>=XFu zF|kaXsfdwn#c8-@9~YBXBQe33{+3LWw7+GkAs}R@?pen0~PQ?2Zt5jmjyP?CeQ>VNwZ5r!&Tjpa^jGf=P zcfv>TWFN{2)!#fB%3F$t_PX|l*MKc3#KlUg!^+mbS=p*)G}8#m^`eD69cwrhSR-km zH7Z2D5`P}|&Peh&DUpZjHrJhxVxBsMDC--ozS!msC z%C=5M3r|5e)KZz1Ue*_o9bnOCbHU(SM!l+cfTUb?O)m}hzjEIn2rS0mvL1SW6+0YE z#@`h7u1n)0$GWu`xHJNfr8Lw!jjAoRnpOj~CZJ1=lFI%%foc49K!U5h&h@snNB7>` zlp1u}-|Yjrr}vjkG**Kn&jcyXqLFx3S?cTx3r8D1zRJffp9Td!Zk~IsL`j+Fvdntt6^nM_E>r5HiWx1xvmRyuec*kqd41 z-$!X0RMyysRPrH6rAYT5kPdezEA|ylfQCf`UF7+q@Xj|HYt-}zY$KZbU2qv3RJMz< zE;o+xsiYIIXq;v=O~yK=7|FSp8=?rAd8rx0qN}C|>n7=PZkC$+1jgMfrKa4)D>bn) zTZI?75X+e!Q&Fsw;8LQ|X|#dbfJYmhC!dP8^RPoq)@Lv}E~Z@T60qiHsl>XJ%B{<& z(z={ZvOZ6B))zqME9o@rYFcf5iPl145$ojvB5mZ>b>vvrQ;ziwDzv^ye44A=+D#*@8)=O7EsW%E(=_X5 znqet*kC*R-a6l)i+7!_!c|iaR*I6EU9Jo{R0!}ehAsHW25f))+5&qAKeE8W#srm*|~%gr8qxqj>>d8}h9JXF<52XBbyl^VR^@%%1|l^S>NJ@&l3>P6wB zreEAHV)cNd4q*B{NRzBX7`2B%BDF=Prr#oOJmylh=Tn*{5n{nn)mfo~uvkzYrCd>o z5r?HdE+zIFG1(J@7O=miM`UjMTab;`;~~jsd9)e8cTamTqA%DGR$7oNN%~8``V~gZ zvmsjh7EHFA9@eokm9he~&IPUU^9x=TTfiI4o&`V?XJy&GRa{j*xJTHTmAr&XUZ#BO zRauEL3Hg^!@U1%jO(8h+g05xuD9~-hlt~B`=gW%Wqb`+%ek*n|D}EOh{}mPg{Zmw| zv;kH@3+Xhwh}PJ}w8!$DslUfg^G$!m?mi z`Q;j90cZBLa8T^hUQYc|@3RL{iCsp6?Q$An52lmsAyjXx15T{yRKp{Q6&+^Rc|jxQ zDP2(V55{-NQ7VLcIIg+i-&F8=GYh@RSa(UR`C5Q7m@hrF3nbd|V1m*{@fpU!EIjhj zy@gl-iUH`y#X&z7!KQpQx8`_lyiB$c7i-cqSlj%Lm0F2Cf=ca?RAG;zk#;3IbPP?j zt7)1&j%M05G|L`Ki|p~V%s!El_5|v*Ck353%j-;y&J0ncE1*bMh$2|Xlx9hvOSsVI zc!a^__+EGN5lAM?{3ybx{sbp~n*J0y5&ek^&FpDl-05iJ476`1&9jyJ6!&LM2>bZ~ z_VYv7qd!a2{fUeHJ+zN`{kb&?ZNEQ{*E=E`7%QuFy2CL$$__8?)!_rV!`TaWB}jfw z(2*0!#WCVJXk;BaaxRUt>#5dWfJQE)#rCPR(q2qw+DqviyOGYdmr#p+TF{A=LF3O2 zx|3*YK!&X$GUQ>R^m?z5-Di17;#VL%V*K0_RWo6$pAKoVlf_lYTFxeIuy9E)QB*2L z5&Cu~-(2)Kx2=qZ(y)xStsui*Nw$4D<=LyK%s!Kb+UL+P`z%PJvmt@bg#=ndQ|+~o zLdulLa}BSJ*;AO;Cgb!1smTz{4B9qRU3w&kY(AvVQ5po*WgfQ-#tAeIKQ^QqrxgPn zs}~1(`Dk9uS_a=8@jbpaf)@s8XE8+dKlX`1<^DZ7XfNVZK@JNmJAorkqP$n*2Xo_* zI;2Dr61v&`EPdbp9NlMMN(XG^?6nNXr_$5G z>Y%GG3S!@?a>DEQOj z$*8Rq{5g&Jled?694h`C25#c5C3rcO;X*t z<7|JIitRfv1>6a=zlZ7VE=+HCgOSzVF;4|UU~TlL_PGJg=Z0h;rh;76`9si#l3>X; z$5Y)|8OG7V$jfr<`(&3YtA)2oEj!XAE$bBA6U#q#5<1qCW*$9t| z_&w(AKVm?=L}T!rV5>8o3ip!&+)wgwH)(7LcSwh00PM*qG(j2@xC!_j9MuGEJOnM@ z9`g>6zjZOU19mTQBJOO5t?LLKLGoN&409jVPmUp+KRJ$Y-elaNcSuaoXu4f$AED7j zW~r@@T?-RetkgCTi5105Z4(h(`BG}f5U~={Mz$NphZn_~@EB2K@?&ICY;94TkMxcz zGS?PaYY&N&VsJ#_oV$|^u-&ak}b==73f(4QQW-gaV=7dK!Rc`)6tS7715R{I0EF@dk58AJEzd;v`y zT>m|tubr{L^|$IH^pWgrLGJ_{@J_%1f7VCARG|UltCAOV9F~1iAFWq) zI?@#Leq0{|#)#_)Y_5yAjt#c|(Nbd}SUn5g0p7lMIv46By*jvL@Y{#W6C!0#096G_t3&|IMQp>^~fxLav zUpv`Hc_;ssA{=JN&m(#x5h|b@&IR1>!^@bPMwH`btLjWYM`r-#J4GP@P#~vFZdZXm z4g}`Chyr~)Vz~E`e;ZQOfEysCvkC3sDQ0-nY*zI~z>GPVFF!JN;gmSe)DGtvbp*a( zW*V!@al?}nh66?hpJT_DBG@r`dcw(Qz6{C4`R3Ol5LuMNTrwz8D5jPTZi1i91VpEm z7a2{M&w5`lHXGJ6a!NqKQp$C(9(AxDb;@a&Gla%CLusZ{L5+B>a7NG>&L~>rjHb;_ zC2eyObiSh;NEd*qs&OS5PiQ7h!qmo_LNT;{N5E7&0{hgCz;U-zQi&~`TO^eX*)LF# zVZ{{UBP!=(Lqkpg8Tm&7J>uQ&5$}3lc;m7uF?}%>D>=LAL`ADHI$yjdNu^GVm+-5n zsba`pA&-H-dCx&Hqp=3XXA1bzVB(miq!i!$;mT9%gCS*l#O%E^0FFB9cw(VAnN7!6 zbGcKbe~pZ>e+}&PFjm*H`kREpyBX^4A}GC=fe4r3x+s1sxqv+l5PUqD&IEFtlfXg~ zLG(!=_GFrh=WJ&ho$Sn{I%gIwa89O0PAx5S=1|g^OBU2=T!QvvxqLk z^UKa+y3SDtlv&*!q`G5*VBXBgCiTX1-d!i$URgKoK=e}fT>>d=?;lcdjG9WB=< z>U=}yIO^G4KS z@IQ}*5-5f_#&>XV3rn=kdE;)5)?OTSm`7#V0~PKstZ z8)=TSnd+TQG~a2a)19q!meWe-;7A;8k3E$ z$3Dy6V=t#QKP82`Abq>h#BEgVY^RBcPj`06CMfw}N$H3KpPv2N!1aT}C37-MdRJ7) zm|{t!1)%~P*QAAn_f6*!-T^!yxEI+vo8FT)`IJT*99q@~W4bdGa%(4m#Mb>|elR!(@{X-UQ$KYPrx zMgtAEKvb(>9riWHKU*T78rNf&(m~79lLBUgZVO()!(JtDEN5ej`7;cd&)`-oZn!EYy z5+yn7Rr=CB(kWqQ&FwV4W}i3>TWm02LrKcRV;L_VU{knhRSh($SELi9jKK*~ZjGE5 z0Ks)qTxu#FD0N~&fdZyGVUC6%c@6z!C**b>Yh@BvOvWIN6_n+-V}&OWUxX`U1nnlb z>Y!MGox}tm^$;s%3<{0`@q82QK@aSq@5<-T=q-8=@9)vSG<-uWh_oZS%5H_&;`w;`Hup{sCn;WwSz=q6_m-RA72J$T;j z+(Gv`cTQx10y)Z_b1C9-c>?hegbJL}WXUiZbVj80NW*4PjVWL9a&6p#gP(fzh8SN2&QfMH$l1_PwNEU)ol5XH{dQQ6_lZ@YHy&r~ z=_A*r`<(N02t(zTq>K%tB}VLyF-%{mH=vT20UXwmqjW-CU#vsc6aSv1S39p%d4TgN z9-iV( z{iw>nfLC|nQ#@&x?6fc{1*Pz7jUKLNU>Gx{ti(Za=3Nc?U3kYPJ=EH>JUu{ejybP@ zB(DOSv_ln+h-)qSX)?d1FTSF)yMVanEmi`xvCaXj*-r|@quti@j5(WFkzwL zXXoYK3`gc3aZY}0^2N9(hu6dB!uJ^Chc!bydc+zGN{%r(F&5<4+mFyZq}`6RwLCXY zOYoLYQhwei*6qR$Cw>N@N31_6n)ZoQq1a&FFE*~$tCz1fyf4@m-h>AG3Xjq---3qu zHnhrjX|(fKC_8`0?C=jve(z!O`wukC|I#YweN2EKP?Pf^ZE%ia6n#WHvvkSn6=>!v zT;s-G>P*(J`CLt33vo4^{1s~*e&Ac9`nHPInrq;c;1g4t$+Ggv%ECeZtU@Zu z8bIY)#Xzl;MrIA7iCN_|Eo+D*8uM}qJRw*-Fqed;SScu&BWFm|m3;yRmmx)rJAMOI zIkON>0>~jZ4QRpGgmWtFjDi<%+b55_t?7}c+$ZElch)cvbU0;ajidotqiA^6XqtfM z)T~5+G2h^)EMr4Lqi}hBZ98Url2qI4L-Ay1ovc21_N|lcZE{fCivvmJ*oaJZ_ zH=G4U@nf(`9u}>u69+`wetCO#ae7{t12hY2Z`N2U%o;Bd^mS6{9VVp}Hc|^w0e+<1 z>+XpF&lNa@xXeoq69yUjxrHosfK7q&Ppew`nqYJOa>?RE3nheh-^zb4eZ5eecTjZP zORpD-PL7CSg`!KQyj>`|Wy+w#V%zEiV*9=Hr$TZ5L2<#oLSAjA5Rjb!#Xg@FLx*p~ z@?Z&8ZcDLdyB3R%Kg$-uMwopHYuRfVZ#^k4!gCO$)(&vcg)v)PZ2VeWLZ$kt#yEY^ HDW(4pzPnxd diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractOptionModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractOptionModel.class index f3c8a6a9b6c51018c636cc47613e5db0911355f3..ba4c02ab73dd515dd67439db979c331a2a91380b 100644 GIT binary patch delta 408 zcmYk1$xZ@M5Jk^xx_R2XI0PA_9Y9c|5t*DtUAQtP>dKYIu)vjJAzxzpH{1{xiZOnG zU*VS+tC6U0ac|wqy;ZLUu|cf;@%8!+G&pjZVpUTbBj;k_k26VGv*r?|5{h+A)fKL} z)M;oEAveR$hGtW~mGXi&yI2cdNlC)#$Q4#OS*KW%u0v#^G%X@OipHIm nL@ylg>@QmWjh6pKBPidtk?TNMZjyNxD?=<27j|WER9N0O9_1%s delta 409 zcmYk1%}xSA5QM*3b{SnJ{viv9E-EMjB7gpidhldS)RQNTa=??}Adj-I;e~iG7~=!* zP{v*)>Kv-NI$hP%gV-Q;HT-)21R9*W%&@L0OptZ4*qCIRqNd~$r4ouQP1O~yxzuTB z;vqM~&bDSpv#Z(bw;xr+BN+@;F6Oasm?N&J1`k%n&({?w%z3xlc|Ln;_j;Y4!Q;R% zPa>#W$;2wY=Fo6N%W%wzA&38ZXT7K!36hTzjtV*wBzpu?qN>7@jZ=C<^`)>#3r0uH zCJR!Vp8+x~ic&1$3#Nj5`&Olc54%tcr#x}O#ds>Lva(LGEM14lRB=|s%GerrT4KF+ lGM9hW@~^f0&l*9MY#X@_gykm5v&fHdjZI-!f}_Inz5z&eCb0kj diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractProperty.class b/twl/bin/de/matthiasmann/twl/model/AbstractProperty.class index b18704c6ebc639b6ddcc066cff76e62be1ee6138..0a2e8d857d276bff865adc3bc8e5da64a2ede72c 100644 GIT binary patch delta 343 zcmey%)y`vd>ff$?3=9lL3?^I*oD9mG3>*w9>s`l$w^8~&MszTVAjx#Vr1YAE&+0V6AMBTlX6lg z_cI<8(B)y!W6S>@3R} zSeVxU1z3;_HAga(7sF7Hh$v8pED*CYFmXFD0yWD`mSojrwPs*vu$k=6s?IMDlw@L1 JU{D0pN&wDbDxUxV delta 207 zcmYL>ISv6)0EWLeOP-lLyUxCj8T&MxLF)nvcM+w`5u9KmB2j2`I<319ZzweXo`0)e zZg_uRu0Y7l#i8MlqA6*)wCPAx!rcUV5>L{X_;I)v(M?=)fnvZ=F=DKkFg@;#omg22 z(quGd_3sixD{zA|A`mBxSUZzklIafmSOny?QokhyirSU_Nwl$^rbRhA*uFhSvWOnG Nm#yf9L6zE<>mO=#7*_xQ diff --git a/twl/bin/de/matthiasmann/twl/model/AbstractTableModel.class b/twl/bin/de/matthiasmann/twl/model/AbstractTableModel.class index c62ee4f8b973aa778ddf5524b614782f4ac2ed96..e7dd0eab3027acd6387626c02ccedf023cf37e0f 100644 GIT binary patch delta 1188 zcmcJOO-~b16o%hBGwt+a8cQo5Qz}*nreDya*s64}u^0=qg0@veOe{!(X-!Cq2|E-2 zfw_AZZrr#bxY31)3tadMOibLmbjynP&Nv}%T{O*{d+#~tp68zCJ+ETFV&mUVK79so z3F`rbQS##qEFJR!+(22!AlKK~L^KE$Rog7;Skkeqqju0b5);NwyH{y+(7y(`unbd->Q#c&BZl%0!JdK2&?i%AwVFo7uy5)j6DOf#Y(%91%b z>Pzki(LPAye~lxF{GY8o6WSu90OU_l(>(Qu0vtu;O9$OXFDRyi+{WvvH*M zUaYCZy4r0$)o-0Y(+?ynSd(~&szePbiFG57jBFUG8);xxV$-a)+MitC5whKml!X2n z&FD8?pyuIW0b{s{Db@@Yk>nI*?vBCd-UPZKF^LjRh399leR)ynY2nr zXfxq_-~B*UNvx5$PGXJ3dPj)YL*j>6pteYClDJJ`lf=gzAST4Do{U#=PsrNAC=@1H z)7ZDHC8lH)QSv942uUv{FAo2K3pOt<`gt#{KgWaf8K$EL&MEpmM1=T_fN`1&$4ST_ z_l$@Gws_8V2OOvMKjY|@92YipVqSlgtFK?O+aUw`3YS<@II`Vt(B?2tjNvXC9wTg11ZP~}1&9C7AZv`-clqf+xBnLv0C39y diff --git a/twl/bin/de/matthiasmann/twl/model/HasCallback.class b/twl/bin/de/matthiasmann/twl/model/HasCallback.class index 2303331402d14d8b79fe025a5c587d1ab16f97ed..30f2cbd14d048684bd062d81e0d6db3393e715e5 100644 GIT binary patch delta 232 zcmX@ZagfvK)W2Q(7#J9g7!0@=I2q(Q88{de*clYL7?c>4*%^31vW@6D~4Pszt2%c=fBFZic Jlw@L%0{~?$A!z^r delta 139 zcmWm7O%B0896<5+Zzq{fGn=Z7Z$;5!Gwxu4`-o%69L0)-#8%uzTtG}Wzqfo(^G@9B zcYgqmO^Ts!NEm2_DI>-j+q7tyXr`K(ro6b1-^nqbTNW%W6}4r>S}1)MwXZihizvU1 bzpi~7s6xij{yBlAb&1TFUsY# ziZe0H!!P9Jmr)E0TW+7lODfLE;;&S^977#OC1`*PBVBV=!wOeQmPV ztRS+|Oqtdy1;N_I+ZBY?a$P}LtC=!34fO3cGTZdsNv>43rW1N{yPh%S-CYck4+SXg zF{~C(hGn&jZ&?bB2pvYhp3$vzM!{4HW5rj2#6f4!S`lBhonCgUWaTK(FG$^0wInNP1!o;#eH=O9DCQNUJL93p%SOm;& z)8I>JRNG~(?y7f}rKuq5Cz_uj;0 z?KV@CrM7mbkD;r__!TjmVv;IpW|@{#iV%s*x!ImhTNJFSc5%@&F*)NTrHWtEw-T@X zSdyd<7Sm?pB3lsZ3-VCS#hFLCT}CTzK9v2a3d-rsj(#Iy>d9PXsqtB>!$=HdOlxr6 z!GzIonduZOTyU>3$iBjU!{VLpH&SbR*()TJn~SLHrecZ}GU1%d#@h|OOQK-Spk=tk z#Ep4OvMPSVcfn>389H-y@x;(XZb|hISk6%bMOP-0ZeNOZqz5ty@dtx!dXXm9D5YJ) zC$K`p$FW?)C9GkOvtipx3G zTtoT1Akcr)@OS(}!IE1Niy@h3>!dHeKQTl>&Rj$86kr9*Z<^ef968HNcy0DVla|Wn zM~!O=pTn(L2BC;?kX3ev)sp z%Ml&ny7N%Z@*#jbc#YVL_4pK@HRk~Cw8=}*jFnsw;#u|%5PAuLVZJLqT48w?R=Fn| zc^5W38I+TLF3WvfLM|5tpT=sJb`OI51*%68>a0JHa9hI&BFCUMoI*$uw4lv5MpW>r zgm@zN9EZw9Bt7oN8e*1U64v4#o?gdO8Uj}_RmJ+%{BW0*(d8>z3SzYWHH1c>7Rr5> z&86Bo<8g@+yM>erHsapmNYT?o^;_WX8z8k#gj7<9wC)B-Z4)8I3XxiFfW*GxYM0{O z_K#zyQgM&=6wNk*Ny80!|5WmuBG|s7>^Wtmo{FtDkMVwTEEvUPY@x>-KSiO~e%eZI z?H=y}A5AXw(S0}2q66DpE!I&7(L$}OZ@7T6LZD8csH*2|75CZBCKgq3IY5=WO>TxWb5eb&ZM^Lqc4|Sxe4qyb+b_|8a6&?zYJ%ciyshlp` zr^fy>BQk;+c^_=T6bkep^ZRqmg3qHIyD$Sf7GO8Ox+ho;y7=D+g9W0S+1pF&n~az} z=)_(;fFyTQ=s}vl{Wye-ZIpH@Sx1w6mZwxv7x!Z)@A8y0&tca*5mG(Cb3t;qC`Ttv zRE~X=rW0XG(o30kQ98-Yxd@MONmZe%*v&shQB=x^tC+8RfJK2Rv^Iww*Ma+JeQ{uQ z@UHqRsK}XbD4?7g`|m6XZ>LODlM%3=rw@?PK?d0%L-CN$ztx@s)owBec%qvkI-#ga z$p|PFHv1lz{bPie_?{o6qv<+&^%$l#yoqq&bk0XZLCW&4n!GHtZG$~b+%MB0hxs3w zuh2n5n2E1Z{cqSZ)j6=9O!H|ZDKKP3=Sa*2cvhqf+GdL)DAJWr;+Z{kn^UTLcuK4@ z$w|`N&a_R%tTQ%@O8?DtjWgLk^axiTrFP%-j3WP(N}`V-gz&;&>Zph!-eSktpfWlX z#>NCpXJ41;6J&anOrQKvOgYuMn(lNptz;CG)w33TjIAQXRuRnG-Dz*fJx)NSr&J}w z+OcmXvbKFiy)XjhtEH-27;qUqPFsn`=Q&OeuBxfObP`n!^)*d4({Rmc+u{EX;VQxwJ=#CCbgAa-~kp%pI2dDCTw6HJr!%5iA(q z#P%y8QHmOdkj8;P?*2R*Cdygvoa4>~%*I7e#o45kkdmmJ-lE44ZWyM}oX=?C znW%MzoyXt6p5RURsy$r zOha%?ETUpa#a4U5P?_6PD8Sd5-vN7!T1zOgV%aF_I>pB4L3QlT>7Nqbvn6omjWUmK znQO3b5+Fp_Z}IbOe8+`e?Luol=)zEV--oMtxY{_}C?4^~#`(6ubo?lmu$48QLqLW{ e{{XmzM;_%`fMukK_ews^<6VBfKqGxIQu2RehYM){ delta 2538 zcmbVN`EwLi5dPlmZf18gB-v~#a#v&vkYuw#4pF&+$PpwEE+yi%(G>#8h8%!+t$3lx zp$vx+Z@fxS1Cb;Wj(Bj0iU&Vg_&4~QzfdTC{bsURBNkPrvOPWTb$|W6?w)>EO1GA# z&i!@t1b}h45JU`H0*K|i3!Iu`k z!ek2zMO0y_g*a;L<^G}b>yfl@J7!t<8sCV^e9=xRcw(_K3#V~LA*_Se#gi+`mab}Q z*buLg*gZI7p&oNBtjAdk-{P#@;~!V40O55`R=!gRtZPm*#a1=cCro^A;Rl?z@FR{X zT$g#0isagLElXOO67hO*{>j46_(h@AKAAPx9-Y2AlO+B$%naf{e;XQDyK9Y$dari!yYV!&ukDM%+Uc!1%BRuMdug)S}8reQig0vLdD%%Jsc z+_zv{MuCZ$<@|A%RT5P0OyN@y{Utr{cEIdUYpRY?C^iqnpAO?E_-wi=%)#8NL-`L9 zHuHot`k=0gRN)}mv7A8}*`IX{uX+C!KiEHh#Wj%Fu0^> zJzs!D8s*<TRmYaFHW!K=1Z>eC~7jt*2iFPt?NlF@NG0#}cUR{PeX$)+_U0BYi zXuTktT#zh0hHBb**kmoZo0=DSXv7L?J`BPt+=F}h^+@Yo58o9onI`TtaXGkSUqX-OHrV?K*>Xc#yH2<~F6d4He?q;&@2IoDEGN z%%7pi9Dym;MU12m6hXqxN`y@St)vH zH-7e|v80uIS>>a_J%2vd>hlXfAB?Xny)izIRxDqXg-3+HKV-+ zGsx)If+1-}!x>G|E?-7bno*IPc3FD@Pr8iQCsvhHfs`{<>9m8c;v7?z`6Ej@Fsc=K z-SAfDkL<$ePWURLrxA{J;D%OMeE3`8i?*qh5clZmJ(z_BPB6wvWb-B)$m_9~_g)mI zGLj!lbBp0AJ)jL*^bP2M^zc9q=P(bt2~QJFay64d3_f$aF{WB3bSH{CP|}v-TIOgy zr$gx}%`w$mm|Qmv&(PXS+-LcF4$r&T*;d{n+f>oeUMx rl!5GSM5{Yd+79Comou-$QkuNLH3Khllt^zH*vRYn(X0TQNdNr}xV}?K diff --git a/twl/bin/de/matthiasmann/twl/model/ReorderListModel.class b/twl/bin/de/matthiasmann/twl/model/ReorderListModel.class index 760b80a6f5cc2400db6148674fec288368a70e16..de2471ae488c34f83e84c551ab3437469f97e6fd 100644 GIT binary patch delta 2429 zcmbVNYfzL`7=F&j?tTmVEv#G?Y0;e9P`SP5o$R_MG=S=RME+yti}C z*PgG9e6{%D82~l-ISZF#T85WpcqI#^n8~E{stm80n4OB$shO!=trasSKFY$!IAh`y z1t?f;BO^lxTlV#jjSY<{xCZ*ih7`)|b4KaZ@4c!{1baF&FgKx27%Dm!aSdk_PoTxZ z6L`eJ!!p#%XE`b?R3mD?V^&9G&9)H1S`(jI_za(0_(FztsIjmOS6R4PhHG%G?ems4 zwV3$Y!Z-NV!XDgV;V#^5;XxcRF)ttAS-28gO?+?R9DcCyqgXwTNee%Tv>qGgM!hGD zHgcd#l?;l3D&&fNEt8g>X`S;WsO79sr`N6sEEfRE`CO~VMxKq?1HJ~e$$s4zZfoF9 zkZT~?W^Casl4Gfna%wLwTY9f5$)br;Gg>&tY@c=M_$F#(X|(O|GX{cgaTmx=pbKVd zCC)D;&I}8h?0a3cZWy-Txb1NvUYmH~po(Dbzlq z-mFop;3A8>BwU^uEIVejlJj#dxag?sqxFQcQEsZvcuz&n=K6OWz2C0 zBjYB*dR(s&{H&-OD2dI+q|HX$NIgZ(7`mw8#7Qc|!RY3WqaWwo!+#L2MfgqJq|^nJ zo9JDD`jc7;eV#_{{z#Eqev9gTymYrU6~_yMVIMOBl#45TdmXo^_K;eS!;EkV~0uPTFlw+HFYK zO}Q@mj%EciOcP^d(#(WO8j$V6Fusrn$ zI_I4i)Scku#q)_$oh%B+({-f;-7x%dML(VHcmXeJH(z4wNr>d(aDJ=t2G)2o{|1$) BAjtp# delta 2404 zcmbVNSxlT&7(M^b%=`m$2c|4TacD({mSvQsVCf(&o2^hSmZCx}RaykBtrUw^tqWGs zZfmsa?EDadP$a-9lSCVX|!f%hPu?OgAa1>Ah{8cxn&jUVSgBBh+Sr^^TVnyT zeO#dmmpk}a;S+qS@R=-is8?8z4GJ4&xdzw9eBSc*4hLT;e2s4uZo@8xN!+FI03LJ@ zmw&!h=)_eHzEk)fKPdbt#7A&c;U}@K!0P!4?;CbEWxzrOW4BR>eBswNmFZuy^Y1(l?W3T$c-BYTI(ZMwu^Qnucn(33H(Kf=*@C9A*E0CK&7tHjIU|JHqAkc2-uXwwwPeHv!BMSoQ z(VIOPaPEJ=$&TOPu>d;C_f&XmTG19b=+h8ogaz}Lj5i-w>x?<@p^KJ{v`X<3RFm~? z3SnirMq{h|;odZQKhX#NH@YRQqETP>mv2j>4ia^{My-a6Dhg7X3lf@TZxec`*0%66Ja$oBnW z(X$yhvgb^mq(clwKff4%;T+&!5Uxe|9c;C%^Qdre(*mqN>1AP?C($;`^F+|zyvUdc zYUIZdN-?NqgxR#)wG2O7U8G5)CIxxf&Nt&0f~CtP-;(4C_FqCiWG&z_dhNhYo{z?? zKrT7po=w(QF@uS7$YtRTcf`j_?75Km-Ood zPcxMvj;+MwMSzMW3J25Z)|MBC*iN@|FB`|0k=?X%s4AY)6UQE^kfDg<4y{M5ar#LU z$FY}|lqs%tyIIgLFu^@fB`f|A?xgAH1er+|U`dcUFv@ff#17|IEHQ!XV+g#QbRcK* z+x0vLbyeTtI!9^mq8RhMXHV&_9HeZpSCW%dr~5+0*5Ph4OS$T>pO%QN(-K`oir^mZ zxrw(D_tNqZwFLLEyBuOG9H8aJx;7p%jV}~Nwt$Q>Vsk*o&K&6H0TaaigyrSRoJC`2 z3(8oH-wTSPQfq^i$F#_W3FK*!A~#Qqw2AA(l$L9QFM-CWFYF@5fx_?x!H_gALy@kY zoNP)2pYB1~N%mki?DJU01}x+;J}4USkHWVJ7%S@BEr1efHg8;M3>ViTJW6>kR<2C% z$xNM0kcc%+KOsJe$7tEi-3dIdC66=1hcrrBjGWYBV(r0@!*@+97!LMP!RcUazbKGf zAVjuao^?~pnuHcG0m;gCqN zn?v@A6vsr0Vppy7tid{yl#%xu#VT0aRCTgGWq%NEFxgZ-BV+E7T}w5 z2LoQt*%Km*)a%)n(wI(lsPr_l=4jd(4^CCaeeU4N#OvtbDJqu=ICz?tO~_~d1=79{ zl27t~$DF}&oxPrtU`6^7H0R9=>P~3#B9>^?VBDkhmoxv6~*|hM`?%W5Fz;aivCZn{iOOR(er=Fm?r%Z3jC1X^eDxC KC^u|VY<>eFe>U9! delta 339 zcmYL@%}T>S6otaZgZ|vE>d{tbA;yN`BRk2E`_UNl_)F01JWqu>(^blp9RU zhA4rk)*NbBgMo_57K}+pu`Y8Kl7<|z(A>eUtT|0*5BsW55Gj9gBKzMDhiV)0 bQLCx^nU7kr{Nn56NO4g{<0X2m|3m8!5Tre{ diff --git a/twl/bin/de/matthiasmann/twl/model/SimpleTableModel.class b/twl/bin/de/matthiasmann/twl/model/SimpleTableModel.class index 916686461f018a83fe349fde4755ab31898587c2..4295ecc5b09ade5bc2b3a1fb4571103218579c51 100644 GIT binary patch delta 42 ycmaE<@K#~NOkT!6lV|ZJi7PR1FfcGAFmN&?G6*sxG3YZSGgvXCZ06^SVgdjNlL_De delta 38 ucmaE>@KRyJOkTzxlV|ZJ3Cl6CGcYhDFmN&?G6*sxG3YZSZx-f@Vgdl-$_Y6D diff --git a/twl/bin/de/matthiasmann/twl/model/SortOrder.class b/twl/bin/de/matthiasmann/twl/model/SortOrder.class index 8c991de6c14749151006e5070a2f89d9d162412b..a506997bb34386db07656f5ea4e9c80c570e3321 100644 GIT binary patch delta 434 zcmZvZ%T5A85Jk^0Gt2<3K^_7#sGuSbB{8TA9|#ExW8zP^U`L3NxbQDXdhf=yCVmDn z`b}0hni%7zs%}-?d#lq6wNUeTR0=pvljY2W^MH$xe43Dx6h8fc%aCFkwZwyfp#u); zdO987k0!UX*?9JLbC_`YdhQhTbK*TyXIrt32$%Gu+YPIX6w=hMZpY12klal66h$dR z@1ZU&7*-61Y-FfFK#DRI@rv}57Z+pcB?UoCCRH}<ZKXgH7s9@|LY zZw|^XN|4v{`RsmjJI%6LmOquhY8%*;SOFFN{LvVQ5EBVD^EV?gJk*)v%21-gQkV}N zwt%#$FyMxY3cyAct5~B$kiVFb-(;^s1oSxx5$VaN*@}NpTAWM0Rl_>kL}g{o804N6 zT>ZamqocgBrT4pL3ESvVrNBGHFHH0r`6jvm diff --git a/twl/bin/de/matthiasmann/twl/model/ToggleButtonModel.class b/twl/bin/de/matthiasmann/twl/model/ToggleButtonModel.class index 3452c73cd5cbecc02a5e962990c4d4c63bc9628a..40e0c307065d2acdc14ff117ddb51eedd19eda1b 100644 GIT binary patch delta 334 zcmWmAzb`{k6bJC{d9QN&t}Bs>D$<06q)CS+NXqkQ>vyRt>UaGvC1N&8H~TS}B_@N| z3@j!a@h4a<7Mr+d`P`Fxzvm?9en#J;mv4Vh&j9*xs?m-KjTk0{DbF%3%n12L%wkR+ z3c|cll#T_dO2VSBB)MhjC<`kJs~Qok$@RLhA*oGaOQE71Y(Lb0h$?*He8+vH40aGV z=t8$a4|)}L4fZf#kmI`B(ws%YAR`3AKHs{9*nza z1+vJFB}U6+g{-n}jUDS`Lu1oN3|qY3COfR!C3_l0?O^}u=1)b7HjyjmH%Ot+-~jCg z9q2UZLbpcA;1I(GIns{-gCRx<^cZAGKr-Y=9wK4Gu|XLp2B+i<=LQ$g(Q2fA6pqG- zg2EV*@~D$4CEq%<_PTc}EpKjGWu)d7Wu@YmRZc$q%ccqY RXAUOOW>4SFi`j)*fqx7RIM)CG diff --git a/twl/bin/de/matthiasmann/twl/renderer/FontParameter.class b/twl/bin/de/matthiasmann/twl/renderer/FontParameter.class index 8e18b58dfc15d34f7c0b735230ced610b892a43b..1a365deae8e5cda1d1ed69452cc1adffd2efe194 100644 GIT binary patch literal 5581 zcmb_gi(eGi89l>3W?4tjMOH8xiH``ot0ZbQ0;MWyAo8$)8q}r^%K&SJU7Vebnzl(> zYg*H1Y@1e_G*7inY=fEr2~})pO`E=-|4rJSduJa*p>5oT-;cR-U*F?==YIE_eg7Zt z+yt-@e-EMrPpbHQDYoDXL3|OXRqRsnr2woT{5VsJFrEtH%lL|lvjKDmvA`L8I*700 zYe9S+-w@N^6brv4q&yQu6z9a_+bX`Z0N=&4D!wQB-w(hP`pyTr>_Py80gQ;(AE5C6hsZq1S$JvA>kFV{Z$ngMTcuImEtmfBxL+psD3Sg*Mqo% zpNP&+19(HUV=AsHDBY)9`iNm0mIAFUnKY~xQ%|RjG`pj@sSbTqK}Gv9{V}~hV<*h| zRy{q;!A9=yNem@*J7XCNj?P`t1Ia6rsA+`eOLc6BW}|< ze^Vlvu$vWlYU>Ut@V2A|7?$$(MAGQYjPx5;uikHRB-EaY>*fL7N{D`T(94KWa_kPw zr^@=;J6SKS>eth>!84k%3D%u#FVLZJuJ=N;#~vY3eUi6qC0N2+NnFXnJXC7R8b~B{ zQ-RV(7RNJIyOA8ShZTfpgL7&$2T+mB?d_F;^srU1u*cTpkMihbK|k2k+c4L>=HgIk zlB)QSSPU7&_o3n>HP+2Fitt+c2?Yl}dXwuUHep)aZ44#SOh(2){^%>%R$F)Y4p`=* z2@|-AYfNPn?Gi{-3Y5sErMluY@RTK)KWDQnD^kUE1sxxmE|CN2O42yta^=W8;$6;V z`Chbh+JG^rXH5Hm$U8hI1G=rt3qrwSml`=l@P8uBoHz*j78Qz|s*(SW zh-0eD&i@x8ugw&pAYhy%b9up$uf^HV@Uk#a@uq?&J~Uh|N2F(k98jDQGKKIaF^*?+ zlh?sIH=0?fTsm{$9bz8U`QJ|M$+$6UCsIivWkSOUlEhBKB;HoAys$;W(xRtr z*M?r~SMiR9Df~>u4GlLjt>G4auE9i)hHYpNCcLX*2ES0SxtNMY#V z91#}%3cuEH497K`#3=}g5`rQ4%`XZP}wj*vp=f)}EEt zMQOs?3Mno6COqTt-hyu)ky|KoD?)fciVQp3vLYz}9Td*Xhbc-3rKw7oAowXf9(@lB zr{M1ksS^lH$8MvFno48i2wo5q3;IIZ1Qt$nu&g;k8*Xm#uBi0BgtaTYM=QO);YpO! z%?6*C^HlphmEK7#ic||L#n6gakMQ3M;r~W@3+!NTC$ZRt74&u;&53b#6HVVnlUr%( zeqwN##`e=(fl)I}ZKWIgxW~tSJnvc@pOkSCW8LVXb1?$J+lxqV!hJZvH!luyj{}NW z|1g1Y*7tG!A-HYqtm9OjZE_>_Yco?$BjS1Uk}7`%*Sq80s(9mGt_VzzjU zFQGB6bsQEbg9bu5$RM7Wrj(EN2J-5o_DG?>y$9tp@$d|W(#9IP*!Jo z`)OK!6gnpa`;O5}!I!nyP|>&dT|URLL_RBTApAC#mhc9zip-3)M`ohaTRSj$XU00B zGciY1i18Ct49nKzQgxiFERLonERMrf7^HegDn2o5acsSUrWBzA4<(H-S~5)#F%0)YpX8@-dEkC$Mh1+S}l(_N|{8n?krR5{*&z zI4UPl+u-9XkLWn+4$1`${`E7}{%NAO3ZpnjBaf5xqCJOaW$Vzn8RZ;%j;K9P)Lvl1 zc@fL;3U|GV4YWY9(M#8~=Gj}>N9?r|K^D@MkSU-XkqvPz%o%FTvmo5ANQ4&c-W@SLI z+AE3mm>kN|+o9J9rgxT<6e4JTkZ}~pYiT5U5#^EF{3o>{=b?Hp!|S=iDTmd5sdZd> z>tvm!c$_Q}e@pQh$tS@SKRk;)+j&jnv-umOTdDvyOd-m^#;&6xwEh}4Orrie?hD=T ynZ!o&@gRQ>_hY_n#y z%aGa(`-G#|_5!gp8TLfI_S|qrNOV6W`wry?_Yc+IPiBU0D^? zFpdwD_yuo^T~YH7-Av9fraT8w|;cVtk=;{yJB?SfMwUqi2~w zS-~Z#tPq3YvbGkHB)Nn+9RVDWo+OWL9f8?DQ22_(n{x69sqeKDEv+=mK19Z<9m4oT z;VI11xk}A|8fkTs8r13`7V!wnc!D)Ng@tuop@`*a3oMXVeYS?iw4}f#aFt|}fGMAe zB3Z7HJdeb0Dw;HK-M|e4H$lPEIc`z#Z7k7Qra*`ODmiU^M&^KogvOWA#^)Ntw0im& b1H&CcrAV4hHqIuuVv?r_R;c)@Zguw$IJQ2m diff --git a/twl/bin/de/matthiasmann/twl/renderer/Renderer.class b/twl/bin/de/matthiasmann/twl/renderer/Renderer.class index b2635a9fd8c70f0802529308566977c37ccc0751..3ab7a9673eb3d9238836ce76279952b8756f9104 100644 GIT binary patch delta 282 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 delta 3806 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 F{xPs1%KiWV delta 2369 zcmZuz30PEB6#nl3b7$UM76F$BrYPx$EDaKgj%BF1BWY=9YBtK43yK1+Wus}E3ob7! zZLw^j%*sN?t<=ig+SIbL(rh);GRrm->A!D4`zk)Z`|iEx+;ji)pZ{Dq(&=b!aPRre zTLI*VL<3i0nHyK)eu)PRM1&U)>Ye2hD-6i+&O>_VVFQogQSG%-;xU6ekL$%Mi6>lm z(m))Z(jHGsR2fLbGkSPd53BX?oEvNKyu=GKh!+hcW0?zU_4g$`ysQVtPSP=|vCfV4 z2)Qu;8}zWz;IPTSW^B=+UNP`0wtBD)+YLnHH4XE118-o53vcQ`J9VI461xqw#U5?m z>%m)iTMzFTt$F5Mjr=_i_F=E~v6uU`<9>+)67NfVP(4qKc3gsk0?zKGW#j!70;<=9 z34yY%CI0gAK)J++FGubXQTT{#RKFXQEri$V9C4|YBzHAujE^M_(nsQu#3$rL;!~YH zKI5-dBNvO^R;8<(1Bb01Mp~N!EL6A}`2r2b`ltB4lPkuQczgQGNB8wlROpN@3f<5} zAi?^=k&vX&13eXbqYv*p)Tp#aAezQb{a?{PxmBu+^DpfCxgR;6cJ5I^FS;_#EiX@#Hhi^Lg) zU(rY5Hw;twT@QcgLw_oq#a{~NP{T|W&ZCy8D*+*Ri*P6rAtK3yB4Y~$%z+d9BT51( z6{RU9rT*d+VoDh`rX=7?;dR2PgcL5GwEsszLqxgV!wB*5!_LO-CG=~rA=m;Ynj{7@d@6k% z+@=a4v&dAwXfrB=tSUtLV$A5ZKIaxB4c>y}!5h#t{<097WrW}jA!P$vn9dNgwVa=+lcrWwS9{48gq6g{1r`!teHp^t+_tK8P`E3tO=|nT|h4ur8g5O;ITrq zq@@k%(*?+53G(?W6=ER9Vi3w%fEgrlHtD;E1TG+D%ShTv680=9dl3PwBTqX>%^{xn z3gZZ5B0-fA)+C(f_Y6u9{0-xYqf|7*M3IUzVw)t=Xw+3(MMa(FcPtOb5Y7P}7|;4- zGwcME5^Nq{#)+J{2yUJ3Vrpp_t60XFK`;Xew1Sm8#8*;RQnztyJD!ubFmjNg<8;C5 zrNP2=ar1=XOIqBSIDNZcxMo5W0s+a-b$vxJ~z zlN%W|$P*H?YpL;=ddJ|uJ+%h~rZvXt9io=Xa@KoabheGRNX)5a#&Q2+XL9zB#N2S8 ze@GU%6L*CbYYk5}gKZ15cA*hv=*ZZJoI*~VnOPyk7G#!)avb)K_Qzq`FSRyWVQ<~jP!F&IKO<*48>z9Jjy!`5J zk0K&t4JQs;t4@1!wtcM%JJek(^y|nS9u^(wts%|T?G?i11sR)=E3h1ioLnKW9npO= zLugl3JLI^|IE1`SXfNB@vrtQC0Yk$*A>=(*M z1%s?7lY^GHm+#X&w%bA`QHdffqQDkYpG#Qwh17N>MYssJac>Tm+KJ|p`D7+kNiPTW zo<#d%rrL#jOUSB&Y}M~E={iF6yJdES^Bi0fOV7eQ2mU?LlcCg3Q=YPHTJOUR{Kj)V Rfd4HF%r}WC8iVr9zX1>2#M%G= diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLDynamicImage.class index 93d5918ffef1822de563c2c4d1cf11bba37f5d27..f0189e8cde3be9dcf5ac620b357e6587e1aa7ec6 100644 GIT binary patch literal 5080 zcmbVQTXY-68U9w5w34!RED^Np|Fr3n;RTN`&+vXrV3lOG-n^os!bhmRoEWTGH$3Ieq9upW6o>`rgx*`k|-v`)Aj(k_wYzAI;9r zKQrHd{br;;{pW*^0Ib6w5^RpdaRnS{#-%ArQxd^M0!QJ-QHGa51;<1%Da}-Z&2ee& zmgXKE_r~z`1eW4N4EM!wzm9LjuseZeGO#Cx{V_a{z=QZ^4Bv`l7!Nf7_kS#F9~O*n zOY@x=?o8mjctn~X~lA@-%3J8seT^^fr~85_fB>yPFbnS;)?F?MAz3dpBv=*I9S+qR@ltukJb@q-&ps z@TOAU(y(;ME?UEt@e#}2V~#i+Nez`oO=q9!+VUO@hG}_O!}_|L)>CHl@uE3yj}DHT z1&c;SChfd8M!Uu=yD&zd#5`+izdsgdcUv&rnDflhBRk9qg{$KQ9WQFwbMa0%54Wzi z3od9VyQ3QPyjAwx(s2z9o#L2iWg>5SmX4R$-%@fJb`8d0v1qxQ9J5@u=!fl{Lx;^{ zW^d6h^$r~Otbxj*LzdfD7q9A_TGg)bH||rBAe^ZoU3W|Ba468>Gm^00_8PuYU(>Kc9rd09D%v?^*kZ!z+OKaM9TcaK^91hnJU%H^gaK&+Ul_XW%8UVF=JpBZ!(Y+~ znqN!v8~oP5?=Ym{vIV;X=c`n#F+3hnrj`$(A#Vi$C>XkwvlbisRW6 z4r%SW`axKXs(l%~VjZoR4xOoPW$MbIp=WV=4Pr_TQ1j{W)%6mr%HtQzr|LZ2g7mv| zQPpW?oatbf{recttXqnHS1&jNR>3Cs#pE!#wPKQ>b>%g2PDEyMgdQItcL%A2%X!mX z2Mu3B7%3rX-rrL~(dtRQ<})O0&F2!%>%&I2Hv-xXh#}6=joF5VbT}PpPd0x1GUDmz zLuU{+=HGPnHUll&eHNi?YwRo&ukf?qlI*^z)6VN>@$wMB9++iJtrlKWPIhY+?T} z!k_SqMLeowtET>RY(pd}-A^dLKoC`e&?hiHRq{V;bbpQLO5XMT$S*)4rSqz6_Y9)h z?)MQAPpuY5@g*$2;xiJsD^%mIn`u}-8fk2bC*=xk#!8wd?#lRER^7D<+c{I*wMq_Q zLh|;9p+JR$>K$my66X|_%VQQgAEEaV%T6P{e<4yS<=1WW-yoW}?Fw!qkcQg6Er1k{ zHb7g!!5z3Yz&SuyOL$tCGTc1D&ysHG=wqv=VF-qAUV=|xCzfMZjX5nA0|b!RByli+N~#1FUnLn?Kb4b8B}rvb zdM{I16uHe;MEe^HM9Oil?KINur>W318egQ3r_uBR8b8F+1F7a2B+s>p;8iSX7s)Gu zBqfp#k+kJsLsL2|!uI^@f%p;;w?_Ubugeak(lc0ou2r9ZZIRb>^fVIbX!OLXV9gg~ zO*%?{yc&$O`nybHMLL=ehx22U-8C<4Q$qb+w7-FPvNd)FkyOX}Sat@NCXIilqq;MT z%a|+S2Ic5}1@ zxoZ68s_~msDJ4`iry{8nD@$!R1XPqn)AIPz__BCY(~@|yy^#l{hObd^#k_cexhkpA z(>))7%OwJIPDA%JR_<6Wy=kmEg-G`84{^nT?CKeO@olcC<=T6=%e}1N6KKJGB#!%e z53d+5OHiQU5gyA*jyb;l8E`Zv--k{Z1`5-4{&^HPehIosXdA+^oVl4)Fd zVR1jiUv(a?DZS<@Tr)-)C8>vIM#?X}W*lNqN{@Hd0O{{!Kk;Esa)c=4s;hj$B+2N}Z-7(^x%=s~0BvQ@Ygr>_RfFBd>u!9EI@+>;F--GgVgN zadhEH{wDMk$@FP*`7@;5XUT&n8RF-ZQ8)RjRgKD3jmlMx$^}Nzgz9;fQ|S^>CsG)p zu1+!!ul-f$iVFa7Y~*<!7Hb!j_o@1M@(uX_FHrdxm2y5+cLd4> ZRGlP}&Ame`iCugqh&0T5!Oojo{|lBD!j}L5 literal 4757 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 J@t*CC{{~Y9a*O}~ diff --git a/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont$FontState.class b/twl/bin/de/matthiasmann/twl/renderer/lwjgl/LWJGLFont$FontState.class index e3fc77069e9e4b88c449d1d5a33eaac9b531cb21..a41791f906f7a731910136fe1dce88bfff40f91c 100644 GIT binary patch literal 3209 zcma)9Yfl_y6n+kS8FoAD(xspjO4o`COWW1ntkPmz3N3YEE4N#;c%ClObkTx$E>0X)aCMdFgx^P-^>;&X*by=3GIde&M<2=B=k@@5Yq-QkN|(j`MLrTdEo^QczR zW_439b$5;vg1yB_!OSq+(A?~VUK-UVq)H-F%xT8BR?5rR2?m*QnGg}25mPgHojOn` z=%rpmE0=Yi+FhN1abafKNN0{6Ig}BMb{B|sN2Zq85jIzck+g~qPL*zq*zKufV!5+} z+Bu7})q0K4eVfj#PE5K~TQnvey_@`j?9ChCA8Y-zZdwt-hK^2OElax{PSo6G{#uO_9mJs8aWiq29#ko>W@6U_bVy+{$&S>W~ z6>XSM!1o-cR7`{0vQ{S2hE|wPA1D?LT`Q=_W4nqOS#lOrgyvP>DiwF&P6dXFSy|}8 z8Yr0hv|dtCz)ls-Sg)cefGzUWDwlII+#pX6O1W*=uHb3HF27>#i?*tr2=x^q*@+oF zXA)9Xv6h+LG6U~dWNheQ-*9GNs80c(C=vH2uJ*_a@+jQ z%t~PlsZQ8?HLe+Ryw7Wd@aW;;?AW2he4zDaGudIn{Z-|AS~={TV{Fv^?9k}Z{lohQ zPiOo4NBTxjv&U-l1=A^X>pUBBeI?25o|Dce&i^GL{UhwCx_p%$<1YR-XyR|25P#T_ ze1&+&Ve%nDhoVabD6UkGpX%k5~roLkCL>^E=nc za%+&{=vvhL%Y%S|E(MzjXy7Gn*y8lyA}_1qWm}{NsjhiMEKT#Mv!u);zJR#I>n#!U zNG!nOUSn}@gTmb3WbRj>(py+ZZ=;poK|8(6#on`cHrWMSo?Eb$8S@dxG|~=@%e*Gc zG?F$A;lN$1OKp(qjX|m181kw7Ay@tg5&9T0`UDO1DVpgsY^1AJ%M!ad;L ziBUv&QVu7plSw(D`0o^niCseAmkAH>HOVnyN_-EcxJO^{gWZ6z1nG0DoN6y{%8?vy z9FgQcUM

    ={iX0&qW+}!TTq~lh7tAtWhcI|3iNiV zH!$+8Qy=+u&&YQ$@~AyhRz8f>a;Fpj9RsP7VV49DvAB7*1e9V6^?ur~uLtM_eSMK$*Vi}bh`t`>^W=&eN29(j;bwhp z;cN8uT7Fz#zsqmv>zn)^eLbQo<;U;3VK#iqFHJ((eRdm0q!Ish)v{y}~ z1L`a~q|T-n)j9NQbuPW3YURi`&VJ7T63yfx>U{4%gy<^*lA7m#Br@q%PnV zwTL(2)bq7!F@Hui@@;Afe@QLnU1}LWrk3-5wUWQ9R`JtnHNT*m_~$sH_j`2-zll)p zh`K_BRa^~HYt<0dtYRtw&fC;9l~l8E()9wB0@v-TRi!oZZIR?cb-2if^QlhQh`U{O z*r+-J0o(!k&}N5?awixV!oKUYKv1Jx8sUX(+Zgm9??#vbu>>UatM;eNUVZ*E=bRKF&he?%|mPC%w z=>WtCp2kNa_}`#oh;_nl;9>_esNfc27o3N4P_n0%v=MwsEvWA#=c`8z!P?QZ?fOdVk#1$YS6t{F#66mi57(saOL|_2M3VYZ= zt~W5FlCx!Kli<}RM*=7n7$`vnZNnQ$hh?KATUFf^7_?KWNP!5_TbDANSHL{B`r4FT z1*$%Z=-p2G?d;UESyG^Es6!d%SGQrw0#E|PgP<|!IwASCx-BrIhw4Q_H3fzShCwbu z?7t zH0}aajY!+x=@Pj^;$x0dOh>cW&kD$y3l)e3#^O4H0_xSkxWELg)U3e7z~os`91q|C HGQa-?=*EbF diff --git a/twl/bin/de/matthiasmann/twl/theme/theme.dtd b/twl/bin/de/matthiasmann/twl/theme/theme.dtd deleted file mode 100644 index a998afb..0000000 --- a/twl/bin/de/matthiasmann/twl/theme/theme.dtd +++ /dev/null @@ -1,216 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - diff --git a/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$Function.class b/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$Function.class index e8acd8b0a0532643d6cbccd0b13666af7f4d1c2e..4f160c68316011c24c9ee6b70477054410fb042e 100644 GIT binary patch delta 130 zcmdnbw4X`f)W2Q(7#J9g7l|Pzyvgqfq{{wk%5_k a1;}DzU3zXCO$BfS8*%NOD@UG&tqp`VPp`Tn z*Y{7#N=+`AD3Bn;$iU;7mzP@PoRe5woLbDzz&-J%pu~{4@A|G>V2G86G?)|mfFp7Ym4u2%j5orwbI!Vj-(Xk(rD6ccDNU* zQ?<651tN?*$uO}hx$|bpvy1GH>7xL*u`?!0_<&`w#Rx>?OnGiNH}Ol>+nzdP=}}so5-3`%*{C zN}LT5kQT!RudFLAj!7}fAT8o0+b&ZJr;fJUUZ0Z;nbNVY52LhU?$lSqEE4pv)fb~d z0)QkV&mzmn#w#Dd-jkzYoc;+FWKUs|ZyqFI0%vKqhZNEjQJY^=F`aCo8ml$*g?x4Y z4N|#kzBYi?*o(2Z-#_ODh`pnf*syFCaVq-^I%~sZ&ygWJ&0Y+TsZgl|GB`&=F&0J# zD(^h9bfk_MT%c7A7im2S?JE+DeW4u+>e5N5`qCj(v6`)Q!{XLw;iBh2qet0k1$^F-7VL13x( zz7;FakF4cpq(b4Ub)oj0K*{hRl)RSgIB=EM4%Wqy0iCdPb&1z;t0}`XAwvJ07kFxc zkSSNT2>MEUN1DiBAcsEm6Gj?dAWvU-54PZOO-Z6$T!cUTyKd_k2cB-1G&Fc%FFkGk> zYaLvhKh99Gdh+r2k3t9IpE)Fx%8v8kf)@GvSi%4;W0dU#t)ywDPo=tPSQG^mIgyS@ z++j~+s4=c%inZ>sViwv@79lf5y8k~?eKkcYRg3iw9;}`tl{$FzFVag!T4Obbk=7XL lRZpbqInt9JNE#z)c*=+xYTRHT&pSe$|6Z~TU&nKO;13<_{K)_S diff --git a/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$FunctionMin.class b/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$FunctionMin.class index 0089fdc61872690f6d4eb435ebba8175fa0f3733..b46b52a32906141096d11ee5f2efc07bedda24de 100644 GIT binary patch literal 1141 zcmbu7-%`^+6vn?z(?&`FsaO?Si(0j%+7$Foi#kX&V=Fi~-1KT2RtTmklWfojV8-|G z##_Cz;{^}k%XsgMf6kU70y-mOW;W;S*|TSVd%per{nIXhIowXez{NBQm`>voE-UX! z8bw?+aNR(OA$8XaJUP#hD3wIw7fp{8s+9G_;+df4yjjqf6RUUe3J_zb^ z!;2V(?Kp6y*A1Fpz+gH-Ai@QoN0Fe#dyO?=b-1Kd9(8ySSn`!`#nSU5>p?q`A$Mhy z%MB-xBHRiE{focVyTf3J*TRh@L1arUr`*`&+uZVbux>52H-#%Hg?Tg_y3IECV|A+5 zQnOG*u`d}$RwQ>{Hu=_oo9ftqtfRGTDnui_(v3q`*q*w3?k}8GMPlL$@P$UPbrCh*({P&_7QaU7$$QtL3WZo=^rygrBax{85)YQFgQ?o zXOX2Nbxh$Lt!g+=>uG4;kYemB?NCq`jziTJ_o0fFe60t4aSy84L-Hup5qBYC5vGPb#>i&KOW_(usrd%kvOe?^@n8Q; literal 1137 zcmb7^%~I1)6vzK3O-Ts_1Q8Wl@uO->p(zTEGYIN1WF|AMEO6Mcx(!zdrYV!$pbvl# z;>xYA?6}|od>r?FoP+|R(*=v(b5HKc|NPFmC;k5G+cAJgSTvv!R(7P-7E0}TB5I2u zu+%%>ik0U_*2`9;LgA{WPARkjeT(_EMEk>)<$bzx@y_P7_J%^Cybn*C5_5s0@t{Xwighx zWyh&FCa&YAfg6Oe^Vp=JyE4pU3e%kLQ24Rjc$4J2kggZTNCRmISEp?|?1eIleMKO4 z$RiAID&f9uii2J&nA`5dT}l}5Cv>)5u}wTg#Xy;xd`@Tk9ibAoS;9p5f>3(IJleL+ znfYgKcH+>LwwGK>q0i9N5^X}>2?80e`67yBWMF}?aOtZe4E=Rkd;u4S3Ae%R=Ltu; z^7ycCuxGI)w%OUQ$bI3B29ww17*xR!@AD@CY=_x9!U#tBN%Has7Sq|zR5P^|ef1MY z3e{q*iz_Qf87fwfKmPtv=wk9Shh$RONgiC#9Dg747^E7;*iKPBO*4BU)l0*oD4@uR zbWGzGdm2Mca2+$Ob%zym(0;NAnJLoU|B>qJDN?Cgtaov5{S2wp#e;v578z-Y)t)fY o5+gnBi&Q;Bn(Kq4F_MOPM$}N_1_R@~Bh>ltCCBh}Jk|&Q0B3>w@Bjb+ diff --git a/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$NumberFunction.class b/twl/bin/de/matthiasmann/twl/utils/AbstractMathInterpreter$NumberFunction.class index 63ac7e5f94aee714f000d48835f51da3311ed533..8c5ff13ee362f31b49e2ec737ceb6accd1757c4c 100644 GIT binary patch literal 1286 zcmbtUO-~bH5Pqh+-M6hpJ_{6DkuO_lp?ns>+8`KAO)D{AFL-$=3oI^MvfZLr6Mlt9 zE?)71i6KO<{tz$z0W}ewZAp-b2jbg(U z-1r<+oo%B+xLIc|Rjra^lr2IqXIZ+vXv#`O=lnu`Lr?8WhuN~SD=jPKyfjl)$1p3Y z2kRBbmL;bko$Z|E==Pqi^Eq(2P2J+8$KZpBTeWW7 zyJ5wVr56RcS5r}-r?!i3fqp_@rCha3`jX*l9{GnjqwXX@+(3}fd@+?P-Or2RHfDT#!c5$i7Qu0-Dgu)d#MU z=eC{k*Bo~+gPYMaZti2uNfeT&StYH8)aW4|CPV7PoHy+K1kW3cB~DMYIZa86kO*t1 zhv*DzA(04)iH}f@p*}qj^!C@6;jnfL@6mzE!3mcH3Q9JbWO^tWO+@QlZTUdq^w;6! zF~kwytJG#s*JhbS8%-fX)99l#MrZ~ZwhJ_i98F@GGFYYicurYtv$bfx_N<#M(IBGe zL>K~nh@lJJtVSEA5nrJ#4*rjN8mp_?aJ}mpv6lu5@b^SB1J_HLs5=2&>HR zLO<6IFdBn6gHK?P=nN5oI|4EKfyj4g-{AcTO(4#32h)d`?!hox*tW3e<3C=r>gQo6 Ikk3}6-y1YCqC6+Kgvw!LM@ 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 literal 9993 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 P>leIv#Bh$>lbiP!Ab9Iw diff --git a/twl/bin/de/matthiasmann/twl/utils/CallbackSupport.class b/twl/bin/de/matthiasmann/twl/utils/CallbackSupport.class index 3e50858626eb55f6ce7b4788591c406d23022f92..ae1a5bf9ef13cc736ccb89da4c2078e1781d069b 100644 GIT binary patch literal 3591 zcma)8TXPfV8Gb(PT5HKGY=mv>SfWsak!1&^BqU&Lm6K^4#8Hk@AWd0Ii@mT~sjC&> zw7ug;bds4)n~QRj3);>AX=a>WB{QA=hhBH4o!+)HN!sW8c6A`AjD66zyYK0FpZBo( z%eQ~p25=O=Okxyk2HqRQ{v=}faS~}Je&E!-<~gTnt-E$rK->_BFFKwR6a}>0?3#dn zwqCUbhD(lTUuxCXZGTlN3#3c+isi0Zz9a9WhkCH-GzI2LRl88L0^V88n&o+g;J#aE z1&-S+oV8qc-KyLzw;GMQADk30E1P!Z?xlKgspYx?W4Y2D>z-9`EpMZ6dHs%E2~J8R zgAAuEW$YI;1XAUIZZBGm2+MA(T5Shgt(Tl;AaEgf^F`B_J~``>sFSmO%mj=|%MbnT z=_?W&xK{_=y0-H?MPwOkYX@I3=H6CUaY z8YX@Q-^3Wk*+gCY)9uZ^?E7`fn+OcFOx#0Y@~!f^iQ_n7;J%3mm@u$qVn4X0X8TpD z@6I;ybNqsJ>V^zw<2$>%9Qcm6p%~fQRrT%LE?0WtwC`J60z;hA6|WgsUWE+J^zQy} zRj$nTv_mw5&&4ipH3PfGCg(g@Ta|i)Uh}MFITkh|J%aRJWsW47H3-C>jAdoXt9ZMw*}Wke$G*1ivbbIUD{%08cThOz=hMCtUbuIf0gOhr8 zt~{wfrkSo{?}NeXW4wD4!+47Wa-7jlFsYMx4T}oP8(|n6!VGmKBNCNRSBH@!oMD2R zB^es+$7nl4fAf?}dZhj#yvj4QJkqf&&@$A2m3lHq6PkHie1nWIi0d^ziII3rts-0v`u`Sf8-Jo@jyVxLm2H_21HJB>k{VZqOm!E;RR z3=?@I%4BLXjUi~?ASFcVKV&Y< z;w@&utr2DMPsA0cSM%FTe?a0Rj81)w!Kut|G4wf-*PmkOi;Vso42Z`Wy;{saf%ya} z)-T>Jsw(Id3!0zOZ%yh`*{Q0kZnv;A3))_Mwj zwNv1$SYYm)4{FG=#weL*L&yRjCv)8bhb%}-$wDY=7jqEW*GLN^9#OEUC|HUpc*s+> zeLBxd?pn%xj6^>348s@l-5k=Y)Hg`hP1fdpjNk)>cYkQv!JCfi5@!Py72a-z(h)XB z>Zwp1;%khE2-y#b>=YRZ2mV(?Cg*B8|0NFOOLN;xS}~jX1Y>jAqYL_^{+Tp&UwOu@s&f+~rhw>-A2k9r+^AQaF e5p?a3NOZR_>qw29nz{kRQm5puUge`0-u)kuX%QU& literal 3439 zcma)8U2_xH8Gep-<+a871I0GDmI%bum1Kgz38e8?F%Bfg#!%!s1=5!FYHcrG?W(I4 zV6Jo3pODOS%1wQfi?p2q(#$xyN;|#iPw8}e*O{d5bI$4u@GxeurL*Tf@B4hb=UxBf ze}CNrFp0+o5(4?MQ><7~wB=g0isk#o=%H7vN3K^ZE?AzoZrR(VdbJvakpW#`;J)?1 zDteZ`S-i1+-?1ZsH%?o%niEED;MYEIYu38wlm)~cf$kaGbA30O6VP(`H35AgC_5<} zL9YQ*pue4L!DA8=edre$E;}_hbjtJ1w57<3>NS<*P7ef*nnVYgVslv{4|iN%@DuNlY+oM>;z*qedtM^1RC=mlQold5I`wLz zx!m2=)oK3k*isp1_-u}8`H`Z9c@savXbKZ}+rSxtV{Ja6v*EF^it}M;?U*==qQDW~ zdAR7;BFnc~dc0HV81G`fqhLc31LxVD2M|f&9b7Q*?hEZ)+NniO#l%ItN1~Q2ZU@yJ zfkJ1sM(V{^t1T`{V+^|<#>yvc&wBiru5^UPSeaf%IsRs}#f!4YQ=}K48h){XcdE@M z)+ijW#>>fKSp^0+T)$=h&7kJWz7ohC&i*_xoP52XGDP=OPYIW(nS3~OD!~J%*>YFI zpc0eFA5?Ym;Fdb|nzB4X)&`aYj<@@xH5RUfVGyQp4aekFUNLb4H+hdXok;0S?{l49 z5sNRU&n*)r89E?CgGx2<9Y0#7)&fb&=scoB(vgNkQwP!MFrsfa zZDJmm<<+=r;zNAIY3G&+q<4d(uqiP|)bSU<+^YM&oOB!tM{p181}qMTwpPu36Sf?4 zT3DxVJo6&5vguTwD>LA(LGeDVUh~l78*#!Er8*SZktXklA4uUIwy`sj~ z(u<k_GOkqxr8Ohs&Z=k}la5zLJ-b5gqqk~-w8JqNQS*TH0s2H-3Ue3ge zclb01zjR(zQZhDBHSkcNuWhk}E|4k(_0V>%y7DbJ*gV{LbDx#bIK|%5_~sV_$K~sj z-+IsugFkEuu4ect{~b+>r$~JUL*Iq2{RIPm;zJE-{_avCIlRH|3H}W7Cy9i4i47xP zq>W7P@KfeW7M@{Po=&LKDRrg*ol{?CFykN`#|T#``9f$UxW;-iL4Vjx`Kz zmtgni&Sdp_&r$dm=ce@R?_n0S5nanZ$K;5fohXgyU-FEuxSXJHzy+=@q95-O`A=E+ zedI8Ww<)FM_ikK+JLkD#H3d!bI>*Qy~&Wj%~A`Ir~kyC>^F}nrDZkKDFkz30W9DcKA<(13GyRFNLt6Vd>RuPYY<8?@(O7r&`XF{6(LC@HdsbU z8ZmhN2Mh?&o%k7xh|C3E7tywAT&Hfn!pJ8zHb99epp5VyWxOV#)mcPm9 ze?U@vnbFI0g{Qdw6hEg$v1!V%Q5sel)$fhyquJ52a!(o;xA3^Ca-FLcHrx$jyGeex z*dis`xk~wefhDYU7`W0haE1HwmS~KSwk3Ef&vW{gWH!)qHL%*EOe2$(%<~i;x71|A!R$AYo8h3d$KA|7KR+vu4CtH}(4G+4g_9qHc zTY0(HRGwG&dn(WRzhb8N#{Z5uq}F4F?{KPcdrIG%(`I*ZbVScgE>C=g-v~51<=^eA zH>{4V6P`^=%M{VZTi8_K;=Uc@Q-^5>34Vh+vGrMK`)v56fh`F3?iSFy&n)p*h0AT} zbYJQ871wf3jT7H#;!Eyb)HOD8dL)^hyncoVw-fkO6WJmC$^O42#JHDZh}&FwyjB(d zJ?+t{YKMN~gji)fbK|!N32}%QdIL39Y+pdRC-sZ>BJN3V$0U&fbQ!1{c%Zn{fxdm} Pl4v~Rki{d0Cb08=GHUu9 diff --git a/twl/bin/de/matthiasmann/twl/utils/ClassUtils.class b/twl/bin/de/matthiasmann/twl/utils/ClassUtils.class index 1592275a43815c947a12d7ffbebfce04b7b2b089..8ecc8e4112677ab613f4ee6216c957f8849e6c66 100644 GIT binary patch literal 2181 zcma)8T~ixX7=BJZ8a7!9WE-F@t*8iOQyWYDpax1lWZotsndGv zukc34o8B;^)|s}WGmKX{<3I5)I34vlyGybVF1%pheLv1~p7XxXp77^CzZ?LVz;+TB zFt1<;?uZ%+%&^tKE(hgew`aa89F&aj7)~?nK*YY|x+5r$A!kw)>v+NeK zoO{eAKMug&+LL|uChiR{s1e9^Kph)t2rV5@al%~2$M1)5y(SgHk2RIDlB%i8(=w}tvn{@vaMWAlw<*_2Lngx2Atqf@hPL_6rpZ>nE}F~-2lnp$9m1o(>3&%H^4RgPw}W3up;kxz4}fOcNwTNd|52$1m{|52czWyAimh{|HB=(8ob4t?!)7-s?Zd^wiH$vP7@s`I87{uFnC*bBc zLgpkl$tViZ9T1r$k!yH2Ao3kkQ5KBp2f2f95s&Uir-$@|?=hecP2`3qo}-J@qWfP* z#N&VeinV!NM1sra_?#!;0)Gw{Im=s|;sSfQ>~S0>bc(YrV9M*{7|&7UDsG4Ocox5t zK3kc)!Hi^^LQHu9A+*0Kgkc6Em_Zk2TY~t(;|w^zLfL$VH8H|&Um^b@ XpG*8V;~wX2a^elnLExr$jJf{+=MC_j literal 2134 zcma)8T~ixX7=BI?8a6CYmJhKawv|HISVC!4S|C;^2yJLlCc>pm(HX`oo$n<)?JMOoRSa!SBhb$5%>ua+HwnP!XWK&5@_sMB_4>Lgu; zzFMbqdAI2L8G&eWbX_1e=j}Lgv%q_3@PLS>wS#O?a8vt`A*ruh(ePMc`X%vXIEji!cq;v zvR-l5z(oa&H3VD8dy>J%6>_Oz1a5fM?L52LnRScK?P_7$DX&Sbv9exH=GSG}RcozG zAc{^FlT%g^7|#BmnPaDW3$nCQpD=HuEK4P)%$W^WTF=W=xU7Ljz-}^AW7TA-l&YIk zCZ;jNZtgnl=5ToPfA=nq_ZkYOV+*w8^78Rxfi`APa&~IkzQ)S%$ka;K6B-I_t2ha? zulh3gfG4PC*5y`K*y6&RS13u})zxm`srQ~VbXx+W;e_fzLV=Hx+)5yWB@;JsiwQ8~ zQ3v#SBPy_L;$2KCyE`UU@S#A$tt=HQzAWZA6TRV3b+@YjOqpK1?R_4>=Fn8uGOUDC zOeXJzY=a!bnoxvPv#BcOiPkESO%wB2V80YIj;0m13?lK~D5;_o?GB^0r~<;}v&0gt zdew5yS#b5S(3|z;Ii^l1Pcjqdy(@4=T|NB9xr(5bt5z6LY}%-Ks;z(rzrfslj*g$u z^`rXhwtAl7)eSAbZVlGuv(~w~{H8Tjmxry9x;$#xb@?spVqH#K<4XQP6Pe)KCJi9P zH}3+B;XKlOkK-CHVSzsxAK^0Y;|lgMOi9sK4=>jm`OEwY>RRmQxN__^p$(IWVN`E3 z10%eRcW7*=S)xTykE^;0UvjOS_cC8{zxFFK+0<`{r=B2Ye@`GrHeg(3G|4Sjwd1~E z6RxA5`ZnV4Qxcfv>KL1=V{^oAaAhL$65VlRuJa)w&ICOLgg(%ODqO2r{i)w!lF{Nf zXo(%zFOa=ur=H>V0kMFS#V;_!T^Y2KiA4^oRzduJ)=+VyC#+(v#w{p_!W1{fC<@U| zB6qP~C$gc5d`(Er(TIJRI{X$b(SzvB6ZF^v6RClT7x-ZUPK3$IEpthK=}feHOI4oYi!{j_b~`Q!KdWdM$7y7j8qgi12N+z|08IR K5c-^o2;@Ia73N?7 diff --git a/twl/bin/de/matthiasmann/twl/utils/HashEntry.class b/twl/bin/de/matthiasmann/twl/utils/HashEntry.class index c88f4b3c4d8efe6d45424ae99460813addddffd5..14a7f10aea333222e4b97f09bb67404adf59551f 100644 GIT binary patch literal 3417 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 diff --git a/twl/bin/de/matthiasmann/twl/utils/MultiStringReader.class b/twl/bin/de/matthiasmann/twl/utils/MultiStringReader.class index 67353494dca8c2662e685f3f949a60cf855e97a1..86db4b7a180413de8e1c8540606e26e96a037bae 100644 GIT binary patch delta 578 zcmX|7Pfrs;9DTDh-EG$`|D>YQih$O37bp~{c;Q08?17MILLyw)z^2qRZD||Bjd1g1 z((D)DV8Vr?#e@SV!+}rW!GoW|6H(tZKsGb)&70qEfA38v{v|$t{rBP$KoKPy31kz9 z0YK}5`W-A_v6GxR66pIFdd0Yn6`&N2RyB@&>-6GcL>+(!iYW_vq$h#^niO#+j?B`+?e)+Ude9b|GEag*yHBAbBUS|38KqcCqlUO?G--?*O-O_dV>>N1O;BqnUwm=uuN+}0QbuG@$qK0JPxvYvjd2Hiok)9#y? z4==@yeJ!|UV+@u?w{4h6XmrQMHCPtzV%fx!z(mxm<+mI8SA$-&-LSEOtU$aKv>SuH zs9QzLT^k5;C8qdY`RR!dQi-Fj`D`^xF+Q&}*8Av{z{ayq2b}tN$&>Goyz-!z-1fSwZUG3VoUleQbuf zf`t%GEHgCbRfkwI{?4U~Kf@{|F|1hpoF<0&l5~b^ws1TxD_|%^@8l;GJ z0a-Dv)K92yeFghWhJ&j#n_!@Ykmj%qK!gVEm{Cl#x%`r%4bE$Ce}nUhtm)frdwZ>n zsBRnbb*xyThZ|%$jTc0`SrOk*v>`@Y?VqS^)A#~+9$cnXf}_9S2)A(Cf+O4^%Ylnk ao6=p}v+I34pw*@S5?G`WP;{MEs>dI-T-tB| delta 457 zcmZ8d%TB^j5Iwgoy;=$sQ4}ADuS6cEqDzg@pbKIQJNE?|9;vON)t#xo&~)QRxN)P# z7~|T%aN%zlr-hX_nK@_f%$%8f-}yb)zJA|60PJClLtv-}e!ajUF=#{M*3d1(?&+=e z(Cl~|a(FBhit^#W9(YF#;&%CxL25W%Q-O%23XZAZU^lqyCl%x{$1%&G2fm(Hkw=yx zZ5!Ur$gmpD)wMA)gP*3zu^fK0oT7lCs6s&C`l{My)H?KUl4Ic}PS3P=-WAaxpNH?>+%sWT-m?2qEY z1rP_snLi5goJ7!eTz0Vi{QUg!`@X#V`u+U}fEF4a9ISbGgmo8>JyfybV$;PF7f%_S zL#d=bVyM&`XAE{b=?jMWj#T1gJnD(`l=outEOwHJ$7ej1W?wpOJ(L*(82n?UMB0vd zmI?Aa>-0r9;+oERHsVT!`ePi9wT!dygzIt2<8G4bb~3u)Dc4E5**aiwqkK=VZPh#H z`~weTt_EROr&0|Lu6i2B43^qA$z6#yC#@OK+upf|^dzYCTUg484wlKXYR`#yyClA*XhRIPcYdO>OXCadS#Xh70S^9x1FYaq j4i0daEDJVP^OWx4e!f1yLt1V6L4kQ19z|DarF#4UIWOKO delta 466 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 diff --git a/twl/bin/de/matthiasmann/twl/utils/PNGDecoder$Format.class b/twl/bin/de/matthiasmann/twl/utils/PNGDecoder$Format.class index ae3698ef95e548af6590bf83b4a350ccd4e2d589..cc166e28874b8ae15d0e883ad47e5eb636df773c 100644 GIT binary patch literal 1765 zcmb7E+fo}x5IuwTre(2&Fg7@VF(HX08w5$n4H*zJ7saw5tWiqDRjEbZz*4J~OIkU9 zlP}0aBFAwmsigeuM}JT%-Loo?V;(F$^x2-C?w)gcMz8+;^B({o{6bMf}r`>RZAQ%4V=Q^S1w{!cIoqKM*`PgmE zN7<_a@$%t=Ql(HSZV4pLzrXKwi5={03Mgc$rLwtmz)&C*7zsL!Vzcq28Mr}6jYUbo zICa_u|H-LC?va2#UoDgmw`_sM?*=@U_SEq^%x5W`88lZZ5=Ca?1#YF&ICfhPonxO? zbXj!o2Z2JmeC9lLa=sIs0T-wWvV1D&5c;cZSN#-!cL27sp%+`JaI#!)313fogvjtuf2P&J1vp&M!xR% zn$ZH)UGF>47ELZc5ZN`lD5l-)wCe7*$4VwHuF@h4Y2hQj^JxnQuys5XxIMr%w6K6f zi{4Px!uy!F@Buz#_Y(_~n6fa(WRL}kPTm|L|I9AL?-+WC*e~P>+###U*b?nu zz+!Lz3WntB@EDZrA5dRH;e??#5^}U+Mcc51Wf`aW&@OKI2r;OHsqF2k7tpfP&!K0> zmFF;il{>k0is%D*I>KEHV-2HN2Une?T#kM!De@PSjMkW@f)$Dn;WO&~Ildsv9dm?C zQ_cPc{b#x1g5Rbr935Bf6&CmsUtN-H{6Bg7l4Jv`bn>Y4Yhu8^pZ2TJF2?Md(Z#r3OVZMH`xyl59*uks27NChLGNjXCbmF=2Gvu1v8;w@ARjV_Mo~)lF*`!CS%M3F8Q)+p6^$|B!vJ7YG+FG}B)D7Gq zju=>jA$#CNRsZO~A-KyhQg3Z<6nCo4?YhM<`@@jbvX!>)1zx+|ZHZ zK;vLahsMDO2h%!6IM6wm)uBV-t2rI#QQ*pXf!peJ_T2EXv*)`Eg=V+y_&ZMMaV$19 zNVv;s&ohj@kL`f#JsoFpj%WW`$0+jjZt4qCIKS`4bVpir(uHK#ylCx2c-kWAmFJG% zb17(Usx+ML8kX@;MUC!D>3JN*ZbwHQE7USh7&^!8?$I%Wk$%VK-l5x$%Z*ea{@-fw z`l*7{<}-$BIxHzxX{h$#Vt%J%73&Q1>1;LMiK23f!b$qm=kSrC-q);dFKoLj9xvGF z>7dPWPkN{2?FUZW3+ePhDj|=q3`KU4F4G%9;D&;o8>yfPDt^qQQYi;xzjT{ALZWYm zwlvP086Zo2EG)IKu++W6QsW9sJu57=D@EpcV+l)bMeq`DUcw5Ez$f^W@?RkIkMIS4 z{u9hDj7hTm3ZK2egn(CMSrTwkz^j?e;Pje+Unt7pv?$=0syaBmDPSp^KtsS=c_qO! zdG#;4OX_37vgJM|Ej!c4HOp4|C|b7K$4$%5_F-6dp0;MJ7chS#re|=Q{;v~z&}x*v zrjxjX8Qet$^H|3Mc5x4fn4=T!&42XKNZ$D)shOd@f-!yh748^UUSh$xAiu=@)7%Bf z_cayTL2(3C_n#=4c1zc!yvkxy;fkxYc$@1eK<}+Q{>!0OV~|p@koki_#W2M_gckY>xAuvEl0)qqyGvOKx$~_4ILb(aSfKX*f1~NFA#L0x4RFyu> z4ZP>}p7)&RdA`qi&T}sL&Y!=2l8C1Avp(9+qrJ41E8INBM~0ahD<$J3sPrKiFG1MN z5f4}S$j1|m#zpg2O5sEaCP^?^f+_OJR7q7!Fio--N>JnB=@MTg!Nu}!hNNanFw4!e zJv_%p>Nl-7rd=EGHcmXezuNFzr=;p;f3iD`b@naG!kqS#C zwM>HL60DHm5)W&NS4pNxg4GgSDnYXZYdpMG;>#phC&7AY`r~fC+(R$;Xf98X!YibM z4H85pyHSD`30ftHxp|Y18hNybH%r_mL0p0@^7={%5)!m~IO*XI4|jU_Di5cGn=TKh zJ>2c%t-MY0+oj?T0cEF$ua@{42|nTBYkhnj@AB~VM&tZiFcaoa$_Jlv^KKt)7IB36 z1_^F-^G!aw(k!`I+PlTWw|e-~ZobXKw+one`1nrVBf(v6{)~_B=6l@ySvTLyL`?q1 zWHOejPei-AVqI?j9FuE7N2)!VX7a9TT)3>ZY4yqmCbh1P$st<7#Enda^&QEsbTpa1 zG@9s+;nj*IO$~+wNT*jWTV+TfpMZXe8kWsBBw#A4U%q7d$}1MGY*@RhzIF*d;5q}! z3Sz8RO)FP7=t@$oq%-|R94-PKtL-YLtRi=~OJ*K9k94NwwH-yVLQ+q@D53N%br1tEb|vYh(AOO|cYHK}%bA z^2#N#rahAXQ_vz(O+#wXK7;)M;&;+4xtrCz3JJ z?VXUv4qMYd)FL#fE1iOPkm%U7sVgRGn}DLMitj|3yQMoNY9p$difuKMqOVqAJh>?m zP0KhLW~!e(kQ%KwGu^xwMg~^h&HDhM$>D-Tyt7ku*y!wlf_MNS76r2 zet{aM0?HRFYL{d`FygJ-t#);3UOzf-w&IR$?~Eo}r$L;R>*`DvjIB}8^e(YMMr#+O zZq=GrI4fxBXot1TM4BvhqMON?M7E8Vey$pp7$%=BfeBIpgj6R3O+xYj+(~7 zHg(YT+hFaag9Y7*1k~7~8g00xv@r>wUBZbl;^?|k`gc?=7V_MZ(_?}cqf)fJqg!fY zmVsDS#WyFTV!kZs#Xinz!8p~n-?yrxJJk|f5Er9fl(WtgW#;o!hWh;US-KadP)~)n zc=TlFr_a&n{j`^^^V78mILJf%Jc37NtIN!}+~$#K@Uo6{C>nwS$6G__ECdi@=!L)F zXBWHu^k?+Ph6FC@`3rQtAC3pIO0ox$r9)zvi9COXpwu3xX-`CxnI6U4Cy$@mj2t|{jsLU;BT~984 zzK{3&`F?uB&j;u^KOdCf0SOM#bKqEb+Yw8L;_aP@SbHpqE?~g?d>CKQ0U_%Fx}IrB ze?ewd(9Z!L=%@dn-{T8@&`&?7m;Llh34SHPOY}0+s66sRo3!U8QAp-p^b6Ac^t#mk zHwk_%!SB!@{ksHzqTfRm^IORJ7-zNd8~O5034V)!zes&d7vzN4m`KDnM-#QF&E3MM zEk8d!PpAC+5N9NK*iZjSZ~N)LrSo?rcvmPGnrjCR6)>#pjwj#`poe%;Yer1e0+uV3 zhO-okCqrE=(IgZ$HY4QcFYyrxzU=3t{D_~u&>Hq}fuD!+Ff{%l_Cnf+ni0aR(49j* z)FK|0B|v#OqW{ZwOjuB_j%27ER<8pizbwCkNu6llIbX+td@2!biCM4xv`=s^&8e!^ zuWhLgw2(DOS=X^4mFh_O z`D-HRuTu|N(Uma183MJN`+Lq)T#t`#P z_Pdzb@d^G0d_zAM2>~U1lBwdO_?T{f+Rx7jy@4E4%QtSpGy^yFqqIXhVRL3^cw+>pfiY_BOs^6iNGz#+FYT4V=?+tVLcY~`UPUxu>V;Ou+EgmK1OABv<2zx_wc1gV1&6h8g>!=m)(Pt% z&aSJwvlSjJ)4-f^VVaI@){DP%$D-KwZ12Hy(TVOoXh^Rufsdu~DBOg}xvNclTwgL4 zYwfaXcxBG6k9K#V%c^`q*}8+ZMvjzRsp%+y@}k^Zy@a-Q7i_ zXe({UB6&FeVQSZ@U35K`-Je8SQ6b7dm6zX*{0({e8$FW-v%&3XA-kiV5aZMSzD z^0(*Z??C>}y!;;I@5;-62Kl@5^7l}&_$i>RSez0a!!Oaa!u;wO-h_@}Lv;*SLC5eL zbc{J#$8a-rjOkj(@Hlh~heF5jDTo5Y#9AUB0S_5^7&7@1b|vb`ffP|D+)Ese93vGz zPR80^avURPcwm4|c#e@P9Db5q#^dBZ*-IWtKSkbsRCt_xYl{nd$^Ue?xUiQ7pp7Ct z0XzdytN6=k7{94_^i~hz3Yk?9kCXWW@x%-TQGHN`+=vFt*O|U=;^Uy}AhJ)=kW*Ga zL#3auN>g+M;Yu2eFb?v!ke9AREa>;xCXjv}En;VxZxo9@hSR zo|mF4>3OKgG2l8t1(I+dB)20&4nvwVg=o_9g}mm5TC@neE;0rh^Mr|ByXi}ilcr0< zJv4luhPm_<`OtpZ^XF+klh=G{|K@{c^H15$ueK;3nWcP?B%BrpP>FMMa5S%rk^Q?U zF}wI0eI0a*#!n_Exxv9L!oglquJX0TBYJ7%)97l*3`dFM6palBTqith4WntTqqJ$Q z6S1qTX{{Tvr@ZMHm1Ss2xWsYNm5||4YScK58duPXl0#Ho;s`pcOAk_sBpe&6%MQ{2 zNjf)Fmz#`~23@LYx6|0|;!NKQIh~$J1t9DjAnzm%q-SU-JxgWuO`1#Jrp5Fet%1L~ zjZQ&-pM!CFK{LGwwU^RNI*!5bgqB}KCy;UpgO(s9^$l%$By|!g8SuBz(?}WUBZZ!> zgZ>KSgUB`TG)-{Rvu7y4Jl6dlc_6oM(zh(>ZNVq<`5S_Zj6?ihG9%sTjaI%2@#A=; zQF(va;}nYY(5Q*lHy5Bx^vHoHl>bB?dz>!7lUG~bXX}nY+J2<&XuGbqHf4A(^f~bi z$0LFmF7+z#jIrx#Dx|KoE1RoQS3hQ(S}DegQt0!X*js(1y9ikxwI!v^LJ0Q($h5Ge&{z~pgk zjA3IG8}gtW%M)+|t#w=hjtarr0SIwijRVpz!Bg25aBm2B5=f43t8t3Do$$9_+xe(wPxzV z3{N*xH5s08cDq`SD$vGRdX#O6-Z{@#rfv#7Vqpf`^-tyM3ntbWSc5uJ*Mny%o;o~I zHrWc6Hln+V#_*31k= z%+#z5jWScSGc+_uuTJTa04fSf+%sGy1vA{ceVjS-e2KS*=Ahphew`|j`B~8tb(^{e z(z{39D>1qiexIi)pu$Zq_D~snse*k}#RXK)g|vi=XblIbl?PIS2jNgJNDuQ+`T-B4 zm$-yp=i&4gm(sgj#)?B+$)k8GU%<0?G)}TAcmKX;yG$1&sFPrp4!B#cVAd_FJI_`Od9 z7rN)OP~2BJom{2DQZ`q=z3+vYbxh#zeo!9a&gv`r#M^&E*@)!J~Ed8%uijv80h z$r^Xi6?7k>jm~X?qvV;55~7H#P89TFcvLJ@23t-fw64)qD-z#GjzUh`+?U zwB+uf0Wik%wD;km8SqWS`|!fhP1fFrj~ZwK{Q_kLSim)FAI3#vXceZF>!JSx;M>2d zy_6xek^U7a0r@g|4Jjx5_$vK{fx4CY3vnin*f<@raXMn*Bx=z}u0C{OjU5aVmLK+P zsfPUKfXWtTUzCzzzkrgQAt&>DG!C$1yYv4RcEQ<1Tw^a^A}Sy8!!V0Q=p5{WF05-v2*f z#|HQRE$saVx*q)Jh5cM3{V%}27qIUG>|X%v_W}0(fc<{JegLo^1ndt0_CtXEFkt^8 zVBZheGl2bJ!2Tt`{xD!SmtTMPqa7y|)&%kZ43Vrbs`D)E_()Z`%d)QL!T`h0k?H$s z&e|5E5#mS5&yPXok3!~;>)|sEO)FSPS<%5)fRz(#D7LNIwr$n6ZL7|+ZJ4>vz`=rX zil7CYsr*04Jr|i-CeB0dF_7B>a*u)Br~ano;`GNNcdsSgNS<^@LAvKMXeODjepsr< zLFNhgm{{uY$viSEZK+n+QjOSBjo4C+oKvc!AyphTS!4e#paY+ePGN2@eV#VwQM(4j z4y3+oYh>?dNYLqOGccjMvKg7>WpSq80E8OZQ!B-;L5(+(o6m!8G4?LgVq>G=;S61# z*T>4gwh#3eTmMQS@{5;(CQ*hV+fi~jZmHYy2~X^Qzl*(qZNhF(^ic4>753+C{VeQ%3hZA5 z_CEvmF9G|Pf&I^c{V#z1E5QCmVE-Dh|0S^h6|jFD*#8@_|244x4X}R=*#GwL3wst>lKU1GgJ&!Tx8yOn0Sr3(F=%dJm0HZnQhGL?DR{<+|9}Zk^XWv&xzkJw z`)(@@LAbO4;1C_m31BR2KB+H+5)v1BBOclcp526;li>o1df>>+|VzVuX z7F!ToY(Z?X1+gVh5Ch3&31SL+3ku%FdQ-`*6H^r2WQpRDJW(8mC|u_dMZ^+?Z2RrP z(}iaL8GFqj|X@eR;2{n?os}Sv0qiB!1fcC4=^pGl{qiSrP zbZ@t%d&HLRL$-7uv8DTnE!{`*q#GokCEZ%~`3vy#n-a#AA;?+wVP1nfAj;DgF{(wS z7UGeg_`0L;RN#?=gbVRtpRqn1>7|AY%?wAXdTBw1rs~AP42{=`MHvdok>qh|#Qyf; z;*a&v613byOM7Tp|I@>%vPYxFW7jQ0? zT}+$ROf495FR0CCy-hm}GQ!&Qo}D?uyyUJ>ZjZ-P)^7s}w~MS%wim-#)(>Oh_l=)j z=GZVNlHITgM#|S$N6O1ut2c;=z})}49Hv9$D>a9lYAy{@^JpaEF{)0JCd&pd{48_X zP)NgUq{iChj#M7R4o#*5Wd8QUWHx}z1t4=F$Xoz28*SC{;G|Z_l%28?O{NycS!AMTOR8Cd z4Q;_R!G2BfFc6HpT9#a2hY1ye<+NhF5DaU4n96Kg#V2=MbC*a~NPa!X&$xbdkSTA~ z27NWxgb1RO4>0cr(}LOf2bq^a1aU4i&gwc6%3g4LL;;DpC!o5yBbbDC`) zS87lUxWUUU`PlZ_!#v_N{xaZw7=I-f(<~$Pdo+u4Av)2I(o(gNnpF$6saD#dVsxw8M4wli>40j34U5wewS|u1o8u~>A=nN1Ovi!$F93my zYH=mtX{6-Pw2j_F$^%d?r}vTaB5tM+kn-UY!2&vsQ~}KSg>(ifKg`kRY#>kAK%TIH zJYfUbYXkXY9+30MdxikyPyw;3h-cGAC3f_c{PBtk_)E@ zVLa6_3?CRCelr}v-HYYs6%9$QXbzj1Ub^HMjtO$S2$=#W0+ z<9X;yelnKA=wlw@oALY_&sr54jy84liTHURyUoF*5CkC6+rkf_GaFeY^$|Nmu_L*!lLUaEzyZLWdnZgL>2?KX$ z0={Z}?ErUYn)KZnDJ!tcR@-HMyX?~bv)3Io8Vb;XbEHlxR#(Bkru3=NOqIrLg^N&X zJ6*4KU`Sj|52|Y@gVU1bvsW{ zcknc|huhR=xn14Mo$B*^hq{lCssr4k4)QbV5PwG<<{zss@+;~genUO1hne40Mr&Az z-5N}R4`};XxB0KyU0yzD(4hPY5!!1hGu;Da#;Sql0+?o3Vpgf+0UA^~kZ~#6uZudf zB3q-yQ|fAyn-@bwfrl6p;M{tJKEyGP8;6VTsxOmU9mOHrBQ#b$iV6NPOzdCPCDZkymoj#C|75@^Yqdl)d-_Uj`SfG>_JO6QoPkQ*@aWmJ0W! zn)?hHIa68(>p|*CcsM;YUiD%%@f21QUxNUS(|mOTCyL*oHR>d-Q_s*w^(_f?1k{B4-bM{N~wZr3d7c5d-6L&9iZg)`bx?OHiESP2ZDI-vzke zr=a>F^#7m1_kd*?vgy- zpoPImKgMvc-(qaHg?pVzc>u@fU_$ewjjLsLO-oxWFPepZ&D<3dNmVyi_#1>1^Q_Ta z^Swd^>Qx%1{uN%*YcxUqlBTI&fs5Dk5U8`LlyAlGW3N~K1i_*$jWXdSlD&EdN%phL zQJA9Ar)VRhvz%eQ5v_hh4)q3B3vW_b{Z4mmj*-0WQ5@Z8#|TbW!~Nuhi|rOIYanT% zMXqi&+laRGH(>)rN7P&7QGbL9`%_+jgDghTK>z-V`}K!A^j3d&f_GUlgv-(4x(D?I z#dWw>QdVwWR&*i-p@-MvZFwsoDL;zZ`DWs6knvwssNSK$>RlS4-lIzOz9uPbwrrCW z#&)5(q7Lg5eBm?9eu%~NOd*!Seq`cqxkcu!XiCh(M4@t@z9bn47q{ZtWTx+rrW%QY z$Vi?Yk(5!^L$RFFn-=ZQQ2IV9KtqEKMWYRaCKwJ)s<||oXp=foUl_n&P~afDNUORG zUQv_&Mi_s_VN%FT@m6O1J&)6-eKe>_h@4*ZWpW)PlKLu4O zfko(ghJ5&sOC`AXi)))Ym{ku$;G)4tmvWN(H zB!fdR$?TF*mUrdV28&sidb|h`FjydT5{qq(i$_;d(Zv2pahwX?4j?-0lo)l`h3YAQ0OQP8-M%8ltX%D9LsjEikTil~@NxlD65#un8WE=QT^ z3*b-IA(k@7`xqHH)9aHz8nYzRg&Lw4BaK<5azpwMypqytq)Mv~kkdH2o3YY-!;!N& zdJ%8TBA+oEgw3I$NS7P6nkdl{MWuSt0QU&TBIc!V8M+|lG>rb>_aPAvhcGXh&}@N> zCumc^BbQhMx8N3QUgxli7N;W9`FfdBzQCIS+Oa!W}dK)3`Xffz*1keQH?WD+wIxp=oA z-tdZ5R0O<@B6Sgk&_dDOb*1aJwRLT`R)5yIw)Sef+wJO z1MhpT?>W!qd!F;0%e?y8H%}1JRQ`sC6jN~|I=Lg9Ot!_siH>kQJ~_FueR5AS)}ENW zqHf{*XiH}#+U+4HQ{eLOmEpT4I)RW+q;|KOIIwa zl5B8fwJuHA*={CREZ)@v?t)7-$Fa`IwUSYv?2d*zW-&Qhx?Aj05!K`^v98JUR?aJ* zic1OMb;bc!jH?qbD#m+Wp3Y{mhN`qVkg$!64i%08vI@U$I8-xI+K}$PZ!tJZW-7!g9 znYn1GWy7*?mz8$Uw#XY+a#l?W&HkEAEs(Qt=b;5)*H-y*yTnfpT4Yc)l?zde4H`+K zJhU`jxjzE@w1gH(z2ycK(P)WXXwVpP`w^=*sDV}i3_wz3K~H=8X6Ufw;_BMkiL0f& z(V&Z{NdqL>vY|eTiQDl zQT>TzUoH)4X|x+uOkT;08`NokFC$zsuP~_F&Xl1p@<kXPfUNDTZMj3yS z`Bj6)>&&)rqN=^CEi9Qg8B|7YiQR0_xq?VnEU|JS?A_o8jjofF@ z*XVu>M9tc{Uy3UEewRTH%J)uuUnLn28?;+8d`nj?tF5c5n^z;bdkoquxdZIn%e3|N z(4$NfGDc%nJkitD)!ChlMwWL)yTdX_?J?=4$02Zt8|r~gVp?F0i8z2!4I5gmZS<_#FU6w_qWyHhL(imP*1tJ}zAhs5c6BCVLaYGh zuM8?NvHqMvrR4R{^Du#$N!xDJ##`IN$!NEq4$&e}?-7G~=_t&A3`ITYR>d*JFpaX< zIOEe<85{CVgO1U0kkJ!|Wk9p0iGlslVJmy0;%0^iSDz;46?QAH8YN zPef#%=%%i4JTgu4-Ztp}W#vtkyq_BMZdTrTUV4vdY&Oa1Y5Ochzi-gb?e14pEzQvU zfkD6QUy>HxuMPT5{}Pj#L-ad?J`}_1h{iD;Tb@dPIEpWlfcY2vyE|K36H#$2Fl9&U zV_T5tY3b>fiB%BW9lg?wibr8(#w=Je4KsmqChFh_UoEQ-a85-s7lC~RhtpGVRqcyY18<9IwY8t%d*4&9Hi2XfYgZ?!&4 zz9=zxB9}tT$xgFt8T^)5vpx~Wc3l^Y3`10mP<26mstZC+P#R2aTX9vto8C7i08CHRHU8XnMGdy z3M@}gW+o_V5pUQs4N?w=cVz$a4xkyXL}$FH1Jdt|czGVAlwHS^vN#**8a1cYh+!(} zZV$Iatr{@pywISrZ(czAhwk)=mkRd;uIbHd;Y8P?Ycn&I$^%wWicoCbr&Y0ryS8{Ehj zp-y6hOcKtL#bWB0@EU_J=Cx2f92~s}gN92cF7`5<#GG0aaz$9SAO*vR1zj{UPsT}3 zOJ@g$sZL2d>kMuYTjPRUqe;n$8r&*=th=Wxf|<+9Si1yjtTs$81+tfOyNBUp4$OeR z7J^+L?KZeWMr%&8b5V3t8kNDbAz4GXOF(}G)46AJZA~kZh2%8&!Fif5F9UExG%T|e zme6+4ZR@Q&DpF2Q$58XFC3o$H_5c<7&Ui6cSU+J>E(N1u+k+_O(50qPJ{2` zuVFaL5^7$!CxL0AEL-}vb%*k@n3m>*7tO&{520>&i@13mV%8RjfC zXZh(We%Rov_f|4LRHw> zo+y?TQ{X*+DF+bVEAKb>8SUhXS0ou=+8nWgw7`Hsn`jmM+idJ!#jyGi!hgd-B5H7V2 zv5eFq)@eG#Dvc=M7u_QqCOZnqm#?N$IXIez)D`5!o2YsaAED_FlE;}Mr{j5=74RPS zHaP;fG&DH_D;k8D$eqw@ zfELqS#3WUP$3@DR3v^y0HMhM}Bh)cy(X)i4-4IQT1(qpuwsh5@=rn=IB z0XptIOe;!DU!WC^Lp0|^FRhgLQCj^VOENx2q|L z&to9}a$s%)blpyc6vslR6O46HB_+UWk`_@9Eu~Ggf;QuQ75-gA*U`0fBVA87(O2nK z+DJPPdziM&)AA7lv8E>VoNpvwnQz=^x*9){kMf(VXCFHM)|X3q*ne_Z}LI z$hMPYAlQDAT#f@yY0?Bto*u$GA-?-CTy|zPU0~5A@Np35qs?3FKGs@&6sG$KO2oB? zawSBc{d*atp}q^fJcuFw5QgQhtey({_f&wMZl&8yZum-cu0X>3((ryn@b@D#&|~c; zD_w^0Sv*oj%GVsF+e1g_&PmocV~{7~&4Z^X`w1O9L^}`mt1ac}x+4*{AF2C5|GL9a zF47hnhsq;$9>ViT|9T@(=E5WW4^Ka4d&g*B)1b$C>4_JSZ>psZmXCnNDfATV#Z%ap zJ3wo&a=w%fQW(!xdI5Mn3^^SIa*v|MH^KQaNZZ42*g2l*Jw}IMV_ul)b5!_KYEo&wFW>FR zcf-6KF3or6dwS^`p`bJ9AJNu)guc~?kG1~!L(nUKu(0$tgfHn*gq3*mtn^ms^V}@$ zFG8KPMo~}d>#1v|751V z=)oEd7g_Dg?6nL}H6F=3-wGuz&y;-kOsEUWap!w`>BlJ=YenBm(J(9ePD;!(F#NMK zE$Viq6Tl%KL`C_ z<+^>JzJ`ux8u`8>^xJ&nMIAl|u`N}%s9VsHIh5YfOnnD%`7Z3v_po358n#ovk9qKQ zObTz%O8Oy&)sLu^evHlHpI~$FZF&sPx3K~9I=zF~Pw5xfc=-eUj6TL5%BS>mE}~y> zDSg1x=$C-quXqvtnpe_?yb4bj{Q++Izrc_F6K}_}m;Rmi(?|RQeZs%Q9>wqJQ~sDf zQ!eUL0r;Q8S*b!iv)Q2*uv4vIms-Pa6=A=MbFS*lQ^p^exW`n>=Mu|L4+fN?@hhP#8@>R$R6fe>sjVnW=H z=Pt(UWBezYi}z;~(8)vm2`!u8lfQBLUFh=__B^Mo}40C+7G;Ke}y(m;4H6{z+JA*-*#_#h09stE;~`-Nzu}>Ao9ICxM=ESsl3A+(66WE6DoiQ%O6o6TyCR(X1ZY5*=qa9Vb>;%ZZGr5 zKZ9l^8_NH4I1t5~5YS){SbQE1$_o1Fb;5h@IQxx{-!{ihtJ2s*=)gI#=%11 zU=eUo3mhy44we81OM!!Bz(E~wupBs80UTTi9Ml5`OMrvbz(FH$uo^g6^M4ozIP@`b zKzm@_#H}e$8|U$%vO>3Ikk6(R3{0ms&_Br-XuT-nOUTEU(nN$)xmgQ$n%T5%Y|Cw9 zTW(KLQ!JB+2|LRqVxs>P&B3rM?fsh*1kq1K?edR|sY1|DZ?a0=H?;S;OX;6kVF` zWBHfuL;Yv1KbH~UVr-5Pcfv|^QGlBW=g`(y@s!% zTd|{jKVO3*@oOo?*U`67_6pyq1%E)i5G+8`p2JC7@Fy+7`_P{F1`aGNFSZ1qkGn9k zRp`QPh#A^TaAO%9k{n*wsHlmmv|UXcn))|R&E9T;%m6! z0gty@c^tfnui?c)H{D7VXdOoGPr*7o)eHYjUhNNjLQ71K0OzFtjQ|jho4U810bu;U z3IKnp^)mpl4FI?aQrHe5-3*c40s-C%aoz?1+zy4^1OVI#0Ne!t+zkNS0|49$0PF++ z?gIes1OOiRUkCskhyOPMK&#yz{MsP=7XsifwSEQw9s&R!1^{*g0FM9wdjNpF0Kh%~ z;86hJVF2I>0N_agAO!$C1pqt^0PF_rPvwOq6vtUoLkI6b3_cjhj-=XRJ zQ*2KB4Cs3g3#0dGA^#jG`~X`VztRFSx070J0kvwUMnKT2x6zc|s_>DgSb4l&FPuom ztsiTI-H%}^tBCP%0uRm^;cTu9>7AZIp~AK0p~4Z7@@6p)rUUR{Mx#UJEB-CH_;;|- zAJPbf4=#*r<2y>-*j5ME(&({u>S8KT!d~ar{vhtj;77 zy;xF9lj{JO1h|AaHx-6N3+yNH3xDsWN`yNK0kSoUp2Zh`e<=do+XYRcEZjq`` zT=;n32PQYg{i+~Q7|~|DIjgqt_g03#F`$gFLFnR7vAOsemeQZn1ce=LB^%H?1f-mqs0?dipe2QiD|3a{)uHV3_t3LkbW-H{4^(El)bgZ?C9zMv<9z04fR z$VnpRlZr;rkPIVVJVySYy8?#?dBGe>d4iq_ua=!2DS#BM3}#&Hn6fF~oCLs!FqOhL@hkgX!0R%4#1u@94Fj^22bZF1mP z{}G+S7?fv-zYm1Fvul72C70w+x0>nzKmeP=@0JE~d-*)`q+X)a8cWSYFJEvNM|C>k z(TVGHJmA#`I84u)NuQNW08Zvj9`#i>E}=zCwzNoRL0oO zhOw3GjI}Lw9;SmS`s|BUcInDL_+pjay7J>+tg=T}mc9J+X_%Z+iOrVNFmYexk-T&$ zahA{B1mM30M{l0{_Mj)9I9|z){o%>{T|HS%~gI zx9Lj>JCK$?@q>%-NO~ro#!{DzNtY12U5MT8K*qGj6s;}|xTPrI&MK2EDV!l3olFB| ziDp?d>28BEc_nP8ST0&YW5RxFE#! zkI+C+$Mv4(ZN0oooHLNQ!hwVRm1YcvXg0Fyj&Re>b4C>GNppLN=GJkT>r3%kfER7Z z=yehdE2*oX*J~)Kt^@Y32ZJ}zRCObruf9sv>LyyKwu8Z&=|UU?&xI09KW(MO$V7M& zmuX#3g{5sq%=FWMz+f5T_;Jx0oNcvKUTu;dzzH_E&G)>)2RqCEB6;xZ43vKJppsgGBU!m2B z=}T7-WtJ&k4?9$Flw(J@^9;vVZ$c{!KJ_&+)csU~b7B#gIXEU--J)si1EvRugSZ4v z2rgrvK}i#|FO=Zc7B9#sG|}IB=}SinK7-m#gVmm_4u{ws4(Z?FV04HJ-e+`pC)6T~ zgHqf?;`+x48>(DiSsEHqXx>t*Lku!6Z9;Zo1R5zkfZFEG0MkG`3Njv}T=fJEQBTrH zm4XbO(j=9dE!!lOV(-#iVwdU@bYZj zu=yq?zhf9S--3lZftw32QH%OpYEv&$r^2zl!v3@RHr=jX)q+|C4^HfJ+9TXy2}<%r z!=l$6TEn8U9a_Uqn2_aKj4pgPn0N7m5SD0tAbEzK!XhPa6qdCMJ$%2+aQKC&|i zjY=TaS`EvGg!P9rA{-HPHqU{KBb9}_``$iX``^O=eT@dH?^C{d9YFm@X#Wk&YCqIW znG3%Xo2e2TtR*&BODwP&bdF}lJV?h}2d{G&uA<0KBp_|MRk6(iY$!CMJTPoi2&+@= z8U_NJt`CjC(STuPd>6Ci2U#SIv&A@$_hQczcc5tyKZ=++((#jA$0-`>{1|CJ zE=o07Qo90aLC+}1>=dqD7L?<-&u}V}kTjUi}&ip5IVF{T3ws znhMqLH7TYE9;Njtk}c3n6VpF|$vK6kr=bE~!cQ^H?s01mCJ5ap4)J46uaNU#<57O% z#Bu+U(nI_-Zo>sU%W?It5vc=6In#;1k|MX2qKA-jr4x@JVVCSgBHaQ#fP~kq*7Q6- zb`WDqE^rrO%W@=5fL%O9A#BrJfN%zOzG@IIpyjj@VLh$I7TzIh#?{?+gyyI=6>r`* z5gE$Zno0u}dH97sc#@1zUWaIjyq4NAoy@#|;=}k-@e%Gth+iV$H=oQ$=jQ(hnX_(11>FKPfA?+;F$!1Yg(7QXkH|QHWPcA3>l9jdz=P! z(N;z3Z(vtNNZGI`Qj?%oYL=DyODg_B7j638Yd4M{RO-U#bla@pG0sQgAuAj(l#u~h>p=P z?nDs7fb{t^f-#IsX-LO}j!A)F)vpM|1|L`}R>rlwh0K^=alD0VG%i~et7Q9jWz3eM zU#6$X3PhLehm)3Dv-j9F-YW5Uh9Q^BRZ4kEbQEY=k-h?_~2OZBIu9fEP%D6S}(h?gi7c6(usyI?_7&U*y;WO-i3|I*FW ze8;V3Mt4h4RZ*?l71q{1=39lOA!}KMQq7nmLZ>>e$_S>?EJUx`eqGm6GYXz(ulfS5 zODm(6Q^|QnUSWxKVZruq%W{vT(yx{$5azjR8t+$Y^K3i2EYOk4=lAt*srpuh$%3{_ z6B#SlDh2zNBb(8+Z&f{Vga*#wuE5FWIEQPlJ6d);jxo1du$O(O>`AX_fzwT|yzANv zmOD^csFiHb-}MwYCrAJ97T9VFl6`&2Ju6T*8t6jYKmsQWoRs7gk_O(uX&qArW^hl( ztbzOZ%)k{~HSnhNehYDdQ?J0_aD00YhPYRj3D2uVN-neaN!IGPau*DIjyWByd>#dX z%>Ud4fkVyoBl8dJ0(-v4RDTT|LrN~d(S0^o+C#4GE%=MdjeCFk^&rN%K@(g}ZkOW~ z?bVSlUh^LEX$A@v7Olzv5oxJ>nlJBg6Kj?yR)JF$Fr4btqT}1uWvjsT&{Em-3_E{} zUlKs)84uzaTIj z3vNN%PMr8bsx8y8&=&M-L^1H&%as6^Xy=B6X8Q(ygEU124exQM2ew#;BgpRt` zF6fZzuuS~kE|3>2EXZ3+1Y+B5Y3O~4_!`cbrc@JKIJkjB zrkT*@;!2L1acyn`hW4}}tnWNAh4dkb24%VR30y=w;pHxQI)Q z9^T=B96$$4IHcAmHXS>>g(KV2@FP#^5D$<8F1N3QD9U>#)3GNFV?`P6^1k7tFNcr5 z9DbGIA2R$`{}nzUKU59$YeXe+mwo7cU~moPjFlw zB(!4lD6q4>^M`UzY@)M?rVAkk{hDaL;eLOMB)(%;AK@Cl-|ab*?k-f0C$js})~mWN Rd)|Veeyoe;J}Lq9{{vF0syP4v literal 2130 zcmb7E-*XdH6#j0qP1>-9l0vIZfB*u?7D%fC0xeKtDv{D3wzRf_vQ5`^>1NYOHdw|7 zabU*3L7$Xyh8LWX8A}hBW6&hr^+epTy$?T4wGZ{sv!rl#n z!!^$vExSH5%r6(6rNAxw&1j0D16^_~p|JY}5d>(D!hsE-g6BE&wl`3juaz7>*aWsu z;mGFf9i4ruzdyAp_4;BANp!VPhSLTgHgY9JLdWZgJbJ?uc@xU%FUa^-nR20Yl)$Mvu*#fsZq5H(T&IrL? z6ESR4h*q7TzGI|kbSHdgIS`MNCQP)(@D|QQahhqqoZAGCT%`m}oJAioU4PD59{Kns z4KHL0G2)*yaUK^GTB@~KYLS9f=tvg|nXMWTIu}iBuUGkP6FU%z;V1@8yn{>3&U5_v zU_q;f>T6lNHEO$+yg$b+_N{KrJHcg9<*xJ#B1AE)uy2b(SlhtaB#%*rgkKgd9MjrP zEiq1tcgyvpn=xELmqIf`>1!e!Crn%g6&@)r*p&fZJR@Dm(ZeoM z-6lT3H3ieHPA#~BQ(dx)RF09(Wo87DH>s%_*cG|OjwBfyFV`wXXV4Xab@ASBeFlz8 z80=>u!+cDlh>K=v#YM4tq+U6OL>78v^YzH8>yb6*7$rg*cJdqN>=Drnj=k0@+Pi;2 z>rd#Ij=!>sSDz;Ld@a-DbbRkBQctb!73{Z?D>!KFS;3)4JQT(eeh>4afFd(+ngq@e zwhx`?C)M-ZyMS&Cpa&O`rk7O@h72wF_39*)wj_;^wj_}-&q;EjHGT||j^e1I<8~51 zj%ik`T;!;X@oSTh+fR=kY?SX5mNCPeuFEL`#E|`z=)MtL60O!c&P!V>t+bt1npG3m?V1B{W&e*O>gf8q&F^)=>)8uR{S;yw;pmQ0hY=wHEr zWhIRp32o=BgmGg9Cya*;L)--6G4kK6J+PFx^OFlpy7dm6)Qz6xYzpnvjO4MF?Q)fCFp(PBlM40cr5I*-j zeC~PpWy0Sk{HOl~ACgC_!Tvi&l&l*r#W;Z{|}OiibkGNcslJhG72#;9{xw diff --git a/twl/bin/de/matthiasmann/twl/utils/SimpleMathParser$Interpreter.class b/twl/bin/de/matthiasmann/twl/utils/SimpleMathParser$Interpreter.class index 99737e66433b9388c577a1715532ff3358ac019c..b806137e0e82ac1fec19eed8f70728bb229393c3 100644 GIT binary patch delta 217 zcmXYqI|{-;6h-fI;*9xe{Oba2(gd`!wo2s&Y(^OZAq?61mTMHN9R@{P!W0>Y1 z4m{3#vk!}2-^UZc7Hff-z_LBv1=lK*wYvGVVFIf*-0ui}s%uqVOJ$Z2q*|-;P{^uM z6(P!HBa=evEIFQYb*Tw)8^sML5PGH$cn*QV0Sx<=9HR39+>V}g-!iZaEr%F&chTQX Rciim+i+|sIB1|#o?hhLP9xwm^ delta 198 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 xlLK?d%oCbp_g4@uB}8KG$9FGBXKjT~1HVyyf2i z{`ddBf4P6&EB`+HG=RDIi3<)5{*YPIZ6uRjVI$FPM58sy&5@c^G8{?Nw1m5RB4(43 z>}odR2{Z13Q-gPdvB{{37}3s})$JS1U{XU)A{p0EyfQP>l8lF=owXVY!_lM}?}?kd zYFN1P({FZ4AhVK+a(ZG34O&1$-lA|coUGT-RB`-{pLc`GwHllav5;AS9E{gd2ru`n zs9c*5BGZwJJb9X+!v(j7@hihob5*Ll-Hcygv`0)q9}60hwMINF@AjaRtkUYL&tMgy z=BGK+P_V2wX!az-v1r1DQVmlS$4Rp{S)+WCo-UwuCy3p;JeBJ>2`6jF?GeWjT18tW zsq>^YFOJ8JE&pc<1G4j}I%c4PJNB67Mn$0-_Uo95D&k2+&E6hHjTsWF0+nlJ(JUP` zLU^GvcX24xl4=*a=jg~sfg7i3C|VO0V#|}Ua7;4mUPKKeTRAgy*Qy~I4*M$`t z=6}Al(y>y7xe*G9u2ni#tM^2zUG_Xr$NBPJq`VRcnbG9xcmpFbDbg3{Sfix7QxSQ; zP{$Y5dnmlA0ByL~g^Nb;*3f0d4LUxqV;#Ok@ZrP?mJ+2m+z~e81RW=L&WeW0Hrao@ z4g>9EIkP`Aup-+_cAXLFkPZ_a^s|y~pl7&6wx4a;%C%x`myWPVdyHVvOeBW$R;D)U zh{#l-HPsk4BO%!!sv{;LoM#2Fh+e8AE|_gm6$pYosUsy2UE##iaA!Cv%Qx%j6|-}IM-QYB8{nNP$~kciW=R_gUfJ@j%y|B@*-xm zGub6WU)6CPuIEsYyf0R~1}YoGlCSCby0Tg^wcPAwrIi&o>bMEp$RPcnPz78PD-aly z@LRCmgzhL1RMtd-1b}U}fuyk3YFxs! z9ifx-?!f^a1CmbeWXzf@z(E{#;SjSRW6R1|v{T0se0MmLWZ=IQ*cIZor^P=3CU0CX6l= z%~qY*++`%)_yG^aHR(g8oLrR0I?Ap1b>nr~l{G85plVS0458#rA@PU8T|>6%Be`?q zZHC8;VHdnBYks7m`V+!&q!O~w5=+H{W@A{og^8nEt6Aa!vJr?z&3Hq^NF;=;LLt%a zo_L^>JvMGR@Jc(vC$BUkyhBb&UdO{B4FKiF@vW6_B0t_g2#F68wLDmW7!)M64x%B^LXj46B*wX&V2o@7G@rKfTm2c~h%$r+#8@EkrnMCu5% zR{zXFl;sTK#0xVU7O3fZZgiH~Xp$vvqmhk7Jp&J4z$wS6Ut+8Gq}4mAelIt);8-Ru z$6B#~>b5#Gj#tZEeHmwSOZS#} ztNP&b?S$K3Mj3zWe#~~RKY-c&L+>; zek~U8FkXyR)YFD#xQMGS=IV8doO)%+y0m}Sp$_$=eIlE%vlvK1QaR4%Qx4ZUsAmbU z%Q?Ro4SZTkYs%sFIFCWoj-gn~cMeH7xcCaq1>X`EZFfjZ$Lq)#d5JnDMp{YdGNE*l zZx3H-DcB$a)%?i{d7qczRY~th$ssJ)&_DF@STjvB^O!`NMcZ831hmt$Ax4zRi0Z^F zbdjDg&D%i85rXPw4-_S7F%ouZR_wIe^yHIZp+Zxz^Wh}w6Sb*RiGmH;|HRj9;d_`? zC_IAO&!6C{;cq0qW`+y#wH%Mnp5ak72ENV2w}tq=OnjFU-xb9772>;+_^u|tYl!b! z;@e7m*L^m8Z2m^$)3%aaNtL4(w(SSex&vGIa!Hdl;;raINtS!61`*sR(5eoh(}8}} zWhQ;zS$&u&i&u$6^&xB!iAfx3_IuY2qTAx6hySIjQ1Q;%J@lN|pBcWJ>MAdfbB!e2ekZha_dL#l0N45BKwL z4<5jNJji3VA5Y^U#lGL7&yKEK9JZsYn9;X|iRqx`ar9;$iIzkwLH@_6W>#IMpH%Gp z2%f2V5_@cQNBaiv+P(=m>l9K|u)LLhn3_cad7fE%2v_7_pQ>V6^w@>2f9NGu)%u5? z;r>=G%~u6}FSmSzmOaK(=5Z8ZA4}I0EIUtfpaeOdzY=6f$0|awCX6V2b6ju#{_4KO$QW>6=G`b;#MqK-8ql77gI)MZC|hlNWgy zz*bdOK)+apWj5~>{K@+Q`!3H*ZEo6Fz3ck1JVRAKYDJZEz3*Pk8CL9EPu1SuKAflo zbEW8$>>Kv=V_asbtmCQ)!>hQ4fw^<&m-d92H6b~$CbRU@>nRO6@8ba^hm@!*72N~) z#zEY?s-G!1V(5>gfae7{ESUuO+@ zgSF#LT#tA7pToPjo%cuZ9-haKIrBc=!Uy;%?|C=;!iM8uGgD$H{VvAHkm1 z;=O}-)Dn7p0Q=>M$NEtv*@r?u{XgAu!U)#A-h&vt;UJzmgb}RIB0Au=Wc_z!{X-)7 zJ!{a1I30hW2mXjl@F$*Be`ciqg*EA~iao0(+cwM|yOcf&cWBy~OId|6p?dlLmjp z4&h&H(pZ`BcV(b7oz!m|C}}KC7+*{?_&LZnqnU3aCMEy*9c)Z9yYF>KBWLa9;T@U- zE-eQobf@&Bmi~!Z`iZE7`uK&w)_x0@IVf5$AQv6yZyWaLtbB3j&<8T*lT}Qg$J1s^ zQW2YvT&;kg{0iCU6kv`vPMKqMuJyJ#xon`t3s#TdM$R!V$UlMB@Ph%bBU_+e+9~l_ zCUH|&>f^cPFJ=6UusD;XmKjAfqZkE*T&zvxhrr2MVNqtAL6uBgF(a3Kp%hfBSL0`1 z)ur*3-{6k3=PHT|Z?(Q%C{ms4tHOnZcsc`KV+Q!P58#dBw+8TzMOAh#q)D@UH;o^P leYCVJi>%tTl~%F0$f6e|M&6?W2dl~ZybFK;e;?%K{|6d_>UsbG diff --git a/twl/bin/de/matthiasmann/twl/utils/SizeSequence.class b/twl/bin/de/matthiasmann/twl/utils/SizeSequence.class index 4e40f1a453a113b15c3d00d0fd5e142e47db2238..0789e6133ec3b65e745206c7ecfee43fcb01f4cb 100644 GIT binary patch literal 3383 zcma)8YjYE26h51MlQbc1Q((&_iGT>U3p7wlDwoFAa*GrS6w9SJWScAyNR!$m+|i1b_P+$3x!bz`Rw=s$8r1xe)1RSaPc|syWND#2iuu<-+goToaZ^uIcN8m zn?GJ5qIMbzQUk3IQX_2$V7HN%O?N_dS5YPh*c=W%g6KaN;#J=#Rm{{z<#1)7c%x*_-{#Zm_`nov+}*x zsFlf;Ps;GXIPH*K-d-%>w_-sV<4_;TWx*v^$l51xmoFa2Plt1d4g>v|T>=--A1GUy zqg$;}2U!CgZ75``zUpw0ay*O{0lE&W6UUF=7^g=5($vn|l1jDiL)fgHFIyS~t?ZFX z$uW~Zf`-3bY7LdhP3p|_+Qcr(RH z0r&obeOzGyw~^v8fU0+r1;d_v9?1j9^|y&Ql}=bVae@QI%2>wUm}B{y_;5;uwj;wUP@Z0Wo6nYF2V9La)G zzPRM#J?sLKh=V!KR$a?b3V*GGv;e)-h{g~!m%`LU8coNYhi2deNszxF5Aq6-i>-$uScA9{#mPs@DT-Z4nNf`H!yUVr=eXDmOSTP}7s+Er zE(b4=UiH&J+_&w3vy!GE{p_n***m`2_k0Om!!HXQuW?)%nAiM)#CdEKET25=tbycp zAwg>A;olL|hi6vnUHo`bPl#x2oXlt}EuKnvBZl`Z1q^R;f@T^57P{eWODBZk73r>t zTYnldpf2;!2Gm4r5q=%{sS9~YBH<4MX*WRhpuT!hUhBbbBPD2)1eQebX25y?th@}v zWxARcNv0m^q{Y~I;Io|`#7>9jIJICWs1?tIN!+BMrfJt{mi8}&StirX&N?*OD7E>((5K}{T1U3Dng4Xfc+MP?nCgcxZB1<8MU$mrcgrr)g#+ zHc5VQUaw}OS+Y1vb(BXYMlb^k=>Aa|$5bBNIL%HRZbP079z4}RE3i|_p~J4zOpF>H zm=2C#ai?TUa=D?x3^7hiuvYuYP<^z&Et>8(ya_Qub=*%$=*H7P6`zSJCn_Uo1!0dP z@Ckr8381Ht5`tT3g=!(5Iy@8-zGa5j@R_K=brP>uB* zm_82#FQ9E+#FTsqNL~i7SHSC4@On-1+KiywR%$}b#-!m=lq1U(YPHj1JU>*6@h*Xe z)bXDH@2OegC(m`#H6F5fwK>eLRyC_3Hq~WdBqk}4PAH}ref=@R>kf=-cMXi!k>Arm z{RT996HW9MTI_8!%R4BOcahHbT)i3`UIJD#?%85$bg*)Y7c0kXQ~^ph9dx?T( z>;efh5}ia>>FBD!?rN#Fqmzg}0Ob!cj6Xu!KgRg|1du<)AU=akpT+e24Ab&+%%CqY zZzg04)XbcYSB3!vfY=o@?RH)oFB2|Vo?KnG6F0Sb5Kp?qPlGtS>9~uIh-SGP9YT5} zRzs;uM!h!Y%Gx>y?Y;!8^C0mRl=&J_zLB8SkmzuscDPVG9H<7=R8Td%{ifdiWoX6& zZy^J@5*bHI)dzqX;mqooTF5Nc+RQ32-{Fn%Ju-U%fF{uZ7csXlNib?ME_A^xln^xe zUeQV8514KjK@#y90ebWTg{t2j>igv<6wT!tr#{!IkH7igN$>|Ct~|bX;*P&o!ZNL@ jP(qie{!Xtyqj#@Luk)3?>ox4=E$rk?!%KlbUV8rn=o;_f literal 3376 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 HO(^&ugMG30 literal 8579 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 diff --git a/twl/bin/de/matthiasmann/twl/utils/SparseGrid.class b/twl/bin/de/matthiasmann/twl/utils/SparseGrid.class index 252402b63845bdf4ce4863d71000a2d841149234..9c85f9d904a79a2b1586eaa17988c35e28a559e8 100644 GIT binary patch literal 4291 zcmb7G`*Rc575>&*?Mh<(C?JDuK`0oIWsHeQ+}5UmV@z;rz{M0|NE_DDViwDivXXc; z&8xI|G$bue+tdY`q%`g$ZAri;!71rXXPTM()?fRdq!a3X=dLW9luT{U`0Cuf_nz~e z*LUwH|G9M=Kszo)um-k?;Rvdb3S%|WGB{yQkIT0akxs}r*Tl&PBCsR)GDgE3GBS+G zuB;3>8S)WseL^Hpq=HCA8A>volHv3ctj8JAdp3e|_^wD#%EI?dJQcyyc*exDCZ5v} z?9CRvvl^_vY}WC5GIpWh6g24ja%soJ_qp(}=cad;vZH|o%{3Sl6hqh%vA>m^lgTAZSQmpe@j zsa&Qs#z0pO7VXsNUOTURW3E_1gjo=n_Y>w~luIOoj-P15bH;L~2ruGhB?kv`rwKeL zj?1o8u9T&PYJaguf#G_@Kjm+(_9vA^(=9rlU8K%Vs#z$s`E}K$a$QiF2o;L9f~8@J z5`8-ijgw6i0LzKO>_`1LOH;$vg@xlTn`{MD;ig;Y9m^Nl1c5{|YcQC~IJT!|j7aU6 zeRkM6pn`Tl)qc2;&$x`6^nsamPD_#dlK(BVEtM%(abz%8@>0%jS4y^at}!;Bv`^U< zS}~-ddBL3|2R2*Sh=he^BrWWf;XHm|;fHwMLJKx&SShO8GIn;Pt$Vh~dOa`aS$F|2 zTG%FMzAnQ{_>qN|F=XKaUa@dgq+NK`!V!^r@nZ{nWaz_BEIcB^MLcBTr%0H1&BD*{ za|^!^EU)928k!d3hKX?tzrtY+b#pNH51({WjAe2m8vMRv3oK~!{CqP-$K7mtK=rBA zX)~E9lse&N(w@VHYdyNK8k%iI(W5yPHXAmNtplG-^l>bBBQpLPna=cFs;PUb9@3cNU1^X3Ht z{AbT_gtQG%w^CY#vl`GoHgjy_>=1O`kU)L%CbZ-gNM9t1i#{^F4&eQ5Vxc#*%47hHhfX zM=`xIJ_TzWMohn^U8Avpg57~?%3tC0;;X2|*9dzX;=%;jPM|vou^T(_5FRE89AW#X zu^S_7esOINLC4X=(+LE5qMkaEFsSEIYD&^V6bI0WE)^QL5&~D~hOX0LWvPm`Bry6N zL^TsT?qH3Ho!X~Z_bDvy>!y7_8MmlY!n~)oaT3+7@k!K_LpII?F z6RDL$a0*`<$8x4{>HJTJC4GJzHXuxSFa6lZSPWn}zKK;tzY&9s!9jZQEym!m@;m8c zsQ9y|;?JJ4KN6cB`W;Z7v4A$-M-O(*CLFI)gZR-TXqeJ*Nu$V(aUboneXak1NxaKj z=W^A+*n(Mzkd-Zb8x8mli}`V^g*^{fQw3L31y@rUR|C&VK73q!|5=|Q%7_zOFB9tr zd6dwkJL2&xXea}`g1Y(eqH}?(QF|SB&2cp1gaWe0KVJb7uK5XzQ#x` z!f^fP4Uf`rhK93WU|1?yD(xPI`znS{mOWlUkE8SbTya=ZFlW9`7q!EXb@Z< z&%8aClS5<~;2Bo-vn1Z<7@OzWxi65yUnDcV#NvLLeS86r;T87GMU3*TQo?I^if@&t z`Bb^cm&$KB{*h0RKjRW6aT&MpYZc!-!<1$Q`J|%$I{ZQLnn4>^RUetObXoCVi1sch z{u3UVu2jM_`NXflY3x^}FRKHTq{XJmGCrG36XPJ$B8}04&>htKOxPt%82Jo_*0BEH z2+pwF4HE}7{+XmCFr$Y^OMd6}@>hyo^{S#3Q=cFyzQb=m%^7O_E#;h0EBBV6is2xt zYIcf>M=``vuD|_kR@oNwOC_Yek46!B0~+_d0pDiGCa?^@!%F;qo}F0PP8A7kR{5L4 z0aQL9)u&%Ymv6+--@uk+*5`KZSRR&;_GL%a!QQ9h_b$_L3Zte(PsOR3{$s^2 ogM_L!CcS#6#)Ze#@-fBmUVihl$CYo5!-wj6izoB$&a{vGU literal 4285 zcmb7HZFdvb5q{QMX(h3M1IQpOC4e2U1jeyLOfZB(2pFa2rI?svLc$^~upqC*N&-w@ z(xkL`X=vIsX*g~mrR6|hXi5S$32vdElAeC+*Zz~76Y4&5SC*BQoZ8aS?(E%rXP#$f z?#$Ic{(a{zfG%7x(4e6;XLk%)^gkh&XzUkUZKF-%D(9+Y28`K+3Ph#+{#d&eag<4G-w$O^INS_$@a=l z!7V-Gl&r&fJI6PJ8p0d0dB=6i8#M&lQUkQNg({+$i-!y}YM48PXiJ_-Ow7Z44NW<_ zqwzJ2ae9p674ebYJV$wjjhDB3xti^1r=M}ston43Nugq{gB+ zB~TKVchbsCl%xhCWVhYKMubIr*2Fgu7Pt4A*nyq&tmDe&*zCu1X1YbsZWG^v$y~1# zb5_~jQ#idvQI~i9CidbvI>EOg88Z_DnbcsE`MS@NsiiQNIG09TOMP> z)Ssn9p9IO-ZcYtHC`=COM~F(pqi8oCAMDZ(n_9=NDEg}g}s-{+dq2gujZH}~txl`?MwZPP1W?a|yROhiJ_f+BGaJ@sw zPPAevb2z}ZD?iqGULjQ;Xj~+{h);9)Gz%u@&F0ev-sSVqJZ%hfMqudIpa*VZ!ABen zpo!Ozn$m`alpFY4#9t5%<|Z~z=_BQ1wHqRJ#zI{^`nkYF^5VolKgNO)G{*JMF>4%8 z?7xk*_u_hUVhm4?AQabcXg6rg_d>TKxt1<`lIMbTguMX?JcTq%>KYc)ZfwRTJdIvF z!}_xoIc(!@&nRl!eb6;(j+9|iA`vOWBtDm=Z4;#c_3ojjr%5z{R&1g7gS62^tzpXI z`zGl35z`E;yN@LXlG+z&`9cMBD{cD0xI<0i=I!mxqv&lmn<9*1 z*EO_=)Xq!G81{@{0Yf-YKeTTu84UxK!E^M%KE*rj zW2o`oUgN#J%9{wWpKJq)853y5BV;f*8F0Ks4Z@>U&@iMU5=N1m6F%AlJKH~lLA)=t zPsM7nO8i0MJ3zl2WQx9khw&nou~bVI`?y+bxLRwtTC2DgbFD)~am95+YJwYmR}pc%&$kR|^58jwT{NP@E@F(lvtF!42J z(+mtB`)|W1XgE*9?$;QWJd})lfZ^jc!^f+P7m{(Tp67{u5`rn4{w6=k=^oF@CFX3U z&hEk*;e|EA3%^RZiD2CSZ@2J3yJu*3n0C+7?svb&?j+v_*gZ+mY8z>PXPVEVQ^sr2 zy-BI1J0#CNM%<8s6OM;jaKg+^Jtrk6B64Re($!;}3r)mA7bpHztusb_oiS9Mc^~>m zYHfG)8a7R>j2pMmo4g`#DPg?<@4ptK7M-p&hSdE#6?}zsY@k9?!GE9mLzrw_o5S-k}%Y z#dq)?M=#(q$Nz|5;X}NSQC!3we4zYW^xag8>o`~V`83W5NFvjT_#P$MFyr_>CE3^G zc!`LD#PbJL|3XA{MeRHmHtLu97be2zeGfv z|7gPmsfG+_@-cYa0ps~H=KE2ldg&_cgw?3BsOZ-N*Ev$(@P4C+NuQLS>35~-Zj`}S zYAtjZ*~z51udY-31V0opFpBg8d*4+$>l)GgjwF6xXC+>>(f}SosZzS?RoVT#@4kli zbk#thi)kl~l}5Btyk5PZN$+QF>N$2>j0Z^w2+!Nhc4jRyo&h(bxD|2TOPxkeR3G^ z?RVbgnPA5%?vH>B^oyjg>|YfWU#${Oio>C=oEVld;J_!meoBwsVHqE1=>LM%_$$v3 zciDvRDRh1{-B?8zW;^;B(}#cic%t|@r3QZArltla_B*^UCQ7O3@3N(pdH*H<7AJXs H58?j+h~Q^G diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression$AndOr.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression$AndOr.class deleted file mode 100644 index 44423829cc3ff00f689ed05c4984908cc79e50f7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1373 zcmb7EOHUI~6#nkav{T9;rIcrRDq>$SJQR%(0;x4I0a;*3z}3*+z{oHqGcCGsqw!D3 z23)bxg~~%Ap_;hzPxw!)=T0lQs0lQ=opaCg`_4HtKYyQ`0T{zQ6%vD<vE?+Fx&^GYphzFEP<)4W!h$8nn8}mmnb5g&+#CxA*7;_q4Alq zZRnO^ujy%v5@={bn4vYtUDM&Y*}o|T(W2`mS*Zg5z|y$$FinlimkGQwgKB!$HsfKa>GAN~8|an;^?xwbmi}FKV??X5bhKzMuzR zaRVpxWjOU}_f^u9Zh(BK5D~lSVH@|TN*=O7$YlzZRWPPv5Lh6oOz!6zNth^(mZA#1 zM43gaGKmB9F5mZ^O(^p8KKeU+-DC5l>rW+*5Z^iKHo$q^Mi}g}=a! z8)pQZc?*U9XYe57CE(-kK-)HOpKeb39%p)p)@f;=q)SrrhH7Wik>I^1y=-t3MgMrNsGEM zN!U}9;oU%1w@b*t+m%zY?5j>#mSI#mZJC{0YTA8-c)8K^EAqOd>X`ha5aX&17KSio z;T)zd#4%{$JZ4NxTDX9V7G`nDM8U!wE)(odo&QIP3EBUSAWU~UyGyNGb4AE^5k}B6 zYSMHrE#XF|Iqar&Ef#9JJz0x}hIk70GXC!ufiTu{WcP32y~$bUdG&xZaMF%3^)8qZ+pPoA@1 zkFxY|6!5hTJ=H=_;UEsNKgB18q1~gOY-lD9n>YfERNzroxv6H6ld7~1QF|{FuJqU{cvupCVMUiK>ihM?ue`W=onIjf0I-!bb9q z!4s-S{c8{OEcMO5$nl$qKa6T^^v=LomvK$itKC|X6&9G^MYCJ*Yrjevnu~o7>Br;evlE-IrXeWgG6IR ORY^N@{hcf?Dcl0%&OcoM diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression$StringIterator.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression$StringIterator.class index 38eb9347c2b1bfccf4d19347694b7a0c7d9f71a2..ebb64b7a7c7a72ae588d21c386d1fd4ac96a2a0e 100644 GIT binary patch literal 2153 zcmbVNT~ixn7(JT=5|%9=DW$c52B;EJOH?eal-9NsG!q9<{(~CM|gJWm(-v8mhaMbhcE|3S57$7Q$_$3z^HI+}1cftO@{S%zE!m*xBw*-Yt3U^;;- z30zHJCV^Mw>1#S>aZQHnl5p2>dQ!D0sX0~M7%h_4avFznDJgSsk z4O&h^42(t863=QPB|%LS#Ob;`2UmFn7}a;}++B|b?`mGfq4&U7rh%h>nfg)P8C#k&GZ;;x@)FwXT4jcY}K<$E{ilhHL+fC zlIuf4%5~ zhJLOl84=;EXSSeaj^9J%C+;FR#<2xajvpX~5BaJ32v2g?8ARhL406YNes+y3dOXaT zV~jlM$oz~be~}tu-yt5`L@auT&!c|!MnC3bKdTYMhgqLyOamgx^OA&b4G*Q%kua?x zDJ69c4U#S>Hc0nLT{>f@$Sj^=l;rq~WQ6WSriR81G;@k~eS@L=ZJAXZe?+ zK^U@-)(nRI6+b$hpU26t%qgA<`M&zPlKYm!sCogutP`Lw#I48Rry`W|UDhrbBSK6h zWtVQFF?sOrwh$cwU|h5~Bx|2|4V_fuE^h|h1D9;jEnlG>U)SM})b*2C?Ywe&$0RpH z`2L_1N2L?L;P3{8-Vu27pFibv*E0dux5T+kPk&#B)nA7tE$$)M3p-rjCz!N-SSXA= zfOupNBBkh(xEda-;pi^WpvjxG<_~-gex#r7)HQiHETDmY9Yrc^avYJr(4h4Y{S5IV Q7(<$~&f_k;jsfWZ0>J#d(EtDd literal 2155 zcmbVMT~8cU7=F&~!Y<43(Jcjq+OATC1!1*ltp%&Ff^LNtrKN&j9d-}wz%sj;87%kO z#EV{NYGV9|MvO7m#?-_v#wL32FY!kh^?7HOWeYShUd)^`=e!@!^StjnfBgOHZvalB z6h%nkbY7>|P0uS>rn_$1cG|mIOmBEr(M`{Jrl%)2%Z_$kt7M;;^Bl`w$$Hu`y^<3} zM4^4veAi4DO?xGMVQE$8JcY39ISPsC-J8H~lvm}FtDv$9jboN=d1n=l^zS!J%_~GQ zrM!+Kj1~h;Xr*s|YQ71~XrKX&3T@Mtt}bJsXG#uJ5X7Q@c)&muu{gSMG>V>kWC+L_cnHTxv#9MAui!h9bqf{Et<9L_ z9dKo>*Zj+j#OgJ00*}%wS1_G%N*U?TrZW82n`K|xNPkAOiBE3kblGD`+$aW!#+TaD zn_ha>bX=CKdL1X!#|<1or|gCeB=K+*PbhTlEzZP-Rm^KAhLe7HNvHG4zBtl&N(vB{ z-6;dl;56}=<+8T(3P*`&U-_z`Mq@Zb)4t?N$xDj&n0P;@FmzDG?;AycKX2d#j8o;j zc5{xkq-RU6CG-_K`u77Em24RUFN#mhD+LvaBZVoU@{&U50T8l&*Ig}`)Ll{Z_=X+G zuJbWWD>PrKeJ5i$uW*PGBumRlT2%)mhFSXd#qgR!LtoMicwZFWmqe`WeylrUF`v6; zmFLQ4PP=iuj>RYz6b|p!DZ`#HSrx~?8+cQ}u-wZ9%hRs7NULO0i=?}vy=-3Fp2T>^ zz!fp=u-tPTQ~%srwzR`8p+Ps64CKH%Hn|&1oLUaIXp=nvCpGQHvVj%Rw9&GOgX%Z9 z9wQO^Txr9}=_yObuw&0}V^}y4Z`QW8lPQ|6tJ${e3aS4*k_xRs5qJJQY-ElN|6(Du z%kO|Y$VBoj5Brt(&D>4VBE&U5unl8i@DAF3;#UZV_-^$hyoU(hr^huUc-9$M<1jk- zML$2f;*LX9jX6mhIY|usj4nQH6+F0whRCh(EuMz`*p0r$2YyT=u&%~D?%Sw#E}TYQ z3CvT~kcNbluoXNa!2+N`uaF zj*sgEo2cQLz{|)IiO`H7)YixK9HriiF-wdh;_(`&R|sl97Mj$H@JXEr$7@OXcc=(=Ff{G{)yd{RNBpWnIdVdy6Pt zG+*nBd^LCPcWBv_FsMO`)ZiCf{_LMWF73 c1l5fp{1;-1kV3E+A%s<|ah1_iD8feUUpiB}vj6}9 diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression$Xor.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression$Xor.class deleted file mode 100644 index 7d34c71e98585c4d8e1924aeb59faf98fa0df6ca..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 994 zcmb7?&2G~`6ot>&PMjL2xA&`nVUWi?Gk)ZjRk?G&~k zUIYn=4I3nWBo=*u!U7O)!8=gSn2H4oQfkRFo|$`(&;9P~|N68CU=dXthCs8c{GLqH z?La0y8AX2jB=iSq5GMXcDpPgq=}xSYBW9faLjMFN)}v_?)` z7RX-@q9DB?;8%~5SZfPdtNpHWVB(ky8?Jy^t+mG>FzzCUyud^&h}8O^x258{aw}8< zCtLlF4BIje^!jkqB9(*&M)$25(R)Gd%5Xq>0#~a;vq_|@Vio&0qk#B{H>15=+tfbG zE+#QW29bK0sfbNo&S@8?P!cdCT{VxSOD(o>5T*ixt{Ov=hqj&N6zQ$=_>SDkxY#&P zfnlxuPf@l;?rii2aYwBMns(`*t99j(+?4|E?I=?5YABOLu|ktDF-IIG?<-rRd&e&W z&)C%hcgDC{jNh0l!rg5%sP|B1#4>gmVHR7pjnJ=A=~ zJey~J{T;j&4#oS|@_S1;bIE#*(sbUl7S}7y#s^G4UwL5(&+>9F4}MnOFvW!aahamP zSB~E>gYTH<+{BN}K%I6d{nvochzft4Lmg)@MSC+W?kr}hHOI(F7zglR+YmO+(I}^R VP|Cmpj}2VFMa~W-G^tA{{00Sb_Lu+w diff --git a/twl/bin/de/matthiasmann/twl/utils/StateExpression.class b/twl/bin/de/matthiasmann/twl/utils/StateExpression.class index ebc1acbc5ba863b5ae9d80522fa6848678caf6c2..2ec190b1c6c4b6405386654befa480a865636794 100644 GIT binary patch literal 2996 zcmb7G-)|IE6#i~^wzHj1%hK9H+g+s!vh4zkB3j#0Tb3e~QhtH1Wll_-x{v5B?86fco9p))wqT`!I9o-h0k>&OPTl z=gu#Ge|rnSqxewAUIPOA4Af)4`Z}Oq{bigU)N#mwj>Br@hdcF&x)%LajV& zph77NoK&LEg>cG%h0|)1Qm?c^k~+>9Sf!A34C)wCqpc&UW7t3xBL*7PW(K1=vI4>6 zkW7sTm_6C7bdnj%b*0PY-rS&_5~%F=96LMM<4MQza*jZ0Rt{R86cEP*s@E!U$Fp-; zcZcm-r!z7w5R&6oX3Q7b9P3TX#Hi(YL$>9PTG?#Edm)o>WHv1w=_I?@_+3 ziI~B><+#M}jP(v%<5nVLWd{>QFWQbZEebd0*%_BIgy^2gJJNND*e0MQb7>;2=(V%5 zZ*26mbPg&P1*&>;DJyf>a%?r9T@1*HyxRJoRe=)M7HD0%?X`DDO}RpFMlZf}3@TOd zNU4!MR^IoJ^kF&$jP8k)%=ktUUnhw)tl9eS89+ci8SEhYl?Us{Vs+r}af6DE)*Dt*`r4edRWo99a{@j?8k~?k1 zv-|Gh>sg9EZSM}h66e0BB*!pr;ss3T zm^ASsUJ^(w-3z}*m^h1mcnjxEysb>dls~KI%cyIv zM|3+*j{EQ6fi4VZa3(xzr_w=w#d2=p$a>7gOQ$6Ru zx|&b)!seqAtq)o5o}9zfk}7Og##okxO*GZ_40puN_vfvYYM@$PO14#sv0eiC9G67T zT$+5?0&pu;IhrDsA0YsZ;`_2f;M<~68 z#w&SeKSqrJHGp!6JE+s~gpL+G$pwwqek%-B`bAGmKH(aTirq8N2W}wL8(y=mxq!0E z&^ZM87#-1Y;}mpl8d~6St%fIvHq-lZ?bLOY-zzIxgVCEXFQIw{6$9L@ynz+1!D%F- z;n)-+3p5##)?jnEsete_!qITk6iTOYP?@a@)@Te(ye?S4$|FS^+-u>N(NR?uEui{S zCA>afzl$}YB=-FODQ*pEH@CF{c=_Oe0m zW5eCgUU>lL(T@u_go`+ek1>Exa2%iE1U|=e_yVVJjamhyaSIYZ;S7Ez!mqIL8;0>a z|JDA$DE>rV2)42^xS|T+MoYZrg=8t@(3v5gFh;Y*)i8hyG*AGac?h~hI1 z2#F+5(@8>=i%y8{8D_}gz7se*RfL=w^1oN#cebQ?Y5$5 z%l)Cis<2u17fhoed>fl|a(bS!P(LC^!aLSPy)~j}kxF21np3L;sb37-gP9 z=%M3WOI5Q0 T{!rKBK|)74uH`5=u7mL}_gms_ literal 3055 zcmb7G+fx%~6#so>!$Mdwf~W{-5w#{<3|bZCRxqNXfEO$ZwCI|wuo9BEyFpNUvsc^N zcAUOwJ0sJX4l{kJ)f%1BT4(yw=}ezH)3-kKf9M0Y{e2ryQ67+;&A0pQ`Of8ce&-y1 z`}c=?05;<@6*&T-m=PY;9cS3o?NL3E2s>xv;k0AM?QoByJ4X9>$}()*OeRz)0{+wb zm>!PniJ|a;lc$ZSBaoXghA1c?`UQ&D>9%cH4(07#rmdfh8!>^rrfA$um`;m;Cm8A# zP$J2g;e&=k6-xw`KGGVAQ-Ox1@C&Sn8MbK|v9>vt(xbHPD(TOMK#>L&xjf%#CXDX% z=t;vmB2Ds3XELhCdv(i{@3Wgrcs@GPrKe`!bDLbJeDGkEh84)CV+4W*syi1AOC!TG z#`JjF#h@;@;7Q9!#0<-@!fgqYXcHY5+{O?g^QLsmrpv9t&POoxIF^|hYU~d!sBXdh z&=Ftzc+^O_;Hy|8u*y~F7~@X(pfvLEvx>C>+ZP?m^_>2$U?~ zb*R_Jc6_MED(PaQ zh9>E@&mJ*TJt;kE*mAo?!%JwTmXu+PxU7%lb9<+T2zK#3l_XU~hY!24SH+$=BW`s@ zhILD4td@oj>|>rxdml@;BW5HV^OR{=B%sCWRf3UFzlu(Q@Z#wZ88)IL(!*{I2XK%T zFl0EcYJug!(9>A@upjH?fgTM<@G_f5HWgX>q)R=HYB+{IMy1EtG3L=K+i6%Vc^II; zh3Y{cUd3@0gYz0vmZTa^KqmuCR^0f3Q_@05h#1u)sv!mznqr&hxUdts+d~?LUCx+x z`)JCUP;q*$a$F=IcAs|3lH50C&gwC$A%P^-Fm&l}$KzqodMxG6Xt2OMsZP>OJPRW@ z@EAgK!7Z?-A}vreuy_JCsyHi9yZA&NlL3ukLKgEmQh=T<`fy{YSH*>A;!Rs3c7O)Y z<8^894S~8~8eYSCdc9%Dl#=vf%&7Zux}GQ#AuG9oPD=rB91dxYiXuCrNKF@Hi# zq~@l?&V{r#Jp(Q+vJ>|t(^k~jZOUP^+->&l4=3qH*$V`;jzq$++<|A1AYK<8u5NV+ z6wYtDWE!)jtYPc&aDL}Nk^KwsuaYy6J6`1RlC90hwpX~ms;MH1_xLYu6ndYVb}W9PkGxQU2ITBGTZk@`o}wJOzKiADTq& z6pl!-SF zk(H_cwov92QI~peV%as6misFvQS2VQj)G~J41DD0SyfuKCxiHXh#S>%=O>U_srzuc z%l(6s(55lgS9=HJH>PpEubfY>$@D2MTW)eL13O621{9zfMQ9<#TFI0)1hEsf9BK8~ z#oczk?cueL*M1yACvt zElz<9qPWMF{|gNKic|QVef|#?#-A9$Ux?#xwr_zmA|IA0!kDOFyIq5Eu>ljJj!jC| z#a-*Fu z>m;k=13t-m+lb-^C{R%^d^0E%tzrgcLYa}w6wl>(R{FL4f1vrw{4)rsaA@xmPvzi4 de8jbq=$@yhkBRGku9vx1a{Yws7}rmc_dk;Q_gw%0 diff --git a/twl/bin/de/matthiasmann/twl/utils/TextUtil.class b/twl/bin/de/matthiasmann/twl/utils/TextUtil.class index 1b80c7056ecfc2d7569e8411ba304577df419f38..712dea883dbe4d37938eebd2ff4be08dffba7b22 100644 GIT binary patch literal 4972 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 literal 4383 zcmai1YitzP75?r%yzBKEFAFxwJ`4s5_TmS@!6~tEuopwN^&`a(45oqcdN2#?-OcVS zkUm049Vcm0N}Gfv)FD7fOj=q|DYcz~$iGI4szhzord1oMMXJ=Qh_=5fRe<~5nXz|~ zjVjCIJ2U5=^PTT}=iKqfcYb~izy|!p0gJ%OA+>Hq(X<0GB{QNV5_Q^QSwiD+g=>o`cF^r7o@{hU>Zp52{g3pm;}DM@#44&fbpJwjJF9-u9eLx0a42h8t-V zP9`#%lF<5;cvf|yP@v-a*fSmcy*_rFe~x#AJGO?mhWo?q{q6mc{=P_GM8IwM?rUl9 zZR>WzEfBmue)9TD7yokN`9EJf`{~6`Mn8K07bk~yZ>V$?+HFE$aYsx4USn6Jv!`u) z+YSK{u>#|d2oyBM5;3h=z*#BV+pl0J2I%Idz8VrDw9b@ zm3W_$j>&uTp^Y?U1Xj2If6`>?(PTEE(W`XMZT`wUg2D%sbhr9MR!v0J#;QmW0w{MN zC{UIoG2h0G^%2Dz?fkec2b<-TS&9>Ep?r^bFdjuSbB&8OQJJBHk-p6Jc4(7+r zmsDdoQpHxYM5#?nl$sLMjh)S!CTGj?cNvN3_7Yg18=crmTM339T$w|$RCh{=N|gul zH{KPFwk{$YaHAi4*wFVj)V+#~3wxnBuuot~P8-st64lhS8-s|l*0Ida12Ij_$oNuE z;i}!NlbRUfyJ%WfG@!{mvy`Z1AnZV#9g(pE>3Nfm~lA&)(m(E$-oDyj@lZ~^y7KziEN-_e6 zz{m(`K1LT>@-fbBO^&=-(n?9_{5)l8#@u+$tU#o@i*sH}C*x8dFSzk-j8cP#<;?He zFEPI4#&>Xn`Dw|nsHVho?iVgeJx;puJ$#>-l~hWvX3au;&x4lh>%DkI_BDYl(ULoo zJlzcTjnEFf#?vp4vv^z`R^lz`;jE-SuQ;c$R1OJVYK<{7E|I+{urVLd-BMp5saarT zT<3+2&0(S+i>!i+YXhFVNlUc)D}hD&jq#4Ngo9N}%3$rWj67U;WC^UTjLajVae=Zq zamIyHXppH~l#+jsRifnC$MRT=(nlKm!O1JJaPHN%N_On%V`CBXbMYys=FxV)kPy<4QyD8 zGOpZ)5tiXT-WAfR&vft}Ep2>O8~Ol#fhOx_{~4?twFqnT1WH4}4^Y8)uCplMvr(%E z`p?bW2wdV0D`ccK^aj)s{(7z+AlMCrSI>73q5>PSn(Jz8(ouwrNcaMGfjidnN2XTD zCzV`Tn34}wTv-vKMKNr5P%4C2Wce?*7GfP;8F{}&6UpC(kjFKNnkN4^DY$$E^}9&K z#*S+LB)%w77s}P9ougvLKR$D#dJ>y2bC&^qCD{fx6G$_Pu!Z4T33Dq}pp5{xqXv)a zuvZw72(p0o4x(t$VVCiXqZMJoHo#hMp;+94(}DUDg563t2G~A2ko8y`n#4B$1-L?1 zqS}5rl*1xZ2HJ_JgB9-59RLy_AQke>a|nv``Wgt>nYZAP z679z>GyWFFm*sSa{024C*eyA*=nWxz864NL?TiY#@l`Wlw;sdrw#W3AgUxUrW|9N!|xY6q`)8Q)&_9}bn z6#RINa9-!|dKC}hw4Ow>uHa3kKI|M~axlq?tta2d2(gGQC;Q*Z-zq%KtBszPvJ#8v zUGlsHmKg@HJ5Vbec!vL3aikQ=j}w!1SwLCxax2H}1UxJ|6ACaN+rG^KDP^`*UfGSd zdYi#7P|)wNwccgG3miWe^U7atg0}Fv0oq1^NPtH9osw^d5N=}m7Di1hj}wU$>?+?h zo_zy8IYK>qrtv(-C?CBziSNpx$>qyAHjQcZKEeEqWuDSO7!zfcS$=b(lGUo~6V7sF zrN1>e$CZsa(3ku_VR& z&J^DL(Bs)0xN7gL8MVv=){SDu$0WC<$WE`miZ}Y+ocXKl*qT7iwZPC6CUW&M)c-eP z`8!+iA1uKQW_FYM{U>$(FRJ|CdZxyFZZ$I{2K?3!7%XBs}kxB`PK1IC<}_ouB6b z;aO$JkD4LqjVn*g_X^k(^N-l#!)3=Y-341zDrSW+83^f`&Zg;_?lJ820SrS%XD!F_ z?h~dmfe^=76}H72k++4jm0$H-%h{S4Stmpm%9~tQXTfsJm1=3jbl1d&&7NeTTom@Y za4l)qoe{2^Dfb?QUb9N(YPsqb`PzISm8xgimHe9Jc(t2lH+>oe7Zw)>g0F~@Pvr!4 z!ppN29n`Lt+Dc*KtaS19Q?cWh?vKN)-$`Z5^kl_^aAstg$HO%%O&-3g)x=n`q>hQ^ zsz+rZI_}}Vjvl1sk|7KnmbX&1?dN6I$#fUr70n$vR5EH#M<=>;B+#v3R>uR(>v)I- z1&;`GK}G(9M#pe#1d}o$Nos2nsxfGp_Q37zd#P zA$~l0`uHVH$^qm(!u}py;I)^n0>bsiTRK(V%2BC>egaA(jF-htMCcKdfL-!8HYG`05N{ zxXyLb=ML!EU8b@N^)s}Oe6glORMtodKcOzaS>2ijgzL!EF{V#qv>(^95AD<+fD^)q dpDl~?y!W#RNlY{CKF&0OOHjF!6PSvse*yM{)F}V} literal 1805 zcmb_dYfsZ)6n@S&)~$40h9aPHbKvmCGBSp2r?rWy}c)mimSPpnxLv0AOWWuYKK=-V=1nTBmTo5qv%Em8Iq zLZo;wBUN6ogbU2%yuEJV9%jJQ8mSvw>Ewa5jW1T%*%G zyb8i;4c!~C|Kh%%hu)&)h?RO}UASxJx-AIFVzq4ACDXN}+`No%-_;0(z<~au z3%PuWRvWCC6`$`=fmDPsDibiq*-d9k3ML4nZMBuUZ9lDY*9-Ulo3hyUxZPt=RE#4f z%`S5Og33{fAs*-CrZp&t$)~J_I8=6u`>Xu&vAONXtKc$WGAO5=y+u&C_HrzIKbKYH zFr)FvUgJ^YH!bak$`So~Y(Hd{dEQ)6Yfwp&Sq(RFi)-cI{x2FH3$?K<9$2yy`VTIa zX_JD}g>XjR@d*kcPGJnOJl@d6 zFh*FC?jop>L_BQAW3oF0^Hc7aaSjhrJe&W=`EM^mP@)HZU{PK4j}Z4;}0ufsGP#v zj$-!F9*&TLe2bqt!@}3PFd5E$WsNW})d1JjMAumjfH8JK7W8C;Nm&53$ ikpP?!=6tq!id&t08U_5g@%lRYz%EG zLdeC@ilZu*V{#dl$GnQ;7*mNJRWPn#Lcyd!i?eAPuE0QX&B#}D&%0^r)rxN0d2iFo zUo+RrhF1`XS3TYJmd%PGATA0-XH47lW(5Y*f4i7j5s1t?YrNH7G;L$CR#`RNWqs9R zBw2Jyy0xOaraae!5eldZBraTCkkyu)np+}PTd*l}-qNd8gXzhpMQfgERrAZH?VYtv zdU4$0UuftfvE=EcTbJ|=zntHPX#s^M18?DUW`S;9quLOmi8dnUYp!e9yFj)fT&|e{ zy-n4ybV0!>0W~mj-jt?08|96z>$i0cNel_>m%sCtZkO|mHOso<(1zijyHheYJkzly z>a>P7v}-tkAq@v{NJ9rY6-;X=V1}g>oDmpr_8tG#8G(-7@|RcFjgluY_Mc3R-$`ve z^fe<0MoOTkS&}^yNTrLrVwODDw95rKNKt+RAJCu9{ITN#Bh83^Zve*lCNyv)_+FB- zv3yA(*-`Eh#*^scx`(H`2r~l=WOpEPFOhhP(Dh_^2a)I5+!k80+lW45K8zICK18{` zCdV7Z@RmI9(1Z8r#|LyX(;aXz*2fcB{n~D=bVXRbf{^o4r^F2N c7@3QZ`UoQ-q|wWr&7hN$*vnIb`&2ak6Igm0sQ>@~ literal 1261 zcma)5OHUJF6g}UxbeLgy6-(tIpd$966p)8nV>Cn!q@oE}b>mfkdj% z@L%>E(=O-JMFj%;HOOdHdFt0N;HOX=!!<&>odwf2mTHw%!&%W+Efx?jR7<*5)E(2m zhmTRV!4;ToTF$?kLWSCwJ-u}Mvc3`E$v8wddrK-HQ`owm)MLRXKc?X*QUV>c%-0;p zup17Gew`T&3RD#baZJN;jI#}N<#Y%Pq|!}^)0kH=fiW4A0?B5Cg7`?eW(xG}i6NlY z$M2%)E7-kzKF9sG2xtp7Cu!c&UDt4BoMb`G()}qVwfk+tnX56Om}KD*el3s?_xsEr zNb+^y9_4!*G_LKu-J_qxeK50wj_fP6KSTG8c+U>@y~t#@kj!kO?=kHW407#9jO!a> zyd~y4V!uZcA2>fBae$WIIu?d7%o|aI+yWy!cS8JRfFwi6>;_2SFh)ZfGXX82jWmvA zo*-@9e@GW8$Qq*)@F~dP^QK#vfjvZ52r(B_3@8~NV+(1Yb{#+sXniK-FS|gL5Jd7P zCS0M;Jlh@92>+ caV|>eX}(C9!7O)*L7zFCLLWOdhto0T7qNgDg#Z8m diff --git a/twl/bin/de/matthiasmann/twl/utils/TintAnimator$TimeSource.class b/twl/bin/de/matthiasmann/twl/utils/TintAnimator$TimeSource.class index 9520c370efc83416fd35640a8beffddb9d5c213b..260326537ed7f05d24884e5328f24568d12398f3 100644 GIT binary patch delta 140 zcmW-ZK?;IE7)IYenv8x hjcK+C1VOn=P`=>dgY%5wSI~dXiJc?26han3_yxf=7q|cb delta 143 zcmbQiG=oXt)W2Q(7#J9g82H&4m>3xhC+<<3SkEoS&cMRRAdr<S%{H=$1^W4wa7UqvA8(3n4N)l;!aIxMh32s%-q!A{L-T2R5nHiMh0e}sSFHE jKx0@L*cd>@u`_UhL>M^1Bo_lWkmdra1e(ae$HoZ&t1cPj diff --git a/twl/bin/de/matthiasmann/twl/utils/TintAnimator.class b/twl/bin/de/matthiasmann/twl/utils/TintAnimator.class index f2c5e07e8764a674434dae40a545af0e41cd0a2f..19335f03b9279d5af98a32da469c933358c06191 100644 GIT binary patch literal 3378 zcmbVOTXPiG5&q8JW_L9b%MyV=TpS``St&>u8=H%;Wg)>PLPAIg3<)q=4QRw@MxLGJ zVjE+}DVN`TNr7!*9)j&CiSog6MJ9HyG^h#qv4_kTf?kETc2ai8ouQ^ zW4_^==2pG3si2n}$MpJbqf#*|8XSe@L&rQHynS$u&XrMG%`F;JCXJ4{OuZ=GP{YzpSFz3tl>D_{$;zn>RWcDd)#vT z5UJ~R)LibP!E)8}OvjfK3bE7lsh>Bd%!5@g2#YXEgehBnW#76)4C<7EHf>ZwmDGOA zvHSxHqlNDQprJ~?YrEdQ?Gp-#es_uIb5BcG`(?S(&kQn$SoW8gyC7Tjy4kv zy`r#O9E?6$7FP=G55d7Au(sukM~u0^Pf&eV!<@qI<+`fRxx|&On0^qY!p6on7IQ#v z3MondIO($KVTVg%IjGdQd)Sh^B?`e_sya7Caw^0Nazt7DBFv%4n#cXwoxz6VYbdb% zR%NiR+SFmao2<$y({uamxoLw5nKMY26P7<6a-i547I`&gdZyQXEE0m6rWdyrwlz%q z;`f>w!wPTJpe4m$Sx@I3GsY!D#||81E=BIP4d+7laMiYtxi5 zc_#~{l6>CMDDZDlR$qL1!B+Ugvu{$=Vev|`sir2j;$z>UWF2f~d=^i_se`m<3DO=&=qd<( z4Pu6d0}B#Q5dL17`Ec^)|KAG2njDek6i)eTv{+o5He`mr&w7`2;B7o zmr`>B%wYj9vw&Bi<9QbE1+wc!wzO;H%1gv~oymHou7JHu*n1=FU^0bqVF43}>B6x- zJQG3wJ0VM9PPX61dcl@z8m&vDAe%>T4S6mt(0MM`#Dm3q$k!^+Qfz-nG>8zs+?Sk>|_wnVpS3wChN+=|AC|^ ztqiW8#)8YFrdawEUEdrl$zWUlKp|`asbKSq0I(h&h}IB(=jvx)N~sm%WXz?{fu literal 3391 zcmbVO+jA5575;wGN-N82N0>qYb4_h(%MKDarQu?TV_Trc7mSTDkN|6W!3)yLS*^I_ z#$?)L`qreKkdT&#q$TdqB)v?yHJ$XK51C1y`;g=*|45wg?8=q^CF53_+28ry&iT&e zJG)o%*|YPd)P(JLeU8oDqN_twNSre- zn5n$!oK1~RpR;nFf^mHC@aU<*L*v<@(GdleQE2KfIwj9^yh$@(wzS>9XelZ*j*bj2 z9@F+;`Rt-X+_MYTc(Lr}EQOw-<>6?XSh}=_T61OBwH!~7DuhnZx^c#wu?EVn>Dfhx zfU-0sOMN-dzCc6jxPm@wmVztMy|!a}`xM4H{tp0kuk;u5MR!lAqjOS6tHQ==AV5Qhy9v z6e2mX)&PYc8)$?fQoDgBG{-6Z#6Sl+6=EgJ^I_3)eLt(99~rV8YouJ5w%iGGI?sr; z3>9-`e$sSpnO7Dy7EDQ@zP5+Uhq-F~foQR4#yvB4e%PGz_3PNKu>F6o2pv5NYwKOB zc)xSGcx%h7bFzVK*=gWs*v5z-J(!&sl<4k~^sI_=Z;ye!=v8PqYk8S`(exOZXvc|6 zwsTUp_ZxT$eO$7hFPnMp-IvgSNqahvOYZs&tVD}Qg9cUv(g6dHAkm04vIc%Gb=2Tm z%&0JdN~O3b$goZIeG4+{BN@RV9i#Wrc>Hq7vkC^raF}XM*EKKaigTA0lC?Egftal+ z!^I^kt`KaZc+j39Ag#kUrZ8#XD5gkKyL8-gi+%aIS<~kL85k|k&6u7gPMt9DES@7N z8N9$H(j*(lDVRD=D>PSYf7tY94NN0PH3ggOj&x+Ron*Kst%TfW69{_+)(#h>BPd%( zGkbzv%G9)gra6iqQ5732ak4rj;2qs z?pVwEJJ|5A?#0<=nI*e!;jv`G_-FJM+LGP3vGs4f7DkfKt%L#$LBlYCjnK>?Dj&mU zjH4YBcpOLA2PVG=;o^YdVJW*m$qOVT}x43iO>Sogmow#X`Q#}mEeA&g1e7u zLOj@z?D{)?dIwJmnvjns?r)qVl2g9L)xp6fiwzZvY~SdtsC&PnZdX_G6SReIW4ABp z6q3~6bsPJxK@ZPE({ADEWcU^apdWcwQ#1SD2(LZ1JzwB(Qf0 zdv66h!APTKu*C}vAtObw<4k`5`M-oL8JlXoj`e~q+BjAdNI^D_-YW7$OrY~zqLBxa zw{fJJfq`V}4|ub~=fSUu;SHwxO=9{D>;1RbfVYVHDr@L%4B#DPagD|LF5C3)YqB!6 z5x-yt5m}(&s6;iy*xGCftqVAS$kK}R0-qN(OMVs>XhHVqkRs!zf^<-= zkOqh_5(6Jn2>OFGQQ%V_xe*+wAm^K^?&YT+y!`LFm-)JxgI{ zhDA@%G6N9*snL_DfDrbCp_-}SJljT~@T4C*V2vmo?&=PwyR~$8B;6fN-$Nndx1Yef zX1_0d$*6wCR`RuPAn3VkDh8+pCFX4c`I6Fvu7H diff --git a/twl/bin/de/matthiasmann/twl/utils/TypeMapping$Entry.class b/twl/bin/de/matthiasmann/twl/utils/TypeMapping$Entry.class index e8b8d8b365444da28f804eb34d93a190bdbc7e71..b25dd92397cf242e59c3a69dff956b66195a29e1 100644 GIT binary patch delta 390 zcmX|5Jxjw-6g}@XY1$aIwXIsUZTyJTv=FJI;8Gj}!Oh9RXk($22yGFZ+#KA(`wxCh z;!p$!e}F&0!NvdKAf7ZJ5AHeVzH`sL-^Q0w`}lo(2hhT%2_4leG}Pi^8(1^29(4w~ z*1qfn$`ji~eLoxxt_7@vFboFmzCRoW>O@?KmO2$p^(@osN0g(_s@jpasvxT+3l=sk zq+wVvF=fCJXeeJaqP=>#R6p$bSH9Qx!>)I9)(g%@yIaQs4h_x?Y@VU>Hi=vu0D;Uz zWvQ7(F8C}=(=kJJN7RTpxA6+$Hph@|WsKAddnwGa&Q1RBnfkzlNA{kW1-Qu^@+eX< z0VQhx%`jbXl?_dDlX|Is5~zaO6f)=<Pm*M1^hcszk7)+ zw`wdZ5pzSxbdLqd8AU93!Z7F?!UP0HNCL8%P|Na2|8WyNaI!6_A NSR@b8Bd~-50)ImaGk^d9 diff --git a/twl/bin/de/matthiasmann/twl/utils/TypeMapping.class b/twl/bin/de/matthiasmann/twl/utils/TypeMapping.class index 0a7b31832e8cac6dd07e93f09a4d13c6f4ac2ad5..80fb818a46ed0c62ed918ace8de7c4922acea1c7 100644 GIT binary patch literal 4642 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 L_Ah78&(ZLIHk`-# diff --git a/twl/bin/de/matthiasmann/twl/utils/XMLParser.class b/twl/bin/de/matthiasmann/twl/utils/XMLParser.class index 6b466618af90dcaf653ff8c1872a263707ba2413..64489eea5dbbad47576459e139a743b6aca7dc57 100644 GIT binary patch literal 11668 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 ASpWb4 literal 11283 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 diff --git a/twl/src/de/matthiasmann/twl/Alignment.java b/twl/src/de/matthiasmann/twl/Alignment.java index d90363f..f98529d 100644 --- a/twl/src/de/matthiasmann/twl/Alignment.java +++ b/twl/src/de/matthiasmann/twl/Alignment.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -60,6 +60,23 @@ public HAlignment getFontHAlignment() { return fontHAlignment; } + /** + * Returns the horizontal position for this alignment. + * @return 0 for left, 1 for center and 2 for right + */ + public int getHPosition() { + return hpos; + } + + /** + * Returns the vertical position for this alignment. + * @return 0 for top, 1 for center and 2 for bottom + */ + public int getVPosition() { + return vpos; + } + + public int computePositionX(int containerWidth, int objectWidth) { return Math.max(0, containerWidth - objectWidth) * hpos / 2; } diff --git a/twl/src/de/matthiasmann/twl/AnimationState.java b/twl/src/de/matthiasmann/twl/AnimationState.java index 5f2c313..af649cd 100644 --- a/twl/src/de/matthiasmann/twl/AnimationState.java +++ b/twl/src/de/matthiasmann/twl/AnimationState.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2009, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -48,10 +48,24 @@ public class AnimationState implements de.matthiasmann.twl.renderer.AnimationSta * to the parent. * * @param parent the parent animation state or null + * @param size the initial size of the state table (indexed by state IDs) */ - public AnimationState(AnimationState parent) { + public AnimationState(AnimationState parent, int size) { this.parent = parent; - this.stateTable = new State[16]; + this.stateTable = new State[size]; + } + + /** + * Create a new animation state with optional parent. + * + * When a parent animation state is set, then any request for a state which + * has not been set (to either true or false) in this instance are forwarded + * to the parent. + * + * @param parent the parent animation state or null + */ + public AnimationState(AnimationState parent) { + this(parent, 16); } /** diff --git a/twl/src/de/matthiasmann/twl/Border.java b/twl/src/de/matthiasmann/twl/Border.java index d2dfed8..1898077 100644 --- a/twl/src/de/matthiasmann/twl/Border.java +++ b/twl/src/de/matthiasmann/twl/Border.java @@ -79,6 +79,22 @@ public int getBorderTop() { return top; } + public int getBottom() { + return bottom; + } + + public int getLeft() { + return left; + } + + public int getRight() { + return right; + } + + public int getTop() { + return top; + } + @Override public String toString() { return "[Border top="+top+" left="+left+" bottom="+bottom+" right="+right+"]"; diff --git a/twl/src/de/matthiasmann/twl/Button.java b/twl/src/de/matthiasmann/twl/Button.java index f9c979b..2e7823c 100644 --- a/twl/src/de/matthiasmann/twl/Button.java +++ b/twl/src/de/matthiasmann/twl/Button.java @@ -273,10 +273,6 @@ protected boolean handleEvent(Event evt) { model.setHover(hover); model.setArmed(hover && model.isPressed()); } - if(!model.isEnabled()) { - // don't process event for a disabled button (except hover above) - return false; - } switch (evt.getType()) { case MOUSE_BTNDOWN: if(evt.getMouseButton() == mouseButton) { @@ -317,7 +313,10 @@ protected boolean handleEvent(Event evt) { // ignore mouse wheel return false; } - // eat all mouse events + if(super.handleEvent(evt)) { + return true; + } + // eat all mouse events - except moused wheel which was checked above return evt.isMouseEvent(); } diff --git a/twl/src/de/matthiasmann/twl/Color.java b/twl/src/de/matthiasmann/twl/Color.java index 9a2e8c6..cf4fc93 100644 --- a/twl/src/de/matthiasmann/twl/Color.java +++ b/twl/src/de/matthiasmann/twl/Color.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -57,6 +57,19 @@ public final class Color { public static final Color BLUE = new Color(0xFF0000FF); public static final Color TEAL = new Color(0xFF008080); public static final Color AQUA = new Color(0xFF00FFFF); + public static final Color SKYBLUE = new Color(0xFF87CEEB); + + public static final Color LIGHTBLUE = new Color(0xFFADD8E6); + public static final Color LIGHTCORAL = new Color(0xFFF08080); + public static final Color LIGHTCYAN = new Color(0xFFE0FFFF); + public static final Color LIGHTGRAY = new Color(0xFFD3D3D3); + public static final Color LIGHTGREEN = new Color(0xFF90EE90); + public static final Color LIGHTPINK = new Color(0xFFFFB6C1); + public static final Color LIGHTSALMON = new Color(0xFFFFA07A); + public static final Color LIGHTSKYBLUE = new Color(0xFF87CEFA); + public static final Color LIGHTYELLOW = new Color(0xFFFFFFE0); + + public static final Color TRANSPARENT = new Color(0); private final byte r; private final byte g; diff --git a/twl/src/de/matthiasmann/twl/ColorSelector.java b/twl/src/de/matthiasmann/twl/ColorSelector.java index 8d92595..796d225 100644 --- a/twl/src/de/matthiasmann/twl/ColorSelector.java +++ b/twl/src/de/matthiasmann/twl/ColorSelector.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -31,6 +31,7 @@ import de.matthiasmann.twl.model.AbstractFloatModel; import de.matthiasmann.twl.model.AbstractIntegerModel; +import de.matthiasmann.twl.model.ColorModel; import de.matthiasmann.twl.model.ColorSpace; import de.matthiasmann.twl.renderer.DynamicImage; import de.matthiasmann.twl.renderer.Image; @@ -64,12 +65,16 @@ public class ColorSelector extends DialogLayout { private boolean showRGBAdjuster = true; private boolean showAlphaAdjuster = true; private Runnable[] callbacks; + private ColorModel model; + private Runnable modelCallback; + private boolean inModelSetValue; int currentColor; private ARGBModel[] argbModels; EditField hexColorEditField; private TintAnimator previewTintAnimator; private boolean recreateLayout; + @SuppressWarnings("OverridableMethodCallInConstructor") public ColorSelector(ColorSpace colorSpace) { // allocate enough space for 2D color areas imgData = ByteBuffer.allocateDirect(IMAGE_SIZE * IMAGE_SIZE * 4); @@ -106,12 +111,28 @@ public void setColorSpace(ColorSpace colorModel) { } } + public ColorModel getModel() { + return model; + } + + public void setModel(ColorModel model) { + if(this.model != model) { + removeModelCallback(); + this.model = model; + if(model != null) { + addModelCallback(); + modelValueChanged(); + } + } + } + public Color getColor() { return new Color(currentColor); } public void setColor(Color color) { setColor(color.toARGB()); + updateModel(); } public void setDefaultColor() { @@ -249,10 +270,22 @@ public void addCallback(Runnable cb) { public void removeCallback(Runnable cb) { callbacks = CallbackSupport.removeCallbackFromList(callbacks, cb); } + + protected void updateModel() { + if(model != null) { + inModelSetValue = true; + try { + model.setValue(getColor()); + } finally { + inModelSetValue = false; + } + } + } protected void colorChanged() { currentColor = (currentColor & (0xFF << 24)) | colorSpace.toRGB(colorValues); CallbackSupport.fireCallbacks(callbacks); + updateModel(); if(argbModels != null) { for(ARGBModel m : argbModels) { m.fireCallback(); @@ -425,12 +458,7 @@ protected void createColorAreas() { previewArea.setTheme("colorarea"); previewArea.setTintAnimator(previewTintAnimator); - Widget preview = new Widget() { - @Override - protected void layout() { - layoutChildrenFullInnerArea(); - } - }; + Widget preview = new Container(); preview.setTheme("preview"); preview.add(previewArea); @@ -485,6 +513,37 @@ protected void updateAllColorAreas() { } } + @Override + protected void afterAddToGUI(GUI gui) { + super.afterAddToGUI(gui); + addModelCallback(); + } + + @Override + protected void beforeRemoveFromGUI(GUI gui) { + removeModelCallback(); + super.beforeRemoveFromGUI(gui); + } + + private void removeModelCallback() { + if(model != null) { + model.removeCallback(modelCallback); + } + } + + private void addModelCallback() { + if(model != null && getGUI() != null) { + if(modelCallback == null) { + modelCallback = new Runnable() { + public void run() { + modelValueChanged(); + } + }; + } + model.addCallback(modelCallback); + } + } + private void createHexColorEditField() { hexColorEditField = new EditField() { @Override @@ -544,12 +603,19 @@ void updateHexEditField() { } } + void modelValueChanged() { + if(!inModelSetValue && model != null) { + // don't call updateModel here + setColor(model.getValue().toARGB()); + } + } + private static final int IMAGE_SIZE = 64; class ColorValueModel extends AbstractFloatModel { private final int component; - public ColorValueModel(int component) { + ColorValueModel(int component) { this.component = component; } @@ -579,7 +645,7 @@ void fireCallback() { class ARGBModel extends AbstractIntegerModel { private final int startBit; - public ARGBModel(int startBit) { + ARGBModel(int startBit) { this.startBit = startBit; } @@ -668,7 +734,8 @@ public void run() { class ColorArea1D extends ColorArea { final int component; - public ColorArea1D(int component) { + @SuppressWarnings("LeakingThisInConstructor") + ColorArea1D(int component) { this.component = component; for(int i=0,n=getNumComponents() ; i extends ComboBoxBase { boolean computeWidthFromModel; int modelWidth = INVALID_WIDTH; + @SuppressWarnings("OverridableMethodCallInConstructor") + public ComboBox(ListSelectionModel model) { + this(); + setModel(model); + } + + @SuppressWarnings("OverridableMethodCallInConstructor") + public ComboBox(ListModel model, IntegerModel selectionModel) { + this(); + setModel(model); + setSelectionModel(selectionModel); + } + @SuppressWarnings("OverridableMethodCallInConstructor") public ComboBox(ListModel model) { this(); @@ -125,6 +140,18 @@ public ListModel getModel() { return listbox.getModel(); } + public void setSelectionModel(IntegerModel selectionModel) { + listbox.setSelectionModel(selectionModel); + } + + public IntegerModel getSelectionModel() { + return listbox.getSelectionModel(); + } + + public void setModel(ListSelectionModel model) { + listbox.setModel(model); + } + public void setSelected(int selected) { listbox.setSelected(selected); updateLabel(); diff --git a/twl/src/de/matthiasmann/twl/ComboBoxBase.java b/twl/src/de/matthiasmann/twl/ComboBoxBase.java index 9914676..6f56c0a 100644 --- a/twl/src/de/matthiasmann/twl/ComboBoxBase.java +++ b/twl/src/de/matthiasmann/twl/ComboBoxBase.java @@ -117,9 +117,12 @@ protected void setPopupSize() { protected void layout() { int btnWidth = button.getPreferredWidth(); int innerHeight = getInnerHeight(); - button.setPosition(getInnerRight() - btnWidth, getInnerY()); + int innerX = getInnerX(); + int innerY = getInnerY(); + button.setPosition(getInnerRight() - btnWidth, innerY); button.setSize(btnWidth, innerHeight); - getLabel().setSize(Math.max(0, button.getX() - getInnerX()), innerHeight); + getLabel().setPosition(innerX, innerY); + getLabel().setSize(Math.max(0, button.getX() - innerX), innerHeight); } @Override diff --git a/twl/src/de/matthiasmann/twl/Container.java b/twl/src/de/matthiasmann/twl/Container.java new file mode 100644 index 0000000..e7b66fc --- /dev/null +++ b/twl/src/de/matthiasmann/twl/Container.java @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl; + +/** + * Can contain a single Widget and uses {@link Widget#layoutChildrenFullInnerArea() } + * + * @author Matthias Mann + */ +public class Container extends Widget { + + @Override + public int getMinWidth() { + return Math.max(super.getMinWidth(), getBorderHorizontal() + + BoxLayout.computeMinWidthVertical(this)); + } + + @Override + public int getMinHeight() { + return Math.max(super.getMinHeight(), getBorderVertical() + + BoxLayout.computeMinHeightHorizontal(this)); + } + + @Override + public int getPreferredInnerWidth() { + return BoxLayout.computePreferredWidthVertical(this); + } + + @Override + public int getPreferredInnerHeight() { + return BoxLayout.computePreferredHeightHorizontal(this); + } + + @Override + protected void layout() { + layoutChildrenFullInnerArea(); + } + +} diff --git a/twl/src/de/matthiasmann/twl/DatePicker.java b/twl/src/de/matthiasmann/twl/DatePicker.java new file mode 100644 index 0000000..fe0ded0 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/DatePicker.java @@ -0,0 +1,500 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl; + +import de.matthiasmann.twl.model.BooleanModel; +import de.matthiasmann.twl.model.HasCallback; +import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import de.matthiasmann.twl.utils.CallbackSupport; +import java.text.DateFormat; +import java.text.DateFormatSymbols; +import java.text.ParseException; +import java.text.ParsePosition; +import java.util.ArrayList; +import java.util.Calendar; +import java.util.Date; +import java.util.Locale; +import de.matthiasmann.twl.model.DateModel; + +/** + * A date picker panel + * + * @author Matthias Mann + */ +public class DatePicker extends DialogLayout { + + public interface ParseHook { + /** + * Try to parse the text as date + * + * @param text the text to parse + * @param calendar the calendar object - don't modify unless update is true + * @param update true if the calendar should be upadted on success + * @return true if the parsing was sucessful, false if the default parsing should be executed + * @throws ParseException if the text could not be parsed and the default parsing should be skipped + */ + public boolean parse(String text, Calendar calendar, boolean update) throws ParseException; + } + + public interface Callback { + /** + * Called when the calendar has been changed + * @param calendar the calendar object - DO NOT MODIFY + */ + public void calendarChanged(Calendar calendar); + } + + public static final StateKey STATE_PREV_MONTH = StateKey.get("prevMonth"); + public static final StateKey STATE_NEXT_MONTH = StateKey.get("nextMonth"); + + private final ArrayList dayButtons; + private final MonthAdjuster monthAdjuster; + private final Runnable modelChangedCB; + + private Locale locale; + private DateFormatSymbols formatSymbols; + String[] monthNamesLong; + String[] monthNamesShort; + Calendar calendar; + private DateFormat dateFormat; + private DateFormat dateParser; + private ParseHook parseHook; + private Callback[] callbacks; + + private DateModel model; + private boolean cbAdded; + + public DatePicker() { + this(Locale.getDefault(), DateFormat.getDateInstance()); + } + + /** + * Constructs a date picker panel using the specified locale and date format style + * @param locale the locale + * @param style the date style + * @see DateFormat#getDateInstance(int, java.util.Locale) + */ + public DatePicker(Locale locale, int style) { + this(locale, DateFormat.getDateInstance(style, locale)); + } + + @SuppressWarnings("OverridableMethodCallInConstructor") + public DatePicker(Locale locale, DateFormat dateFormat) { + this.dayButtons = new ArrayList(); + this.monthAdjuster = new MonthAdjuster(); + this.calendar = Calendar.getInstance(); + + this.modelChangedCB = new Runnable() { + public void run() { + modelChanged(); + } + }; + + setDateFormat(locale, dateFormat); + } + + public DateModel getModel() { + return model; + } + + public void setModel(DateModel model) { + if(this.model != model) { + if(cbAdded && this.model != null) { + this.model.removeCallback(modelChangedCB); + } + this.model = model; + if(cbAdded && this.model != null) { + this.model.addCallback(modelChangedCB); + } + modelChanged(); + } + } + + public DateFormat getDateFormat() { + return dateFormat; + } + + public Locale getLocale() { + return locale; + } + + public void setDateFormat(Locale locale, DateFormat dateFormat) { + if(dateFormat == null) { + throw new NullPointerException("dateFormat"); + } + if(locale == null) { + throw new NullPointerException("locale"); + } + if(this.dateFormat != dateFormat || this.locale != locale) { + long time = (calendar != null) ? calendar.getTimeInMillis() : System.currentTimeMillis(); + this.locale = locale; + this.dateFormat = dateFormat; + this.dateParser = DateFormat.getDateInstance(DateFormat.SHORT, locale); + this.calendar = (Calendar)dateFormat.getCalendar().clone(); + this.formatSymbols = new DateFormatSymbols(locale); + this.monthNamesLong = formatSymbols.getMonths(); + this.monthNamesShort = formatSymbols.getShortMonths(); + calendar.setTimeInMillis(time); + create(); + modelChanged(); + } + } + + public ParseHook getParseHook() { + return parseHook; + } + + public void setParseHook(ParseHook parseHook) { + this.parseHook = parseHook; + } + + public void addCallback(Callback callback) { + callbacks = CallbackSupport.addCallbackToList(callbacks, callback, Callback.class); + } + + public void removeCallback(Callback callback) { + callbacks = CallbackSupport.removeCallbackFromList(callbacks, callback); + } + + public String formatDate() { + return dateFormat.format(calendar.getTime()); + } + + public void parseDate(String date) throws ParseException { + parseDateImpl(date, true); + } + + protected void parseDateImpl(final String text, boolean update) throws ParseException { + if(parseHook != null) { + if(parseHook.parse(text, calendar, update)) { + return; + } + } + + ParsePosition position = new ParsePosition(0); + Date parsed = dateParser.parse(text, position); + if(position.getIndex() > 0) { + if(update) { + calendar.setTime(parsed); + calendarChanged(); + } + return; + } + + String lowerText = text.trim().toLowerCase(locale); + String[][] monthNamesStyles = new String[][] { + monthNamesLong, monthNamesShort }; + + int month = -1; + int year = -1; + boolean hasYear = false; + + outer: for(String[] monthNames : monthNamesStyles) { + for(int i=0 ; i 0 && lowerText.startsWith(name)) { + month = i; + lowerText = lowerText.substring(name.length()).trim(); + break outer; + } + } + } + + try { + year = Integer.parseInt(lowerText); + if(year < 100) { + year = fixupSmallYear(year); + } + hasYear = true; + } catch(IllegalArgumentException ignore) { + } + + if(month < 0 && !hasYear) { + throw new ParseException("Unparseable date: \"" + text + "\"", position.getErrorIndex()); + } + + if(update) { + if(month >= 0) { + calendar.set(Calendar.MONTH, month + calendar.getMinimum(Calendar.MONTH)); + } + if(hasYear) { + calendar.set(Calendar.YEAR, year); + } + calendarChanged(); + } + } + + private int fixupSmallYear(int year) { + Calendar cal = (Calendar)calendar.clone(); + cal.setTimeInMillis(System.currentTimeMillis()); + int futureYear = cal.get(Calendar.YEAR) + 20; + int tripPoint = futureYear % 100; + if(year > tripPoint) { + year -= 100; + } + year += futureYear - tripPoint; + return year; + } + + @Override + protected void afterAddToGUI(GUI gui) { + super.afterAddToGUI(gui); + if(!cbAdded && this.model != null) { + this.model.addCallback(modelChangedCB); + } + cbAdded = true; + } + + @Override + protected void beforeRemoveFromGUI(GUI gui) { + if(cbAdded && this.model != null) { + this.model.removeCallback(modelChangedCB); + } + cbAdded = false; + super.beforeRemoveFromGUI(gui); + } + + private void create() { + int minDay = calendar.getMinimum(Calendar.DAY_OF_MONTH); + int maxDay = calendar.getMaximum(Calendar.DAY_OF_MONTH); + int minDayOfWeek = calendar.getMinimum(Calendar.DAY_OF_WEEK); + int maxDayOfWeek = calendar.getMaximum(Calendar.DAY_OF_WEEK); + int daysPerWeek = maxDayOfWeek - minDayOfWeek + 1; + int numWeeks = (maxDay - minDay + daysPerWeek*2 - 1) / daysPerWeek; + + setHorizontalGroup(null); + setVerticalGroup(null); + removeAllChildren(); + dayButtons.clear(); + + String[] weekDays = formatSymbols.getShortWeekdays(); + + Group daysHorz = createSequentialGroup(); + Group daysVert = createSequentialGroup(); + Group[] daysOfWeekHorz = new Group[daysPerWeek]; + Group daysRow = createParallelGroup(); + daysVert.addGroup(daysRow); + + for(int i=0 ; i minDayOfWeek) { + int adj = minDayOfWeek - weekDay; + day += adj; + cal.add(Calendar.DAY_OF_MONTH, adj); + } + + while(day > minDay) { + day -= daysPerWeek; + cal.add(Calendar.DAY_OF_MONTH, -daysPerWeek); + } + + for(ToggleButton tb : dayButtons) { + DayModel dayModel = new DayModel(day); + tb.setText(Integer.toString(cal.get(Calendar.DAY_OF_MONTH))); + tb.setModel(dayModel); + AnimationState animState = tb.getAnimationState(); + animState.setAnimationState(STATE_PREV_MONTH, day < minDay); + animState.setAnimationState(STATE_NEXT_MONTH, day > maxDay); + dayModel.update(); + cal.add(Calendar.DAY_OF_MONTH, 1); + ++day; + } + + if(callbacks != null) { + for(Callback cb : callbacks) { + cb.calendarChanged(calendar); + } + } + } + + class DayModel extends HasCallback implements BooleanModel { + final int day; + boolean active; + + DayModel(int day) { + this.day = day; + } + + public boolean getValue() { + return active; + } + + void update() { + boolean newActive = calendar.get(Calendar.DAY_OF_MONTH) == day; + if(this.active != newActive) { + this.active = newActive; + doCallback(); + } + } + + public void setValue(boolean value) { + if(value && !active) { + calendar.set(Calendar.DAY_OF_MONTH, day); + calendarChanged(); + } + } + } + + class MonthAdjuster extends ValueAdjuster { + private long dragStartDate; + + @Override + protected void doDecrement() { + calendar.add(Calendar.MONTH, -1); + calendarChanged(); + } + + @Override + protected void doIncrement() { + calendar.add(Calendar.MONTH, 1); + calendarChanged(); + } + + @Override + protected String formatText() { + return monthNamesLong[calendar.get(Calendar.MONTH)] + + " " + calendar.get(Calendar.YEAR); + } + + @Override + protected void onDragCancelled() { + calendar.setTimeInMillis(dragStartDate); + calendarChanged(); + } + + @Override + protected void onDragStart() { + dragStartDate = calendar.getTimeInMillis(); + } + + @Override + protected void onDragUpdate(int dragDelta) { + dragDelta /= 5; + calendar.setTimeInMillis(dragStartDate); + calendar.add(Calendar.MONTH, dragDelta); + calendarChanged(); + } + + @Override + protected void onEditCanceled() { + } + + @Override + protected boolean onEditEnd(String text) { + try { + parseDateImpl(text, true); + return true; + } catch (ParseException ex) { + return false; + } + } + + @Override + protected String onEditStart() { + return formatText(); + } + + @Override + protected boolean shouldStartEdit(char ch) { + return false; + } + + @Override + protected void syncWithModel() { + setDisplayText(); + } + + @Override + protected String validateEdit(String text) { + try { + parseDateImpl(text, false); + return null; + } catch (ParseException ex) { + return ex.getLocalizedMessage(); + } + } + } +} diff --git a/twl/src/de/matthiasmann/twl/DatePickerComboBox.java b/twl/src/de/matthiasmann/twl/DatePickerComboBox.java new file mode 100644 index 0000000..55b50d3 --- /dev/null +++ b/twl/src/de/matthiasmann/twl/DatePickerComboBox.java @@ -0,0 +1,196 @@ +/* + * Copyright (c) 2008-2011, Matthias Mann + * + * All rights reserved. + * + * Redistribution and use in source and binary forms, with or without + * modification, are permitted provided that the following conditions are met: + * + * * Redistributions of source code must retain the above copyright notice, + * this list of conditions and the following disclaimer. + * * Redistributions in binary form must reproduce the above copyright + * notice, this list of conditions and the following disclaimer in the + * documentation and/or other materials provided with the distribution. + * * Neither the name of Matthias Mann nor the names of its contributors may + * be used to endorse or promote products derived from this software + * without specific prior written permission. + * + * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS + * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT + * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR + * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR + * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, + * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, + * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR + * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF + * LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING + * NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS + * SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. + */ +package de.matthiasmann.twl; + +import java.text.DateFormat; +import java.util.Calendar; +import java.util.Locale; +import de.matthiasmann.twl.model.DateModel; + +/** + * A date picker combobox + * + * @author Matthias Mann + */ +public class DatePickerComboBox extends ComboBoxBase { + + private final ComboboxLabel label; + private final DatePicker datePicker; + + public DatePickerComboBox() { + this(Locale.getDefault(), DateFormat.getDateInstance()); + } + + /** + * Constructs a date picker combo box using the specified locale and date format style + * @param locale the locale + * @param style the date style + * @see DateFormat#getDateInstance(int, java.util.Locale) + */ + public DatePickerComboBox(Locale locale, int style) { + this(locale, DateFormat.getDateInstance(style, locale)); + } + + public DatePickerComboBox(Locale locale, DateFormat dateFormat) { + L l = new L(); + + label = new ComboboxLabel(getAnimationState()); + label.setTheme("display"); + label.addCallback(l); + + datePicker = new DatePicker(locale, dateFormat); + datePicker.addCallback(l); + + popup.add(datePicker); + popup.setTheme("datepickercomboboxPopup"); + + button.getModel().addStateCallback(l); + + add(label); + } + + public void setModel(DateModel model) { + datePicker.setModel(model); + } + + public DateModel getModel() { + return datePicker.getModel(); + } + + public void setDateFormat(Locale locale, DateFormat dateFormat) { + datePicker.setDateFormat(locale, dateFormat); + } + + public DateFormat getDateFormat() { + return datePicker.getDateFormat(); + } + + public Locale getLocale() { + return datePicker.getLocale(); + } + + @Override + protected ComboboxLabel getLabel() { + return label; + } + + protected DatePicker getDatePicker() { + return datePicker; + } + + @Override + protected void setPopupSize() { + int minWidth = popup.getMinWidth(); + int minHeight = popup.getMinHeight(); + int popupWidth = computeSize(minWidth, + popup.getPreferredWidth(), + popup.getMaxWidth()); + int popupHeight = computeSize(minHeight, + popup.getPreferredHeight(), + popup.getMaxHeight()); + Widget container = popup.getParent(); + int popupMaxRight = container.getInnerRight(); + int popupMaxBottom = container.getInnerBottom(); + int x = getX(); + int y = getBottom(); + if(x + popupWidth > popupMaxRight) { + if(getRight() - popupWidth >= container.getInnerX()) { + x = getRight() - popupWidth; + } else { + x = popupMaxRight - minWidth; + } + } + if(y + popupHeight > popupMaxBottom) { + if(getY() - popupHeight >= container.getInnerY()) { + y = getY() - popupHeight; + } else { + y = popupMaxBottom - minHeight; + } + } + popupWidth = Math.min(popupWidth, popupMaxRight - x); + popupHeight = Math.min(popupHeight, popupMaxBottom - y); + popup.setPosition(x, y); + popup.setSize(popupWidth, popupHeight); + } + + protected void updateLabel() { + label.setText(datePicker.formatDate()); + } + + void updateHover() { + getAnimationState().setAnimationState(Label.STATE_HOVER, + label.hover || button.getModel().isHover()); + } + + protected class ComboboxLabel extends Label { + boolean hover; + + public ComboboxLabel(AnimationState animState) { + super(animState); + setAutoSize(false); + setClip(true); + setTheme("display"); + } + + @Override + public int getPreferredInnerHeight() { + int prefHeight = super.getPreferredInnerHeight(); + if(getFont() != null) { + prefHeight = Math.max(prefHeight, getFont().getLineHeight()); + } + return prefHeight; + } + + @Override + protected void handleMouseHover(Event evt) { + if(evt.isMouseEvent()) { + boolean newHover = evt.getType() != Event.Type.MOUSE_EXITED; + if(newHover != hover) { + hover = newHover; + updateHover(); + } + } + } + } + + class L implements Runnable, CallbackWithReason, DatePicker.Callback { + public void run() { + updateHover(); + } + + public void callback(Label.CallbackReason reason) { + openPopup(); + } + + public void calendarChanged(Calendar calendar) { + updateLabel(); + } + } +} diff --git a/twl/src/de/matthiasmann/twl/DebugHook.java b/twl/src/de/matthiasmann/twl/DebugHook.java index 7e254ab..39ab8db 100644 --- a/twl/src/de/matthiasmann/twl/DebugHook.java +++ b/twl/src/de/matthiasmann/twl/DebugHook.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -126,7 +126,7 @@ public void missingImage(String name) { /** * Called when GUI has validated the layout tree * @param iterations the number of iterations required to solve layout - * @param loop the widgets involved in a layout loop if the layout could not be solved - is null layout was solved + * @param loop the widgets involved in a layout loop if the layout could not be solved - is null if layout was solved */ public void guiLayoutValidated(int iterations, Collection loop) { if(loop != null) { @@ -138,4 +138,12 @@ public void guiLayoutValidated(int iterations, Collection loop) { } } } + + /** + * Called when wildcard resolution failed to find a theme and the fallback theme was specified + * @param themePath the requested theme name + */ + public void usingFallbackTheme(String themePath) { + System.err.println("Selected fallback theme for missing theme \"" + themePath + "\""); + } } diff --git a/twl/src/de/matthiasmann/twl/DialogLayout.java b/twl/src/de/matthiasmann/twl/DialogLayout.java index 569b55f..d094f74 100644 --- a/twl/src/de/matthiasmann/twl/DialogLayout.java +++ b/twl/src/de/matthiasmann/twl/DialogLayout.java @@ -1291,23 +1291,17 @@ private void setSizeNonPref(int axis, int pos, int size, int prefSize) { Arrays.sort(deltas, 0, resizeable); } - int sdelta = delta / resizeable; - int rest = delta - sdelta * resizeable; int sizes[] = new int[springs.size()]; + int remaining = resizeable; for(int i=0 ; i 0) { - editBuffer.insert(cursorPos, str, 0, insertLength); - cursorPos += insertLength; - update = true; + int inserted = editBuffer.replace(cursorPos, 0, str.substring(0, insertLength)); + if(inserted > 0) { + cursorPos += inserted; + update = true; + } } if(update) { updateText(true, Event.KEY_NONE); @@ -462,13 +517,11 @@ public int getPreferredInnerHeight() { } public void setErrorMessage(Object errorMsg) { + errorMsgFromModel = false; getAnimationState().setAnimationState(STATE_ERROR, errorMsg != null); if(this.errorMsg != errorMsg) { this.errorMsg = errorMsg; - GUI gui = getGUI(); - if(gui != null) { - gui.requestToolTipUpdate(this); - } + updateTooltip(); } if(errorMsg != null) { if(hasKeyboardFocus()) { @@ -724,7 +777,17 @@ public void run() { private void updateText(boolean updateAutoCompletion, int key) { if(model != null) { - model.setValue(getText()); + try { + model.setValue(getText()); + if(errorMsgFromModel) { + setErrorMessage(null); + } + } catch(Exception ex) { + if(errorMsg == null || errorMsgFromModel) { + setErrorMessage(ex.getMessage()); + errorMsgFromModel = true; + } + } } updateTextDisplay(); if(multiLine) { @@ -742,6 +805,7 @@ private void updateText(boolean updateAutoCompletion, int key) { private void updateTextDisplay() { textRenderer.setCharSequence(passwordMasking != null ? passwordMasking : editBuffer); + textRenderer.cacheDirty = true; checkTextWidth(); scrollToCursor(false); } @@ -775,8 +839,12 @@ protected void moveCursorY(int dir, boolean select) { protected void setCursorPos(int pos, boolean select) { pos = Math.max(0, Math.min(editBuffer.length(), pos)); if(!select) { + boolean hadSelection = hasSelection(); selectionStart = pos; selectionEnd = pos; + if(hadSelection) { + updateSelection(); + } } if(this.cursorPos != pos) { if(select) { @@ -795,13 +863,27 @@ protected void setCursorPos(int pos, boolean select) { selectionStart = selectionEnd; selectionEnd = t; } + updateSelection(); } + if(this.cursorPos != pos) { + getAnimationState().resetAnimationTime(STATE_CURSOR_MOVED); + } this.cursorPos = pos; scrollToCursor(false); updateAutoCompletion(); } } + + protected void updateSelection() { + if(attributes != null) { + attributes.removeAnimationState(TextWidget.STATE_TEXT_SELECTION); + attributes.setAnimationState(TextWidget.STATE_TEXT_SELECTION, + selectionStart, selectionEnd, true); + attributes.optimize(); + textRenderer.cacheDirty = true; + } + } public void setCursorPos(int pos) { if(pos < 0 || pos > editBuffer.length()) { @@ -813,6 +895,7 @@ public void setCursorPos(int pos) { public void selectAll() { selectionStart = 0; selectionEnd = editBuffer.length(); + updateSelection(); } public void setSelection(int start, int end) { @@ -821,6 +904,7 @@ public void setSelection(int start, int end) { } selectionStart = start; selectionEnd = end; + updateSelection(); } protected void selectWordFromMouse(int index) { @@ -832,6 +916,7 @@ protected void selectWordFromMouse(int index) { while(selectionEnd < editBuffer.length() && !Character.isWhitespace(editBuffer.charAt(selectionEnd))) { selectionEnd++; } + updateSelection(); } protected void scrollToCursor(boolean force) { @@ -868,9 +953,10 @@ protected void insertChar(char ch) { update = true; } if(editBuffer.length() < maxTextLength) { - editBuffer.insert(cursorPos, ch); - cursorPos++; - update = true; + if(editBuffer.replace(cursorPos, 0, ch)) { + cursorPos++; + update = true; + } } if(update) { updateText(true, Event.KEY_NONE); @@ -896,16 +982,17 @@ protected void deleteNext() { deleteSelection(); updateText(true, Event.KEY_DELETE); } else if(cursorPos < editBuffer.length()) { - editBuffer.deleteCharAt(cursorPos); - updateText(true, Event.KEY_DELETE); + if(editBuffer.replace(cursorPos, 1, "") >= 0) { + updateText(true, Event.KEY_DELETE); + } } } } protected void deleteSelection() { - editBuffer.delete(selectionStart, selectionEnd); - selectionEnd = selectionStart; - setCursorPos(selectionStart, false); + if(editBuffer.replace(selectionStart, selectionEnd-selectionStart, "") >= 0) { + setCursorPos(selectionStart, false); + } } protected void modelChanged() { @@ -932,7 +1019,7 @@ protected int getLineHeight() { } protected int computeLineNumber(int cursorPos) { - final StringBuilder eb = this.editBuffer; + final EditFieldModel eb = this.editBuffer; int lineNr = 0; for(int i=0 ; i 0 && eb.charAt(cursorPos-1) != '\n') { cursorPos--; } @@ -954,7 +1041,7 @@ protected int computeLineStart(int cursorPos) { } protected int computeLineEnd(int cursorPos) { - final StringBuilder eb = this.editBuffer; + final EditFieldModel eb = this.editBuffer; int endIndex = eb.length(); if(!multiLine) { return endIndex; @@ -1047,8 +1134,22 @@ private void openErrorInfoWindow() { } private void layoutErrorInfoWindow() { - errorInfoWindow.setSize(getWidth(), errorInfoWindow.getPreferredHeight()); - errorInfoWindow.setPosition(getX(), getBottom()); + int x = getX(); + int width = getWidth(); + + Widget container = errorInfoWindow.getParent(); + if(container != null) { + width = Math.max(width, computeSize( + errorInfoWindow.getMinWidth(), + errorInfoWindow.getPreferredWidth(), + errorInfoWindow.getMaxWidth())); + int popupMaxRight = container.getInnerRight(); + if(x + width > popupMaxRight) { + x = popupMaxRight - Math.min(width, container.getInnerWidth()); + } + errorInfoWindow.setSize(width, errorInfoWindow.getPreferredHeight()); + errorInfoWindow.setPosition(x, getBottom()); + } } @Override @@ -1086,6 +1187,8 @@ public void run() { protected class TextRenderer extends TextWidget { int lastTextX; int lastScrollPos; + AttributedStringFontCache cache; + boolean cacheDirty; protected TextRenderer(AnimationState animState) { super(animState); @@ -1098,7 +1201,10 @@ protected void paintWidget(GUI gui) { } lastScrollPos = hasFocusOrPopup() ? scrollPos : 0; lastTextX = computeTextX(); - if(hasSelection() && hasFocusOrPopup()) { + Font font = getFont(); + if(attributes != null && font instanceof Font2) { + paintWithAttributes((Font2)font); + } else if(hasSelection() && hasFocusOrPopup()) { if(multiLine) { paintMultiLineWithSelection(); } else { @@ -1112,17 +1218,19 @@ protected void paintWidget(GUI gui) { protected void paintWithSelection(int lineStart, int lineEnd, int yoff) { int selStart = selectionStart; int selEnd = selectionEnd; - if(selectionImage != null && selEnd > lineStart && selStart < lineEnd) { + if(selectionImage != null && selEnd > lineStart && selStart <= lineEnd) { int xpos0 = lastTextX + computeRelativeCursorPositionX(lineStart, selStart); - int xpos1 = lastTextX + computeRelativeCursorPositionX(lineStart, Math.min(lineEnd, selEnd)); + int xpos1 = (lineEnd < selEnd) ? getInnerRight() : + lastTextX + computeRelativeCursorPositionX(lineStart, Math.min(lineEnd, selEnd)); selectionImage.draw(getAnimationState(), xpos0, yoff, xpos1 - xpos0, getFont().getLineHeight()); } + paintWithSelection(getAnimationState(), selStart, selEnd, lineStart, lineEnd, yoff); } protected void paintMultiLineWithSelection() { - final StringBuilder eb = editBuffer; + final EditFieldModel eb = editBuffer; int lineStart = 0; int endIndex = eb.length(); int yoff = computeTextY(); @@ -1136,16 +1244,74 @@ protected void paintMultiLineWithSelection() { lineStart = lineEnd + 1; } } + + protected void paintMultiLineSelectionBackground() { + int lineHeight = getLineHeight(); + int lineStart = computeLineStart(selectionStart); + int lineNumber = computeLineNumber(lineStart); + int endIndex = selectionEnd; + int yoff = computeTextY() + lineHeight * lineNumber; + int xstart = lastTextX + computeRelativeCursorPositionX(lineStart, selectionStart); + while(lineStart < endIndex) { + int lineEnd = computeLineEnd(lineStart); + int xend; + + if(lineEnd < endIndex) { + xend = getInnerRight(); + } else { + xend = lastTextX + computeRelativeCursorPositionX(lineStart, endIndex); + } + + selectionImage.draw(getAnimationState(), xstart, yoff, xend - xstart, lineHeight); + + yoff += lineHeight; + lineStart = lineEnd + 1; + xstart = getInnerX(); + } + } + + protected void paintWithAttributes(Font2 font) { + if(selectionEnd > selectionStart && selectionImage != null) { + paintMultiLineSelectionBackground(); + } + if(cache == null || cacheDirty) { + cacheDirty = false; + if(multiLine) { + cache = font.cacheMultiLineText(cache, attributes); + } else { + cache = font.cacheText(cache, attributes); + } + } + int y = computeTextY(); + if(cache != null) { + cache.draw(lastTextX, y); + } else if(multiLine) { + font.drawMultiLineText(lastTextX, y, attributes); + } else { + font.drawText(lastTextX, y, attributes); + } + } @Override protected void sizeChanged() { - scrollToCursor(true); + if(scrollToCursorOnSizeChange) { + scrollToCursor(true); + } } @Override protected int computeTextX() { return getInnerX() - lastScrollPos; } + + @Override + public void destroy() { + super.destroy(); + if(cache != null) { + cache.destroy(); + cache = null; + } + } } static class PasswordMasker implements CharSequence { diff --git a/twl/src/de/matthiasmann/twl/Event.java b/twl/src/de/matthiasmann/twl/Event.java index cf0e3c4..80cf05d 100644 --- a/twl/src/de/matthiasmann/twl/Event.java +++ b/twl/src/de/matthiasmann/twl/Event.java @@ -86,10 +86,16 @@ public enum Type { MOUSE_WHEEL(true, false), /** * A key has been pressed. Not all keys generate characters. + * @see #isKeyEvent() + * @see #isKeyPressedEvent() + * @see #isKeyRepeated() + * @see #hasKeyChar() + * @see #hasKeyCharNoModifiers() */ KEY_PRESSED(false, true), /** * A key has been released. No character data is available. + * @see #isKeyEvent() */ KEY_RELEASED(false, true), /** @@ -376,16 +382,16 @@ public final boolean isMouseDragEnd() { } /** - * Returns the current mouse X coordinate - * @return the current mouse X coordinate + * Returns the current absolute mouse X coordinate + * @return the current absolute mouse X coordinate */ public final int getMouseX() { return mouseX; } /** - * Returns the current mouse Y coordinate - * @return the current mouse Y coordinate + * Returns the current absolute mouse Y coordinate + * @return the current absolute mouse Y coordinate */ public final int getMouseY() { return mouseY; diff --git a/twl/src/de/matthiasmann/twl/FileSelector.java b/twl/src/de/matthiasmann/twl/FileSelector.java index 0e8b232..f1f2963 100644 --- a/twl/src/de/matthiasmann/twl/FileSelector.java +++ b/twl/src/de/matthiasmann/twl/FileSelector.java @@ -368,7 +368,7 @@ public void setFileSystemModel(FileSystemModel fsm) { currentFolder.setSeparator(fsm.getSeparator()); autoCompletion.setDataSource(new FileSystemAutoCompletionDataSource(fsm, FileSystemTreeModel.FolderFilter.instance)); - if(folderMRU.getNumEntries() == 0 || !gotoFolderFromMRU(0) || !goHome()) { + if(!gotoFolderFromMRU(0) && !goHome()) { setCurrentNode(model); } } @@ -468,6 +468,10 @@ public boolean selectFile(Object file) { } return false; } + + public void clearSelection() { + fileTable.clearSelection(); + } /** * Adds a named file filter to the FileSelector. @@ -759,6 +763,9 @@ private void addToMRU(FileTable.Entry[] selection) { } boolean gotoFolderFromMRU(int idx) { + if(idx >= folderMRU.getNumEntries()) { + return false; + } String path = folderMRU.getEntry(idx); try { TreeTableNode node = resolvePath(path); diff --git a/twl/src/de/matthiasmann/twl/FileTable.java b/twl/src/de/matthiasmann/twl/FileTable.java index 125e0ff..9634d52 100644 --- a/twl/src/de/matthiasmann/twl/FileTable.java +++ b/twl/src/de/matthiasmann/twl/FileTable.java @@ -161,6 +161,10 @@ public boolean setSelection(Object file) { } return false; } + + public void clearSelection() { + fileTableSelectionModel.clearSelection(); + } public void setSortColumn(SortColumn column) { if(column == null) { diff --git a/twl/src/de/matthiasmann/twl/GUI.java b/twl/src/de/matthiasmann/twl/GUI.java index 59517e1..5abe239 100644 --- a/twl/src/de/matthiasmann/twl/GUI.java +++ b/twl/src/de/matthiasmann/twl/GUI.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -111,6 +111,7 @@ public interface AsyncCompletionListener { private int mouseClickedX; private int mouseClickedY; private long mouseEventTime; + private long tooltipEventTime; private long mouseClickedTime; private long keyEventTime; private int keyRepeatDelay; @@ -124,9 +125,6 @@ public interface AsyncCompletionListener { private boolean mouseIdleState; private MouseIdleListener mouseIdleListener; - private Rect[] clipRects; - private int numClipRects; - private InfoWindow activeInfoWindow; private final Widget infoWindowPlaceholder; @@ -137,9 +135,13 @@ public interface AsyncCompletionListener { private long tooltipClosedTime; final ArrayList activeTimers; - private final ArrayList invokeLaterQueue; final ExecutorService executorService; + private final Object invokeLock; + private Runnable[] invokeLaterQueue; + private int invokeLaterQueueSize; + private Runnable[] invokeRunnables; + /** * Constructs a new GUI manager with the given renderer and a default root * pane. @@ -189,7 +191,6 @@ public GUI(Widget rootPane, Renderer renderer, Input input) { this.event = new Event(); this.rootPane = rootPane; this.rootPane.setFocusKeyEnabled(false); - this.clipRects = new Rect[8]; this.infoWindowPlaceholder = new Widget(); this.infoWindowPlaceholder.setTheme(""); @@ -199,8 +200,10 @@ public GUI(Widget rootPane, Renderer renderer, Input input) { this.tooltipWindow.setVisible(false); this.activeTimers = new ArrayList(); - this.invokeLaterQueue = new ArrayList(); this.executorService = Executors.newSingleThreadExecutor(new TF()); // thread creatation is lazy + this.invokeLock = new Object(); + this.invokeLaterQueue = new Runnable[16]; + this.invokeRunnables = new Runnable[16]; setTheme(""); setFocusKeyEnabled(false); @@ -301,8 +304,11 @@ public void invokeLater(Runnable runnable) { if(runnable == null) { throw new IllegalArgumentException("runnable is null"); } - synchronized(invokeLaterQueue) { - invokeLaterQueue.add(runnable); + synchronized(invokeLock) { + if(invokeLaterQueueSize == invokeLaterQueue.length) { + growInvokeLaterQueue(); + } + invokeLaterQueue[invokeLaterQueueSize++] = runnable; } } @@ -368,12 +374,6 @@ public boolean requestToolTip(Widget widget, int x, int y, return false; } - public void requestToolTipUpdate(Widget widget) { - if(tooltipOwner == widget) { - tooltipOwner = null; - } - } - public MouseIdleListener getMouseIdleListener() { return mouseIdleListener; } @@ -439,9 +439,32 @@ public void setTooltipOffset(int tooltipOffsetX, int tooltipOffsetY) { this.tooltipOffsetX = tooltipOffsetX; this.tooltipOffsetY = tooltipOffsetY; } + + /** + * Sets set offscreen rendering delegate on the tooltip window. + * Can be null to disable offscreen rendering. + * + * @param renderOffscreen the offscreen rendering delegate. + * @see Widget#setRenderOffscreen(de.matthiasmann.twl.Widget.RenderOffscreen) + */ + public void setTooltipWindowRenderOffscreen(RenderOffscreen renderOffscreen) { + tooltipWindow.setRenderOffscreen(renderOffscreen); + } + + /** + * Changes the theme name of the tooltip window and applies and calls {@link #reapplyTheme() } + * + * @param theme the new theme path element + * @see Widget#setTheme(java.lang.String) + */ + public void setTooltipWindowTheme(String theme) { + tooltipWindow.setTheme(theme); + tooltipWindow.reapplyTheme(); + } /** * Throws UnsupportedOperationException + * @throws UnsupportedOperationException always */ @Override public boolean setPosition(int x, int y) { @@ -450,6 +473,7 @@ public boolean setPosition(int x, int y) { /** * Throws UnsupportedOperationException + * @throws UnsupportedOperationException always */ @Override public void insertChild(Widget child, int index) { @@ -458,6 +482,7 @@ public void insertChild(Widget child, int index) { /** * Throws UnsupportedOperationException + * @throws UnsupportedOperationException always */ @Override public void removeAllChildren() { @@ -466,6 +491,7 @@ public void removeAllChildren() { /** * Throws UnsupportedOperationException + * @throws UnsupportedOperationException always */ @Override public Widget removeChild(int index) { @@ -584,37 +610,43 @@ public void updateTimers() { */ public void invokeRunables() { Runnable[] runnables = null; - synchronized(invokeLaterQueue) { - int size = invokeLaterQueue.size(); - if(size > 0) { - runnables = invokeLaterQueue.toArray(new Runnable[size]); - invokeLaterQueue.clear(); + int count; + synchronized(invokeLock) { + count = invokeLaterQueueSize; + if(count > 0) { + invokeLaterQueueSize = 0; + runnables = invokeLaterQueue; + invokeLaterQueue = invokeRunnables; + invokeRunnables = runnables; } } - if(runnables != null) { - for(Runnable r : runnables) { - try { - r.run(); - } catch (Throwable ex) { - Logger.getLogger(GUI.class.getName()).log(Level.SEVERE, "Exception in runnable", ex); - } + for(int i=0 ; i tooltipDelay) || + ((curTime-tooltipEventTime) > tooltipDelay) || (hadOpenTooltip && (curTime-tooltipClosedTime) < tooltipReappearDelay))) { setTooltip( event.mouseX + tooltipOffsetX, @@ -1162,6 +1195,17 @@ protected boolean requestKeyboardFocus(Widget child) { return super.requestKeyboardFocus(child); } + void requestTooltipUpdate(Widget widget, boolean resetToolTipTimer) { + if(tooltipOwner == widget) { + tooltipOwner = null; + if(resetToolTipTimer) { + hideTooltip(); + hadOpenTooltip = false; + tooltipEventTime = curTime; + } + } + } + private void hideTooltip() { if(tooltipWindow.isVisible()) { tooltipClosedTime = curTime; @@ -1195,7 +1239,6 @@ private void setTooltip(int x, int y, Widget widget, Object content, } tooltipLabel.setBackground(null); tooltipLabel.setText(text); - tooltipWindow.adjustSize(); } else if(content instanceof Widget) { Widget tooltipWidget = (Widget)content; if(tooltipWidget.getParent() != null && tooltipWidget.getParent() != tooltipWindow) { @@ -1203,11 +1246,18 @@ private void setTooltip(int x, int y, Widget widget, Object content, } tooltipWindow.removeAllChildren(); tooltipWindow.add(tooltipWidget); - tooltipWindow.adjustSize(); } else { throw new IllegalArgumentException("Unsupported data type"); } + tooltipWindow.adjustSize(); + + // some Widgets (esp TextArea) have complex sizing policy + // give them a 2nd chance + if(tooltipWindow.isLayoutInvalid()) { + tooltipWindow.adjustSize(); + } + int ttWidth = tooltipWindow.getWidth(); int ttHeight = tooltipWindow.getHeight(); @@ -1254,38 +1304,6 @@ private void setTooltip(int x, int y, Widget widget, Object content, tooltipWindow.setPosition(x, y); tooltipWindow.setVisible(true); } - - void clipEnter(int x, int y, int w, int h) { - Rect rect; - if(numClipRects == clipRects.length) { - Rect[] newRects = new Rect[numClipRects*2]; - System.arraycopy(clipRects, 0, newRects, 0, numClipRects); - clipRects = newRects; - } - if((rect = clipRects[numClipRects]) == null) { - rect = new Rect(); - clipRects[numClipRects] = rect; - } - rect.setXYWH(x, y, w, h); - if(numClipRects > 0) { - rect.intersect(clipRects[numClipRects-1]); - } - renderer.setClipRect(rect); - numClipRects++; - } - - boolean clipEmpty() { - return clipRects[numClipRects-1].isEmpty(); - } - - void clipLeave() { - numClipRects--; - if(numClipRects == 0) { - renderer.setClipRect(null); - } else { - renderer.setClipRect(clipRects[numClipRects-1]); - } - } private void callMouseIdleListener() { if(mouseIdleListener != null) { @@ -1296,8 +1314,14 @@ private void callMouseIdleListener() { } } } + + private void growInvokeLaterQueue() { + Runnable[] tmp = new Runnable[invokeLaterQueueSize*2]; + System.arraycopy(invokeLaterQueue, 0, tmp, 0, invokeLaterQueueSize); + invokeLaterQueue = tmp; + } - static class TooltipWindow extends Widget { + static class TooltipWindow extends Container { public static final StateKey STATE_FADE = StateKey.get("fade"); private int fadeInTime; @@ -1328,31 +1352,6 @@ protected void paint(GUI gui) { super.paint(gui); } } - - @Override - public int getMinWidth() { - return BoxLayout.computeMinWidthVertical(this); - } - - @Override - public int getMinHeight() { - return BoxLayout.computeMinHeightHorizontal(this); - } - - @Override - public int getPreferredInnerWidth() { - return BoxLayout.computePreferredWidthVertical(this); - } - - @Override - public int getPreferredInnerHeight() { - return BoxLayout.computePreferredHeightHorizontal(this); - } - - @Override - protected void layout() { - layoutChildrenFullInnerArea(); - } } class AC implements Callable, Runnable { @@ -1362,7 +1361,7 @@ class AC implements Callable, Runnable { private V result; private Exception exception; - public AC(Callable jobC, Runnable jobR, AsyncCompletionListener listener) { + AC(Callable jobC, Runnable jobR, AsyncCompletionListener listener) { this.jobC = jobC; this.jobR = jobR; this.listener = listener; @@ -1398,7 +1397,7 @@ static class TF implements ThreadFactory { final AtomicInteger threadNumber = new AtomicInteger(1); final String prefix; - public TF() { + TF() { this.prefix = "GUI-" + poolNumber.getAndIncrement() + "-invokeAsync-"; } diff --git a/twl/src/de/matthiasmann/twl/InfoWindow.java b/twl/src/de/matthiasmann/twl/InfoWindow.java index 8b39cf9..7304616 100644 --- a/twl/src/de/matthiasmann/twl/InfoWindow.java +++ b/twl/src/de/matthiasmann/twl/InfoWindow.java @@ -36,7 +36,7 @@ * * @author Matthias Mann */ -public class InfoWindow extends Widget { +public class InfoWindow extends Container { private final Widget owner; @@ -85,31 +85,6 @@ public void closeInfo() { protected void infoWindowClosed() { } - @Override - protected void layout() { - layoutChildrenFullInnerArea(); - } - - @Override - public int getMinWidth() { - return BoxLayout.computeMinWidthVertical(this); - } - - @Override - public int getMinHeight() { - return BoxLayout.computeMinHeightHorizontal(this); - } - - @Override - public int getPreferredInnerWidth() { - return BoxLayout.computePreferredWidthVertical(this); - } - - @Override - public int getPreferredInnerHeight() { - return BoxLayout.computePreferredHeightHorizontal(this); - } - private static boolean isParentInfoWindow(Widget w) { while(w != null) { if(w instanceof InfoWindow) { diff --git a/twl/src/de/matthiasmann/twl/ListBox.java b/twl/src/de/matthiasmann/twl/ListBox.java index d05ef49..bf2c500 100644 --- a/twl/src/de/matthiasmann/twl/ListBox.java +++ b/twl/src/de/matthiasmann/twl/ListBox.java @@ -29,9 +29,11 @@ */ package de.matthiasmann.twl; +import de.matthiasmann.twl.model.IntegerModel; import de.matthiasmann.twl.utils.CallbackSupport; import de.matthiasmann.twl.model.ListModel; import de.matthiasmann.twl.model.ListModel.ChangeListener; +import de.matthiasmann.twl.model.ListSelectionModel; import de.matthiasmann.twl.renderer.AnimationState.StateKey; /** @@ -47,7 +49,7 @@ public class ListBox extends Widget { * @see #setSelected(int) * @see #setSelected(int, boolean) */ - public static final int NO_SELECTION = -1; + public static final int NO_SELECTION = ListSelectionModel.NO_SELECTION; public static final int DEFAULT_CELL_HEIGHT = 20; public static final int SINGLE_COLUMN = -1; @@ -75,17 +77,21 @@ public boolean actionRequested() { private final Scrollbar scrollbar; private ListBoxDisplay[] labels; private ListModel model; + private IntegerModel selectionModel; + private Runnable selectionModelCallback; private int cellHeight = DEFAULT_CELL_HEIGHT; private int cellWidth = SINGLE_COLUMN; private boolean rowMajor = true; private boolean fixedCellWidth; private boolean fixedCellHeight; + private int minDisplayedRows = 1; private int numCols = 1; private int firstVisible; private int selected = NO_SELECTION; private int numEntries; private boolean needUpdate; + private boolean inSetSelected; private CallbackWithReason[] callbacks; public ListBox() { @@ -109,6 +115,12 @@ public ListBox(ListModel model) { setModel(model); } + @SuppressWarnings("OverridableMethodCallInConstructor") + public ListBox(ListSelectionModel model) { + this(); + setModel(model); + } + public ListModel getModel() { return model; } @@ -126,6 +138,40 @@ public void setModel(ListModel model) { } } + public IntegerModel getSelectionModel() { + return selectionModel; + } + + public void setSelectionModel(IntegerModel selectionModel) { + if(this.selectionModel != selectionModel) { + if(this.selectionModel != null) { + this.selectionModel.removeCallback(selectionModelCallback); + } + this.selectionModel = selectionModel; + if(selectionModel != null) { + if(selectionModelCallback == null) { + selectionModelCallback = new Runnable() { + public void run() { + syncSelectionFromModel(); + } + }; + } + this.selectionModel.addCallback(selectionModelCallback); + syncSelectionFromModel(); + } + } + } + + public void setModel(ListSelectionModel model) { + setSelectionModel(null); + if(model == null) { + setModel((ListModel)null); + } else { + setModel(model.getListModel()); + setSelectionModel(model); + } + } + public void addCallback(CallbackWithReason cb) { callbacks = CallbackSupport.addCallbackToList(callbacks, cb, CallbackWithReason.class); } @@ -220,7 +266,7 @@ public void setSelected(int selected) { * Selects the specified entry and optionally scrolls to that entry * * @param selected the index or {@link #NO_SELECTION} - * @param scroll treu if it should scroll to make the entry visible + * @param scroll true if it should scroll to make the entry visible * @throws IllegalArgumentException if index is invalid */ public void setSelected(int selected, boolean scroll) { @@ -251,6 +297,14 @@ void setSelected(int selected, boolean scroll, CallbackReason reason) { } if(this.selected != selected) { this.selected = selected; + if(selectionModel != null) { + try { + inSetSelected = true; + selectionModel.setValue(selected); + } finally { + inSetSelected = false; + } + } needUpdate = true; doCallback(reason); } else if(reason.actionRequested() || reason == CallbackReason.MOUSE_CLICK) { @@ -341,6 +395,7 @@ protected void applyTheme(ThemeInfo themeInfo) { setRowMajor(themeInfo.getParameter("rowMajor", true)); setFixedCellWidth(themeInfo.getParameter("fixedCellWidth", false)); setFixedCellHeight(themeInfo.getParameter("fixedCellHeight", false)); + minDisplayedRows = themeInfo.getParameter("minDisplayedRows", 1); } protected void goKeyboard(int dir) { @@ -441,7 +496,12 @@ public int getMinWidth() { @Override public int getMinHeight() { - return Math.max(super.getMinHeight(), scrollbar.getMinHeight()); + int minHeight = Math.max(super.getMinHeight(), scrollbar.getMinHeight()); + if(minDisplayedRows > 0) { + minHeight = Math.max(minHeight, getBorderVertical() + + Math.min(numEntries, minDisplayedRows) * cellHeight); + } + return minHeight; } @Override @@ -724,6 +784,12 @@ void scrollbarChanged() { setFirstVisible(scrollbar.getValue() * numCols); } + void syncSelectionFromModel() { + if(!inSetSelected) { + setSelected(selectionModel.getValue()); + } + } + private class LImpl implements ChangeListener, Runnable { public void entriesInserted(int first, int last) { ListBox.this.entriesInserted(first, last); diff --git a/twl/src/de/matthiasmann/twl/Menu.java b/twl/src/de/matthiasmann/twl/Menu.java index 81d8939..d5dc186 100644 --- a/twl/src/de/matthiasmann/twl/Menu.java +++ b/twl/src/de/matthiasmann/twl/Menu.java @@ -1,5 +1,5 @@ /* - * Copyright (c) 2008-2010, Matthias Mann + * Copyright (c) 2008-2011, Matthias Mann * * All rights reserved. * @@ -31,6 +31,8 @@ import de.matthiasmann.twl.model.BooleanModel; import de.matthiasmann.twl.renderer.AnimationState.StateKey; +import de.matthiasmann.twl.utils.CallbackSupport; +import de.matthiasmann.twl.utils.TypeMapping; import java.util.ArrayList; import java.util.Iterator; @@ -43,8 +45,38 @@ public class Menu extends MenuElement implements Iterable { public static final StateKey STATE_HAS_OPEN_MENUS = StateKey.get("hasOpenMenus"); + public interface Listener { + /** + * Called before a menu popup is created. + *