Mercurial > dwindows
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 { |