[Thinlet-development] thinlet/demo Demo.java,1.2,1.3 demo.xml,1.3,1.4
Brought to you by:
bajzat
From: <ab...@us...> - 2003-05-09 02:04:43
|
Update of /cvsroot/thinlet/thinlet/demo In directory sc8-pr-cvs1:/tmp/cvs-serv7682/demo Modified Files: Demo.java demo.xml Log Message: Several improvements and fixes: * internationalization - please see setLangResource javadoc for description. * borderless textarea; suitable for multiline labels * new sidebar and hyperlink widgets * improved spinbox - supports minimum, maximum, value and step * improved support for custom background / foreground and font for individual components * support for menus that open above menubar, not below * popup menus work now for more components * use different gradient for dialog titlebars * a few of NPEs in layout code fixed. * added more javadoc to public methods, and corrected some. Demo has been updated to show the new capabilities. Index: Demo.java =================================================================== RCS file: /cvsroot/thinlet/thinlet/demo/Demo.java,v retrieving revision 1.2 retrieving revision 1.3 diff -u -d -r1.2 -r1.3 --- Demo.java 25 Nov 2002 18:00:49 -0000 1.2 +++ Demo.java 8 May 2003 20:30:56 -0000 1.3 @@ -12,226 +12,256 @@ * */ public class Demo extends Thinlet { - - /** - * - */ - public Demo() { - try { - add(parse("demo.xml")); - } catch (Exception exc) { exc.printStackTrace(); } - } - - /** - * - */ - public static void main(String[] args) { - new FrameLauncher("Demo", new Demo(), 320, 320); - } - - boolean textinit; - boolean valueinit; - - /** - * - */ - public void loadText(Object textarea) { - try { - InputStream inputstream = null; - try { - inputstream = getClass().getResourceAsStream("demodialog.xml"); - } catch (Throwable e) {} - BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream)); - StringBuffer text = new StringBuffer(); - for (int c = reader.read(); c != -1; c = reader.read()) { - if (((c > 0x1f) && (c < 0x7f)) || - ((c > 0x9f) && (c < 0xffff)) || (c == '\n')) { - text.append((char) c); - } - else if (c == '\t') { - text.append(" "); - } - } - reader.close(); - setString(textarea, "text", text.toString()); - textinit = true; - } catch (Exception exc) { getToolkit().beep(); } - } - - /** - * - */ - public void changeEditable(boolean editable, Object textarea) { - setBoolean(textarea, "editable", editable); - } - - /** - * - */ - public void changeEnabled(boolean enabled, Object textarea) { - setBoolean(textarea, "enabled", enabled); - } - - Object dialog; - - /** - * - */ - public void showDialog() { - try { - if (dialog == null) { - dialog = parse("demodialog.xml"); - } - add(dialog); - } catch (Exception exc) { exc.printStackTrace(); } - } - - /** - * - */ - public void findText(Object combobox, String what, - boolean match, boolean down) { - closeDialog(); - if (what.length() == 0) { return; } - - boolean cacheditem = false; - for (int i = getCount(combobox) - 1; i >= 0; i--) { - String choicetext = getString(getItem(combobox, i), "text"); - if (what.equals(choicetext)) { cacheditem = true; break; } - } - if (!cacheditem) { - Object choice = create("choice"); - setString(choice, "text", what); - add(combobox, choice); - } - - Object textarea = find("textarea"); - int end = getInteger(textarea, "end"); - String text = getString(textarea, "text"); - - if (!match) { - what = what.toLowerCase(); - text = text.toLowerCase(); - } - - int index = text.indexOf(what, down ? end : 0); - if (!down && (index != -1) && (index >= end)) { index = -1; } - if (index != -1) { - setInteger(textarea, "start", index); - setInteger(textarea, "end", index + what.length()); - requestFocus(textarea); - } - else { - getToolkit().beep(); - } - } - - /** - * - */ - public void closeDialog() { - remove(dialog); - } - - /** - * - */ - public void insertList(Object list) { - Object item = create("item"); - setString(item, "text", "New item"); - setIcon(item, "icon", getIcon("/icons/bookmarks.gif")); - add(list, item, 0); - } - - /** - * - */ - public void deleteList(Object delete, Object list) { - for (int i = getCount(list) - 1; i >= 0; i--) { - Object item = getItem(list, i); - if (getBoolean(item, "selected")) { - remove(item); - } - } - setBoolean(delete, "enabled", false); - } - - /** - * - */ - public void changeSelection(Object list, Object delete) { - setBoolean(delete, "enabled", getSelectedIndex(list) != -1); - } - - /** - * - */ - public void setSelection(Object list, String selection, Object delete) { - for (int i = getCount(list) - 1; i >= 0; i--) { - setBoolean(getItem(list, i), "selected", false); - } - setChoice(list, "selection", selection); - setBoolean(delete, "enabled", false); - } - - /** - * - */ - public void sliderChanged(int value, Object spinbox) { - setString(spinbox, "text", String.valueOf(value)); - hsbChanged(); - } - - /** - * - */ - public void spinboxChanged(String text, Object slider) { - try { - int value = Integer.parseInt(text); - if ((value >= 0) && (value <= 255)) { - setInteger(slider, "value", value); - hsbChanged(); - } - } catch (NumberFormatException nfe) { getToolkit().beep(); } - } - - private Object sl_red, sl_green, sl_blue; - private Object tf_hue, tf_saturation, tf_brightness; - private Object pb_hue, pb_saturation, pb_brightness; - - /** - * - */ - public void storeWidgets(Object sl_red, Object sl_green, Object sl_blue, - Object tf_hue, Object tf_saturation, Object tf_brightness, - Object pb_hue, Object pb_saturation, Object pb_brightness) { - this.sl_red = sl_red; - this.sl_green = sl_green; - this.sl_blue = sl_blue; - this.tf_hue = tf_hue; - this.tf_saturation = tf_saturation; - this.tf_brightness = tf_brightness; - this.pb_hue = pb_hue; - this.pb_saturation = pb_saturation; - this.pb_brightness = pb_brightness; - } - - /** - * - */ - private void hsbChanged() { - int red = getInteger(sl_red, "value"); - int green = getInteger(sl_green, "value"); - int blue = getInteger(sl_blue, "value"); - - float[] hsb = Color.RGBtoHSB(red, green, blue, null); - - setString(tf_hue, "text", String.valueOf(hsb[0])); - setString(tf_saturation, "text", String.valueOf(hsb[1])); - setString(tf_brightness, "text", String.valueOf(hsb[2])); - - setInteger(pb_hue, "value", (int) (100f * hsb[0])); - setInteger(pb_saturation, "value", (int) (100f * hsb[1])); - setInteger(pb_brightness, "value", (int) (100f * hsb[2])); - } + + /** + * + */ + public Demo() { + try { + add(parse("demo.xml")); + } catch (Exception exc) { exc.printStackTrace(); } + } + + /** + * + */ + public static void main(String[] args) { + new FrameLauncher("Demo", new Demo(), 320, 320); + } + + boolean textinit; + boolean valueinit; + + /** + * + */ + public void loadText(Object textarea) { + try { + InputStream inputstream = null; + try { + inputstream = getClass().getResourceAsStream("demodialog.xml"); + } catch (Throwable e) {} + BufferedReader reader = new BufferedReader(new InputStreamReader(inputstream)); + StringBuffer text = new StringBuffer(); + for (int c = reader.read(); c != -1; c = reader.read()) { + if (((c > 0x1f) && (c < 0x7f)) || + ((c > 0x9f) && (c < 0xffff)) || (c == '\n')) { + text.append((char) c); + } + else if (c == '\t') { + text.append(" "); + } + } + reader.close(); + setString(textarea, "text", text.toString()); + textinit = true; + } catch (Exception exc) { getToolkit().beep(); } + } + + public void actionTheme(String idx) { + int index = idx.charAt(1) - '0'; + switch (index) { + case 0: //xp + setColors(0xece9d8, 0x000000, 0xf5f4f0, + 0x919b9a, 0xb0b0b0, 0xededed, 0xb9b9b9, 0xff899a, 0xc5c5dd); + break; + case 1: //gray + setColors(0xe6e6e6, 0x000000, 0xffffff, + 0x909090, 0xb0b0b0, 0xededed, 0xb9b9b9, 0x89899a, 0xc5c5dd); + break; + case 2: //yellow + setColors(0xeeeecc, 0x000000, 0xffffff, + 0x999966, 0xb0b096, 0xededcb, 0xcccc99, 0xcc6600, 0xffcc66); + break; + case 3: //blue + setColors(0x6375d6, 0xffffff, 0x7f8fdd, + 0xd6dff5, 0x9caae5, 0x666666, 0x003399, 0xff3333, 0x666666); + break; + } + } + /** + * + */ + public void changeEditable(boolean editable, Object textarea) { + setBoolean(textarea, "editable", editable); + } + + /** + * + */ + public void changeEnabled(boolean enabled, Object textarea) { + setBoolean(textarea, "enabled", enabled); + } + + public void changeBorder(boolean enabled, Object textarea) { + setBoolean(textarea, "border", enabled); + } + + Object dialog; + + /** + * + */ + public void showDialog() { + try { + if (dialog == null) { + dialog = parse("demodialog.xml"); + } + add(dialog); + } catch (Exception exc) { exc.printStackTrace(); } + } + + /** + * + */ + public void findText(Object combobox, String what, + boolean match, boolean down) { + closeDialog(); + if (what.length() == 0) { return; } + + boolean cacheditem = false; + for (int i = getCount(combobox) - 1; i >= 0; i--) { + String choicetext = getString(getItem(combobox, i), "text"); + if (what.equals(choicetext)) { cacheditem = true; break; } + } + if (!cacheditem) { + Object choice = create("choice"); + setString(choice, "text", what); + add(combobox, choice); + } + + Object textarea = find("textarea"); + int end = getInteger(textarea, "end"); + String text = getString(textarea, "text"); + + if (!match) { + what = what.toLowerCase(); + text = text.toLowerCase(); + } + + int index = text.indexOf(what, down ? end : 0); + if (!down && (index != -1) && (index >= end)) { index = -1; } + if (index != -1) { + setInteger(textarea, "start", index); + setInteger(textarea, "end", index + what.length()); + requestFocus(textarea); + } + else { + getToolkit().beep(); + } + } + + /** + * + */ + public void closeDialog() { + remove(dialog); + } + + /** + * + */ + public void insertList(Object list) { + Object item = create("item"); + setString(item, "text", "New item"); + setIcon(item, "icon", getIcon("/icons/bookmarks.gif")); + add(list, item, 0); + } + + /** + * + */ + public void deleteList(Object delete, Object list) { + for (int i = getCount(list) - 1; i >= 0; i--) { + Object item = getItem(list, i); + if (getBoolean(item, "selected")) { + remove(item); + } + } + setBoolean(delete, "enabled", false); + } + + /** + * + */ + public void changeSelection(Object list, Object delete) { + setBoolean(delete, "enabled", getSelectedIndex(list) != -1); + } + + /** + * + */ + public void setSelection(Object list, String selection, Object delete) { + for (int i = getCount(list) - 1; i >= 0; i--) { + setBoolean(getItem(list, i), "selected", false); + } + setChoice(list, "selection", selection); + setBoolean(delete, "enabled", false); + } + + /** + * + */ + public void sliderChanged(int value, Object spinbox) { + setString(spinbox, "text", String.valueOf(value)); + hsbChanged(); + } + + /** + * + */ + public void spinboxChanged(String text, Object slider) { + try { + int value = Integer.parseInt(text); + if ((value >= 0) && (value <= 255)) { + setInteger(slider, "value", value); + hsbChanged(); + } + } catch (NumberFormatException nfe) { getToolkit().beep(); } + } + + private Object sl_red, sl_green, sl_blue; + private Object tf_hue, tf_saturation, tf_brightness; + private Object pb_hue, pb_saturation, pb_brightness; + private Object rgb_label; + + /** + * + */ + public void storeWidgets(Object sl_red, Object sl_green, Object sl_blue, + Object tf_hue, Object tf_saturation, Object tf_brightness, + Object pb_hue, Object pb_saturation, Object pb_brightness, + Object rgb_label) { + this.sl_red = sl_red; + this.sl_green = sl_green; + this.sl_blue = sl_blue; + this.tf_hue = tf_hue; + this.tf_saturation = tf_saturation; + this.tf_brightness = tf_brightness; + this.pb_hue = pb_hue; + this.pb_saturation = pb_saturation; + this.pb_brightness = pb_brightness; + this.rgb_label = rgb_label; + actionTheme("t0"); + } + + /** + * + */ + private void hsbChanged() { + int red = getInteger(sl_red, "value"); + int green = getInteger(sl_green, "value"); + int blue = getInteger(sl_blue, "value"); + + float[] hsb = Color.RGBtoHSB(red, green, blue, null); + + setBackground(rgb_label, new Color(red, green, blue)); + setString(tf_hue, "text", String.valueOf(hsb[0])); + setString(tf_saturation, "text", String.valueOf(hsb[1])); + setString(tf_brightness, "text", String.valueOf(hsb[2])); + + setInteger(pb_hue, "value", (int) (100f * hsb[0])); + setInteger(pb_saturation, "value", (int) (100f * hsb[1])); + setInteger(pb_brightness, "value", (int) (100f * hsb[2])); + } } Index: demo.xml =================================================================== RCS file: /cvsroot/thinlet/thinlet/demo/demo.xml,v retrieving revision 1.3 retrieving revision 1.4 diff -u -d -r1.3 -r1.4 --- demo.xml 29 Apr 2003 17:59:08 -0000 1.3 +++ demo.xml 8 May 2003 20:30:56 -0000 1.4 @@ -26,6 +26,12 @@ <menuitem text="Find..." icon="/icons/find.gif" /> <menuitem text="Find Next" icon="/icons/findagain.gif" /> </menu> + <menu text="Theme"> + <checkboxmenuitem text="XP" name="t0" group="theme" action="actionTheme(this.name)" selected="true"/> + <checkboxmenuitem text="Gray" name="t1" group="theme" action="actionTheme(this.name)"/> + <checkboxmenuitem text="Sandstone" name="t2" group="theme" action="actionTheme(this.name)"/> + <checkboxmenuitem text="Ocean" name="t3" group="theme" action="actionTheme(this.name)"/> + </menu> <menu text="Help"> <menuitem text="Help Topics" icon="/icons/help.gif" /> <separator /> @@ -34,16 +40,21 @@ </menubar> <tabbedpane selected="1" weightx="1" weighty="1"> <tab text="Texts"> - <panel columns="5" top="4" left="4" bottom="4" right="4" gap="4"> - <label text="Find in the text:" mnemonic="10" /> - <button name="b_finddialog" text="Search" tooltip="Search..." + <panel columns="2" top="4" left="4" bottom="4" right="4" gap="4"> + <panel columns="1" gap="2"> + <label text="Find in the text:" mnemonic="10" /> + <button name="b_finddialog" text="Search" tooltip="Search..." icon="/icons/find.gif" mnemonic="1" action="showDialog()" /> - <label weightx="1" /> - <checkbox name="cb_editable" text="Editable" mnemonic="4" + </panel> + <panel columns="2" left="10" gap="4"> + <checkbox name="cb_editable" text="Editable" mnemonic="4" selected="true" action="changeEditable(this.selected, textarea)" /> - <checkbox name="cb_enabled" text="Enabled" selected="true" + <checkbox name="cb_enabled" text="Enabled" selected="true" action="changeEnabled(this.selected, textarea)" /> - <textarea name="textarea" init="loadText(this)" colspan="5" weighty="1" /> + <checkbox name="cb_border" text="Border" selected="true" + action="changeBorder(this.selected, textarea)" /> + </panel> + <textarea name="textarea" init="loadText(this)" colspan="2" halign="fill" weightx="1" weighty="1" /> </panel> </tab> @@ -66,6 +77,12 @@ <splitpane divider="120"> <list name="list" selection="multiple" action="changeSelection(this, delete)" colspan="4" weightx="1" weighty="1"> + <popupmenu> + <menuitem text="one"/> + <menuitem text="two"/> + <separator/> + <menuitem text="three"/> + </popupmenu> <item text="List item A" /> <item text="List item B" icon="/icons/bookmarks.gif" selected="true" /> <item text="List item C" enabled="false" /> @@ -75,6 +92,12 @@ <item text="List item G" /> </list> <tree selection="multiple"> + <popupmenu> + <menuitem text="one"/> + <menuitem text="two"/> + <separator/> + <menuitem text="three"/> + </popupmenu> <node text="Tree node A" icon="/icons/open.gif"> <node text="Tree node" icon="/icons/open.gif" selected="true"> <node text="Tree node" icon="/icons/new.gif" /> @@ -87,6 +110,12 @@ </tree> </splitpane> <table selection="multiple"> + <popupmenu> + <menuitem text="one"/> + <menuitem text="two"/> + <separator/> + <menuitem text="three"/> + </popupmenu> <header> <column text="Column" icon="/icons/bookmarks.gif" width="120" /> <column text="Column" alignment="center" /> @@ -109,29 +138,27 @@ </row> </table> </splitpane> - <separator colspan="5"/> - <button colspan="5" link="true" halign="left" text="www.thinlet.com"/> </panel> </tab> <tab text="Values"> <panel columns="3" top="4" left="4" gap="4" - init="storeWidgets(sl_red, sl_green, sl_blue, tf_hue, tf_saturation, tf_brightness, pb_hue, pb_saturation, pb_brightness)"> + init="storeWidgets(sl_red, sl_green, sl_blue, tf_hue, tf_saturation, tf_brightness, pb_hue, pb_saturation, pb_brightness, rgb_label)"> <label text="Red, green, and blue values" colspan="3" /> <label text="Red:" alignment="right" /> <slider name="sl_red" maximum="255" valign="center" action="sliderChanged(this.value, sb_red)" /> - <spinbox name="sb_red" text="0" columns="3" + <spinbox name="sb_red" maximum="255" text="0" columns="3" action="spinboxChanged(this.text, sl_red)" /> <label text="Green:" alignment="right" /> <slider name="sl_green" maximum="255" valign="center" action="sliderChanged(this.value, sb_green)" /> - <spinbox name="sb_green" text="0" columns="3" + <spinbox name="sb_green" maximum="255" text="0" columns="3" action="spinboxChanged(this.text, sl_green)" /> <label text="Blue:" alignment="right" /> <slider name="sl_blue" maximum="255" valign="center" action="sliderChanged(this.value, sb_blue)" /> - <spinbox name="sb_blue" text="0" columns="3" + <spinbox name="sb_blue" maximum="255" text="0" columns="3" action="spinboxChanged(this.text, sl_blue)" /> <separator colspan="3" /> @@ -146,7 +173,106 @@ <label text="Brightness:" alignment="right" /> <textfield name="tf_brightness" text="0.0" editable="false" /> <progressbar name="pb_brightness" valign="center" /> + <separator colspan="3"/> + <label colspan="3" name="rgb_label" valign="fill" weighty="1" background="#000000"/> + </panel> + </tab> + <tab text="Other"> + <panel halign="fill" weightx="1" valign="fill" weighty="1" gap="4" top="4" columns="3"> + <panel halign="fill" weightx="1" columns="1" gap="2"> + <label text="Sidebar widget:"/> + <tabbedpane placement="stacked" halign="fill" weightx="1" valign="fill" weighty="1"> + <popupmenu> + <menuitem text="one"/> + <menuitem text="two"/> + <separator/> + <menuitem text="three"/> + </popupmenu> + <tab text="One" property="c=123;v=345"> + <panel columns="1" gap="4"> + <textarea valign="fill" weighty="1" weightx="1" halign="fill" border="false" wrap="true" editable="false" text="Popup menus are supported in many components. Try to right-click on the tab name. Try it on lists, trees and tables."/> + </panel> + </tab> + <tab text="Two" font="bold 14"> + <panel scrollable="true" columns="1" gap="4"> + <label text="This is a scrollable panel."/> + <label text="Custom colors/fonts:"/> + <button text="abcdef" font="18" background="#888888"/> + <button text="abcdef" font="Courier 17" background="#882288"/> + <button text="abcdef" font="Serif 16" background="#228888"/> + <button text="abcdef" font="bold 15" background="#888822"/> + <button text="abcdef" font="italic 14" background="#448844"/> + <button text="abcdef" font="bold italic 13" background="#444488"/> + <button text="abcdef" font="12" background="#884444"/> + <button text="abcdef" font="11" background="#2288ff"/> + <button text="abcdef" font="10" background="#ff2288"/> + </panel> + </tab> + <tab text="Three" font="bold" foreground="#0000ff"> + <panel columns="1" gap="4"> + <menubar halign="fill" weightx="1"> + <menu text="File"> + <menuitem text="one"/> + </menu> + </menubar> + <textarea wrap="true" valign="fill" weighty="1" halign="fill" weightx="1" border="false" editable="false" text="Menus can be placed on any panel or dialog."/> + </panel> + </tab> + <tab text="Four" font="Serif bold 14" background="#8888ff" foreground="#ffffff"> + <panel columns="1" gap="4"> + <textarea valign="fill" weighty="1" weightx="1" halign="fill" border="false" wrap="true" editable="false" font="Serif italic bold 14" foreground="#88ff88" background="#446600" text="Most components support custom background / foreground colors and font settings"/> + </panel> + </tab> + </tabbedpane> + </panel> + <separator/> + <panel weighty="1" weightx="1" halign="fill" valign="fill" columns="1" gap="2"> + <textarea halign="fill" weightx="1" border="false" editable="false" text="Border-less textareas can be used as multiline labels." wrap="true"/> + <label text="Link widget:"/> + <button type="link" tooltip="Link widget" halign="left" text="www.thinlet.com"/> + </panel> + <separator colspan="3"/> + <panel colspan="3" halign="fill" weightx="1"> + <menubar placement="top"> + <menu text="Start" font="bold 13" tooltip="Click here to begin"> + <menuitem text="Thinlet Home"/> + <separator/> + <menu text="Programs"> + <menu text="Accessories"> + <menuitem text="Thinlet!"/> + <menuitem text="Thinlet!"/> + <menuitem text="Thinlet!"/> + </menu> + <menuitem text="Amazon Browser"/> + <menuitem text="Calculator"/> + </menu> + <menu text="Documents"> + <menuitem text="one"/> + <menuitem text="two"/> + <menuitem text="three"/> + </menu> + <menu text="Settings"> + <menuitem text="Control Panel"/> + <separator/> + <menu text="Network & Dialup"> + <menuitem text="Thinlet!"/> + </menu> + <menuitem text="Printers"/> + <menuitem text="Taskbar & Start Menu..."/> + </menu> + <menu text="Search"> + <menuitem text="one"/> + </menu> + <menuitem text="Help"/> + <menuitem text="Run..."/> + <separator/> + <menuitem text="Shut Down..."/> + </menu> + </menubar> + <separator/> + <label text=" Unfold-up menus are supported."/> + </panel> </panel> </tab> </tabbedpane> |