summaryrefslogtreecommitdiff
path: root/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
diff options
context:
space:
mode:
Diffstat (limited to 'libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c')
-rw-r--r--libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c513
1 files changed, 0 insertions, 513 deletions
diff --git a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c b/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
deleted file mode 100644
index 1483147dc99..00000000000
--- a/libjava/jni/gtk-peer/gnu_java_awt_peer_gtk_GtkListPeer.c
+++ /dev/null
@@ -1,513 +0,0 @@
-/* GtkListPeer.c -- implements GtkListPeer's native methods
- Copyright (C) 1998, 1999, 2003, 2004 Free Software Foundation, Inc.
-
- This file is part of GNU Classpath.
-
- GNU Classpath is free software; you can redistribute it and/or modify
- it under the terms of the GNU General Public License as published by
- the Free Software Foundation; either version 2, or (at your option)
- any later version.
-
- GNU Classpath 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
- General Public License for more details.
-
- You should have received a copy of the GNU General Public License
- along with GNU Classpath; see the file COPYING. If not, write to the
- Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA
- 02110-1301 USA.
-
- Linking this library statically or dynamically with other modules is
- making a combined work based on this library. Thus, the terms and
- conditions of the GNU General Public License cover the whole
- combination.
-
- As a special exception, the copyright holders of this library give you
- permission to link this library with independent modules to produce an
- executable, regardless of the license terms of these independent
- modules, and to copy and distribute the resulting executable under
- terms of your choice, provided that you also meet, for each linked
- independent module, the terms and conditions of the license of that
- module. An independent module is a module which is not derived from
- or based on this library. If you modify this library, you may extend
- this exception to your version of the library, but you are not
- obligated to do so. If you do not wish to do so, delete this
- exception statement from your version. */
-
-#include "gtkpeer.h"
-#include "gnu_java_awt_peer_gtk_GtkListPeer.h"
-
-enum
- {
- COLUMN_STRING,
- N_COLUMNS
- };
-
-gboolean item_highlighted (GtkTreeSelection *selection,
- GtkTreeModel *model,
- GtkTreePath *path,
- gboolean path_currently_selected,
- jobject peer);
-
-
-#define TREE_VIEW_FROM_SW(obj) \
- (GTK_TREE_VIEW (GTK_SCROLLED_WINDOW (obj)->container.child))
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_create
- (JNIEnv *env, jobject obj, jint rows)
-{
- GtkWidget *sw;
- GtkWidget *list;
- GtkCellRenderer *renderer;
- GtkTreeViewColumn *column;
- GtkListStore *list_store;
- GtkTreeIter iter;
- GtkRequisition req;
- gint i;
-
- /* Create global reference and save it for future use */
- NSA_SET_GLOBAL_REF (env, obj);
-
- gdk_threads_enter ();
-
- list_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
- /* Add the number of rows so that we can calculate the tree view's
- size request. */
- for (i = 0; i < rows; i++)
- {
- gtk_list_store_append (list_store, &iter);
- gtk_list_store_set (list_store, &iter,
- COLUMN_STRING, "",
- -1);
- }
- list = gtk_tree_view_new_with_model (GTK_TREE_MODEL (list_store));
- renderer = gtk_cell_renderer_text_new ();
- column = gtk_tree_view_column_new_with_attributes (NULL,
- renderer,
- "text",
- COLUMN_STRING,
- NULL);
-
- sw = gtk_scrolled_window_new (NULL, NULL);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (sw),
- GTK_POLICY_AUTOMATIC,
- GTK_POLICY_AUTOMATIC);
-
- gtk_tree_view_append_column (GTK_TREE_VIEW (list), column);
-
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (list), FALSE);
-
- gtk_widget_size_request (GTK_WIDGET (list), &req);
-
- gtk_widget_set_size_request (GTK_WIDGET (list), req.width, req.height);
-
- gtk_container_add (GTK_CONTAINER (sw), list);
-
- /* Remove the blank rows. */
- gtk_list_store_clear (list_store);
-
- gtk_widget_show (list);
- gtk_widget_show (sw);
-
- gdk_threads_leave ();
-
- NSA_SET_PTR (env, obj, sw);
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_connectSignals
- (JNIEnv *env, jobject obj)
-{
- void *ptr;
- jobject *gref;
- GtkTreeView *list;
- GtkTreeSelection *selection;
-
- ptr = NSA_GET_PTR (env, obj);
- gref = NSA_GET_GLOBAL_REF (env, obj);
-
- gdk_threads_enter ();
-
- g_assert (gref);
-
- list = TREE_VIEW_FROM_SW (ptr);
-
- g_signal_connect (G_OBJECT (list), "event",
- G_CALLBACK (pre_event_handler), *gref);
-
- selection = gtk_tree_view_get_selection (GTK_TREE_VIEW (list));
- gtk_tree_selection_set_select_function (selection, item_highlighted,
- *gref, NULL);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetModifyFont
- (JNIEnv *env, jobject obj, jstring name, jint style, jint size)
-{
- const char *font_name;
- void *ptr;
- GtkWidget *list;
- PangoFontDescription *font_desc;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter();
-
- list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr));
-
- font_name = (*env)->GetStringUTFChars (env, name, NULL);
-
- font_desc = pango_font_description_from_string (font_name);
- pango_font_description_set_size (font_desc, size * dpi_conversion_factor);
-
- if (style & AWT_STYLE_BOLD)
- pango_font_description_set_weight (font_desc, PANGO_WEIGHT_BOLD);
-
- if (style & AWT_STYLE_ITALIC)
- pango_font_description_set_style (font_desc, PANGO_STYLE_OBLIQUE);
-
- gtk_widget_modify_font (GTK_WIDGET (list), font_desc);
-
- pango_font_description_free (font_desc);
-
- (*env)->ReleaseStringUTFChars (env, name, font_name);
-
- gdk_threads_leave();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_gtkWidgetRequestFocus
- (JNIEnv *env, jobject obj)
-{
- void *ptr;
- GtkWidget *list;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = GTK_WIDGET (TREE_VIEW_FROM_SW (ptr));
- gtk_widget_grab_focus (list);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_append
- (JNIEnv *env, jobject obj, jobjectArray items)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreeIter iter;
- GtkTreeModel *list_store;
- jint count;
- jint i;
-
- ptr = NSA_GET_PTR (env, obj);
-
- count = (*env)->GetArrayLength (env, items);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- list_store = gtk_tree_view_get_model (list);
-
- for (i = 0; i < count; i++)
- {
- const char *text;
- jobject item;
-
- item = (*env)->GetObjectArrayElement (env, items, i);
-
- text = (*env)->GetStringUTFChars (env, item, NULL);
- gtk_list_store_append (GTK_LIST_STORE (list_store), &iter);
- gtk_list_store_set (GTK_LIST_STORE (list_store), &iter,
- COLUMN_STRING, text,
- -1);
- (*env)->ReleaseStringUTFChars (env, item, text);
- }
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_add
- (JNIEnv *env, jobject obj, jstring text, jint index)
-{
- void *ptr;
- const char *str;
- GtkTreeView *list;
- GtkTreeIter iter;
- GtkTreeModel *list_store;
-
- ptr = NSA_GET_PTR (env, obj);
- str = (*env)->GetStringUTFChars (env, text, NULL);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- list_store = gtk_tree_view_get_model (list);
-
- if (index == -1)
- gtk_list_store_append (GTK_LIST_STORE (list_store), &iter);
- else
- gtk_list_store_insert (GTK_LIST_STORE (list_store), &iter, index);
-
- gtk_list_store_set (GTK_LIST_STORE (list_store), &iter,
- COLUMN_STRING, str, -1);
-
- gdk_threads_leave ();
-
- (*env)->ReleaseStringUTFChars (env, text, str);
-}
-
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_delItems
- (JNIEnv *env, jobject obj, jint start, jint end)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreeIter iter;
- GtkTreeModel *list_store;
- jint i;
- jint num_items;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- list_store = gtk_tree_view_get_model (list);
-
- /* Special case: remove all rows. */
- if (end == -1)
- gtk_list_store_clear (GTK_LIST_STORE (list_store));
- else
- {
- i = 0;
- num_items = end - start + 1;
- gtk_tree_model_iter_nth_child (list_store, &iter, NULL, start);
- while (i < num_items)
- {
- gtk_list_store_remove (GTK_LIST_STORE (list_store), &iter);
- i++;
- }
- }
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_select
- (JNIEnv *env, jobject obj, jint index)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreePath *path;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- path = gtk_tree_path_new_from_indices (index, -1);
- gtk_tree_view_set_cursor (list, path, NULL, FALSE);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_deselect
- (JNIEnv *env, jobject obj, jint index)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreeSelection *selection;
- GtkTreePath *path;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- selection = gtk_tree_view_get_selection (list);
- path = gtk_tree_path_new_from_indices (index, -1);
- gtk_tree_selection_unselect_path (selection, path);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_getSize
- (JNIEnv *env, jobject obj, jint rows, jint visible_rows, jintArray jdims)
-{
- void *ptr;
- jint *dims;
- GtkRequisition current_req;
- GtkRequisition natural_req;
-
- dims = (*env)->GetIntArrayElements (env, jdims, NULL);
- dims[0] = dims[1] = 0;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- /* Save the widget's current size request. */
- gtk_widget_size_request (GTK_WIDGET (ptr), &current_req);
-
- /* Get the widget's "natural" size request. */
- gtk_widget_set_size_request (GTK_WIDGET (ptr), -1, -1);
- gtk_widget_size_request (GTK_WIDGET (ptr), &natural_req);
-
- /* Reset the widget's size request. */
- gtk_widget_set_size_request (GTK_WIDGET (ptr),
- current_req.width, current_req.height);
-
- dims[0] = natural_req.width;
-
- /* Calculate the final height, by comparing the number of rows
- in the list to the number of rows requested by the caller.
- FIXME: Is there a GTK method that counts the number of rows
- in the list? If so, we don't need to bring visible_rows from
- the Java peer. */
- if (rows == visible_rows)
- dims[1] = natural_req.height;
- else
- dims[1] = natural_req.height / visible_rows * rows;
-
- gdk_threads_leave ();
-
- (*env)->ReleaseIntArrayElements (env, jdims, dims, 0);
-}
-
-
-JNIEXPORT jintArray JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_getSelectedIndexes
- (JNIEnv *env, jobject obj)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreeSelection *selection;
- jintArray result_array;
- jint *result_array_iter;
- GList *current_row;
- GList *rows;
- gint *indices;
- jint count;
- jint i;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- selection = gtk_tree_view_get_selection (list);
- count = gtk_tree_selection_count_selected_rows (selection);
- if (count > 0)
- {
- current_row = rows = gtk_tree_selection_get_selected_rows (selection, NULL);
-
- result_array = (*env)->NewIntArray (env, count);
- result_array_iter = (*env)->GetIntArrayElements (env, result_array, NULL);
-
- for (i = 0; i < count; i++)
- {
- indices = gtk_tree_path_get_indices (current_row->data);
- result_array_iter[i] = indices ? indices[0] : -1;
- current_row = g_list_next (current_row);
- }
-
- if (rows)
- {
- g_list_foreach (rows, (GFunc) gtk_tree_path_free, NULL);
- g_list_free (rows);
- }
-
- gdk_threads_leave ();
-
- (*env)->ReleaseIntArrayElements (env, result_array, result_array_iter, 0);
-
- return result_array;
- }
- else
- gdk_threads_leave ();
-
- return (jintArray) NULL;
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_makeVisible
- (JNIEnv *env, jobject obj, jint index)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreePath *path;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- path = gtk_tree_path_new_from_indices (index, -1);
- gtk_tree_view_scroll_to_cell (list, path, NULL, FALSE, 0.0, 0.0);
-
- gdk_threads_leave ();
-}
-
-JNIEXPORT void JNICALL
-Java_gnu_java_awt_peer_gtk_GtkListPeer_setMultipleMode
- (JNIEnv *env, jobject obj, jboolean mode)
-{
- void *ptr;
- GtkTreeView *list;
- GtkTreeSelection *selection;
-
- ptr = NSA_GET_PTR (env, obj);
-
- gdk_threads_enter ();
-
- list = TREE_VIEW_FROM_SW (ptr);
- selection = gtk_tree_view_get_selection (list);
- gtk_tree_selection_set_mode (selection,
- mode ? GTK_SELECTION_MULTIPLE
- : GTK_SELECTION_SINGLE);
-
- gdk_threads_leave ();
-}
-
-gboolean
-item_highlighted (GtkTreeSelection *selection __attribute__((unused)),
- GtkTreeModel *model,
- GtkTreePath *path,
- gboolean path_currently_selected,
- jobject peer)
-{
- GtkTreeIter iter;
- jint row;
- gint *indices;
-
- if (gtk_tree_model_get_iter (model, &iter, path))
- {
- indices = gtk_tree_path_get_indices (path);
- row = indices ? indices[0] : -1;
-
- if (!path_currently_selected)
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postListItemEventID,
- row,
- (jint) AWT_ITEM_SELECTED);
- else
- (*gdk_env())->CallVoidMethod (gdk_env(), peer,
- postListItemEventID,
- row,
- (jint) AWT_ITEM_DESELECTED);
- }
-
- return TRUE;
-}