Choice.java (add): Leave posting of ItemEvents to peer.

2004-01-05  Fernando Nasser  <fnasser@redhat.com>

        * java/awt/Choice.java (add): Leave posting of ItemEvents to peer.
        (insert): Ditto.
        (remove): Ditto.  Also, Check for valid argument.
        (removeAll): Use peer interface method.
        * gnu/java/awt/peer/gtk/GtkChoicePeer.java (nativeAdd): New name for
        native add function.
        (nativeRemove): New name for native remove function.
        (getHistory): New native function.
        (constructor): Generate ItemEvent.
        (add): Ditto, if selection is changed.
        (remove): Ditto, ditto.
        (removeAll): Add implementation.
        (handleEvent): Remove.  Dead code.
        (choicePostItemEvent): Add comment.
        * jni/gtk-peer/gnu_java_awt_peer_gtk_GtkChoicePeer.c
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_append): Add comments.
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_add): Rename to...
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeAdd): New name.  Add
        comments and fix condition to change selection.
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_remove): Rename to...
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_nativeRemove): New name.  Add
        remove all capability.
        (Java_gnu_java_awt_peer_gtk_GtkChoicePeer_getHistory): New function.
        (item_activate): Add cast to remove compiler warning.

From-SVN: r75443
This commit is contained in:
Fernando Nasser
2004-01-05 21:18:06 +00:00
committed by Fernando Nasser
parent b17fc9eb25
commit b7a9b4af03
4 changed files with 157 additions and 75 deletions
@@ -38,6 +38,7 @@ exception statement from your version. */
package gnu.java.awt.peer.gtk;
import java.awt.AWTEvent;
import java.awt.Choice;
import java.awt.event.ItemEvent;
import java.awt.peer.ChoicePeer;
@@ -45,8 +46,6 @@ import java.awt.peer.ChoicePeer;
public class GtkChoicePeer extends GtkComponentPeer
implements ChoicePeer
{
native void create ();
public GtkChoicePeer (Choice c)
{
super (c);
@@ -59,35 +58,71 @@ public class GtkChoicePeer extends GtkComponentPeer
items[i] = c.getItem (i);
append (items);
// Must set our state before notifying listeners
((Choice) awtComponent).select (c.getItem (0));
postItemEvent (c.getItem (0), ItemEvent.SELECTED);
}
}
native void append (String items[]);
native void create ();
native void append (String items[]);
native int getHistory ();
native void nativeAdd (String item, int index);
native void nativeRemove (int index);
native public void add (String item, int index);
native public void remove (int index);
native public void select (int position);
public void removeAll () { }
public void add (String item, int index)
{
int before = getHistory();
nativeAdd (item, index);
/* Generate an ItemEvent if we added the first one or
if we inserted at or before the currently selected item. */
if ((before < 0) || (before >= index))
{
// Must set our state before notifying listeners
((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
}
}
public void remove (int index)
{
int before = getHistory();
int after;
nativeRemove (index);
after = getHistory();
/* Generate an ItemEvent if we are removing the currently selected item
and there are at least one item left. */
if ((before == index) && (after >= 0))
{
// Must set our state before notifying listeners
((Choice) awtComponent).select (((Choice) awtComponent).getItem (0));
postItemEvent (((Choice) awtComponent).getItem (0), ItemEvent.SELECTED);
}
}
public void removeAll ()
{
nativeRemove (-1);
}
public void addItem (String item, int position)
{
add (item, position);
}
/*
public void handleEvent (AWTEvent event)
{
if (event instanceof ItemEvent)
((Choice) awtComponent).select ((String) ((ItemEvent)event).getItem ());
super.handleEvent (event);
}
*/
protected void choicePostItemEvent (String label, int stateChange)
{
// Must set our state before notifying listeners
if (stateChange == ItemEvent.SELECTED)
((Choice) awtComponent).select (label);
super.postItemEvent (label, stateChange);
postItemEvent (label, stateChange);
}
}