comparison gtk/dw.c @ 69:9510897c0b03

Added new container functions, and implemented some missing functionality.
author bsmith@81767d24-ef19-dc11-ae90-00e081727c95
date Mon, 04 Feb 2002 16:04:43 +0000
parents ab9b0fa6c66e
children ab77a22a2a36
comparison
equal deleted inserted replaced
68:8d6100960adf 69:9510897c0b03
444 444
445 void _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data) 445 void _select_row(GtkWidget *widget, gint row, gint column, GdkEventButton *event, gpointer data)
446 { 446 {
447 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist"); 447 GList *tmp = (GList *)gtk_object_get_data(GTK_OBJECT(widget), "selectlist");
448 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row); 448 char *rowdata = gtk_clist_get_row_data(GTK_CLIST(widget), row);
449 int multi = (int)gtk_object_get_data(GTK_OBJECT(widget), "multi");
449 450
450 if(rowdata) 451 if(rowdata)
451 { 452 {
453 if(!multi)
454 {
455 g_list_free(tmp);
456 tmp = NULL;
457 }
458
452 tmp = g_list_append(tmp, rowdata); 459 tmp = g_list_append(tmp, rowdata);
453 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp); 460 gtk_object_set_data(GTK_OBJECT(widget), "selectlist", tmp);
454 } 461 }
455 462
456 } 463 }
3681 { 3688 {
3682 DW_MUTEX_UNLOCK; 3689 DW_MUTEX_UNLOCK;
3683 return NULL; 3690 return NULL;
3684 } 3691 }
3685 3692
3686 /* If there is an old query list, free it */ 3693 /* These should be separate but right now this will work */
3687 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); 3694 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED)
3688 if(list) 3695 {
3689 g_list_free(list); 3696 /* If there is an old query list, free it */
3690 3697 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist");
3691 /* Move the current selection list to the query list, and remove the 3698 if(list)
3692 * current selection list. 3699 g_list_free(list);
3693 */ 3700
3694 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist"); 3701 /* Move the current selection list to the query list, and remove the
3695 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL); 3702 * current selection list.
3696 gtk_object_set_data(GTK_OBJECT(clist), "querylist", (gpointer)list); 3703 */
3697 gtk_clist_unselect_all(GTK_CLIST(clist)); 3704 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "selectlist");
3698 3705 gtk_object_set_data(GTK_OBJECT(clist), "selectlist", NULL);
3699 if(list) 3706 gtk_object_set_data(GTK_OBJECT(clist), "querylist", (gpointer)list);
3700 { 3707 gtk_clist_unselect_all(GTK_CLIST(clist));
3708
3709 if(list)
3710 {
3711 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1);
3712 if(list->data)
3713 retval = list->data;
3714 else
3715 retval = "";
3716 }
3717 }
3718 else
3719 {
3720 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), 0);
3701 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1); 3721 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)1);
3702 if(list->data)
3703 retval = list->data;
3704 else
3705 retval = "";
3706 } 3722 }
3707 DW_MUTEX_UNLOCK; 3723 DW_MUTEX_UNLOCK;
3708 return retval; 3724 return retval;
3709 } 3725 }
3710 3726
3730 { 3746 {
3731 DW_MUTEX_UNLOCK; 3747 DW_MUTEX_UNLOCK;
3732 return NULL; 3748 return NULL;
3733 } 3749 }
3734 3750
3735 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist"); 3751 /* These should be separate but right now this will work */
3736 3752 if(flags & DW_CRA_SELECTED || flags & DW_CRA_CURSORED)
3737 if(list) 3753 {
3738 { 3754 list = (GList *)gtk_object_get_data(GTK_OBJECT(clist), "querylist");
3739 int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos"); 3755
3756 if(list)
3757 {
3758 int counter = 0, pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos");
3759 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1);
3760
3761 while(list && counter < pos)
3762 {
3763 list = list->next;
3764 counter++;
3765 }
3766
3767 if(list && list->data)
3768 retval = list->data;
3769 else if(list && !list->data)
3770 retval = "";
3771 }
3772 }
3773 else
3774 {
3775 int pos = (int)gtk_object_get_data(GTK_OBJECT(clist), "querypos");
3776
3777 retval = (char *)gtk_clist_get_row_data(GTK_CLIST(clist), pos);
3740 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1); 3778 gtk_object_set_data(GTK_OBJECT(clist), "querypos", (gpointer)pos+1);
3741
3742 while(list && counter < pos)
3743 {
3744 list = list->next;
3745 counter++;
3746 }
3747
3748 if(list && list->data)
3749 retval = list->data;
3750 else if(list && !list->data)
3751 retval = "";
3752 } 3779 }
3753 DW_MUTEX_UNLOCK; 3780 DW_MUTEX_UNLOCK;
3754 return retval; 3781 return retval;
3782 }
3783
3784 /*
3785 * Cursors the item with the text speficied, and scrolls to that item.
3786 * Parameters:
3787 * handle: Handle to the window (widget) to be queried.
3788 * text: Text usually returned by dw_container_query().
3789 */
3790 void dw_container_cursor(HWND handle, char *text)
3791 {
3792 int _locked_by_me = FALSE;
3793 GtkWidget *clist;
3794 int rowcount, z;
3795 char *rowdata;
3796
3797 DW_MUTEX_LOCK;
3798 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle));
3799
3800 if(!clist)
3801 {
3802 DW_MUTEX_UNLOCK;
3803 return;
3804 }
3805 rowcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "rowcount");
3806
3807 for(z=0;z<rowcount;z++)
3808 {
3809 rowdata = gtk_clist_get_row_data(GTK_CLIST(clist), z);
3810 if(rowdata == text)
3811 {
3812 gfloat pos;
3813 GtkAdjustment *adj = gtk_clist_get_vadjustment(GTK_CLIST(clist));
3814 gtk_clist_select_row(GTK_CLIST(clist), z, 0);
3815
3816 pos = ((adj->upper - adj->lower) * ((gfloat)z/(gfloat)rowcount)) + adj->lower;
3817 gtk_adjustment_set_value(adj, pos);
3818 DW_MUTEX_UNLOCK;
3819 return;
3820 }
3821 }
3822
3823 DW_MUTEX_UNLOCK;
3824 }
3825
3826 /*
3827 * Optimizes the column widths so that all data is visible.
3828 * Parameters:
3829 * handle: Handle to the window (widget) to be optimized.
3830 */
3831 void dw_container_optimize(HWND handle)
3832 {
3833 int _locked_by_me = FALSE;
3834 GtkWidget *clist;
3835 int colcount, z;
3836
3837 DW_MUTEX_LOCK;
3838 clist = (GtkWidget*)gtk_object_get_user_data(GTK_OBJECT(handle));
3839
3840 if(!clist)
3841 {
3842 DW_MUTEX_UNLOCK;
3843 return;
3844 }
3845 colcount = (int)gtk_object_get_data(GTK_OBJECT(clist), "colcount");
3846 for(z=0;z<colcount;z++)
3847 {
3848 int width = gtk_clist_optimal_column_width(GTK_CLIST(clist), z);
3849 gtk_clist_set_column_width(GTK_CLIST(clist), z, width);
3850 }
3851 DW_MUTEX_UNLOCK;
3755 } 3852 }
3756 3853
3757 /* 3854 /*
3758 * Creates a rendering context widget (window) to be packed. 3855 * Creates a rendering context widget (window) to be packed.
3759 * Parameters: 3856 * Parameters:
4643 handle2 = tmp; 4740 handle2 = tmp;
4644 } 4741 }
4645 if(GTK_IS_CLIST(handle2)) 4742 if(GTK_IS_CLIST(handle2))
4646 { 4743 {
4647 if(style & DW_CCS_EXTENDSEL) 4744 if(style & DW_CCS_EXTENDSEL)
4745 {
4648 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_MULTIPLE); 4746 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_MULTIPLE);
4747 gtk_object_set_data(GTK_OBJECT(handle2), "multi", (gpointer)1);
4748 }
4649 if(style & DW_CCS_SINGLESEL) 4749 if(style & DW_CCS_SINGLESEL)
4750 {
4650 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_SINGLE); 4751 gtk_clist_set_selection_mode(GTK_CLIST(handle2), GTK_SELECTION_SINGLE);
4752 gtk_object_set_data(GTK_OBJECT(handle2), "multi", (gpointer)0);
4753 }
4651 } 4754 }
4652 if(GTK_IS_LABEL(handle2)) 4755 if(GTK_IS_LABEL(handle2))
4653 { 4756 {
4654 if(style & DW_DT_CENTER || style & DW_DT_VCENTER) 4757 if(style & DW_DT_CENTER || style & DW_DT_VCENTER)
4655 { 4758 {