You can subscribe to this list here.
2006 |
Jan
|
Feb
|
Mar
|
Apr
|
May
|
Jun
|
Jul
|
Aug
|
Sep
|
Oct
(8) |
Nov
(12) |
Dec
(26) |
---|---|---|---|---|---|---|---|---|---|---|---|---|
2007 |
Jan
(30) |
Feb
(51) |
Mar
(26) |
Apr
(32) |
May
(15) |
Jun
(17) |
Jul
(11) |
Aug
(33) |
Sep
(10) |
Oct
(28) |
Nov
(32) |
Dec
(6) |
2008 |
Jan
(36) |
Feb
(3) |
Mar
(23) |
Apr
(29) |
May
(37) |
Jun
(18) |
Jul
(5) |
Aug
(1) |
Sep
(1) |
Oct
(7) |
Nov
|
Dec
|
2009 |
Jan
(8) |
Feb
(2) |
Mar
(18) |
Apr
(18) |
May
(5) |
Jun
(10) |
Jul
(2) |
Aug
(6) |
Sep
|
Oct
(2) |
Nov
(2) |
Dec
|
From: <mar...@us...> - 2009-11-14 21:33:43
|
Revision: 660 http://fenggui.svn.sourceforge.net/fenggui/?rev=660&view=rev Author: marcmenghin Date: 2009-11-14 21:33:27 +0000 (Sat, 14 Nov 2009) Log Message: ----------- - moved StateManager from StatefullWidget to the new BaseStateWidget to get state handling in all widgets. - fixed missing states on clone of RadioButton - fixed CursorExample Modified Paths: -------------- optional/org/fenggui/GameMenuButton.java src/org/fenggui/RadioButton.java src/org/fenggui/StatefullWidget.java src/org/fenggui/Widget.java test/org/fenggui/example/CursorExample.java Added Paths: ----------- src/org/fenggui/BaseStateWidget.java Modified: optional/org/fenggui/GameMenuButton.java =================================================================== --- optional/org/fenggui/GameMenuButton.java 2009-11-09 20:28:00 UTC (rev 659) +++ optional/org/fenggui/GameMenuButton.java 2009-11-14 21:33:27 UTC (rev 660) @@ -106,7 +106,7 @@ size.setSize(defaultState.getWidth(), defaultState.getHeight()); - getAppearance().add(new PixmapBackground(defaultState, true)); + getAppearance().add(STATE_DEFAULT.toString(), new PixmapBackground(defaultState, true)); getAppearance().add(STATE_HOVERED.toString(), new PixmapBackground(hoverState, true)); getAppearance().add(STATE_FOCUSED.toString(), new PixmapBackground(focusState, true)); getAppearance().add(STATE_PRESSED.toString(), new PixmapBackground(pressedState, true)); Added: src/org/fenggui/BaseStateWidget.java =================================================================== --- src/org/fenggui/BaseStateWidget.java (rev 0) +++ src/org/fenggui/BaseStateWidget.java 2009-11-14 21:33:27 UTC (rev 660) @@ -0,0 +1,58 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Nov 14, 2009 + * $Id$ + */ +package org.fenggui; + +import org.fenggui.util.StateManager; + +/** + * + * @author Marc Menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public abstract class BaseStateWidget extends BaseEventWidget +{ + private StateManager stateManager; + + /** + * + */ + public BaseStateWidget() + { + stateManager = new StateManager(); + } + + protected StateManager getStateManager() + { + return stateManager; + } + + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#clone() + */ + @Override + public BaseStateWidget clone() + { + BaseStateWidget result = (BaseStateWidget) super.clone(); + result.stateManager = new StateManager(); + return result; + } + + +} Modified: src/org/fenggui/RadioButton.java =================================================================== --- src/org/fenggui/RadioButton.java 2009-11-09 20:28:00 UTC (rev 659) +++ src/org/fenggui/RadioButton.java 2009-11-14 21:33:27 UTC (rev 660) @@ -191,7 +191,7 @@ RadioButton<E> result = (RadioButton<E>) super.clone(); result.value = null; result.radioButtonGroup = null; - + result.getStateManager().addStates(STATE_SELECTED, STATE_DESELECTED); return result; } Modified: src/org/fenggui/StatefullWidget.java =================================================================== --- src/org/fenggui/StatefullWidget.java 2009-11-09 20:28:00 UTC (rev 659) +++ src/org/fenggui/StatefullWidget.java 2009-11-14 21:33:27 UTC (rev 660) @@ -29,7 +29,6 @@ import org.fenggui.event.mouse.MouseEnteredEvent; import org.fenggui.event.mouse.MouseExitedEvent; import org.fenggui.util.StateIdentifier; -import org.fenggui.util.StateManager; /** * Implementation of a statefull Widget. All widgets where the user is able to interact @@ -54,7 +53,6 @@ private T appearance = null; private CursorType defaultHoverCursorType = CursorType.HAND; - private StateManager stateManager; /** * creates a new StatefullWidget. @@ -62,18 +60,13 @@ public StatefullWidget() { super(); - stateManager = new StateManager(); - stateManager.addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, + + getStateManager().addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, STATE_DISABLED, STATE_ERROR, STATE_NOERROR); getStateManager().activate(STATE_DEFAULT); - stateManager.addStateChangedListener(new StateChangedListener(this)); + getStateManager().addStateChangedListener(new StateChangedListener(this)); } - protected StateManager getStateManager() - { - return stateManager; - } - /* (non-Javadoc) * @see org.fenggui.BaseEventWidget#onMouseEntered(org.fenggui.event.mouse.MouseEnteredEvent) */ @@ -177,11 +170,10 @@ { StatefullWidget<T> result = (StatefullWidget<T>) super.clone(); result.appearance = (T) appearance.clone(result); - result.stateManager = new StateManager(); - result.stateManager.addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, - STATE_DISABLED, STATE_ERROR, STATE_NOERROR); - result.stateManager.activate(STATE_DEFAULT); - result.stateManager.addStateChangedListener(new StateChangedListener(result)); + result.getStateManager().addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, + STATE_ENABLED, STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + result.getStateManager().activate(STATE_DEFAULT); + result.getStateManager().addStateChangedListener(new StateChangedListener(result)); return result; } @@ -205,7 +197,7 @@ // this.widget.getAppearance().disableStates(this.widget.stateManager.getInactiveStates()); this.widget.getAppearance().disableAll(); - this.widget.getAppearance().enableStates(this.widget.stateManager.getActiveStates()); + this.widget.getAppearance().enableStates(this.widget.getStateManager().getActiveStates()); } Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-11-09 20:28:00 UTC (rev 659) +++ src/org/fenggui/Widget.java 2009-11-14 21:33:27 UTC (rev 660) @@ -52,7 +52,7 @@ * @see org.fenggui.background.Background * @see org.fenggui.border.Border */ -public class Widget extends BaseEventWidget implements IWidget +public class Widget extends BaseStateWidget implements IWidget { private Dimension size; private Dimension minSize; Modified: test/org/fenggui/example/CursorExample.java =================================================================== --- test/org/fenggui/example/CursorExample.java 2009-11-09 20:28:00 UTC (rev 659) +++ test/org/fenggui/example/CursorExample.java 2009-11-14 21:33:27 UTC (rev 660) @@ -22,15 +22,15 @@ import org.fenggui.binding.render.Binding; import org.fenggui.binding.render.Cursor; import org.fenggui.binding.render.CursorFactory; +import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.ImageFont; -import org.fenggui.binding.render.Graphics; import org.fenggui.decorator.background.Background; import org.fenggui.decorator.background.PlainBackground; import org.fenggui.decorator.border.Border; import org.fenggui.decorator.border.PlainBorder; +import org.fenggui.event.mouse.MouseClickedEvent; import org.fenggui.event.mouse.MouseEnteredEvent; import org.fenggui.event.mouse.MouseExitedEvent; -import org.fenggui.event.mouse.MousePressedEvent; import org.fenggui.util.Color; import org.fenggui.util.Point; @@ -100,17 +100,42 @@ background = new PlainBackground(Color.LIGHT_GRAY); } - protected void onEventFired(String eventType, MouseEnteredEvent mouseEnteredEvent) + + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#onMouseEntered(org.fenggui.event.mouse.MouseEnteredEvent) + */ + @Override + protected void onMouseEntered(MouseEnteredEvent event) { cursor.show(); + super.onMouseEntered(event); } - protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) + + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#onMouseExited(org.fenggui.event.mouse.MouseExitedEvent) + */ + @Override + protected void onMouseExited(MouseExitedEvent event) { Binding.getInstance().getCursorFactory().getDefaultCursor().show(); + super.onMouseExited(event); } + + + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#onMouseClicked(org.fenggui.event.mouse.MouseClickedEvent) + */ @Override + protected void onMouseClicked(MouseClickedEvent event) + { + pressed = new Point(event.getDisplayX() - this.getX(), event.getDisplayY() - this.getY()); + super.onMouseClicked(event); + } + + + @Override public void paint(Graphics g) { background.paint(g, 0, 0, getWidth(), getHeight()); @@ -125,11 +150,6 @@ g.drawLine(pressed.getX() + 2, pressed.getY() - 2, pressed.getX() - 2, pressed.getY() + 2); } - protected void onEventFired(String eventType, MousePressedEvent mp) - { - pressed = new Point(mp.getDisplayX() - this.getX(), mp.getDisplayY() - this.getY()); - } - } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-11-09 20:28:07
|
Revision: 659 http://fenggui.svn.sourceforge.net/fenggui/?rev=659&view=rev Author: marcmenghin Date: 2009-11-09 20:28:00 +0000 (Mon, 09 Nov 2009) Log Message: ----------- - fixed some state problems - made all Decorators cloneable Modified Paths: -------------- data/themes/QtCurve/QtCurve.xml src/org/fenggui/Button.java src/org/fenggui/CheckBox.java src/org/fenggui/Display.java src/org/fenggui/RadioButton.java src/org/fenggui/StatefullWidget.java src/org/fenggui/appearance/DecoratorAppearance.java src/org/fenggui/appearance/GenericAppearance.java src/org/fenggui/decorator/Decorator.java src/org/fenggui/decorator/IDecorator.java src/org/fenggui/decorator/background/FunnyBackground.java src/org/fenggui/decorator/background/GradientBackground.java src/org/fenggui/decorator/background/PixmapBackground.java src/org/fenggui/decorator/background/PlainBackground.java src/org/fenggui/decorator/border/BevelBorder.java src/org/fenggui/decorator/border/Border.java src/org/fenggui/decorator/border/CompositeBorder.java src/org/fenggui/decorator/border/PixmapBorder.java src/org/fenggui/decorator/border/PixmapBorder16.java src/org/fenggui/decorator/border/PixmapBorder16FixedCenters.java src/org/fenggui/decorator/border/PlainBorder.java src/org/fenggui/decorator/border/RoundedBorder.java src/org/fenggui/decorator/border/TitledBorder.java src/org/fenggui/decorator/switches/Switch.java src/org/fenggui/theme/xml/XMLInputStream.java src/org/fenggui/tooltip/LabelTooltipDecorator.java Modified: data/themes/QtCurve/QtCurve.xml =================================================================== --- data/themes/QtCurve/QtCurve.xml 2009-10-13 17:17:58 UTC (rev 658) +++ data/themes/QtCurve/QtCurve.xml 2009-11-09 20:28:00 UTC (rev 659) @@ -283,12 +283,12 @@ <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> - </BackgroundDecorators> + </BackgroundDecorators> <!-- define foregrounds --> <ForegroundDecorators> <PixmapBorder ref="buttonBorder" enabled="true" /> - </ForegroundDecorators> + </ForegroundDecorators> </Appearance> </Button> @@ -435,7 +435,7 @@ <PlainBackground label="default" enabled="true"> <Color rgba="233, 217, 198, 255"/> </PlainBackground> - <PlainBackground label="default" enabled="true"> + <PlainBackground enabled="true"> <Color rgba="255, 255, 255, 100"/> </PlainBackground> </BackgroundDecorators> @@ -548,10 +548,10 @@ </PlainBackground> </BackgroundDecorators> <Switches> - <PixmapSwitch x="39" y="0" width="13" height="13" label="radiobutton#deselected"> + <PixmapSwitch x="39" y="0" width="13" height="13" label="RadioButton#Deselected"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="26" y="0" width="13" height="13" label="radiobutton#selected"> + <PixmapSwitch x="26" y="0" width="13" height="13" label="RadioButton#Selected"> <Texture ref="QtCurve"/> </PixmapSwitch> </Switches> @@ -581,7 +581,7 @@ </Style> </TextStyle> <BackgroundDecorators clear="true"> - <GradientBackground label="default" enabled="true"> + <GradientBackground enabled="true"> <TopLeftColor ref="SCB default light"/> <TopRightColor ref="SCB default dark"/> <BottomLeftColor ref="SCB default light"/> @@ -621,7 +621,7 @@ </Style> </TextStyle> <BackgroundDecorators clear="true"> - <GradientBackground label="default" enabled="true"> + <GradientBackground enabled="true"> <TopLeftColor ref="SCB default light"/> <TopRightColor ref="SCB default dark"/> <BottomLeftColor ref="SCB default light"/> @@ -665,7 +665,7 @@ </Style> </TextStyle> <switches> - <PixmapSwitch x="33" y="68" width="15" height="15" label="default"> + <PixmapSwitch x="33" y="68" width="15" height="15"> <Texture ref="QtCurve"/> </PixmapSwitch> <PixmapSwitch x="18" y="128" width="15" height="15" label="Hover#Hovered"> @@ -693,7 +693,7 @@ </Style> </TextStyle> <switches> - <PixmapSwitch x="33" y="53" width="15" height="15" label="default"> + <PixmapSwitch x="33" y="53" width="15" height="15"> <Texture ref="QtCurve"/> </PixmapSwitch> <PixmapSwitch x="18" y="113" width="15" height="15" label="Hover#Hovered"> @@ -721,7 +721,7 @@ </Style> </TextStyle> <switches clear="true"> - <PixmapSwitch x="18" y="23" width="15" height="15" label="default"> + <PixmapSwitch x="18" y="23" width="15" height="15"> <Texture ref="QtCurve"/> </PixmapSwitch> <PixmapSwitch x="18" y="83" width="15" height="15" label="Hover#Hovered"> @@ -749,7 +749,7 @@ </Style> </TextStyle> <switches clear="true"> - <PixmapSwitch x="33" y="23" width="15" height="15" label="default"> + <PixmapSwitch x="33" y="23" width="15" height="15"> <Texture ref="QtCurve"/> </PixmapSwitch> <PixmapSwitch x="18" y="98" width="15" height="15" label="Hover#Hovered"> @@ -933,13 +933,13 @@ </Style> </TextStyle> <BackgroundDecorators> - <GradientBackground label="default" enabled="true"> + <GradientBackground enabled="true"> <TopLeftColor rgba="236, 233, 216, 220"/> <TopRightColor rgba="236, 233, 216, 220"/> <BottomLeftColor rgba="233, 217, 198, 220"/> <BottomRightColor rgba="233, 217, 198, 220"/> </GradientBackground> - <PlainBorder enabled="true" label="default" all="1" span="border"> + <PlainBorder enabled="true" all="1" span="border"> <Color rgba="233, 217, 198, 255"/> </PlainBorder> </BackgroundDecorators> @@ -1013,7 +1013,7 @@ <PlainBackground> <Color ref="windowBackgroundColor"/> </PlainBackground> - <PlainBorder enabled="true" label="default" all="1" span="border"> + <PlainBorder enabled="true" all="1" span="border"> <Color rgba="233, 217, 198, 255"/> </PlainBorder> </BackgroundDecorators> Modified: src/org/fenggui/Button.java =================================================================== --- src/org/fenggui/Button.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/Button.java 2009-11-09 20:28:00 UTC (rev 659) @@ -96,6 +96,7 @@ { if (event.getKey() == ' ' || event.getKeyClass() == Key.ENTER) { + getStateManager().activate(STATE_PRESSED); pressedKey = true; event.setUsed(); } @@ -116,6 +117,7 @@ if (pressedKey) { pressedKey = false; + getStateManager().activate(STATE_NOTPRESSED); fireButtonPressedEvent(new ButtonPressedEvent(this, event.getKeyTracker().getModifiers())); event.setUsed(); } @@ -137,6 +139,7 @@ { event.setUsed(); pressed = true; + getStateManager().activate(STATE_PRESSED); } } super.onMousePressed(event); @@ -154,6 +157,7 @@ { event.setUsed(); pressed = false; + getStateManager().activate(STATE_NOTPRESSED); fireButtonPressedEvent(new ButtonPressedEvent(this, event.getKeyTracker().getModifiers())); } } Modified: src/org/fenggui/CheckBox.java =================================================================== --- src/org/fenggui/CheckBox.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/CheckBox.java 2009-11-09 20:28:00 UTC (rev 659) @@ -45,8 +45,8 @@ private E value = null; private boolean selected = false; - public static final StateIdentifier STATE_SELECTED = new StateIdentifier("checkbox", "selected"); - public static final StateIdentifier STATE_DESELECTED = new StateIdentifier("checkbox", "deselected"); + public static final StateIdentifier STATE_SELECTED = new StateIdentifier("Checkbox", "Selected"); + public static final StateIdentifier STATE_DESELECTED = new StateIdentifier("Checkbox", "Deselected"); public static final String EVENT_SELECTIONCHANGED = "FengGUI_Event_SelectionChanged"; Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/Display.java 2009-11-09 20:28:00 UTC (rev 659) @@ -453,14 +453,14 @@ draggingListener = null; } - //fire clicked event if released on same widget as pressed - if (w.equals(pressedWidget)) + if (w != null) { - fireMouseClickEvent(mouseX, mouseY, mouseButton, w); - } + //fire clicked event if released on same widget as pressed + if (w.equals(pressedWidget)) + { + fireMouseClickEvent(mouseX, mouseY, mouseButton, w); + } - if (w != null) - { if (w.equals(this)) return e; Modified: src/org/fenggui/RadioButton.java =================================================================== --- src/org/fenggui/RadioButton.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/RadioButton.java 2009-11-09 20:28:00 UTC (rev 659) @@ -45,8 +45,8 @@ private E value = null; private boolean selected = false; - public static final StateIdentifier STATE_SELECTED = new StateIdentifier("radiobutton", "selected"); - public static final StateIdentifier STATE_DESELECTED = new StateIdentifier("radiobutton", "deselected"); + public static final StateIdentifier STATE_SELECTED = new StateIdentifier("RadioButton", "Selected"); + public static final StateIdentifier STATE_DESELECTED = new StateIdentifier("RadioButton", "Deselected"); public static final String EVENT_SELECTIONCHANGED = "FengGUI_Event_SelectionChanged"; public RadioButton(String text, ToggableGroup<RadioButton<E>> group) Modified: src/org/fenggui/StatefullWidget.java =================================================================== --- src/org/fenggui/StatefullWidget.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/StatefullWidget.java 2009-11-09 20:28:00 UTC (rev 659) @@ -50,6 +50,7 @@ public static final StateIdentifier STATE_DISABLED = new StateIdentifier("Active", "Disabled"); public static final StateIdentifier STATE_ERROR = new StateIdentifier("Error", "Error"); public static final StateIdentifier STATE_NOERROR = new StateIdentifier("Error", "NoError"); + public static final StateIdentifier STATE_DEFAULT = new StateIdentifier("", "Default"); private T appearance = null; private CursorType defaultHoverCursorType = CursorType.HAND; @@ -62,8 +63,9 @@ { super(); stateManager = new StateManager(); - stateManager.addStates(STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, - STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + stateManager.addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, + STATE_ENABLED, STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + getStateManager().activate(STATE_DEFAULT); stateManager.addStateChangedListener(new StateChangedListener(this)); } @@ -79,6 +81,7 @@ protected void onMouseEntered(MouseEnteredEvent event) { Binding.getInstance().getCursorFactory().getCursor(defaultHoverCursorType).show(); + getStateManager().activate(STATE_HOVERED); super.onMouseEntered(event); } @@ -88,12 +91,11 @@ @Override protected void onMouseExited(MouseExitedEvent event) { + getStateManager().activate(STATE_NONHOVERED); Binding.getInstance().getCursorFactory().getCursor(CursorType.DEFAULT).show(); super.onMouseExited(event); } - - /* (non-Javadoc) * @see org.fenggui.ObservableWidget#onFocusChanged(org.fenggui.event.FocusEvent) */ @@ -104,7 +106,7 @@ getStateManager().activate(STATE_FOCUSED); else getStateManager().activate(STATE_UNFOCUSED); - + super.onFocusChanged(event); } @@ -176,9 +178,11 @@ StatefullWidget<T> result = (StatefullWidget<T>) super.clone(); result.appearance = (T) appearance.clone(result); result.stateManager = new StateManager(); - result.stateManager.addStates(STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, + result.stateManager.addStates(STATE_DEFAULT, STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + result.stateManager.activate(STATE_DEFAULT); result.stateManager.addStateChangedListener(new StateChangedListener(result)); + return result; } @@ -196,8 +200,13 @@ */ public void stateChanged(StateChangedEvent e) { - this.widget.getAppearance().enableAll(); - this.widget.getAppearance().disableStates(this.widget.stateManager.getInactiveStates()); + + // this.widget.getAppearance().enableAll(); + // this.widget.getAppearance().disableStates(this.widget.stateManager.getInactiveStates()); + + this.widget.getAppearance().disableAll(); + this.widget.getAppearance().enableStates(this.widget.stateManager.getActiveStates()); + } } Modified: src/org/fenggui/appearance/DecoratorAppearance.java =================================================================== --- src/org/fenggui/appearance/DecoratorAppearance.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/appearance/DecoratorAppearance.java 2009-11-09 20:28:00 UTC (rev 659) @@ -67,14 +67,14 @@ for (IDecorator decorator : appearance.backgroundDecorators) { - IDecorator copy = decorator.copy(); + IDecorator copy = decorator.clone(); if (copy != null) this.backgroundDecorators.add(copy); } for (IDecorator decorator : appearance.foregroundDecorators) { - IDecorator copy = decorator.copy(); + IDecorator copy = decorator.clone(); if (copy != null) this.foregroundDecorators.add(copy); } @@ -233,8 +233,40 @@ { wrapper.setEnabled(true); } + + for (Switch sw : switches) + { + if (sw.isReactingOnEnabled()) + sw.setup(getWidget()); + } } + public void disableAll() + { + for (IDecorator wrapper : backgroundDecorators) + { + wrapper.setEnabled(false); + } + + for (IDecorator wrapper : foregroundDecorators) + { + wrapper.setEnabled(false); + } + + for (Switch sw : switches) + { + if (!sw.isReactingOnEnabled()) + sw.setup(getWidget()); + } + } + + public void enableStates(List<StateIdentifier> states) + { + for (StateIdentifier state : states) + setEnabled(state.toString(), true); + } + + public void disableStates(List<StateIdentifier> states) { for (StateIdentifier state : states) @@ -343,14 +375,14 @@ for (IDecorator decorator : this.backgroundDecorators) { - IDecorator copy = decorator.copy(); + IDecorator copy = decorator.clone(); if (copy != null) result.backgroundDecorators.add(copy); } for (IDecorator decorator : this.foregroundDecorators) { - IDecorator copy = decorator.copy(); + IDecorator copy = decorator.clone(); if (copy != null) result.foregroundDecorators.add(copy); } Modified: src/org/fenggui/appearance/GenericAppearance.java =================================================================== --- src/org/fenggui/appearance/GenericAppearance.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/appearance/GenericAppearance.java 2009-11-09 20:28:00 UTC (rev 659) @@ -278,7 +278,7 @@ { result.decorators = new HashMap<String, IDecorator>(this.decorators.size()); for (Entry<String, IDecorator> align : this.decorators.entrySet()) - result.decorators.put(align.getKey(), align.getValue().copy()); + result.decorators.put(align.getKey(), align.getValue().clone()); } if (this.spacings != null) Modified: src/org/fenggui/decorator/Decorator.java =================================================================== --- src/org/fenggui/decorator/Decorator.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/Decorator.java 2009-11-09 20:28:00 UTC (rev 659) @@ -23,6 +23,7 @@ import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOutputStream; +import org.fenggui.util.Log; import org.fenggui.util.Span; /** @@ -32,13 +33,17 @@ */ public abstract class Decorator implements IDecorator { - private String label = "default"; - private boolean enabled = true; - private Span span = Span.BORDER; + private final String DEFAULT_LABEL = "#Default"; + private String label; + private boolean enabled; + private Span span; + public Decorator() { - + label = DEFAULT_LABEL; + enabled = true; + span = Span.BORDER; } public Decorator(String label, Span span, boolean enabled) @@ -49,14 +54,6 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.IDecorator#copy() - */ - public IDecorator copy() - { - return null; - } - - /* (non-Javadoc) * @see org.fenggui.decorator.IDecorator#getLabel() */ public String getLabel() @@ -104,7 +101,7 @@ public void process(InputOutputStream stream) throws IOException, IXMLStreamableException { span = (Span) stream.processEnum("span", span, span, Span.class, Span.STORAGE_FORMAT); - label = stream.processAttribute("label", label, "default"); + label = stream.processAttribute("label", label, DEFAULT_LABEL); enabled = stream.processAttribute("enabled", enabled, true); } @@ -118,10 +115,21 @@ this.label = label; } - protected void copy(Decorator result) + /* (non-Javadoc) + * @see java.lang.Object#clone() + */ + public Decorator clone() { - result.setEnabled(this.isEnabled()); - result.setLabel(this.getLabel()); - result.setSpan(this.getSpan()); + try + { + Decorator result = (Decorator) super.clone(); + + return result; + } + catch (CloneNotSupportedException e) + { + Log.error("Error with cloning.", e); + } + return null; } } Modified: src/org/fenggui/decorator/IDecorator.java =================================================================== --- src/org/fenggui/decorator/IDecorator.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/IDecorator.java 2009-11-09 20:28:00 UTC (rev 659) @@ -46,6 +46,6 @@ public void paint(Graphics g, int localX, int localY, int width, int height); public void setEnabled(boolean enable); - - public IDecorator copy(); + + public IDecorator clone(); } Modified: src/org/fenggui/decorator/background/FunnyBackground.java =================================================================== --- src/org/fenggui/decorator/background/FunnyBackground.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/background/FunnyBackground.java 2009-11-09 20:28:00 UTC (rev 659) @@ -22,7 +22,6 @@ import java.io.IOException; import org.fenggui.binding.render.Graphics; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.DefaultElementName; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; @@ -36,7 +35,7 @@ * @author Johannes Schaback ($Author$) */ @DefaultElementName("FunnyBackground") -public class FunnyBackground extends Background +public class FunnyBackground extends Background implements Cloneable { public FunnyBackground() @@ -67,12 +66,13 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.background.Background#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public FunnyBackground clone() { - return new FunnyBackground(); + return (FunnyBackground) super.clone(); } + } Modified: src/org/fenggui/decorator/background/GradientBackground.java =================================================================== --- src/org/fenggui/decorator/background/GradientBackground.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/background/GradientBackground.java 2009-11-09 20:28:00 UTC (rev 659) @@ -22,7 +22,6 @@ import java.io.IOException; import org.fenggui.binding.render.Graphics; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; import org.fenggui.theme.xml.InputOutputStream; @@ -38,7 +37,7 @@ * Color array. Rather, calc Color values from angle and position. * Urgent. The whole index thing is just a adhoc solution.... # */ -public class GradientBackground extends Background +public class GradientBackground extends Background implements Cloneable { /** * Color of the lower right corner. @@ -156,14 +155,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.background.Background#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public GradientBackground clone() { - GradientBackground result = new GradientBackground(this.lowerLeft, this.lowerRight, this.upperRight, this.upperLeft); - super.copy(result); + GradientBackground result = (GradientBackground) super.clone(); + return result; } - + } Modified: src/org/fenggui/decorator/background/PixmapBackground.java =================================================================== --- src/org/fenggui/decorator/background/PixmapBackground.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/background/PixmapBackground.java 2009-11-09 20:28:00 UTC (rev 659) @@ -22,7 +22,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.Pixmap; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; import org.fenggui.theme.xml.InputOutputStream; @@ -55,7 +54,7 @@ * @version $Revision$ * */ -public class PixmapBackground extends Background +public class PixmapBackground extends Background implements Cloneable { private static final Color DEFAULT_BLENDING_COLOR = Color.WHITE; private Color blendingColor = DEFAULT_BLENDING_COLOR; @@ -297,19 +296,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.background.Background#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public PixmapBackground clone() { - PixmapBackground result = new PixmapBackground(center, topLeft, top, topRight, right, bottomRight, bottom, - bottomLeft, left, scaled); - result.setBlendingColor(new Color(this.getBlendingColor())); - result.useAlternateBlending = useAlternateBlending; - super.copy(result); - return result; + return (PixmapBackground) super.clone(); } - + public boolean isUseAlternateBlending() { return useAlternateBlending; Modified: src/org/fenggui/decorator/background/PlainBackground.java =================================================================== --- src/org/fenggui/decorator/background/PlainBackground.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/background/PlainBackground.java 2009-11-09 20:28:00 UTC (rev 659) @@ -22,7 +22,6 @@ import java.io.IOException; import org.fenggui.binding.render.Graphics; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.DefaultElementName; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; @@ -36,7 +35,7 @@ * @version $Revision$ */ @DefaultElementName("PlainBackground") -public class PlainBackground extends Background +public class PlainBackground extends Background implements Cloneable { private Color color = Color.GRAY; @@ -83,14 +82,12 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.background.Background#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public PlainBackground clone() { - PlainBackground result = new PlainBackground(this.color); - super.copy(result); - return result; + return (PlainBackground) super.clone(); } - + } Modified: src/org/fenggui/decorator/border/BevelBorder.java =================================================================== --- src/org/fenggui/decorator/border/BevelBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/BevelBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -23,7 +23,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.IOpenGL; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.DefaultElementName; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOutputStream; @@ -36,7 +35,7 @@ * @version $Revision$ */ @DefaultElementName("BevelBorder") -public class BevelBorder extends Border +public class BevelBorder extends Border implements Cloneable { private Color elevated = Color.LIGHT_GRAY; private Color lowered = Color.DARK_GRAY; @@ -143,14 +142,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.border.Border#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public BevelBorder clone() { - BevelBorder result = new BevelBorder(elevated, lowered); - super.copy(result); + BevelBorder result = (BevelBorder) super.clone(); + return result; } - + } Modified: src/org/fenggui/decorator/border/Border.java =================================================================== --- src/org/fenggui/decorator/border/Border.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/Border.java 2009-11-09 20:28:00 UTC (rev 659) @@ -37,17 +37,10 @@ public abstract class Border extends Spacing implements IDecorator { - private String label = "default"; + private String label = "#Default"; private boolean enabled = true; private Span span = Span.BORDER; - /** - * Every Background class must register itself to the type register - * if it should be possible to be loaded using InputOutputStream - */ - //public static final TypeRegister<Border> TYPE_REGISTER = - // new TypeRegister<Border>(); - public Border() { @@ -93,7 +86,7 @@ { super.process(stream); - label = stream.processAttribute("label", label, "default"); + label = stream.processAttribute("label", label, "#Default"); enabled = stream.processAttribute("enabled", enabled, true); span = (Span) stream.processEnum("span", span, Span.BORDER, Span.class, Span.STORAGE_FORMAT); } @@ -105,18 +98,9 @@ return GENERATE_NAME; } - /* (non-Javadoc) - * @see org.fenggui.decorator.IDecorator#copy() - */ - public IDecorator copy() + public Border clone() { - return null; + Border result = (Border) super.clone(); + return result; } - - protected void copy(Border result) - { - result.setEnabled(this.isEnabled()); - result.setLabel(this.getLabel()); - result.setSpan(this.getSpan()); - } } Modified: src/org/fenggui/decorator/border/CompositeBorder.java =================================================================== --- src/org/fenggui/decorator/border/CompositeBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/CompositeBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -22,7 +22,6 @@ import java.util.List; import org.fenggui.binding.render.Graphics; -import org.fenggui.decorator.IDecorator; /** * @@ -32,7 +31,7 @@ * @author Esa Tanskanen and Johannes * */ -public class CompositeBorder extends Border +public class CompositeBorder extends Border implements Cloneable { private List<Border> borders = null; @@ -106,14 +105,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.border.Border#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public CompositeBorder clone() { - CompositeBorder result = new CompositeBorder(this.borders); - super.copy(result); + CompositeBorder result = (CompositeBorder) super.clone(); + return result; } - + } Modified: src/org/fenggui/decorator/border/PixmapBorder.java =================================================================== --- src/org/fenggui/decorator/border/PixmapBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/PixmapBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -24,7 +24,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.Pixmap; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; import org.fenggui.theme.xml.InputOutputStream; @@ -45,7 +44,7 @@ * 11:50:01 +0100 (Do, 08 Nov 2007) $ * @version $Revision$ */ -public class PixmapBorder extends Border +public class PixmapBorder extends Border implements Cloneable { public static final int TOP_LEFT = 0; public static final int LEFT = 1; @@ -200,19 +199,17 @@ super.setSpacing(tex[TOP].getHeight(), tex[LEFT].getWidth(), tex[RIGHT].getWidth(), tex[BOTTOM].getHeight()); } - /* - * (non-Javadoc) - * - * @see org.fenggui.decorator.border.Border#copy() + /* (non-Javadoc) + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public PixmapBorder clone() { - PixmapBorder result = new PixmapBorder(tex); - super.copy(result); + PixmapBorder result = (PixmapBorder) super.clone(); + return result; } - + public boolean isUseAlternateBlending() { return useAlternateBlending; Modified: src/org/fenggui/decorator/border/PixmapBorder16.java =================================================================== --- src/org/fenggui/decorator/border/PixmapBorder16.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/PixmapBorder16.java 2009-11-09 20:28:00 UTC (rev 659) @@ -24,7 +24,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.Pixmap; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; import org.fenggui.theme.xml.InputOutputStream; @@ -60,7 +59,7 @@ * 11:50:01 +0100 (Do, 08 Nov 2007) $ * @version $Revision$ */ -public class PixmapBorder16 extends Border +public class PixmapBorder16 extends Border implements Cloneable { public static final int TOP_LEFT = 0; public static final int UPPER_TOP_LEFT_JUNC = 1; @@ -224,25 +223,18 @@ setSpacing(tex[2].getHeight(), tex[7].getWidth(), tex[8].getWidth(), tex[13].getHeight()); } - /* - * (non-Javadoc) - * - * @see org.fenggui.decorator.border.Border#copy() + + /* (non-Javadoc) + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public PixmapBorder16 clone() { - PixmapBorder16 result = new PixmapBorder16(tex); - super.copy(result); + PixmapBorder16 result = (PixmapBorder16) super.clone(); + return result; } - - protected void copy(PixmapBorder16 result) - { - super.copy(result); - result.setModulationColor(modulationColor); - } - + protected Pixmap[] getPixmaps() { return tex; Modified: src/org/fenggui/decorator/border/PixmapBorder16FixedCenters.java =================================================================== --- src/org/fenggui/decorator/border/PixmapBorder16FixedCenters.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/PixmapBorder16FixedCenters.java 2009-11-09 20:28:00 UTC (rev 659) @@ -24,7 +24,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.Pixmap; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; @@ -55,7 +54,7 @@ * +0100 (Do, 08 Nov 2007) $ * @version $Revision: 390 $ */ -public class PixmapBorder16FixedCenters extends PixmapBorder16 +public class PixmapBorder16FixedCenters extends PixmapBorder16 implements Cloneable { /** * Creates a new PixmapBorder. @@ -140,16 +139,14 @@ g.drawImage(tex[BOTTOM_RIGHT], localX + width - getRight(), localY); } - /* - * (non-Javadoc) - * - * @see org.fenggui.decorator.border.Border#copy() + + /* (non-Javadoc) + * @see org.fenggui.decorator.border.PixmapBorder16#clone() */ @Override - public IDecorator copy() + public PixmapBorder16FixedCenters clone() { - PixmapBorder16FixedCenters result = new PixmapBorder16FixedCenters(this.getPixmaps()); - super.copy(result); - return result; + return (PixmapBorder16FixedCenters) super.clone(); } + } Modified: src/org/fenggui/decorator/border/PlainBorder.java =================================================================== --- src/org/fenggui/decorator/border/PlainBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/PlainBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -23,7 +23,6 @@ import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.IOpenGL; -import org.fenggui.decorator.IDecorator; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; import org.fenggui.theme.xml.InputOutputStream; @@ -39,7 +38,7 @@ * @version $Revision$ * */ -public class PlainBorder extends Border +public class PlainBorder extends Border implements Cloneable { private Color color = Color.BLUE; @@ -213,14 +212,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.border.Border#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public PlainBorder clone() { - PlainBorder result = new PlainBorder(this, color); - super.copy(result); + PlainBorder result = (PlainBorder) super.clone(); + return result; } - + } Modified: src/org/fenggui/decorator/border/RoundedBorder.java =================================================================== --- src/org/fenggui/decorator/border/RoundedBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/RoundedBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -19,7 +19,6 @@ package org.fenggui.decorator.border; import org.fenggui.binding.render.Graphics; -import org.fenggui.decorator.IDecorator; import org.fenggui.util.Color; /** @@ -28,7 +27,7 @@ * @author Graham Briggs, last edited by $Author$, $Date$ * @version $Revision$ */ -public class RoundedBorder extends Border +public class RoundedBorder extends Border implements Cloneable { /** * The width of the border to be drawn. @@ -92,14 +91,14 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.border.Border#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public IDecorator copy() + public RoundedBorder clone() { - RoundedBorder result = new RoundedBorder(color, weight, radius); - super.copy(result); + RoundedBorder result = (RoundedBorder) super.clone(); + return result; } - + } Modified: src/org/fenggui/decorator/border/TitledBorder.java =================================================================== --- src/org/fenggui/decorator/border/TitledBorder.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/border/TitledBorder.java 2009-11-09 20:28:00 UTC (rev 659) @@ -28,7 +28,7 @@ * @author Johannes Schaback, last edited by $Author$, $Date$ * @version $Revision$ */ -public class TitledBorder extends Border +public class TitledBorder extends Border implements Cloneable { private String title = ""; @@ -131,15 +131,13 @@ } /* (non-Javadoc) - * @see org.fenggui.decorator.border.Border#copy() + * @see org.fenggui.decorator.Decorator#clone() */ @Override - public TitledBorder copy() + public TitledBorder clone() { - TitledBorder border = new TitledBorder(this.font, "", this.textColor); - border.color = this.color; - super.copy(border); - return border; - } + TitledBorder result = (TitledBorder) super.clone(); + return result; + } } Modified: src/org/fenggui/decorator/switches/Switch.java =================================================================== --- src/org/fenggui/decorator/switches/Switch.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/decorator/switches/Switch.java 2009-11-09 20:28:00 UTC (rev 659) @@ -33,7 +33,7 @@ */ public abstract class Switch implements IXMLStreamable { - private String label = "default"; + private String label = "#Default"; private boolean reactingOnEnabled = true; public Switch(String label) Modified: src/org/fenggui/theme/xml/XMLInputStream.java =================================================================== --- src/org/fenggui/theme/xml/XMLInputStream.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/theme/xml/XMLInputStream.java 2009-11-09 20:28:00 UTC (rev 659) @@ -445,13 +445,13 @@ if (e == null && getContextHandler().getRootDocument() != null) { //use global document if not found on local level - Log.error("Warning: <" + name + "> could not be found in local context. Searching global context now."); + Log.warn("<" + name + "> could not be found in local context. Searching global context now."); Element el = getContextHandler().getRootDocument().getChild(name); if (el == null) { - Log.error("Warning: <" + name + "> could not be found in theme definition file"); + Log.error("<" + name + "> could not be found in theme definition file"); return; } Modified: src/org/fenggui/tooltip/LabelTooltipDecorator.java =================================================================== --- src/org/fenggui/tooltip/LabelTooltipDecorator.java 2009-10-13 17:17:58 UTC (rev 658) +++ src/org/fenggui/tooltip/LabelTooltipDecorator.java 2009-11-09 20:28:00 UTC (rev 659) @@ -32,7 +32,7 @@ * @author marcmenghin, last edited by $Author$, $Date$ * @version $Revision$ */ -public class LabelTooltipDecorator extends Decorator implements ITooltipData +public class LabelTooltipDecorator extends Decorator implements ITooltipData, Cloneable { private String tooltip = ""; @@ -66,11 +66,12 @@ this.tooltip = tooltip; } - public LabelTooltipDecorator copy() + /* (non-Javadoc) + * @see org.fenggui.decorator.Decorator#clone() + */ + @Override + public LabelTooltipDecorator clone() { - LabelTooltipDecorator result = new LabelTooltipDecorator(); - super.copy(result); - result.setTooltip(this.getTooltip()); - return result; + return (LabelTooltipDecorator) super.clone(); } } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-10-13 17:18:15
|
Revision: 658 http://fenggui.svn.sourceforge.net/fenggui/?rev=658&view=rev Author: marcmenghin Date: 2009-10-13 17:17:58 +0000 (Tue, 13 Oct 2009) Log Message: ----------- - fix: a NPE on mousePressedEvent Modified Paths: -------------- src/org/fenggui/Display.java Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-10-12 21:17:17 UTC (rev 657) +++ src/org/fenggui/Display.java 2009-10-13 17:17:58 UTC (rev 658) @@ -372,7 +372,7 @@ toDeletePopupWidget = popupWidget; } - if (!this.equals(w)) + if (!this.equals(w) && w != null) { // Set the new focused widget if (w.isTraversable() && !(w instanceof Container) && w instanceof ObservableWidget) This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-10-12 21:17:29
|
Revision: 657 http://fenggui.svn.sourceforge.net/fenggui/?rev=657&view=rev Author: marcmenghin Date: 2009-10-12 21:17:17 +0000 (Mon, 12 Oct 2009) Log Message: ----------- - improved event system - improved OpenGL context check (thx taoy) - some minor fixes Modified Paths: -------------- data/themes/QtCurve/QtCurve.xml optional/org/fenggui/GameMenuButton.java optional/org/fenggui/TabContainer.java optional/org/fenggui/TabItemLabel.java optional/org/fenggui/composite/ConnectionWindow.java optional/org/fenggui/composite/GUIInspector.java optional/org/fenggui/composite/MessageWindow.java optional/org/fenggui/composite/filedialog/FileChooserDialog.java optional/org/fenggui/composite/table/Table.java optional/org/fenggui/composite/tree/Tree.java src/org/fenggui/Button.java src/org/fenggui/CheckBox.java src/org/fenggui/ComboBox.java src/org/fenggui/Container.java src/org/fenggui/Display.java src/org/fenggui/IBasicContainer.java src/org/fenggui/IWidget.java src/org/fenggui/Label.java src/org/fenggui/List.java src/org/fenggui/ObservableLabelWidget.java src/org/fenggui/ObservableWidget.java src/org/fenggui/RadioButton.java src/org/fenggui/ScrollBar.java src/org/fenggui/ScrollContainer.java src/org/fenggui/Slider.java src/org/fenggui/SplitContainer.java src/org/fenggui/StandardWidget.java src/org/fenggui/StatefullWidget.java src/org/fenggui/TextEditor.java src/org/fenggui/ToggableGroup.java src/org/fenggui/Widget.java src/org/fenggui/binding/render/IOpenGL.java src/org/fenggui/binding/render/ImageFont.java src/org/fenggui/binding/render/dummy/DummyOpenGL.java src/org/fenggui/binding/render/jogl/JOGLBinding.java src/org/fenggui/binding/render/jogl/JOGLOpenGL.java src/org/fenggui/binding/render/jogl/JOGLTexture.java src/org/fenggui/binding/render/lwjgl/LWJGLBinding.java src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java src/org/fenggui/binding/render/lwjgl/LWJGLTexture.java src/org/fenggui/composite/Window.java src/org/fenggui/composite/menu/Menu.java src/org/fenggui/composite/menu/MenuBar.java src/org/fenggui/event/IButtonPressedListener.java src/org/fenggui/event/ISelectionChangedListener.java src/org/fenggui/theme/DefaultTheme.java src/org/fenggui/theme/XMLTheme.java src/org/fenggui/util/Log.java src/org/fenggui/util/fonttoolkit/FontCreator.java test/org/fenggui/example/ButtonExample.java test/org/fenggui/example/CheckBoxExample.java test/org/fenggui/example/Everything.java test/org/fenggui/example/GameMenuExample.java test/org/fenggui/example/LabelExample.java test/org/fenggui/example/LayoutExample.java test/org/fenggui/example/RadioButtonExample.java test/org/fenggui/example/TableExample.java test/org/fenggui/example/TableExample2.java test/org/fenggui/example/TextAreaExample.java test/org/fenggui/example/TextViewExample.java Added Paths: ----------- optional/org/fenggui/util/GenericUtil.java src/org/fenggui/BaseEventWidget.java src/org/fenggui/IFocusableWidget.java src/org/fenggui/event/AbstractWrapperGenericListener.java Modified: data/themes/QtCurve/QtCurve.xml =================================================================== --- data/themes/QtCurve/QtCurve.xml 2009-08-11 20:55:24 UTC (rev 656) +++ data/themes/QtCurve/QtCurve.xml 2009-10-12 21:17:17 UTC (rev 657) @@ -344,17 +344,17 @@ <CloseButton width="21" height="21" shrinkable="false" expandable="false" text=""> <Appearance alignment="middle"> <Margin all="2"/> - <Padding all="0"/> + <Padding all="2"/> <Border all="2"/> <!-- define textrenderers --> - <DirectTextRenderer ref="defaultSimpleTextRenderer" key="default" /> - - <!-- define text styles --> - <TextStyle key="default"> - <Style key="default" fontstyle="default"> - <Color ref="textColor" /> - </Style> - </TextStyle> + <DirectTextRenderer ref="defaultSimpleTextRenderer" key="default" /> + + <!-- define text styles --> + <TextStyle key="default"> + <Style key="default" fontstyle="default"> + <Color ref="textColor" /> + </Style> + </TextStyle> <BackgroundDecorators> <PixmapBorder> <TopLeftPixmap x="20" y="13" width="2" height="2"> <!-- top-left corner --> @@ -419,9 +419,6 @@ </Appearance> </TitleBar> - <MinimizeButton/> - <MaximizeButton/> - <Content> <Appearance> <Margin all="3"/> @@ -448,17 +445,17 @@ <Margin left="1" right="1" top="2" bottom="0"/> <Padding right="2" left="2" bottom="2" top="2"/> <Border left="2" right="2" top="2" bottom="0"/> - <!-- define textrenderers --> - <DirectTextRenderer ref="defaultSimpleTextRenderer" key="default" /> - - <!-- define text styles --> - <TextStyle key="default"> - <Style key="default" fontstyle="default"> - <Color ref="textColor" /> - </Style> - </TextStyle> + <!-- define textrenderers --> + <DirectTextRenderer ref="defaultSimpleTextRenderer" key="default" /> + + <!-- define text styles --> + <TextStyle key="default"> + <Style key="default" fontstyle="default"> + <Color ref="textColor" /> + </Style> + </TextStyle> <BackgroundDecorators> - <GradientBackground label="default" enabled="true"> + <GradientBackground enabled="true"> <TopLeftColor rgba="249, 247, 242, 255"/> <TopRightColor rgba="249, 247, 242, 255"/> <BottomLeftColor rgba="233, 217, 198, 255"/> @@ -518,10 +515,10 @@ </PlainBackground> </BackgroundDecorators> <Switches> - <PixmapSwitch x="0" y="0" width="13" height="13" label="selected"> + <PixmapSwitch x="0" y="0" width="13" height="13" label="Checkbox#Selected"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="13" y="0" width="13" height="13" label="deselected"> + <PixmapSwitch x="13" y="0" width="13" height="13" label="Checkbox#Deselected"> <Texture ref="QtCurve"/> </PixmapSwitch> </Switches> @@ -551,10 +548,10 @@ </PlainBackground> </BackgroundDecorators> <Switches> - <PixmapSwitch x="39" y="0" width="13" height="13" label="deselected"> + <PixmapSwitch x="39" y="0" width="13" height="13" label="radiobutton#deselected"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="26" y="0" width="13" height="13" label="selected"> + <PixmapSwitch x="26" y="0" width="13" height="13" label="radiobutton#selected"> <Texture ref="QtCurve"/> </PixmapSwitch> </Switches> Modified: optional/org/fenggui/GameMenuButton.java =================================================================== --- optional/org/fenggui/GameMenuButton.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/GameMenuButton.java 2009-10-12 21:17:17 UTC (rev 657) @@ -111,7 +111,6 @@ getAppearance().add(STATE_FOCUSED.toString(), new PixmapBackground(focusState, true)); getAppearance().add(STATE_PRESSED.toString(), new PixmapBackground(pressedState, true)); getAppearance().add(STATE_DISABLED.toString(), new PixmapBackground(disabledState, true)); - updateState(); updateMinSize(); } Modified: optional/org/fenggui/TabContainer.java =================================================================== --- optional/org/fenggui/TabContainer.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/TabContainer.java 2009-10-12 21:17:17 UTC (rev 657) @@ -236,12 +236,12 @@ } - public IWidget getNextTraversableWidget(IWidget start) + public IFocusableWidget getNextTraversableWidget(IWidget start) { return getParent().getNextTraversableWidget(this); } - public IWidget getPreviousTraversableWidget(IWidget start) + public IFocusableWidget getPreviousTraversableWidget(IWidget start) { return getParent().getPreviousTraversableWidget(this); } @@ -273,13 +273,14 @@ } } + public void onEventFired(String eventType, FocusEvent focusEvent) { super.onEventFired(eventType, focusEvent); if (focusEvent.isFocusGained()) { - getDisplay().setFocusedWidget(tabs.get(activeTab).widget); + getDisplay().setFocusedWidget((IFocusableWidget)tabs.get(activeTab).widget); } } Modified: optional/org/fenggui/TabItemLabel.java =================================================================== --- optional/org/fenggui/TabItemLabel.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/TabItemLabel.java 2009-10-12 21:17:17 UTC (rev 657) @@ -110,7 +110,7 @@ if (keyPressedEvent.getKey() == ' ' || keyPressedEvent.getKeyClass() == Key.ENTER) { tabContainer.selectTab(THIZZ); - getDisplay().setFocusedWidget(tabContainer.getSelectedTabWidget()); + getDisplay().setFocusedWidget((IFocusableWidget)tabContainer.getSelectedTabWidget()); } } Modified: optional/org/fenggui/composite/ConnectionWindow.java =================================================================== --- optional/org/fenggui/composite/ConnectionWindow.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/ConnectionWindow.java 2009-10-12 21:17:17 UTC (rev 657) @@ -152,7 +152,7 @@ cancelButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { close(); } Modified: optional/org/fenggui/composite/GUIInspector.java =================================================================== --- optional/org/fenggui/composite/GUIInspector.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/GUIInspector.java 2009-10-12 21:17:17 UTC (rev 657) @@ -114,7 +114,7 @@ updateButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { update(); } @@ -123,7 +123,7 @@ tree.getToggableWidgetGroup().addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent selectionChangedEvent) + public void selectionChanged(Object sender, SelectionChangedEvent selectionChangedEvent) { if (!selectionChangedEvent.isSelected()) return; Modified: optional/org/fenggui/composite/MessageWindow.java =================================================================== --- optional/org/fenggui/composite/MessageWindow.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/MessageWindow.java 2009-10-12 21:17:17 UTC (rev 657) @@ -67,7 +67,7 @@ OK.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { ((Container) getParent()).removeWidget(thizz); } Modified: optional/org/fenggui/composite/filedialog/FileChooserDialog.java =================================================================== --- optional/org/fenggui/composite/filedialog/FileChooserDialog.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/filedialog/FileChooserDialog.java 2009-10-12 21:17:17 UTC (rev 657) @@ -783,7 +783,7 @@ dropDown.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent selectionChangedEvent) + public void selectionChanged(Object sender, SelectionChangedEvent selectionChangedEvent) { if (dropDownLock.get()) return; @@ -855,7 +855,7 @@ filterList.addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent selectionChangedEvent) + public void selectionChanged(Object sender, SelectionChangedEvent selectionChangedEvent) { if (filterList.getSelectedItem() != null) { @@ -887,7 +887,7 @@ acceptButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { attemptSelectFile(fileName.getText()); e.setUsed(); @@ -902,7 +902,7 @@ cancelButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { e.setUsed(); cancel(); @@ -928,7 +928,7 @@ backButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { back(); } @@ -938,7 +938,7 @@ upButton.addButtonPressedListener(new IButtonPressedListener() { - public void buttonPressed(ButtonPressedEvent e) + public void buttonPressed(Object sender, ButtonPressedEvent e) { File file; if ((file = getCurrentDirectory()) != null) @@ -1004,7 +1004,7 @@ fileList.getToggableWidgetGroup().addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent selectionChangedEvent) + public void selectionChanged(Object sender, SelectionChangedEvent selectionChangedEvent) { Item Item = fileList.getSelectedItem(); Modified: optional/org/fenggui/composite/table/Table.java =================================================================== --- optional/org/fenggui/composite/table/Table.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/table/Table.java 2009-10-12 21:17:17 UTC (rev 657) @@ -390,24 +390,25 @@ } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) + * @see org.fenggui.BaseEventWidget#onMouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - protected void onEventFired(String eventType, MouseClickedEvent event) + @Override + protected void onMouseClicked(MouseClickedEvent event) { if (hoveredRow != null) selectionGroup.setSelected(this, hoveredRow, true); - super.onEventFired(eventType, event); + super.onMouseClicked(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseMoved(int, int) + * @see org.fenggui.BaseEventWidget#onMouseMoved(org.fenggui.event.mouse.MouseMovedEvent) */ - protected void onEventFired(String eventType, MouseMovedEvent mm) + @Override + protected void onMouseMoved(MouseMovedEvent event) { - hoveredRow = this.isOnColumn(mm.getLocalY(this)); - - super.onEventFired(eventType, mm); + hoveredRow = this.isOnColumn(event.getLocalY(this)); + super.onMouseMoved(event); } /* (non-Javadoc) Modified: optional/org/fenggui/composite/tree/Tree.java =================================================================== --- optional/org/fenggui/composite/tree/Tree.java 2009-08-11 20:55:24 UTC (rev 656) +++ optional/org/fenggui/composite/tree/Tree.java 2009-10-12 21:17:17 UTC (rev 657) @@ -18,7 +18,6 @@ */ package org.fenggui.composite.tree; -import org.fenggui.IWidget; import org.fenggui.ModelWidget; import org.fenggui.ToggableGroup; import org.fenggui.appearance.EntryAppearance; @@ -176,56 +175,60 @@ } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseMoved(int, int) + * @see org.fenggui.Widget#onSizeChanged(org.fenggui.event.SizeChangedEvent) */ - protected void onEventFired(String eventType, MouseMovedEvent mm) + @Override + protected void onSizeChanged(SizeChangedEvent event) { if (getRoot() != null) + getRoot().adaptChange(this.getAppearance().getContentWidth(), this.getAppearance().getContentHeight(), + getAppearance()); + + super.onSizeChanged(event); + } + + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#onMouseMoved(org.fenggui.event.mouse.MouseMovedEvent) + */ + @Override + protected void onMouseMoved(MouseMovedEvent event) + { + if (getRoot() != null) { int frombottom = getAppearance().getContentHeight() - getRoot().getPreferredSize().getHeight(); int currentY = frombottom > 0 ? frombottom : 0; - hoveredItem = getRoot().getItemOnPosition(0, currentY, mm.getDisplayX() - this.getDisplayX(), - mm.getDisplayY() - this.getDisplayY(), getAppearance().getContentWidth(), getAppearance()); + hoveredItem = getRoot().getItemOnPosition(0, currentY, event.getDisplayX() - this.getDisplayX(), + event.getDisplayY() - this.getDisplayY(), getAppearance().getContentWidth(), getAppearance()); } else { hoveredItem = null; } - super.onEventFired(eventType, mm); + super.onMouseMoved(event); } /* (non-Javadoc) - * @see org.fenggui.Widget#sizeChanged(org.fenggui.event.SizeChangedEvent) + * @see org.fenggui.BaseEventWidget#onMouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - protected void onEventFired(String eventType, SizeChangedEvent event) + @Override + protected void onMouseClicked(MouseClickedEvent event) { - super.onEventFired(eventType, event); - - if (getRoot() != null && eventType.equals(IWidget.EVENT_SIZECHANGED)) - getRoot().adaptChange(this.getAppearance().getContentWidth(), this.getAppearance().getContentHeight(), - getAppearance()); - } - - /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) - */ - protected void onEventFired(String eventType, MouseClickedEvent event) - { if (hoveredItem != null) { toggableWidgetGroup.setSelected(this, hoveredItem, true); hoveredItem.setSelected(true); } - super.onEventFired(eventType, event); + super.onMouseClicked(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) + * @see org.fenggui.BaseEventWidget#onMouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) */ - protected void onEventFired(String eventType, MouseDoubleClickedEvent event) + @Override + protected void onMouseDoubleClicked(MouseDoubleClickedEvent event) { if (hoveredItem != null) { @@ -234,7 +237,7 @@ updateMinSize(); } - super.onEventFired(eventType, event); + super.onMouseDoubleClicked(event); } /* (non-Javadoc) Added: optional/org/fenggui/util/GenericUtil.java =================================================================== --- optional/org/fenggui/util/GenericUtil.java (rev 0) +++ optional/org/fenggui/util/GenericUtil.java 2009-10-12 21:17:17 UTC (rev 657) @@ -0,0 +1,86 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Sep 1, 2009 + * $Id$ + */ +package org.fenggui.util; + +import java.lang.reflect.Method; + +import org.fenggui.Widget; + +/** + * + * @author Marc Menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public class GenericUtil +{ + + public static void CallMethodOnObject(Object obj, String methodName, Object... parameters) + { + Class<?> clazz = obj.getClass(); + Method method = null; + + if (clazz != null) + { + //search for right method on classes of widget + while (!(clazz == Widget.class) && method == null) + { + Method[] methods = clazz.getDeclaredMethods(); + for (Method m : methods) + { + if (m.getName().equals(methodName)) + { + Class<?>[] params = m.getParameterTypes(); + if (params.length == parameters.length) + { + method = m; + for (int i = 0; i < parameters.length; i++) + { + if (!params[i].equals(parameters[i].getClass())) + { + method = null; + break; + } + } + } + } + } + if (method == null) + clazz = clazz.getSuperclass(); + } + } + + if (method != null) + { + try + { + method.setAccessible(true); + method.invoke(obj, parameters); + } + catch (Exception e) + { + Log.error("Couldn't call method '%1'.", methodName); + } + } + else + { + Log.warn("Method '%1' not found", methodName); + } + } +} Added: src/org/fenggui/BaseEventWidget.java =================================================================== --- src/org/fenggui/BaseEventWidget.java (rev 0) +++ src/org/fenggui/BaseEventWidget.java 2009-10-12 21:17:17 UTC (rev 657) @@ -0,0 +1,284 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Sep 2, 2009 + * $Id$ + */ +package org.fenggui; + +import java.util.HashMap; +import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; + +import org.fenggui.event.Event; +import org.fenggui.event.IEventListener; +import org.fenggui.event.IGenericEventListener; +import org.fenggui.event.RootTraversingEvent; +import org.fenggui.event.mouse.MouseClickedEvent; +import org.fenggui.event.mouse.MouseDoubleClickedEvent; +import org.fenggui.event.mouse.MouseDraggedEvent; +import org.fenggui.event.mouse.MouseEnteredEvent; +import org.fenggui.event.mouse.MouseExitedEvent; +import org.fenggui.event.mouse.MouseMovedEvent; +import org.fenggui.event.mouse.MousePressedEvent; +import org.fenggui.event.mouse.MouseReleasedEvent; +import org.fenggui.event.mouse.MouseWheelEvent; +import org.fenggui.util.Log; + +/** + * This class adds the basic event system to all widgets. + * + * @author Marc Menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public abstract class BaseEventWidget implements IWidget +{ + + private Map<String, java.util.List<IGenericEventListener>> eventHooks; + + /** + * + */ + public BaseEventWidget() + { + super(); + eventHooks = new HashMap<String, java.util.List<IGenericEventListener>>(); + } + + protected boolean canHandleEvents() + { + return isEnabled() && isVisible(); + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#addEventListener(java.lang.String, org.fenggui.event.IGenericEventListener) + */ + public void addEventListener(String eventType, IGenericEventListener listener) + { + java.util.List<IGenericEventListener> eventListeners = eventHooks.get(eventType); + + if (eventListeners == null) + { + //using an CopyOnWriteArrayList as events may remove themselves from the list + eventListeners = new CopyOnWriteArrayList<IGenericEventListener>(); + eventHooks.put(eventType, eventListeners); + } + + if (!eventListeners.contains(listener)) + eventListeners.add(listener); + else + Log.debug("The same listener of type '%0$' is already registered.", eventType); + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireEvent(java.lang.String, org.fenggui.event.Event) + */ + public void fireEvent(final String eventType, final Event eventObject) + { + if (canHandleEvents()) + { + //handle registered event listeners + java.util.List<IGenericEventListener> eventListeners = eventHooks.get(eventType); + if (eventListeners != null) + { + for (IGenericEventListener listener : eventListeners) + { + listener.processEvent(this, eventObject); + } + } + } + + onEventFired(eventType, eventObject); + + if (eventObject instanceof RootTraversingEvent) + { + if (this.getParent() != null) + { + this.getParent().fireEvent(eventType, eventObject); + } + } + } + + protected void onEventFired(final String eventType, final Event eventObject) + { + + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#removeEventListener(java.lang.String, org.fenggui.event.IEventListener) + */ + public void removeEventListener(String eventType, IEventListener listener) + { + java.util.List<IGenericEventListener> eventListeners = eventHooks.get(eventType); + if (eventListeners != null) + { + eventListeners.remove(listener); + } + } + + public BaseEventWidget clone() + { + BaseEventWidget result; + try + { + result = (BaseEventWidget) super.clone(); + } + catch (CloneNotSupportedException e) + { + //should not be possible for a widget. + Log.error("Couldn't clone Widget.", e); + + //try to create new instance if cloning doesn't work. + try + { + return this.getClass().newInstance(); + } + catch (InstantiationException e1) + { + Log.error("Couldn't create new instance of Widget.", e); + } + catch (IllegalAccessException e1) + { + Log.error("Couldn't create new instance of Widget.", e); + } + return null; + } + + result.eventHooks = new HashMap<String, java.util.List<IGenericEventListener>>(); + + return result; + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseClickedEvent(org.fenggui.event.mouse.MouseClickedEvent) + */ + public final void fireMouseClickedEvent(MouseClickedEvent event) + { + this.onMouseClicked(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseClicked(MouseClickedEvent event) + { + + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseDoubleClickedEvent(org.fenggui.event.mouse.MouseDoubleClickedEvent) + */ + public final void fireMouseDoubleClickedEvent(MouseDoubleClickedEvent event) + { + onMouseDoubleClicked(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseDoubleClicked(MouseDoubleClickedEvent event) + { + + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseDraggedEvent(org.fenggui.event.mouse.MouseDraggedEvent) + */ + public final void fireMouseDraggedEvent(MouseDraggedEvent event) + { + onMouseDraggedEvent(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseDraggedEvent(MouseDraggedEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseEnteredEvent(org.fenggui.event.mouse.MouseEnteredEvent) + */ + public final void fireMouseEnteredEvent(MouseEnteredEvent event) + { + onMouseEntered(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseEntered(MouseEnteredEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseExitedEvent(org.fenggui.event.mouse.MouseExitedEvent) + */ + public final void fireMouseExitedEvent(MouseExitedEvent event) + { + onMouseExited(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseExited(MouseExitedEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseMovedEvent(org.fenggui.event.mouse.MouseMovedEvent) + */ + public final void fireMouseMovedEvent(MouseMovedEvent event) + { + onMouseMoved(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseMoved(MouseMovedEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMousePressedEvent(org.fenggui.event.mouse.MousePressedEvent) + */ + public final void fireMousePressedEvent(MousePressedEvent event) + { + onMousePressed(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMousePressed(MousePressedEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseReleasedEvent(org.fenggui.event.mouse.MouseReleasedEvent) + */ + public final void fireMouseReleasedEvent(MouseReleasedEvent event) + { + onMouseReleased(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseReleased(MouseReleasedEvent event) + { + } + + /* (non-Javadoc) + * @see org.fenggui.IWidget#fireMouseWheelEvent(org.fenggui.event.mouse.MouseWheelEvent) + */ + public final void fireMouseWheelEvent(MouseWheelEvent event) + { + onMouseWheelEvent(event); + this.fireEvent(EVENT_MOUSE, event); + } + + protected void onMouseWheelEvent(MouseWheelEvent event) + { + } + +} \ No newline at end of file Modified: src/org/fenggui/Button.java =================================================================== --- src/org/fenggui/Button.java 2009-08-11 20:55:24 UTC (rev 656) +++ src/org/fenggui/Button.java 2009-10-12 21:17:17 UTC (rev 657) @@ -20,16 +20,14 @@ package org.fenggui; import java.io.IOException; -import java.util.ArrayList; -import java.util.Set; +import org.fenggui.event.AbstractWrapperGenericListener; import org.fenggui.event.ButtonPressedEvent; import org.fenggui.event.IButtonPressedListener; import org.fenggui.event.key.Key; import org.fenggui.event.key.KeyPressedEvent; import org.fenggui.event.key.KeyReleasedEvent; import org.fenggui.event.mouse.MouseButton; -import org.fenggui.event.mouse.MouseExitedEvent; import org.fenggui.event.mouse.MousePressedEvent; import org.fenggui.event.mouse.MouseReleasedEvent; import org.fenggui.theme.xml.IXMLStreamableException; @@ -54,14 +52,12 @@ */ public class Button extends ObservableLabelWidget { - private java.util.List<IButtonPressedListener> buttonPressedHook; + public static final StateIdentifier STATE_PRESSED = new StateIdentifier("Pressed", "Pressed"); + public static final StateIdentifier STATE_NOTPRESSED = new StateIdentifier("Pressed", "NotPressed"); + public static final String EVENT_BUTTONPRESSED = "FengGUI_Event_ButtonPressed"; + private boolean pressed = false; + private boolean pressedKey = false; - public static final StateIdentifier STATE_PRESSED = new StateIdentifier("Pressed", "Pressed"); - public static final StateIdentifier STATE_NOTPRESSED = new StateIdentifier("Pressed", "NotPressed"); - - // public static final String STATE_PRESSED = "pressed"; - private boolean pressed = false; - public Button() { this(""); @@ -83,148 +79,85 @@ private void initDefaults() { - buttonPressedHook = new ArrayList<IButtonPressedListener>(); pressed = false; + pressedKey = false; getStateManager().addStates(STATE_PRESSED, STATE_NOTPRESSED); - - updateState(); + updateMinSize(); } /* (non-Javadoc) - * @see org.fenggui.StatefullWidget#updateState() + * @see org.fenggui.ObservableWidget#onKeyPressed(org.fenggui.event.key.KeyPressedEvent) */ @Override - protected void updateState() + protected void onKeyPressed(KeyPressedEvent event) { - super.updateState(); - - if (isEnabled()) + if (canHandleEvents() && !event.isAlreadyUsed()) { - if (isPressed()) - getStateManager().activate(STATE_PRESSED); - else - getStateManager().activate(STATE_NOTPRESSED); - } - else - { - getStateManager().activate(STATE_NOTPRESSED); - } - } - - private final void pressed() - { - if (!pressed) - { - pressed = true; - - //this.getDisplay().setFocusedWidget(this); - //called by focus change already - - this.updateState(); - } - } - - private final void released(Set<Key> modifiers) - { - if (pressed) - { - pressed = false; - - this.updateState(); - fireButtonPressedEvent(modifiers); - } - } - - /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#keyPressed(org.fenggui.event.key.KeyPressedEvent) - */ - protected void onEventFired(String eventType, KeyPressedEvent keyPressedEvent) - { - if (isEnabled()) - { - if (!keyPressedEvent.isAlreadyUsed()) + if (event.getKey() == ' ' || event.getKeyClass() == Key.ENTER) { - if (keyPressedEvent.getKey() == ' ' || keyPressedEvent.getKeyClass() == Key.ENTER) - { - pressed(); - keyPressedEvent.setUsed(); - } + pressedKey = true; + event.setUsed(); } } - super.onEventFired(eventType, keyPressedEvent); + super.onKeyPressed(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#keyReleased(org.fenggui.event.key.KeyReleasedEvent) + * @see org.fenggui.ObservableWidget#onKeyReleased(org.fenggui.event.key.KeyReleasedEvent) */ - protected void onEventFired(String eventType, KeyReleasedEvent e) + @Override + protected void onKeyReleased(KeyReleasedEvent event) { - if (isEnabled()) + if (canHandleEvents() && !event.isAlreadyUsed()) { - if (!e.isAlreadyUsed()) + if (event.getKey() == ' ' || event.getKeyClass() == Key.ENTER) { - if (e.getKey() == ' ' || e.getKeyClass() == Key.ENTER) + if (pressedKey) { - released(e.getKeyTracker().getModifiers()); - e.setUsed(); + pressedKey = false; + fireButtonPressedEvent(new ButtonPressedEvent(this, event.getKeyTracker().getModifiers())); + event.setUsed(); } } } - super.onEventFired(eventType, e); - } - /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mousePressed(org.fenggui.event.mouse.MousePressedEvent) - */ - protected void onEventFired(String eventType, MousePressedEvent mousePressedEvent) - { - if (isEnabled()) - { - if (!mousePressedEvent.isAlreadyUsed() && mousePressedEvent.getButton() == MouseButton.LEFT) - { - pressed(); - mousePressedEvent.setUsed(); - } - } - super.onEventFired(eventType, mousePressedEvent); + super.onKeyReleased(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseReleased(org.fenggui.event.mouse.MouseReleasedEvent) + * @see org.fenggui.BaseEventWidget#onMousePressed(org.fenggui.event.mouse.MousePressedEvent) */ - protected void onEventFired(String eventType, MouseReleasedEvent mouseReleasedEvent) + @Override + protected void onMousePressed(MousePressedEvent event) { - if (isEnabled()) + if (canHandleEvents() && !event.isAlreadyUsed()) { - if (!mouseReleasedEvent.isAlreadyUsed() && mouseReleasedEvent.getButton() == MouseButton.LEFT) + if (event.getButton() == MouseButton.LEFT) { - if (Button.this == mouseReleasedEvent.getOriginalSource()) - { - released(mouseReleasedEvent.getKeyTracker().getModifiers()); - mouseReleasedEvent.setUsed(); - } + event.setUsed(); + pressed = true; } } - super.onEventFired(eventType, mouseReleasedEvent); + super.onMousePressed(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseExited(org.fenggui.event.mouse.MouseExitedEvent) + * @see org.fenggui.BaseEventWidget#onMouseReleased(org.fenggui.event.mouse.MouseReleasedEvent) */ @Override - protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) + protected void onMouseReleased(MouseReleasedEvent event) { - if (isEnabled()) + if (canHandleEvents() && !event.isAlreadyUsed()) { - if (pressed) + if (event.getButton() == MouseButton.LEFT && pressed) { + event.setUsed(); pressed = false; - this.updateState(); - mouseExitedEvent.setUsed(); + fireButtonPressedEvent(new ButtonPressedEvent(this, event.getKeyTracker().getModifiers())); } } - super.onEventFired(eventType, mouseExitedEvent); + super.onMouseReleased(event); } public boolean isPressed() @@ -234,26 +167,32 @@ public void addButtonPressedListener(IButtonPressedListener l) { - if (!buttonPressedHook.contains(l)) - { - buttonPressedHook.add(l); - } + this.addEventListener(EVENT_BUTTONPRESSED, + new AbstractWrapperGenericListener<IButtonPressedListener, ButtonPressedEvent>(l) + { + + public void processSpecificEvent(Object source, ButtonPressedEvent event) + { + getListener().buttonPressed(source, event); + } + + }); } public void removeButtonPressedListener(IButtonPressedListener l) { - buttonPressedHook.remove(l); + this.removeEventListener(EVENT_BUTTONPRESSED, l); } - private void fireButtonPressedEvent(Set<Key> modifiers) + protected void fireButtonPressedEvent(ButtonPressedEvent event) { - ButtonPressedEvent e = new ButtonPressedEvent(this, modifiers); + onButtonPressed(event); + this.fireEvent(EVENT_BUTTONPRESSED, event); + } - for (int i = 0; i < buttonPressedHook.size(); i++) - { - IButtonPressedListener l = buttonPressedHook.get(i); - l.buttonPressed(e); - } + protected void onButtonPressed(ButtonPressedEvent event) + { + } /* (non-Javadoc) Modified: src/org/fenggui/CheckBox.java =================================================================== --- src/org/fenggui/CheckBox.java 2009-08-11 20:55:24 UTC (rev 656) +++ src/org/fenggui/CheckBox.java 2009-10-12 21:17:17 UTC (rev 657) @@ -19,8 +19,8 @@ package org.fenggui; import java.io.IOException; -import java.util.ArrayList; +import org.fenggui.event.AbstractWrapperGenericListener; import org.fenggui.event.ISelectionChangedListener; import org.fenggui.event.SelectionChangedEvent; import org.fenggui.event.key.Key; @@ -28,6 +28,7 @@ import org.fenggui.event.mouse.MouseClickedEvent; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOutputStream; +import org.fenggui.util.StateIdentifier; /** * Implementation of a check box. A check box can be used to toggle between two states. @@ -41,13 +42,13 @@ */ public class CheckBox<E> extends ObservableLabelWidget implements IToggable<CheckBox<E>> { - private ArrayList<ISelectionChangedListener> selectionChangedHook = new ArrayList<ISelectionChangedListener>(); + private E value = null; + private boolean selected = false; - private E value = null; - private boolean selected = false; + public static final StateIdentifier STATE_SELECTED = new StateIdentifier("checkbox", "selected"); + public static final StateIdentifier STATE_DESELECTED = new StateIdentifier("checkbox", "deselected"); - public static final String STATE_SELECTED = "selected"; - public static final String STATE_DESELECTED = "deselected"; + public static final String EVENT_SELECTIONCHANGED = "FengGUI_Event_SelectionChanged"; /** * Creates a new <code>CheckBox</code> widget. @@ -68,36 +69,37 @@ { super(); - getAppearance().setEnabled(STATE_SELECTED, false); - getAppearance().setEnabled(STATE_DESELECTED, true); + getStateManager().addStates(STATE_SELECTED, STATE_DESELECTED); setTraversable(true); setText(text); // does an updateMinSize() } - + /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#keyTyped(org.fenggui.event.key.KeyTypedEvent) + * @see org.fenggui.ObservableWidget#onKeyTyped(org.fenggui.event.key.KeyTypedEvent) */ - public void onEventFired(String eventType, KeyTypedEvent keyTypedEvent) + @Override + protected void onKeyTyped(KeyTypedEvent event) { - if (keyTypedEvent.getKeyClass() == Key.ENTER || Character.isSpaceChar(keyTypedEvent.getKey())) + if (event.getKeyClass() == Key.ENTER || Character.isSpaceChar(event.getKey())) { - keyTypedEvent.setUsed(); - + event.setUsed(); + setSelected(!isSelected()); } - - super.onEventFired(eventType, keyTypedEvent); + + super.onKeyTyped(event); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) + * @see org.fenggui.BaseEventWidget#onMouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - public void onEventFired(String eventType, MouseClickedEvent event) + @Override + protected void onMouseClicked(MouseClickedEvent event) { event.setUsed(); setSelected(!isSelected()); - - super.onEventFired(eventType, event); + + super.onMouseClicked(event); } /** @@ -117,19 +119,16 @@ { selected = b; - this.updateState(); if (b) { - getAppearance().setEnabled(STATE_DESELECTED, false); - getAppearance().setEnabled(STATE_SELECTED, true); + getStateManager().activate(STATE_SELECTED); } else { - getAppearance().setEnabled(STATE_SELECTED, false); - getAppearance().setEnabled(STATE_DESELECTED, true); + getStateManager().activate(STATE_DESELECTED); } - fireSelectionChangedEvent(this, this, b); + fireSelectionChangedEvent(new SelectionChangedEvent(this, this, b)); return this; } @@ -164,10 +163,17 @@ */ public void addSelectionChangedListener(ISelectionChangedListener l) { - if (!selectionChangedHook.contains(l)) - { - selectionChangedHook.add(l); - } + addEventListener(EVENT_SELECTIONCHANGED, + new AbstractWrapperGenericListener<ISelectionChangedListener, SelectionChangedEvent>(l) + { + + public void processSpecificEvent(Object source, SelectionChangedEvent event) + { + getListener().selectionChanged(source, event); + } + + }); + } /** @@ -178,7 +184,7 @@ */ public void removeSelectionChangedListener(ISelectionChangedListener l) { - selectionChangedHook.remove(l); + removeEventListener(EVENT_SELECTIONCHANGED, l); } /** @@ -188,14 +194,15 @@ * @param t * @param s */ - private void fireSelectionChangedEvent(IWidget source, CheckBox<E> t, boolean s) + private final void fireSelectionChangedEvent(SelectionChangedEvent event) { - SelectionChangedEvent e = new SelectionChangedEvent(source, t, s); + onSelectionChanged(event); + fireEvent(EVENT_SELECTIONCHANGED, event); + } - for (ISelectionChangedListener l : selectionChangedHook) - { - l.selectionChanged(e); - } + protected void onSelectionChanged(SelectionChangedEvent event) + { + } @Override @@ -213,12 +220,9 @@ public CheckBox<E> clone() { CheckBox<E> result = (CheckBox<E>) super.clone(); - - result.selectionChangedHook = new ArrayList<ISelectionChangedListener>(); - - result.getAppearance().setEnabled(STATE_SELECTED, false); - result.getAppearance().setEnabled(STATE_DESELECTED, true); - + + result.getStateManager().addStates(STATE_SELECTED, STATE_DESELECTED); + return result; } Modified: src/org/fenggui/ComboBox.java =================================================================== --- src/org/fenggui/ComboBox.java 2009-08-11 20:55:24 UTC (rev 656) +++ src/org/fenggui/ComboBox.java 2009-10-12 21:17:17 UTC (rev 657) @@ -84,7 +84,7 @@ addSelectionChangedListener(new ISelectionChangedListener() { - public void selectionChanged(SelectionChangedEvent e) + public void selectionChanged(Object sender, SelectionChangedEvent e) { // dont listen to de-select events! @@ -295,58 +295,35 @@ if (displayY >= 0) { - - // the click is processed in org.fenggui.Display afterwards and - // will place the Frame with the Combo Box inside to the - // first position in the content list. We have to wait to pass - // this event and then display the popup. - - // Thread t = new Thread() - // { - // public void run() - // { - // try - // { - // sleep(50); - // } - // catch (InterruptedException e) - // { - // } getDisplay().displayPopUp(popupContainer); getDisplay().setFocusedWidget(list); - // } - // }; - // - // t.start(); } } - /* - * (non-Javadoc) - * - * @see org.fenggui.ObservableWidget#keyReleased(org.fenggui.event.key.KeyReleasedEvent) + + /* (non-Javadoc) + * @see org.fenggui.ObservableWidget#onKeyReleased(org.fenggui.event.key.KeyReleasedEvent) */ - public void onEventFired(String eventType, KeyReleasedEvent keyReleasedEvent) + @Override + protected void onKeyReleased(KeyReleasedEvent event) { - if (!keyReleasedEvent.isAlreadyUsed() - && (keyReleasedEvent.getKeyClass() == Key.ENTER || keyReleasedEvent.getKey() == ' ')) + if (!event.isAlreadyUsed() + && (event.getKeyClass() == Key.ENTER || event.getKey() == ' ')) { if (list == null || !list.isInWidgetTree()) { openPopup(); - keyReleasedEvent.setUsed(); + event.setUsed(); } } - - super.onEventFired(eventType, keyReleasedEvent); + super.onKeyReleased(event); } - /* - * (non-Javadoc) - * - * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) + /* (non-Javadoc) + * @see org.fenggui.BaseEventWidget#onMouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - public void onEventFired(String eventType, MouseClickedEvent event) + @Override + protected void onMouseClicked(MouseClickedEvent event) { if (!event.isAlreadyUsed() && event.getButton() == MouseButton.LEFT) { @@ -356,13 +333,15 @@ event.setUsed(); } } - super.onEventFired(eventType, event); + super.onMouseClicked(event); } + /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) + * @see org.fenggui.BaseEventWidget#onMouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) */ - public void onEventFired(String eventType, MouseDoubleClickedEvent event) + @Override + protected void onMouseDoubleClicked(MouseDoubleClickedEvent event) { if (!event.isAlreadyUsed() && event.getButton() == MouseButton.LEFT) { @@ -372,17 +351,17 @@ event.setUsed(); } } - super.onEventFired(eventType, event); + super.onMouseDoubleClicked(event); } - public IWidget getNextTraversableWidget(IWidget start) + public IFocusableWidget getNextTraversableWidget(IWidget start) { if (start == null) return this; return getParent().getNextTraversableWidget(this); } - public IWidget getPreviousTraversableWidget(IWidget start) + public IFocusableWidget getPreviousTraversableWidget(IWidget start) { if (start == null) return this; @@ -470,7 +449,7 @@ public boolean isKeyTraversalRoot() { - return false; + return false; } /* (non-Javadoc) Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-08-11 20:55:24 UTC (rev 656) +++ src/org/fenggui/Container.java 2009-10-12 21:17:17 UTC (rev 657) @@ -25,15 +25,13 @@ import java.util.concurrent.CopyOnWriteArrayList; import org.fenggui.appearance.DefaultAppearance; -import org.fenggui.binding.render.Binding; import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.IOpenGL; +import org.fenggui.event.AbstractWrapperGenericListener; import org.fenggui.event.Event; import org.fenggui.event.FocusEvent; -import org.fenggui.event.IGenericEventListener; import org.fenggui.event.IWidgetListChangedListener; import org.fenggui.event.LeafeTraversingEvent; -import org.fenggui.event.SizeChangedEvent; import org.fenggui.event.WidgetListChangedEvent; import org.fenggui.layout.LayoutManager; import org.fenggui.layout.RowLayout; @@ -57,13 +55,12 @@ */ public class Container extends StandardWidget implements IContainer, Cloneable { - public static final String EVENT_WIDGETLISTCHANGED = "FengGUI_Widget_List_Changed"; + public static final String EVENT_WIDGETLISTCHANGED = "FengGUI_Event_WidgetListChanged"; private LayoutManager layoutManager = null; protected List<IWidget> notifyList; private boolean keyTraversalRoot = false; private DefaultAppearance appearance = null; - private boolean invalidLayout = false; /** * Creates a new <code>Container</code>. @@ -86,61 +83,26 @@ this.notifyList = new CopyOnWriteArrayList<IWidget>(); } - protected void invalidateLayout() - { - invalidLayout = true; - } - - protected void layoutIfInvalide() - { - if (invalidLayout) - this.layout(); - } - public void addWidgetListChangedListener(final IWidgetListChangedListener l) { - addEventListener(EVENT_WIDGETLISTCHANGED, new IGenericEventListener() - { - private IWidgetListChangedListener listener = l; - - public void processEvent(Object source, Event event) + addEventListener(EVENT_WIDGETLISTCHANGED, + new AbstractWrapperGenericListener<IWidgetListChangedListener, WidgetListChangedEvent>(l) { - if (event instanceof WidgetListChangedEvent) + public void processSpecificEvent(Object source, WidgetListChangedEvent event) { WidgetListChangedEvent widgetChangedEvent = (WidgetListChangedEvent) event; if (widgetChangedEvent.added()) { - listener.widgetAdded(source, widgetChangedEvent); + getListener().widgetAdded(source, widgetChangedEvent); } else { - listener.widgetRemoved(source, widgetChangedEvent); + getListener().widgetRemoved(source, widgetChangedEvent); } } - else - Log.error("Unknown Type for widgetListChanged event."); - } - /* (non-Javadoc) - * @see java.lang.Object#equals(java.lang.Object) - */ - @Override - public boolean equals(Object obj) - { - return listener.equals(obj); - } - - /* (non-Javadoc) - * @see java.lang.Object#hashCode() - */ - @Override - public int hashCode() - { - return listener.hashCode(); - } - - }); + }); } public void removeWidgetListChangedListener(IWidgetListChangedListener listener) @@ -168,22 +130,32 @@ return appearance; } - public void onEventFired(String eventType, FocusEvent focusEvent) + @Override + protected void onEventFired(final String eventType, final Event eventObject) { - super.onEventFired(eventType, focusEvent); + super.onEventFired(eventType, eventObject); - if (focusEvent.getOriginalSource() == this && focusEvent.isFocusGained()) + //START: What is this good for? + + if (eventType == IWidget.EVENT_FOCUSCHANGED && eventObject instanceof FocusEvent) { - int i = 0; + FocusEvent focusEvent = (FocusEvent) eventObject; - while (i < size() && !notifyList.get(i).isTraversable()) - i++; + if (focusEvent.getOriginalSource() == this && focusEvent.isFocusGained()) + { + int i = 0; - if (i >= size()) - return; + while (i < size() && !notifyList.get(i).isTraversable()) + i++; - getDisplay().setFocusedWidget(notifyList.get(i)); + if (i >= size()) + return; + + getDisplay().setFocusedWidget((IFocusableWidget) notifyList.get(i)); + } } + + //END: What is this good for? } /** @@ -223,27 +195,20 @@ int startX = c.getX() < 0 ? 0 : c.getX(); int startY = c.getY() < 0 ? 0 : c.getY(); - if (getDisplay() != null) + if (startX >= getSize().getWidth() || startY >= getSize().getHeight()) { - Binding b = getDisplay().getBinding(); + return false; + } + int cWidth = c.getSize().getWidth(); + int cHeight = c.getSize().getHeight(); - if (startX >= b.getCanvasWidth() || startY >= b.getCanvasHeight()) - { - return false; - } + g.addClipSpace(startX, startY, c.getX() + cWidth > getWidth() ? getWidth() - startX : cWidth, + c.getY() + cHeight > getHeight() ? getHeight() - startY : cHeight); - int cWidth = c.getSize().getWidth(); - int cHeight = c.getSize().getHeight(); - - g.addClipSpace(startX, startY, c.getX() + cWidth > getWidth() ? getWidth() - startX : cWidth, - c.getY() + cHeight > getHeight() ? getHeight() - startY : cHeight); - - if (g.getClipSpace() != null) - return true; - else - return false; - } - return false; + if (g.getClipSpace() != null) + return true; + else + return false; } /** @@ -276,21 +241,10 @@ addWidgetInternal(c, position); updateMinSize(); - layoutIfInvalide(); + layout(); fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(true, c)); } - /* (non-Javadoc) - * @see org.fenggui.Widget#minSizeChanged(org.fenggui.event.SizeChangedEvent) - */ - public void onEventFired(String eventType, SizeChangedEvent event) - { - super.onEventFired(eventType, event); - - if (eventType.equals(IWidget.EVENT_SIZECHANGED)) - this.layoutIfInvalide(); - } - /** * Adds a widget to the list. Doesn't refresh the minSize, call the added event or do * any layout of the container. @@ -322,13 +276,12 @@ if (notifyList.contains(c)) { - Log.warn("Container.addWidget: Widget " + c + " is already in the container (" + this + ")"); + Log.warn("Container.addWidget: Widget %1 is already in the container (%2)", c, this); } else { //if(relyFocus() == null && c.relyFocus() != null) setRelyFocus(c); notifyList.add(position, c); - invalidLayout = true; c.setParent(this); if (isInWidgetTree()) @@ -357,7 +310,7 @@ } updateMinSize(); - layoutIfInvalide(); + layout(); fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(true, widgets)); } @@ -369,7 +322,6 @@ { for (IWidget w : notifyList) w.removedFromWidgetTree(); - } } @@ -378,7 +330,6 @@ { for (IWidget w : notifyList) w.addedToWidgetTree(); - } /** @@ -427,8 +378,6 @@ // pass layout call to my children. for (IWidget c : widgets) c.layout(); - - invalidLayout = false; } /** @@ -437,21 +386,20 @@ */ public void removeWidget(IWidget... widgets) { - for (IWidget w : widgets) { removeWidgetInternal(w); } - updateMinSize(); - if (getDisplay() != null) getDisplay().focusedWidgetValityCheck(); - fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(false, widgets)); + fireWidgetListChangedEvent(new WidgetListChangedEvent(false, widgets)); + + updateMinSize(); } - public void removeWidgetInternal(IWidget w) + protected final void removeWidgetInternal(IWidget w) { if (w == null) return; @@ -463,6 +411,17 @@ w.setParent(null); } + private void fireWidgetListChangedEvent(WidgetListChangedEvent event) + { + onWidgetListChanged(event); + fireEvent(EVENT_WIDGETLISTCHANGED, event); + } + + protected void onWidgetListChanged(WidgetListChangedEvent event) + { + + } + /** * Removes the specified * direct child Widgets from this Container. @@ -475,16 +434,7 @@ if (list == null) return; - for (int i = 0; i < list.size(); i++) - { - removeWidgetInternal(list.get(i)); - } - updateMinSize(); - - if (getDisplay() != null) - getDisplay().focusedWidgetValityCheck(); - - fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(false, list.toArray(new IWidget[0]))); + this.removeWidget(list.toArray(new IWidget[list.size()])); } /** @@ -606,7 +556,7 @@ public void pack() { setSizeToMinSize(); - layoutIfInvalide(); + layout(); } /** @@ -666,7 +616,7 @@ * @param currentWidget the wiget to start searching from * @return next traversable widget */ - public IWidget getNextTraversableWidget(IWidget currentWidget) + public IFocusableWidget getNextTraversableWidget(IWidget currentWidget) { if (currentWidget != null && !notifyList.contains(currentWidget)) throw new IllegalArgumentException("currentWidget is not child of this container!"); @@ -682,7 +632,7 @@ { if (!((IBasicContainer) w).isKeyTraversalRoot()) { - IWidget tmp = ((IBasicContainer) w).getNextTraversableWidget(null); + IFocusableWidget tmp = ((IBasicContainer) w).getNextTraversableWidget(null); if (tmp != null) { w = tmp; @@ -709,7 +659,10 @@ w = getNextTraversableWidget(null); } - return w; + if (w instanceof IFocusableWidget) + return (IFocusableWidget) w; + else + return null; } /** @@ -717,7 +670,7 @@ * @param currentWidget the wiget to start searching from * @return previous traversable widget */ - public IWidget getPreviousTraversableWidget(IWidget currentWidget) + public IFocusableWidget getPreviousTraversableWidget(IWidget currentWidget) { if (currentWidget != null && !notifyList.contains(currentWidget)) throw new IllegalArgumentException("currentWidget is not child of this container!"); @@ -733,7 +686,7 @@ { if (!((IBasicContainer) w).isKeyTraversalRoot()) { - IWidget tmp = ((IBasicContainer) w).getPreviousTraversableWidget(null); + IFocusableWidget tmp = ((IBasicContainer) w).getPreviousTraversableWidget(null); if (tmp != null) { w = tmp; @@ -760,7 +713,10 @@ w = getPreviousTraversableWidget(null); } - return w; + if (w instanceof IFocusableWidget) + return (IFocusableWidget) w; + else + return null; } @Override @@ -864,7 +820,6 @@ result.initContainer(); result.appearance = this.appearance.clone(result); - return result; } Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-08-11 20:55:24 UTC (rev 656) +++ src/org/fenggui/Display.java 2009-10-12 21:17:17 UTC (rev 657) @@ -88,7 +88,7 @@ // private Widget dndWidget = null; private IDragAndDropListener draggingListener = null; - private IWidget focusedWidget = null; + private IFocusableWidget focusedWidget = null; private IWidget popupWidget = null; @@ -113,7 +113,7 @@ if (binding == null) throw new IllegalArgumentException("binding = null"); this.binding = binding; - this.setXY(0,0); + this.setXY(0, 0); setSize(binding.getCanvasWidth(), binding.getCanvasHeight()); setLayoutManager(new StaticLayout()); @@ -306,22 +306,23 @@ * @param widget * the widget to receive the focus */ - public void setFocusedWidget(IWidget widget) + public void setFocusedWidget(IFocusableWidget widget) { - IWidget oldWidget = focusedWidget; + IFocusableWidget oldWidget = focusedWidget; focusedWidget = widget; if (oldWidget != n... [truncated message content] |
From: <mar...@us...> - 2009-08-11 20:55:44
|
Revision: 656 http://fenggui.svn.sourceforge.net/fenggui/?rev=656&view=rev Author: marcmenghin Date: 2009-08-11 20:55:24 +0000 (Tue, 11 Aug 2009) Log Message: ----------- - did some profiling again so > cleanups & speedups - the interface IWidget should be used in most places instead of the Widget class. Modified Paths: -------------- optional/org/fenggui/composite/tree/Tree.java src/org/fenggui/Container.java src/org/fenggui/Display.java src/org/fenggui/IWidget.java src/org/fenggui/ObservableLabelWidget.java src/org/fenggui/ProgressBar.java src/org/fenggui/ScrollContainer.java src/org/fenggui/Widget.java src/org/fenggui/actor/KeepOnWidgetActor.java src/org/fenggui/actor/StaticTooltipActor.java src/org/fenggui/binding/render/Graphics.java src/org/fenggui/composite/Window.java src/org/fenggui/composite/menu/Menu.java src/org/fenggui/composite/menu/MenuBar.java src/org/fenggui/decorator/border/PlainBorder.java src/org/fenggui/event/TextCursorMovedEvent.java src/org/fenggui/layout/FormAttachment.java src/org/fenggui/layout/FormLayout.java src/org/fenggui/layout/RowExLayout.java src/org/fenggui/layout/RowLayout.java src/org/fenggui/util/Rectangle.java test/org/fenggui/example/Everything.java Modified: optional/org/fenggui/composite/tree/Tree.java =================================================================== --- optional/org/fenggui/composite/tree/Tree.java 2009-08-11 16:40:54 UTC (rev 655) +++ optional/org/fenggui/composite/tree/Tree.java 2009-08-11 20:55:24 UTC (rev 656) @@ -18,9 +18,9 @@ */ package org.fenggui.composite.tree; +import org.fenggui.IWidget; import org.fenggui.ModelWidget; import org.fenggui.ToggableGroup; -import org.fenggui.Widget; import org.fenggui.appearance.EntryAppearance; import org.fenggui.appearance.LabelAppearance; import org.fenggui.binding.render.Graphics; @@ -203,7 +203,7 @@ { super.onEventFired(eventType, event); - if (getRoot() != null && eventType.equals(Widget.EVENT_SIZECHANGED)) + if (getRoot() != null && eventType.equals(IWidget.EVENT_SIZECHANGED)) getRoot().adaptChange(this.getAppearance().getContentWidth(), this.getAppearance().getContentHeight(), getAppearance()); } Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/Container.java 2009-08-11 20:55:24 UTC (rev 656) @@ -176,16 +176,13 @@ { int i = 0; - synchronized (notifyList) - { - while (i < size() && !notifyList.get(i).isTraversable()) - i++; + while (i < size() && !notifyList.get(i).isTraversable()) + i++; - if (i >= size()) - return; + if (i >= size()) + return; - getDisplay().setFocusedWidget(notifyList.get(i)); - } + getDisplay().setFocusedWidget(notifyList.get(i)); } } @@ -290,7 +287,7 @@ { super.onEventFired(eventType, event); - if (eventType.equals(Widget.EVENT_SIZECHANGED)) + if (eventType.equals(IWidget.EVENT_SIZECHANGED)) this.layoutIfInvalide(); } @@ -320,25 +317,22 @@ throw new IllegalArgumentException("Widget already added to widget tree."); } - synchronized (notifyList) + if (position > notifyList.size()) + position = notifyList.size(); + + if (notifyList.contains(c)) { - if (position > notifyList.size()) - position = notifyList.size(); + Log.warn("Container.addWidget: Widget " + c + " is already in the container (" + this + ")"); + } + else + { + //if(relyFocus() == null && c.relyFocus() != null) setRelyFocus(c); + notifyList.add(position, c); + invalidLayout = true; + c.setParent(this); - if (notifyList.contains(c)) - { - Log.warn("Container.addWidget: Widget " + c + " is already in the container (" + this + ")"); - } - else - { - //if(relyFocus() == null && c.relyFocus() != null) setRelyFocus(c); - notifyList.add(position, c); - invalidLayout = true; - c.setParent(this); - - if (isInWidgetTree()) - c.addedToWidgetTree(); - } + if (isInWidgetTree()) + c.addedToWidgetTree(); } } @@ -348,14 +342,11 @@ */ public void bringToFront(IWidget child) { - synchronized (notifyList) - { - if (!notifyList.contains(child)) - throw new IllegalArgumentException("The given child must be in this container"); + if (!notifyList.contains(child)) + throw new IllegalArgumentException("The given child must be in this container"); - notifyList.remove(child); - notifyList.add(notifyList.size(), child); - } + notifyList.remove(child); + notifyList.add(notifyList.size(), child); } public void addWidget(IWidget... widgets) @@ -385,12 +376,9 @@ @Override public void addedToWidgetTree() { - synchronized (notifyList) - { - for (IWidget w : notifyList) - w.addedToWidgetTree(); + for (IWidget w : notifyList) + w.addedToWidgetTree(); - } } /** @@ -524,19 +512,16 @@ x -= getAppearance().getLeftMargins(); y -= getAppearance().getBottomMargins(); - synchronized (notifyList) + //go from front (last item) to back (first item) + for (int i = notifyList.size() - 1; i >= 0; i--) { - //go from front (last item) to back (first item) - for (int i = notifyList.size() - 1; i >= 0; i--) - { - IWidget w = notifyList.get(i); - ret = w.getWidget(x - w.getX(), y - w.getY()); + IWidget w = notifyList.get(i); + ret = w.getWidget(x - w.getX(), y - w.getY()); - if (ret != null) - { - hit = ret; - break; - } + if (ret != null) + { + hit = ret; + break; } } return hit; @@ -555,14 +540,11 @@ String s = super.toString() + " {"; - synchronized (notifyList) + for (int i = 0; i < notifyList.size(); i++) { - for (int i = 0; i < notifyList.size(); i++) - { - s += notifyList.get(i).getClass().getSimpleName(); - if (i < notifyList.size() - 1) - s += ", "; - } + s += notifyList.get(i).getClass().getSimpleName(); + if (i < notifyList.size() - 1) + s += ", "; } s += "}"; return s; @@ -663,23 +645,20 @@ public IWidget getNextWidget(IWidget currentWidget) { int i; - synchronized (notifyList) + if (currentWidget == null) + i = 0; + else + i = notifyList.indexOf(currentWidget) + 1; + + if (i > size() - 1) { - if (currentWidget == null) + if (isKeyTraversalRoot() && (size() - 1) != 0) i = 0; else - i = notifyList.indexOf(currentWidget) + 1; - - if (i > size() - 1) - { - if (isKeyTraversalRoot() && (size() - 1) != 0) - i = 0; - else - return null; - } - - return notifyList.get(i); + return null; } + + return notifyList.get(i); } /** @@ -811,39 +790,34 @@ { IOpenGL opengl = g.getOpenGL(); - synchronized (this.notifyList) + for (IWidget c : notifyList) { + // if widget lays completely outside + if (c.getX() > this.getWidth() || c.getY() > this.getHeight()) + continue; - for (IWidget c : notifyList) - { - // if widget lays completely outside - if (c.getX() > this.getWidth() || c.getY() > this.getHeight()) - continue; + //XXX the upper statement does not recognize the margins of the container! - //XXX the upper statement does not recognize the margins of the container! + boolean valid = this.clipWidget(g, c); - boolean valid = this.clipWidget(g, c); + if (!valid) + { + g.removeLastClipSpace(); + continue; + } - if (!valid) - { - g.removeLastClipSpace(); - continue; - } + if (g.getClipSpace() != null) + { + opengl.pushMatrix(); + g.translate(c.getX(), c.getY()); - if (g.getClipSpace() != null) - { - opengl.pushMatrix(); - g.translate(c.getX(), c.getY()); + c.paint(g); - c.paint(g); - - g.translate(-c.getX(), -c.getY()); - opengl.popMatrix(); - } - - g.removeLastClipSpace(); + g.translate(-c.getX(), -c.getY()); + opengl.popMatrix(); } + g.removeLastClipSpace(); } } Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/Display.java 2009-08-11 20:55:24 UTC (rev 656) @@ -90,7 +90,7 @@ private IWidget focusedWidget = null; - private Widget popupWidget = null; + private IWidget popupWidget = null; private boolean enabled = true; @@ -113,8 +113,7 @@ if (binding == null) throw new IllegalArgumentException("binding = null"); this.binding = binding; - this.setY(0); - this.setX(0); + this.setXY(0,0); setSize(binding.getCanvasWidth(), binding.getCanvasHeight()); setLayoutManager(new StaticLayout()); @@ -169,7 +168,7 @@ * @param pus * the popup widget */ - public void displayPopUp(Widget pus) + public void displayPopUp(IWidget pus) { // addWidget calls setParent() and addedToWidgetTree() addWidget(pus); @@ -315,14 +314,14 @@ if (oldWidget != null && oldWidget != widget) { FocusEvent e = new FocusEvent(oldWidget, true); - oldWidget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); + oldWidget.fireEvent(IWidget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } if (widget != null) { FocusEvent e = new FocusEvent(widget, false); - widget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); + widget.fireEvent(IWidget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } @@ -380,7 +379,7 @@ setFocusedWidget(w); } - w.fireEvent(Widget.EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); for (int i = 0; i < dndListeners.size(); i++) { @@ -394,7 +393,7 @@ // determine whether a frame was hit while (w.getParent() != null && !(w.getParent() instanceof IWindow)) - w = (Widget) w.getParent(); + w = (IWidget) w.getParent(); if (w.getParent() instanceof IWindow && w.getParent().getParent() == this) bringToFront(w.getParent()); @@ -464,7 +463,7 @@ if (w.equals(this)) return e; - w.fireEvent(Widget.EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); } fireGlobalEventListener(e); @@ -488,30 +487,46 @@ MouseDraggedEvent e = new MouseDraggedEvent(w != null, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); - if (!this.isEnabled()) - return e; - if (draggingListener != null) { draggingListener.drag(mouseX, mouseY, keyTracker.getModifiers()); } - if (!mouseOverWidget.equals(w)) + // w points to a different Widget than before! + if (mouseOverWidget != null && !mouseOverWidget.equals(w)) { MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, keyTracker); - mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); + mouseOverWidget.fireEvent(IWidget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); - MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, - keyTracker); - w.fireEvent(Widget.EVENT_MOUSE, entered); - fireGlobalEventListener(entered); + if (w != null) + { + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, + keyTracker); + + mouseOverWidget = w; + + w.fireEvent(IWidget.EVENT_MOUSE, entered); + fireGlobalEventListener(entered); + } } - mouseOverWidget = w; + else + { + if (mouseOverWidget == null && w != null) + { + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, + keyTracker); + mouseOverWidget = w; + + w.fireEvent(IWidget.EVENT_MOUSE, entered); + fireGlobalEventListener(entered); + } + } + if (w != null) - w.fireEvent(EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); fireGlobalEventListener(e); @@ -527,7 +542,7 @@ keyTracker); if (w != null) - w.fireEvent(EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); fireGlobalEventListener(e); @@ -545,7 +560,7 @@ MouseClickedEvent e = new MouseClickedEvent(w != null, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); if (w != null) - w.fireEvent(Widget.EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); fireGlobalEventListener(e); @@ -565,7 +580,7 @@ keyTracker); if (w != null) - w.fireEvent(Widget.EVENT_MOUSE, e); + w.fireEvent(IWidget.EVENT_MOUSE, e); fireGlobalEventListener(e); @@ -602,21 +617,17 @@ */ public MouseMovedEvent fireMouseMovedEvent(int displayX, int displayY) { - // retrieve Widget below mouse cursor IWidget w = getWidget(displayX, displayY); MouseMovedEvent event = new MouseMovedEvent(w != null, w, displayX, displayY, mouseTracker, keyTracker); - if (!this.isEnabled()) - return event; - // w points to a different Widget than before! if (mouseOverWidget != null && !mouseOverWidget.equals(w)) { MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, displayX, displayY, mouseTracker, keyTracker); - mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); + mouseOverWidget.fireEvent(IWidget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); if (w != null) @@ -626,7 +637,7 @@ mouseOverWidget = w; - w.fireEvent(EVENT_MOUSE, entered); + w.fireEvent(IWidget.EVENT_MOUSE, entered); fireGlobalEventListener(entered); } } @@ -639,13 +650,13 @@ mouseOverWidget = w; - w.fireEvent(EVENT_MOUSE, entered); + w.fireEvent(IWidget.EVENT_MOUSE, entered); fireGlobalEventListener(entered); } } if (w != null) - w.fireEvent(Widget.EVENT_MOUSE, event); + w.fireEvent(IWidget.EVENT_MOUSE, event); return event; } @@ -667,7 +678,7 @@ if (focusedWidget != null) { - focusedWidget.fireEvent(Widget.EVENT_KEY, e); + focusedWidget.fireEvent(IWidget.EVENT_KEY, e); fireGlobalEventListener(e); } @@ -685,7 +696,7 @@ if (focusedWidget != null) { - focusedWidget.fireEvent(Widget.EVENT_KEY, e); + focusedWidget.fireEvent(IWidget.EVENT_KEY, e); fireGlobalEventListener(e); } @@ -698,7 +709,7 @@ if (focusedWidget != null) { - focusedWidget.fireEvent(Widget.EVENT_KEY, e); + focusedWidget.fireEvent(IWidget.EVENT_KEY, e); fireGlobalEventListener(e); } return e; Modified: src/org/fenggui/IWidget.java =================================================================== --- src/org/fenggui/IWidget.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/IWidget.java 2009-08-11 20:55:24 UTC (rev 656) @@ -41,6 +41,15 @@ public interface IWidget extends IXMLStreamable { + //basic Event Key definitions + public static final String EVENT_MINSIZECHANGED = "FengGUI_Event_MinSizeChanged"; + public static final String EVENT_SIZECHANGED = "FengGUI_Event_SizeChanged"; + public static final String EVENT_POSITIONCHANGED = "FengGUI_Event_PositionChanged"; + public static final String EVENT_FOCUSCHANGED = "FengGUI_Event_FocusChanged"; + public static final String EVENT_ACTIVATED = "FengGUI_Event_Activated"; + public static final String EVENT_KEY = "FengGUI_Event_Key"; + public static final String EVENT_MOUSE = "FengGUI_Event_Mouse"; + /** * Returns the layout data associated with this widget. LayoutManagers will use * this data to correctly layout the widget within the container. Modified: src/org/fenggui/ObservableLabelWidget.java =================================================================== --- src/org/fenggui/ObservableLabelWidget.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/ObservableLabelWidget.java 2009-08-11 20:55:24 UTC (rev 656) @@ -130,7 +130,7 @@ */ protected void onEventFired(String eventType, SizeChangedEvent event) { - if (eventType.equals(Widget.EVENT_SIZECHANGED)) + if (eventType.equals(IWidget.EVENT_SIZECHANGED)) textData.adaptChange(getAppearance().getContentWidth(), getAppearance().getContentHeight(), getAppearance()); super.onEventFired(eventType, event); } Modified: src/org/fenggui/ProgressBar.java =================================================================== --- src/org/fenggui/ProgressBar.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/ProgressBar.java 2009-08-11 20:55:24 UTC (rev 656) @@ -140,7 +140,7 @@ public void onEventFired(String eventType, SizeChangedEvent event) { super.onEventFired(eventType, event); - if (eventType.equals(Widget.EVENT_SIZECHANGED)) + if (eventType.equals(IWidget.EVENT_SIZECHANGED)) textData.adaptChange(appearance.getContentWidth(), appearance.getContentHeight(), appearance); } } Modified: src/org/fenggui/ScrollContainer.java =================================================================== --- src/org/fenggui/ScrollContainer.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/ScrollContainer.java 2009-08-11 20:55:24 UTC (rev 656) @@ -513,7 +513,7 @@ this.innerWidget.addedToWidgetTree(); //hook events - innerWidget.addEventListener(Widget.EVENT_SIZECHANGED, this.sizeChangedListener); + innerWidget.addEventListener(IWidget.EVENT_SIZECHANGED, this.sizeChangedListener); //scroll to origin point this.scrollHorizontal(0.0d); @@ -898,7 +898,7 @@ { if (innerWidget != null) { - this.innerWidget.removeEventListener(Widget.EVENT_SIZECHANGED, this.sizeChangedListener); + this.innerWidget.removeEventListener(IWidget.EVENT_SIZECHANGED, this.sizeChangedListener); this.innerWidget.removedFromWidgetTree(); this.innerWidget.setParent(null); if (getDisplay() != null) Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/Widget.java 2009-08-11 20:55:24 UTC (rev 656) @@ -61,29 +61,21 @@ */ public class Widget implements IWidget { + private static final String EVENT_METHODNAME = "onEventFired"; - //Event Key definitions - public static final String EVENT_MINSIZECHANGED = "FengGUI_Event_MinSizeChanged"; - public static final String EVENT_SIZECHANGED = "FengGUI_Event_SizeChanged"; - public static final String EVENT_POSITIONCHANGED = "FengGUI_Event_PositionChanged"; - public static final String EVENT_FOCUSCHANGED = "FengGUI_Event_FocusChanged"; - public static final String EVENT_ACTIVATED = "FengGUI_Event_Activated"; - public static final String EVENT_KEY = "FengGUI_Event_Key"; - public static final String EVENT_MOUSE = "FengGUI_Event_Mouse"; - private Dimension size; private Dimension minSize; private boolean shrinkable; private boolean expandable; private boolean visible; private boolean enabled; - private Map<String, Object> data = null; + private Map<String, Object> data = null; private Map<String, java.util.List<IGenericEventListener>> eventHooks; /** * The parent Container in which the Widget lays. */ - private IBasicContainer parent = null; + private IBasicContainer parent = null; /** * Position of the Widget in the coordinate system of the parent @@ -95,7 +87,7 @@ * Layout Data that is associated with this Widget. Layout data is * required by the layout managers to know how to layout a Widget. */ - private ILayoutData layoutData = null; + private ILayoutData layoutData = null; /** * Creates a new widget. @@ -705,23 +697,42 @@ // //makes catching events on widgets simple and doesn't //require to register a listener. - + Class<?> clazz = this.getClass(); Method method = null; if (clazz != null) { //search for right method on classes of widget - while (!clazz.equals(Widget.class) && method == null) + while (!(clazz == Widget.class) && method == null) { - try + Method[] methods = clazz.getDeclaredMethods(); + for (Method m : methods) { - method = clazz.getDeclaredMethod("onEventFired", String.class, eventObject.getClass()); + if (m.getName().equals(EVENT_METHODNAME)) + { + Class<?>[] params = m.getParameterTypes(); + if (params.length == 2) + { + if (params[0].equals(String.class) && params[1].equals(eventObject.getClass())) + { + method = m; + break; + } + } + } } - catch (Exception e) - { - clazz = clazz.getSuperclass(); - } + clazz = clazz.getSuperclass(); + + // //slow + // try + // { + // method = clazz.getDeclaredMethod("onEventFired", String.class, eventObject.getClass()); + // } + // catch (Exception e) + // { + // clazz = clazz.getSuperclass(); + // } } } @@ -734,7 +745,7 @@ } catch (Exception e) { - + Log.error("Couldn't call method to trigger event."); } } else Modified: src/org/fenggui/actor/KeepOnWidgetActor.java =================================================================== --- src/org/fenggui/actor/KeepOnWidgetActor.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/actor/KeepOnWidgetActor.java 2009-08-11 20:55:24 UTC (rev 656) @@ -20,7 +20,6 @@ package org.fenggui.actor; import org.fenggui.IWidget; -import org.fenggui.Widget; import org.fenggui.event.Event; import org.fenggui.event.IGenericEventListener; import org.fenggui.util.Alignment; @@ -63,8 +62,8 @@ positionWidget(KeepOnWidgetActor.this.widget); } }; - this.target.addEventListener(Widget.EVENT_SIZECHANGED, sizeListener); - this.target.addEventListener(Widget.EVENT_POSITIONCHANGED, positionListener); + this.target.addEventListener(IWidget.EVENT_SIZECHANGED, sizeListener); + this.target.addEventListener(IWidget.EVENT_POSITIONCHANGED, positionListener); } /* @@ -118,8 +117,8 @@ { if (target != null) { - target.removeEventListener(Widget.EVENT_SIZECHANGED, sizeListener); - target.removeEventListener(Widget.EVENT_POSITIONCHANGED, positionListener); + target.removeEventListener(IWidget.EVENT_SIZECHANGED, sizeListener); + target.removeEventListener(IWidget.EVENT_POSITIONCHANGED, positionListener); target = null; } } Modified: src/org/fenggui/actor/StaticTooltipActor.java =================================================================== --- src/org/fenggui/actor/StaticTooltipActor.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/actor/StaticTooltipActor.java 2009-08-11 20:55:24 UTC (rev 656) @@ -23,7 +23,6 @@ import org.fenggui.Display; import org.fenggui.IContainer; import org.fenggui.IWidget; -import org.fenggui.Widget; import org.fenggui.event.Event; import org.fenggui.event.FocusEvent; import org.fenggui.event.IGenericEventListener; @@ -106,8 +105,8 @@ if (fevent.isFocusLost()) { hideTooltip(); - lastWidget.removeEventListener(Widget.EVENT_POSITIONCHANGED, positionListener); - lastWidget.removeEventListener(Widget.EVENT_SIZECHANGED, sizeListener); + lastWidget.removeEventListener(IWidget.EVENT_POSITIONCHANGED, positionListener); + lastWidget.removeEventListener(IWidget.EVENT_SIZECHANGED, sizeListener); lastWidget = null; } @@ -116,8 +115,8 @@ if (tooltip != null && tooltip.isInWidgetTree()) hideTooltip(); lastWidget = fevent.getOriginalSource(); - lastWidget.addEventListener(Widget.EVENT_POSITIONCHANGED, positionListener); - lastWidget.addEventListener(Widget.EVENT_SIZECHANGED, sizeListener); + lastWidget.addEventListener(IWidget.EVENT_POSITIONCHANGED, positionListener); + lastWidget.addEventListener(IWidget.EVENT_SIZECHANGED, sizeListener); showTooltip(lastWidget); } } Modified: src/org/fenggui/binding/render/Graphics.java =================================================================== --- src/org/fenggui/binding/render/Graphics.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/binding/render/Graphics.java 2009-08-11 20:55:24 UTC (rev 656) @@ -58,7 +58,7 @@ private class ClipSpaces { - private ArrayList<Rectangle> clips = new ArrayList<Rectangle>(); + private ArrayList<Rectangle> clips = new ArrayList<Rectangle>(30); public Rectangle getClipSpace() { @@ -895,19 +895,19 @@ gl.startQuads(); // lower left corner - setColor(c1.getRed(), c1.getGreen(), c1.getBlue(), c1.getAlpha()); + setColor(c1); gl.vertex(x, y); // upper left corner - setColor(c4.getRed(), c4.getGreen(), c4.getBlue(), c4.getAlpha()); + setColor(c4); gl.vertex(x, y + height); // upper right corner - setColor(c3.getRed(), c3.getGreen(), c3.getBlue(), c3.getAlpha()); + setColor(c3); gl.vertex(x + width, y + height); // lower right corner - setColor(c2.getRed(), c2.getGreen(), c2.getBlue(), c2.getAlpha()); + setColor(c2); gl.vertex(x + width, y); gl.end(); Modified: src/org/fenggui/composite/Window.java =================================================================== --- src/org/fenggui/composite/Window.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/composite/Window.java 2009-08-11 20:55:24 UTC (rev 656) @@ -295,6 +295,7 @@ { boolean flagX = true; boolean flagY = true; + UseXY flag = null; int height = Window.this.getHeight(); int width = Window.this.getWidth(); @@ -303,7 +304,7 @@ { case EAST: flagX = Window.this.setCheckedWidth(width + x - oldX); - flagY = Window.this.setCheckedHeight(height); + // flagY = Window.this.setCheckedHeight(height); break; case NORTH: flagY = Window.this.setCheckedHeight(height + y - oldY); @@ -314,27 +315,34 @@ Window.this.move(0, y - oldY); break; case NORTH_EAST: - flagX = Window.this.setCheckedWidth(width + x - oldX); - flagY = Window.this.setCheckedHeight(height + y - oldY); + flag = setCheckedSize(width + x - oldX, height + y - oldY); + // flagX = Window.this.setCheckedWidth(width + x - oldX); + // flagY = Window.this.setCheckedHeight(height + y - oldY); break; case NORTH_WEST: - flagX = Window.this.setCheckedWidth(width - x + oldX); - if (flagX) + flag = setCheckedSize(width - x + oldX, height + y - oldY); + + // flagX = Window.this.setCheckedWidth(width - x + oldX); + // flagY = Window.this.setCheckedHeight(height + y - oldY); + if (flag.flagX) Window.this.move(x - oldX, 0); - flagY = Window.this.setCheckedHeight(height + y - oldY); break; case SOUTH_WEST: - flagX = setCheckedWidth(width - x + oldX); - flagY = Window.this.setCheckedHeight(height - y + oldY); - if (flagX) + flag = setCheckedSize(width - x + oldX, height - y + oldY); + + // flagX = setCheckedWidth(width - x + oldX); + // flagY = Window.this.setCheckedHeight(height - y + oldY); + if (flag.flagX) Window.this.move(x - oldX, 0); - if (flagY) + if (flag.flagY) Window.this.move(0, y - oldY); break; case SOUTH_EAST: - flagX = Window.this.setCheckedWidth(width + x - oldX); - flagY = Window.this.setCheckedHeight(height - y + oldY); - if (flagY) + flag = setCheckedSize(width + x - oldX, height - y + oldY); + + // flagX = Window.this.setCheckedWidth(width + x - oldX); + // flagY = Window.this.setCheckedHeight(height - y + oldY); + if (flag.flagY) Window.this.move(0, y - oldY); break; case WEST: @@ -348,6 +356,11 @@ layout(); + if (flag != null) + { + flagX = flag.flagX; + flagY = flag.flagY; + } if (flagX) oldX = x; if (flagY) @@ -368,6 +381,73 @@ } } + private static final class UseXY + { + public boolean flagX = false; + public boolean flagY = false; + } + + private UseXY setCheckedSize(int width, int height) + { + UseXY flag = new UseXY(); + + int oldHeight = getHeight(); + int oldWidth = getWidth(); + int newHeight, newWidth; + + if (width >= getMinWidth()) + { + newWidth = width; + flag.flagX = true; + } + else + { + newWidth = getMinWidth(); + } + + if (height >= getMinHeight()) + { + newHeight = height; + flag.flagY = true; + } + else + { + newHeight = getMinHeight(); + } + + this.setSize(newWidth, newHeight); + + if (getWidth() != oldWidth || getHeight() != oldHeight) + {//If the width changed + fireResizedEvent(oldWidth, oldHeight); + } + + return flag; + } + + private boolean setCheckedHeight(int height) + { + boolean flag; + int oldHeight = getHeight(); + + if (height >= getMinHeight()) + { + setHeight(height); + flag = true; + } + else + { + setHeight(getMinHeight()); + flag = false; + } + + if (getHeight() != oldHeight) + {//If the width changed + fireResizedEvent(getWidth(), oldHeight); + } + return flag; + } + private boolean setCheckedWidth(int width) { boolean flag; @@ -469,29 +549,6 @@ } } - private boolean setCheckedHeight(int height) - { - boolean flag; - int oldHeight = getHeight(); - - if (height >= getMinHeight()) - { - setHeight(height); - flag = true; - } - else - { - setHeight(getMinHeight()); - flag = false; - } - - if (getHeight() != oldHeight) - {//If the width changed - fireResizedEvent(getWidth(), oldHeight); - } - return flag; - } - public void onEventFired(String eventType, MouseMovedEvent mm) { if (!isResizable()) Modified: src/org/fenggui/composite/menu/Menu.java =================================================================== --- src/org/fenggui/composite/menu/Menu.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/composite/menu/Menu.java 2009-08-11 20:55:24 UTC (rev 656) @@ -25,7 +25,6 @@ import org.fenggui.Display; import org.fenggui.IWidget; import org.fenggui.ObservableWidget; -import org.fenggui.Widget; import org.fenggui.appearance.EntryAppearance; import org.fenggui.binding.render.Graphics; import org.fenggui.event.IMenuClosedListener; @@ -107,7 +106,7 @@ super.onEventFired(eventType, mouseDraggedEvent); - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mouseDraggedEvent.getOriginalSource(), + this.fireEvent(IWidget.EVENT_MOUSE, new MouseMovedEvent(true, mouseDraggedEvent.getOriginalSource(), mouseDraggedEvent.getDisplayX(), mouseDraggedEvent.getDisplayY(), mouseDraggedEvent.getMouseButtonTracker(), mouseDraggedEvent.getKeyTracker())); isDragging = true; @@ -160,7 +159,7 @@ MousePressedEvent event = new MousePressedEvent(true, Menu.this, mouseReleasedEvent.getDisplayX(), mouseReleasedEvent.getDisplayY(), mouseReleasedEvent.getButton(), mouseReleasedEvent.getMouseButtonTracker(), mouseReleasedEvent.getKeyTracker()); - this.fireEvent(Widget.EVENT_MOUSE, event); + this.fireEvent(IWidget.EVENT_MOUSE, event); isDragging = false; } } @@ -192,7 +191,7 @@ getDisplay().setFocusedWidget((IWidget) getPreviousMenu()); if (getPreviousMenu() instanceof MenuBar) { - getPreviousMenu().fireEvent(Widget.EVENT_KEY, keyPressedEvent); + getPreviousMenu().fireEvent(IWidget.EVENT_KEY, keyPressedEvent); } else { @@ -217,7 +216,7 @@ if (m instanceof MenuBar) { getDisplay().setFocusedWidget((IWidget) m); - getDisplay().getFocusedWidget().fireEvent(Widget.EVENT_KEY, keyPressedEvent); + getDisplay().getFocusedWidget().fireEvent(IWidget.EVENT_KEY, keyPressedEvent); } } Modified: src/org/fenggui/composite/menu/MenuBar.java =================================================================== --- src/org/fenggui/composite/menu/MenuBar.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/composite/menu/MenuBar.java 2009-08-11 20:55:24 UTC (rev 656) @@ -21,8 +21,8 @@ import java.io.IOException; import java.util.LinkedList; +import org.fenggui.IWidget; import org.fenggui.StandardWidget; -import org.fenggui.Widget; import org.fenggui.appearance.EntryAppearance; import org.fenggui.binding.render.Graphics; import org.fenggui.event.IMenuClosedListener; @@ -202,7 +202,7 @@ protected void onEventFired(String eventType, MouseDraggedEvent mp) { - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mp.getOriginalSource(), mp.getDisplayX(), mp + this.fireEvent(IWidget.EVENT_MOUSE, new MouseMovedEvent(true, mp.getOriginalSource(), mp.getDisplayX(), mp .getDisplayY(), mp.getMouseButtonTracker(), mp.getKeyTracker())); super.onEventFired(eventType, mp); Modified: src/org/fenggui/decorator/border/PlainBorder.java =================================================================== --- src/org/fenggui/decorator/border/PlainBorder.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/decorator/border/PlainBorder.java 2009-08-11 20:55:24 UTC (rev 656) @@ -146,7 +146,7 @@ { IOpenGL gl = g.getOpenGL(); - g.setColor(color.getRed(), color.getGreen(), color.getBlue(), color.getAlpha()); + g.setColor(color); int globalX = localX + g.getTranslation().getX(); int globalY = localY + g.getTranslation().getY(); Modified: src/org/fenggui/event/TextCursorMovedEvent.java =================================================================== --- src/org/fenggui/event/TextCursorMovedEvent.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/event/TextCursorMovedEvent.java 2009-08-11 20:55:24 UTC (rev 656) @@ -19,7 +19,7 @@ */ package org.fenggui.event; -import org.fenggui.Widget; +import org.fenggui.IWidget; public class TextCursorMovedEvent extends WidgetEvent { @@ -34,7 +34,7 @@ private int newIndex; private boolean select; - public TextCursorMovedEvent(Widget source, int direction, int newIndex, boolean select) + public TextCursorMovedEvent(IWidget source, int direction, int newIndex, boolean select) { super(null, source); this.direction = direction; Modified: src/org/fenggui/layout/FormAttachment.java =================================================================== --- src/org/fenggui/layout/FormAttachment.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/layout/FormAttachment.java 2009-08-11 20:55:24 UTC (rev 656) @@ -19,7 +19,7 @@ */ package org.fenggui.layout; -import org.fenggui.Widget; +import org.fenggui.IWidget; /** * Describes where to place Widgets when using FormLayout. @@ -33,7 +33,7 @@ { private int offset; - private Widget attachedWidget = null; + private IWidget attachedWidget = null; private int numerator = 0; /** @@ -41,7 +41,7 @@ * @param w attaches to the Widget * @param offset leave gap */ - public FormAttachment(Widget w, int offset) + public FormAttachment(IWidget w, int offset) { attachedWidget = w; if (attachedWidget == null) @@ -66,7 +66,7 @@ this.offset = offset; } - protected Widget getAttachedWidget() + protected IWidget getAttachedWidget() { return attachedWidget; } Modified: src/org/fenggui/layout/FormLayout.java =================================================================== --- src/org/fenggui/layout/FormLayout.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/layout/FormLayout.java 2009-08-11 20:55:24 UTC (rev 656) @@ -228,7 +228,7 @@ if (fd.left != null && !fd.left.isStatic()) { - int rightSideOfAttachedWidget = fd.left.getAttachedWidget().getX() + fd.left.getAttachedWidget().getWidth() + int rightSideOfAttachedWidget = fd.left.getAttachedWidget().getX() + fd.left.getAttachedWidget().getSize().getWidth() + fd.left.getOffset(); if (fd.right == null) @@ -255,7 +255,7 @@ if (fd.bottom != null && !fd.bottom.isStatic()) { - int topSideOfAttachedWidget = fd.bottom.getAttachedWidget().getY() + fd.bottom.getAttachedWidget().getHeight() + int topSideOfAttachedWidget = fd.bottom.getAttachedWidget().getY() + fd.bottom.getAttachedWidget().getSize().getHeight() + fd.bottom.getOffset(); if (fd.top == null) Modified: src/org/fenggui/layout/RowExLayout.java =================================================================== --- src/org/fenggui/layout/RowExLayout.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/layout/RowExLayout.java 2009-08-11 20:55:24 UTC (rev 656) @@ -292,8 +292,7 @@ */ private void computeIndividualSpace(Container container, List<IWidget> widgets, int spaceLeft) { - double maxWeight = computeMaxWeight(widgets); - double sizeUnified = spaceLeft / maxWeight; + double sizeUnified = spaceLeft / computeMaxWeight(widgets); for (IWidget widget : widgets) { Modified: src/org/fenggui/layout/RowLayout.java =================================================================== --- src/org/fenggui/layout/RowLayout.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/layout/RowLayout.java 2009-08-11 20:55:24 UTC (rev 656) @@ -104,9 +104,8 @@ setValidSize(w, (int) freeSpacePerComp + getValidMinWidth(w), container.getAppearance().getContentHeight()); - w.setX(x); + w.setXY(x, container.getAppearance().getContentHeight() / 2 - w.getSize().getHeight() / 2); x += w.getSize().getWidth(); - w.setY(container.getAppearance().getContentHeight() / 2 - w.getSize().getHeight() / 2); } else { @@ -114,9 +113,8 @@ setValidSize(w, container.getAppearance().getContentWidth(), (int) freeSpacePerComp + getValidMinHeight(w)); - w.setY(y); + w.setXY(container.getAppearance().getContentWidth() / 2 - w.getSize().getWidth() / 2, y); y += w.getSize().getHeight(); - w.setX(container.getAppearance().getContentWidth() / 2 - w.getSize().getWidth() / 2); } } Modified: src/org/fenggui/util/Rectangle.java =================================================================== --- src/org/fenggui/util/Rectangle.java 2009-08-11 16:40:54 UTC (rev 655) +++ src/org/fenggui/util/Rectangle.java 2009-08-11 20:55:24 UTC (rev 656) @@ -70,17 +70,13 @@ public Rectangle getIntersection(Rectangle rect) { - int x = Math.max(rect.getX(), this.getX()); - int y = Math.max(rect.getY(), this.getY()); - int w = Math.min(rect.getX() + rect.getWidth(), this.getX() + this.getWidth()) - Math.max(rect.getX(), this.getX()); - int h = Math.min(rect.getY() + rect.getHeight(), this.getY() + this.getHeight()) - Math.max(rect.getY(), this.getY()); if (w <= 0 || h <= 0) return null; - return new Rectangle(x, y, w, h); + return new Rectangle(Math.max(rect.getX(), this.getX()), Math.max(rect.getY(), this.getY()), w, h); } @@ -196,6 +192,5 @@ { return (Rectangle) super.clone(); } - - + } Modified: test/org/fenggui/example/Everything.java =================================================================== --- test/org/fenggui/example/Everything.java 2009-08-11 16:40:54 UTC (rev 655) +++ test/org/fenggui/example/Everything.java 2009-08-11 20:55:24 UTC (rev 656) @@ -27,7 +27,6 @@ import org.fenggui.Container; import org.fenggui.Display; import org.fenggui.FengGUI; -import org.fenggui.FG; import org.fenggui.IWidget; import org.fenggui.Label; import org.fenggui.ScrollContainer; @@ -469,7 +468,7 @@ //add better font if (teleType == null) { - Widget wid = new Widget() + IWidget wid = new Widget() { public void paint(Graphics g) @@ -504,7 +503,7 @@ private void buildExampleGUIinRenderThread(final IExample example) { - Widget w = new Widget() + IWidget w = new Widget() { public void paint(Graphics g) @@ -564,7 +563,7 @@ private void loadTheme(final String filename, final boolean noTheme) { display.removeAllWidgets(); - Widget w = new Widget() + IWidget w = new Widget() { @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-11 16:41:01
|
Revision: 655 http://fenggui.svn.sourceforge.net/fenggui/?rev=655&view=rev Author: marcmenghin Date: 2009-08-11 16:40:54 +0000 (Tue, 11 Aug 2009) Log Message: ----------- - fix for enter and exit events on widgets - fixed wrong eventkeys in ObservalbeWidget (thx pjt33) Modified Paths: -------------- src/org/fenggui/Display.java src/org/fenggui/ObservableWidget.java Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-08-10 22:57:36 UTC (rev 654) +++ src/org/fenggui/Display.java 2009-08-11 16:40:54 UTC (rev 655) @@ -612,25 +612,41 @@ return event; // w points to a different Widget than before! - if (!mouseOverWidget.equals(w)) + if (mouseOverWidget != null && !mouseOverWidget.equals(w)) { MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, displayX, displayY, mouseTracker, keyTracker); mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); - MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, displayX, displayY, - mouseTracker, keyTracker); if (w != null) + { + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, displayX, displayY, + mouseTracker, keyTracker); + + mouseOverWidget = w; + w.fireEvent(EVENT_MOUSE, entered); - fireGlobalEventListener(entered); + fireGlobalEventListener(entered); + } } + else + { + if (mouseOverWidget == null && w != null) + { + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, displayX, displayY, + mouseTracker, keyTracker); + mouseOverWidget = w; + + w.fireEvent(EVENT_MOUSE, entered); + fireGlobalEventListener(entered); + } + } + if (w != null) w.fireEvent(Widget.EVENT_MOUSE, event); - mouseOverWidget = w; - return event; } Modified: src/org/fenggui/ObservableWidget.java =================================================================== --- src/org/fenggui/ObservableWidget.java 2009-08-10 22:57:36 UTC (rev 654) +++ src/org/fenggui/ObservableWidget.java 2009-08-11 16:40:54 UTC (rev 655) @@ -382,7 +382,7 @@ public void addFocusListener(final IFocusListener l) { - addEventListener(EVENT_MINSIZECHANGED, new IGenericEventListener() + addEventListener(EVENT_FOCUSCHANGED, new IGenericEventListener() { private IFocusListener listener = l; @@ -423,7 +423,7 @@ public void addActivationListener(final IActivationListener l) { - addEventListener(EVENT_MINSIZECHANGED, new IGenericEventListener() + addEventListener(EVENT_ACTIVATED, new IGenericEventListener() { private IActivationListener listener = l; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-10 22:57:46
|
Revision: 654 http://fenggui.svn.sourceforge.net/fenggui/?rev=654&view=rev Author: marcmenghin Date: 2009-08-10 22:57:36 +0000 (Mon, 10 Aug 2009) Log Message: ----------- - auto-generate events as possible (keyTyped, clicked, double-clicked events are generated now by fenggui). should simplify writing of a binding. Modified Paths: -------------- optional/org/fenggui/FG.java optional/org/fenggui/composite/table/Table.java optional/org/fenggui/composite/tree/Tree.java src/org/fenggui/Button.java src/org/fenggui/Container.java src/org/fenggui/Display.java src/org/fenggui/FengGUI.java src/org/fenggui/TextEditor.java src/org/fenggui/Widget.java src/org/fenggui/binding/render/jogl/EventBinding.java src/org/fenggui/composite/menu/Menu.java src/org/fenggui/composite/menu/MenuBar.java src/org/fenggui/event/InputEvent.java src/org/fenggui/event/key/KeyEvent.java src/org/fenggui/event/key/KeyPressedEvent.java src/org/fenggui/event/key/KeyReleasedEvent.java src/org/fenggui/event/key/KeyTypedEvent.java src/org/fenggui/event/mouse/MouseClickedEvent.java src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java src/org/fenggui/event/mouse/MouseDraggedEvent.java src/org/fenggui/event/mouse/MouseEnteredEvent.java src/org/fenggui/event/mouse/MouseEvent.java src/org/fenggui/event/mouse/MouseExitedEvent.java src/org/fenggui/event/mouse/MouseMovedEvent.java src/org/fenggui/event/mouse/MousePressedEvent.java src/org/fenggui/event/mouse/MouseReleasedEvent.java src/org/fenggui/event/mouse/MouseWheelEvent.java test/org/fenggui/example/ButtonExample.java test/org/fenggui/example/ExampleBasisLWJGL.java test/org/fenggui/example/MouseTestJOGL.java Added Paths: ----------- src/org/fenggui/util/KeyTracker.java src/org/fenggui/util/MouseButtonTracker.java Removed Paths: ------------- src/org/fenggui/KeyPressTracker.java Modified: optional/org/fenggui/FG.java =================================================================== --- optional/org/fenggui/FG.java 2009-08-09 10:19:50 UTC (rev 653) +++ optional/org/fenggui/FG.java 2009-08-10 22:57:36 UTC (rev 654) @@ -33,17 +33,11 @@ */ public class FG { - - private static boolean singleInit = false; - //Optional prototypes public static org.fenggui.composite.tab.TabItem ptTabItem = null; - public static void initOptional() + static { - //add stuff to XML theming - if (!singleInit) - { XMLTheme.TYPE_REGISTRY.register(SnappingSlider.class); XMLTheme.TYPE_REGISTRY.register("Tab", org.fenggui.composite.tab.TabContainer.class); XMLTheme.TYPE_REGISTRY.register(org.fenggui.composite.tab.TabItem.class); @@ -52,11 +46,6 @@ XMLTheme.TYPE_REGISTRY.register(Tree.class); XMLTheme.TYPE_REGISTRY.register(Table.class); XMLTheme.TYPE_REGISTRY.register(TextView.class); - - singleInit = true; - } - - createTabItem(); } public static Button createButton(String text) Modified: optional/org/fenggui/composite/table/Table.java =================================================================== --- optional/org/fenggui/composite/table/Table.java 2009-08-09 10:19:50 UTC (rev 653) +++ optional/org/fenggui/composite/table/Table.java 2009-08-10 22:57:36 UTC (rev 654) @@ -392,7 +392,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - public void onEventFired(String eventType, MouseClickedEvent event) + protected void onEventFired(String eventType, MouseClickedEvent event) { if (hoveredRow != null) selectionGroup.setSelected(this, hoveredRow, true); @@ -403,7 +403,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseMoved(int, int) */ - public void onEventFired(String eventType, MouseMovedEvent mm) + protected void onEventFired(String eventType, MouseMovedEvent mm) { hoveredRow = this.isOnColumn(mm.getLocalY(this)); @@ -437,7 +437,7 @@ * @author Marc Menghin, last edited by $Author$, $Date$ * @version $Revision$ */ - private class TableRow implements IToggable<TableRow> + private static final class TableRow implements IToggable<TableRow> { public List<Item> items; public Item hoveredItem; Modified: optional/org/fenggui/composite/tree/Tree.java =================================================================== --- optional/org/fenggui/composite/tree/Tree.java 2009-08-09 10:19:50 UTC (rev 653) +++ optional/org/fenggui/composite/tree/Tree.java 2009-08-10 22:57:36 UTC (rev 654) @@ -178,7 +178,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseMoved(int, int) */ - public void onEventFired(String eventType, MouseMovedEvent mm) + protected void onEventFired(String eventType, MouseMovedEvent mm) { if (getRoot() != null) { @@ -199,7 +199,7 @@ /* (non-Javadoc) * @see org.fenggui.Widget#sizeChanged(org.fenggui.event.SizeChangedEvent) */ - public void onEventFired(String eventType, SizeChangedEvent event) + protected void onEventFired(String eventType, SizeChangedEvent event) { super.onEventFired(eventType, event); @@ -211,7 +211,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - public void onEventFired(String eventType, MouseClickedEvent event) + protected void onEventFired(String eventType, MouseClickedEvent event) { if (hoveredItem != null) { @@ -225,7 +225,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) */ - public void onEventFired(String eventType, MouseDoubleClickedEvent event) + protected void onEventFired(String eventType, MouseDoubleClickedEvent event) { if (hoveredItem != null) { Modified: src/org/fenggui/Button.java =================================================================== --- src/org/fenggui/Button.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/Button.java 2009-08-10 22:57:36 UTC (rev 654) @@ -166,7 +166,7 @@ { if (e.getKey() == ' ' || e.getKeyClass() == Key.ENTER) { - released(e.getModifiers()); + released(e.getKeyTracker().getModifiers()); e.setUsed(); } } @@ -201,7 +201,7 @@ { if (Button.this == mouseReleasedEvent.getOriginalSource()) { - released(mouseReleasedEvent.getModifiers()); + released(mouseReleasedEvent.getKeyTracker().getModifiers()); mouseReleasedEvent.setUsed(); } } Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/Container.java 2009-08-10 22:57:36 UTC (rev 654) @@ -902,7 +902,7 @@ { super.fireEvent(eventType, eventObject); - if (eventObject instanceof LeafeTraversingEvent && !eventObject.isAlreadyUsed()) + if (eventObject instanceof LeafeTraversingEvent) { for (IWidget widget : notifyList) { Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/Display.java 2009-08-10 22:57:36 UTC (rev 654) @@ -22,6 +22,7 @@ import java.io.IOException; import java.util.ArrayList; import java.util.concurrent.CopyOnWriteArrayList; +import java.util.concurrent.TimeUnit; import org.fenggui.binding.render.Binding; import org.fenggui.binding.render.Graphics; @@ -58,6 +59,8 @@ import org.fenggui.theme.xml.InputOutputStream; import org.fenggui.tooltip.ITooltipManager; import org.fenggui.util.Dimension; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * Root of the widget tree. The Display spans over the whole screen. Serves also as the @@ -72,10 +75,14 @@ private java.util.List<IDragAndDropListener> dndListeners = new ArrayList<IDragAndDropListener>(); private java.util.List<IGlobalEventListener> globalEventListener = new CopyOnWriteArrayList<IGlobalEventListener>(); + private KeyTracker keyTracker = new KeyTracker(); + private MouseButtonTracker mouseTracker = new MouseButtonTracker(); + private long lastClickTime = Long.MAX_VALUE; + private long doubleClickTime = TimeUnit.MILLISECONDS.toNanos(300); + private IWidget mouseOverWidget = this; private Binding binding = null; private boolean depthTestEnabled = false; - private KeyPressTracker keyPressTracker; /** Widget that is dragged (and dropped) */ // private Widget dndWidget = null; @@ -105,7 +112,6 @@ { if (binding == null) throw new IllegalArgumentException("binding = null"); - keyPressTracker = new KeyPressTracker(); this.binding = binding; this.setY(0); this.setX(0); @@ -346,16 +352,14 @@ * indicates double click, tripple click, etc. * @return true if GUI component within Display was hit, false otherwise */ - public MousePressedEvent fireMousePressedEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) + public MousePressedEvent fireMousePressedEvent(int mouseX, int mouseY, MouseButton mouseButton) { IWidget w = getWidget(mouseX, mouseY); + mouseTracker.setModifierPressed(mouseButton, w); + boolean hitUI = (w != null && this != w); - MousePressedEvent e = new MousePressedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); + MousePressedEvent e = new MousePressedEvent(hitUI, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); - if (!this.isEnabled()) - return e; - /* * Exceptional case for pop up shell. Pop up shells are opened by clickling on a menu * or combo box or so. If a second click does not fall in the pop up shell, the shell @@ -370,23 +374,20 @@ if (!this.equals(w)) { - IWidget targetWidget = w; - // Set the new focused widget - if (targetWidget.isTraversable() && !(targetWidget instanceof Container)) + if (w.isTraversable() && !(w instanceof Container)) { - setFocusedWidget(targetWidget); + setFocusedWidget(w); } w.fireEvent(Widget.EVENT_MOUSE, e); - fireGlobalEventListener(e); for (int i = 0; i < dndListeners.size(); i++) { IDragAndDropListener dndListener = dndListeners.get(i); if (dndListener.isDndWidget(w, mouseX, mouseY)) { - dndListener.select(mouseX, mouseY, keyPressTracker.getModifiers()); + dndListener.select(mouseX, mouseY, keyTracker.getModifiers()); draggingListener = dndListener; } } @@ -438,22 +439,26 @@ * @param clickCount * @return true if GUI component within Display was hit, false otherwise */ - public MouseReleasedEvent fireMouseReleasedEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) + public MouseReleasedEvent fireMouseReleasedEvent(int mouseX, int mouseY, MouseButton mouseButton) { + IWidget pressedWidget = mouseTracker.setModifierReleased(mouseButton); IWidget w = getWidget(mouseX, mouseY); + boolean hitUI = (w != null && this != w); - MouseReleasedEvent e = new MouseReleasedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, - keyPressTracker.getModifiers()); + MouseReleasedEvent e = new MouseReleasedEvent(hitUI, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); - if (!this.isEnabled()) - return e; - if (draggingListener != null) { - draggingListener.drop(mouseX, mouseY, w, keyPressTracker.getModifiers()); + draggingListener.drop(mouseX, mouseY, w, keyTracker.getModifiers()); draggingListener = null; } + //fire clicked event if released on same widget as pressed + if (w.equals(pressedWidget)) + { + fireMouseClickEvent(mouseX, mouseY, mouseButton, w); + } + if (w != null) { if (w.equals(this)) @@ -477,58 +482,50 @@ * the pressed mouse button * @return true if GUI component within Display was hit, false otherwise */ - public MouseDraggedEvent fireMouseDraggedEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) + public MouseDraggedEvent fireMouseDraggedEvent(int mouseX, int mouseY, MouseButton mouseButton) { IWidget w = getWidget(mouseX, mouseY); - MouseDraggedEvent e = new MouseDraggedEvent(w != null, w, mouseX, mouseY, mouseButton, keyPressTracker - .getModifiers()); + MouseDraggedEvent e = new MouseDraggedEvent(w != null, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); if (!this.isEnabled()) return e; if (draggingListener != null) { - draggingListener.drag(mouseX, mouseY, keyPressTracker.getModifiers()); + draggingListener.drag(mouseX, mouseY, keyTracker.getModifiers()); } if (!mouseOverWidget.equals(w)) { - MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, mouseX, mouseY, keyPressTracker - .getModifiers()); + MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, + keyTracker); mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); - MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, keyPressTracker - .getModifiers()); + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, mouseTracker, + keyTracker); w.fireEvent(Widget.EVENT_MOUSE, entered); fireGlobalEventListener(entered); } mouseOverWidget = w; if (w != null) - { - if (w.equals(this)) - return e; - w.fireEvent(EVENT_MOUSE, e); - } + fireGlobalEventListener(e); return e; } - public MouseDoubleClickedEvent fireMouseDoubleClickEvent(int mouseX, int mouseY, MouseButton mouseButton, - int clickCount) + public MouseDoubleClickedEvent fireMouseDoubleClickEvent(int mouseX, int mouseY, MouseButton mouseButton, IWidget w) { - IWidget w = getWidget(mouseX, mouseY); + if (w == null) + w = getWidget(mouseX, mouseY); - MouseDoubleClickedEvent e = new MouseDoubleClickedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, - keyPressTracker.getModifiers()); + MouseDoubleClickedEvent e = new MouseDoubleClickedEvent(w != null, w, mouseX, mouseY, mouseButton, mouseTracker, + keyTracker); - if (!this.isEnabled()) - return e; - if (w != null) w.fireEvent(EVENT_MOUSE, e); @@ -537,21 +534,26 @@ return e; } - public MouseClickedEvent fireMouseClickEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) + public MouseClickedEvent fireMouseClickEvent(int mouseX, int mouseY, MouseButton mouseButton, IWidget w) { - IWidget w = getWidget(mouseX, mouseY); + if (w == null) + w = getWidget(mouseX, mouseY); - MouseClickedEvent e = new MouseClickedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); + long delta = System.nanoTime() - lastClickTime; + lastClickTime = System.nanoTime(); - if (!this.isEnabled()) - return e; + MouseClickedEvent e = new MouseClickedEvent(w != null, w, mouseX, mouseY, mouseButton, mouseTracker, keyTracker); if (w != null) w.fireEvent(Widget.EVENT_MOUSE, e); fireGlobalEventListener(e); + if (delta <= doubleClickTime && delta > 0) + { + this.fireMouseDoubleClickEvent(mouseX, mouseY, mouseButton, w); + } + return e; } @@ -559,12 +561,9 @@ { IWidget w = getWidget(mouseX, mouseY); - MouseWheelEvent e = new MouseWheelEvent(w != null, w, mouseX, mouseY, up, rotation, scrollAmount, keyPressTracker - .getModifiers()); + MouseWheelEvent e = new MouseWheelEvent(w != null, w, mouseX, mouseY, up, rotation, scrollAmount, mouseTracker, + keyTracker); - if (!this.isEnabled()) - return null; - if (w != null) w.fireEvent(Widget.EVENT_MOUSE, e); @@ -603,31 +602,33 @@ */ public MouseMovedEvent fireMouseMovedEvent(int displayX, int displayY) { + // retrieve Widget below mouse cursor IWidget w = getWidget(displayX, displayY); - MouseMovedEvent event = new MouseMovedEvent(w != null, w, displayX, displayY, keyPressTracker.getModifiers()); + MouseMovedEvent event = new MouseMovedEvent(w != null, w, displayX, displayY, mouseTracker, keyTracker); if (!this.isEnabled()) return event; - if (w != null) - w.fireEvent(Widget.EVENT_MOUSE, event); - // w points to a different Widget than before! if (!mouseOverWidget.equals(w)) { - MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, displayX, displayY, keyPressTracker - .getModifiers()); + MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, displayX, displayY, mouseTracker, + keyTracker); mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, displayX, displayY, - keyPressTracker.getModifiers()); + mouseTracker, keyTracker); if (w != null) w.fireEvent(EVENT_MOUSE, entered); fireGlobalEventListener(entered); } + + if (w != null) + w.fireEvent(Widget.EVENT_MOUSE, event); + mouseOverWidget = w; return event; @@ -643,32 +644,29 @@ public KeyPressedEvent fireKeyPressedEvent(char keyValue, Key keyClass) { - KeyPressedEvent e = new KeyPressedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, - this.keyPressTracker.getModifiers()); + KeyPressedEvent e = new KeyPressedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, mouseTracker, + keyTracker); - if (!this.isEnabled()) - return e; + keyTracker.setModifierPressed(keyClass); - keyPressTracker.setModifierPressed(keyClass); - if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); fireGlobalEventListener(e); } + + fireKeyTypedEvent(keyValue); + return e; } public KeyReleasedEvent fireKeyReleasedEvent(char keyValue, Key keyClass) { - KeyReleasedEvent e = new KeyReleasedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, - this.keyPressTracker.getModifiers()); + KeyReleasedEvent e = new KeyReleasedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, mouseTracker, + keyTracker); - if (!this.isEnabled()) - return e; + keyTracker.setModifierReleased(keyClass); - keyPressTracker.setModifierReleased(keyClass); - if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); @@ -680,12 +678,8 @@ public KeyTypedEvent fireKeyTypedEvent(char keyValue) { - KeyTypedEvent e = new KeyTypedEvent(focusedWidget != null, focusedWidget, keyValue, this.keyPressTracker - .getModifiers()); + KeyTypedEvent e = new KeyTypedEvent(focusedWidget != null, focusedWidget, keyValue, mouseTracker, keyTracker); - if (!this.isEnabled()) - return e; - if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); @@ -828,11 +822,6 @@ this.enabled = enabled; } - public KeyPressTracker getKeyPressTracker() - { - return keyPressTracker; - } - /* (non-Javadoc) * @see org.fenggui.Container#getMinContentSize() */ @@ -843,4 +832,14 @@ return null; } + public void setDoubleClickTime(long time) + { + this.doubleClickTime = time; + } + + public long getDoubleClickTime() + { + return this.doubleClickTime; + } + } Modified: src/org/fenggui/FengGUI.java =================================================================== --- src/org/fenggui/FengGUI.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/FengGUI.java 2009-08-10 22:57:36 UTC (rev 654) @@ -46,7 +46,7 @@ private static ThemeStore theme = null; private static Map<String, ThemeStore> themeCache = null; - private static class ThemeStore + private static final class ThemeStore { ScrollBar ptScrollBarH = null; ScrollBar ptScrollBarV = null; Deleted: src/org/fenggui/KeyPressTracker.java =================================================================== --- src/org/fenggui/KeyPressTracker.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/KeyPressTracker.java 2009-08-10 22:57:36 UTC (rev 654) @@ -1,66 +0,0 @@ -/* - * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) - * - * Copyright (c) 2005-2009 FengGUI Project - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details: - * http://www.gnu.org/copyleft/lesser.html#TOC3 - * - * Created on 29.01.2008 - * $Id$ - */ -package org.fenggui; - -import java.util.HashSet; -import java.util.Set; - -import org.fenggui.event.key.Key; - -/** - * Instance of this class tracks states of modifier keys by listening keyup/keydown - * listeners. Its purpose is to provide (stupid) mechanism which will at any time know if - * some key is pressed or not. - * - * @author ivicaz, last edited by $Author$, $Date$ - * @version $Revision$ - */ -public class KeyPressTracker -{ - private Set<Key> modifiers; - - public KeyPressTracker() - { - modifiers = new HashSet<Key>(10); - } - - public boolean setModifierPressed(Key modifierPressed) - { - return modifiers.add(modifierPressed); - } - - public void setModifierReleased(Key modifierPressed) - { - modifiers.remove(modifierPressed); - } - - public boolean isPressed(Key key) - { - return modifiers.contains(key); - } - - public Set<Key> getModifiers() - { - // TODO Expensive. Some other way to prevent accessors from modifying original set? - // return new HashSet<Key>(modifiers); - //Maybe this is not even a bad thing. I would say that if he wants to change it its bad that he can't. - return modifiers; - } -} Modified: src/org/fenggui/TextEditor.java =================================================================== --- src/org/fenggui/TextEditor.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/TextEditor.java 2009-08-10 22:57:36 UTC (rev 654) @@ -267,29 +267,29 @@ if (e.getKey() == 'C') { e.setUsed(); - return textData.handleKeyPresses(Key.COPY, e.getModifiers(), getAppearance()); + return textData.handleKeyPresses(Key.COPY, e.getKeyTracker().getModifiers(), getAppearance()); } else if (e.getKey() == 'X') { e.setUsed(); - return textData.handleKeyPresses(Key.CUT, e.getModifiers(), getAppearance()); + return textData.handleKeyPresses(Key.CUT, e.getKeyTracker().getModifiers(), getAppearance()); } else if (e.getKey() == 'V') { e.setUsed(); - return textData.handleKeyPresses(Key.PASTE, e.getModifiers(), getAppearance()); + return textData.handleKeyPresses(Key.PASTE, e.getKeyTracker().getModifiers(), getAppearance()); } else { - return textData.handleKeyPresses(e.getKeyClass(), e.getModifiers(), getAppearance()); + return textData.handleKeyPresses(e.getKeyClass(), e.getKeyTracker().getModifiers(), getAppearance()); } } else { - return textData.handleKeyPresses(e.getKeyClass(), e.getModifiers(), getAppearance()); + return textData.handleKeyPresses(e.getKeyClass(), e.getKeyTracker().getModifiers(), getAppearance()); } default: - boolean result = textData.handleKeyPresses(e.getKeyClass(), e.getModifiers(), getAppearance()); + boolean result = textData.handleKeyPresses(e.getKeyClass(), e.getKeyTracker().getModifiers(), getAppearance()); //FIXME: textData should fire an event if its text changes if (result) { Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/Widget.java 2009-08-10 22:57:36 UTC (rev 654) @@ -697,7 +697,7 @@ */ public void fireEvent(final String eventType, final Event eventObject) { - if (this.isVisible() && this.isEnabled()) + if (this.isVisible() && this.isEnabled() && !eventObject.isAlreadyUsed()) { //handle widget internal events //search for special method with eventType @@ -757,7 +757,7 @@ // Log.warn(eventObject.getClass().getSimpleName() + " fired on " + this.getClass().getSimpleName() + " (" + this.hashCode() +")"); } - if (eventObject instanceof RootTraversingEvent && !eventObject.isAlreadyUsed()) + if (eventObject instanceof RootTraversingEvent) { if (this.getParent() != null) { Modified: src/org/fenggui/binding/render/jogl/EventBinding.java =================================================================== --- src/org/fenggui/binding/render/jogl/EventBinding.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/binding/render/jogl/EventBinding.java 2009-08-10 22:57:36 UTC (rev 654) @@ -69,7 +69,7 @@ */ public void keyTyped(KeyEvent e) { - display.fireKeyTypedEvent(e.getKeyChar()); + //do nothing ... generated by fenggui } /** @@ -106,8 +106,7 @@ */ public void mouseDragged(MouseEvent e) { - display.fireMouseDraggedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e), e - .getClickCount()); + display.fireMouseDraggedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e)); } /** @@ -125,13 +124,7 @@ */ public void mouseClicked(MouseEvent e) { - if (e.getClickCount() % 2 == 0) - display.fireMouseDoubleClickEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e), e - .getClickCount() / 2); - else - display.fireMouseClickEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e), e - .getClickCount()); - + //do nothing generated by fenggui } /** @@ -140,8 +133,7 @@ */ public void mousePressed(MouseEvent e) { - display.fireMousePressedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e), e - .getClickCount()); + display.fireMousePressedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e)); } /** @@ -150,8 +142,7 @@ */ public void mouseReleased(MouseEvent e) { - display.fireMouseReleasedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e), e - .getClickCount()); + display.fireMouseReleasedEvent(e.getX(), display.getHeight() - e.getY(), EventHelper.getMouseButton(e)); } /** Modified: src/org/fenggui/composite/menu/Menu.java =================================================================== --- src/org/fenggui/composite/menu/Menu.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/composite/menu/Menu.java 2009-08-10 22:57:36 UTC (rev 654) @@ -106,9 +106,10 @@ // so that the mouseOverIndex gets updated accordingly super.onEventFired(eventType, mouseDraggedEvent); - - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mouseDraggedEvent.getOriginalSource(), mouseDraggedEvent.getDisplayX(), - mouseDraggedEvent.getDisplayY(), mouseDraggedEvent.getModifiers())); + + this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mouseDraggedEvent.getOriginalSource(), + mouseDraggedEvent.getDisplayX(), mouseDraggedEvent.getDisplayY(), mouseDraggedEvent.getMouseButtonTracker(), + mouseDraggedEvent.getKeyTracker())); isDragging = true; } @@ -153,12 +154,12 @@ // when draggin, pretend that the mouse was pressed // to select the currently selected item super.onEventFired(eventType, mouseReleasedEvent); - + if (isDragging) { - MousePressedEvent event = new MousePressedEvent(true, Menu.this, mouseReleasedEvent.getDisplayX(), mouseReleasedEvent - .getDisplayY(), mouseReleasedEvent.getButton(), mouseReleasedEvent.getClickCount(), getDisplay() - .getKeyPressTracker().getModifiers()); + MousePressedEvent event = new MousePressedEvent(true, Menu.this, mouseReleasedEvent.getDisplayX(), + mouseReleasedEvent.getDisplayY(), mouseReleasedEvent.getButton(), mouseReleasedEvent.getMouseButtonTracker(), + mouseReleasedEvent.getKeyTracker()); this.fireEvent(Widget.EVENT_MOUSE, event); isDragging = false; } Modified: src/org/fenggui/composite/menu/MenuBar.java =================================================================== --- src/org/fenggui/composite/menu/MenuBar.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/composite/menu/MenuBar.java 2009-08-10 22:57:36 UTC (rev 654) @@ -191,10 +191,9 @@ * Thats why we give no widget the key focus when the user close the menu. */ if (getDisplay() != null) - getDisplay().setFocusedWidget(null); + getDisplay().setFocusedWidget(null); } - protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) { mouseOver = null; @@ -203,12 +202,12 @@ protected void onEventFired(String eventType, MouseDraggedEvent mp) { - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mp.getOriginalSource(), mp.getDisplayX(), mp.getDisplayY(), mp.getModifiers())); - + this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mp.getOriginalSource(), mp.getDisplayX(), mp + .getDisplayY(), mp.getMouseButtonTracker(), mp.getKeyTracker())); + super.onEventFired(eventType, mp); } - protected void onEventFired(String eventType, MouseMovedEvent mm) { int mouseX = mm.getLocalX(this); @@ -238,7 +237,7 @@ } super.onEventFired(eventType, mm); } - + protected void onEventFired(String eventType, KeyPressedEvent kpe) { if (items.size() == 0) @@ -270,10 +269,10 @@ return; openMenu(mouseOver.getMenu()); - + super.onEventFired(eventType, mp); } - + private void openMenuOfMenuBarItem(final MenuItem menuBarItem) { if (currentlyOpen != null) Modified: src/org/fenggui/event/InputEvent.java =================================================================== --- src/org/fenggui/event/InputEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/InputEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -20,6 +20,10 @@ package org.fenggui.event; import org.fenggui.IWidget; +import org.fenggui.event.key.Key; +import org.fenggui.event.mouse.MouseButton; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * @@ -28,18 +32,21 @@ */ public abstract class InputEvent extends RootTraversingEvent { + private KeyTracker keyTracker; + private MouseButtonTracker mouseTracker; + private boolean uiHit; - private boolean uiHit; - /** * @param hit * @param specialType * @param source */ - public InputEvent(boolean hit, String specialType, IWidget source) + public InputEvent(boolean hit, String specialType, IWidget source, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { super(specialType, source); this.uiHit = hit; + this.mouseTracker = mouseTracker; + this.keyTracker = keyTracker; } /** @@ -51,4 +58,24 @@ { return uiHit; } + + public boolean isPressed(Key key) + { + return this.keyTracker.isPressed(key); + } + + public boolean isPressed(MouseButton button) + { + return this.mouseTracker.isPressed(button); + } + + public KeyTracker getKeyTracker() + { + return this.keyTracker; + } + + public MouseButtonTracker getMouseButtonTracker() + { + return this.mouseTracker; + } } Modified: src/org/fenggui/event/key/KeyEvent.java =================================================================== --- src/org/fenggui/event/key/KeyEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/key/KeyEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,23 +19,21 @@ */ package org.fenggui.event.key; -import java.util.Set; - import org.fenggui.IWidget; import org.fenggui.event.InputEvent; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class KeyEvent extends InputEvent { private char key; private Key keyClass; - private Set<Key> modifiers; - public KeyEvent(boolean hit, String specialType, IWidget source, char key, Key keyClass, Set<Key> modifiers) + public KeyEvent(boolean hit, String specialType, IWidget source, char key, Key keyClass, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, specialType, source); + super(hit, specialType, source, mouseTracker, keyTracker); this.key = key; this.keyClass = keyClass; - this.modifiers = modifiers; } public char getKey() @@ -48,13 +46,4 @@ return keyClass; } - public boolean isPressed(Key key) - { - return modifiers.contains(key); - } - - public Set<Key> getModifiers() - { - return modifiers; - } } Modified: src/org/fenggui/event/key/KeyPressedEvent.java =================================================================== --- src/org/fenggui/event/key/KeyPressedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/key/KeyPressedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,16 +19,16 @@ */ package org.fenggui.event.key; -import java.util.Set; - import org.fenggui.IWidget; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class KeyPressedEvent extends KeyEvent { - public KeyPressedEvent(boolean hit, IWidget source, char key, Key keyClass, Set<Key> modifiers) + public KeyPressedEvent(boolean hit, IWidget source, char key, Key keyClass, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "KeyPressedEvent", source, key, keyClass, modifiers); + super(hit, "KeyPressedEvent", source, key, keyClass, mouseTracker, keyTracker); } } Modified: src/org/fenggui/event/key/KeyReleasedEvent.java =================================================================== --- src/org/fenggui/event/key/KeyReleasedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/key/KeyReleasedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,16 +19,16 @@ */ package org.fenggui.event.key; -import java.util.Set; - import org.fenggui.IWidget; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class KeyReleasedEvent extends KeyEvent { - public KeyReleasedEvent(boolean hit, IWidget source, char key, Key keyClass, Set<Key> modifiers) + public KeyReleasedEvent(boolean hit, IWidget source, char key, Key keyClass, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "KeyReleasedEvent", source, key, keyClass, modifiers); + super(hit, "KeyReleasedEvent", source, key, keyClass, mouseTracker, keyTracker); } } Modified: src/org/fenggui/event/key/KeyTypedEvent.java =================================================================== --- src/org/fenggui/event/key/KeyTypedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/key/KeyTypedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -17,16 +17,16 @@ */ package org.fenggui.event.key; -import java.util.Set; - import org.fenggui.IWidget; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class KeyTypedEvent extends KeyEvent { - public KeyTypedEvent(boolean hit, IWidget source, char key, Set<Key> modifiers) + public KeyTypedEvent(boolean hit, IWidget source, char key, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "KeyTypedEvent", source, key, Key.UNDEFINED, modifiers); + super(hit, "KeyTypedEvent", source, key, Key.UNDEFINED, mouseTracker, keyTracker); } } Modified: src/org/fenggui/event/mouse/MouseClickedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseClickedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseClickedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * @author Johannes Schaback ($Author: marcmenghin $) @@ -31,16 +30,15 @@ public class MouseClickedEvent extends MouseEvent { - private int displayX, displayY, clickCount; + private int displayX, displayY; private MouseButton button; - public MouseClickedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, int clickCount, Set<Key> modifiers) + public MouseClickedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseClickedEvent", source, modifiers); + super(hit, "MouseClickedEvent", source, mouseTracker, keyTracker); this.button = mouseButton; this.displayX = x; this.displayY = y; - this.clickCount = clickCount; } public MouseButton getButton() @@ -58,8 +56,4 @@ return displayY; } - public int getClickCount() - { - return clickCount; - } } \ No newline at end of file Modified: src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * @author Johannes Schaback ($Author: marcmenghin $) @@ -31,16 +30,15 @@ public class MouseDoubleClickedEvent extends MouseEvent { - private int displayX, displayY, clickCount; + private int displayX, displayY; private MouseButton button; - public MouseDoubleClickedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, int clickCount, Set<Key> modifiers) + public MouseDoubleClickedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseDoubleClickedEvent", source, modifiers); + super(hit, "MouseDoubleClickedEvent", source, mouseTracker, keyTracker); this.button = mouseButton; this.displayX = x; this.displayY = y; - this.clickCount = clickCount; } public MouseButton getButton() @@ -57,9 +55,4 @@ { return displayY; } - - public int getClickCount() - { - return clickCount; - } } \ No newline at end of file Modified: src/org/fenggui/event/mouse/MouseDraggedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseDraggedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseDraggedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * @@ -37,9 +36,9 @@ private int displayX, displayY; private MouseButton mouseButton = MouseButton.LEFT; - public MouseDraggedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, Set<Key> modifiers) + public MouseDraggedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseDraggedEvent", source, modifiers); + super(hit, "MouseDraggedEvent", source, mouseTracker, keyTracker); this.displayX = x; this.displayY = y; this.mouseButton = mouseButton; Modified: src/org/fenggui/event/mouse/MouseEnteredEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseEnteredEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseEnteredEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class MouseEnteredEvent extends MouseEvent { @@ -31,9 +30,9 @@ private int displayX; private int displaY; - public MouseEnteredEvent(boolean hit, IWidget entered, IWidget exited, int displayX, int displaY, Set<Key> modifiers) + public MouseEnteredEvent(boolean hit, IWidget entered, IWidget exited, int displayX, int displaY, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseEnteredEvent", entered, modifiers); + super(hit, "MouseEnteredEvent", entered, mouseTracker, keyTracker); this.entered = entered; this.exited = exited; this.displayX = displayX; Modified: src/org/fenggui/event/mouse/MouseEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,11 +19,10 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; import org.fenggui.event.InputEvent; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * Base class for mouse events. It serves to make method naming in mouse event classes @@ -36,17 +35,14 @@ */ public abstract class MouseEvent extends InputEvent { - private Set<Key> modifiers; - /** * Creates a new <code>MouseEvent</code> object. * * @param source the widget that triggered the event. */ - public MouseEvent(boolean hit, String specialType, IWidget originalSource, Set<Key> modifiers) + public MouseEvent(boolean hit, String specialType, IWidget originalSource, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, specialType, originalSource); - this.modifiers = modifiers; + super(hit, specialType, originalSource, mouseTracker, keyTracker); } /** @@ -84,14 +80,4 @@ { return getDisplayY() - w.getDisplayY(); } - - public boolean isPressed(Key key) - { - return modifiers.contains(key); - } - - public Set<Key> getModifiers() - { - return modifiers; - } } Modified: src/org/fenggui/event/mouse/MouseExitedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseExitedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseExitedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class MouseExitedEvent extends MouseEvent { @@ -31,9 +30,9 @@ private int displayX; private int displayY; - public MouseExitedEvent(boolean hit, IWidget entered, IWidget exited, int displayX, int displayY, Set<Key> modifiers) + public MouseExitedEvent(boolean hit, IWidget entered, IWidget exited, int displayX, int displayY, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseExitedEvent", exited, modifiers); + super(hit, "MouseExitedEvent", exited, mouseTracker, keyTracker); this.entered = entered; this.exited = exited; this.displayX = displayX; Modified: src/org/fenggui/event/mouse/MouseMovedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseMovedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseMovedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,18 +19,17 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class MouseMovedEvent extends MouseEvent { int displayX, displayY; - public MouseMovedEvent(boolean hit, IWidget originalSource, int displayX, int displayY, Set<Key> modifiers) + public MouseMovedEvent(boolean hit, IWidget originalSource, int displayX, int displayY, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseMovedEvent", originalSource, modifiers); + super(hit, "MouseMovedEvent", originalSource, mouseTracker, keyTracker); this.displayX = displayX; this.displayY = displayY; } Modified: src/org/fenggui/event/mouse/MousePressedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MousePressedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MousePressedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * Holds event information concerning pressed mouse buttons. @@ -33,7 +32,7 @@ public class MousePressedEvent extends MouseEvent { - private int displayX, displayY, clickCount; + private int displayX, displayY; private MouseButton mouseButton = MouseButton.LEFT; /** @@ -43,13 +42,12 @@ * @param mouseButton which mouse button has been pressed * @param clickCount count of immidiate clicks (provided by Java) for determing double clicks */ - public MousePressedEvent(boolean hit, IWidget source, int mouseX, int mouseY, MouseButton mouseButton, int clickCount, Set<Key> modifiers) + public MousePressedEvent(boolean hit, IWidget source, int mouseX, int mouseY, MouseButton mouseButton, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MousePressedEvent", source, modifiers); + super(hit, "MousePressedEvent", source, mouseTracker, keyTracker); displayX = mouseX; displayY = mouseY; this.mouseButton = mouseButton; - this.clickCount = clickCount; } /** @@ -78,9 +76,4 @@ { return displayY; } - - public int getClickCount() - { - return clickCount; - } } Modified: src/org/fenggui/event/mouse/MouseReleasedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseReleasedEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseReleasedEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; /** * @author Johannes Schaback ($Author$) @@ -31,16 +30,15 @@ public class MouseReleasedEvent extends MouseEvent { - private int displayX, displayY, clickCount; + private int displayX, displayY; private MouseButton button; - public MouseReleasedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, int clickCount, Set<Key> modifiers) + public MouseReleasedEvent(boolean hit, IWidget source, int x, int y, MouseButton mouseButton, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseReleasedEvent", source, modifiers); + super(hit, "MouseReleasedEvent", source, mouseTracker, keyTracker); this.button = mouseButton; this.displayX = x; this.displayY = y; - this.clickCount = clickCount; } public MouseButton getButton() @@ -57,9 +55,4 @@ { return displayY; } - - public int getClickCount() - { - return clickCount; - } } \ No newline at end of file Modified: src/org/fenggui/event/mouse/MouseWheelEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseWheelEvent.java 2009-08-09 10:19:50 UTC (rev 653) +++ src/org/fenggui/event/mouse/MouseWheelEvent.java 2009-08-10 22:57:36 UTC (rev 654) @@ -19,10 +19,9 @@ */ package org.fenggui.event.mouse; -import java.util.Set; - import org.fenggui.IWidget; -import org.fenggui.event.key.Key; +import org.fenggui.util.KeyTracker; +import org.fenggui.util.MouseButtonTracker; public class MouseWheelEvent extends MouseEvent { @@ -32,9 +31,9 @@ private int displayY; private int amount; - public MouseWheelEvent(boolean hit, IWidget source, int displayX, int displayY, boolean up, int rotation, int amount, Set<Key> modifiers) + public MouseWheelEvent(boolean hit, IWidget source, int displayX, int displayY, boolean up, int rotation, int amount, MouseButtonTracker mouseTracker, KeyTracker keyTracker) { - super(hit, "MouseWheelEvent", source, modifiers); + super(hit, "MouseWheelEvent", source, mouseTracker, keyTracker); this.up = up; this.rotation = rotation; this.displayX = displayX; Copied: src/org/fenggui/util/KeyTracker.java (from rev 650, src/org/fenggui/KeyPressTracker.java) =================================================================== --- src/org/fenggui/util/KeyTracker.java (rev 0) +++ src/org/fenggui/util/KeyTracker.java 2009-08-10 22:57:36 UTC (rev 654) @@ -0,0 +1,71 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (c) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on 29.01.2008 + * $Id$ + */ +package org.fenggui.util; + +import java.util.HashSet; +import java.util.Set; + +import org.fenggui.event.key.Key; + +/** + * Instance of this class tracks states of modifier keys by listening keyup/keydown + * listeners. Its purpose is to provide (stupid) mechanism which will at any time know if + * some key is pressed or not. + * + * @author ivicaz, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public class KeyTracker +{ + private Set<Key> modifiers; + + public KeyTracker() + { + modifiers = new HashSet<Key>(10); + } + + public boolean setModifierPressed(Key modifierPressed) + { + return modifiers.add(modifierPressed); + } + + public void setModifierReleased(Key modifierPressed) + { + modifiers.remove(modifierPressed); + } + + public boolean isPressed(Key key) + { + return modifiers.contains(key); + } + + public Set<Key> getModifiers() + { + // TODO Expensive. Some other way to prevent accessors from modifying original set? + // return new HashSet<Key>(modifiers); + //Maybe this is not even a bad thing. I would say that if he wants to change it its bad that he can't. + return modifiers; + } + + public void clear() + { + modifiers.clear(); + } +} Added: src/org/fenggui/util/MouseButtonTracker.java =================================================================== --- src/org/fenggui/util/MouseButtonTracker.java (rev 0) +++ src/org/fenggui/util/MouseButtonTracker.java 2009-08-10 22:57:36 UTC (rev 654) @@ -0,0 +1,77 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Aug 9, 2009 + * $Id$ + */ +package org.fenggui.util; + +import java.util.HashMap; +import java.util.Map; + +import org.fenggui.IWidget; +import org.fenggui.event.mouse.MouseButton; + +/** + * + * @author Marc Menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public class MouseButtonTracker +{ + private Map<MouseButton, IWidget> modifiers; + + /** + * + */ + public MouseButtonTracker() + { + modifiers = new HashMap<MouseButton, IWidget>(MouseButton.values().length); + } + + public void setModifierPressed(MouseButton modifierPressed, IWidget widget) + { + //remove first + this.setModifierReleased(modifierPressed); + + modifiers.put(modifierPressed, widget); + } + + public IWidget setModifierReleased(MouseButton modifierPressed) + { + IWidget result = null; + + if (modifiers.containsKey(modifierPressed)) + { + result = modifiers.get(modifierPressed); + + modifiers.remove(modifierPressed); + } + + return result; + } + + public boolean isPressed(MouseButton key) + { + return modifiers.containsKey(key); + } + + public void clear() + { + modifiers.clear(); + } + +} Modified: test/org/fenggui/example/ButtonExample.java =================================================================== --- test/org/fenggui/example/ButtonExample.java 2009-08-09 10:19:50 UTC (rev 653) +++ test/org/fenggui/example/ButtonExample.java 2009-08-10 22:57:36 UTC (rev 654) @@ -26,6 +26,7 @@ import org.fenggui.layout.GridLayout; import org.fenggui.layout.RowExLayout; import org.fenggui.layout.RowExLayoutData; +import org.fenggui.util.Log; import org.fenggui.util.Spacing; public class ButtonExample implements IExample @@ -90,26 +91,61 @@ public void mouseReleased(Object sender, MouseReleasedEvent mouseReleasedEvent) { infoEvent.setText("Mouse Released"); + Log.warn("Event: Mouse Released"); } @Override public void mousePressed(Object sender, MousePressedEvent mousePressedEvent) { infoEvent.setText("Mouse Pressed"); + Log.warn("Event: Mouse Pressed"); } @Override public void mouseEntered(Object sender, MouseEnteredEvent mouseEnteredEvent) { infoEvent.setText("Mouse Entered"); + Log.warn("Event: Mouse Entered"); } @Override public void mouseExited(Object sender, MouseExitedEvent mouseExited) { infoEvent.setText("Mouse Exited"); + Log.warn("Event: Mouse Exited"); } + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mouseClicked(java.lang.Object, org.fenggui.event.mouse.MouseClickedEvent) + */ + @Override + public void mouseClicked(Object sender, MouseClickedEvent mouseClickedEvent) + { + infoEvent.setText("Mouse Clicked"); + Log.warn("Event: Mouse Clicked"); + } + + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mouseDoubleClicked(java.lang.Object, org.fenggui.event.mouse.MouseDoubleClickedEvent) + */ + @Override + public void mouseDoubleClicked(Object sender, MouseDoubleClickedEvent mouseDoubleClickedEvent) + { + infoEvent.setText("Mouse doubleClicked"); + Log.warn("Event: Mouse Double-Clicked"); + } + + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mouseWheel(java.lang.Object, org.fenggui.event.mouse.MouseWheelEvent) + */ + @Override + public void mouseWheel(Object sender, MouseWheelEvent mouseWheelEvent) + { + infoEvent.setText("Mouse Wheel"); + Log.warn("Event: Mouse Wheel"); + } + + }); w.setSize(250, 400); Modified: test/org/fenggui/example/ExampleBasisLWJGL.java =================================================================== --- test/org/fenggui/example/ExampleBasisLWJGL.java 2009-08-09 10:19:50 UTC (rev 653) +++ test/org/fenggui/example/ExampleBasisLWJGL.java 2009-08-10 22:57:36 UTC (rev 654) @@ -21,7 +21,7 @@ import org.fenggui.actor.ScreenshotActor; import org.fenggui.binding.render.lwjgl.EventHelper; import org.fenggui.binding.render.lwjgl.LWJGLBinding; -import org.fenggui.event.Event; +import org.fenggui.event.InputEvent; import org.lwjgl.LWJGLException; import org.lwjgl.input.Keyboard; import org.lwjgl.input.Mouse; @@ -63,9 +63,6 @@ if (Keyboard.getEventKeyState()) // if pressed { desk.fireKeyPressedEvent(EventHelper.mapKeyChar(), EventHelper.mapEventKey()); - - // XXX: dirty hack to make TextEditor usable again on LWJGL. This needs to be solved nicer in the future! - desk.fireKeyTypedEvent(EventHelper.mapKeyChar()); } else { @@ -83,23 +80,22 @@ int x = Mouse.getX(); int y = Mouse.getY(); - Event hitGUI = null; + InputEvent event = null; // @todo the click count is not considered in LWJGL! # if (lastButtonDown != -1 && Mouse.isButtonDown(lastButtonDown)) { - hitGUI = desk.fireMouseDraggedEvent(x, y, EventHelper.getMouseButton(lastButtonDown), 1); + event = desk.fireMouseDraggedEvent(x, y, EventHelper.getMouseButton(lastButtonDown)); } else { if (Mouse.getDX() != 0 || Mouse.getDY() != 0) - hitGUI = desk.fireMouseMovedEvent(x, y); + event = desk.fireMouseMovedEvent(x, y); if (lastButtonDown != -1) { - desk.fireMouseClickEvent(x, y, EventHelper.getMouseButton(lastButtonDown), 1); - hitGUI = desk.fireMouseReleasedEvent(x, y, EventHelper.getMouseButton(lastButtonDown), 1); + event = desk.fireMouseReleasedEvent(x, y, EventHelper.getMouseButton(lastButtonDown)); lastButtonDown = -1; } while (Mouse.next()) @@ -107,15 +103,21 @@ if (Mouse.getEventButton() != -1 && Mouse.getEventButtonState()) { lastButtonDown = Mouse.getEventButton(); - hitGUI = desk.fireMousePressedEvent(x, y, EventHelper.getMouseButton(lastButtonDown), 1); + event = desk.fireMousePressedEvent(x, y, EventHelper.getMouseButton(lastButtonDown)); } int wheel = Mouse.getEventDWheel(); if (wheel != 0) { - hitGUI = desk.fireMouseWheel(x, y, wheel > 0, 1, 1); + event = desk.fireMouseWheel(x, y, wheel > 0, 1, 1); } } } + + //check if event did hit a widget + if (event != null && event.isUIHit()) + ... [truncated message content] |
From: <mar...@us...> - 2009-08-09 10:19:56
|
Revision: 653 http://fenggui.svn.sourceforge.net/fenggui/?rev=653&view=rev Author: marcmenghin Date: 2009-08-09 10:19:50 +0000 (Sun, 09 Aug 2009) Log Message: ----------- - moved "UIhit" indicator from all traversing events to a new InputEvent class so only input events have this property. Modified Paths: -------------- src/org/fenggui/Display.java src/org/fenggui/Widget.java src/org/fenggui/event/ActivationEvent.java src/org/fenggui/event/FocusEvent.java src/org/fenggui/event/LeafeTraversingEvent.java src/org/fenggui/event/RootTraversingEvent.java src/org/fenggui/event/TraversingEvent.java src/org/fenggui/event/key/KeyEvent.java src/org/fenggui/event/mouse/MouseEvent.java Added Paths: ----------- src/org/fenggui/event/InputEvent.java Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/Display.java 2009-08-09 10:19:50 UTC (rev 653) @@ -308,14 +308,14 @@ if (oldWidget != null && oldWidget != widget) { - FocusEvent e = new FocusEvent(true, oldWidget, true); + FocusEvent e = new FocusEvent(oldWidget, true); oldWidget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } if (widget != null) { - FocusEvent e = new FocusEvent(true, widget, false); + FocusEvent e = new FocusEvent(widget, false); widget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/Widget.java 2009-08-09 10:19:50 UTC (rev 653) @@ -807,6 +807,6 @@ this.enabled = enabled; - fireEvent(EVENT_ACTIVATED, new ActivationEvent(true, this, enabled)); + fireEvent(EVENT_ACTIVATED, new ActivationEvent(this, enabled)); } } Modified: src/org/fenggui/event/ActivationEvent.java =================================================================== --- src/org/fenggui/event/ActivationEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/ActivationEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -25,9 +25,9 @@ { private boolean enabled = true; - public ActivationEvent(boolean hit, IWidget source, boolean enabled) + public ActivationEvent(IWidget source, boolean enabled) { - super(hit, null, source); + super(null, source); this.enabled = enabled; } Modified: src/org/fenggui/event/FocusEvent.java =================================================================== --- src/org/fenggui/event/FocusEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/FocusEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -25,9 +25,9 @@ { private boolean focusLost = false; - public FocusEvent(boolean hit, IWidget source, boolean focusLost) + public FocusEvent(IWidget source, boolean focusLost) { - super(hit, "Focus", source); + super(null, source); this.focusLost = focusLost; } Added: src/org/fenggui/event/InputEvent.java =================================================================== --- src/org/fenggui/event/InputEvent.java (rev 0) +++ src/org/fenggui/event/InputEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -0,0 +1,54 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Aug 9, 2009 + * $Id$ + */ +package org.fenggui.event; + +import org.fenggui.IWidget; + +/** + * + * @author marc menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public abstract class InputEvent extends RootTraversingEvent +{ + + private boolean uiHit; + + /** + * @param hit + * @param specialType + * @param source + */ + public InputEvent(boolean hit, String specialType, IWidget source) + { + super(specialType, source); + this.uiHit = hit; + } + + /** + * Returns true if a widget was hit. False otherwise. + * + * @return True if a widget was hit by this event. + */ + public boolean isUIHit() + { + return uiHit; + } +} Modified: src/org/fenggui/event/LeafeTraversingEvent.java =================================================================== --- src/org/fenggui/event/LeafeTraversingEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/LeafeTraversingEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -31,8 +31,8 @@ public abstract class LeafeTraversingEvent extends TraversingEvent { - public LeafeTraversingEvent(boolean hit, String specialType, IWidget source) + public LeafeTraversingEvent(String specialType, IWidget source) { - super(hit, specialType, source); + super(specialType, source); } } Modified: src/org/fenggui/event/RootTraversingEvent.java =================================================================== --- src/org/fenggui/event/RootTraversingEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/RootTraversingEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -30,8 +30,8 @@ */ public abstract class RootTraversingEvent extends TraversingEvent { - public RootTraversingEvent(boolean hit, String specialType, IWidget source) + public RootTraversingEvent(String specialType, IWidget source) { - super(hit, specialType, source); + super(specialType, source); } } Modified: src/org/fenggui/event/TraversingEvent.java =================================================================== --- src/org/fenggui/event/TraversingEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/TraversingEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -23,30 +23,20 @@ /** * - * @author spoony, last edited by $Author$, $Date$ + * @author marc menghin, last edited by $Author$, $Date$ * @version $Revision$ */ public abstract class TraversingEvent extends WidgetEvent { - private boolean uiHit; + /** * @param hit * @param specialType */ - public TraversingEvent(boolean hit, String specialType, IWidget source) + public TraversingEvent(String specialType, IWidget source) { super(specialType, source); - this.uiHit = hit; + } - - /** - * Returns true if a widget was hit. False otherwise. - * - * @return True if a widget was hit by this event. - */ - public boolean isUIHit() - { - return uiHit; - } } Modified: src/org/fenggui/event/key/KeyEvent.java =================================================================== --- src/org/fenggui/event/key/KeyEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/key/KeyEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -22,9 +22,9 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.RootTraversingEvent; +import org.fenggui.event.InputEvent; -public class KeyEvent extends RootTraversingEvent +public class KeyEvent extends InputEvent { private char key; private Key keyClass; Modified: src/org/fenggui/event/mouse/MouseEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseEvent.java 2009-08-09 10:06:53 UTC (rev 652) +++ src/org/fenggui/event/mouse/MouseEvent.java 2009-08-09 10:19:50 UTC (rev 653) @@ -22,7 +22,7 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.RootTraversingEvent; +import org.fenggui.event.InputEvent; import org.fenggui.event.key.Key; /** @@ -34,7 +34,7 @@ * @version $Revision$ * @see org.fenggui.Display */ -public abstract class MouseEvent extends RootTraversingEvent +public abstract class MouseEvent extends InputEvent { private Set<Key> modifiers; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-09 10:06:59
|
Revision: 652 http://fenggui.svn.sourceforge.net/fenggui/?rev=652&view=rev Author: marcmenghin Date: 2009-08-09 10:06:53 +0000 (Sun, 09 Aug 2009) Log Message: ----------- - re-enable some decorators on the DefaultTheme Modified Paths: -------------- src/org/fenggui/theme/DefaultTheme.java Modified: src/org/fenggui/theme/DefaultTheme.java =================================================================== --- src/org/fenggui/theme/DefaultTheme.java 2009-08-08 22:48:54 UTC (rev 651) +++ src/org/fenggui/theme/DefaultTheme.java 2009-08-09 10:06:53 UTC (rev 652) @@ -106,15 +106,15 @@ //Color darkBlue = new Color(174f/255f, 174f/255f, 255f/255f); //Color lightBlue = new Color(200f/255f, 208f/255f, 255f/255f); -// b.getAppearance().add(StatefullWidget.STATE_DEFAULT, new GradientBackground(Color.GRAY, Color.TRANSPARENT)); -// b.getAppearance().add(StatefullWidget.STATE_HOVERED, new PlainBackground(Color.BLUE)); + b.getAppearance().add(new GradientBackground(Color.GRAY, Color.TRANSPARENT)); + b.getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), new PlainBackground(Color.BLUE)); -// b.getAppearance().add(StatefullWidget.STATE_DEFAULT, new PlainBorder(Color.GRAY)); -// b.getAppearance().add(StatefullWidget.STATE_HOVERED, new BevelBorder(Color.DARK_GRAY, Color.LIGHT_GRAY)); -// b.getAppearance().add(StatefullWidget.STATE_HOVERED, new GradientBackground(Color.GRAY, Color.TRANSPARENT)); -// b.getAppearance().add(Button.STATE_PRESSED, new BevelBorder(Color.LIGHT_GRAY, Color.DARK_GRAY)); -// b.getAppearance().add(StatefullWidget.STATE_FOCUSED, -// new PlainBorder(1, 2, 2, 1, new Color(200, 0, 0, 0.9f), false, Span.PADDING), false); + b.getAppearance().add(new PlainBorder(Color.GRAY)); + b.getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), new BevelBorder(Color.DARK_GRAY, Color.LIGHT_GRAY)); + b.getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), new GradientBackground(Color.GRAY, Color.TRANSPARENT)); + b.getAppearance().add(Button.STATE_PRESSED.toString(), new BevelBorder(Color.LIGHT_GRAY, Color.DARK_GRAY)); + b.getAppearance().add(StatefullWidget.STATE_FOCUSED.toString(), + new PlainBorder(1, 2, 2, 1, new Color(200, 0, 0, 0.9f), false, Span.PADDING), false); // ((ComplexTextRendererData)b.getAppearance().getData()).setColor(Color.WHITE); } @@ -250,23 +250,23 @@ l.getIncreaseButton().getAppearance().removeAll(); l.getDecreaseButton().getAppearance().removeAll(); -// l.getIncreaseButton().getAppearance().add(StatefullWidget.STATE_DEFAULT, new PlainBorder(Color.GRAY)); -// l.getDecreaseButton().getAppearance().add(StatefullWidget.STATE_DEFAULT, new PlainBorder(Color.GRAY)); + l.getIncreaseButton().getAppearance().add(new PlainBorder(Color.GRAY)); + l.getDecreaseButton().getAppearance().add(new PlainBorder(Color.GRAY)); -// l.getIncreaseButton().getAppearance().add(StatefullWidget.STATE_HOVERED, new PlainBorder(Color.RED)); -// l.getDecreaseButton().getAppearance().add(StatefullWidget.STATE_HOVERED, new PlainBorder(Color.RED)); + l.getIncreaseButton().getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), new PlainBorder(Color.RED)); + l.getDecreaseButton().getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), new PlainBorder(Color.RED)); -// l.getIncreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_HOVERED, Color.RED)); -// l.getDecreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_HOVERED, Color.RED)); + l.getIncreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_HOVERED.toString(), Color.RED)); + l.getDecreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_HOVERED.toString(), Color.RED)); -// l.getIncreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_DEFAULT, Color.BLACK)); -// l.getDecreaseButton().getAppearance().add(new SetTextColorSwitch(StatefullWidget.STATE_DEFAULT, Color.BLACK)); + l.getIncreaseButton().getAppearance().add(new SetTextColorSwitch("", Color.BLACK)); + l.getDecreaseButton().getAppearance().add(new SetTextColorSwitch("", Color.BLACK)); -// l.getSlider().getSliderButton().getAppearance().add(StatefullWidget.STATE_HOVERED, -// new PlainBorder(Color.RED, false)); + l.getSlider().getSliderButton().getAppearance().add(StatefullWidget.STATE_HOVERED.toString(), + new PlainBorder(Color.RED, false)); -// l.getIncreaseButton().getAppearance().setEnabled(StatefullWidget.STATE_HOVERED, false); -// l.getDecreaseButton().getAppearance().setEnabled(StatefullWidget.STATE_HOVERED, false); + l.getIncreaseButton().getAppearance().setEnabled(StatefullWidget.STATE_HOVERED.toString(), false); + l.getDecreaseButton().getAppearance().setEnabled(StatefullWidget.STATE_HOVERED.toString(), false); } @@ -314,7 +314,7 @@ l.getSliderButton().getAppearance().add(defaultbg); l.getSliderButton().getAppearance().add(new PlainBorder(Color.LIGHT_BLUE)); -// l.getAppearance().add(Slider.STATE_DISABLED, disabledbg); + l.getAppearance().add(Slider.STATE_DISABLED.toString(), disabledbg); if (l.isHorizontal()) { @@ -407,8 +407,8 @@ @Override public void setUp(SplitContainer w) { - // w.getAppearance().getBarDecorator().add(new PlainBackground(Color.LIGHT_GRAY)); - // w.getAppearance().getBarDecorator().add(new PlainBorder(Color.GRAY)); +// w.getAppearance().getBarDecorator().add(new PlainBackground(Color.LIGHT_GRAY)); +// w.getAppearance().getBarDecorator().add(new PlainBorder(Color.GRAY)); } // @Override This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-08-08 22:49:15
|
Revision: 651 http://fenggui.svn.sourceforge.net/fenggui/?rev=651&view=rev Author: marcmenghin Date: 2009-08-08 22:48:54 +0000 (Sat, 08 Aug 2009) Log Message: ----------- - added an improved StateManager - updated QtCurve to work with new state system - improvements and fixes to new event system - added a isUIHit() method to all input event objects. This method will return true if a widget besides the display is hit by the given mouse position on mouse events or the focused widget on key events. Modified Paths: -------------- data/themes/QtCurve/QtCurve.xml optional/org/fenggui/GameMenuButton.java src/org/fenggui/Button.java src/org/fenggui/Display.java src/org/fenggui/ObservableLabelWidget.java src/org/fenggui/RadioButton.java src/org/fenggui/StatefullWidget.java src/org/fenggui/Widget.java src/org/fenggui/appearance/DecoratorAppearance.java src/org/fenggui/composite/menu/Menu.java src/org/fenggui/composite/menu/MenuBar.java src/org/fenggui/event/ActivationEvent.java src/org/fenggui/event/ButtonPressedEvent.java src/org/fenggui/event/ContentChangedEvent.java src/org/fenggui/event/DisplayResizedEvent.java src/org/fenggui/event/ElementEvent.java src/org/fenggui/event/Event.java src/org/fenggui/event/FocusEvent.java src/org/fenggui/event/ISelectionChangedListener.java src/org/fenggui/event/LeafeTraversingEvent.java src/org/fenggui/event/MenuClosedEvent.java src/org/fenggui/event/MenuItemPressedEvent.java src/org/fenggui/event/PositionChangedEvent.java src/org/fenggui/event/RootTraversingEvent.java src/org/fenggui/event/SelectionChangedEvent.java src/org/fenggui/event/SizeChangedEvent.java src/org/fenggui/event/SliderMovedEvent.java src/org/fenggui/event/TextChangedEvent.java src/org/fenggui/event/TextCursorMovedEvent.java src/org/fenggui/event/TickEvent.java src/org/fenggui/event/WidgetEvent.java src/org/fenggui/event/WidgetListChangedEvent.java src/org/fenggui/event/WindowClosedEvent.java src/org/fenggui/event/WindowResizedEvent.java src/org/fenggui/event/key/KeyEvent.java src/org/fenggui/event/key/KeyPressedEvent.java src/org/fenggui/event/key/KeyReleasedEvent.java src/org/fenggui/event/key/KeyTypedEvent.java src/org/fenggui/event/mouse/MouseClickedEvent.java src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java src/org/fenggui/event/mouse/MouseDraggedEvent.java src/org/fenggui/event/mouse/MouseEnteredEvent.java src/org/fenggui/event/mouse/MouseEvent.java src/org/fenggui/event/mouse/MouseExitedEvent.java src/org/fenggui/event/mouse/MouseMovedEvent.java src/org/fenggui/event/mouse/MousePressedEvent.java src/org/fenggui/event/mouse/MouseReleasedEvent.java src/org/fenggui/event/mouse/MouseWheelEvent.java src/org/fenggui/text/TextContentManager.java src/org/fenggui/text/content/ContentManager.java src/org/fenggui/theme/DefaultTheme.java test/org/fenggui/example/PixmapDecoratorExample.java Added Paths: ----------- src/org/fenggui/event/IStateChangedListener.java src/org/fenggui/event/StateChangedEvent.java src/org/fenggui/event/TraversingEvent.java src/org/fenggui/util/StateIdentifier.java src/org/fenggui/util/StateManager.java Modified: data/themes/QtCurve/QtCurve.xml =================================================================== --- data/themes/QtCurve/QtCurve.xml 2009-07-13 20:33:13 UTC (rev 650) +++ data/themes/QtCurve/QtCurve.xml 2009-08-08 22:48:54 UTC (rev 651) @@ -135,7 +135,7 @@ </LeftEdgePixmap> </PixmapBorder> - <PixmapBorder label="default" enabled="true" name="tabBorder"> + <PixmapBorder enabled="true" name="tabBorder"> <TopLeftPixmap x="0" y="13" width="2" height="2"> <!-- top-left corner --> <Texture ref="QtCurve"/> </TopLeftPixmap> @@ -169,7 +169,7 @@ </LeftEdgePixmap> </PixmapBorder> - <PixmapBorder label="default" enabled="true" name="buttonBorder"> + <PixmapBorder enabled="true" name="buttonBorder"> <TopLeftPixmap x="0" y="13" width="2" height="2"> <!-- top-left corner --> <Texture ref="QtCurve"/> </TopLeftPixmap> @@ -203,14 +203,14 @@ </LeftEdgePixmap> </PixmapBorder> - <GradientBackground label="default" enabled="true" name="DefaultElement"> + <GradientBackground enabled="true" name="DefaultElement"> <TopLeftColor rgba="249, 247, 242, 255"/> <TopRightColor rgba="249, 247, 242, 255"/> <BottomLeftColor rgba="233, 217, 198, 255"/> <BottomRightColor rgba="233, 217, 198, 255"/> </GradientBackground> - <GradientBackground label="pressed" enabled="false" name="SelectedElement"> + <GradientBackground label="Pressed#Pressed" enabled="false" name="SelectedElement"> <TopLeftColor rgba="233, 217, 198, 255"/> <TopRightColor rgba="233, 217, 198, 255"/> <BottomLeftColor rgba="249, 247, 242, 255"/> @@ -264,23 +264,23 @@ <!-- define backgrounds --> <BackgroundDecorators> - <GradientBackground label="default" enabled="true"> + <GradientBackground enabled="true"> <TopLeftColor rgba="249, 247, 242, 255"/> <TopRightColor rgba="249, 247, 242, 255"/> <BottomLeftColor rgba="233, 217, 198, 255"/> <BottomRightColor rgba="233, 217, 198, 255"/> </GradientBackground> - <GradientBackground label="pressed" enabled="false"> + <GradientBackground label="Pressed#Pressed" enabled="false"> <TopLeftColor rgba="233, 217, 198, 255"/> <TopRightColor rgba="233, 217, 198, 255"/> <BottomLeftColor rgba="249, 247, 242, 255"/> <BottomRightColor rgba="249, 247, 242, 255"/> </GradientBackground> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> </BackgroundDecorators> @@ -356,7 +356,7 @@ </Style> </TextStyle> <BackgroundDecorators> - <PixmapBorder label="default"> + <PixmapBorder> <TopLeftPixmap x="20" y="13" width="2" height="2"> <!-- top-left corner --> <Texture ref="QtCurve"/> </TopLeftPixmap> @@ -389,13 +389,13 @@ <Texture ref="QtCurve"/> </LeftEdgePixmap> </PixmapBorder> - <GradientBackground label="default"> + <GradientBackground> <TopLeftColor rgba="79, 120, 234, 255"/> <TopRightColor rgba="79, 120, 234, 255"/> <BottomLeftColor rgba="83, 129, 255, 255"/> <BottomRightColor rgba="83, 129, 255, 255"/> </GradientBackground> - <PlainBackground label="hovered"> + <PlainBackground label="Hover#Hovered"> <Color rgba="89, 130, 255, 255"/> </PlainBackground> </BackgroundDecorators> @@ -464,20 +464,20 @@ <BottomLeftColor rgba="233, 217, 198, 255"/> <BottomRightColor rgba="233, 217, 198, 255"/> </GradientBackground> - <GradientBackground label="pressed" enabled="false"> + <GradientBackground label="Pressed#Pressed" enabled="false"> <TopLeftColor rgba="233, 217, 198, 255"/> <TopRightColor rgba="233, 217, 198, 255"/> <BottomLeftColor rgba="249, 247, 242, 255"/> <BottomRightColor rgba="249, 247, 242, 255"/> </GradientBackground> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> <PlainBackground label="selected" enabled="false"> <Color rgba="255, 255, 255, 100"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> </BackgroundDecorators> @@ -510,10 +510,10 @@ </Style> </TextStyle> <BackgroundDecorators> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> </BackgroundDecorators> @@ -543,10 +543,10 @@ </Style> </TextStyle> <BackgroundDecorators> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> </BackgroundDecorators> @@ -590,16 +590,16 @@ <BottomLeftColor ref="SCB default light"/> <BottomRightColor ref="SCB default dark"/> </GradientBackground> - <GradientBackground label="mouseHover" enabled="false"> + <GradientBackground label="Hover#Hovered" enabled="false"> <TopLeftColor ref="SCB mouseHover light"/> <TopRightColor ref="SCB mouseHover dark"/> <BottomLeftColor ref="SCB mouseHover light"/> <BottomRightColor ref="SCB mouseHover dark"/> </GradientBackground> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> <PixmapBorder ref="scrollButtonBorder"/> @@ -630,16 +630,16 @@ <BottomLeftColor ref="SCB default light"/> <BottomRightColor ref="SCB default dark"/> </GradientBackground> - <GradientBackground label="mouseHover" enabled="false"> + <GradientBackground label="Hover#Hovered" enabled="false"> <TopLeftColor ref="SCB mouseHover light"/> <TopRightColor ref="SCB mouseHover dark"/> <BottomLeftColor ref="SCB mouseHover light"/> <BottomRightColor ref="SCB mouseHover dark"/> </GradientBackground> - <PlainBackground label="focused" enabled="false"> + <PlainBackground label="Focus#Focused" enabled="false"> <Color rgba="255, 255, 255, 130"/> </PlainBackground> - <PlainBackground label="hovered" enabled="false"> + <PlainBackground label="Hover#Hovered" enabled="false"> <Color rgba="255, 200, 150, 100"/> </PlainBackground> <PixmapBorder ref="scrollButtonBorder"/> @@ -671,10 +671,10 @@ <PixmapSwitch x="33" y="68" width="15" height="15" label="default"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="128" width="15" height="15" label="hovered"> + <PixmapSwitch x="18" y="128" width="15" height="15" label="Hover#Hovered"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="68" width="15" height="15" label="pressed"> + <PixmapSwitch x="18" y="68" width="15" height="15" label="Pressed#Pressed"> <Texture ref="QtCurve"/> </PixmapSwitch> </switches> @@ -699,10 +699,10 @@ <PixmapSwitch x="33" y="53" width="15" height="15" label="default"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="113" width="15" height="15" label="hovered"> + <PixmapSwitch x="18" y="113" width="15" height="15" label="Hover#Hovered"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="53" width="15" height="15" label="pressed"> + <PixmapSwitch x="18" y="53" width="15" height="15" label="Pressed#Pressed"> <Texture ref="QtCurve"/> </PixmapSwitch> </switches> @@ -727,10 +727,10 @@ <PixmapSwitch x="18" y="23" width="15" height="15" label="default"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="83" width="15" height="15" label="mouseHover"> + <PixmapSwitch x="18" y="83" width="15" height="15" label="Hover#Hovered"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="38" width="15" height="15" label="pressed"> + <PixmapSwitch x="18" y="38" width="15" height="15" label="Pressed#Pressed"> <Texture ref="QtCurve"/> </PixmapSwitch> </switches> @@ -755,10 +755,10 @@ <PixmapSwitch x="33" y="23" width="15" height="15" label="default"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="18" y="98" width="15" height="15" label="mouseHover"> + <PixmapSwitch x="18" y="98" width="15" height="15" label="Hover#Hovered"> <Texture ref="QtCurve"/> </PixmapSwitch> - <PixmapSwitch x="33" y="38" width="15" height="15" label="pressed"> + <PixmapSwitch x="33" y="38" width="15" height="15" label="Pressed#Pressed"> <Texture ref="QtCurve"/> </PixmapSwitch> </switches> Modified: optional/org/fenggui/GameMenuButton.java =================================================================== --- optional/org/fenggui/GameMenuButton.java 2009-07-13 20:33:13 UTC (rev 650) +++ optional/org/fenggui/GameMenuButton.java 2009-08-08 22:48:54 UTC (rev 651) @@ -47,7 +47,6 @@ { try { - Pixmap lowlight = new Pixmap(Binding.getInstance().getTexture(lowlightFile)); Pixmap highlight = new Pixmap(Binding.getInstance().getTexture(highlightFile)); Pixmap focus = new Pixmap(Binding.getInstance().getTexture(focusFile)); @@ -107,11 +106,11 @@ size.setSize(defaultState.getWidth(), defaultState.getHeight()); - getAppearance().add(STATE_NONE, new PixmapBackground(defaultState, true)); - getAppearance().add(STATE_HOVERED, new PixmapBackground(hoverState, true)); - getAppearance().add(STATE_FOCUSED, new PixmapBackground(focusState, true)); - getAppearance().add(STATE_PRESSED, new PixmapBackground(pressedState, true)); - getAppearance().add(STATE_DISABLED, new PixmapBackground(disabledState, true)); + getAppearance().add(new PixmapBackground(defaultState, true)); + getAppearance().add(STATE_HOVERED.toString(), new PixmapBackground(hoverState, true)); + getAppearance().add(STATE_FOCUSED.toString(), new PixmapBackground(focusState, true)); + getAppearance().add(STATE_PRESSED.toString(), new PixmapBackground(pressedState, true)); + getAppearance().add(STATE_DISABLED.toString(), new PixmapBackground(disabledState, true)); updateState(); updateMinSize(); } @@ -127,98 +126,4 @@ this.size = size; } - /* - * (non-Javadoc) - * - * @see org.fenggui.StatefullWidget#updateState(java.lang.String) - */ - @Override - protected void updateState(String newActiveState) - { - // change update state to only activate one state at a time - // only default state is active as usual - // re-enable default state so switches get called - getAppearance().setEnabled(STATE_DEFAULT, true); - - if (newActiveState != null) - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_HOVERED, false); - getAppearance().setEnabled(STATE_PRESSED, false); - getAppearance().setEnabled(newActiveState, true); - } - else - { - if (isEnabled()) - { - if (hasError()) - { - getAppearance().setEnabled(STATE_ERROR, true); - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_HOVERED, false); - getAppearance().setEnabled(STATE_PRESSED, false); - } - else - { - if (isPressed()) - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_HOVERED, false); - getAppearance().setEnabled(STATE_PRESSED, true); - } - else - { - if (isFocused()) - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, true); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_HOVERED, false); - getAppearance().setEnabled(STATE_PRESSED, false); - } - else - { - if (isHovered()) - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_PRESSED, false); - getAppearance().setEnabled(STATE_HOVERED, true); - } - else - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, true); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_HOVERED, false); - getAppearance().setEnabled(STATE_PRESSED, false); - } - } - } - } - } - else - { - getAppearance().setEnabled(STATE_DISABLED, true); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_PRESSED, false); - getAppearance().setEnabled(STATE_HOVERED, false); - } - - } - } } Modified: src/org/fenggui/Button.java =================================================================== --- src/org/fenggui/Button.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/Button.java 2009-08-08 22:48:54 UTC (rev 651) @@ -34,6 +34,7 @@ import org.fenggui.event.mouse.MouseReleasedEvent; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; +import org.fenggui.util.StateIdentifier; /** * @@ -55,9 +56,12 @@ { private java.util.List<IButtonPressedListener> buttonPressedHook; - public static final String STATE_PRESSED = "pressed"; - private boolean pressed = false; + public static final StateIdentifier STATE_PRESSED = new StateIdentifier("Pressed", "Pressed"); + public static final StateIdentifier STATE_NOTPRESSED = new StateIdentifier("Pressed", "NotPressed"); + // public static final String STATE_PRESSED = "pressed"; + private boolean pressed = false; + public Button() { this(""); @@ -67,7 +71,6 @@ { setTraversable(true); initDefaults(); - setText(text); } @@ -82,20 +85,43 @@ { buttonPressedHook = new ArrayList<IButtonPressedListener>(); pressed = false; - - disableDefaultStates(); + getStateManager().addStates(STATE_PRESSED, STATE_NOTPRESSED); + updateState(); updateMinSize(); } + /* (non-Javadoc) + * @see org.fenggui.StatefullWidget#updateState() + */ + @Override + protected void updateState() + { + super.updateState(); + + if (isEnabled()) + { + if (isPressed()) + getStateManager().activate(STATE_PRESSED); + else + getStateManager().activate(STATE_NOTPRESSED); + } + else + { + getStateManager().activate(STATE_NOTPRESSED); + } + } + private final void pressed() { if (!pressed) { pressed = true; + //this.getDisplay().setFocusedWidget(this); //called by focus change already - this.updateState(STATE_PRESSED); + + this.updateState(); } } @@ -104,22 +130,13 @@ if (pressed) { pressed = false; + this.updateState(); fireButtonPressedEvent(modifiers); } } /* (non-Javadoc) - * @see org.fenggui.StatefullWidget#updateState(java.lang.String) - */ - @Override - protected void updateState(String newActiveState) - { - getAppearance().setEnabled(STATE_PRESSED, pressed); - super.updateState(newActiveState); - } - - /* (non-Javadoc) * @see org.fenggui.ObservableWidget#keyPressed(org.fenggui.event.key.KeyPressedEvent) */ protected void onEventFired(String eventType, KeyPressedEvent keyPressedEvent) @@ -195,6 +212,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseExited(org.fenggui.event.mouse.MouseExitedEvent) */ + @Override protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) { if (isEnabled()) @@ -245,9 +263,7 @@ public Button clone() { Button result = (Button) super.clone(); - result.initDefaults(); - return result; } } Modified: src/org/fenggui/Display.java =================================================================== --- src/org/fenggui/Display.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/Display.java 2009-08-08 22:48:54 UTC (rev 651) @@ -308,14 +308,14 @@ if (oldWidget != null && oldWidget != widget) { - FocusEvent e = new FocusEvent(oldWidget, true); + FocusEvent e = new FocusEvent(true, oldWidget, true); oldWidget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } if (widget != null) { - FocusEvent e = new FocusEvent(widget, false); + FocusEvent e = new FocusEvent(true, widget, false); widget.fireEvent(Widget.EVENT_FOCUSCHANGED, e); fireGlobalEventListener(e); } @@ -350,8 +350,11 @@ { IWidget w = getWidget(mouseX, mouseY); + MousePressedEvent e = new MousePressedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker + .getModifiers()); + if (!this.isEnabled()) - return null; + return e; /* * Exceptional case for pop up shell. Pop up shells are opened by clickling on a menu @@ -365,10 +368,7 @@ toDeletePopupWidget = popupWidget; } - MousePressedEvent e = new MousePressedEvent(w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); - - if (!w.equals(this)) + if (!this.equals(w)) { IWidget targetWidget = w; @@ -442,8 +442,11 @@ { IWidget w = getWidget(mouseX, mouseY); + MouseReleasedEvent e = new MouseReleasedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, + keyPressTracker.getModifiers()); + if (!this.isEnabled()) - return null; + return e; if (draggingListener != null) { @@ -451,13 +454,13 @@ draggingListener = null; } - MouseReleasedEvent e = new MouseReleasedEvent(w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); + if (w != null) + { + if (w.equals(this)) + return e; - if (w.equals(this)) - return e; - - w.fireEvent(Widget.EVENT_MOUSE, e); + w.fireEvent(Widget.EVENT_MOUSE, e); + } fireGlobalEventListener(e); return e; @@ -478,8 +481,11 @@ { IWidget w = getWidget(mouseX, mouseY); + MouseDraggedEvent e = new MouseDraggedEvent(w != null, w, mouseX, mouseY, mouseButton, keyPressTracker + .getModifiers()); + if (!this.isEnabled()) - return null; + return e; if (draggingListener != null) { @@ -488,55 +494,62 @@ if (!mouseOverWidget.equals(w)) { - MouseExitedEvent exited = new MouseExitedEvent(w, mouseOverWidget, mouseX, mouseY, keyPressTracker.getModifiers()); + MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, mouseX, mouseY, keyPressTracker + .getModifiers()); mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); - MouseEnteredEvent entered = new MouseEnteredEvent(w, mouseOverWidget, mouseX, mouseY, keyPressTracker + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, mouseX, mouseY, keyPressTracker .getModifiers()); w.fireEvent(Widget.EVENT_MOUSE, entered); fireGlobalEventListener(entered); } mouseOverWidget = w; - MouseDraggedEvent e = new MouseDraggedEvent(w, mouseX, mouseY, mouseButton, keyPressTracker.getModifiers()); + if (w != null) + { + if (w.equals(this)) + return e; - if (w.equals(this)) - return e; - - w.fireEvent(EVENT_MOUSE, e); + w.fireEvent(EVENT_MOUSE, e); + } fireGlobalEventListener(e); return e; } - public boolean fireMouseDoubleClickEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) + public MouseDoubleClickedEvent fireMouseDoubleClickEvent(int mouseX, int mouseY, MouseButton mouseButton, + int clickCount) { IWidget w = getWidget(mouseX, mouseY); + MouseDoubleClickedEvent e = new MouseDoubleClickedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, + keyPressTracker.getModifiers()); + if (!this.isEnabled()) - return w != null; + return e; - MouseDoubleClickedEvent e = new MouseDoubleClickedEvent(w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); + if (w != null) + w.fireEvent(EVENT_MOUSE, e); - w.fireEvent(EVENT_MOUSE, e); fireGlobalEventListener(e); - return true; + return e; } public MouseClickedEvent fireMouseClickEvent(int mouseX, int mouseY, MouseButton mouseButton, int clickCount) { IWidget w = getWidget(mouseX, mouseY); + MouseClickedEvent e = new MouseClickedEvent(w != null, w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker + .getModifiers()); + if (!this.isEnabled()) - return null; + return e; - MouseClickedEvent e = new MouseClickedEvent(w, mouseX, mouseY, mouseButton, clickCount, keyPressTracker - .getModifiers()); + if (w != null) + w.fireEvent(Widget.EVENT_MOUSE, e); - w.fireEvent(Widget.EVENT_MOUSE, e); fireGlobalEventListener(e); return e; @@ -546,30 +559,18 @@ { IWidget w = getWidget(mouseX, mouseY); - // IWidget w = getFocusedWidget(); + MouseWheelEvent e = new MouseWheelEvent(w != null, w, mouseX, mouseY, up, rotation, scrollAmount, keyPressTracker + .getModifiers()); - if (!this.isEnabled() && w != null) + if (!this.isEnabled()) return null; - MouseWheelEvent e = new MouseWheelEvent(w, mouseX, mouseY, up, rotation, scrollAmount, keyPressTracker - .getModifiers()); - w.fireEvent(Widget.EVENT_MOUSE, e); + if (w != null) + w.fireEvent(Widget.EVENT_MOUSE, e); + fireGlobalEventListener(e); - // if the widget under the mouse isn't the display, we mustn't send the event - // elsewhere. - if (getWidget(mouseX, mouseY) == this) - return e; - return e; - /* - * huh? What are you guys doing here? The focused widget has to receive the mouse - * wheel event! // do not hit plain display if (!w.equals(this)) { for (Widget wi : - * notifyList) { if (wi.insideMargin(mouseX, mouseY)) wi.mouseWheel(new - * MouseWheelEvent(wi, up)); } } - * - * return false; - */ } /** @@ -604,93 +605,93 @@ { // retrieve Widget below mouse cursor IWidget w = getWidget(displayX, displayY); + + MouseMovedEvent event = new MouseMovedEvent(w != null, w, displayX, displayY, keyPressTracker.getModifiers()); + if (!this.isEnabled()) - return null; + return event; - MouseMovedEvent event = new MouseMovedEvent(w, displayX, displayY, keyPressTracker.getModifiers()); - w.fireEvent(Widget.EVENT_MOUSE, event); + if (w != null) + w.fireEvent(Widget.EVENT_MOUSE, event); // w points to a different Widget than before! if (!mouseOverWidget.equals(w)) { - MouseExitedEvent exited = new MouseExitedEvent(w, mouseOverWidget, displayX, displayY, keyPressTracker + MouseExitedEvent exited = new MouseExitedEvent(w != null, w, mouseOverWidget, displayX, displayY, keyPressTracker .getModifiers()); mouseOverWidget.fireEvent(Widget.EVENT_MOUSE, exited); fireGlobalEventListener(exited); - MouseEnteredEvent entered = new MouseEnteredEvent(w, mouseOverWidget, displayX, displayY, keyPressTracker - .getModifiers()); - w.fireEvent(EVENT_MOUSE, entered); + MouseEnteredEvent entered = new MouseEnteredEvent(w != null, w, mouseOverWidget, displayX, displayY, + keyPressTracker.getModifiers()); + if (w != null) + w.fireEvent(EVENT_MOUSE, entered); fireGlobalEventListener(entered); } mouseOverWidget = w; + return event; } public IWidget getWidget(int x, int y) { IWidget w = super.getWidget(x, y); - if (w != null) - return w; - return this; + // if (w != null) + return w; + // return this; } public KeyPressedEvent fireKeyPressedEvent(char keyValue, Key keyClass) { + KeyPressedEvent e = new KeyPressedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, + this.keyPressTracker.getModifiers()); + if (!this.isEnabled()) - return null; + return e; keyPressTracker.setModifierPressed(keyClass); - KeyPressedEvent e = new KeyPressedEvent(focusedWidget, keyValue, keyClass, this.keyPressTracker.getModifiers()); if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); fireGlobalEventListener(e); - return e; } - else - { - return e; - } + return e; } public KeyReleasedEvent fireKeyReleasedEvent(char keyValue, Key keyClass) { + KeyReleasedEvent e = new KeyReleasedEvent(focusedWidget != null, focusedWidget, keyValue, keyClass, + this.keyPressTracker.getModifiers()); + if (!this.isEnabled()) - return null; + return e; keyPressTracker.setModifierReleased(keyClass); - KeyReleasedEvent e = new KeyReleasedEvent(focusedWidget, keyValue, keyClass, this.keyPressTracker.getModifiers()); if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); fireGlobalEventListener(e); - return e; } - else - { - return e; - } + + return e; } public KeyTypedEvent fireKeyTypedEvent(char keyValue) { + KeyTypedEvent e = new KeyTypedEvent(focusedWidget != null, focusedWidget, keyValue, this.keyPressTracker + .getModifiers()); + if (!this.isEnabled()) - return null; + return e; - KeyTypedEvent e = new KeyTypedEvent(focusedWidget, keyValue, this.keyPressTracker.getModifiers()); if (focusedWidget != null) { focusedWidget.fireEvent(Widget.EVENT_KEY, e); fireGlobalEventListener(e); - return e; } - else - { - return e; - } + return e; } /** Modified: src/org/fenggui/ObservableLabelWidget.java =================================================================== --- src/org/fenggui/ObservableLabelWidget.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/ObservableLabelWidget.java 2009-08-08 22:48:54 UTC (rev 651) @@ -285,10 +285,6 @@ { ObservableLabelWidget result = (ObservableLabelWidget) super.clone(); - LabelAppearance app = this.getAppearance().clone(result); - - result.setAppearance(app); - //TODO: make text data clonable as well //result.textData = this.textData.clone(); result.initTextData(); Modified: src/org/fenggui/RadioButton.java =================================================================== --- src/org/fenggui/RadioButton.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/RadioButton.java 2009-08-08 22:48:54 UTC (rev 651) @@ -19,8 +19,9 @@ package org.fenggui; import java.io.IOException; -import java.util.ArrayList; +import org.fenggui.event.Event; +import org.fenggui.event.IGenericEventListener; import org.fenggui.event.ISelectionChangedListener; import org.fenggui.event.SelectionChangedEvent; import org.fenggui.event.key.Key; @@ -28,6 +29,7 @@ import org.fenggui.event.mouse.MousePressedEvent; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOnlyStream; +import org.fenggui.util.Log; /** * Implementation of a radio button which usually represents a single option out of a set @@ -40,14 +42,15 @@ */ public class RadioButton<E> extends ObservableLabelWidget implements IToggable<RadioButton<E>> { - private ToggableGroup<RadioButton<E>> radioButtonGroup = null; - private E value = null; - private boolean selected = false; - private ArrayList<ISelectionChangedListener> selectionChangedHook = new ArrayList<ISelectionChangedListener>(); + public static final String EVENT_SELECTIONCHANGED = "FengGUI_Event_SelectionChanged"; - public static final String STATE_SELECTED = "selected"; - public static final String STATE_DESELECTED = "deselected"; + private ToggableGroup<RadioButton<E>> radioButtonGroup = null; + private E value = null; + private boolean selected = false; + public static final String STATE_SELECTED = "selected"; + public static final String STATE_DESELECTED = "deselected"; + public RadioButton(String text, ToggableGroup<RadioButton<E>> group) { super(); @@ -89,7 +92,7 @@ * @see org.fenggui.ObservableWidget#keyPressed(org.fenggui.event.key.KeyPressedEvent) */ - public void onEventFired(String eventType, KeyPressedEvent keyPressedEvent) + protected void onEventFired(String eventType, KeyPressedEvent keyPressedEvent) { if (keyPressedEvent.getKeyClass() == Key.ENTER || Character.isSpaceChar(keyPressedEvent.getKey())) { @@ -101,7 +104,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mousePressed(org.fenggui.event.mouse.MousePressedEvent) */ - public void onEventFired(String eventType, MousePressedEvent mousePressedEvent) + protected void onEventFired(String eventType, MousePressedEvent mousePressedEvent) { setSelected(true); super.onEventFired(eventType, mousePressedEvent); @@ -112,13 +115,10 @@ return selected; } - private void fireSelectionChangedEvent(boolean b) + protected void fireSelectionChangedEvent(boolean b) { SelectionChangedEvent e = new SelectionChangedEvent(this, this, b); - for (ISelectionChangedListener l : selectionChangedHook) - { - l.selectionChanged(e); - } + this.fireEvent(EVENT_SELECTIONCHANGED, e); } public RadioButton<E> setSelected(boolean s) @@ -163,11 +163,47 @@ this.value = value; } - public void addSelectionChangedListener(ISelectionChangedListener l) + public void addSelectionChangedListener(final ISelectionChangedListener l) { - selectionChangedHook.add(l); + addEventListener(EVENT_SELECTIONCHANGED, new IGenericEventListener() + { + + private ISelectionChangedListener listener = l; + + public void processEvent(Object source, Event event) + { + if (event instanceof SelectionChangedEvent) + listener.selectionChanged((SelectionChangedEvent) event); + else + Log.error("Wrong event object for SelectionChangedEvent."); + } + + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + return listener.equals(obj); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + return listener.hashCode(); + } + + }); } + public void removeSelectionChangedListener(ISelectionChangedListener l) + { + removeEventListener(EVENT_SELECTIONCHANGED, l); + } + /* (non-Javadoc) * @see org.fenggui.ObservableLabelWidget#clone() */ @@ -177,10 +213,9 @@ { RadioButton<E> result = (RadioButton<E>) super.clone(); result.value = null; - result.selectionChangedHook = new ArrayList<ISelectionChangedListener>(); result.radioButtonGroup = null; - + return result; } - + } Modified: src/org/fenggui/StatefullWidget.java =================================================================== --- src/org/fenggui/StatefullWidget.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/StatefullWidget.java 2009-08-08 22:48:54 UTC (rev 651) @@ -23,8 +23,12 @@ import org.fenggui.binding.render.Binding; import org.fenggui.binding.render.CursorFactory.CursorType; import org.fenggui.event.FocusEvent; +import org.fenggui.event.IStateChangedListener; +import org.fenggui.event.StateChangedEvent; import org.fenggui.event.mouse.MouseEnteredEvent; import org.fenggui.event.mouse.MouseExitedEvent; +import org.fenggui.util.StateIdentifier; +import org.fenggui.util.StateManager; /** * Implementation of a statefull Widget. All widgets where the user is able to interact @@ -37,17 +41,20 @@ */ public abstract class StatefullWidget<T extends DecoratorAppearance> extends ObservableWidget { - public static final String STATE_DEFAULT = "default"; - public static final String STATE_NONE = "none"; - public static final String STATE_FOCUSED = "focused"; - public static final String STATE_HOVERED = "hovered"; - public static final String STATE_DISABLED = "disabled"; - public static final String STATE_ERROR = "error"; + public static final StateIdentifier STATE_FOCUSED = new StateIdentifier("Focus", "Focused"); + public static final StateIdentifier STATE_UNFOCUSED = new StateIdentifier("Focus", "Unfocused"); + public static final StateIdentifier STATE_HOVERED = new StateIdentifier("Hover", "Hovered"); + public static final StateIdentifier STATE_NONHOVERED = new StateIdentifier("Hover", "NonHovered"); + public static final StateIdentifier STATE_ENABLED = new StateIdentifier("Active", "Enabled"); + public static final StateIdentifier STATE_DISABLED = new StateIdentifier("Active", "Disabled"); + public static final StateIdentifier STATE_ERROR = new StateIdentifier("Error", "Error"); + public static final StateIdentifier STATE_NOERROR = new StateIdentifier("Error", "NoError"); - private T appearance = null; - private boolean hovered = false; - private boolean error = false; - private CursorType defaultHoverCursorType = CursorType.HAND; + private T appearance = null; + private boolean hovered = false; + private boolean error = false; + private CursorType defaultHoverCursorType = CursorType.HAND; + private StateManager stateManager; /** * creates a new StatefullWidget. @@ -55,8 +62,17 @@ public StatefullWidget() { super(); + stateManager = new StateManager(); + stateManager.addStates(STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, + STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + stateManager.addStateChangedListener(new StateChangedListener(this)); } + protected StateManager getStateManager() + { + return stateManager; + } + /* (non-Javadoc) * @see org.fenggui.ObservableWidget#focusChanged(org.fenggui.event.FocusEvent) */ @@ -91,63 +107,34 @@ /** * Can be overwritten by subclasses if needed. */ - protected void disableDefaultStates() - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_DEFAULT, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_NONE, false); - getAppearance().setEnabled(STATE_DEFAULT, true); - } - protected void updateState() { - updateState(null); - } + if (isEnabled()) + { + stateManager.activate(STATE_ENABLED); - /** - * Can be overwritten by subclasses if needed. - */ - protected void updateState(String newActiveState) - { - // re-enable default state so switches get called - getAppearance().setEnabled(STATE_DEFAULT, true); + if (isHovered()) + stateManager.activate(STATE_HOVERED); + else + stateManager.activate(STATE_NONHOVERED); - if (isEnabled()) - { if (isFocused()) - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, true); - getAppearance().setEnabled(STATE_NONE, false); - } + stateManager.activate(STATE_FOCUSED); else - { - getAppearance().setEnabled(STATE_DISABLED, false); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_NONE, !isHovered()); - } + stateManager.activate(STATE_UNFOCUSED); if (hasError()) - getAppearance().setEnabled(STATE_ERROR, true); + stateManager.activate(STATE_ERROR); else - getAppearance().setEnabled(STATE_ERROR, false); + stateManager.activate(STATE_NOERROR); } else { - getAppearance().setEnabled(STATE_DISABLED, true); - getAppearance().setEnabled(STATE_FOCUSED, false); - getAppearance().setEnabled(STATE_ERROR, false); - getAppearance().setEnabled(STATE_NONE, false); + stateManager.activate(STATE_DISABLED); + stateManager.activate(STATE_NOERROR); + stateManager.activate(STATE_UNFOCUSED); + stateManager.activate(STATE_NONHOVERED); } - - getAppearance().setEnabled(STATE_HOVERED, isHovered()); - - if (newActiveState != null) - { - getAppearance().setEnabled(newActiveState, true); - } } /** @@ -197,6 +184,8 @@ if (isFocused()) this.getDisplay().setFocusedWidget(null); } + + updateState(); } } @@ -285,6 +274,30 @@ { StatefullWidget<T> result = (StatefullWidget<T>) super.clone(); result.appearance = (T) appearance.clone(result); + result.stateManager = new StateManager(); + result.stateManager.addStates(STATE_FOCUSED, STATE_UNFOCUSED, STATE_HOVERED, STATE_NONHOVERED, STATE_ENABLED, + STATE_DISABLED, STATE_ERROR, STATE_NOERROR); + result.stateManager.addStateChangedListener(new StateChangedListener(result)); return result; } + + private static final class StateChangedListener implements IStateChangedListener + { + private StatefullWidget<?> widget; + + public StateChangedListener(StatefullWidget<?> widget) + { + this.widget = widget; + } + + /* (non-Javadoc) + * @see org.fenggui.event.IStateChangedListener#stateChanged(org.fenggui.event.StateChangedEvent) + */ + public void stateChanged(StateChangedEvent e) + { + this.widget.getAppearance().enableAll(); + this.widget.getAppearance().disableStates(this.widget.stateManager.getInactiveStates()); + } + + } } Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/Widget.java 2009-08-08 22:48:54 UTC (rev 651) @@ -270,7 +270,7 @@ Dimension oldSize = size; size = s; if (!oldSize.equals(size)) - this.fireEvent(EVENT_SIZECHANGED, new SizeChangedEvent(oldSize, size)); + this.fireEvent(EVENT_SIZECHANGED, new SizeChangedEvent(true, oldSize, size)); } /** @@ -467,7 +467,7 @@ { Dimension oldSize = minSize; minSize = dim; - fireEvent(EVENT_MINSIZECHANGED, new SizeChangedEvent(oldSize, minSize)); + fireEvent(EVENT_MINSIZECHANGED, new SizeChangedEvent(true, oldSize, minSize)); } /* (non-Javadoc) @@ -567,7 +567,7 @@ { Point oldPosition = position; position = p; - fireEvent(EVENT_POSITIONCHANGED, new PositionChangedEvent(oldPosition, position)); + fireEvent(EVENT_POSITIONCHANGED, new PositionChangedEvent(true, oldPosition, position)); } /* (non-Javadoc) @@ -700,16 +700,45 @@ if (this.isVisible() && this.isEnabled()) { //handle widget internal events - try + //search for special method with eventType + // onEventFired(String eventType, <X extends Event>); + // + //makes catching events on widgets simple and doesn't + //require to register a listener. + + Class<?> clazz = this.getClass(); + Method method = null; + + if (clazz != null) { - //search for special method with eventType - // onEventFired(String eventType, <X extends Event>); - Method method = this.getClass().getDeclaredMethod("onEventFired", String.class, eventObject.getClass()); - method.setAccessible(true); - method.invoke(this, eventType, eventObject); + //search for right method on classes of widget + while (!clazz.equals(Widget.class) && method == null) + { + try + { + method = clazz.getDeclaredMethod("onEventFired", String.class, eventObject.getClass()); + } + catch (Exception e) + { + clazz = clazz.getSuperclass(); + } + } } - catch (Exception e) + + if (method != null) { + try + { + method.setAccessible(true); + method.invoke(this, eventType, eventObject); + } + catch (Exception e) + { + + } + } + else + { //can't call specific method over reflection, calling default this.onEventFired(eventType, eventObject); } @@ -778,6 +807,6 @@ this.enabled = enabled; - fireEvent(EVENT_ACTIVATED, new ActivationEvent(this, enabled)); + fireEvent(EVENT_ACTIVATED, new ActivationEvent(true, this, enabled)); } } Modified: src/org/fenggui/appearance/DecoratorAppearance.java =================================================================== --- src/org/fenggui/appearance/DecoratorAppearance.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/appearance/DecoratorAppearance.java 2009-08-08 22:48:54 UTC (rev 651) @@ -21,6 +21,7 @@ import java.io.IOException; import java.util.ArrayList; +import java.util.List; import org.fenggui.StandardWidget; import org.fenggui.binding.render.Graphics; @@ -34,6 +35,7 @@ import org.fenggui.theme.xml.InputOutputStream; import org.fenggui.util.Spacing; import org.fenggui.util.Span; +import org.fenggui.util.StateIdentifier; /** * Specialized appearance definition for widgets that need decorators (mainly @@ -187,8 +189,7 @@ * @param widgetWidth the widget if the whole widget * @param widgetHeight the heigth of the whole widget */ - private void paintDecorator(IDecorator d, Graphics g, SpacingAppearance app, int widgetWidth, - int widgetHeight) + private void paintDecorator(IDecorator d, Graphics g, SpacingAppearance app, int widgetWidth, int widgetHeight) { if (!d.isEnabled()) return; @@ -221,6 +222,25 @@ d.paint(g, x, y, widgetWidth, widgetHeight); } + public void enableAll() + { + for (IDecorator wrapper : backgroundDecorators) + { + wrapper.setEnabled(true); + } + + for (IDecorator wrapper : foregroundDecorators) + { + wrapper.setEnabled(true); + } + } + + public void disableStates(List<StateIdentifier> states) + { + for (StateIdentifier state : states) + setEnabled(state.toString(), false); + } + public void setEnabled(String label, boolean enable) { for (IDecorator wrapper : backgroundDecorators) Modified: src/org/fenggui/composite/menu/Menu.java =================================================================== --- src/org/fenggui/composite/menu/Menu.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/composite/menu/Menu.java 2009-08-08 22:48:54 UTC (rev 651) @@ -107,7 +107,7 @@ super.onEventFired(eventType, mouseDraggedEvent); - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(mouseDraggedEvent.getOriginalSource(), mouseDraggedEvent.getDisplayX(), + this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mouseDraggedEvent.getOriginalSource(), mouseDraggedEvent.getDisplayX(), mouseDraggedEvent.getDisplayY(), mouseDraggedEvent.getModifiers())); isDragging = true; } @@ -156,7 +156,7 @@ if (isDragging) { - MousePressedEvent event = new MousePressedEvent(Menu.this, mouseReleasedEvent.getDisplayX(), mouseReleasedEvent + MousePressedEvent event = new MousePressedEvent(true, Menu.this, mouseReleasedEvent.getDisplayX(), mouseReleasedEvent .getDisplayY(), mouseReleasedEvent.getButton(), mouseReleasedEvent.getClickCount(), getDisplay() .getKeyPressTracker().getModifiers()); this.fireEvent(Widget.EVENT_MOUSE, event); Modified: src/org/fenggui/composite/menu/MenuBar.java =================================================================== --- src/org/fenggui/composite/menu/MenuBar.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/composite/menu/MenuBar.java 2009-08-08 22:48:54 UTC (rev 651) @@ -203,7 +203,7 @@ protected void onEventFired(String eventType, MouseDraggedEvent mp) { - this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(mp.getOriginalSource(), mp.getDisplayX(), mp.getDisplayY(), mp.getModifiers())); + this.fireEvent(Widget.EVENT_MOUSE, new MouseMovedEvent(true, mp.getOriginalSource(), mp.getDisplayX(), mp.getDisplayY(), mp.getModifiers())); super.onEventFired(eventType, mp); } Modified: src/org/fenggui/event/ActivationEvent.java =================================================================== --- src/org/fenggui/event/ActivationEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/ActivationEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -25,9 +25,9 @@ { private boolean enabled = true; - public ActivationEvent(IWidget source, boolean enabled) + public ActivationEvent(boolean hit, IWidget source, boolean enabled) { - super(source); + super(hit, null, source); this.enabled = enabled; } Modified: src/org/fenggui/event/ButtonPressedEvent.java =================================================================== --- src/org/fenggui/event/ButtonPressedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/ButtonPressedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -40,7 +40,7 @@ */ public ButtonPressedEvent(Button trigger, Set<Key> modifiers) { - super(trigger); + super(null, trigger); button = trigger; this.modifiers = modifiers; } Modified: src/org/fenggui/event/ContentChangedEvent.java =================================================================== --- src/org/fenggui/event/ContentChangedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/ContentChangedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -34,7 +34,7 @@ public ContentChangedEvent(IWidget source, String oldContent, String newContent) { - super(source); + super(null, source); this.oldContent = oldContent; this.newContent = newContent; } Modified: src/org/fenggui/event/DisplayResizedEvent.java =================================================================== --- src/org/fenggui/event/DisplayResizedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/DisplayResizedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -33,7 +33,7 @@ public DisplayResizedEvent(int width, int height) { - super(); + super(null); this.width = width; this.height = height; } Modified: src/org/fenggui/event/ElementEvent.java =================================================================== --- src/org/fenggui/event/ElementEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/ElementEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -38,12 +38,14 @@ */ public ElementEvent(T element, KeyEvent keyEvent) { + super(null); this.element = element; this.keyEvent = keyEvent; } public ElementEvent(T element, MouseEvent mouseEvent) { + super(null); this.element = element; this.mouseEvent = mouseEvent; } Modified: src/org/fenggui/event/Event.java =================================================================== --- src/org/fenggui/event/Event.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/Event.java 2009-08-08 22:48:54 UTC (rev 651) @@ -29,9 +29,11 @@ { private boolean alreadyUsed = false; + private String specialType; - public Event() + public Event(String specialType) { + this.specialType = specialType; } /** @@ -50,4 +52,14 @@ this.alreadyUsed = true; } + /** + * Special identifier used to differentiate between event "groups" like mousePressed, + * mouseReleased events. + * + * @return + */ + public String getSpecialType() + { + return this.specialType; + } } \ No newline at end of file Modified: src/org/fenggui/event/FocusEvent.java =================================================================== --- src/org/fenggui/event/FocusEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/FocusEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -25,9 +25,9 @@ { private boolean focusLost = false; - public FocusEvent(IWidget source, boolean focusLost) + public FocusEvent(boolean hit, IWidget source, boolean focusLost) { - super(source); + super(hit, "Focus", source); this.focusLost = focusLost; } Modified: src/org/fenggui/event/ISelectionChangedListener.java =================================================================== --- src/org/fenggui/event/ISelectionChangedListener.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/ISelectionChangedListener.java 2009-08-08 22:48:54 UTC (rev 651) @@ -19,7 +19,7 @@ */ package org.fenggui.event; -public interface ISelectionChangedListener +public interface ISelectionChangedListener extends IEventListener { public void selectionChanged(SelectionChangedEvent selectionChangedEvent); } Added: src/org/fenggui/event/IStateChangedListener.java =================================================================== --- src/org/fenggui/event/IStateChangedListener.java (rev 0) +++ src/org/fenggui/event/IStateChangedListener.java 2009-08-08 22:48:54 UTC (rev 651) @@ -0,0 +1,31 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (C) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on Aug 3, 2009 + * $Id$ + */ +package org.fenggui.event; + + +/** + * + * @author Marc Menghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public interface IStateChangedListener extends IEventListener +{ + public void stateChanged(StateChangedEvent e); +} Modified: src/org/fenggui/event/LeafeTraversingEvent.java =================================================================== --- src/org/fenggui/event/LeafeTraversingEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/LeafeTraversingEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -28,17 +28,11 @@ * @author marc menghin, last edited by $Author$, $Date$ * @version $Revision$ */ -public abstract class LeafeTraversingEvent extends Event +public abstract class LeafeTraversingEvent extends TraversingEvent { - private IWidget source; - - public LeafeTraversingEvent(IWidget source) + + public LeafeTraversingEvent(boolean hit, String specialType, IWidget source) { - this.source = source; + super(hit, specialType, source); } - - public IWidget getOriginalSource() - { - return this.source; - } } Modified: src/org/fenggui/event/MenuClosedEvent.java =================================================================== --- src/org/fenggui/event/MenuClosedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/MenuClosedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -32,7 +32,7 @@ public MenuClosedEvent(Menu m) { - super(m); + super(null, m); this.menu = m; } Modified: src/org/fenggui/event/MenuItemPressedEvent.java =================================================================== --- src/org/fenggui/event/MenuItemPressedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/MenuItemPressedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -33,7 +33,7 @@ public MenuItemPressedEvent(Menu source, MenuItem i) { - super(source); + super(null, source); item = i; } Modified: src/org/fenggui/event/PositionChangedEvent.java =================================================================== --- src/org/fenggui/event/PositionChangedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/PositionChangedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -32,9 +32,9 @@ /** * @param source */ - public PositionChangedEvent(Point oldPosition, Point newPosition) + public PositionChangedEvent(boolean hit, Point oldPosition, Point newPosition) { - super(); + super(null); this.oldPosition = oldPosition; this.newPosition = newPosition; } Modified: src/org/fenggui/event/RootTraversingEvent.java =================================================================== --- src/org/fenggui/event/RootTraversingEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/RootTraversingEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -28,17 +28,10 @@ * @author marc menghin, last edited by $Author$, $Date$ * @version $Revision$ */ -public abstract class RootTraversingEvent extends Event +public abstract class RootTraversingEvent extends TraversingEvent { - private IWidget source; - - public RootTraversingEvent(IWidget source) + public RootTraversingEvent(boolean hit, String specialType, IWidget source) { - this.source = source; + super(hit, specialType, source); } - - public IWidget getOriginalSource() - { - return this.source; - } } Modified: src/org/fenggui/event/SelectionChangedEvent.java =================================================================== --- src/org/fenggui/event/SelectionChangedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/SelectionChangedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -29,7 +29,7 @@ public SelectionChangedEvent(IWidget source, IToggable<?> wi, boolean newState) { - super(source); + super(null, source); w = wi; st = newState; } Modified: src/org/fenggui/event/SizeChangedEvent.java =================================================================== --- src/org/fenggui/event/SizeChangedEvent.java 2009-07-13 20:33:13 UTC (rev 650) +++ src/org/fenggui/event/SizeChangedEvent.java 2009-08-08 22:48:54 UTC (rev 651) @@ -31,9 +31,9 @@ private Dimens... [truncated message content] |
From: <mar...@us...> - 2009-07-13 20:33:17
|
Revision: 650 http://fenggui.svn.sourceforge.net/fenggui/?rev=650&view=rev Author: marcmenghin Date: 2009-07-13 20:33:13 +0000 (Mon, 13 Jul 2009) Log Message: ----------- - improve FlowLayout minsize handling (patch from pjt33) Modified Paths: -------------- src/org/fenggui/layout/FlowLayout.java Modified: src/org/fenggui/layout/FlowLayout.java =================================================================== --- src/org/fenggui/layout/FlowLayout.java 2009-07-06 20:23:09 UTC (rev 649) +++ src/org/fenggui/layout/FlowLayout.java 2009-07-13 20:33:13 UTC (rev 650) @@ -378,6 +378,17 @@ // // dim.height += insets.top + insets.bottom + vgap * 2; // width += hgap * 2; // height += vgap * 2; + + // There is no perfect solution to the min height depending on + // the available width. However, we can at least ensure that + // something is visible. + for (IWidget widget : content) + { + Dimension d = widget.getMinSize(); + height = Math.max(height, d.getHeight()); + width = Math.max(width, d.getWidth()); + } + Dimension dim = new Dimension(width, height); return dim; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-07-06 20:23:31
|
Revision: 649 http://fenggui.svn.sourceforge.net/fenggui/?rev=649&view=rev Author: marcmenghin Date: 2009-07-06 20:23:09 +0000 (Mon, 06 Jul 2009) Log Message: ----------- - Documentation updates on RowExLayout and its data object Modified Paths: -------------- src/org/fenggui/layout/RowExLayout.java src/org/fenggui/layout/RowExLayoutData.java Modified: src/org/fenggui/layout/RowExLayout.java =================================================================== --- src/org/fenggui/layout/RowExLayout.java 2009-06-11 18:25:55 UTC (rev 648) +++ src/org/fenggui/layout/RowExLayout.java 2009-07-06 20:23:09 UTC (rev 649) @@ -30,8 +30,8 @@ /** * Layouts Widgets in a vertical or horizontal row. Distributes all usable inner space equally to - * all grabbing child widgets. Widgets need to have the RowLayoutData set or it will use the default - * (RowLayoutData.DEFAULT). The layout is able to grab available space using weights. It is also able + * all grabbing child widgets. Widgets need to have the {@link RowLayoutData} set or it will use the default + * ({@link RowLayoutData.DEFAULT}). The layout is able to grab available space using weights. It is also able * to resize widgets to there full available or to align the widgets. * * <p> @@ -40,6 +40,8 @@ * and only use the RowLayoutData to specify the distribution. * </p> * + * @see RowExLayoutData + * @see LayoutManager * @see Alignment * @author Marc Menghin * Modified: src/org/fenggui/layout/RowExLayoutData.java =================================================================== --- src/org/fenggui/layout/RowExLayoutData.java 2009-06-11 18:25:55 UTC (rev 648) +++ src/org/fenggui/layout/RowExLayoutData.java 2009-07-06 20:23:09 UTC (rev 649) @@ -21,8 +21,10 @@ import org.fenggui.util.Alignment; /** - * Data object to give the RowExLayout hints on how to layout a widget. + * Data object to give the {@link RowExLayout} hints on how to layout a widget. * + * @see RowExLayout + * @see LayoutManager * @author Marc Menghin */ public class RowExLayoutData implements ILayoutData @@ -50,6 +52,16 @@ this.weight = weight; } + /** + * Constructor for a RowExLayoutData object. This is used for the {@link RowExLayout} manager. + * + * @see RowExLayout + * + * @param fill Sets the widgets size to the assigned space. (default true) + * @param grab Graps as much space as possible (based on weight) from the available space. (default false) + * @param weight Weight of this widget over which the available size will be distributed. (default 1.0) + * @param align Alignment of the widget inside the assigned space. (default {@link Alignment.MIDDLE}) + */ public RowExLayoutData(boolean fill, boolean grab, double weight, Alignment align) { this(fill, grab, weight); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-11 18:25:56
|
Revision: 648 http://fenggui.svn.sourceforge.net/fenggui/?rev=648&view=rev Author: marcmenghin Date: 2009-06-11 18:25:55 +0000 (Thu, 11 Jun 2009) Log Message: ----------- - fixed build errors from window api changes Modified Paths: -------------- optional/org/fenggui/experimental/LeftTitleBarWindow.java Modified: optional/org/fenggui/experimental/LeftTitleBarWindow.java =================================================================== --- optional/org/fenggui/experimental/LeftTitleBarWindow.java 2009-06-11 18:23:42 UTC (rev 647) +++ optional/org/fenggui/experimental/LeftTitleBarWindow.java 2009-06-11 18:25:55 UTC (rev 648) @@ -65,7 +65,7 @@ * @see org.fenggui.composites.Window#build(boolean, boolean, boolean) */ @Override - protected void build(boolean closeBtn) + protected void build(boolean closeBtn, boolean autoClose) { titleBar = FengGUI.createWidget(Container.class); titleBar.setParent(this); @@ -78,7 +78,7 @@ titleBar.setLayoutData(BorderLayoutData.WEST); - buildTitleBar(closeBtn); + buildTitleBar(closeBtn, autoClose); setSize(100, 120); getAppearance().add(new PlainBackground(new Color(1, 1, 1, 0.8f))); @@ -92,13 +92,13 @@ * boolean) */ @Override - protected void buildTitleBar(boolean closeBtn) + protected void buildTitleBar(boolean closeBtn, boolean autoClose) { titleBar.setLayoutManager(new RowLayout(false)); if (closeBtn) { - buildCloseButton(); + buildCloseButton(autoClose); } // Create a vertical Label This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-11 18:23:43
|
Revision: 647 http://fenggui.svn.sourceforge.net/fenggui/?rev=647&view=rev Author: marcmenghin Date: 2009-06-11 18:23:42 +0000 (Thu, 11 Jun 2009) Log Message: ----------- - fix problem when a event wants to remove itself (new event system only) Modified Paths: -------------- src/org/fenggui/Container.java src/org/fenggui/Widget.java Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-06-11 18:09:27 UTC (rev 646) +++ src/org/fenggui/Container.java 2009-06-11 18:23:42 UTC (rev 647) @@ -35,7 +35,6 @@ import org.fenggui.event.LeafeTraversingEvent; import org.fenggui.event.SizeChangedEvent; import org.fenggui.event.WidgetListChangedEvent; -import org.fenggui.event.key.KeyEvent; import org.fenggui.layout.LayoutManager; import org.fenggui.layout.RowLayout; import org.fenggui.theme.XMLTheme; Modified: src/org/fenggui/Widget.java =================================================================== --- src/org/fenggui/Widget.java 2009-06-11 18:09:27 UTC (rev 646) +++ src/org/fenggui/Widget.java 2009-06-11 18:23:42 UTC (rev 647) @@ -21,9 +21,9 @@ import java.io.IOException; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.HashMap; import java.util.Map; +import java.util.concurrent.CopyOnWriteArrayList; import org.fenggui.binding.render.Graphics; import org.fenggui.event.ActivationEvent; @@ -684,7 +684,8 @@ if (eventListeners == null) { - eventListeners = new ArrayList<IGenericEventListener>(); + //using an CopyOnWriteArrayList as events may remove themselves from the list + eventListeners = new CopyOnWriteArrayList<IGenericEventListener>(); eventHooks.put(eventType, eventListeners); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-11 18:09:29
|
Revision: 646 http://fenggui.svn.sourceforge.net/fenggui/?rev=646&view=rev Author: marcmenghin Date: 2009-06-11 18:09:27 +0000 (Thu, 11 Jun 2009) Log Message: ----------- - fixes to buildfile to enforce java 1.5 for all jar files - fixed a copy and paste bug on widgetListChanged event - fixed windowClosed event to be fired as one would expect Modified Paths: -------------- make/build.xml src/org/fenggui/Container.java src/org/fenggui/ObservableWidget.java src/org/fenggui/actor/StaticTooltipActor.java src/org/fenggui/composite/Window.java Modified: make/build.xml =================================================================== --- make/build.xml 2009-06-10 14:05:20 UTC (rev 645) +++ make/build.xml 2009-06-11 18:09:27 UTC (rev 646) @@ -83,14 +83,14 @@ </target> <target name="compile_optional" depends="buildFengGUI.jar"> - <javac destdir="${bin-optional}" source="1.5" debug="false" compiler="javac1.5" optimize="yes"> + <javac destdir="${bin-optional}" source="1.5" target="1.5" debug="false" compiler="javac1.5" optimize="yes"> <src path="${optional}" /> <classpath refid="gen.classpath-optional" /> </javac> </target> <target name="compile_examples" depends="buildFengGUI-optional.jar"> - <javac destdir="${bin-examples}" srcdir="${examples}" source="1.5" debug="false" compiler="javac1.5" optimize="yes" includes="org/fenggui/example/**" excludes="${examples}/org/fenggui/unit/**"> + <javac destdir="${bin-examples}" srcdir="${examples}" source="1.5" target="1.5" debug="false" compiler="javac1.5" optimize="yes" includes="org/fenggui/example/**" excludes="${examples}/org/fenggui/unit/**"> <classpath refid="gen.classpath-examples" /> </javac> </target> Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-06-10 14:05:20 UTC (rev 645) +++ src/org/fenggui/Container.java 2009-06-11 18:09:27 UTC (rev 646) @@ -58,13 +58,13 @@ */ public class Container extends StandardWidget implements IContainer, Cloneable { - public static final String EVENT_WIDGETLISTCHANGED = "FengGUI_Widget_List_Changed"; + public static final String EVENT_WIDGETLISTCHANGED = "FengGUI_Widget_List_Changed"; - private LayoutManager layoutManager = null; - protected List<IWidget> notifyList; - private boolean keyTraversalRoot = false; - private DefaultAppearance appearance = null; - private boolean invalidLayout = false; + private LayoutManager layoutManager = null; + protected List<IWidget> notifyList; + private boolean keyTraversalRoot = false; + private DefaultAppearance appearance = null; + private boolean invalidLayout = false; /** * Creates a new <code>Container</code>. @@ -106,26 +106,21 @@ public void processEvent(Object source, Event event) { - if (event instanceof KeyEvent) + if (event instanceof WidgetListChangedEvent) { - if (event instanceof WidgetListChangedEvent) - { - WidgetListChangedEvent widgetChangedEvent = (WidgetListChangedEvent) event; + WidgetListChangedEvent widgetChangedEvent = (WidgetListChangedEvent) event; - if (widgetChangedEvent.added()) - { - listener.widgetAdded(source, widgetChangedEvent); - } - else - { - listener.widgetRemoved(source, widgetChangedEvent); - } + if (widgetChangedEvent.added()) + { + listener.widgetAdded(source, widgetChangedEvent); } else - Log.error("Unknown Type of KeyEvent Object."); + { + listener.widgetRemoved(source, widgetChangedEvent); + } } else - Log.error("Wrong event object for KeyEvent."); + Log.error("Unknown Type for widgetListChanged event."); } /* (non-Javadoc) Modified: src/org/fenggui/ObservableWidget.java =================================================================== --- src/org/fenggui/ObservableWidget.java 2009-06-10 14:05:20 UTC (rev 645) +++ src/org/fenggui/ObservableWidget.java 2009-06-11 18:09:27 UTC (rev 646) @@ -201,10 +201,10 @@ else if (event instanceof MouseWheelEvent) listener.mouseWheel(source, (MouseWheelEvent) event); else - Log.error("Unknown Type of KeyEvent Object."); + Log.error("Unknown Type of MouseEvent Object."); } else - Log.error("Wrong event object for KeyEvent."); + Log.error("Wrong event object for MouseEvent."); } /* (non-Javadoc) Modified: src/org/fenggui/actor/StaticTooltipActor.java =================================================================== --- src/org/fenggui/actor/StaticTooltipActor.java 2009-06-10 14:05:20 UTC (rev 645) +++ src/org/fenggui/actor/StaticTooltipActor.java 2009-06-11 18:09:27 UTC (rev 646) @@ -79,10 +79,9 @@ }; } - /* - * (non-Javadoc) - * - * @see org.fenggui.actor.IActor#hook(org.fenggui.IWidget) + /** + * Applies this tooltip to the specified {@see IWidget}. The + * <code>widget</code> must already be a part of the Widget Tree. */ public void hook(IWidget widget) { @@ -107,7 +106,7 @@ if (fevent.isFocusLost()) { hideTooltip(); - lastWidget.removeEventListener(Widget.EVENT_POSITIONCHANGED,positionListener); + lastWidget.removeEventListener(Widget.EVENT_POSITIONCHANGED, positionListener); lastWidget.removeEventListener(Widget.EVENT_SIZECHANGED, sizeListener); lastWidget = null; } Modified: src/org/fenggui/composite/Window.java =================================================================== --- src/org/fenggui/composite/Window.java 2009-06-10 14:05:20 UTC (rev 645) +++ src/org/fenggui/composite/Window.java 2009-06-11 18:09:27 UTC (rev 646) @@ -103,25 +103,10 @@ super(); // Build the window structure - build(closeBtn); + build(closeBtn, autoClose); this.autoClose = autoClose; - if (autoClose) - { - buildAutoClose(); - } } - private void buildAutoClose() - { - addWindowClosedListener(new IWindowClosedListener() - { - public void windowClosed(WindowClosedEvent windowClosedEvent) - { - windowClosedEvent.getWindow().close(); - } - }); - } - /** * Returns the <code>Container</code> that is supposed to * hold the content of the <code>Window</code>. @@ -163,7 +148,7 @@ * @param maximizeBtn * @param minimizeBtn */ - protected void build(boolean closeBtn) + protected void build(boolean closeBtn, boolean autoClose) { titleBar = new Container(); this.addWidget(titleBar); @@ -177,7 +162,7 @@ titleBar.setLayoutData(BorderLayoutData.NORTH); - buildTitleBar(closeBtn); + buildTitleBar(closeBtn, autoClose); setSize(100, 120); } @@ -188,7 +173,7 @@ * @param maximizeBtn flag indicating the existence of a maximize button * @param minimizeBtn flag indicating the existence of a minimize button */ - protected void buildTitleBar(boolean closeBtn) + protected void buildTitleBar(boolean closeBtn, boolean autoClose) { titleBar.setLayoutManager(new RowLayout(true)); @@ -198,26 +183,28 @@ if (closeBtn) { - buildCloseButton(); + buildCloseButton(autoClose); } } /** * Build the closeButton */ - protected void buildCloseButton() + protected void buildCloseButton(boolean autoClose) { closeButton = new Button(); titleBar.addWidget(closeButton); closeButton.setText("X"); - closeButton.addButtonPressedListener(new IButtonPressedListener() + if (autoClose) { - public void buttonPressed(ButtonPressedEvent e) + closeButton.addButtonPressedListener(new IButtonPressedListener() { - fireWindowClosedEvent(); - //close(); - } - }); + public void buttonPressed(ButtonPressedEvent e) + { + close(); + } + }); + } closeButton.setTraversable(false); } @@ -646,9 +633,8 @@ */ public void close() { - //Display.getInstance().removeDndListener(dndListener); + //detaching from widget tree will remove event listeners and fire closed event ((Container) getParent()).removeWidget(this); - //fireWindowClosedEvent(); } /** @@ -667,7 +653,8 @@ public void addedToWidgetTree() { super.addedToWidgetTree(); - getDisplay().addDndListener(moveDnDListener); + if (moveDnDListener != null) + getDisplay().addDndListener(moveDnDListener); if (resizeDnDListener != null) getDisplay().addDndListener(resizeDnDListener); } @@ -680,8 +667,11 @@ public void removedFromWidgetTree() { super.removedFromWidgetTree(); - getDisplay().removeDndListener(moveDnDListener); - getDisplay().removeDndListener(resizeDnDListener); + if (moveDnDListener != null) + getDisplay().removeDndListener(moveDnDListener); + if (resizeDnDListener != null) + getDisplay().removeDndListener(resizeDnDListener); + fireWindowClosedEvent(); } /** @@ -794,26 +784,24 @@ result.titleBar = titleBar.clone(); result.title = title.clone(); result.closeButton = closeButton.clone(); - + result.addWidget(result.titleBar); result.addWidget(result.content); result.titleBar.addWidget(result.title); result.titleBar.addWidget(result.closeButton); - - result.closeButton.addButtonPressedListener(new IButtonPressedListener() - { - public void buttonPressed(ButtonPressedEvent e) - { - Window.this.fireWindowClosedEvent(); - //close(); - } - }); - + if (this.autoClose) { - result.buildAutoClose(); + result.closeButton.addButtonPressedListener(new IButtonPressedListener() + { + public void buttonPressed(ButtonPressedEvent e) + { + close(); + } + }); } + return result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-10 14:05:26
|
Revision: 645 http://fenggui.svn.sourceforge.net/fenggui/?rev=645&view=rev Author: marcmenghin Date: 2009-06-10 14:05:20 +0000 (Wed, 10 Jun 2009) Log Message: ----------- - fix missing event cloning problem on texteditor Modified Paths: -------------- src/org/fenggui/TextEditor.java Modified: src/org/fenggui/TextEditor.java =================================================================== --- src/org/fenggui/TextEditor.java 2009-06-06 12:05:06 UTC (rev 644) +++ src/org/fenggui/TextEditor.java 2009-06-10 14:05:20 UTC (rev 645) @@ -70,9 +70,9 @@ public static final String RESTRICT_LETTERSANDNUMBERS = "[A-Z0-9]+"; public static final String RESTRICT_EMAIL = "[A-Z0-9\\._%\\+\\-@]+"; - private ArrayList<ITextChangedListener> textChangedHook = new ArrayList<ITextChangedListener>(); + private ArrayList<ITextChangedListener> textChangedHook; - private TextEditorDnDListener dndListener = null; + private TextEditorDnDListener dndListener; private ISizeChangedListener textSizeChangedListener; /** @@ -99,28 +99,30 @@ public TextEditor() { setAppearance(new TextAppearance(this)); - setupDefaults(); + setupDefaults(this); updateMinSize(); } - private void setupDefaults() + private void setupDefaults(TextEditor editor) { - textData = new EditableTextContentManager(this.getAppearance()); - emptyData = new TextContentManager(); - dndListener = new TextEditorDnDListener(this); - setTraversable(true); - setDefaultHoverCursorType(CursorType.TEXT); - textSizeChangedListener = new ISizeChangedListener() + editor.textData = new EditableTextContentManager(editor.getAppearance()); + editor.emptyData = new TextContentManager(); + editor.passwordData = ""; + editor.dndListener = new TextEditorDnDListener(editor); + editor.textChangedHook = new ArrayList<ITextChangedListener>(); + editor.setTraversable(true); + editor.setDefaultHoverCursorType(CursorType.TEXT); + editor.textSizeChangedListener = new ISizeChangedListener() { public void sizeChanged(Object sender, SizeChangedEvent event) { - updateMinSize(); + TextEditor.this.updateMinSize(); } }; - buildSpecialEvents(); + editor.textData.addSizeChangedListener(editor.textSizeChangedListener); } /* (non-Javadoc) @@ -139,7 +141,7 @@ { textData.adaptChange(getAppearance().getContentWidth(), getAppearance().getContentHeight(), getAppearance()); emptyData.adaptChange(getAppearance().getContentWidth(), getAppearance().getContentHeight(), getAppearance()); - + super.onEventFired(eventType, event); } @@ -155,7 +157,7 @@ if (handleKeyPressed(keyPressedEvent)) keyPressedEvent.setUsed(); } - + super.onEventFired(eventType, keyPressedEvent); } @@ -759,8 +761,7 @@ { TextEditor result = (TextEditor) super.clone(); - result.setAppearance(this.getAppearance().clone(result)); - result.setupDefaults(); + result.setupDefaults(result); return result; } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-06 12:05:14
|
Revision: 644 http://fenggui.svn.sourceforge.net/fenggui/?rev=644&view=rev Author: marcmenghin Date: 2009-06-06 12:05:06 +0000 (Sat, 06 Jun 2009) Log Message: ----------- - fixed some regex strings Modified Paths: -------------- src/org/fenggui/TextEditor.java Modified: src/org/fenggui/TextEditor.java =================================================================== --- src/org/fenggui/TextEditor.java 2009-06-04 09:36:25 UTC (rev 643) +++ src/org/fenggui/TextEditor.java 2009-06-06 12:05:06 UTC (rev 644) @@ -63,10 +63,10 @@ public class TextEditor extends StatefullWidget<TextAppearance> implements ITextWidget, Cloneable { // a few nice definitions to restirct userinput - public static final String RESTRICT_NUMBERSONLY = "[0-9-+]+"; - public static final String RESTRICT_NUMBERSONLYDECIMAL = "[0-9.,-+]+"; + public static final String RESTRICT_NUMBERSONLY = "[0-9\\-\\+]+"; + public static final String RESTRICT_NUMBERSONLYDECIMAL = "[0-9\\.,\\-\\+]+"; public static final String RESTRICT_LETTERSONLY = "[A-Z]+"; - public static final String RESTRICT_CHARACTERSOFIP = "[0-9.:]+"; + public static final String RESTRICT_CHARACTERSOFIP = "[0-9\\.:]+"; public static final String RESTRICT_LETTERSANDNUMBERS = "[A-Z0-9]+"; public static final String RESTRICT_EMAIL = "[A-Z0-9\\._%\\+\\-@]+"; This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-04 09:36:34
|
Revision: 643 http://fenggui.svn.sourceforge.net/fenggui/?rev=643&view=rev Author: marcmenghin Date: 2009-06-04 09:36:25 +0000 (Thu, 04 Jun 2009) Log Message: ----------- - fixed HelloWorld example to use a theme and construct widgets correctly again Modified Paths: -------------- test/org/fenggui/example/HelloWorld.java Modified: test/org/fenggui/example/HelloWorld.java =================================================================== --- test/org/fenggui/example/HelloWorld.java 2009-06-02 05:21:31 UTC (rev 642) +++ test/org/fenggui/example/HelloWorld.java 2009-06-04 09:36:25 UTC (rev 643) @@ -30,6 +30,7 @@ import org.fenggui.binding.render.jogl.EventBinding; import org.fenggui.binding.render.jogl.JOGLBinding; import org.fenggui.composite.Window; +import org.fenggui.theme.DefaultTheme; import org.fenggui.util.Alignment; import com.sun.opengl.util.Animator; @@ -87,8 +88,10 @@ new EventBinding(canvas, display); - Window w = new Window(true, true); - Label l = new Label("Hello World!!"); + Window w = FengGUI.createWindow(true, true); + w.setTitle("Hello World Example"); + Label l = FengGUI.createWidget(Label.class); + l.setText("Hello World!!"); l.getAppearance().setAlignment(Alignment.MIDDLE); w.getContentContainer().addWidget(l); @@ -137,6 +140,9 @@ gl = drawable.getGL(); gl.glClearColor(1.0f, 0.8f, 0.2f, 0.0f); + //set a theme to FengGUI we use the Default theme here. + FengGUI.setTheme(new DefaultTheme()); + // we build the GUI in the render thread! This is important // because textures can only be processed in the rendering // thread This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-02 05:21:33
|
Revision: 642 http://fenggui.svn.sourceforge.net/fenggui/?rev=642&view=rev Author: marcmenghin Date: 2009-06-02 05:21:31 +0000 (Tue, 02 Jun 2009) Log Message: ----------- - added a matrix push/pop to rotated image drawing method Modified Paths: -------------- src/org/fenggui/binding/render/Graphics.java Modified: src/org/fenggui/binding/render/Graphics.java =================================================================== --- src/org/fenggui/binding/render/Graphics.java 2009-06-02 05:15:55 UTC (rev 641) +++ src/org/fenggui/binding/render/Graphics.java 2009-06-02 05:21:31 UTC (rev 642) @@ -454,7 +454,17 @@ drawString(text, -offset.getX(), -offset.getY()); gl.popMatrix(); } - + + /** + * Draws a scaled image with rotation. + * + * @param pixmap the pixmap to be drawn. + * @param x the x-coordinate of the position where to draw the pixmap + * @param y the y-coordinate of the position where to draw to pixmap + * @param imgWidth the width of the drawn image + * @param imgHeight the height of the drawn image + * @param angle the angle the image should be rotated + */ public void drawScaledImage(Pixmap pixmap, int x, int y, int imgWidth, int imgHeight, float angle) { x += offset.getX(); @@ -481,6 +491,7 @@ final float startX = pixmap.getStartX(); final float startY = pixmap.getStartY(); + gl.pushMatrix(); // move to location gl.translateXY(x, y); @@ -507,7 +518,8 @@ gl.vertex(imgWidth, 0); gl.end(); - + gl.popMatrix(); + // gl.translate(0,0,-0.1f); // gl.enableTexture2D(false); } @@ -515,11 +527,11 @@ /** * Draws a scaled image. * - * @param pixmap the Pixmap to be drawn. + * @param pixmap the pixmap to be drawn. * @param x the x-coordinate of the position where to draw the pixmap * @param y the y-coordinate of the position where to draw to pixmap * @param imgWidth the width of the drawn image - * @param imgHeight the heigth of the drawn image + * @param imgHeight the height of the drawn image */ public void drawScaledImage(Pixmap pixmap, int x, int y, int imgWidth, int imgHeight) { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-02 05:16:47
|
Revision: 641 http://fenggui.svn.sourceforge.net/fenggui/?rev=641&view=rev Author: marcmenghin Date: 2009-06-02 05:15:55 +0000 (Tue, 02 Jun 2009) Log Message: ----------- - fixed CursorExample - removed unneeded imports from Mouse Event Class files - moved WidgetListChanged event form Container to new event system Modified Paths: -------------- src/org/fenggui/Container.java src/org/fenggui/actor/SimpleWindowPositioningActor.java src/org/fenggui/event/IWidgetListChangedListener.java src/org/fenggui/event/WidgetListChangedEvent.java src/org/fenggui/event/mouse/MouseClickedEvent.java src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java src/org/fenggui/event/mouse/MouseDraggedEvent.java src/org/fenggui/event/mouse/MouseMovedEvent.java src/org/fenggui/event/mouse/MousePressedEvent.java src/org/fenggui/event/mouse/MouseReleasedEvent.java test/org/fenggui/example/CursorExample.java Modified: src/org/fenggui/Container.java =================================================================== --- src/org/fenggui/Container.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/Container.java 2009-06-02 05:15:55 UTC (rev 641) @@ -30,10 +30,12 @@ import org.fenggui.binding.render.IOpenGL; import org.fenggui.event.Event; import org.fenggui.event.FocusEvent; +import org.fenggui.event.IGenericEventListener; import org.fenggui.event.IWidgetListChangedListener; import org.fenggui.event.LeafeTraversingEvent; import org.fenggui.event.SizeChangedEvent; import org.fenggui.event.WidgetListChangedEvent; +import org.fenggui.event.key.KeyEvent; import org.fenggui.layout.LayoutManager; import org.fenggui.layout.RowLayout; import org.fenggui.theme.XMLTheme; @@ -56,12 +58,13 @@ */ public class Container extends StandardWidget implements IContainer, Cloneable { - private LayoutManager layoutManager = null; + public static final String EVENT_WIDGETLISTCHANGED = "FengGUI_Widget_List_Changed"; + + private LayoutManager layoutManager = null; protected List<IWidget> notifyList; - private boolean keyTraversalRoot = false; - private DefaultAppearance appearance = null; - private List<IWidgetListChangedListener> widgetListChangedHook; - private boolean invalidLayout = false; + private boolean keyTraversalRoot = false; + private DefaultAppearance appearance = null; + private boolean invalidLayout = false; /** * Creates a new <code>Container</code>. @@ -82,7 +85,6 @@ private void initContainer() { this.notifyList = new CopyOnWriteArrayList<IWidget>(); - this.widgetListChangedHook = new ArrayList<IWidgetListChangedListener>(0); } protected void invalidateLayout() @@ -96,42 +98,60 @@ this.layout(); } - public void addWidgetListChangedListener(IWidgetListChangedListener listener) + public void addWidgetListChangedListener(final IWidgetListChangedListener l) { - widgetListChangedHook.add(listener); - } + addEventListener(EVENT_WIDGETLISTCHANGED, new IGenericEventListener() + { + private IWidgetListChangedListener listener = l; - public void removeWidgetListChangedListener(IWidgetListChangedListener listener) - { - widgetListChangedHook.remove(listener); - } + public void processEvent(Object source, Event event) + { + if (event instanceof KeyEvent) + { + if (event instanceof WidgetListChangedEvent) + { + WidgetListChangedEvent widgetChangedEvent = (WidgetListChangedEvent) event; - public void widgetAdded(WidgetListChangedEvent event) - { - for (IWidgetListChangedListener listener : widgetListChangedHook) - { - listener.widgetAdded(event); - } + if (widgetChangedEvent.added()) + { + listener.widgetAdded(source, widgetChangedEvent); + } + else + { + listener.widgetRemoved(source, widgetChangedEvent); + } + } + else + Log.error("Unknown Type of KeyEvent Object."); + } + else + Log.error("Wrong event object for KeyEvent."); + } - Display display = getDisplay(); - if (display != null) - { - display.fireGlobalEventListener(event); - } + /* (non-Javadoc) + * @see java.lang.Object#equals(java.lang.Object) + */ + @Override + public boolean equals(Object obj) + { + return listener.equals(obj); + } + + /* (non-Javadoc) + * @see java.lang.Object#hashCode() + */ + @Override + public int hashCode() + { + return listener.hashCode(); + } + + }); } - public void widgetRemoved(WidgetListChangedEvent event) + public void removeWidgetListChangedListener(IWidgetListChangedListener listener) { - for (IWidgetListChangedListener listener : widgetListChangedHook) - { - listener.widgetRemoved(event); - } - - Display display = getDisplay(); - if (display != null) - { - display.fireGlobalEventListener(event); - } + removeEventListener(EVENT_WIDGETLISTCHANGED, listener); } public boolean isKeyTraversalRoot() @@ -266,7 +286,7 @@ addWidgetInternal(c, position); updateMinSize(); layoutIfInvalide(); - widgetAdded(new WidgetListChangedEvent(this, c)); + fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(true, c)); } /* (non-Javadoc) @@ -275,7 +295,7 @@ public void onEventFired(String eventType, SizeChangedEvent event) { super.onEventFired(eventType, event); - + if (eventType.equals(Widget.EVENT_SIZECHANGED)) this.layoutIfInvalide(); } @@ -353,7 +373,7 @@ updateMinSize(); layoutIfInvalide(); - widgetAdded(new WidgetListChangedEvent(this, widgets)); + fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(true, widgets)); } @Override @@ -446,7 +466,7 @@ if (getDisplay() != null) getDisplay().focusedWidgetValityCheck(); - widgetRemoved(new WidgetListChangedEvent(this, widgets)); + fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(false, widgets)); } public void removeWidgetInternal(IWidget w) @@ -482,7 +502,7 @@ if (getDisplay() != null) getDisplay().focusedWidgetValityCheck(); - widgetRemoved(new WidgetListChangedEvent(this, list.toArray(new IWidget[0]))); + fireEvent(EVENT_WIDGETLISTCHANGED, new WidgetListChangedEvent(false, list.toArray(new IWidget[0]))); } /** Modified: src/org/fenggui/actor/SimpleWindowPositioningActor.java =================================================================== --- src/org/fenggui/actor/SimpleWindowPositioningActor.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/actor/SimpleWindowPositioningActor.java 2009-06-02 05:15:55 UTC (rev 641) @@ -59,9 +59,9 @@ this.listener = new IWidgetListChangedListener() { - public void widgetAdded(WidgetListChangedEvent widgetAddedEvent) + public void widgetAdded(Object sender, WidgetListChangedEvent widgetAddedEvent) { - IWidget[] widgets = widgetAddedEvent.getAddedWidget(); + IWidget[] widgets = widgetAddedEvent.getWidget(); if (widgets.length >= 1) { IWidget widget = widgets[0]; @@ -72,7 +72,7 @@ } } - public void widgetRemoved(WidgetListChangedEvent widgetAddedEvent) + public void widgetRemoved(Object sender, WidgetListChangedEvent widgetAddedEvent) { // DO nothing } Modified: src/org/fenggui/event/IWidgetListChangedListener.java =================================================================== --- src/org/fenggui/event/IWidgetListChangedListener.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/IWidgetListChangedListener.java 2009-06-02 05:15:55 UTC (rev 641) @@ -17,9 +17,9 @@ */ package org.fenggui.event; -public interface IWidgetListChangedListener +public interface IWidgetListChangedListener extends IEventListener { - public void widgetAdded(WidgetListChangedEvent widgetAddedEvent); + public void widgetAdded(Object sender, WidgetListChangedEvent widgetAddedEvent); - public void widgetRemoved(WidgetListChangedEvent widgetAddedEvent); + public void widgetRemoved(Object sender, WidgetListChangedEvent widgetAddedEvent); } Modified: src/org/fenggui/event/WidgetListChangedEvent.java =================================================================== --- src/org/fenggui/event/WidgetListChangedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/WidgetListChangedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -23,22 +23,28 @@ * @author Marc Menghin * */ -public class WidgetListChangedEvent extends WidgetEvent +public class WidgetListChangedEvent extends Event { private IWidget[] addedWidgets = null; - - public WidgetListChangedEvent(IWidget source, IWidget... widgets) + private boolean added = true; + + public WidgetListChangedEvent(boolean added, IWidget... widgets) { - super(source); + this.added = added; this.addedWidgets = widgets; } /** * @return the added widget */ - public IWidget[] getAddedWidget() + public IWidget[] getWidget() { return addedWidgets; } + + public boolean added() + { + return added; + } } Modified: src/org/fenggui/event/mouse/MouseClickedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseClickedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MouseClickedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; /** Modified: src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; /** Modified: src/org/fenggui/event/mouse/MouseDraggedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseDraggedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MouseDraggedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; /** Modified: src/org/fenggui/event/mouse/MouseMovedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseMovedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MouseMovedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; public class MouseMovedEvent extends MouseEvent Modified: src/org/fenggui/event/mouse/MousePressedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MousePressedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MousePressedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; /** Modified: src/org/fenggui/event/mouse/MouseReleasedEvent.java =================================================================== --- src/org/fenggui/event/mouse/MouseReleasedEvent.java 2009-06-02 04:46:50 UTC (rev 640) +++ src/org/fenggui/event/mouse/MouseReleasedEvent.java 2009-06-02 05:15:55 UTC (rev 641) @@ -22,7 +22,6 @@ import java.util.Set; import org.fenggui.IWidget; -import org.fenggui.event.IEventListener; import org.fenggui.event.key.Key; /** Modified: test/org/fenggui/example/CursorExample.java =================================================================== --- test/org/fenggui/example/CursorExample.java 2009-06-02 04:46:50 UTC (rev 640) +++ test/org/fenggui/example/CursorExample.java 2009-06-02 05:15:55 UTC (rev 641) @@ -100,12 +100,12 @@ background = new PlainBackground(Color.LIGHT_GRAY); } - public void onEventFired(MouseEnteredEvent mouseEnteredEvent) + protected void onEventFired(String eventType, MouseEnteredEvent mouseEnteredEvent) { cursor.show(); } - public void onEventFired(MouseExitedEvent mouseExitedEvent) + protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) { Binding.getInstance().getCursorFactory().getDefaultCursor().show(); } @@ -125,7 +125,7 @@ g.drawLine(pressed.getX() + 2, pressed.getY() - 2, pressed.getX() - 2, pressed.getY() + 2); } - public void onEventFired(MousePressedEvent mp) + protected void onEventFired(String eventType, MousePressedEvent mp) { pressed = new Point(mp.getDisplayX() - this.getX(), mp.getDisplayY() - this.getY()); } This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-02 04:46:52
|
Revision: 640 http://fenggui.svn.sourceforge.net/fenggui/?rev=640&view=rev Author: marcmenghin Date: 2009-06-02 04:46:50 +0000 (Tue, 02 Jun 2009) Log Message: ----------- - added speedup from JOGL to LWJGL code as well - removed/suppressed some code warnings - added a method to get the prototype of a widget. So its possible to change it after the theme is loaded. Modified Paths: -------------- src/org/fenggui/FengGUI.java src/org/fenggui/ToggableGroup.java src/org/fenggui/binding/render/jogl/JOGLTextRenderer.java src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java src/org/fenggui/text/content/ContentUserLine.java Modified: src/org/fenggui/FengGUI.java =================================================================== --- src/org/fenggui/FengGUI.java 2009-06-01 15:40:58 UTC (rev 639) +++ src/org/fenggui/FengGUI.java 2009-06-02 04:46:50 UTC (rev 640) @@ -80,6 +80,23 @@ } /** + * Returns the prototype for a widget class or null if none is found. + * + * @param <T> + * @param widgetClass + * @return + */ + @SuppressWarnings("unchecked") + public static <T extends IWidget> T getPrototype(Class<T> widgetClass) + { + if (theme != null && theme.ptList != null) + { + return (T) theme.ptList.get(widgetClass); + } + return null; + } + + /** * Created a themed instance of a Widget. This is the preferred way to create widgets. It * handles a cache of prototype widgets to improve speed. Only widgets which implement the * {@link Cloneable} interface can be used by caching mechanism. Modified: src/org/fenggui/ToggableGroup.java =================================================================== --- src/org/fenggui/ToggableGroup.java 2009-06-01 15:40:58 UTC (rev 639) +++ src/org/fenggui/ToggableGroup.java 2009-06-02 04:46:50 UTC (rev 640) @@ -238,6 +238,7 @@ /* (non-Javadoc) * @see java.lang.Object#clone() */ + @SuppressWarnings("unchecked") @Override protected ToggableGroup<E> clone() { Modified: src/org/fenggui/binding/render/jogl/JOGLTextRenderer.java =================================================================== --- src/org/fenggui/binding/render/jogl/JOGLTextRenderer.java 2009-06-01 15:40:58 UTC (rev 639) +++ src/org/fenggui/binding/render/jogl/JOGLTextRenderer.java 2009-06-02 04:46:50 UTC (rev 640) @@ -97,10 +97,6 @@ int mLength; int mCurrentIndex; - MapCharSequenceToGlyphVector() - { - } - MapCharSequenceToGlyphVector(CharSequence sequence) { initFromCharSequence(sequence); Modified: src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java =================================================================== --- src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java 2009-06-01 15:40:58 UTC (rev 639) +++ src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java 2009-06-02 04:46:50 UTC (rev 640) @@ -36,7 +36,8 @@ */ public class LWJGLOpenGL implements IOpenGL { - private Thread openGLThread; + private Thread openGLThread; + private boolean TexturesEnabled = false; /** * @@ -159,10 +160,14 @@ public void enableTexture2D(boolean b) { - if (b) - GL11.glEnable(GL11.GL_TEXTURE_2D); - else - GL11.glDisable(GL11.GL_TEXTURE_2D); + if (TexturesEnabled != b) + { + TexturesEnabled = b; + if (b) + GL11.glEnable(GL11.GL_TEXTURE_2D); + else + GL11.glDisable(GL11.GL_TEXTURE_2D); + } } public void setTexEnvModeDecal() Modified: src/org/fenggui/text/content/ContentUserLine.java =================================================================== --- src/org/fenggui/text/content/ContentUserLine.java 2009-06-01 15:40:58 UTC (rev 639) +++ src/org/fenggui/text/content/ContentUserLine.java 2009-06-02 04:46:50 UTC (rev 640) @@ -227,6 +227,12 @@ this.content.removeAll(lines); + //add empty part if none left + if (this.content.size() <= 0) + { + this.content.add(new ContentLine(factory.getEmptyContentPart(appearance))); + } + // updates size & contentCache uline.updateSize(); this.updateSize(); This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-06-01 15:41:04
|
Revision: 639 http://fenggui.svn.sourceforge.net/fenggui/?rev=639&view=rev Author: marcmenghin Date: 2009-06-01 15:40:58 +0000 (Mon, 01 Jun 2009) Log Message: ----------- - new event system. Initial commit, still things missing here and there - improved layout handling of containers - more clonable widgets - made appearances cloneable - color object can't be changed anymore (as it should be the case), use ModifiableColor as a changable color. - removed never used minimize and maximize buttons from Window - improved resource loading over Binding - lots of fixes to the examples - updated svgSalamander.jar to newest version - lots of minor bugfixes, improvements and speedups Modified Paths: -------------- optional/org/fenggui/SnappingSlider.java optional/org/fenggui/TabContainer.java optional/org/fenggui/TabItemLabel.java optional/org/fenggui/composite/ConnectionWindow.java optional/org/fenggui/composite/GUIInspector.java optional/org/fenggui/composite/MessageWindow.java optional/org/fenggui/composite/console/Console.java optional/org/fenggui/composite/filedialog/FileChooserDialog.java optional/org/fenggui/composite/filedialog/FileDialogWindow.java optional/org/fenggui/composite/tab/AbstractTabItem.java optional/org/fenggui/composite/tab/TabItem.java optional/org/fenggui/composite/table/Table.java optional/org/fenggui/composite/text/TextRun.java optional/org/fenggui/composite/text/TextView.java optional/org/fenggui/composite/tree/Tree.java optional/org/fenggui/experimental/LeftTitleBarWindow.java src/org/fenggui/Button.java src/org/fenggui/Canvas.java src/org/fenggui/CheckBox.java src/org/fenggui/ComboBox.java src/org/fenggui/Container.java src/org/fenggui/Display.java src/org/fenggui/FengGUI.java src/org/fenggui/IBasicContainer.java src/org/fenggui/IContainer.java src/org/fenggui/IWidget.java src/org/fenggui/Label.java src/org/fenggui/List.java src/org/fenggui/ModelWidget.java src/org/fenggui/ObservableLabelWidget.java src/org/fenggui/ObservableWidget.java src/org/fenggui/ProgressBar.java src/org/fenggui/RadioButton.java src/org/fenggui/ScrollBar.java src/org/fenggui/ScrollContainer.java src/org/fenggui/Slider.java src/org/fenggui/SplitContainer.java src/org/fenggui/StandardWidget.java src/org/fenggui/StatefullWidget.java src/org/fenggui/TextEditor.java src/org/fenggui/ToggableGroup.java src/org/fenggui/ViewPort.java src/org/fenggui/Widget.java src/org/fenggui/actor/KeepOnMouseActor.java src/org/fenggui/actor/KeepOnWidgetActor.java src/org/fenggui/actor/LinearWidgetMovementActor.java src/org/fenggui/actor/ScreenshotActor.java src/org/fenggui/actor/StaticTooltipActor.java src/org/fenggui/appearance/DecoratorAppearance.java src/org/fenggui/appearance/DummyAppearance.java src/org/fenggui/appearance/EntryAppearance.java src/org/fenggui/appearance/GenericAppearance.java src/org/fenggui/appearance/IAppearance.java src/org/fenggui/appearance/SpacingAppearance.java src/org/fenggui/binding/render/Binding.java src/org/fenggui/binding/render/Graphics.java src/org/fenggui/binding/render/jogl/EventBinding.java src/org/fenggui/binding/render/jogl/JOGLOpenGL.java src/org/fenggui/binding/render/jogl/JOGLTextRenderer.java src/org/fenggui/binding/render/lwjgl/EventHelper.java src/org/fenggui/binding/render/text/DirectTextRenderer.java src/org/fenggui/composite/Window.java src/org/fenggui/composite/menu/Menu.java src/org/fenggui/composite/menu/MenuBar.java src/org/fenggui/event/ActivationEvent.java src/org/fenggui/event/FocusEvent.java src/org/fenggui/event/IActivationListener.java src/org/fenggui/event/IEventListener.java src/org/fenggui/event/IFocusListener.java src/org/fenggui/event/IPositionChangedListener.java src/org/fenggui/event/ISizeChangedListener.java src/org/fenggui/event/ITickListener.java src/org/fenggui/event/PositionChangedEvent.java src/org/fenggui/event/SizeChangedEvent.java src/org/fenggui/event/TickEvent.java src/org/fenggui/event/WidgetEvent.java src/org/fenggui/event/key/IKeyListener.java src/org/fenggui/event/key/KeyAdapter.java src/org/fenggui/event/key/KeyEvent.java src/org/fenggui/event/mouse/IMouseListener.java src/org/fenggui/event/mouse/MouseAdapter.java src/org/fenggui/event/mouse/MouseButton.java src/org/fenggui/event/mouse/MouseClickedEvent.java src/org/fenggui/event/mouse/MouseDoubleClickedEvent.java src/org/fenggui/event/mouse/MouseDraggedEvent.java src/org/fenggui/event/mouse/MouseEnteredEvent.java src/org/fenggui/event/mouse/MouseEvent.java src/org/fenggui/event/mouse/MouseExitedEvent.java src/org/fenggui/event/mouse/MouseMovedEvent.java src/org/fenggui/event/mouse/MousePressedEvent.java src/org/fenggui/event/mouse/MouseReleasedEvent.java src/org/fenggui/event/mouse/MouseWheelEvent.java src/org/fenggui/layout/BorderLayout.java src/org/fenggui/text/EditableTextContentManager.java src/org/fenggui/text/TextContentManager.java src/org/fenggui/text/content/ContentManager.java src/org/fenggui/theme/DefaultTheme.java src/org/fenggui/theme/XMLTheme.java src/org/fenggui/tooltip/LabelTooltipManager.java src/org/fenggui/util/Color.java test/org/fenggui/example/ButtonExample.java test/org/fenggui/example/CheckBoxExample.java test/org/fenggui/example/ClippingExample.java test/org/fenggui/example/ComboBoxExample.java test/org/fenggui/example/CursorExample.java test/org/fenggui/example/Everything.java test/org/fenggui/example/ExampleBasisJOGL.java test/org/fenggui/example/ExampleBasisLWJGL.java test/org/fenggui/example/FlowLayoutExample.java test/org/fenggui/example/FontExample.java test/org/fenggui/example/HelloWorld.java test/org/fenggui/example/LabelExample.java test/org/fenggui/example/LayoutExample.java test/org/fenggui/example/ListExample.java test/org/fenggui/example/MouseTestJOGL.java test/org/fenggui/example/MultiLineLabelExample.java test/org/fenggui/example/PixmapDecoratorExample.java test/org/fenggui/example/PopupMenuExample.java test/org/fenggui/example/ProgressBarExample.java test/org/fenggui/example/RadioButtonExample.java test/org/fenggui/example/ScrollBarExample.java test/org/fenggui/example/ScrollContainerExample.java test/org/fenggui/example/SliderExample.java test/org/fenggui/example/SnappingSliderExample.java test/org/fenggui/example/SplitContainerExample.java test/org/fenggui/example/TabContainerExample.java test/org/fenggui/example/TabExample.java test/org/fenggui/example/TableExample.java test/org/fenggui/example/TableExample2.java test/org/fenggui/example/TextAreaExample.java test/org/fenggui/example/TextFieldExample.java test/org/fenggui/example/TextViewExample.java test/org/fenggui/example/TreeExample.java test/org/fenggui/example/ViewPortExampleJOGL.java test/org/fenggui/example/chat/ChatExample.java test/org/fenggui/unit/ContentManagerTest.java third-party/svgSalamander.jar Added Paths: ----------- optional/org/fenggui/FG.java src/org/fenggui/event/IGenericEventListener.java src/org/fenggui/event/IGlobalEventListener.java src/org/fenggui/event/LeafeTraversingEvent.java src/org/fenggui/event/RootTraversingEvent.java src/org/fenggui/util/ModifiableColor.java Removed Paths: ------------- optional/org/fenggui/FengGUIOptional.java src/org/fenggui/event/key/IKeyPressedListener.java src/org/fenggui/event/key/IKeyReleasedListener.java src/org/fenggui/event/key/IKeyTypedListener.java src/org/fenggui/event/mouse/IMouseDraggedListener.java src/org/fenggui/event/mouse/IMouseEnteredListener.java src/org/fenggui/event/mouse/IMouseExitedListener.java src/org/fenggui/event/mouse/IMouseMovedListener.java src/org/fenggui/event/mouse/IMousePressedListener.java src/org/fenggui/event/mouse/IMouseReleasedListener.java src/org/fenggui/event/mouse/IMouseWheelListener.java Copied: optional/org/fenggui/FG.java (from rev 638, optional/org/fenggui/FengGUIOptional.java) =================================================================== --- optional/org/fenggui/FG.java (rev 0) +++ optional/org/fenggui/FG.java 2009-06-01 15:40:58 UTC (rev 639) @@ -0,0 +1,204 @@ +/* + * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) + * + * Copyright (c) 2005-2009 FengGUI Project + * + * This library is free software; you can redistribute it and/or + * modify it under the terms of the GNU Lesser General Public + * License as published by the Free Software Foundation; either + * version 2.1 of the License, or (at your option) any later version. + * + * This library is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU + * Lesser General Public License for more details: + * http://www.gnu.org/copyleft/lesser.html#TOC3 + * + * Created on 10.01.2008 + * $Id$ + */ +package org.fenggui; + +import org.fenggui.composite.table.ITableModel; +import org.fenggui.composite.table.Table; +import org.fenggui.composite.text.TextView; +import org.fenggui.composite.tree.Tree; +import org.fenggui.theme.XMLTheme; +import org.fenggui.util.Alignment; + +/** + * + * @author marcmenghin, last edited by $Author$, $Date$ + * @version $Revision$ + */ +public class FG +{ + + private static boolean singleInit = false; + + //Optional prototypes + public static org.fenggui.composite.tab.TabItem ptTabItem = null; + + public static void initOptional() + { + //add stuff to XML theming + if (!singleInit) + { + XMLTheme.TYPE_REGISTRY.register(SnappingSlider.class); + XMLTheme.TYPE_REGISTRY.register("Tab", org.fenggui.composite.tab.TabContainer.class); + XMLTheme.TYPE_REGISTRY.register(org.fenggui.composite.tab.TabItem.class); + XMLTheme.TYPE_REGISTRY.register(TabContainer.class); + XMLTheme.TYPE_REGISTRY.register(TabItemLabel.class); + XMLTheme.TYPE_REGISTRY.register(Tree.class); + XMLTheme.TYPE_REGISTRY.register(Table.class); + XMLTheme.TYPE_REGISTRY.register(TextView.class); + + singleInit = true; + } + + createTabItem(); + } + + public static Button createButton(String text) + { + Button btn = FengGUI.createWidget(Button.class); + btn.setText(text); + return btn; + } + + public static Label createLabel(String text) + { + Label l = FengGUI.createWidget(Label.class); + l.setText(text); + return l; + } + + /** + * + * @param group + * @return + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static org.fenggui.composite.tab.TabItem createTabItem(ToggableGroup<RadioButton<Integer>> group) + { + org.fenggui.composite.tab.TabItem result = createTabItem(); + result.setGroup(group); + return result; + } + + /** + * + * @return + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static org.fenggui.composite.tab.TabItem createTabItem() + { + org.fenggui.composite.tab.TabItem tabItem = new org.fenggui.composite.tab.TabItem(); + FengGUI.setUpAppearance(tabItem); + return tabItem; + } + + /** + * + * @param parent + * @param containerAlignment + * @param headerAlignment + * @return + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static org.fenggui.composite.tab.TabContainer createTab(IContainer parent, Alignment containerAlignment, + Alignment headerAlignment) + { + org.fenggui.composite.tab.TabContainer result = new org.fenggui.composite.tab.TabContainer(containerAlignment, + headerAlignment); + FengGUI.setUpAppearance(result); + parent.addWidget(result); + return result; + } + + /** + * + * @param parent + * @param text + * @return + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static RotatedLabel createRotatedLabel(IContainer parent, String text) + { + RotatedLabel l = new RotatedLabel(text); + FengGUI.setUpAppearance(l); + parent.addWidget(l); + return l; + } + + /** + * Create a TabContainer widget. + * + * @param parent the parent container + * @param tabOnTop true if tabs are on top + * @return new TabContainer widget. + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static TabContainer createTabContainer(IContainer parent, boolean tabOnTop) + { + TabContainer result = new TabContainer(tabOnTop); + FengGUI.setUpAppearance(result); + parent.addWidget(result); + return result; + } + + /** + * Creates a new TabContainer widget. + * + * @param parent the parent container + * @return new TabContainer widget. + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static TabContainer createTabContainer(IContainer parent) + { + return createTabContainer(parent, true); + } + + /** + * Create a Tree widget. + * @param <T> type parameter + * @param parent the parent container + * @return new tree widget. + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static <T> Tree<T> createTree(IContainer parent) + { + Tree<T> result = new Tree<T>(); + FengGUI.setUpAppearance(result); + parent.addWidget(result); + return result; + } + + /** + * Creates a new Table. + * @param parent the parent container + * @return new Table + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static Table createTable(IContainer parent) + { + Table table = new Table(); + FengGUI.setUpAppearance(table); + parent.addWidget(table); + return table; + } + + /** + * Creates a new Table. + * @param parent the parent container + * @param model the model used to provide the table with data + * @return new Table + * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. + */ + public static Table createTable(IContainer parent, ITableModel model) + { + Table table = createTable(parent); + table.setModel(model); + return table; + } +} Property changes on: optional/org/fenggui/FG.java ___________________________________________________________________ Added: svn:mergeinfo + Deleted: optional/org/fenggui/FengGUIOptional.java =================================================================== --- optional/org/fenggui/FengGUIOptional.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/FengGUIOptional.java 2009-06-01 15:40:58 UTC (rev 639) @@ -1,194 +0,0 @@ -/* - * FengGUI - Java GUIs in OpenGL (http://www.fenggui.org) - * - * Copyright (c) 2005-2009 FengGUI Project - * - * This library is free software; you can redistribute it and/or - * modify it under the terms of the GNU Lesser General Public - * License as published by the Free Software Foundation; either - * version 2.1 of the License, or (at your option) any later version. - * - * This library is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU - * Lesser General Public License for more details: - * http://www.gnu.org/copyleft/lesser.html#TOC3 - * - * Created on 10.01.2008 - * $Id$ - */ -package org.fenggui; - -import org.fenggui.composite.table.ITableModel; -import org.fenggui.composite.table.Table; -import org.fenggui.composite.text.TextView; -import org.fenggui.composite.tree.Tree; -import org.fenggui.theme.XMLTheme; -import org.fenggui.util.Alignment; - -/** - * - * @author marcmenghin, last edited by $Author$, $Date$ - * @version $Revision$ - */ -public class FengGUIOptional -{ - - private static boolean singleInit = false; - - //Optional prototypes - public static org.fenggui.composite.tab.TabItem ptTabItem = null; - - public static void initOptional() - { - //add stuff to XML theming - if (!singleInit) - { - XMLTheme.TYPE_REGISTRY.register(SnappingSlider.class); - XMLTheme.TYPE_REGISTRY.register("Tab", org.fenggui.composite.tab.TabContainer.class); - XMLTheme.TYPE_REGISTRY.register(org.fenggui.composite.tab.TabItem.class); - XMLTheme.TYPE_REGISTRY.register(TabContainer.class); - XMLTheme.TYPE_REGISTRY.register(TabItemLabel.class); - XMLTheme.TYPE_REGISTRY.register(Tree.class); - XMLTheme.TYPE_REGISTRY.register(Table.class); - XMLTheme.TYPE_REGISTRY.register(TextView.class); - - singleInit = true; - } - - createTabItem(); - } - - /** - * - * @param group - * @return - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static org.fenggui.composite.tab.TabItem createTabItem(ToggableGroup<RadioButton<Integer>> group) - { - org.fenggui.composite.tab.TabItem result = createTabItem(); - result.setGroup(group); - return result; - } - - /** - * - * @return - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static org.fenggui.composite.tab.TabItem createTabItem() - { - if (ptTabItem == null) - { - ptTabItem = new org.fenggui.composite.tab.TabItem(); - FengGUI.setUpAppearance(ptTabItem); - } - org.fenggui.composite.tab.TabItem result = new org.fenggui.composite.tab.TabItem(ptTabItem); - return result; - } - - /** - * - * @param parent - * @param containerAlignment - * @param headerAlignment - * @return - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static org.fenggui.composite.tab.TabContainer createTab(IContainer parent, Alignment containerAlignment, - Alignment headerAlignment) - { - org.fenggui.composite.tab.TabContainer result = new org.fenggui.composite.tab.TabContainer(containerAlignment, - headerAlignment); - FengGUI.setUpAppearance(result); - parent.addWidget(result); - return result; - } - - /** - * - * @param parent - * @param text - * @return - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static RotatedLabel createRotatedLabel(IContainer parent, String text) - { - RotatedLabel l = new RotatedLabel(text); - FengGUI.setUpAppearance(l); - parent.addWidget(l); - return l; - } - - /** - * Create a TabContainer widget. - * - * @param parent the parent container - * @param tabOnTop true if tabs are on top - * @return new TabContainer widget. - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static TabContainer createTabContainer(IContainer parent, boolean tabOnTop) - { - TabContainer result = new TabContainer(tabOnTop); - FengGUI.setUpAppearance(result); - parent.addWidget(result); - return result; - } - - /** - * Creates a new TabContainer widget. - * - * @param parent the parent container - * @return new TabContainer widget. - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static TabContainer createTabContainer(IContainer parent) - { - return createTabContainer(parent, true); - } - - /** - * Create a Tree widget. - * @param <T> type parameter - * @param parent the parent container - * @return new tree widget. - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static <T> Tree<T> createTree(IContainer parent) - { - Tree<T> result = new Tree<T>(); - FengGUI.setUpAppearance(result); - parent.addWidget(result); - return result; - } - - /** - * Creates a new Table. - * @param parent the parent container - * @return new Table - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static Table createTable(IContainer parent) - { - Table table = new Table(); - FengGUI.setUpAppearance(table); - parent.addWidget(table); - return table; - } - - /** - * Creates a new Table. - * @param parent the parent container - * @param model the model used to provide the table with data - * @return new Table - * @deprecated Use the generic {@link FengGUI.#createWidget(Class)} instead. - */ - public static Table createTable(IContainer parent, ITableModel model) - { - Table table = createTable(parent); - table.setModel(model); - return table; - } -} Modified: optional/org/fenggui/SnappingSlider.java =================================================================== --- optional/org/fenggui/SnappingSlider.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/SnappingSlider.java 2009-06-01 15:40:58 UTC (rev 639) @@ -225,7 +225,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { tickPainter.paint(g); Modified: optional/org/fenggui/TabContainer.java =================================================================== --- optional/org/fenggui/TabContainer.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/TabContainer.java 2009-06-01 15:40:58 UTC (rev 639) @@ -24,7 +24,6 @@ import org.fenggui.appearance.EntryAppearance; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.binding.render.Pixmap; import org.fenggui.event.FocusEvent; import org.fenggui.theme.xml.IXMLStreamableException; @@ -274,10 +273,9 @@ } } - @Override - public void focusChanged(FocusEvent focusEvent) + public void onEventFired(String eventType, FocusEvent focusEvent) { - super.focusChanged(focusEvent); + super.onEventFired(eventType, focusEvent); if (focusEvent.isFocusGained()) { @@ -351,7 +349,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { if (tabs.isEmpty()) return; @@ -370,7 +368,7 @@ public IWidget getWidget(int index) { - throw new UnsupportedOperationException(); + throw new UnsupportedOperationException(); } public Iterable<IWidget> getWidgets() @@ -414,4 +412,17 @@ return !tabs.isEmpty(); } + /* (non-Javadoc) + * @see org.fenggui.Widget#clone() + */ + @Override + public TabContainer clone() + { + TabContainer result = (TabContainer) super.clone(); + result.tabs = new ArrayList<TabItem>(); + result.activeTab = -1; + result.appearance = appearance.clone(result); + return result; + } + } \ No newline at end of file Modified: optional/org/fenggui/TabItemLabel.java =================================================================== --- optional/org/fenggui/TabItemLabel.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/TabItemLabel.java 2009-06-01 15:40:58 UTC (rev 639) @@ -20,10 +20,14 @@ import org.fenggui.event.FocusEvent; import org.fenggui.event.IFocusListener; -import org.fenggui.event.key.IKeyPressedListener; import org.fenggui.event.key.Key; +import org.fenggui.event.key.KeyAdapter; import org.fenggui.event.key.KeyPressedEvent; -import org.fenggui.event.mouse.*; +import org.fenggui.event.mouse.MouseAdapter; +import org.fenggui.event.mouse.MouseButton; +import org.fenggui.event.mouse.MouseEnteredEvent; +import org.fenggui.event.mouse.MouseExitedEvent; +import org.fenggui.event.mouse.MousePressedEvent; /** * Special label used for tabs in <code>TabContainer</code>s. It is a special widget @@ -57,58 +61,65 @@ { final TabItemLabel THIZZ = this; - addMouseEnteredListener(new IMouseEnteredListener() - { + addMouseListener(new MouseAdapter() { - public void mouseEntered(MouseEnteredEvent mouseEnteredEvent) + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mouseEntered(java.lang.Object, org.fenggui.event.mouse.MouseEnteredEvent) + */ + @Override + public void mouseEntered(Object sender, MouseEnteredEvent mouseEnteredEvent) { getAppearance().setEnabled(LABEL_MOUSE_HOVER, true); - } + } - }); - - addMouseExitedListener(new IMouseExitedListener() - { - - public void mouseExited(MouseExitedEvent mouseExited) + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mouseExited(java.lang.Object, org.fenggui.event.mouse.MouseExitedEvent) + */ + @Override + public void mouseExited(Object sender, MouseExitedEvent mouseExited) { getAppearance().setEnabled(LABEL_MOUSE_HOVER, false); /* if(!THIZZ.equals(tabContainer.getSelectedTabLabel())) - getAppearance().setEnabled(LABEL_ACTIVE, false); - */ - } + getAppearance().setEnabled(LABEL_ACTIVE, false); + */ + } - }); - - addMousePressedListener(new IMousePressedListener() - { - public void mousePressed(MousePressedEvent mousePressedEvent) + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mousePressed(java.lang.Object, org.fenggui.event.mouse.MousePressedEvent) + */ + @Override + public void mousePressed(Object sender, MousePressedEvent mousePressedEvent) { if (mousePressedEvent.getButton() == MouseButton.LEFT) tabContainer.selectTab(THIZZ); else if (getDisplay() != null) getDisplay().setFocusedWidget(null); - } + } + }); + + addKeyListener(new KeyAdapter(){ - addKeyPressedListener(new IKeyPressedListener() - { - - public void keyPressed(KeyPressedEvent k) + /* (non-Javadoc) + * @see org.fenggui.event.key.KeyAdapter#keyPressed(org.fenggui.event.key.KeyPressedEvent) + */ + @Override + public void keyPressed(Object sender, KeyPressedEvent keyPressedEvent) { - if (k.getKey() == ' ' || k.getKeyClass() == Key.ENTER) + if (keyPressedEvent.getKey() == ' ' || keyPressedEvent.getKeyClass() == Key.ENTER) { tabContainer.selectTab(THIZZ); getDisplay().setFocusedWidget(tabContainer.getSelectedTabWidget()); } } + }); - + addFocusListener(new IFocusListener() { - public void focusChanged(FocusEvent f) + public void focusChanged(Object sender, FocusEvent f) { if (f.isFocusGained()) { Modified: optional/org/fenggui/composite/ConnectionWindow.java =================================================================== --- optional/org/fenggui/composite/ConnectionWindow.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/ConnectionWindow.java 2009-06-01 15:40:58 UTC (rev 639) @@ -54,16 +54,17 @@ */ public ConnectionWindow(boolean closeBtn) { - super(closeBtn, false, false, true); + super(closeBtn, true); // FIXME: change this soon - this.setupTheme(ConnectionWindow.class); + FengGUI.getTheme().setUp(this); setSize(250, 250); setTitle("Connection Window"); ((Container) getContentContainer()).setLayoutManager(new FormLayout()); - addressContainer = FengGUI.createContainer(getContentContainer()); + addressContainer = FengGUI.createWidget(Container.class); + getContentContainer().addWidget(addressContainer); addressContainer.getAppearance().add(new TitledBorder("Address")); FormData fd = new FormData(); @@ -73,20 +74,27 @@ addressContainer.setLayoutData(fd); addressContainer.setLayoutManager(new GridLayout(2, 2)); - Label l1 = FengGUI.createLabel(addressContainer, "Address:"); + Label l1 = FengGUI.createWidget(Label.class); + l1.setText("Address:"); - addressTextField = FengGUI.createTextField(addressContainer); + addressTextField = FengGUI.createWidget(TextEditor.class); addressTextField.updateMinSize(); - FengGUI.createLabel(addressContainer, "Port:"); - portTextField = FengGUI.createTextField(addressContainer); + Label l2 = FengGUI.createWidget(Label.class); + l2.setText("Port:"); + + portTextField = FengGUI.createWidget(TextEditor.class); portTextField.setRestrict(TextEditor.RESTRICT_NUMBERSONLY); portTextField.setMaxCharacters(8); portTextField.updateMinSize(); portTextField.setText("80"); - loginContainer = FengGUI.createContainer(getContentContainer()); + addressContainer.addWidget(l1, addressTextField, l2, portTextField); + + loginContainer = FengGUI.createWidget(Container.class); + getContentContainer().addWidget(loginContainer); loginContainer.getAppearance().add(new TitledBorder("Login")); + fd = new FormData(); fd.left = new FormAttachment(0, 0); fd.right = new FormAttachment(100, 0); @@ -94,26 +102,34 @@ loginContainer.setLayoutData(fd); loginContainer.setLayoutManager(new GridLayout(2, 2)); - Label l3 = FengGUI.createLabel(loginContainer, "Name:"); + Label l3 = FengGUI.createWidget(Label.class); + l3.setText("Name:"); - loginNameTextField = FengGUI.createTextField(loginContainer); + loginNameTextField = FengGUI.createWidget(TextEditor.class); loginNameTextField.updateMinSize(); - FengGUI.createLabel(loginContainer, "Password:"); - - passwordTextField = FengGUI.createTextField(loginContainer); + Label l4 = FengGUI.createWidget(Label.class); + l4.setText("Password:"); + passwordTextField = FengGUI.createWidget(TextEditor.class); passwordTextField.setPasswordField(true); passwordTextField.updateMinSize(); - connectButton = FengGUI.createButton(getContentContainer(), "Connect"); + loginContainer.addWidget(l3, loginNameTextField, l4, passwordTextField); + + connectButton = FengGUI.createWidget(Button.class); + connectButton.setText("Connect"); connectButton.getAppearance().setMargin(new Spacing(2, 2)); - cancelButton = FengGUI.createButton(getContentContainer(), "Cancel"); + cancelButton = FengGUI.createWidget(Button.class); + cancelButton.setText("Cancel"); cancelButton.getAppearance().setMargin(new Spacing(2, 2)); - statusLabel = FengGUI.createLabel(getContentContainer(), "Say something..."); + statusLabel = FengGUI.createWidget(Label.class); + statusLabel.setText("Say something ..."); statusLabel.getAppearance().setAlignment(Alignment.MIDDLE); + getContentContainer().addWidget(connectButton, cancelButton, statusLabel); + fd = new FormData(); fd.left = new FormAttachment(0, 0); fd.right = new FormAttachment(100, 0); Modified: optional/org/fenggui/composite/GUIInspector.java =================================================================== --- optional/org/fenggui/composite/GUIInspector.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/GUIInspector.java 2009-06-01 15:40:58 UTC (rev 639) @@ -25,7 +25,7 @@ import org.fenggui.Container; import org.fenggui.Display; import org.fenggui.FengGUI; -import org.fenggui.FengGUIOptional; +import org.fenggui.FG; import org.fenggui.IContainer; import org.fenggui.IWidget; import org.fenggui.Label; @@ -60,39 +60,51 @@ public GUIInspector() { - super(true, false, false, true); + super(true, true); // FIXME: change this soon - this.setupTheme(GUIInspector.class); + FengGUI.getTheme().setUp(this); - splitContainer = FengGUI.createSplitContainer(this.getContentContainer(), false); - - Container treeContainer = FengGUI.createContainer(); + splitContainer = FengGUI.createSplitContainer(false); + this.getContentContainer().addWidget(splitContainer); + + Container treeContainer = FengGUI.createWidget(Container.class); treeContainer.setLayoutManager(new BorderLayout()); - tree = FengGUIOptional.<IWidget> createTree(treeContainer); + tree = FG.<IWidget> createTree(treeContainer); tree.setLayoutData(BorderLayoutData.CENTER); splitContainer.setFirstWidget(treeContainer); splitContainer.setValue(100); - Button updateButton = FengGUI.createButton(treeContainer, "Update"); + Button updateButton = FengGUI.createWidget(Button.class); + updateButton.setText("Update"); updateButton.setLayoutData(BorderLayoutData.SOUTH); - - Container dataContainer = FengGUI.createContainer(); + treeContainer.addWidget(updateButton); + + Container dataContainer = FengGUI.createWidget(Container.class); dataContainer.setLayoutManager(new BorderLayout()); - Container labelContainer = FengGUI.createContainer(dataContainer); + Container labelContainer = FengGUI.createWidget(Container.class); + dataContainer.addWidget(labelContainer); labelContainer.setLayoutManager(new GridLayout(2, 4)); labelContainer.setLayoutData(BorderLayoutData.NORTH); - FengGUI.createLabel(labelContainer, "Size:"); - sizeLabel = FengGUI.createLabel(labelContainer, ""); - FengGUI.createLabel(labelContainer, "MinSize:"); - minSizeLabel = FengGUI.createLabel(labelContainer, ""); - FengGUI.createLabel(labelContainer, "Position:"); - positionLabel = FengGUI.createLabel(labelContainer, ""); - FengGUI.createLabel(labelContainer, "Resize:"); - resizeLabel = FengGUI.createLabel(labelContainer, ""); + + Label l1 = FengGUI.createWidget(Label.class); + l1.setText("Size:"); + sizeLabel = FengGUI.createWidget(Label.class); + Label l2 = FengGUI.createWidget(Label.class); + l2.setText( "MinSize:"); + minSizeLabel = FengGUI.createWidget(Label.class); + Label l3 = FengGUI.createWidget( Label.class); + l3.setText("Position:"); + positionLabel = FengGUI.createWidget(Label.class); + Label l4 = FengGUI.createWidget(Label.class); + l4.setText("Resize:"); + resizeLabel = FengGUI.createWidget(Label.class); - textArea = FengGUI.createTextEditor(dataContainer); + labelContainer.addWidget(l1, sizeLabel, l2, minSizeLabel,l3, positionLabel,l4, resizeLabel); + + textArea = FengGUI.createWidget(TextEditor.class); + dataContainer.addWidget(textArea); textArea.setLayoutData(BorderLayoutData.CENTER); splitContainer.setSecondWidget(dataContainer); tree.getAppearance().add(new PlainBorder(Color.BLACK)); Modified: optional/org/fenggui/composite/MessageWindow.java =================================================================== --- optional/org/fenggui/composite/MessageWindow.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/MessageWindow.java 2009-06-01 15:40:58 UTC (rev 639) @@ -44,19 +44,19 @@ public MessageWindow(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn) { - super(closeBtn, maximizeBtn, minimizeBtn, true); + super(closeBtn, true); //TODO: fix this stuff here - this.setupTheme(MessageWindow.class); + FengGUI.getTheme().setUp(this); ((Container) getContentContainer()).setLayoutManager(new RowLayout(false)); - label = FengGUI.createLabel(getContentContainer()); + label = FengGUI.createWidget(Label.class); label.getAppearance().setAlignment(Alignment.MIDDLE); label.getAppearance().setMargin(new Spacing(10, 10)); - OK = FengGUI.createButton(getContentContainer(), "OK"); - + OK = FengGUI.createWidget(Button.class); + OK.setText("OK"); OK.getAppearance().setPadding(new Spacing(3, 10)); OK.getAppearance().setMargin(new Spacing(5, 0, 0, 5)); OK.setExpandable(false); @@ -73,6 +73,8 @@ } }); + + getContentContainer().addWidget(label, OK); } /** Modified: optional/org/fenggui/composite/console/Console.java =================================================================== --- optional/org/fenggui/composite/console/Console.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/console/Console.java 2009-06-01 15:40:58 UTC (rev 639) @@ -26,7 +26,7 @@ import org.fenggui.ObservableWidget; import org.fenggui.binding.render.Graphics; import org.fenggui.binding.render.IOpenGL; -import org.fenggui.event.key.IKeyPressedListener; +import org.fenggui.event.key.KeyAdapter; import org.fenggui.event.key.KeyPressedEvent; import org.fenggui.util.Dimension; @@ -70,12 +70,17 @@ private void buildKeyBehavior() { - addKeyPressedListener(new IKeyPressedListener() - { - public void keyPressed(KeyPressedEvent kpe) + addKeyListener(new KeyAdapter() { + + /* (non-Javadoc) + * @see org.fenggui.event.key.KeyAdapter#keyPressed(org.fenggui.event.key.KeyPressedEvent) + */ + @Override + public void keyPressed(Object sender, KeyPressedEvent keyPressedEvent) { - handleKeyPressed(kpe); + handleKeyPressed(keyPressedEvent); } + }); } @@ -235,7 +240,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { // g.setColor(textColor); // promtRenderer.render(0, 0, g, gl); Modified: optional/org/fenggui/composite/filedialog/FileChooserDialog.java =================================================================== --- optional/org/fenggui/composite/filedialog/FileChooserDialog.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/filedialog/FileChooserDialog.java 2009-06-01 15:40:58 UTC (rev 639) @@ -61,7 +61,6 @@ import org.fenggui.appearance.LabelAppearance; import org.fenggui.binding.render.Binding; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.binding.render.ITexture; import org.fenggui.binding.render.Pixmap; import org.fenggui.event.ButtonPressedEvent; @@ -797,24 +796,26 @@ }); //This container defines the bottom section of the dialog - Container south = FengGUI.createContainer(internalContainer); + Container south = FengGUI.createWidget(Container.class); + internalContainer.addWidget(south); south.setLayoutData(BorderLayoutData.SOUTH); south.setLayoutManager(new RowExLayout(false)); - Container fileNameContainer = FengGUI.createContainer(south); + Container fileNameContainer = FengGUI.createWidget(Container.class); fileNameContainer.setLayoutData(new RowExLayoutData(true, true)); fileNameContainer.setLayoutManager(new RowExLayout()); + south.addWidget(fileNameContainer); - Label nameLabel = FengGUI.createLabel(fileNameContainer); + Label nameLabel = FengGUI.createWidget(Label.class); nameLabel.setText("Files Name: "); nameLabel.setLayoutData(new RowExLayoutData(false, false)); - fileName = FengGUI.createTextEditor(fileNameContainer); + fileName = FengGUI.createWidget(TextEditor.class); fileName.setLayoutData(new RowExLayoutData(true, true)); fileName.addKeyListener(new KeyAdapter() { @Override - public void keyPressed(KeyPressedEvent keyPressedEvent) + public void keyPressed(Object sender, KeyPressedEvent keyPressedEvent) { if (keyPressedEvent.getKeyClass() == Key.ENTER) { @@ -829,16 +830,20 @@ } } }); + fileNameContainer.addWidget(nameLabel, fileName); - Container filterContainer = FengGUI.createContainer(south); + Container filterContainer = FengGUI.createWidget(Container.class); + south.addWidget(filterContainer); filterContainer.setLayoutData(new RowExLayoutData(true, true)); filterContainer.setLayoutManager(new RowExLayout()); - Label filterLabel = FengGUI.createLabel(filterContainer); + Label filterLabel = FengGUI.createWidget(Label.class); + filterLabel.setText("Files of Type: "); filterLabel.setLayoutData(new RowExLayoutData(false, false)); - filterList = FengGUI.createComboBox(filterContainer); + filterList = FengGUI.createWidget(ComboBox.class); + filterContainer.addWidget(filterLabel, filterList); FileFilter filter = generateFileFilter("All Files", "*"); addFileFilter(filter, "All Files"); @@ -866,15 +871,19 @@ }); - Container buttonContainer = FengGUI.createContainer(south); + Container buttonContainer = FengGUI.createWidget(Container.class); + south.addWidget(buttonContainer); buttonContainer.setLayoutData(new RowExLayoutData(true, true)); buttonContainer.setLayoutManager(new BorderLayout()); - Container buttons = FengGUI.createContainer(buttonContainer); + Container buttons = FengGUI.createWidget(Container.class); + buttonContainer.addWidget(buttons); buttons.setLayoutManager(new RowLayout()); buttons.setLayoutData(BorderLayoutData.EAST); - Button acceptButton = FengGUI.createButton(buttons, "OK"); + Button acceptButton = FengGUI.createWidget(Button.class); + buttons.addWidget(acceptButton); + acceptButton.setText("OK"); acceptButton.addButtonPressedListener(new IButtonPressedListener() { @@ -887,8 +896,9 @@ }); - Button cancelButton = FengGUI.createButton(buttons, "Cancel"); - + Button cancelButton = FengGUI.createWidget(Button.class); + buttons.addWidget(cancelButton); + cancelButton.setText("Cancel"); cancelButton.addButtonPressedListener(new IButtonPressedListener() { @@ -944,8 +954,9 @@ setRootFiles(); - scrollContainer = FengGUI.createScrollContainer(internalContainer); - + scrollContainer = FengGUI.createWidget(ScrollContainer.class); + internalContainer.addWidget(scrollContainer); + scrollContainer.setLayoutData(BorderLayoutData.CENTER); // internalContainer.addWidget(scrollContainer); @@ -959,7 +970,7 @@ fileList.addKeyListener(new KeyAdapter() { @Override - public void keyPressed(KeyPressedEvent keyPressedEvent) + public void keyPressed(Object sender, KeyPressedEvent keyPressedEvent) { if (keyPressedEvent.getKeyClass() == Key.ENTER) { @@ -1012,7 +1023,7 @@ { @Override - public void mouseDoubleClicked(MouseDoubleClickedEvent mouseDoubleClickedEvent) + public void mouseDoubleClicked(Object sender, MouseDoubleClickedEvent mouseDoubleClickedEvent) { mouseDoubleClickedEvent.setUsed(); Item Item = fileList.getSelectedItem(); @@ -1214,7 +1225,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { //Inject code into the GL thread here if (glThread == null) @@ -1229,7 +1240,7 @@ } while (((task = glQueue.poll()) != null)); - super.paintContent(g, gl); + super.paintContent(g); } /** Modified: optional/org/fenggui/composite/filedialog/FileDialogWindow.java =================================================================== --- optional/org/fenggui/composite/filedialog/FileDialogWindow.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/filedialog/FileDialogWindow.java 2009-06-01 15:40:58 UTC (rev 639) @@ -48,13 +48,13 @@ public FileDialogWindow(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn, boolean autoClose) { - super(closeBtn, maximizeBtn, minimizeBtn, autoClose); + super(closeBtn, autoClose); build(); } public FileDialogWindow(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn) { - super(closeBtn, maximizeBtn, minimizeBtn); + super(closeBtn); build(); } Modified: optional/org/fenggui/composite/tab/AbstractTabItem.java =================================================================== --- optional/org/fenggui/composite/tab/AbstractTabItem.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/tab/AbstractTabItem.java 2009-06-01 15:40:58 UTC (rev 639) @@ -39,11 +39,6 @@ } - public AbstractTabItem(AbstractTabItem tabItem) - { - super(tabItem); - } - /** * The widget that should be used as the tab Header. This is always shown. * Modified: optional/org/fenggui/composite/tab/TabItem.java =================================================================== --- optional/org/fenggui/composite/tab/TabItem.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/tab/TabItem.java 2009-06-01 15:40:58 UTC (rev 639) @@ -42,12 +42,6 @@ private RadioButton<Integer> button; private TabContainer container = null; - public TabItem(TabItem tabItem) - { - super(tabItem); - button = new RadioButton<Integer>(tabItem.button); - } - public TabItem() { button = new RadioButton<Integer>(); Modified: optional/org/fenggui/composite/table/Table.java =================================================================== --- optional/org/fenggui/composite/table/Table.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/table/Table.java 2009-06-01 15:40:58 UTC (rev 639) @@ -28,8 +28,8 @@ import org.fenggui.ToggableGroup; import org.fenggui.appearance.EntryAppearance; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.event.mouse.MouseClickedEvent; +import org.fenggui.event.mouse.MouseMovedEvent; import org.fenggui.util.Dimension; /** @@ -346,7 +346,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { int currentY = this.getAppearance().getContentHeight(); @@ -392,31 +392,29 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - @Override - public void mouseClicked(MouseClickedEvent event) + public void onEventFired(String eventType, MouseClickedEvent event) { if (hoveredRow != null) selectionGroup.setSelected(this, hoveredRow, true); - super.mouseClicked(event); + super.onEventFired(eventType, event); } /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseMoved(int, int) */ - @Override - public void mouseMoved(int displayX, int displayY) + public void onEventFired(String eventType, MouseMovedEvent mm) { - hoveredRow = this.isOnColumn(displayY - this.getDisplayY()); + hoveredRow = this.isOnColumn(mm.getLocalY(this)); - super.mouseMoved(displayX, displayY); + super.onEventFired(eventType, mm); } /* (non-Javadoc) * @see org.fenggui.ModelWidget#ModelUpdated(org.fenggui.IModel) */ @Override - protected void ModelUpdated(ITableModel model, boolean newModel) + protected void onModelUpdated(ITableModel model, boolean newModel) { if (newModel) { Modified: optional/org/fenggui/composite/text/TextRun.java =================================================================== --- optional/org/fenggui/composite/text/TextRun.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/text/TextRun.java 2009-06-01 15:40:58 UTC (rev 639) @@ -190,7 +190,7 @@ } gl.end(); - gl.enableTexture2D(false); +// gl.enableTexture2D(false); } /** Modified: optional/org/fenggui/composite/text/TextView.java =================================================================== --- optional/org/fenggui/composite/text/TextView.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/text/TextView.java 2009-06-01 15:40:58 UTC (rev 639) @@ -26,11 +26,10 @@ import org.fenggui.ITextWidget; import org.fenggui.ObservableWidget; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.binding.render.ImageFont; import org.fenggui.event.ITextChangedListener; import org.fenggui.event.TextChangedEvent; -import org.fenggui.event.mouse.IMousePressedListener; +import org.fenggui.event.mouse.MouseAdapter; import org.fenggui.event.mouse.MousePressedEvent; import org.fenggui.theme.xml.IXMLStreamableException; import org.fenggui.theme.xml.InputOutputStream; @@ -82,14 +81,17 @@ void buildLogic() { - addMousePressedListener(new IMousePressedListener() - { + addMouseListener(new MouseAdapter() { - public void mousePressed(MousePressedEvent mp) + /* (non-Javadoc) + * @see org.fenggui.event.mouse.MouseAdapter#mousePressed(java.lang.Object, org.fenggui.event.mouse.MousePressedEvent) + */ + @Override + public void mousePressed(Object sender, MousePressedEvent mousePressedEvent) { // (johannes) isnt that the same as getAppearance().insideMargin(...)? - int x = mp.getDisplayX() - getDisplayX() - getAppearance().getPadding().getLeft(); - int y = mp.getDisplayY() - getDisplayY() - getAppearance().getPadding().getBottom() + int x = mousePressedEvent.getDisplayX() - getDisplayX() - getAppearance().getPadding().getLeft(); + int y = mousePressedEvent.getDisplayY() - getDisplayY() - getAppearance().getPadding().getBottom() - getAppearance().getContentHeight(); TextRun run = getRun(x, y); @@ -98,6 +100,7 @@ System.out.println("Click on : " + new String(run.getChars())); } } + }); } @@ -383,7 +386,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { // lower left corner of character map int y = appearance.getContentHeight(); Modified: optional/org/fenggui/composite/tree/Tree.java =================================================================== --- optional/org/fenggui/composite/tree/Tree.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/composite/tree/Tree.java 2009-06-01 15:40:58 UTC (rev 639) @@ -20,13 +20,14 @@ import org.fenggui.ModelWidget; import org.fenggui.ToggableGroup; +import org.fenggui.Widget; import org.fenggui.appearance.EntryAppearance; import org.fenggui.appearance.LabelAppearance; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.event.SizeChangedEvent; import org.fenggui.event.mouse.MouseClickedEvent; import org.fenggui.event.mouse.MouseDoubleClickedEvent; +import org.fenggui.event.mouse.MouseMovedEvent; import org.fenggui.util.Dimension; /** @@ -158,7 +159,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { if (getRoot() == null) return; @@ -177,34 +178,32 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseMoved(int, int) */ - @Override - public void mouseMoved(int displayX, int displayY) + public void onEventFired(String eventType, MouseMovedEvent mm) { if (getRoot() != null) { int frombottom = getAppearance().getContentHeight() - getRoot().getPreferredSize().getHeight(); int currentY = frombottom > 0 ? frombottom : 0; - hoveredItem = getRoot().getItemOnPosition(0, currentY, displayX - this.getDisplayX(), - displayY - this.getDisplayY(), getAppearance().getContentWidth(), getAppearance()); + hoveredItem = getRoot().getItemOnPosition(0, currentY, mm.getDisplayX() - this.getDisplayX(), + mm.getDisplayY() - this.getDisplayY(), getAppearance().getContentWidth(), getAppearance()); } else { hoveredItem = null; } - super.mouseMoved(displayX, displayY); + super.onEventFired(eventType, mm); } /* (non-Javadoc) * @see org.fenggui.Widget#sizeChanged(org.fenggui.event.SizeChangedEvent) */ - @Override - public void sizeChanged(SizeChangedEvent event) + public void onEventFired(String eventType, SizeChangedEvent event) { - super.sizeChanged(event); + super.onEventFired(eventType, event); - if (getRoot() != null) + if (getRoot() != null && eventType.equals(Widget.EVENT_SIZECHANGED)) getRoot().adaptChange(this.getAppearance().getContentWidth(), this.getAppearance().getContentHeight(), getAppearance()); } @@ -212,8 +211,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseClicked(org.fenggui.event.mouse.MouseClickedEvent) */ - @Override - public void mouseClicked(MouseClickedEvent event) + public void onEventFired(String eventType, MouseClickedEvent event) { if (hoveredItem != null) { @@ -221,14 +219,13 @@ hoveredItem.setSelected(true); } - super.mouseClicked(event); + super.onEventFired(eventType, event); } /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseDoubleClicked(org.fenggui.event.mouse.MouseDoubleClickedEvent) */ - @Override - public void mouseDoubleClicked(MouseDoubleClickedEvent event) + public void onEventFired(String eventType, MouseDoubleClickedEvent event) { if (hoveredItem != null) { @@ -237,14 +234,14 @@ updateMinSize(); } - super.mouseDoubleClicked(event); + super.onEventFired(eventType, event); } /* (non-Javadoc) * @see org.fenggui.ModelWidget#ModelUpdated(org.fenggui.IModel) */ @Override - protected void ModelUpdated(ITreeModel<E> model, boolean newModel) + protected void onModelUpdated(ITreeModel<E> model, boolean newModel) { if (newModel) { Modified: optional/org/fenggui/experimental/LeftTitleBarWindow.java =================================================================== --- optional/org/fenggui/experimental/LeftTitleBarWindow.java 2009-05-20 13:26:20 UTC (rev 638) +++ optional/org/fenggui/experimental/LeftTitleBarWindow.java 2009-06-01 15:40:58 UTC (rev 639) @@ -54,9 +54,9 @@ * @param maximizeBtn * @param minimizeBtn */ - public LeftTitleBarWindow(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn, boolean autoClose) + public LeftTitleBarWindow(boolean closeBtn, boolean autoClose) { - super(closeBtn, maximizeBtn, minimizeBtn, autoClose); + super(closeBtn, autoClose); } /* @@ -65,9 +65,10 @@ * @see org.fenggui.composites.Window#build(boolean, boolean, boolean) */ @Override - protected void build(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn) + protected void build(boolean closeBtn) { - titleBar = FengGUI.createContainer(this); + titleBar = FengGUI.createWidget(Container.class); + titleBar.setParent(this); setLayoutManager(new BorderLayout()); @@ -77,7 +78,7 @@ titleBar.setLayoutData(BorderLayoutData.WEST); - buildTitleBar(closeBtn, maximizeBtn, minimizeBtn); + buildTitleBar(closeBtn); setSize(100, 120); getAppearance().add(new PlainBackground(new Color(1, 1, 1, 0.8f))); @@ -91,7 +92,7 @@ * boolean) */ @Override - protected void buildTitleBar(boolean closeBtn, boolean maximizeBtn, boolean minimizeBtn) + protected void buildTitleBar(boolean closeBtn) { titleBar.setLayoutManager(new RowLayout(false)); @@ -100,16 +101,6 @@ buildCloseButton(); } - if (minimizeBtn) - { - buildMinimizeButton(); - } - - if (maximizeBtn) - { - buildMaximizeButton(); - } - // Create a vertical Label title = new RotatedLabel(90); title.getAppearance().setAlignment(Alignment.BOTTOM); Modified: src/org/fenggui/Button.java =================================================================== --- src/org/fenggui/Button.java 2009-05-20 13:26:20 UTC (rev 638) +++ src/org/fenggui/Button.java 2009-06-01 15:40:58 UTC (rev 639) @@ -29,7 +29,6 @@ import org.fenggui.event.key.KeyPressedEvent; import org.fenggui.event.key.KeyReleasedEvent; import org.fenggui.event.mouse.MouseButton; -import org.fenggui.event.mouse.MouseEnteredEvent; import org.fenggui.event.mouse.MouseExitedEvent; import org.fenggui.event.mouse.MousePressedEvent; import org.fenggui.event.mouse.MouseReleasedEvent; @@ -64,12 +63,6 @@ this(""); } - public Button(Button button) - { - super(button); - initDefaults(); - } - public Button(String text) { setTraversable(true); @@ -100,9 +93,9 @@ if (!pressed) { pressed = true; - this.getDisplay().setFocusedWidget(this); + //this.getDisplay().setFocusedWidget(this); //called by focus change already - //this.updateState(STATE_PRESSED); + this.updateState(STATE_PRESSED); } } @@ -129,8 +122,7 @@ /* (non-Javadoc) * @see org.fenggui.ObservableWidget#keyPressed(org.fenggui.event.key.KeyPressedEvent) */ - @Override - public void keyPressed(KeyPressedEvent keyPressedEvent) + protected void onEventFired(String eventType, KeyPressedEvent keyPressedEvent) { if (isEnabled()) { @@ -143,14 +135,13 @@ } } } - super.keyPressed(keyPressedEvent); + super.onEventFired(eventType, keyPressedEvent); } /* (non-Javadoc) * @see org.fenggui.ObservableWidget#keyReleased(org.fenggui.event.key.KeyReleasedEvent) */ - @Override - public void keyReleased(KeyReleasedEvent e) + protected void onEventFired(String eventType, KeyReleasedEvent e) { if (isEnabled()) { @@ -163,14 +154,13 @@ } } } - super.keyReleased(e); + super.onEventFired(eventType, e); } /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mousePressed(org.fenggui.event.mouse.MousePressedEvent) */ - @Override - public void mousePressed(MousePressedEvent mousePressedEvent) + protected void onEventFired(String eventType, MousePressedEvent mousePressedEvent) { if (isEnabled()) { @@ -180,54 +170,32 @@ mousePressedEvent.setUsed(); } } - super.mousePressed(mousePressedEvent); + super.onEventFired(eventType, mousePressedEvent); } /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseReleased(org.fenggui.event.mouse.MouseReleasedEvent) */ - @Override - public void mouseReleased(MouseReleasedEvent mouseReleasedEvent) + protected void onEventFired(String eventType, MouseReleasedEvent mouseReleasedEvent) { if (isEnabled()) { if (!mouseReleasedEvent.isAlreadyUsed() && mouseReleasedEvent.getButton() == MouseButton.LEFT) { - if (Button.this == mouseReleasedEvent.getSource()) + if (Button.this == mouseReleasedEvent.getOriginalSource()) { released(mouseReleasedEvent.getModifiers()); mouseReleasedEvent.setUsed(); } } } - super.mouseReleased(mouseReleasedEvent); + super.onEventFired(eventType, mouseReleasedEvent); } /* (non-Javadoc) - * @see org.fenggui.ObservableWidget#mouseEntered(org.fenggui.event.mouse.MouseEnteredEvent) - */ - @Override - public void mouseEntered(MouseEnteredEvent mouseEnteredEvent) - { - if (isEnabled()) - { - if (!pressed) - { - if (mouseEnteredEvent.getButton() == MouseButton.LEFT && mouseEnteredEvent.getClickCount() >= 1) - { - pressed(); - mouseEnteredEvent.setUsed(); - } - } - } - super.mouseEntered(mouseEnteredEvent); - } - - /* (non-Javadoc) * @see org.fenggui.ObservableWidget#mouseExited(org.fenggui.event.mouse.MouseExitedEvent) */ - @Override - public void mouseExited(MouseExitedEvent mouseExitedEvent) + protected void onEventFired(String eventType, MouseExitedEvent mouseExitedEvent) { if (isEnabled()) { @@ -238,7 +206,7 @@ mouseExitedEvent.setUsed(); } } - super.mouseExited(mouseExitedEvent); + super.onEventFired(eventType, mouseExitedEvent); } public boolean isPressed() Modified: src/org/fenggui/Canvas.java =================================================================== --- src/org/fenggui/Canvas.java 2009-05-20 13:26:20 UTC (rev 638) +++ src/org/fenggui/Canvas.java 2009-06-01 15:40:58 UTC (rev 639) @@ -21,7 +21,6 @@ import org.fenggui.appearance.DecoratorAppearance; import org.fenggui.appearance.DefaultAppearance; import org.fenggui.binding.render.Graphics; -import org.fenggui.binding.render.IOpenGL; import org.fenggui.util.Dimension; /** @@ -61,7 +60,7 @@ } @Override - public void paintContent(Graphics g, IOpenGL gl) + public void paintContent(Graphics g) { } @@ -70,4 +69,15 @@ { return new Dimension(0, 0); } + + /* (non-Javadoc) + * @see org.fenggui.Widget#clone() + */ + @Override + public Canvas clone() + { + Canvas result = (Canvas) super.clone(); + result.appearance = new DefaultAppearance(result); + return result; + } } Modified: src/org/fenggui/CheckBox.java =================================================================== --- src/org/fenggui/CheckBox.java 2009-05-20 13:26:20 UTC (rev 638) ... [truncated message content] |
From: <mar...@us...> - 2009-05-20 13:26:28
|
Revision: 638 http://fenggui.svn.sourceforge.net/fenggui/?rev=638&view=rev Author: marcmenghin Date: 2009-05-20 13:26:20 +0000 (Wed, 20 May 2009) Log Message: ----------- - added security check to system clipboard. FengGUI should start up now but clipboard will not work if no permissions exist. Modified Paths: -------------- src/org/fenggui/binding/clipboard/AWTClipboard.java Modified: src/org/fenggui/binding/clipboard/AWTClipboard.java =================================================================== --- src/org/fenggui/binding/clipboard/AWTClipboard.java 2009-05-08 21:06:01 UTC (rev 637) +++ src/org/fenggui/binding/clipboard/AWTClipboard.java 2009-05-20 13:26:20 UTC (rev 638) @@ -27,6 +27,8 @@ import java.awt.datatransfer.UnsupportedFlavorException; import java.io.IOException; +import org.fenggui.util.Log; + /** * * @author marcmenghin, last edited by $Author$, $Date$ @@ -39,7 +41,21 @@ public AWTClipboard() { - clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + SecurityManager security = System.getSecurityManager(); + if (security != null) + { + try + { + security.checkSystemClipboardAccess(); + clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + } + catch (SecurityException e) + { + Log.warn("No permissions to access the system clipboard. Clipboard will not work."); + } + } else { + clipboard = Toolkit.getDefaultToolkit().getSystemClipboard(); + } } /* (non-Javadoc) @@ -47,6 +63,9 @@ */ public String getText() { + if (clipboard == null) + return ""; + Transferable contents = clipboard.getContents(null); String result = ""; @@ -74,6 +93,9 @@ */ public void setText(String text) { + if (clipboard == null) + return; + //System.out.println("Clipboard-set: " + text); clipboard.setContents(new StringSelection(text), new ClipboardOwner() { This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-05-08 21:06:14
|
Revision: 637 http://fenggui.svn.sourceforge.net/fenggui/?rev=637&view=rev Author: marcmenghin Date: 2009-05-08 21:06:01 +0000 (Fri, 08 May 2009) Log Message: ----------- - fixed buildfile for lwjgl 2.x dependency Modified Paths: -------------- make/build.xml Modified: make/build.xml =================================================================== --- make/build.xml 2009-05-01 15:43:26 UTC (rev 636) +++ make/build.xml 2009-05-08 21:06:01 UTC (rev 637) @@ -24,7 +24,7 @@ <property name="doc" value="./deploy/doc/api" /> <property name="webstart" value="./deploy/webstart" /> <property name="third-party" value="./third-party" /> - <property name="lwjgl1.x" value="./third-party/lwjgl-1.1.4" /> + <property name="lwjgl2.x" value="./third-party/lwjgl-2.1.0" /> <property name="jogl1.x" value="./third-party" /> <!-- Define deployment details --> @@ -38,7 +38,8 @@ <path id="third-party.classpath"> <pathelement location="${jogl1.x}/jogl.jar"/> <pathelement location="${jogl1.x}/gluegen-rt.jar"/> - <pathelement location="${lwjgl1.x}/jar/lwjgl.jar" /> + <pathelement location="${lwjgl2.x}/jar/lwjgl.jar" /> + <pathelement location="${lwjgl2.x}/jar/lwjgl_util.jar" /> </path> <path id="gen.classpath"> @@ -173,7 +174,7 @@ </jar> </target> - <target name="buildPackage" depends="buildFengGUI.jar, buildFengGUI-optional.jar, buildFengGUI-examples.jar"> + <target name="buildPackage" depends="buildFengGUI-examples.jar"> <!-- Copy src folder to deployment folder --> <copy todir="${deploy}/src"> @@ -221,7 +222,7 @@ </zip> </target> - <target name="buildWebstart" depends="buildFengGUI.jar, buildFengGUI-examples.jar, buildFengGUI-optional.jar"> + <target name="buildWebstart" depends="buildFengGUI-examples.jar"> <copy todir="${webstart}" file="${deploy}/${deploy.bin.jar}" /> <copy todir="${webstart}" file="${deploy}/${deploy.bin-optional.jar}" /> <copy todir="${webstart}" file="${deploy}/${deploy.bin-examples.jar}" /> @@ -247,7 +248,7 @@ </target> - <target name="deployEverything" depends="buildFengGUI.jar, buildPackage, uploadWebstart, uploadJavaDoc" /> + <target name="deployEverything" depends="buildPackage, uploadWebstart, uploadJavaDoc" /> <target name="uploadWebstart" depends="buildWebstart"> This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |
From: <mar...@us...> - 2009-05-01 15:43:55
|
Revision: 636 http://fenggui.svn.sourceforge.net/fenggui/?rev=636&view=rev Author: marcmenghin Date: 2009-05-01 15:43:26 +0000 (Fri, 01 May 2009) Log Message: ----------- - updated lwjgl to version 2.1 - removed lwjgl 1.4 from third-party folder. Modified Paths: -------------- .classpath src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java test/org/fenggui/example/AWTGLCanvasTest.java test/org/fenggui/example/ExampleBasisLWJGL.java Removed Paths: ------------- third-party/lwjgl-1.1.4/ Modified: .classpath =================================================================== --- .classpath 2009-05-01 15:13:38 UTC (rev 635) +++ .classpath 2009-05-01 15:43:26 UTC (rev 636) @@ -6,7 +6,7 @@ <classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/> <classpathentry kind="con" path="org.eclipse.jdt.junit.JUNIT_CONTAINER/4"/> <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/jogl1.x"/> - <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/lwjgl1.x"/> + <classpathentry kind="con" path="org.eclipse.jdt.USER_LIBRARY/lwjgl2.x"/> <classpathentry kind="lib" path="third-party/svgSalamander.jar"/> <classpathentry kind="output" path="bin"/> </classpath> Modified: src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java =================================================================== --- src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java 2009-05-01 15:13:38 UTC (rev 635) +++ src/org/fenggui/binding/render/lwjgl/LWJGLOpenGL.java 2009-05-01 15:43:26 UTC (rev 636) @@ -28,7 +28,7 @@ import org.lwjgl.opengl.GL11; import org.lwjgl.opengl.GL12; import org.lwjgl.opengl.GL13; -import org.lwjgl.opengl.glu.GLU; +import org.lwjgl.util.glu.GLU; /** * @author oliver_carr Modified: test/org/fenggui/example/AWTGLCanvasTest.java =================================================================== --- test/org/fenggui/example/AWTGLCanvasTest.java 2009-05-01 15:13:38 UTC (rev 635) +++ test/org/fenggui/example/AWTGLCanvasTest.java 2009-05-01 15:43:26 UTC (rev 636) @@ -25,7 +25,7 @@ import org.lwjgl.opengl.AWTGLCanvas; import org.lwjgl.opengl.Display; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.glu.GLU; +import org.lwjgl.util.glu.GLU; /** * Demonstrates how to use LWJGLs org.lwjgl.opengl.AWTGLCanvas instead of org.lwjgl.opengl.Display. Modified: test/org/fenggui/example/ExampleBasisLWJGL.java =================================================================== --- test/org/fenggui/example/ExampleBasisLWJGL.java 2009-05-01 15:13:38 UTC (rev 635) +++ test/org/fenggui/example/ExampleBasisLWJGL.java 2009-05-01 15:43:26 UTC (rev 636) @@ -27,7 +27,7 @@ import org.lwjgl.opengl.Display; import org.lwjgl.opengl.DisplayMode; import org.lwjgl.opengl.GL11; -import org.lwjgl.opengl.glu.GLU; +import org.lwjgl.util.glu.GLU; /** * Examplary LWJGL app that shows the 'Everyhing' example. This was sent by the SourceForge.net collaborative development platform, the world's largest Open Source development site. |