tTidied up Win32 main message loop - now passes control to a class-specific mes… | |
git clone git://src.adamsgaard.dk/vaccinewars | |
Log | |
Files | |
Refs | |
README | |
LICENSE | |
--- | |
commit 78e0d578944ebf15dd90531a4189046a746d4281 | |
parent 3b2b449a26e9406aea4f4336df2252c07bd95c47 | |
Author: Ben Webb <[email protected]> | |
Date: Fri, 1 Mar 2002 13:59:03 +0000 | |
Tidied up Win32 main message loop - now passes control to a class-specific | |
message handler. Split out all GtkCList handling to a separate file. | |
Diffstat: | |
M src/gtkport/Makefile.am | 2 +- | |
M src/gtkport/Makefile.in | 6 +++--- | |
A src/gtkport/clist.c | 734 ++++++++++++++++++++++++++++++ | |
A src/gtkport/clist.h | 103 +++++++++++++++++++++++++++++… | |
M src/gtkport/gtkport.c | 917 +++++------------------------… | |
M src/gtkport/gtkport.h | 90 ++++++-----------------------… | |
6 files changed, 984 insertions(+), 868 deletions(-) | |
--- | |
diff --git a/src/gtkport/Makefile.am b/src/gtkport/Makefile.am | |
t@@ -1,4 +1,4 @@ | |
noinst_LIBRARIES = libgtkport.a | |
-libgtkport_a_SOURCES = gtkport.c gtkport.h | |
+libgtkport_a_SOURCES = gtkport.c gtkport.h clist.c clist.h | |
INCLUDES = -I../../intl -I${srcdir} -I${srcdir}/.. -I../.. @GTK_CFLAGS@ | |
DEFS = @DEFS@ -DLOCALEDIR=\"${localedir}\" | |
diff --git a/src/gtkport/Makefile.in b/src/gtkport/Makefile.in | |
t@@ -94,7 +94,7 @@ WNDRES = @WNDRES@ | |
localedir = @localedir@ | |
noinst_LIBRARIES = libgtkport.a | |
-libgtkport_a_SOURCES = gtkport.c gtkport.h | |
+libgtkport_a_SOURCES = gtkport.c gtkport.h clist.c clist.h | |
INCLUDES = -I../../intl -I${srcdir} -I${srcdir}/.. -I../.. @GTK_CFLAGS@ | |
DEFS = @DEFS@ -DLOCALEDIR=\"${localedir}\" | |
mkinstalldirs = $(SHELL) $(top_srcdir)/mkinstalldirs | |
t@@ -106,7 +106,7 @@ CPPFLAGS = @CPPFLAGS@ | |
LDFLAGS = @LDFLAGS@ | |
LIBS = @LIBS@ | |
libgtkport_a_LIBADD = | |
-libgtkport_a_OBJECTS = gtkport.o | |
+libgtkport_a_OBJECTS = gtkport.o clist.o | |
AR = ar | |
CFLAGS = @CFLAGS@ | |
COMPILE = $(CC) $(DEFS) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(… | |
t@@ -119,7 +119,7 @@ DISTFILES = $(DIST_COMMON) $(SOURCES) $(HEADERS) $(TEXINFO… | |
TAR = gtar | |
GZIP_ENV = --best | |
-DEP_FILES = .deps/gtkport.P | |
+DEP_FILES = .deps/clist.P .deps/gtkport.P | |
SOURCES = $(libgtkport_a_SOURCES) | |
OBJECTS = $(libgtkport_a_OBJECTS) | |
diff --git a/src/gtkport/clist.c b/src/gtkport/clist.c | |
t@@ -0,0 +1,734 @@ | |
+/************************************************************************ | |
+ * clist.c GtkCList implementation for gtkport * | |
+ * Copyright (C) 1998-2002 Ben Webb * | |
+ * Email: [email protected] * | |
+ * WWW: http://dopewars.sourceforge.net/ * | |
+ * * | |
+ * This program 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 * | |
+ * of the License, or (at your option) any later version. * | |
+ * * | |
+ * This program 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 this program; if not, write to the Free Software * | |
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * | |
+ * MA 02111-1307, USA. * | |
+ ************************************************************************/ | |
+ | |
+#ifdef HAVE_CONFIG_H | |
+#include <config.h> | |
+#endif | |
+ | |
+#include "gtkport.h" | |
+ | |
+#ifdef CYGWIN | |
+ | |
+static void gtk_clist_size_request(GtkWidget *widget, | |
+ GtkRequisition *requisition); | |
+static void gtk_clist_set_size(GtkWidget *widget, | |
+ GtkAllocation *allocation); | |
+static gboolean gtk_clist_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam, | |
+ LPARAM lParam); | |
+static void gtk_clist_realize(GtkWidget *widget); | |
+static void gtk_clist_show(GtkWidget *widget); | |
+static void gtk_clist_hide(GtkWidget *widget); | |
+static void gtk_clist_draw_row(GtkCList *clist, LPDRAWITEMSTRUCT lpdis); | |
+static void gtk_clist_update_selection(GtkWidget *widget); | |
+static void gtk_clist_update_widths(GtkCList *clist, gchar *text[]); | |
+static void gtk_clist_update_all_widths(GtkCList *clist); | |
+static void gtk_clist_do_auto_resize(GtkCList *clist); | |
+static void gtk_clist_set_column_width_full(GtkCList *clist, gint column, | |
+ gint width, | |
+ gboolean ResizeHeader); | |
+ | |
+static GtkSignalType GtkCListSignals[] = { | |
+ {"size_request", gtk_marshal_VOID__GPOIN, gtk_clist_size_request}, | |
+ {"set_size", gtk_marshal_VOID__GPOIN, gtk_clist_set_size}, | |
+ {"realize", gtk_marshal_VOID__VOID, gtk_clist_realize}, | |
+ {"click-column", gtk_marshal_VOID__GINT, NULL}, | |
+ {"select_row", gtk_marshal_VOID__GINT_GINT_EVENT, NULL}, | |
+ {"unselect_row", gtk_marshal_VOID__GINT_GINT_EVENT, NULL}, | |
+ {"show", gtk_marshal_VOID__VOID, gtk_clist_show}, | |
+ {"hide", gtk_marshal_VOID__VOID, gtk_clist_hide}, | |
+ {"", NULL, NULL} | |
+}; | |
+ | |
+static GtkClass GtkCListClass = { | |
+ "clist", &GtkContainerClass, sizeof(GtkCList), GtkCListSignals, | |
+ gtk_clist_wndproc | |
+}; | |
+ | |
+gboolean gtk_clist_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam, | |
+ LPARAM lParam) | |
+{ | |
+ LPDRAWITEMSTRUCT lpdis; | |
+ HD_NOTIFY FAR *phdr; | |
+ NMHDR *nmhdr; | |
+ | |
+ switch(msg) { | |
+ case WM_COMMAND: | |
+ if (lParam && HIWORD(wParam) == LBN_SELCHANGE) { | |
+ gtk_clist_update_selection(widget); | |
+ return FALSE; | |
+ } | |
+ break; | |
+ case WM_DRAWITEM: | |
+ lpdis = (LPDRAWITEMSTRUCT)lParam; | |
+ if (lpdis) { | |
+ gtk_clist_draw_row(GTK_CLIST(widget), lpdis); | |
+ return FALSE; | |
+ } | |
+ break; | |
+ case WM_NOTIFY: | |
+ nmhdr = (NMHDR *)lParam; | |
+ phdr = (HD_NOTIFY FAR *)lParam; | |
+ if (nmhdr && nmhdr->code == HDN_ENDTRACK) { | |
+ gtk_clist_set_column_width_full(GTK_CLIST(widget), phdr->iItem, | |
+ phdr->pitem->cxy, FALSE); | |
+ return FALSE; | |
+ } else if (nmhdr && nmhdr->code == HDN_ITEMCLICK) { | |
+ gtk_signal_emit(GTK_OBJECT(widget), "click-column", (gint)phdr->iItem); | |
+ return FALSE; | |
+ } | |
+ break; | |
+ } | |
+ return TRUE; | |
+} | |
+ | |
+void gtk_clist_set_size(GtkWidget *widget, GtkAllocation *allocation) | |
+{ | |
+ GtkCList *clist = GTK_CLIST(widget); | |
+ | |
+ gtk_container_set_size(widget, allocation); | |
+ if (clist->header) { | |
+ SetWindowPos(clist->header, HWND_TOP, | |
+ allocation->x, allocation->y, | |
+ allocation->width, clist->header_size, SWP_NOZORDER); | |
+ allocation->y += clist->header_size - 1; | |
+ allocation->height -= clist->header_size - 1; | |
+ } | |
+} | |
+ | |
+GtkWidget *gtk_clist_new(gint columns) | |
+{ | |
+ GtkCList *clist; | |
+ int i; | |
+ | |
+ clist = GTK_CLIST(GtkNewObject(&GtkCListClass)); | |
+ clist->cols = columns; | |
+ clist->coldata = g_new0(GtkCListColumn, columns); | |
+ clist->rows = 0; | |
+ clist->rowdata = NULL; | |
+ for (i = 0; i < columns; i++) { | |
+ clist->coldata[i].width = 0; | |
+ clist->coldata[i].visible = TRUE; | |
+ clist->coldata[i].resizeable = TRUE; | |
+ } | |
+ | |
+ return GTK_WIDGET(clist); | |
+} | |
+ | |
+void gtk_clist_size_request(GtkWidget *widget, GtkRequisition *requisition) | |
+{ | |
+ SIZE size; | |
+ | |
+ if (GetTextSize(widget->hWnd, "Sample text", &size, defFont)) { | |
+ requisition->width = size.cx; | |
+ requisition->height = size.cy * 6 + 12; | |
+ } | |
+} | |
+ | |
+void gtk_clist_realize(GtkWidget *widget) | |
+{ | |
+ HWND Parent, header; | |
+ HD_LAYOUT hdl; | |
+ HD_ITEM hdi; | |
+ RECT rcParent; | |
+ WINDOWPOS wp; | |
+ GtkCList *clist = GTK_CLIST(widget); | |
+ GSList *rows; | |
+ GtkCListRow *row; | |
+ gint i; | |
+ | |
+ gtk_container_realize(widget); | |
+ Parent = gtk_get_parent_hwnd(widget); | |
+ GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); | |
+ rcParent.left = rcParent.top = 0; | |
+ rcParent.right = rcParent.bottom = 800; | |
+ header = CreateWindowEx(0, WC_HEADER, NULL, | |
+ WS_CHILD | WS_BORDER | HDS_HORZ | |
+ | (GTK_CLIST(widget)->coldata[0].button_passive ? | |
+ 0 : HDS_BUTTONS), | |
+ 0, 0, 0, 0, Parent, NULL, hInst, NULL); | |
+ SetWindowLong(header, GWL_USERDATA, (LONG)widget); | |
+ GTK_CLIST(widget)->header = header; | |
+ gtk_set_default_font(header); | |
+ hdl.prc = &rcParent; | |
+ hdl.pwpos = ℘ | |
+ SendMessage(header, HDM_LAYOUT, 0, (LPARAM)&hdl); | |
+ clist->header_size = wp.cy; | |
+ widget->hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", | |
+ WS_CHILD | WS_TABSTOP | LBS_DISABLENOSCROLL | |
+ | WS_VSCROLL | LBS_OWNERDRAWFIXED | | |
+ LBS_NOTIFY, 0, 0, 0, 0, Parent, NULL, | |
+ hInst, NULL); | |
+ gtk_set_default_font(widget->hWnd); | |
+ | |
+ gtk_clist_update_all_widths(clist); | |
+ for (rows = clist->rowdata; rows; rows = g_slist_next(rows)) { | |
+ row = (GtkCListRow *)rows->data; | |
+ if (row) | |
+ SendMessage(widget->hWnd, LB_ADDSTRING, 0, (LPARAM)row->data); | |
+ } | |
+ | |
+ for (i = 0; i < clist->cols; i++) { | |
+ hdi.mask = HDI_TEXT | HDI_FORMAT | HDI_WIDTH; | |
+ hdi.pszText = clist->coldata[i].title; | |
+ if (hdi.pszText) { | |
+ if (i == clist->cols - 1) | |
+ hdi.cxy = 9000; | |
+ else | |
+ hdi.cxy = clist->coldata[i].width; | |
+ hdi.cchTextMax = strlen(hdi.pszText); | |
+ hdi.fmt = HDF_LEFT | HDF_STRING; | |
+ SendMessage(header, HDM_INSERTITEM, i + 1, (LPARAM)&hdi); | |
+ } | |
+ } | |
+} | |
+ | |
+void gtk_clist_show(GtkWidget *widget) | |
+{ | |
+ if (GTK_WIDGET_REALIZED(widget)) { | |
+ ShowWindow(GTK_CLIST(widget)->header, SW_SHOWNORMAL); | |
+ } | |
+} | |
+ | |
+void gtk_clist_hide(GtkWidget *widget) | |
+{ | |
+ if (GTK_WIDGET_REALIZED(widget)) { | |
+ ShowWindow(GTK_CLIST(widget)->header, SW_HIDE); | |
+ } | |
+} | |
+ | |
+void gtk_clist_draw_row(GtkCList *clist, LPDRAWITEMSTRUCT lpdis) | |
+{ | |
+ HBRUSH bkgrnd; | |
+ COLORREF textcol, oldtextcol; | |
+ RECT rcCol; | |
+ gint i, CurrentX; | |
+ GtkCListRow *row; | |
+ | |
+ if (lpdis->itemState & ODS_SELECTED) { | |
+ bkgrnd = (HBRUSH)(1 + COLOR_HIGHLIGHT); | |
+ textcol = (COLORREF)GetSysColor(COLOR_HIGHLIGHTTEXT); | |
+ } else { | |
+ bkgrnd = (HBRUSH)(1 + COLOR_WINDOW); | |
+ textcol = (COLORREF)GetSysColor(COLOR_WINDOWTEXT); | |
+ } | |
+ oldtextcol = SetTextColor(lpdis->hDC, textcol); | |
+ SetBkMode(lpdis->hDC, TRANSPARENT); | |
+ FillRect(lpdis->hDC, &lpdis->rcItem, bkgrnd); | |
+ | |
+ if (lpdis->itemID >= 0 && lpdis->itemID < clist->rows) { | |
+ row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, lpdis->itemID); | |
+ CurrentX = lpdis->rcItem.left; | |
+ rcCol.top = lpdis->rcItem.top; | |
+ rcCol.bottom = lpdis->rcItem.bottom; | |
+ if (row->text) | |
+ for (i = 0; i < clist->cols; i++) { | |
+ rcCol.left = CurrentX + LISTITEMHPACK; | |
+ CurrentX += clist->coldata[i].width; | |
+ rcCol.right = CurrentX - LISTITEMHPACK; | |
+ if (rcCol.left > lpdis->rcItem.right) | |
+ rcCol.left = lpdis->rcItem.right; | |
+ if (rcCol.right > lpdis->rcItem.right) | |
+ rcCol.right = lpdis->rcItem.right; | |
+ if (i == clist->cols - 1) | |
+ rcCol.right = lpdis->rcItem.right; | |
+ if (row->text[i]) { | |
+ DrawText(lpdis->hDC, row->text[i], -1, &rcCol, | |
+ DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS); | |
+ } | |
+ } | |
+ } | |
+ | |
+ SetTextColor(lpdis->hDC, oldtextcol); | |
+ SetBkMode(lpdis->hDC, OPAQUE); | |
+ if (lpdis->itemState & ODS_FOCUS) | |
+ DrawFocusRect(lpdis->hDC, &lpdis->rcItem); | |
+} | |
+ | |
+void gtk_clist_do_auto_resize(GtkCList *clist) | |
+{ | |
+ gint i; | |
+ | |
+ for (i = 0; i < clist->cols; i++) | |
+ if (clist->coldata[i].auto_resize) { | |
+ gtk_clist_set_column_width(clist, i, clist->coldata[i].width); | |
+ } | |
+} | |
+ | |
+void gtk_clist_update_all_widths(GtkCList *clist) | |
+{ | |
+ GSList *list; | |
+ GtkCListRow *row; | |
+ gint i; | |
+ SIZE size; | |
+ HWND header; | |
+ | |
+ header = clist->header; | |
+ if (header) | |
+ for (i = 0; i < clist->cols; i++) { | |
+ if (GetTextSize(header, clist->coldata[i].title, &size, defFont) && | |
+ clist->coldata[i].width < size.cx + 2 * LISTHEADERPACK) { | |
+ clist->coldata[i].width = size.cx + 2 * LISTHEADERPACK; | |
+ } | |
+ } | |
+ | |
+ for (list = clist->rowdata; list; list = g_slist_next(list)) { | |
+ row = (GtkCListRow *)list->data; | |
+ if (row && row->text) | |
+ gtk_clist_update_widths(clist, row->text); | |
+ } | |
+} | |
+ | |
+void gtk_clist_update_widths(GtkCList *clist, gchar *text[]) | |
+{ | |
+ gint i; | |
+ SIZE size; | |
+ HWND hWnd; | |
+ | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (!hWnd) | |
+ return; | |
+ for (i = 0; i < clist->cols; i++) { | |
+ if (clist->coldata[i].auto_resize | |
+ && GetTextSize(hWnd, text[i], &size, defFont) | |
+ && size.cx + 2 * LISTITEMHPACK > clist->coldata[i].width) { | |
+ clist->coldata[i].width = size.cx + 2 * LISTITEMHPACK; | |
+ } | |
+ } | |
+} | |
+ | |
+gint gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]) | |
+{ | |
+ GtkWidget *widget = GTK_WIDGET(clist); | |
+ HWND hWnd; | |
+ GtkCListRow *new_row; | |
+ gint i; | |
+ | |
+ if (row < 0) | |
+ row = clist->rows; | |
+ | |
+ new_row = g_new0(GtkCListRow, 1); | |
+ new_row->text = g_new0(gchar *, clist->cols); | |
+ | |
+ for (i = 0; i < clist->cols; i++) { | |
+ new_row->text[i] = g_strdup(text[i]); | |
+ } | |
+ gtk_clist_update_widths(clist, new_row->text); | |
+ gtk_clist_do_auto_resize(clist); | |
+ clist->rowdata = g_slist_insert(clist->rowdata, (gpointer)new_row, row); | |
+ clist->rows = g_slist_length(clist->rowdata); | |
+ | |
+ if (GTK_WIDGET_REALIZED(widget)) { | |
+ hWnd = widget->hWnd; | |
+ SendMessage(hWnd, LB_INSERTSTRING, (WPARAM)row, (LPARAM)NULL); | |
+ } | |
+ | |
+ return row; | |
+} | |
+ | |
+gint gtk_clist_set_text(GtkCList *clist, gint row, gint col, gchar *text) | |
+{ | |
+ GtkCListRow *list_row; | |
+ | |
+ if (row < 0 || row >= clist->rows || col < 0 || col >= clist->cols) | |
+ return -1; | |
+ | |
+ list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
+ g_free(list_row->text[col]); | |
+ list_row->text[col] = g_strdup(text); | |
+ | |
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
+ HWND hWnd = GTK_WIDGET(clist)->hWnd; | |
+ | |
+ InvalidateRect(hWnd, NULL, FALSE); | |
+ UpdateWindow(hWnd); | |
+ } | |
+ return row; | |
+} | |
+ | |
+void gtk_clist_remove(GtkCList *clist, gint row) | |
+{ | |
+ if (row >= 0 && row < clist->rows) { | |
+ GSList *dellink; | |
+ GtkCListRow *delrow; | |
+ int i; | |
+ | |
+ gtk_clist_unselect_row(clist, row, 0); | |
+ dellink = g_slist_nth(clist->rowdata, row); | |
+ delrow = (GtkCListRow *)dellink->data; | |
+ for (i = 0; i < clist->cols; i++) { | |
+ g_free(delrow->text[i]); | |
+ } | |
+ g_free(delrow->text); | |
+ clist->rowdata = g_slist_remove_link(clist->rowdata, dellink); | |
+ g_free(dellink); | |
+ | |
+ clist->rows = g_slist_length(clist->rowdata); | |
+ | |
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
+ HWND hWnd = GTK_WIDGET(clist)->hWnd; | |
+ | |
+ SendMessage(hWnd, LB_DELETESTRING, (WPARAM)row, 0); | |
+ } | |
+ } | |
+} | |
+ | |
+GtkWidget *gtk_clist_new_with_titles(gint columns, gchar *titles[]) | |
+{ | |
+ GtkWidget *widget; | |
+ GtkCList *clist; | |
+ gint i; | |
+ | |
+ widget = gtk_clist_new(columns); | |
+ clist = GTK_CLIST(widget); | |
+ for (i = 0; i < clist->cols; i++) { | |
+ gtk_clist_set_column_title(clist, i, titles[i]); | |
+ } | |
+ return widget; | |
+} | |
+ | |
+GtkWidget *gtk_scrolled_clist_new_with_titles(gint columns, | |
+ gchar *titles[], | |
+ GtkWidget **pack_widg) | |
+{ | |
+ GtkWidget *widget; | |
+ | |
+ widget = gtk_clist_new_with_titles(columns, titles); | |
+ *pack_widg = widget; | |
+ return widget; | |
+} | |
+ | |
+gint gtk_clist_append(GtkCList *clist, gchar *text[]) | |
+{ | |
+ return gtk_clist_insert(clist, -1, text); | |
+} | |
+ | |
+void gtk_clist_set_column_title(GtkCList *clist, gint column, | |
+ const gchar *title) | |
+{ | |
+ HWND hWnd; | |
+ | |
+ if (column < 0 || column >= clist->cols) | |
+ return; | |
+ g_free(clist->coldata[column].title); | |
+ clist->coldata[column].title = g_strdup(title); | |
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ InvalidateRect(hWnd, NULL, FALSE); | |
+ UpdateWindow(hWnd); | |
+ } | |
+} | |
+ | |
+void gtk_clist_column_title_passive(GtkCList *clist, gint column) | |
+{ | |
+ if (column >= 0 && column < clist->cols) | |
+ clist->coldata[column].button_passive = TRUE; | |
+} | |
+ | |
+void gtk_clist_column_titles_passive(GtkCList *clist) | |
+{ | |
+ gint i; | |
+ | |
+ for (i = 0; i < clist->cols; i++) { | |
+ gtk_clist_column_title_passive(clist, i); | |
+ } | |
+} | |
+ | |
+void gtk_clist_column_title_active(GtkCList *clist, gint column) | |
+{ | |
+ if (column >= 0 && column < clist->cols) | |
+ clist->coldata[column].button_passive = FALSE; | |
+} | |
+ | |
+void gtk_clist_column_titles_active(GtkCList *clist) | |
+{ | |
+ gint i; | |
+ | |
+ for (i = 0; i < clist->cols; i++) { | |
+ gtk_clist_column_title_active(clist, i); | |
+ } | |
+} | |
+ | |
+void gtk_clist_set_column_width(GtkCList *clist, gint column, gint width) | |
+{ | |
+ gtk_clist_set_column_width_full(clist, column, width, TRUE); | |
+} | |
+ | |
+void gtk_clist_set_column_width_full(GtkCList *clist, gint column, | |
+ gint width, gboolean ResizeHeader) | |
+{ | |
+ HWND hWnd, header; | |
+ HD_ITEM hdi; | |
+ | |
+ if (column < 0 || column >= clist->cols) | |
+ return; | |
+ | |
+ clist->coldata[column].width = width; | |
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
+ header = clist->header; | |
+ if (ResizeHeader && header) { | |
+ hdi.mask = HDI_WIDTH; | |
+ if (column == clist->cols - 1) | |
+ width = 9000; | |
+ hdi.cxy = width; | |
+ if (SendMessage(header, HDM_GETITEM, (WPARAM)column, (LPARAM)&hdi) && | |
+ hdi.cxy != width) { | |
+ hdi.mask = HDI_WIDTH; | |
+ hdi.cxy = width; | |
+ SendMessage(header, HDM_SETITEM, (WPARAM)column, (LPARAM)&hdi); | |
+ } | |
+ } | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (hWnd) | |
+ InvalidateRect(hWnd, NULL, FALSE); | |
+ } | |
+} | |
+ | |
+void gtk_clist_set_selection_mode(GtkCList *clist, GtkSelectionMode mode) | |
+{ | |
+ clist->mode = mode; | |
+} | |
+ | |
+static GtkCList *sorting_clist; | |
+static gint gtk_clist_sort_func(gconstpointer a, gconstpointer b) | |
+{ | |
+ return (*sorting_clist->cmp_func) (sorting_clist, a, b); | |
+} | |
+ | |
+void gtk_clist_sort(GtkCList *clist) | |
+{ | |
+ HWND hWnd; | |
+ gint rowind; | |
+ GList *sel; | |
+ GSList *rowpt; | |
+ | |
+ sorting_clist = clist; | |
+ if (clist && clist->cmp_func && clist->rows) { | |
+ /* Since the order of the list may change, we need to change the | |
+ * selection as well. Do this by converting the row indices into | |
+ * GSList pointers (which are invariant to the sort) and then convert | |
+ * back afterwards */ | |
+ for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
+ rowind = GPOINTER_TO_INT(sel->data); | |
+ sel->data = (gpointer)g_slist_nth(clist->rowdata, rowind); | |
+ } | |
+ clist->rowdata = g_slist_sort(clist->rowdata, gtk_clist_sort_func); | |
+ for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
+ rowpt = (GSList *)(sel->data); | |
+ sel->data = GINT_TO_POINTER(g_slist_position(clist->rowdata, rowpt)); | |
+ } | |
+ if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (clist->mode == GTK_SELECTION_SINGLE) { | |
+ sel = clist->selection; | |
+ if (sel) | |
+ rowind = GPOINTER_TO_INT(sel->data); | |
+ else | |
+ rowind = -1; | |
+ SendMessage(hWnd, LB_SETCURSEL, (WPARAM)rowind, 0); | |
+ } else { | |
+ for (rowind = 0; rowind < clist->rows; rowind++) { | |
+ SendMessage(hWnd, LB_SETSEL, (WPARAM)FALSE, (LPARAM)rowind); | |
+ } | |
+ for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
+ rowind = GPOINTER_TO_INT(sel->data); | |
+ SendMessage(hWnd, LB_SETSEL, (WPARAM)TRUE, (LPARAM)rowind); | |
+ } | |
+ } | |
+ InvalidateRect(hWnd, NULL, FALSE); | |
+ UpdateWindow(hWnd); | |
+ } | |
+ } | |
+} | |
+ | |
+void gtk_clist_freeze(GtkCList *clist) | |
+{ | |
+} | |
+ | |
+void gtk_clist_thaw(GtkCList *clist) | |
+{ | |
+} | |
+ | |
+void gtk_clist_clear(GtkCList *clist) | |
+{ | |
+ GtkCListRow *row; | |
+ GSList *list; | |
+ gint i; | |
+ HWND hWnd; | |
+ | |
+ for (list = clist->rowdata; list; list = g_slist_next(list)) { | |
+ row = (GtkCListRow *)list->data; | |
+ for (i = 0; i < clist->cols; i++) { | |
+ g_free(row->text[i]); | |
+ } | |
+ g_free(row); | |
+ } | |
+ g_slist_free(clist->rowdata); | |
+ clist->rowdata = NULL; | |
+ clist->rows = 0; | |
+ | |
+ gtk_clist_update_all_widths(clist); | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (hWnd) { | |
+ SendMessage(hWnd, LB_RESETCONTENT, 0, 0); | |
+ } | |
+} | |
+ | |
+void gtk_clist_set_row_data(GtkCList *clist, gint row, gpointer data) | |
+{ | |
+ GtkCListRow *list_row; | |
+ | |
+ if (row >= 0 && row < clist->rows) { | |
+ list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
+ if (list_row) | |
+ list_row->data = data; | |
+ } | |
+} | |
+ | |
+gpointer gtk_clist_get_row_data(GtkCList *clist, gint row) | |
+{ | |
+ GtkCListRow *list_row; | |
+ | |
+ if (row >= 0 && row < clist->rows) { | |
+ list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
+ if (list_row) | |
+ return list_row->data; | |
+ } | |
+ return NULL; | |
+} | |
+ | |
+void gtk_clist_set_auto_sort(GtkCList *clist, gboolean auto_sort) | |
+{ | |
+ clist->auto_sort = auto_sort; | |
+} | |
+ | |
+void gtk_clist_columns_autosize(GtkCList *clist) | |
+{ | |
+} | |
+ | |
+void gtk_clist_select_row(GtkCList *clist, gint row, gint column) | |
+{ | |
+ HWND hWnd; | |
+ | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (hWnd) { | |
+ if (clist->mode == GTK_SELECTION_SINGLE) { | |
+ SendMessage(hWnd, LB_SETCURSEL, (WPARAM)row, 0); | |
+ } else { | |
+ SendMessage(hWnd, LB_SETSEL, (WPARAM)TRUE, (LPARAM)row); | |
+ } | |
+ gtk_clist_update_selection(GTK_WIDGET(clist)); | |
+ } | |
+} | |
+ | |
+void gtk_clist_unselect_row(GtkCList *clist, gint row, gint column) | |
+{ | |
+ HWND hWnd; | |
+ | |
+ hWnd = GTK_WIDGET(clist)->hWnd; | |
+ if (hWnd) { | |
+ if (clist->mode == GTK_SELECTION_SINGLE) { | |
+ SendMessage(hWnd, LB_SETCURSEL, (WPARAM)(-1), 0); | |
+ } else { | |
+ SendMessage(hWnd, LB_SETSEL, (WPARAM)FALSE, (LPARAM)row); | |
+ } | |
+ gtk_clist_update_selection(GTK_WIDGET(clist)); | |
+ } | |
+} | |
+ | |
+GtkVisibility gtk_clist_row_is_visible(GtkCList *clist, gint row) | |
+{ | |
+ return GTK_VISIBILITY_FULL; | |
+} | |
+ | |
+void gtk_clist_moveto(GtkCList *clist, gint row, gint column, | |
+ gfloat row_align, gfloat col_align) | |
+{ | |
+} | |
+ | |
+void gtk_clist_set_compare_func(GtkCList *clist, | |
+ GtkCListCompareFunc cmp_func) | |
+{ | |
+ if (clist) | |
+ clist->cmp_func = cmp_func; | |
+} | |
+ | |
+void gtk_clist_set_column_auto_resize(GtkCList *clist, gint column, | |
+ gboolean auto_resize) | |
+{ | |
+ if (clist && column >= 0 && column < clist->cols) { | |
+ clist->coldata[column].auto_resize = auto_resize; | |
+ } | |
+} | |
+ | |
+void gtk_clist_update_selection(GtkWidget *widget) | |
+{ | |
+ GtkCList *clist = GTK_CLIST(widget); | |
+ GList *oldsel, *selpt; | |
+ gint i; | |
+ | |
+ oldsel = clist->selection; | |
+ clist->selection = NULL; | |
+ if (widget->hWnd) { | |
+ for (i = 0; i < clist->rows; i++) { | |
+ if (SendMessage(widget->hWnd, LB_GETSEL, (WPARAM)i, 0) > 0) { | |
+ clist->selection = g_list_append(clist->selection, GINT_TO_POINTER(i)); | |
+ } | |
+ } | |
+ | |
+ for (selpt = oldsel; selpt; selpt = g_list_next(selpt)) { | |
+ gint row = GPOINTER_TO_INT(selpt->data); | |
+ | |
+ if (!g_list_find(clist->selection, GINT_TO_POINTER(row))) { | |
+ gtk_signal_emit(GTK_OBJECT(widget), "unselect_row", row, 0, NULL); | |
+ } | |
+ } | |
+ | |
+ for (selpt = clist->selection; selpt; selpt = g_list_next(selpt)) { | |
+ gint row = GPOINTER_TO_INT(selpt->data); | |
+ | |
+ if (!g_list_find(oldsel, GINT_TO_POINTER(row))) { | |
+ gtk_signal_emit(GTK_OBJECT(widget), "select_row", row, 0, NULL); | |
+ } | |
+ } | |
+ } | |
+ g_list_free(oldsel); | |
+} | |
+ | |
+#else /* for systems with GTK+ */ | |
+ | |
+GtkWidget *gtk_scrolled_clist_new_with_titles(gint columns, | |
+ gchar *titles[], | |
+ GtkWidget **pack_widg) | |
+{ | |
+ GtkWidget *scrollwin, *clist; | |
+ | |
+ clist = gtk_clist_new_with_titles(columns, titles); | |
+ scrollwin = gtk_scrolled_window_new(NULL, NULL); | |
+ gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), | |
+ GTK_POLICY_AUTOMATIC, | |
+ GTK_POLICY_AUTOMATIC); | |
+ gtk_container_add(GTK_CONTAINER(scrollwin), clist); | |
+ *pack_widg = scrollwin; | |
+ return clist; | |
+} | |
+ | |
+#endif | |
diff --git a/src/gtkport/clist.h b/src/gtkport/clist.h | |
t@@ -0,0 +1,103 @@ | |
+/************************************************************************ | |
+ * clist.h GtkCList implementation for gtkport * | |
+ * Copyright (C) 1998-2002 Ben Webb * | |
+ * Email: [email protected] * | |
+ * WWW: http://dopewars.sourceforge.net/ * | |
+ * * | |
+ * This program 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 * | |
+ * of the License, or (at your option) any later version. * | |
+ * * | |
+ * This program 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 this program; if not, write to the Free Software * | |
+ * Foundation, Inc., 59 Temple Place - Suite 330, Boston, * | |
+ * MA 02111-1307, USA. * | |
+ ************************************************************************/ | |
+ | |
+#ifndef __CLIST_H__ | |
+#define __CLIST_H__ | |
+ | |
+#ifdef HAVE_CONFIG_H | |
+#include <config.h> | |
+#endif | |
+ | |
+#ifdef CYGWIN | |
+ | |
+#include <glib.h> | |
+ | |
+typedef struct _GtkCList GtkCList; | |
+typedef struct _GtkCListRow GtkCListRow; | |
+typedef struct _GtkCListColumn GtkCListColumn; | |
+ | |
+typedef gint (*GtkCListCompareFunc) (GtkCList *clist, gconstpointer ptr1, | |
+ gconstpointer ptr2); | |
+ | |
+struct _GtkCListColumn { | |
+ gchar *title; | |
+ gint width; | |
+ guint visible:1; | |
+ guint resizeable:1; | |
+ guint auto_resize:1; | |
+ guint button_passive:1; | |
+}; | |
+ | |
+struct _GtkCListRow { | |
+ gpointer data; | |
+ gchar **text; | |
+}; | |
+ | |
+struct _GtkCList { | |
+ GtkContainer container; | |
+ gint cols, rows; | |
+ HWND header; | |
+ gint16 header_size; | |
+ GSList *rowdata; | |
+ GtkCListColumn *coldata; | |
+ GList *selection; | |
+ GtkSelectionMode mode; | |
+ GtkCListCompareFunc cmp_func; | |
+ gint auto_sort:1; | |
+}; | |
+ | |
+#define GTK_CLIST(obj) ((GtkCList *)(obj)) | |
+ | |
+GtkWidget *gtk_clist_new(gint columns); | |
+GtkWidget *gtk_clist_new_with_titles(gint columns, gchar *titles[]); | |
+gint gtk_clist_append(GtkCList *clist, gchar *text[]); | |
+void gtk_clist_remove(GtkCList *clist, gint row); | |
+void gtk_clist_set_column_title(GtkCList *clist, gint column, | |
+ const gchar *title); | |
+gint gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]); | |
+gint gtk_clist_set_text(GtkCList *clist, gint row, gint col, gchar *text); | |
+void gtk_clist_set_column_width(GtkCList *clist, gint column, gint width); | |
+void gtk_clist_column_title_passive(GtkCList *clist, gint column); | |
+void gtk_clist_column_titles_passive(GtkCList *clist); | |
+void gtk_clist_column_title_active(GtkCList *clist, gint column); | |
+void gtk_clist_column_titles_active(GtkCList *clist); | |
+void gtk_clist_set_selection_mode(GtkCList *clist, GtkSelectionMode mode); | |
+void gtk_clist_sort(GtkCList *clist); | |
+void gtk_clist_freeze(GtkCList *clist); | |
+void gtk_clist_thaw(GtkCList *clist); | |
+void gtk_clist_clear(GtkCList *clist); | |
+void gtk_clist_set_row_data(GtkCList *clist, gint row, gpointer data); | |
+gpointer gtk_clist_get_row_data(GtkCList *clist, gint row); | |
+void gtk_clist_set_auto_sort(GtkCList *clist, gboolean auto_sort); | |
+void gtk_clist_columns_autosize(GtkCList *clist); | |
+void gtk_clist_select_row(GtkCList *clist, gint row, gint column); | |
+void gtk_clist_unselect_row(GtkCList *clist, gint row, gint column); | |
+GtkVisibility gtk_clist_row_is_visible(GtkCList *clist, gint row); | |
+void gtk_clist_moveto(GtkCList *clist, gint row, gint column, | |
+ gfloat row_align, gfloat col_align); | |
+void gtk_clist_set_compare_func(GtkCList *clist, | |
+ GtkCListCompareFunc cmp_func); | |
+void gtk_clist_set_column_auto_resize(GtkCList *clist, gint column, | |
+ gboolean auto_resize); | |
+#endif /* CYGWIN */ | |
+ | |
+#endif | |
diff --git a/src/gtkport/gtkport.c b/src/gtkport/gtkport.c | |
t@@ -83,8 +83,6 @@ static void gtk_radio_button_toggled(GtkRadioButton *radio_b… | |
static void gtk_container_destroy(GtkWidget *widget); | |
static void gtk_container_size_request(GtkWidget *widget, | |
GtkRequisition *requisition); | |
-static void gtk_container_set_size(GtkWidget *widget, | |
- GtkAllocation *allocation); | |
static void gtk_container_show_all(GtkWidget *widget, gboolean hWndOnly); | |
static void gtk_window_size_request(GtkWidget *widget, | |
GtkRequisition *requisition); | |
t@@ -93,6 +91,8 @@ static void gtk_window_set_size(GtkWidget *widget, | |
static void gtk_window_destroy(GtkWidget *widget); | |
static void gtk_window_set_menu(GtkWindow *window, GtkMenuBar *menu_bar); | |
static GtkWidget *gtk_window_get_menu_ID(GtkWindow *window, gint ID); | |
+static gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam, | |
+ LPARAM lParam); | |
static void gtk_table_destroy(GtkWidget *widget); | |
static void gtk_table_size_request(GtkWidget *widget, | |
GtkRequisition *requisition); | |
t@@ -138,14 +138,6 @@ static void gtk_frame_set_size(GtkWidget *widget, | |
GtkAllocation *allocation); | |
static void gtk_frame_destroy(GtkWidget *widget); | |
static void gtk_frame_realize(GtkWidget *widget); | |
-static void gtk_clist_size_request(GtkWidget *widget, | |
- GtkRequisition *requisition); | |
-static void gtk_clist_set_size(GtkWidget *widget, | |
- GtkAllocation *allocation); | |
-static void gtk_clist_realize(GtkWidget *widget); | |
-static void gtk_clist_show(GtkWidget *widget); | |
-static void gtk_clist_hide(GtkWidget *widget); | |
-static void gtk_clist_draw_row(GtkCList *clist, LPDRAWITEMSTRUCT lpdis); | |
static void gtk_box_show_all(GtkWidget *widget, gboolean hWndOnly); | |
static void gtk_table_show_all(GtkWidget *widget, gboolean hWndOnly); | |
static void gtk_widget_show_all_full(GtkWidget *widget, gboolean hWndOnly); | |
t@@ -224,17 +216,10 @@ static void gtk_option_menu_size_request(GtkWidget *widg… | |
static void gtk_option_menu_set_size(GtkWidget *widget, | |
GtkAllocation *allocation); | |
static void gtk_option_menu_realize(GtkWidget *widget); | |
-static void gtk_clist_update_selection(GtkWidget *widget); | |
static void gtk_button_set_text(GtkButton *button, gchar *text); | |
static void gtk_menu_item_set_text(GtkMenuItem *menuitem, gchar *text); | |
static void gtk_editable_create(GtkWidget *widget); | |
static void gtk_option_menu_update_selection(GtkWidget *widget); | |
-static void gtk_clist_update_widths(GtkCList *clist, gchar *text[]); | |
-static void gtk_clist_update_all_widths(GtkCList *clist); | |
-static void gtk_clist_do_auto_resize(GtkCList *clist); | |
-static void gtk_clist_set_column_width_full(GtkCList *clist, gint column, | |
- gint width, | |
- gboolean ResizeHeader); | |
static void gtk_widget_set_focus(GtkWidget *widget); | |
static void gtk_widget_lose_focus(GtkWidget *widget); | |
static void gtk_window_update_focus(GtkWindow *window); | |
t@@ -287,15 +272,15 @@ static GtkSignalType GtkObjectSignals[] = { | |
}; | |
static GtkClass GtkObjectClass = { | |
- "object", NULL, sizeof(GtkObject), GtkObjectSignals | |
+ "object", NULL, sizeof(GtkObject), GtkObjectSignals, NULL | |
}; | |
static GtkClass GtkAdjustmentClass = { | |
- "adjustment", &GtkObjectClass, sizeof(GtkAdjustment), NULL | |
+ "adjustment", &GtkObjectClass, sizeof(GtkAdjustment), NULL, NULL | |
}; | |
static GtkClass GtkItemFactoryClass = { | |
- "itemfactory", &GtkObjectClass, sizeof(GtkItemFactory), NULL | |
+ "itemfactory", &GtkObjectClass, sizeof(GtkItemFactory), NULL, NULL | |
}; | |
static GtkSignalType GtkWidgetSignals[] = { | |
t@@ -314,7 +299,7 @@ static GtkSignalType GtkWidgetSignals[] = { | |
}; | |
static GtkClass GtkWidgetClass = { | |
- "widget", &GtkObjectClass, sizeof(GtkWidget), GtkWidgetSignals | |
+ "widget", &GtkObjectClass, sizeof(GtkWidget), GtkWidgetSignals, NULL | |
}; | |
static GtkSignalType GtkSeparatorSignals[] = { | |
t@@ -324,7 +309,7 @@ static GtkSignalType GtkSeparatorSignals[] = { | |
}; | |
static GtkClass GtkMiscClass = { | |
- "misc", &GtkWidgetClass, sizeof(GtkMisc), NULL | |
+ "misc", &GtkWidgetClass, sizeof(GtkMisc), NULL, NULL | |
}; | |
static GtkSignalType GtkProgressBarSignals[] = { | |
t@@ -335,23 +320,23 @@ static GtkSignalType GtkProgressBarSignals[] = { | |
static GtkClass GtkProgressBarClass = { | |
"progressbar", &GtkWidgetClass, sizeof(GtkProgressBar), | |
- GtkProgressBarSignals | |
+ GtkProgressBarSignals, NULL | |
}; | |
static GtkClass GtkSeparatorClass = { | |
- "separator", &GtkWidgetClass, sizeof(GtkSeparator), GtkSeparatorSignals | |
+ "separator", &GtkWidgetClass, sizeof(GtkSeparator), GtkSeparatorSignals, NULL | |
}; | |
static GtkClass GtkHSeparatorClass = { | |
- "hseparator", &GtkSeparatorClass, sizeof(GtkHSeparator), NULL | |
+ "hseparator", &GtkSeparatorClass, sizeof(GtkHSeparator), NULL, NULL | |
}; | |
static GtkClass GtkVSeparatorClass = { | |
- "vseparator", &GtkSeparatorClass, sizeof(GtkVSeparator), NULL | |
+ "vseparator", &GtkSeparatorClass, sizeof(GtkVSeparator), NULL, NULL | |
}; | |
static GtkClass GtkMenuShellClass = { | |
- "menushell", &GtkWidgetClass, sizeof(GtkMenuShell), NULL | |
+ "menushell", &GtkWidgetClass, sizeof(GtkMenuShell), NULL, NULL | |
}; | |
static GtkSignalType GtkMenuBarSignals[] = { | |
t@@ -360,7 +345,7 @@ static GtkSignalType GtkMenuBarSignals[] = { | |
}; | |
static GtkClass GtkMenuBarClass = { | |
- "menubar", &GtkMenuShellClass, sizeof(GtkMenuBar), GtkMenuBarSignals | |
+ "menubar", &GtkMenuShellClass, sizeof(GtkMenuBar), GtkMenuBarSignals, NULL | |
}; | |
static GtkSignalType GtkMenuItemSignals[] = { | |
t@@ -373,7 +358,7 @@ static GtkSignalType GtkMenuItemSignals[] = { | |
}; | |
static GtkClass GtkMenuItemClass = { | |
- "menuitem", &GtkWidgetClass, sizeof(GtkMenuItem), GtkMenuItemSignals | |
+ "menuitem", &GtkWidgetClass, sizeof(GtkMenuItem), GtkMenuItemSignals, NULL | |
}; | |
static GtkSignalType GtkMenuSignals[] = { | |
t@@ -382,7 +367,7 @@ static GtkSignalType GtkMenuSignals[] = { | |
}; | |
static GtkClass GtkMenuClass = { | |
- "menu", &GtkMenuShellClass, sizeof(GtkMenu), GtkMenuSignals | |
+ "menu", &GtkMenuShellClass, sizeof(GtkMenu), GtkMenuSignals, NULL | |
}; | |
static GtkSignalType GtkEditableSignals[] = { | |
t@@ -392,7 +377,7 @@ static GtkSignalType GtkEditableSignals[] = { | |
}; | |
static GtkClass GtkEditableClass = { | |
- "editable", &GtkWidgetClass, sizeof(GtkEditable), GtkEditableSignals | |
+ "editable", &GtkWidgetClass, sizeof(GtkEditable), GtkEditableSignals, NULL | |
}; | |
static GtkSignalType GtkEntrySignals[] = { | |
t@@ -403,7 +388,7 @@ static GtkSignalType GtkEntrySignals[] = { | |
}; | |
static GtkClass GtkEntryClass = { | |
- "entry", &GtkEditableClass, sizeof(GtkEntry), GtkEntrySignals | |
+ "entry", &GtkEditableClass, sizeof(GtkEntry), GtkEntrySignals, NULL | |
}; | |
static GtkSignalType GtkSpinButtonSignals[] = { | |
t@@ -417,7 +402,8 @@ static GtkSignalType GtkSpinButtonSignals[] = { | |
}; | |
static GtkClass GtkSpinButtonClass = { | |
- "spinbutton", &GtkEntryClass, sizeof(GtkSpinButton), GtkSpinButtonSignals | |
+ "spinbutton", &GtkEntryClass, sizeof(GtkSpinButton), | |
+ GtkSpinButtonSignals, NULL | |
}; | |
static GtkSignalType GtkTextSignals[] = { | |
t@@ -427,7 +413,7 @@ static GtkSignalType GtkTextSignals[] = { | |
}; | |
static GtkClass GtkTextClass = { | |
- "text", &GtkEditableClass, sizeof(GtkText), GtkTextSignals | |
+ "text", &GtkEditableClass, sizeof(GtkText), GtkTextSignals, NULL | |
}; | |
static GtkSignalType GtkLabelSignals[] = { | |
t@@ -440,7 +426,7 @@ static GtkSignalType GtkLabelSignals[] = { | |
}; | |
static GtkClass GtkLabelClass = { | |
- "label", &GtkWidgetClass, sizeof(GtkLabel), GtkLabelSignals | |
+ "label", &GtkWidgetClass, sizeof(GtkLabel), GtkLabelSignals, NULL | |
}; | |
static GtkSignalType GtkUrlSignals[] = { | |
t@@ -452,7 +438,7 @@ static GtkSignalType GtkUrlSignals[] = { | |
}; | |
static GtkClass GtkUrlClass = { | |
- "URL", &GtkLabelClass, sizeof(GtkUrl), GtkUrlSignals | |
+ "URL", &GtkLabelClass, sizeof(GtkUrl), GtkUrlSignals, NULL | |
}; | |
static GtkSignalType GtkButtonSignals[] = { | |
t@@ -465,7 +451,7 @@ static GtkSignalType GtkButtonSignals[] = { | |
}; | |
static GtkClass GtkButtonClass = { | |
- "button", &GtkWidgetClass, sizeof(GtkButton), GtkButtonSignals | |
+ "button", &GtkWidgetClass, sizeof(GtkButton), GtkButtonSignals, NULL | |
}; | |
static GtkSignalType GtkOptionMenuSignals[] = { | |
t@@ -477,7 +463,7 @@ static GtkSignalType GtkOptionMenuSignals[] = { | |
static GtkClass GtkOptionMenuClass = { | |
"optionmenu", &GtkButtonClass, sizeof(GtkOptionMenu), | |
- GtkOptionMenuSignals | |
+ GtkOptionMenuSignals, NULL | |
}; | |
static GtkSignalType GtkToggleButtonSignals[] = { | |
t@@ -487,7 +473,7 @@ static GtkSignalType GtkToggleButtonSignals[] = { | |
static GtkClass GtkToggleButtonClass = { | |
"toggle", &GtkButtonClass, sizeof(GtkToggleButton), | |
- GtkToggleButtonSignals | |
+ GtkToggleButtonSignals, NULL | |
}; | |
static GtkSignalType GtkCheckButtonSignals[] = { | |
t@@ -498,7 +484,7 @@ static GtkSignalType GtkCheckButtonSignals[] = { | |
static GtkClass GtkCheckButtonClass = { | |
"check", &GtkToggleButtonClass, sizeof(GtkCheckButton), | |
- GtkCheckButtonSignals | |
+ GtkCheckButtonSignals, NULL | |
}; | |
static GtkSignalType GtkRadioButtonSignals[] = { | |
t@@ -509,7 +495,7 @@ static GtkSignalType GtkRadioButtonSignals[] = { | |
static GtkClass GtkRadioButtonClass = { | |
"radio", &GtkCheckButtonClass, sizeof(GtkRadioButton), | |
- GtkRadioButtonSignals | |
+ GtkRadioButtonSignals, NULL | |
}; | |
static GtkSignalType GtkContainerSignals[] = { | |
t@@ -523,7 +509,7 @@ static GtkSignalType GtkContainerSignals[] = { | |
}; | |
static GtkClass GtkContainerClass = { | |
- "container", &GtkWidgetClass, sizeof(GtkContainer), GtkContainerSignals | |
+ "container", &GtkWidgetClass, sizeof(GtkContainer), GtkContainerSignals, NULL | |
}; | |
static GtkSignalType GtkPanedSignals[] = { | |
t@@ -533,7 +519,7 @@ static GtkSignalType GtkPanedSignals[] = { | |
}; | |
static GtkClass GtkPanedClass = { | |
- "paned", &GtkContainerClass, sizeof(GtkPaned), GtkPanedSignals | |
+ "paned", &GtkContainerClass, sizeof(GtkPaned), GtkPanedSignals, NULL | |
}; | |
static GtkSignalType GtkVPanedSignals[] = { | |
t@@ -544,7 +530,7 @@ static GtkSignalType GtkVPanedSignals[] = { | |
}; | |
static GtkClass GtkVPanedClass = { | |
- "vpaned", &GtkPanedClass, sizeof(GtkVPaned), GtkVPanedSignals | |
+ "vpaned", &GtkPanedClass, sizeof(GtkVPaned), GtkVPanedSignals, NULL | |
}; | |
static GtkSignalType GtkHPanedSignals[] = { | |
t@@ -555,7 +541,7 @@ static GtkSignalType GtkHPanedSignals[] = { | |
}; | |
static GtkClass GtkHPanedClass = { | |
- "hpaned", &GtkPanedClass, sizeof(GtkHPaned), GtkHPanedSignals | |
+ "hpaned", &GtkPanedClass, sizeof(GtkHPaned), GtkHPanedSignals, NULL | |
}; | |
static GtkSignalType GtkBoxSignals[] = { | |
t@@ -567,7 +553,7 @@ static GtkSignalType GtkBoxSignals[] = { | |
}; | |
static GtkClass GtkBoxClass = { | |
- "box", &GtkContainerClass, sizeof(GtkBox), GtkBoxSignals | |
+ "box", &GtkContainerClass, sizeof(GtkBox), GtkBoxSignals, NULL | |
}; | |
static GtkSignalType GtkNotebookSignals[] = { | |
t@@ -581,7 +567,7 @@ static GtkSignalType GtkNotebookSignals[] = { | |
}; | |
static GtkClass GtkNotebookClass = { | |
- "notebook", &GtkContainerClass, sizeof(GtkNotebook), GtkNotebookSignals | |
+ "notebook", &GtkContainerClass, sizeof(GtkNotebook), GtkNotebookSignals, NULL | |
}; | |
static GtkSignalType GtkTableSignals[] = { | |
t@@ -595,23 +581,7 @@ static GtkSignalType GtkTableSignals[] = { | |
}; | |
static GtkClass GtkTableClass = { | |
- "table", &GtkContainerClass, sizeof(GtkTable), GtkTableSignals | |
-}; | |
- | |
-static GtkSignalType GtkCListSignals[] = { | |
- {"size_request", gtk_marshal_VOID__GPOIN, gtk_clist_size_request}, | |
- {"set_size", gtk_marshal_VOID__GPOIN, gtk_clist_set_size}, | |
- {"realize", gtk_marshal_VOID__VOID, gtk_clist_realize}, | |
- {"click-column", gtk_marshal_VOID__GINT, NULL}, | |
- {"select_row", gtk_marshal_VOID__GINT_GINT_EVENT, NULL}, | |
- {"unselect_row", gtk_marshal_VOID__GINT_GINT_EVENT, NULL}, | |
- {"show", gtk_marshal_VOID__VOID, gtk_clist_show}, | |
- {"hide", gtk_marshal_VOID__VOID, gtk_clist_hide}, | |
- {"", NULL, NULL} | |
-}; | |
- | |
-static GtkClass GtkCListClass = { | |
- "clist", &GtkContainerClass, sizeof(GtkCList), GtkCListSignals | |
+ "table", &GtkContainerClass, sizeof(GtkTable), GtkTableSignals, NULL | |
}; | |
static GtkSignalType GtkHBoxSignals[] = { | |
t@@ -621,7 +591,7 @@ static GtkSignalType GtkHBoxSignals[] = { | |
}; | |
static GtkClass GtkHBoxClass = { | |
- "hbox", &GtkBoxClass, sizeof(GtkHBox), GtkHBoxSignals | |
+ "hbox", &GtkBoxClass, sizeof(GtkHBox), GtkHBoxSignals, NULL | |
}; | |
static GtkSignalType GtkVBoxSignals[] = { | |
t@@ -631,11 +601,11 @@ static GtkSignalType GtkVBoxSignals[] = { | |
}; | |
static GtkClass GtkVBoxClass = { | |
- "vbox", &GtkBoxClass, sizeof(GtkVBox), GtkVBoxSignals | |
+ "vbox", &GtkBoxClass, sizeof(GtkVBox), GtkVBoxSignals, NULL | |
}; | |
static GtkClass GtkBinClass = { | |
- "bin", &GtkContainerClass, sizeof(GtkBin), NULL | |
+ "bin", &GtkContainerClass, sizeof(GtkBin), NULL, NULL | |
}; | |
static GtkSignalType GtkFrameSignals[] = { | |
t@@ -647,7 +617,7 @@ static GtkSignalType GtkFrameSignals[] = { | |
}; | |
static GtkClass GtkFrameClass = { | |
- "frame", &GtkBinClass, sizeof(GtkFrame), GtkFrameSignals | |
+ "frame", &GtkBinClass, sizeof(GtkFrame), GtkFrameSignals, NULL | |
}; | |
static GtkSignalType GtkWindowSignals[] = { | |
t@@ -663,7 +633,8 @@ static GtkSignalType GtkWindowSignals[] = { | |
}; | |
static GtkClass GtkWindowClass = { | |
- "window", &GtkBinClass, sizeof(GtkWindow), GtkWindowSignals | |
+ "window", &GtkBinClass, sizeof(GtkWindow), GtkWindowSignals, | |
+ gtk_window_wndproc | |
}; | |
const GtkType GTK_TYPE_WINDOW = &GtkWindowClass; | |
t@@ -942,102 +913,87 @@ LRESULT CALLBACK GtkSepProc(HWND hwnd, UINT msg, UINT w… | |
return DefWindowProc(hwnd, msg, wParam, lParam); | |
} | |
-LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam) | |
+gboolean gtk_window_wndproc(GtkWidget *widget, UINT msg, WPARAM wParam, | |
+ LPARAM lParam) | |
{ | |
- GtkWidget *window, *widget; | |
- GtkClass *klass; | |
RECT rect; | |
GtkAllocation alloc; | |
+ GtkWidget *menu; | |
gboolean signal_return; | |
GdkEvent event = 0; | |
- LPMEASUREITEMSTRUCT lpmis; | |
- HDC hDC; | |
- TEXTMETRIC tm; | |
- LPDRAWITEMSTRUCT lpdis; | |
- HD_NOTIFY FAR *phdr; | |
- NMHDR *nmhdr; | |
- | |
- if (customWndProc | |
- && CallWindowProc(customWndProc, hwnd, msg, wParam, lParam)) | |
- return TRUE; | |
- switch (msg) { | |
+ switch(msg) { | |
case WM_SIZE: | |
- window = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); | |
- GetWindowRect(hwnd, &rect); | |
+ GetWindowRect(widget->hWnd, &rect); | |
alloc.x = rect.left; | |
alloc.y = rect.top; | |
alloc.width = rect.right - rect.left; | |
alloc.height = rect.bottom - rect.top; | |
- gtk_window_handle_user_size(GTK_WINDOW(window), &alloc); | |
- gtk_widget_set_size(window, &alloc); | |
- break; | |
+ gtk_window_handle_user_size(GTK_WINDOW(widget), &alloc); | |
+ gtk_widget_set_size(widget, &alloc); | |
+ return FALSE; | |
case WM_GETMINMAXINFO: | |
- widget = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); | |
- if (widget) | |
- klass = GTK_OBJECT(widget)->klass; | |
- else | |
- klass = NULL; | |
- if (klass == &GtkWindowClass) { | |
- gtk_window_handle_minmax_size(GTK_WINDOW(widget), | |
- (LPMINMAXINFO)lParam); | |
- } | |
- break; | |
+ gtk_window_handle_minmax_size(GTK_WINDOW(widget), (LPMINMAXINFO)lParam); | |
+ return FALSE; | |
case WM_ACTIVATE: | |
case WM_ACTIVATEAPP: | |
- widget = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); | |
- if (widget) | |
- klass = GTK_OBJECT(widget)->klass; | |
- else | |
- klass = NULL; | |
- if (klass == &GtkWindowClass) { | |
- if ((msg == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE) | |
- || (msg == WM_ACTIVATEAPP && wParam)) { | |
- if (GTK_WINDOW(widget)->focus) { | |
- gtk_widget_set_focus(GTK_WINDOW(widget)->focus); | |
- } | |
- if (!GTK_WINDOW(widget)->focus) { | |
- gtk_window_set_focus(GTK_WINDOW(widget)); | |
- } | |
- } else if (msg == WM_ACTIVATE && LOWORD(wParam) == WA_INACTIVE) { | |
- gtk_window_update_focus(GTK_WINDOW(widget)); | |
+ if ((msg == WM_ACTIVATE && LOWORD(wParam) != WA_INACTIVE) | |
+ || (msg == WM_ACTIVATEAPP && wParam)) { | |
+ if (GTK_WINDOW(widget)->focus) { | |
+ gtk_widget_set_focus(GTK_WINDOW(widget)->focus); | |
+ } | |
+ if (!GTK_WINDOW(widget)->focus) { | |
+ gtk_window_set_focus(GTK_WINDOW(widget)); | |
} | |
+ } else if (msg == WM_ACTIVATE && LOWORD(wParam) == WA_INACTIVE) { | |
+ gtk_window_update_focus(GTK_WINDOW(widget)); | |
} | |
- break; | |
+ return FALSE; | |
+ case WM_CLOSE: | |
+ gtk_signal_emit(GTK_OBJECT(widget), "delete_event", | |
+ &event, &signal_return); | |
+ return FALSE; | |
case WM_COMMAND: | |
- widget = GTK_WIDGET(GetWindowLong((HWND)lParam, GWL_USERDATA)); | |
- if (widget) | |
- klass = GTK_OBJECT(widget)->klass; | |
- else | |
- klass = NULL; | |
- | |
- if (lParam && klass == &GtkCListClass | |
- && HIWORD(wParam) == LBN_SELCHANGE) { | |
- gtk_clist_update_selection(widget); | |
- } else if (lParam && klass == &GtkOptionMenuClass && | |
- HIWORD(wParam) == CBN_SELENDOK) { | |
- gtk_option_menu_update_selection(widget); | |
- } else if (lParam && HIWORD(wParam) == BN_CLICKED) { | |
- gtk_signal_emit(GTK_OBJECT(widget), "clicked"); | |
- } else if (HIWORD(wParam) == 0 || HIWORD(wParam) == 1) { | |
- window = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); | |
- widget = gtk_window_get_menu_ID(GTK_WINDOW(window), LOWORD(wParam)); | |
- if (widget) | |
- gtk_signal_emit(GTK_OBJECT(widget), "activate"); | |
- } else | |
- return TRUE; | |
+ if (HIWORD(wParam) == 0 || HIWORD(wParam) == 1) { | |
+ menu = gtk_window_get_menu_ID(GTK_WINDOW(widget), LOWORD(wParam)); | |
+ if (menu) { | |
+ gtk_signal_emit(GTK_OBJECT(menu), "activate"); | |
+ return FALSE; | |
+ } | |
+ } | |
break; | |
- case WM_CLOSE: | |
- gtk_signal_emit(GTK_OBJECT(GetWindowLong(hwnd, GWL_USERDATA)), | |
- "delete_event", &event, &signal_return); | |
+ } | |
+ return TRUE; | |
+} | |
+ | |
+LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, UINT wParam, LONG lParam) | |
+{ | |
+ GtkWidget *widget; | |
+ GtkClass *klass; | |
+ LPMEASUREITEMSTRUCT lpmis; | |
+ HDC hDC; | |
+ TEXTMETRIC tm; | |
+ LPDRAWITEMSTRUCT lpdis; | |
+ HD_NOTIFY FAR *phdr; | |
+ NMHDR *nmhdr; | |
+ | |
+ if (customWndProc | |
+ && CallWindowProc(customWndProc, hwnd, msg, wParam, lParam)) | |
return TRUE; | |
- break; | |
+ | |
+ widget = GTK_WIDGET(GetWindowLong(hwnd, GWL_USERDATA)); | |
+ if (widget && (klass = GTK_OBJECT(widget)->klass) | |
+ && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) { | |
+ return FALSE; | |
+ } | |
+ | |
+ switch (msg) { | |
case WM_DRAWITEM: | |
- lpdis = (LPDRAWITEMSTRUCT) lParam; | |
- if (lpdis) { | |
- gtk_clist_draw_row(GTK_CLIST(GetWindowLong(lpdis->hwndItem, | |
- GWL_USERDATA)), lpdis); | |
- return TRUE; | |
+ if ((lpdis = (LPDRAWITEMSTRUCT)lParam) | |
+ && (widget = GTK_WIDGET(GetWindowLong(lpdis->hwndItem, GWL_USERDATA))) | |
+ && (klass = GTK_OBJECT(widget)->klass) | |
+ && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) { | |
+ return FALSE; | |
} | |
break; | |
case WM_MEASUREITEM: | |
t@@ -1051,26 +1007,36 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, UINT… | |
return TRUE; | |
} | |
break; | |
+ case WM_COMMAND: | |
+ widget = GTK_WIDGET(GetWindowLong((HWND)lParam, GWL_USERDATA)); | |
+ klass = NULL; | |
+ if (widget && (klass = GTK_OBJECT(widget)->klass) | |
+ && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) { | |
+ return FALSE; | |
+ } | |
+ | |
+ if (lParam && klass == &GtkOptionMenuClass && | |
+ HIWORD(wParam) == CBN_SELENDOK) { | |
+ gtk_option_menu_update_selection(widget); | |
+ } else if (lParam && HIWORD(wParam) == BN_CLICKED) { | |
+ gtk_signal_emit(GTK_OBJECT(widget), "clicked"); | |
+ } else | |
+ return TRUE; | |
+ break; | |
case WM_NOTIFY: | |
phdr = (HD_NOTIFY FAR *)lParam; | |
nmhdr = (NMHDR *)lParam; | |
if (!nmhdr) | |
break; | |
- if (nmhdr->code == HDN_ENDTRACK) { | |
- gtk_clist_set_column_width_full(GTK_CLIST | |
- (GetWindowLong | |
- (nmhdr->hwndFrom, GWL_USERDATA)), | |
- phdr->iItem, phdr->pitem->cxy, | |
- FALSE); | |
- return FALSE; | |
- } else if (nmhdr->code == HDN_ITEMCLICK) { | |
- gtk_signal_emit(GTK_OBJECT | |
- (GetWindowLong(nmhdr->hwndFrom, GWL_USERDATA)), | |
- "click-column", (gint)phdr->iItem); | |
+ | |
+ widget = GTK_WIDGET(GetWindowLong(nmhdr->hwndFrom, GWL_USERDATA)); | |
+ if (widget && (klass = GTK_OBJECT(widget)->klass) | |
+ && klass->wndproc && !klass->wndproc(widget, msg, wParam, lParam)) { | |
return FALSE; | |
- } else if (nmhdr->code == TCN_SELCHANGE) { | |
- gtk_notebook_set_page(GTK_NOTEBOOK | |
- (GetWindowLong(nmhdr->hwndFrom, GWL_USERDATA)), | |
+ } | |
+ | |
+ if (widget && nmhdr->code == TCN_SELCHANGE) { | |
+ gtk_notebook_set_page(GTK_NOTEBOOK(widget), | |
TabCtrl_GetCurSel(nmhdr->hwndFrom)); | |
return FALSE; | |
} | |
t@@ -1079,8 +1045,7 @@ LRESULT CALLBACK MainWndProc(HWND hwnd, UINT msg, UINT w… | |
/* Ignore network messages if in recursive message loops, to avoid | |
* dodgy race conditions */ | |
if (RecurseLevel <= 1) { | |
- /* Make any error available by the usual WSAGetLastError() mechanism | |
- */ | |
+ /* Make any error available by the usual WSAGetLastError() mechanism */ | |
WSASetLastError(WSAGETSELECTERROR(lParam)); | |
DispatchSocketEvent((SOCKET)wParam, WSAGETSELECTEVENT(lParam)); | |
} | |
t@@ -1886,25 +1851,6 @@ GtkWidget *gtk_entry_new() | |
return GTK_WIDGET(entry); | |
} | |
-GtkWidget *gtk_clist_new(gint columns) | |
-{ | |
- GtkCList *clist; | |
- int i; | |
- | |
- clist = GTK_CLIST(GtkNewObject(&GtkCListClass)); | |
- clist->cols = columns; | |
- clist->coldata = g_new0(GtkCListColumn, columns); | |
- clist->rows = 0; | |
- clist->rowdata = NULL; | |
- for (i = 0; i < columns; i++) { | |
- clist->coldata[i].width = 0; | |
- clist->coldata[i].visible = TRUE; | |
- clist->coldata[i].resizeable = TRUE; | |
- } | |
- | |
- return GTK_WIDGET(clist); | |
-} | |
- | |
GSList *gtk_radio_button_group(GtkRadioButton *radio_button) | |
{ | |
return radio_button->group; | |
t@@ -2550,395 +2496,6 @@ void gtk_radio_button_destroy(GtkWidget *widget) | |
} | |
} | |
- | |
-void gtk_clist_size_request(GtkWidget *widget, GtkRequisition *requisition) | |
-{ | |
- SIZE size; | |
- | |
- if (GetTextSize(widget->hWnd, "Sample text", &size, defFont)) { | |
- requisition->width = size.cx; | |
- requisition->height = size.cy * 6 + 12; | |
- } | |
-} | |
- | |
-void gtk_clist_set_size(GtkWidget *widget, GtkAllocation *allocation) | |
-{ | |
- GtkCList *clist = GTK_CLIST(widget); | |
- | |
- gtk_container_set_size(widget, allocation); | |
- if (clist->header) { | |
- SetWindowPos(clist->header, HWND_TOP, | |
- allocation->x, allocation->y, | |
- allocation->width, clist->header_size, SWP_NOZORDER); | |
- allocation->y += clist->header_size - 1; | |
- allocation->height -= clist->header_size - 1; | |
- } | |
-} | |
- | |
-void gtk_clist_realize(GtkWidget *widget) | |
-{ | |
- HWND Parent, header; | |
- HD_LAYOUT hdl; | |
- HD_ITEM hdi; | |
- RECT rcParent; | |
- WINDOWPOS wp; | |
- GtkCList *clist = GTK_CLIST(widget); | |
- GSList *rows; | |
- GtkCListRow *row; | |
- gint i; | |
- | |
- gtk_container_realize(widget); | |
- Parent = gtk_get_parent_hwnd(widget); | |
- GTK_WIDGET_SET_FLAGS(widget, GTK_CAN_FOCUS); | |
- rcParent.left = rcParent.top = 0; | |
- rcParent.right = rcParent.bottom = 800; | |
- header = CreateWindowEx(0, WC_HEADER, NULL, | |
- WS_CHILD | WS_BORDER | HDS_HORZ | |
- | (GTK_CLIST(widget)->coldata[0].button_passive ? | |
- 0 : HDS_BUTTONS), | |
- 0, 0, 0, 0, Parent, NULL, hInst, NULL); | |
- SetWindowLong(header, GWL_USERDATA, (LONG)widget); | |
- GTK_CLIST(widget)->header = header; | |
- gtk_set_default_font(header); | |
- hdl.prc = &rcParent; | |
- hdl.pwpos = ℘ | |
- SendMessage(header, HDM_LAYOUT, 0, (LPARAM)&hdl); | |
- clist->header_size = wp.cy; | |
- widget->hWnd = CreateWindowEx(WS_EX_CLIENTEDGE, "LISTBOX", "", | |
- WS_CHILD | WS_TABSTOP | LBS_DISABLENOSCROLL | |
- | WS_VSCROLL | LBS_OWNERDRAWFIXED | | |
- LBS_NOTIFY, 0, 0, 0, 0, Parent, NULL, | |
- hInst, NULL); | |
- gtk_set_default_font(widget->hWnd); | |
- | |
- gtk_clist_update_all_widths(clist); | |
- for (rows = clist->rowdata; rows; rows = g_slist_next(rows)) { | |
- row = (GtkCListRow *)rows->data; | |
- if (row) | |
- SendMessage(widget->hWnd, LB_ADDSTRING, 0, (LPARAM)row->data); | |
- } | |
- | |
- for (i = 0; i < clist->cols; i++) { | |
- hdi.mask = HDI_TEXT | HDI_FORMAT | HDI_WIDTH; | |
- hdi.pszText = clist->coldata[i].title; | |
- if (hdi.pszText) { | |
- if (i == clist->cols - 1) | |
- hdi.cxy = 9000; | |
- else | |
- hdi.cxy = clist->coldata[i].width; | |
- hdi.cchTextMax = strlen(hdi.pszText); | |
- hdi.fmt = HDF_LEFT | HDF_STRING; | |
- SendMessage(header, HDM_INSERTITEM, i + 1, (LPARAM)&hdi); | |
- } | |
- } | |
-} | |
- | |
-void gtk_clist_show(GtkWidget *widget) | |
-{ | |
- if (GTK_WIDGET_REALIZED(widget)) { | |
- ShowWindow(GTK_CLIST(widget)->header, SW_SHOWNORMAL); | |
- } | |
-} | |
- | |
-void gtk_clist_hide(GtkWidget *widget) | |
-{ | |
- if (GTK_WIDGET_REALIZED(widget)) { | |
- ShowWindow(GTK_CLIST(widget)->header, SW_HIDE); | |
- } | |
-} | |
- | |
-void gtk_clist_draw_row(GtkCList *clist, LPDRAWITEMSTRUCT lpdis) | |
-{ | |
- HBRUSH bkgrnd; | |
- COLORREF textcol, oldtextcol; | |
- RECT rcCol; | |
- gint i, CurrentX; | |
- GtkCListRow *row; | |
- | |
- if (lpdis->itemState & ODS_SELECTED) { | |
- bkgrnd = (HBRUSH)(1 + COLOR_HIGHLIGHT); | |
- textcol = (COLORREF)GetSysColor(COLOR_HIGHLIGHTTEXT); | |
- } else { | |
- bkgrnd = (HBRUSH)(1 + COLOR_WINDOW); | |
- textcol = (COLORREF)GetSysColor(COLOR_WINDOWTEXT); | |
- } | |
- oldtextcol = SetTextColor(lpdis->hDC, textcol); | |
- SetBkMode(lpdis->hDC, TRANSPARENT); | |
- FillRect(lpdis->hDC, &lpdis->rcItem, bkgrnd); | |
- | |
- if (lpdis->itemID >= 0 && lpdis->itemID < clist->rows) { | |
- row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, lpdis->itemID); | |
- CurrentX = lpdis->rcItem.left; | |
- rcCol.top = lpdis->rcItem.top; | |
- rcCol.bottom = lpdis->rcItem.bottom; | |
- if (row->text) | |
- for (i = 0; i < clist->cols; i++) { | |
- rcCol.left = CurrentX + LISTITEMHPACK; | |
- CurrentX += clist->coldata[i].width; | |
- rcCol.right = CurrentX - LISTITEMHPACK; | |
- if (rcCol.left > lpdis->rcItem.right) | |
- rcCol.left = lpdis->rcItem.right; | |
- if (rcCol.right > lpdis->rcItem.right) | |
- rcCol.right = lpdis->rcItem.right; | |
- if (i == clist->cols - 1) | |
- rcCol.right = lpdis->rcItem.right; | |
- if (row->text[i]) { | |
- DrawText(lpdis->hDC, row->text[i], -1, &rcCol, | |
- DT_LEFT | DT_SINGLELINE | DT_VCENTER | DT_END_ELLIPSIS); | |
- } | |
- } | |
- } | |
- | |
- SetTextColor(lpdis->hDC, oldtextcol); | |
- SetBkMode(lpdis->hDC, OPAQUE); | |
- if (lpdis->itemState & ODS_FOCUS) | |
- DrawFocusRect(lpdis->hDC, &lpdis->rcItem); | |
-} | |
- | |
-void gtk_clist_do_auto_resize(GtkCList *clist) | |
-{ | |
- gint i; | |
- | |
- for (i = 0; i < clist->cols; i++) | |
- if (clist->coldata[i].auto_resize) { | |
- gtk_clist_set_column_width(clist, i, clist->coldata[i].width); | |
- } | |
-} | |
- | |
-void gtk_clist_update_all_widths(GtkCList *clist) | |
-{ | |
- GSList *list; | |
- GtkCListRow *row; | |
- gint i; | |
- SIZE size; | |
- HWND header; | |
- | |
- header = clist->header; | |
- if (header) | |
- for (i = 0; i < clist->cols; i++) { | |
- if (GetTextSize(header, clist->coldata[i].title, &size, defFont) && | |
- clist->coldata[i].width < size.cx + 2 * LISTHEADERPACK) { | |
- clist->coldata[i].width = size.cx + 2 * LISTHEADERPACK; | |
- } | |
- } | |
- | |
- for (list = clist->rowdata; list; list = g_slist_next(list)) { | |
- row = (GtkCListRow *)list->data; | |
- if (row && row->text) | |
- gtk_clist_update_widths(clist, row->text); | |
- } | |
-} | |
- | |
-void gtk_clist_update_widths(GtkCList *clist, gchar *text[]) | |
-{ | |
- gint i; | |
- SIZE size; | |
- HWND hWnd; | |
- | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (!hWnd) | |
- return; | |
- for (i = 0; i < clist->cols; i++) { | |
- if (clist->coldata[i].auto_resize | |
- && GetTextSize(hWnd, text[i], &size, defFont) | |
- && size.cx + 2 * LISTITEMHPACK > clist->coldata[i].width) { | |
- clist->coldata[i].width = size.cx + 2 * LISTITEMHPACK; | |
- } | |
- } | |
-} | |
- | |
-gint gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]) | |
-{ | |
- GtkWidget *widget = GTK_WIDGET(clist); | |
- HWND hWnd; | |
- GtkCListRow *new_row; | |
- gint i; | |
- | |
- if (row < 0) | |
- row = clist->rows; | |
- | |
- new_row = g_new0(GtkCListRow, 1); | |
- new_row->text = g_new0(gchar *, clist->cols); | |
- | |
- for (i = 0; i < clist->cols; i++) { | |
- new_row->text[i] = g_strdup(text[i]); | |
- } | |
- gtk_clist_update_widths(clist, new_row->text); | |
- gtk_clist_do_auto_resize(clist); | |
- clist->rowdata = g_slist_insert(clist->rowdata, (gpointer)new_row, row); | |
- clist->rows = g_slist_length(clist->rowdata); | |
- | |
- if (GTK_WIDGET_REALIZED(widget)) { | |
- hWnd = widget->hWnd; | |
- SendMessage(hWnd, LB_INSERTSTRING, (WPARAM)row, (LPARAM)NULL); | |
- } | |
- | |
- return row; | |
-} | |
- | |
-gint gtk_clist_set_text(GtkCList *clist, gint row, gint col, gchar *text) | |
-{ | |
- GtkCListRow *list_row; | |
- | |
- if (row < 0 || row >= clist->rows || col < 0 || col >= clist->cols) | |
- return -1; | |
- | |
- list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
- g_free(list_row->text[col]); | |
- list_row->text[col] = g_strdup(text); | |
- | |
- if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
- HWND hWnd = GTK_WIDGET(clist)->hWnd; | |
- | |
- InvalidateRect(hWnd, NULL, FALSE); | |
- UpdateWindow(hWnd); | |
- } | |
- return row; | |
-} | |
- | |
-void gtk_clist_remove(GtkCList *clist, gint row) | |
-{ | |
- if (row >= 0 && row < clist->rows) { | |
- GSList *dellink; | |
- GtkCListRow *delrow; | |
- int i; | |
- | |
- gtk_clist_unselect_row(clist, row, 0); | |
- dellink = g_slist_nth(clist->rowdata, row); | |
- delrow = (GtkCListRow *)dellink->data; | |
- for (i = 0; i < clist->cols; i++) { | |
- g_free(delrow->text[i]); | |
- } | |
- g_free(delrow->text); | |
- clist->rowdata = g_slist_remove_link(clist->rowdata, dellink); | |
- g_free(dellink); | |
- | |
- clist->rows = g_slist_length(clist->rowdata); | |
- | |
- if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
- HWND hWnd = GTK_WIDGET(clist)->hWnd; | |
- | |
- SendMessage(hWnd, LB_DELETESTRING, (WPARAM)row, 0); | |
- } | |
- } | |
-} | |
- | |
-GtkWidget *gtk_clist_new_with_titles(gint columns, gchar *titles[]) | |
-{ | |
- GtkWidget *widget; | |
- GtkCList *clist; | |
- gint i; | |
- | |
- widget = gtk_clist_new(columns); | |
- clist = GTK_CLIST(widget); | |
- for (i = 0; i < clist->cols; i++) { | |
- gtk_clist_set_column_title(clist, i, titles[i]); | |
- } | |
- return widget; | |
-} | |
- | |
-GtkWidget *gtk_scrolled_clist_new_with_titles(gint columns, | |
- gchar *titles[], | |
- GtkWidget **pack_widg) | |
-{ | |
- GtkWidget *widget; | |
- | |
- widget = gtk_clist_new_with_titles(columns, titles); | |
- *pack_widg = widget; | |
- return widget; | |
-} | |
- | |
-gint gtk_clist_append(GtkCList *clist, gchar *text[]) | |
-{ | |
- return gtk_clist_insert(clist, -1, text); | |
-} | |
- | |
-void gtk_clist_set_column_title(GtkCList *clist, gint column, | |
- const gchar *title) | |
-{ | |
- HWND hWnd; | |
- | |
- if (column < 0 || column >= clist->cols) | |
- return; | |
- g_free(clist->coldata[column].title); | |
- clist->coldata[column].title = g_strdup(title); | |
- if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- InvalidateRect(hWnd, NULL, FALSE); | |
- UpdateWindow(hWnd); | |
- } | |
-} | |
- | |
-void gtk_clist_column_title_passive(GtkCList *clist, gint column) | |
-{ | |
- if (column >= 0 && column < clist->cols) | |
- clist->coldata[column].button_passive = TRUE; | |
-} | |
- | |
-void gtk_clist_column_titles_passive(GtkCList *clist) | |
-{ | |
- gint i; | |
- | |
- for (i = 0; i < clist->cols; i++) { | |
- gtk_clist_column_title_passive(clist, i); | |
- } | |
-} | |
- | |
-void gtk_clist_column_title_active(GtkCList *clist, gint column) | |
-{ | |
- if (column >= 0 && column < clist->cols) | |
- clist->coldata[column].button_passive = FALSE; | |
-} | |
- | |
-void gtk_clist_column_titles_active(GtkCList *clist) | |
-{ | |
- gint i; | |
- | |
- for (i = 0; i < clist->cols; i++) { | |
- gtk_clist_column_title_active(clist, i); | |
- } | |
-} | |
- | |
-void gtk_clist_set_column_width(GtkCList *clist, gint column, gint width) | |
-{ | |
- gtk_clist_set_column_width_full(clist, column, width, TRUE); | |
-} | |
- | |
-void gtk_clist_set_column_width_full(GtkCList *clist, gint column, | |
- gint width, gboolean ResizeHeader) | |
-{ | |
- HWND hWnd, header; | |
- HD_ITEM hdi; | |
- | |
- if (column < 0 || column >= clist->cols) | |
- return; | |
- | |
- clist->coldata[column].width = width; | |
- if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
- header = clist->header; | |
- if (ResizeHeader && header) { | |
- hdi.mask = HDI_WIDTH; | |
- if (column == clist->cols - 1) | |
- width = 9000; | |
- hdi.cxy = width; | |
- if (SendMessage(header, HDM_GETITEM, (WPARAM)column, (LPARAM)&hdi) && | |
- hdi.cxy != width) { | |
- hdi.mask = HDI_WIDTH; | |
- hdi.cxy = width; | |
- SendMessage(header, HDM_SETITEM, (WPARAM)column, (LPARAM)&hdi); | |
- } | |
- } | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (hWnd) | |
- InvalidateRect(hWnd, NULL, FALSE); | |
- } | |
-} | |
- | |
-void gtk_clist_set_selection_mode(GtkCList *clist, GtkSelectionMode mode) | |
-{ | |
- clist->mode = mode; | |
-} | |
- | |
void gtk_container_show_all(GtkWidget *widget, gboolean hWndOnly) | |
{ | |
GtkContainer *container = GTK_CONTAINER(widget); | |
t@@ -5031,91 +4588,6 @@ void gtk_text_thaw(GtkText *text) | |
{ | |
} | |
-static GtkCList *sorting_clist; | |
-static gint gtk_clist_sort_func(gconstpointer a, gconstpointer b) | |
-{ | |
- return (*sorting_clist->cmp_func) (sorting_clist, a, b); | |
-} | |
- | |
-void gtk_clist_sort(GtkCList *clist) | |
-{ | |
- HWND hWnd; | |
- gint rowind; | |
- GList *sel; | |
- GSList *rowpt; | |
- | |
- sorting_clist = clist; | |
- if (clist && clist->cmp_func && clist->rows) { | |
- /* Since the order of the list may change, we need to change the | |
- * selection as well. Do this by converting the row indices into | |
- * GSList pointers (which are invariant to the sort) and then convert | |
- * back afterwards */ | |
- for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
- rowind = GPOINTER_TO_INT(sel->data); | |
- sel->data = (gpointer)g_slist_nth(clist->rowdata, rowind); | |
- } | |
- clist->rowdata = g_slist_sort(clist->rowdata, gtk_clist_sort_func); | |
- for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
- rowpt = (GSList *)(sel->data); | |
- sel->data = GINT_TO_POINTER(g_slist_position(clist->rowdata, rowpt)); | |
- } | |
- if (GTK_WIDGET_REALIZED(GTK_WIDGET(clist))) { | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (clist->mode == GTK_SELECTION_SINGLE) { | |
- sel = clist->selection; | |
- if (sel) | |
- rowind = GPOINTER_TO_INT(sel->data); | |
- else | |
- rowind = -1; | |
- SendMessage(hWnd, LB_SETCURSEL, (WPARAM)rowind, 0); | |
- } else { | |
- for (rowind = 0; rowind < clist->rows; rowind++) { | |
- SendMessage(hWnd, LB_SETSEL, (WPARAM)FALSE, (LPARAM)rowind); | |
- } | |
- for (sel = clist->selection; sel; sel = g_list_next(sel)) { | |
- rowind = GPOINTER_TO_INT(sel->data); | |
- SendMessage(hWnd, LB_SETSEL, (WPARAM)TRUE, (LPARAM)rowind); | |
- } | |
- } | |
- InvalidateRect(hWnd, NULL, FALSE); | |
- UpdateWindow(hWnd); | |
- } | |
- } | |
-} | |
- | |
-void gtk_clist_freeze(GtkCList *clist) | |
-{ | |
-} | |
- | |
-void gtk_clist_thaw(GtkCList *clist) | |
-{ | |
-} | |
- | |
-void gtk_clist_clear(GtkCList *clist) | |
-{ | |
- GtkCListRow *row; | |
- GSList *list; | |
- gint i; | |
- HWND hWnd; | |
- | |
- for (list = clist->rowdata; list; list = g_slist_next(list)) { | |
- row = (GtkCListRow *)list->data; | |
- for (i = 0; i < clist->cols; i++) { | |
- g_free(row->text[i]); | |
- } | |
- g_free(row); | |
- } | |
- g_slist_free(clist->rowdata); | |
- clist->rowdata = NULL; | |
- clist->rows = 0; | |
- | |
- gtk_clist_update_all_widths(clist); | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (hWnd) { | |
- SendMessage(hWnd, LB_RESETCONTENT, 0, 0); | |
- } | |
-} | |
- | |
GtkWidget *gtk_option_menu_new() | |
{ | |
GtkOptionMenu *option_menu; | |
t@@ -5258,38 +4730,6 @@ void gtk_label_get(GtkLabel *label, gchar **str) | |
*str = label->text; | |
} | |
-void gtk_clist_set_row_data(GtkCList *clist, gint row, gpointer data) | |
-{ | |
- GtkCListRow *list_row; | |
- | |
- if (row >= 0 && row < clist->rows) { | |
- list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
- if (list_row) | |
- list_row->data = data; | |
- } | |
-} | |
- | |
-gpointer gtk_clist_get_row_data(GtkCList *clist, gint row) | |
-{ | |
- GtkCListRow *list_row; | |
- | |
- if (row >= 0 && row < clist->rows) { | |
- list_row = (GtkCListRow *)g_slist_nth_data(clist->rowdata, row); | |
- if (list_row) | |
- return list_row->data; | |
- } | |
- return NULL; | |
-} | |
- | |
-void gtk_clist_set_auto_sort(GtkCList *clist, gboolean auto_sort) | |
-{ | |
- clist->auto_sort = auto_sort; | |
-} | |
- | |
-void gtk_clist_columns_autosize(GtkCList *clist) | |
-{ | |
-} | |
- | |
void gtk_text_set_point(GtkText *text, guint index) | |
{ | |
gtk_editable_set_position(GTK_EDITABLE(text), index); | |
t@@ -5301,95 +4741,6 @@ void gtk_widget_set_usize(GtkWidget *widget, gint width… | |
widget->usize.height = height; | |
} | |
-void gtk_clist_select_row(GtkCList *clist, gint row, gint column) | |
-{ | |
- HWND hWnd; | |
- | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (hWnd) { | |
- if (clist->mode == GTK_SELECTION_SINGLE) { | |
- SendMessage(hWnd, LB_SETCURSEL, (WPARAM)row, 0); | |
- } else { | |
- SendMessage(hWnd, LB_SETSEL, (WPARAM)TRUE, (LPARAM)row); | |
- } | |
- gtk_clist_update_selection(GTK_WIDGET(clist)); | |
- } | |
-} | |
- | |
-void gtk_clist_unselect_row(GtkCList *clist, gint row, gint column) | |
-{ | |
- HWND hWnd; | |
- | |
- hWnd = GTK_WIDGET(clist)->hWnd; | |
- if (hWnd) { | |
- if (clist->mode == GTK_SELECTION_SINGLE) { | |
- SendMessage(hWnd, LB_SETCURSEL, (WPARAM)(-1), 0); | |
- } else { | |
- SendMessage(hWnd, LB_SETSEL, (WPARAM)FALSE, (LPARAM)row); | |
- } | |
- gtk_clist_update_selection(GTK_WIDGET(clist)); | |
- } | |
-} | |
- | |
-GtkVisibility gtk_clist_row_is_visible(GtkCList *clist, gint row) | |
-{ | |
- return GTK_VISIBILITY_FULL; | |
-} | |
- | |
-void gtk_clist_moveto(GtkCList *clist, gint row, gint column, | |
- gfloat row_align, gfloat col_align) | |
-{ | |
-} | |
- | |
-void gtk_clist_set_compare_func(GtkCList *clist, | |
- GtkCListCompareFunc cmp_func) | |
-{ | |
- if (clist) | |
- clist->cmp_func = cmp_func; | |
-} | |
- | |
-void gtk_clist_set_column_auto_resize(GtkCList *clist, gint column, | |
- gboolean auto_resize) | |
-{ | |
- if (clist && column >= 0 && column < clist->cols) { | |
- clist->coldata[column].auto_resize = auto_resize; | |
- } | |
-} | |
- | |
-void gtk_clist_update_selection(GtkWidget *widget) | |
-{ | |
- GtkCList *clist = GTK_CLIST(widget); | |
- GList *oldsel, *selpt; | |
- gint i; | |
- | |
- oldsel = clist->selection; | |
- clist->selection = NULL; | |
- if (widget->hWnd) { | |
- for (i = 0; i < clist->rows; i++) { | |
- if (SendMessage(widget->hWnd, LB_GETSEL, (WPARAM)i, 0) > 0) { | |
- clist->selection = g_list_append(clist->selection, GINT_TO_POINTER(i)); | |
- } | |
- } | |
- | |
- for (selpt = oldsel; selpt; selpt = g_list_next(selpt)) { | |
- gint row = GPOINTER_TO_INT(selpt->data); | |
- | |
- if (!g_list_find(clist->selection, GINT_TO_POINTER(row))) { | |
- gtk_signal_emit(GTK_OBJECT(widget), "unselect_row", row, 0, NULL); | |
- } | |
- } | |
- | |
- for (selpt = clist->selection; selpt; selpt = g_list_next(selpt)) { | |
- gint row = GPOINTER_TO_INT(selpt->data); | |
- | |
- if (!g_list_find(oldsel, GINT_TO_POINTER(row))) { | |
- gtk_signal_emit(GTK_OBJECT(widget), "select_row", row, 0, NULL); | |
- } | |
- } | |
- } | |
- g_list_free(oldsel); | |
-} | |
- | |
void gtk_editable_create(GtkWidget *widget) | |
{ | |
GtkEditable *editable = GTK_EDITABLE(widget); | |
t@@ -5652,22 +5003,6 @@ GtkWidget *gtk_scrolled_text_new(GtkAdjustment *hadj, G… | |
return text; | |
} | |
-GtkWidget *gtk_scrolled_clist_new_with_titles(gint columns, | |
- gchar *titles[], | |
- GtkWidget **pack_widg) | |
-{ | |
- GtkWidget *scrollwin, *clist; | |
- | |
- clist = gtk_clist_new_with_titles(columns, titles); | |
- scrollwin = gtk_scrolled_window_new(NULL, NULL); | |
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(scrollwin), | |
- GTK_POLICY_AUTOMATIC, | |
- GTK_POLICY_AUTOMATIC); | |
- gtk_container_add(GTK_CONTAINER(scrollwin), clist); | |
- *pack_widg = scrollwin; | |
- return clist; | |
-} | |
- | |
static void DestroyGtkMessageBox(GtkWidget *widget, gpointer data) | |
{ | |
gtk_main_quit(); | |
diff --git a/src/gtkport/gtkport.h b/src/gtkport/gtkport.h | |
t@@ -120,12 +120,14 @@ typedef struct _GtkRequisition GtkRequisition; | |
typedef struct _GtkAllocation GtkAllocation; | |
typedef struct _GtkWidget GtkWidget; | |
typedef struct _GtkSignalType GtkSignalType; | |
+typedef struct _GtkContainer GtkContainer; | |
typedef void (*GtkSignalFunc) (); | |
typedef void (*GtkItemFactoryCallback) (); | |
typedef void (*GtkSignalMarshaller) (GtkObject *object, GSList *actions, | |
GtkSignalFunc default_action, | |
va_list args); | |
+ | |
typedef struct _GtkMenuShell GtkMenuShell; | |
typedef struct _GtkMenuBar GtkMenuBar; | |
typedef struct _GtkMenuItem GtkMenuItem; | |
t@@ -154,11 +156,15 @@ struct _GtkSignalType { | |
GtkSignalFunc default_action; | |
}; | |
+typedef gboolean (*GtkWndProc) (GtkWidget *widget, UINT msg, | |
+ WPARAM wParam, LPARAM lParam); | |
+ | |
struct _GtkClass { | |
gchar *Name; | |
GtkClass *parent; | |
gint Size; | |
GtkSignalType *signals; | |
+ GtkWndProc wndproc; | |
}; | |
typedef GtkClass *GtkType; | |
t@@ -193,6 +199,14 @@ struct _GtkWidget { | |
GtkWidget *parent; | |
}; | |
+struct _GtkContainer { | |
+ GtkWidget widget; | |
+ GtkWidget *child; | |
+ guint border_width:16; | |
+}; | |
+ | |
+#include "clist.h" | |
+ | |
struct _GtkMisc { | |
GtkWidget widget; | |
}; | |
t@@ -280,14 +294,6 @@ struct _GtkUrl { | |
gchar *target; | |
}; | |
-typedef struct _GtkContainer GtkContainer; | |
- | |
-struct _GtkContainer { | |
- GtkWidget widget; | |
- GtkWidget *child; | |
- guint border_width:16; | |
-}; | |
- | |
struct _GtkPanedChild { | |
GtkWidget *widget; | |
gint resize:1; | |
t@@ -317,15 +323,9 @@ typedef struct _GtkHBox GtkHBox; | |
typedef struct _GtkVBox GtkVBox; | |
typedef struct _GtkNotebookChild GtkNotebookChild; | |
typedef struct _GtkNotebook GtkNotebook; | |
-typedef struct _GtkCList GtkCList; | |
-typedef struct _GtkCListRow GtkCListRow; | |
-typedef struct _GtkCListColumn GtkCListColumn; | |
typedef struct _GtkItemFactoryEntry GtkItemFactoryEntry; | |
typedef struct _GtkItemFactory GtkItemFactory; | |
-typedef gint (*GtkCListCompareFunc) (GtkCList *clist, gconstpointer ptr1, | |
- gconstpointer ptr2); | |
- | |
struct _GtkItemFactoryEntry { | |
gchar *path; | |
gchar *accelerator; | |
t@@ -376,33 +376,6 @@ struct _GtkNotebook { | |
gint selection; | |
}; | |
-struct _GtkCListColumn { | |
- gchar *title; | |
- gint width; | |
- guint visible:1; | |
- guint resizeable:1; | |
- guint auto_resize:1; | |
- guint button_passive:1; | |
-}; | |
- | |
-struct _GtkCListRow { | |
- gpointer data; | |
- gchar **text; | |
-}; | |
- | |
-struct _GtkCList { | |
- GtkContainer container; | |
- gint cols, rows; | |
- HWND header; | |
- gint16 header_size; | |
- GSList *rowdata; | |
- GtkCListColumn *coldata; | |
- GList *selection; | |
- GtkSelectionMode mode; | |
- GtkCListCompareFunc cmp_func; | |
- gint auto_sort:1; | |
-}; | |
- | |
typedef struct _GtkBin GtkBin; | |
struct _GtkBin { | |
t@@ -497,7 +470,6 @@ struct _GtkTableRowCol { | |
#define GTK_BIN(obj) ((GtkBin *)(obj)) | |
#define GTK_FRAME(obj) ((GtkFrame *)(obj)) | |
#define GTK_BOX(obj) ((GtkBox *)(obj)) | |
-#define GTK_CLIST(obj) ((GtkCList *)(obj)) | |
#define GTK_HBOX(obj) ((GtkHBox *)(obj)) | |
#define GTK_VBOX(obj) ((GtkVBox *)(obj)) | |
#define GTK_NOTEBOOK(obj) ((GtkNotebook *)(obj)) | |
t@@ -584,24 +556,6 @@ void gtk_item_factory_create_items(GtkItemFactory *ifacto… | |
gpointer callback_data); | |
GtkWidget *gtk_item_factory_get_widget(GtkItemFactory *ifactory, | |
const gchar *path); | |
-GtkWidget *gtk_clist_new(gint columns); | |
-GtkWidget *gtk_clist_new_with_titles(gint columns, gchar *titles[]); | |
-gint gtk_clist_append(GtkCList *clist, gchar *text[]); | |
-void gtk_clist_remove(GtkCList *clist, gint row); | |
-void gtk_clist_set_column_title(GtkCList *clist, gint column, | |
- const gchar *title); | |
-gint gtk_clist_insert(GtkCList *clist, gint row, gchar *text[]); | |
-gint gtk_clist_set_text(GtkCList *clist, gint row, gint col, gchar *text); | |
-void gtk_clist_set_column_width(GtkCList *clist, gint column, gint width); | |
-void gtk_clist_column_title_passive(GtkCList *clist, gint column); | |
-void gtk_clist_column_titles_passive(GtkCList *clist); | |
-void gtk_clist_column_title_active(GtkCList *clist, gint column); | |
-void gtk_clist_column_titles_active(GtkCList *clist); | |
-void gtk_clist_set_selection_mode(GtkCList *clist, GtkSelectionMode mode); | |
-void gtk_clist_sort(GtkCList *clist); | |
-void gtk_clist_freeze(GtkCList *clist); | |
-void gtk_clist_thaw(GtkCList *clist); | |
-void gtk_clist_clear(GtkCList *clist); | |
GSList *gtk_radio_button_group(GtkRadioButton *radio_button); | |
void gtk_editable_insert_text(GtkEditable *editable, const gchar *new_text, | |
gint new_text_length, gint *position); | |
t@@ -724,21 +678,8 @@ void gtk_option_menu_set_history(GtkOptionMenu *option_me… | |
void gtk_label_set_text(GtkLabel *label, const gchar *str); | |
guint gtk_label_parse_uline(GtkLabel *label, const gchar *str); | |
void gtk_label_get(GtkLabel *label, gchar **str); | |
-void gtk_clist_set_row_data(GtkCList *clist, gint row, gpointer data); | |
-gpointer gtk_clist_get_row_data(GtkCList *clist, gint row); | |
-void gtk_clist_set_auto_sort(GtkCList *clist, gboolean auto_sort); | |
-void gtk_clist_columns_autosize(GtkCList *clist); | |
void gtk_text_set_point(GtkText *text, guint index); | |
void gtk_widget_set_usize(GtkWidget *widget, gint width, gint height); | |
-void gtk_clist_select_row(GtkCList *clist, gint row, gint column); | |
-void gtk_clist_unselect_row(GtkCList *clist, gint row, gint column); | |
-GtkVisibility gtk_clist_row_is_visible(GtkCList *clist, gint row); | |
-void gtk_clist_moveto(GtkCList *clist, gint row, gint column, | |
- gfloat row_align, gfloat col_align); | |
-void gtk_clist_set_compare_func(GtkCList *clist, | |
- GtkCListCompareFunc cmp_func); | |
-void gtk_clist_set_column_auto_resize(GtkCList *clist, gint column, | |
- gboolean auto_resize); | |
gint gtk_spin_button_get_value_as_int(GtkSpinButton *spin_button); | |
void gtk_spin_button_set_value(GtkSpinButton *spin_button, gfloat value); | |
void gtk_spin_button_set_adjustment(GtkSpinButton *spin_button, | |
t@@ -754,6 +695,9 @@ guint gtk_timeout_add(guint32 interval, GtkFunction functi… | |
void gtk_timeout_remove(guint timeout_handler_id); | |
guint gtk_main_level(void); | |
+/* Private functions */ | |
+void gtk_container_set_size(GtkWidget *widget, GtkAllocation *allocation); | |
+ | |
#else /* CYGWIN */ | |
/* Include standard GTK+ headers on Unix systems */ |