diff options
Diffstat (limited to 'bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java')
-rw-r--r-- | bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java | 346 |
1 files changed, 185 insertions, 161 deletions
diff --git a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java index 4e427994e2..9605434476 100644 --- a/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java +++ b/bundles/org.eclipse.swt/Eclipse SWT/gtk/org/eclipse/swt/widgets/TableColumn.java @@ -1,18 +1,18 @@ -package org.eclipse.swt.widgets; - -/* +package org.eclipse.swt.widgets;
+
+/*
* Copyright (c) 2000, 2002 IBM Corp. All rights reserved. * This file is made available under the terms of the Common Public License v1.0 * which accompanies this distribution, and is available at - * http://www.eclipse.org/legal/cpl-v10.html - */ - -import org.eclipse.swt.*; -import org.eclipse.swt.internal.*; -import org.eclipse.swt.internal.gtk.*; -import org.eclipse.swt.graphics.*; -import org.eclipse.swt.events.*; - + * http://www.eclipse.org/legal/cpl-v10.html
+ */
+
+import org.eclipse.swt.*;
+import org.eclipse.swt.internal.*;
+import org.eclipse.swt.internal.gtk.*;
+import org.eclipse.swt.graphics.*;
+import org.eclipse.swt.events.*;
+
/** * Instances of this class represent a column in a table widget. * <dl> @@ -27,10 +27,8 @@ import org.eclipse.swt.events.*; * IMPORTANT: This class is <em>not</em> intended to be subclassed. * </p> */ -public class TableColumn extends Item { - Table parent; - int pixbufRendererHandle; - +public class TableColumn extends Item {
+ Table parent;
/** * Constructs a new instance of this class given its parent * (which must be a <code>Table</code>) and a style value @@ -63,11 +61,11 @@ public class TableColumn extends Item { * @see Widget#checkSubclass * @see Widget#getStyle */ -public TableColumn (Table parent, int style) { - super (parent, checkStyle (style)); - this.parent = parent; - createWidget (parent.getColumnCount ()); -} +public TableColumn (Table parent, int style) {
+ super (parent, checkStyle (style));
+ this.parent = parent;
+ createWidget (parent.getColumnCount ());
+}
/** * Constructs a new instance of this class given its parent * (which must be a <code>Table</code>), a style value @@ -101,11 +99,11 @@ public TableColumn (Table parent, int style) { * @see Widget#checkSubclass * @see Widget#getStyle */ -public TableColumn (Table parent, int style, int index) { - super (parent, checkStyle (style)); - this.parent = parent; - createWidget (index); -} +public TableColumn (Table parent, int style, int index) {
+ super (parent, checkStyle (style));
+ this.parent = parent;
+ createWidget (index);
+}
/** * Adds the listener to the collection of listeners who will * be notified when the control is moved or resized, by sending @@ -125,51 +123,51 @@ public TableColumn (Table parent, int style, int index) { * @see ControlListener * @see #removeControlListener */ -public void addControlListener(ControlListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - TypedListener typedListener = new TypedListener (listener); - addListener (SWT.Resize,typedListener); - addListener (SWT.Move,typedListener); -} -/** - * Adds the listener to the collection of listeners who will - * be notified when the control is selected, by sending - * it one of the messages defined in the <code>SelectionListener</code> - * interface. - * <p> - * <code>widgetSelected</code> is called when the column header is selected. - * <code>widgetDefaultSelected</code> is not called. - * </p> - * - * @param listener the listener which should be notified - * - * @exception IllegalArgumentException <ul> - * <li>ERROR_NULL_ARGUMENT - if the listener is null</li> - * </ul> - * @exception SWTException <ul> - * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li> - * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> - * </ul> - * - * @see SelectionListener - * @see #removeSelectionListener - * @see SelectionEvent +public void addControlListener(ControlListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ TypedListener typedListener = new TypedListener (listener);
+ addListener (SWT.Resize,typedListener);
+ addListener (SWT.Move,typedListener);
+}
+/**
+ * Adds the listener to the collection of listeners who will
+ * be notified when the control is selected, by sending
+ * it one of the messages defined in the <code>SelectionListener</code>
+ * interface.
+ * <p>
+ * <code>widgetSelected</code> is called when the column header is selected.
+ * <code>widgetDefaultSelected</code> is not called.
+ * </p>
+ *
+ * @param listener the listener which should be notified
+ *
+ * @exception IllegalArgumentException <ul>
+ * <li>ERROR_NULL_ARGUMENT - if the listener is null</li>
+ * </ul>
+ * @exception SWTException <ul>
+ * <li>ERROR_WIDGET_DISPOSED - if the receiver has been disposed</li>
+ * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li>
+ * </ul>
+ *
+ * @see SelectionListener
+ * @see #removeSelectionListener
+ * @see SelectionEvent
*/ -public void addSelectionListener (SelectionListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - TypedListener typedListener = new TypedListener (listener); - addListener (SWT.Selection,typedListener); - addListener (SWT.DefaultSelection,typedListener); -} -static int checkStyle (int style) { - return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0); -} -void createWidget (int index) { - parent.createItem (this, index); - text = ""; -} +public void addSelectionListener (SelectionListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ TypedListener typedListener = new TypedListener (listener);
+ addListener (SWT.Selection,typedListener);
+ addListener (SWT.DefaultSelection,typedListener);
+}
+static int checkStyle (int style) {
+ return checkBits (style, SWT.LEFT, SWT.CENTER, SWT.RIGHT, 0, 0, 0);
+}
+void createWidget (int index) {
+ parent.createItem (this, index);
+ text = "";
+}
/** * Returns a value which describes the position of the * text or image in the receiver. The value will be one of @@ -182,18 +180,18 @@ void createWidget (int index) { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public int getAlignment () { - checkWidget(); - if ((style & SWT.LEFT) != 0) return SWT.LEFT; - if ((style & SWT.CENTER) != 0) return SWT.CENTER; - if ((style & SWT.RIGHT) != 0) return SWT.RIGHT; - return SWT.LEFT; -} -public Display getDisplay () { - Table parent = this.parent; - if (parent == null) error (SWT.ERROR_WIDGET_DISPOSED); - return parent.getDisplay (); -} +public int getAlignment () {
+ checkWidget();
+ if ((style & SWT.LEFT) != 0) return SWT.LEFT;
+ if ((style & SWT.CENTER) != 0) return SWT.CENTER;
+ if ((style & SWT.RIGHT) != 0) return SWT.RIGHT;
+ return SWT.LEFT;
+}
+public Display getDisplay () {
+ Table parent = this.parent;
+ if (parent == null) error (SWT.ERROR_WIDGET_DISPOSED);
+ return parent.getDisplay ();
+}
/** * Returns the receiver's parent, which must be a <code>Table</code>. * @@ -204,10 +202,10 @@ public Display getDisplay () { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public Table getParent () { - checkWidget(); - return parent; -} +public Table getParent () {
+ checkWidget();
+ return parent;
+}
/** * Gets the resizable attribute. A column that is * not resizable cannot be dragged by the user but @@ -220,11 +218,15 @@ public Table getParent () { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public boolean getResizable () { - checkWidget(); - return OS.gtk_tree_view_column_get_resizable(handle); -} - +public boolean getResizable () {
+ checkWidget();
+ int index = parent.indexOf (this);
+ if (index == -1) return false;
+ int chandle=OS.GTK_CLIST_COLUMN (parent.handle);
+ GtkCListColumn gtkcolumn = new GtkCListColumn ();
+ OS.memmove(gtkcolumn, chandle+index*GtkCListColumn.sizeof, GtkCListColumn.sizeof);
+ return (gtkcolumn.resizeable == 1) ? true : false;
+}
/** * Gets the width of the receiver. * @@ -235,11 +237,15 @@ public boolean getResizable () { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public int getWidth () { - checkWidget(); - return OS.gtk_tree_view_column_get_width(handle); -} - +public int getWidth () {
+ checkWidget();
+ int index = parent.indexOf (this);
+ if (index == -1) return 0;
+ int chandle=OS.GTK_CLIST_COLUMN (parent.handle);
+ GtkCListColumn gtkcolumn = new GtkCListColumn();
+ OS.memmove(gtkcolumn, chandle+index*GtkCListColumn.sizeof, GtkCListColumn.sizeof);
+ return gtkcolumn.width;
+}
/** * Causes the receiver to be resized to its preferred size. * For a composite, this involves computing the preferred size @@ -251,24 +257,23 @@ public int getWidth () { * </ul> * */ -public void pack () { - checkWidget(); - if (getResizable()) { - // Feature in GTK: AUTOSIZE and RESIZABLE are mutually exclusive - OS.gtk_tree_view_column_set_sizing(handle, OS.GTK_TREE_VIEW_COLUMN_GROW_ONLY); - } else { - OS.gtk_tree_view_column_set_sizing(handle, OS.GTK_TREE_VIEW_COLUMN_AUTOSIZE); - } -} -void releaseChild () { - super.releaseChild (); - parent.destroyItem (this); -} -void releaseWidget () { - super.releaseWidget (); - text = null; - parent = null; -} +public void pack () {
+ checkWidget();
+ int index = parent.indexOf (this);
+ if (index == -1) return;
+ int clist = parent.handle;
+ int width = OS.gtk_clist_optimal_column_width (clist, index);
+ OS.gtk_clist_set_column_width (clist, index, width);
+}
+void releaseChild () {
+ super.releaseChild ();
+ parent.destroyItem (this);
+}
+void releaseWidget () {
+ super.releaseWidget ();
+ text = null;
+ parent = null;
+}
/** * Removes the listener from the collection of listeners who will * be notified when the control is moved or resized. @@ -286,13 +291,13 @@ void releaseWidget () { * @see ControlListener * @see #addControlListener */ -public void removeControlListener (ControlListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; - eventTable.unhook (SWT.Move, listener); - eventTable.unhook (SWT.Resize, listener); -} +public void removeControlListener (ControlListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook (SWT.Move, listener);
+ eventTable.unhook (SWT.Resize, listener);
+}
/** * Removes the listener from the collection of listeners who will * be notified when the control is selected. @@ -310,13 +315,13 @@ public void removeControlListener (ControlListener listener) { * @see SelectionListener * @see #addSelectionListener */ -public void removeSelectionListener(SelectionListener listener) { - checkWidget(); - if (listener == null) error (SWT.ERROR_NULL_ARGUMENT); - if (eventTable == null) return; - eventTable.unhook (SWT.Selection, listener); - eventTable.unhook (SWT.DefaultSelection,listener); -} +public void removeSelectionListener(SelectionListener listener) {
+ checkWidget();
+ if (listener == null) error (SWT.ERROR_NULL_ARGUMENT);
+ if (eventTable == null) return;
+ eventTable.unhook (SWT.Selection, listener);
+ eventTable.unhook (SWT.DefaultSelection,listener);
+}
/** * Controls how text and images will be displayed in the receiver. * The argument should be one of <code>LEFT</code>, <code>RIGHT</code> @@ -329,12 +334,20 @@ public void removeSelectionListener(SelectionListener listener) { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public void setAlignment (int alignment) { - checkWidget(); - if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return; - // FIXME - // NOT IMPLEMENTED -} +public void setAlignment (int alignment) {
+ checkWidget();
+ if ((alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER)) == 0) return;
+ int index = parent.indexOf (this);
+ if (index == -1 || index == 0) return;
+ int table = parent.handle;
+ style &= ~(SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+ style |= alignment & (SWT.LEFT | SWT.RIGHT | SWT.CENTER);
+ int justification = 0;
+ if ((style & SWT.LEFT) == SWT.LEFT) justification |= OS.GTK_JUSTIFY_LEFT;
+ if ((style & SWT.CENTER) == SWT.CENTER) justification |= OS.GTK_JUSTIFY_CENTER;
+ if ((style & SWT.RIGHT) == SWT.RIGHT) justification |= OS.GTK_JUSTIFY_RIGHT;
+ OS.gtk_clist_set_column_justification (table, index, justification);
+}
/** * Sets the resizable attribute. A column that is * not resizable cannot be dragged by the user but @@ -347,27 +360,35 @@ public void setAlignment (int alignment) { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public void setResizable (boolean resizable) { - checkWidget(); - OS.gtk_tree_view_column_set_resizable(handle, resizable); -} - -public void setText (String string) { - checkWidget(); - if (string == null) error (SWT.ERROR_NULL_ARGUMENT); - super.setText (string); - byte[] bytes = Converter.wcsToMbcs(null, string, true); - OS.gtk_tree_view_column_set_title(handle, bytes); - /* - * Bug in GTK. When a table column is hidden and then shown, - * and new text is set into the column, the widget that shows the - * text is not resized to show the new text. The fix is to force the - * table header to resize the widget. - * - * FIXME - Must investigate what is the story with the new Table. - */ -} - +public void setResizable (boolean resizable) {
+ checkWidget();
+ int index = parent.indexOf (this);
+ if (index == -1) return;
+ int table = parent.handle;
+ OS.gtk_clist_set_column_resizeable (table, index, resizable);
+}
+public void setText (String string) {
+ if (!isValidThread ()) error (SWT.ERROR_THREAD_INVALID_ACCESS);
+ if (!isValidWidget ()) error (SWT.ERROR_WIDGET_DISPOSED);
+ if (string == null) error (SWT.ERROR_NULL_ARGUMENT);
+ super.setText (string);
+ int index = parent.indexOf (this);
+ if (index == -1) return;
+ int table = parent.handle;
+ byte [] buffer = Converter.wcsToMbcs (null, string, true);
+ OS.gtk_clist_set_column_title (table, index, buffer);
+ /*
+ * Bug in GTK. When a table column is hidden and then shown,
+ * and new text is set into the column, the widget that shows the
+ * text is not resized to show the new text. The fix is to force the
+ * table header to resize the widget.
+ */
+ int headerHandle = OS.gtk_clist_get_column_widget (table, index);
+ if (headerHandle != 0) {
+ GtkRequisition requisition = new GtkRequisition ();
+ OS.gtk_widget_size_request (headerHandle, requisition);
+ }
+}
/** * Sets the width of the receiver. * @@ -378,9 +399,12 @@ public void setText (String string) { * <li>ERROR_THREAD_INVALID_ACCESS - if not called from the thread that created the receiver</li> * </ul> */ -public void setWidth (int width) { - checkWidget(); - OS.gtk_tree_view_column_set_sizing(handle, OS.GTK_TREE_VIEW_COLUMN_FIXED); - OS.gtk_tree_view_column_set_fixed_width(handle, width); -} -} +public void setWidth (int width) {
+ checkWidget();
+ int index = parent.indexOf (this);
+ if (index == -1) return;
+ int table = parent.handle;
+ OS.gtk_clist_set_column_width (table, index, width);
+}
+
+}
|