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");