Mercurial > dwindows
comparison gtk/dw.c @ 352:feed7567764f
Rewrote the selection code. It is much more simple now and no longer
uses it's internal selection list management.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Wed, 16 Apr 2003 16:58:00 +0000 |
parents | 2216e65ad2ae |
children | 08e56a0f9541 |
comparison
equal
deleted
inserted
replaced
351:84a24d739d12 | 352:feed7567764f |
---|---|
579 retval = switchpagefunc(work->window, _get_logical_page(GTK_WIDGET(notebook), page_num), work->data); | 579 retval = switchpagefunc(work->window, _get_logical_page(GTK_WIDGET(notebook), page_num), work->data); |
580 } | 580 } |
581 return retval; | 581 return retval; |
582 } | 582 } |
583 | 583 |
584 static gint _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) | |
585 { | |
586 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); | |
587 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
588 int multi = (int)gtk_object_get_data(GTK_OBJECT(widget), "multi"); | |
589 | |
590 if(rowdata) | |
591 { | |
592 if(!multi) | |
593 { | |
594 g_list_free(tmp); | |
595 tmp = NULL; | |
596 } | |
597 | |
598 tmp = g_list_append(tmp, rowdata); | |
599 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); | |
600 } | |
601 return FALSE; | |
602 } | |
603 | |
604 static gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) | 584 static gint _container_select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) |
605 { | 585 { |
606 SignalHandler *work = (SignalHandler *)data; | 586 SignalHandler *work = (SignalHandler *)data; |
607 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | 587 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); |
608 int (*contextfunc)(HWND, HWND, char *, void *, void *) = work->func; | 588 int (*contextfunc)(HWND, HWND, char *, void *, void *) = work->func; |
611 { | 591 { |
612 gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", (gpointer)0); | 592 gtk_object_set_data(GTK_OBJECT(widget), "_dw_double_click", (gpointer)0); |
613 return TRUE; | 593 return TRUE; |
614 } | 594 } |
615 return contextfunc(work->window, 0, rowdata, work->data, 0);; | 595 return contextfunc(work->window, 0, rowdata, work->data, 0);; |
616 } | |
617 | |
618 static gint _unselect_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) | |
619 { | |
620 GList *tmp; | |
621 char *rowdata; | |
622 | |
623 if(_dw_unselecting) | |
624 return FALSE; | |
625 | |
626 tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); | |
627 rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); | |
628 | |
629 if(rowdata && tmp) | |
630 { | |
631 tmp = g_list_remove(tmp, rowdata); | |
632 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); | |
633 } | |
634 return FALSE; | |
635 } | 596 } |
636 | 597 |
637 static int _round_value(gfloat val) | 598 static int _round_value(gfloat val) |
638 { | 599 { |
639 int newval = (int)val; | 600 int newval = (int)val; |
4307 return FALSE; | 4268 return FALSE; |
4308 } | 4269 } |
4309 multi = (int)gtk_object_get_data(GTK_OBJECT(handle), "multi"); | 4270 multi = (int)gtk_object_get_data(GTK_OBJECT(handle), "multi"); |
4310 gtk_object_set_data(GTK_OBJECT(handle), "multi", (gpointer)multi); | 4271 gtk_object_set_data(GTK_OBJECT(handle), "multi", (gpointer)multi); |
4311 | 4272 |
4312 gtk_signal_connect(GTK_OBJECT(clist), "select_row", GTK_SIGNAL_FUNC(_select_row), NULL); | |
4313 gtk_signal_connect(GTK_OBJECT(clist), "unselect_row", GTK_SIGNAL_FUNC(_unselect_row), NULL); | |
4314 | |
4315 gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); | 4273 gtk_clist_set_column_auto_resize(GTK_CLIST(clist), 0, TRUE); |
4316 if(multi) | 4274 if(multi) |
4317 gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED); | 4275 gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_EXTENDED); |
4318 else | 4276 else |
4319 gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE); | 4277 gtk_clist_set_selection_mode(GTK_CLIST(clist), GTK_SELECTION_SINGLE); |
4896 } | 4854 } |
4897 | 4855 |
4898 /* These should be separate but right now this will work */ | 4856 /* These should be separate but right now this will work */ |
4899 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED) | 4857 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED) |
4900 { | 4858 { |
4901 /* If there is an old query list, free it */ | 4859 list = GTK_CLIST(clist)->selection; |
4902 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); | 4860 |
4903 if(list) | 4861 if(list) |
4904 g_list_free(list); | |
4905 | |
4906 /* Move the current selection list to the query list, and remove the | |
4907 * current selection list. | |
4908 */ | |
4909 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist"); | |
4910 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL); | |
4911 gtk_object_set_data(GTK_OBJECT(clist), "querylist", (gpointer)list); | |
4912 _dw_unselect(clist); | |
4913 | |
4914 if(list) | |
4915 { | 4862 { |
4916 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1); | 4863 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1); |
4917 if(list->data) | 4864 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); |
4918 retval = list->data; | |
4919 else | |
4920 retval = ""; | |
4921 } | 4865 } |
4922 } | 4866 } |
4923 else | 4867 else |
4924 { | 4868 { |
4925 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), 0); | 4869 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), 0); |
4954 } | 4898 } |
4955 | 4899 |
4956 /* These should be separate but right now this will work */ | 4900 /* These should be separate but right now this will work */ |
4957 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED) | 4901 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED) |
4958 { | 4902 { |
4959 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); | 4903 list = GTK_CLIST(clist)->selection; |
4960 | 4904 |
4961 if(list) | 4905 if(list) |
4962 { | 4906 { |
4963 int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); | 4907 int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); |
4964 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1); | 4908 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1); |
4967 { | 4911 { |
4968 list = list->next; | 4912 list = list->next; |
4969 counter++; | 4913 counter++; |
4970 } | 4914 } |
4971 | 4915 |
4972 if(list && list->data) | 4916 if(list) |
4973 retval = list->data; | 4917 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), GPOINTER_TO_UINT(list->data)); |
4974 else if(list && !list->data) | |
4975 retval = ""; | |
4976 } | 4918 } |
4977 } | 4919 } |
4978 else | 4920 else |
4979 { | 4921 { |
4980 int pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); | 4922 int pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); |