summaryrefslogtreecommitdiff
path: root/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
diff options
context:
space:
mode:
Diffstat (limited to 'native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c')
-rw-r--r--native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c214
1 files changed, 214 insertions, 0 deletions
diff --git a/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
new file mode 100644
index 000000000..f35e57a09
--- /dev/null
+++ b/native/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkCheckboxPeer.c
@@ -0,0 +1,214 @@
+/* gtkcheckboxpeer.c -- Native implementation of GtkCheckboxPeer
+ Copyright (C) 1998, 1999 Free Software Foundation, Inc.
+
+This file is part of the peer AWT libraries of GNU Classpath.
+
+This library is free software; you can redistribute it and/or modify
+it under the terms of the GNU Library General Public License as published
+by the Free Software Foundation, either version 2 of the License, or
+(at your option) any later verion.
+
+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 Library General Public License for more details.
+
+You should have received a copy of the GNU Library General Public License
+along with this library; if not, write to the Free Software Foundation
+Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307 USA. */
+
+
+#include "gtkpeer.h"
+#include "gnu_java_awt_peer_gtk_GtkCheckboxPeer.h"
+
+static void connect_checkbox_item_selectable_hook (JNIEnv *env,
+ jobject peer_obj,
+ GtkToggleButton *item,
+ jobject item_obj);
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkRadioButtonSetGroup
+ (JNIEnv *env, jobject obj, jobject group)
+{
+ GtkRadioButton *button;
+ void *native_group, *ptr;
+
+ native_group = NSA_GET_PTR (env, group);
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter ();
+
+ button=GTK_RADIO_BUTTON(ptr);
+
+ if (native_group==NULL)
+ gtk_radio_button_set_group (button, NULL);
+ else
+ gtk_radio_button_set_group (button,
+ gtk_radio_button_group
+ (GTK_RADIO_BUTTON (native_group)));
+
+ gdk_threads_leave ();
+
+ if (native_group==NULL)
+ NSA_SET_PTR (env, group, native_group);
+}
+
+JNIEXPORT void JNICALL Java_gnu_java_awt_peer_gtk_GtkRadioButtonPeer_create
+ (JNIEnv *env, jobject obj)
+{
+ gpointer widget;
+
+ gdk_threads_enter ();
+ widget = gtk_type_new (gtk_radio_button_get_type ());
+ gdk_threads_leave ();
+
+ NSA_SET_PTR (env, obj, widget);
+}
+
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkRadioButtonNew
+ (JNIEnv *env, jobject obj, jobject parent_obj,
+ jobject group, jboolean checked, jstring label)
+{
+ GtkWidget *button;
+ const char *str;
+ void *native_group;
+ void *parent;
+
+ str = (*env)->GetStringUTFChars (env, label, NULL);
+ native_group = NSA_GET_PTR (env, group);
+ parent = NSA_GET_PTR (env, parent_obj);
+
+ gdk_threads_enter ();
+
+ /* All checkboxes get a label, even if it is blank. */
+
+ if (native_group==NULL)
+ button=gtk_radio_button_new_with_label_from_widget (NULL, str);
+ else
+ button=gtk_radio_button_new_with_label_from_widget (GTK_RADIO_BUTTON
+ (native_group), str);
+ set_parent (button, GTK_CONTAINER (parent));
+ gtk_widget_realize (button);
+ connect_awt_hook (env, obj, 1,
+ GTK_TOGGLE_BUTTON (button)->event_window);
+ connect_checkbox_item_selectable_hook (env, obj, GTK_TOGGLE_BUTTON (button),
+ label);
+
+ if (checked)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+
+ gdk_threads_leave ();
+ (*env)->ReleaseStringUTFChars (env, label, str);
+
+ if (native_group==NULL)
+ NSA_SET_PTR (env, group, button);
+
+ NSA_SET_PTR (env, obj, button);
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkCheckboxPeer_gtkCheckButtonNew
+ (JNIEnv *env, jobject obj, jobject parent_obj,
+ jboolean checked, jstring label)
+{
+ GtkWidget *button;
+ const char *str;
+ void *parent;
+
+ parent = NSA_GET_PTR (env, parent_obj);
+ str = (*env)->GetStringUTFChars (env, label, NULL);
+
+ gdk_threads_enter ();
+
+ /* All checkboxes get a label, even if it is blank. */
+ button=gtk_check_button_new_with_label (str);
+ if (checked)
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (button), TRUE);
+
+ set_parent (button, GTK_CONTAINER (parent));
+ gtk_widget_realize (button);
+ connect_awt_hook (env, obj, 1,
+ GTK_TOGGLE_BUTTON (button)->event_window);
+ connect_checkbox_item_selectable_hook (env, obj, GTK_TOGGLE_BUTTON (button),
+ label);
+ gdk_threads_leave ();
+
+ (*env)->ReleaseStringUTFChars (env, label, str);
+
+ NSA_SET_PTR (env, obj, button);
+}
+
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkToggleButtonPeer_setState
+ (JNIEnv *env, jobject obj, jboolean checked)
+{
+ void *ptr;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ gdk_threads_enter ();
+ gtk_toggle_button_set_active (GTK_TOGGLE_BUTTON (ptr),
+ (checked) ? TRUE : FALSE);
+ gdk_threads_leave ();
+}
+
+JNIEXPORT void JNICALL
+Java_gnu_java_awt_peer_gtk_GtkToggleButtonPeer_setLabel
+ (JNIEnv *env, jobject obj, jstring label)
+{
+ void *ptr;
+ const char *str;
+ GList *child;
+
+ ptr = NSA_GET_PTR (env, obj);
+
+ printf("labelset\n");
+
+ str = (*env)->GetStringUTFChars (env, label, NULL);
+ gdk_threads_enter ();
+
+ /* We assume that the checkbutton has 1 child, a label. */
+
+ child=gtk_container_children (GTK_CONTAINER(ptr));
+ if (!child)
+ printf("No children in button!\n");
+ if(!GTK_IS_LABEL(child->data))
+ printf("Child is not label!\n");
+
+ gtk_label_set (GTK_LABEL(child->data),str);
+
+ gdk_threads_leave ();
+
+ g_list_free(child);
+ (*env)->ReleaseStringUTFChars (env, label, str);
+}
+
+static void
+item_toggled (GtkToggleButton *item, struct item_event_hook_info *ie)
+{
+ (*gdk_env)->CallVoidMethod (gdk_env, ie->peer_obj,
+ postItemEventID,
+ ie->item_obj,
+ item->active ?
+ (jint) AWT_ITEM_SELECTED :
+ (jint) AWT_ITEM_DESELECTED);
+}
+
+static void
+connect_checkbox_item_selectable_hook (JNIEnv *env, jobject peer_obj,
+ GtkToggleButton *item, jobject item_obj)
+{
+ struct item_event_hook_info *ie;
+
+ ie = (struct item_event_hook_info *)
+ malloc (sizeof (struct item_event_hook_info));
+
+ ie->peer_obj = (*env)->NewGlobalRef (env, peer_obj);
+ ie->item_obj = (*env)->NewGlobalRef (env, item_obj);
+
+ gtk_signal_connect (GTK_OBJECT (item), "toggled",
+ GTK_SIGNAL_FUNC (item_toggled), ie);
+}