Mercurial > dwindows
comparison gtk/dw.c @ 138:d22b50184e3b
Initial tree code for GTK 2.0, populating finished. Signal handlers and
clearing/deleting left to do.
author | bsmith@81767d24-ef19-dc11-ae90-00e081727c95 |
---|---|
date | Tue, 22 Oct 2002 01:25:51 +0000 |
parents | f57ef391f104 |
children | ccf210251c99 |
comparison
equal
deleted
inserted
replaced
137:6a18312049fd | 138:d22b50184e3b |
---|---|
597 return icon_pixmap; | 597 return icon_pixmap; |
598 } | 598 } |
599 return NULL; | 599 return NULL; |
600 } | 600 } |
601 | 601 |
602 #if GTK_MAJOR_VERSION > 1 | |
603 GdkPixbuf *_find_pixbuf(long id) | |
604 { | |
605 char *data = NULL; | |
606 int z; | |
607 | |
608 for(z=0;z<_resources.resource_max;z++) | |
609 { | |
610 if(_resources.resource_id[z] == id) | |
611 { | |
612 data = _resources.resource_data[z]; | |
613 break; | |
614 } | |
615 } | |
616 | |
617 if(data) | |
618 return gdk_pixbuf_new_from_xpm_data((const char **)data); | |
619 return NULL; | |
620 } | |
621 #endif | |
622 | |
602 void _size_allocate(GtkWindow *window) | 623 void _size_allocate(GtkWindow *window) |
603 { | 624 { |
604 XSizeHints sizehints; | 625 XSizeHints sizehints; |
605 | 626 |
606 sizehints.base_width = 1; | 627 sizehints.base_width = 1; |
1896 * resource file. | 1917 * resource file. |
1897 */ | 1918 */ |
1898 HWND dw_tree_new(ULONG id) | 1919 HWND dw_tree_new(ULONG id) |
1899 { | 1920 { |
1900 GtkWidget *tmp, *tree; | 1921 GtkWidget *tmp, *tree; |
1922 #if GTK_MAJOR_VERSION > 1 | |
1923 GtkTreeStore *store; | |
1924 GtkTreeViewColumn *col; | |
1925 GtkCellRenderer *rend; | |
1926 #endif | |
1901 int _locked_by_me = FALSE; | 1927 int _locked_by_me = FALSE; |
1902 | 1928 |
1903 DW_MUTEX_LOCK; | 1929 DW_MUTEX_LOCK; |
1904 tmp = gtk_scrolled_window_new(NULL, NULL); | 1930 tmp = gtk_scrolled_window_new(NULL, NULL); |
1905 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), | 1931 gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (tmp), |
1906 GTK_POLICY_AUTOMATIC, GTK_POLICY_ALWAYS); | 1932 GTK_POLICY_AUTOMATIC, GTK_POLICY_AUTOMATIC); |
1907 | 1933 |
1908 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); | 1934 gtk_object_set_data(GTK_OBJECT(tmp), "id", (gpointer)id); |
1909 gtk_widget_show(tmp); | 1935 gtk_widget_show(tmp); |
1936 #if GTK_MAJOR_VERSION > 1 | |
1937 store = gtk_tree_store_new(2, G_TYPE_STRING, GDK_TYPE_PIXBUF); | |
1938 tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL(store)); | |
1939 gtk_object_set_data(GTK_OBJECT(tree), "_dw_tree_store", (gpointer)store); | |
1940 col = gtk_tree_view_column_new(); | |
1941 | |
1942 rend = gtk_cell_renderer_pixbuf_new(); | |
1943 gtk_tree_view_column_pack_start(col, rend, FALSE); | |
1944 gtk_tree_view_column_add_attribute(col, rend, "pixbuf", 1); | |
1945 rend = gtk_cell_renderer_text_new(); | |
1946 gtk_tree_view_column_pack_start(col, rend, TRUE); | |
1947 gtk_tree_view_column_add_attribute(col, rend, "text", 0); | |
1948 | |
1949 gtk_tree_view_append_column(GTK_TREE_VIEW (tree), col); | |
1950 gtk_tree_view_set_expander_column(GTK_TREE_VIEW(tree), col); | |
1951 gtk_tree_view_set_headers_visible(GTK_TREE_VIEW(tree), FALSE); | |
1952 #else | |
1910 tree = gtk_tree_new(); | 1953 tree = gtk_tree_new(); |
1954 #endif | |
1911 if(!tree) | 1955 if(!tree) |
1912 { | 1956 { |
1913 gtk_widget_destroy(tmp); | 1957 gtk_widget_destroy(tmp); |
1914 DW_MUTEX_UNLOCK; | 1958 DW_MUTEX_UNLOCK; |
1915 return FALSE; | 1959 return FALSE; |
1916 } | 1960 } |
1917 gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM); | |
1918 gtk_tree_set_selection_mode(GTK_TREE(tree), GTK_SELECTION_SINGLE); | |
1919 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); | 1961 gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(tmp), tree); |
1962 #if GTK_MAJOR_VERSION < 2 | |
1920 /* Set the selection mode */ | 1963 /* Set the selection mode */ |
1921 gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); | 1964 gtk_tree_set_selection_mode (GTK_TREE(tree), GTK_SELECTION_SINGLE); |
1965 gtk_tree_set_view_mode(GTK_TREE(tree), GTK_TREE_VIEW_ITEM); | |
1966 #endif | |
1922 | 1967 |
1923 gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); | 1968 gtk_object_set_user_data(GTK_OBJECT(tmp), (gpointer)tree); |
1924 gtk_widget_show(tree); | 1969 gtk_widget_show(tree); |
1925 | 1970 |
1926 DW_MUTEX_UNLOCK; | 1971 DW_MUTEX_UNLOCK; |
3147 * parent: Parent handle or 0 if root. | 3192 * parent: Parent handle or 0 if root. |
3148 * itemdata: Item specific data. | 3193 * itemdata: Item specific data. |
3149 */ | 3194 */ |
3150 HWND dw_tree_insert_after(HWND handle, HWND item, char *title, unsigned long icon, HWND parent, void *itemdata) | 3195 HWND dw_tree_insert_after(HWND handle, HWND item, char *title, unsigned long icon, HWND parent, void *itemdata) |
3151 { | 3196 { |
3197 #if GTK_MAJOR_VERSION > 1 | |
3198 GtkWidget *tree; | |
3199 GtkTreeIter *iter; | |
3200 GtkTreeStore *store; | |
3201 GdkPixbuf *pixbuf; | |
3202 HWND retval = 0; | |
3203 int _locked_by_me = FALSE; | |
3204 | |
3205 if(!handle) | |
3206 return NULL; | |
3207 | |
3208 DW_MUTEX_LOCK; | |
3209 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) | |
3210 && GTK_IS_TREE_VIEW(tree) && | |
3211 (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) | |
3212 { | |
3213 iter = malloc(sizeof(GtkTreeIter)); | |
3214 pixbuf = _find_pixbuf(icon); | |
3215 | |
3216 gtk_tree_store_insert_after(store, iter, (GtkTreeIter *)parent, (GtkTreeIter *)item); | |
3217 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, -1); | |
3218 retval = (HWND)iter; | |
3219 } | |
3220 DW_MUTEX_UNLOCK; | |
3221 | |
3222 return retval; | |
3223 #else | |
3152 GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap; | 3224 GtkWidget *newitem, *tree, *subtree, *label, *hbox, *pixmap; |
3153 GdkPixmap *gdkpix; | 3225 GdkPixmap *gdkpix; |
3154 GdkBitmap *gdkbmp = NULL; | 3226 GdkBitmap *gdkbmp = NULL; |
3155 int position = -1; | 3227 int position = -1; |
3156 int _locked_by_me = FALSE; | 3228 int _locked_by_me = FALSE; |
3230 gtk_tree_item_expand(GTK_TREE_ITEM(newitem)); | 3302 gtk_tree_item_expand(GTK_TREE_ITEM(newitem)); |
3231 gtk_tree_item_collapse(GTK_TREE_ITEM(newitem)); | 3303 gtk_tree_item_collapse(GTK_TREE_ITEM(newitem)); |
3232 gtk_widget_show(newitem); | 3304 gtk_widget_show(newitem); |
3233 DW_MUTEX_UNLOCK; | 3305 DW_MUTEX_UNLOCK; |
3234 return newitem; | 3306 return newitem; |
3307 #endif | |
3235 } | 3308 } |
3236 | 3309 |
3237 /* | 3310 /* |
3238 * Inserts an item into a tree window (widget). | 3311 * Inserts an item into a tree window (widget). |
3239 * Parameters: | 3312 * Parameters: |
3243 * parent: Parent handle or 0 if root. | 3316 * parent: Parent handle or 0 if root. |
3244 * itemdata: Item specific data. | 3317 * itemdata: Item specific data. |
3245 */ | 3318 */ |
3246 HWND dw_tree_insert(HWND handle, char *title, unsigned long icon, HWND parent, void *itemdata) | 3319 HWND dw_tree_insert(HWND handle, char *title, unsigned long icon, HWND parent, void *itemdata) |
3247 { | 3320 { |
3321 #if GTK_MAJOR_VERSION > 1 | |
3322 GtkWidget *tree; | |
3323 GtkTreeIter *iter; | |
3324 GtkTreeStore *store; | |
3325 GdkPixbuf *pixbuf; | |
3326 HWND retval = 0; | |
3327 int _locked_by_me = FALSE; | |
3328 | |
3329 if(!handle) | |
3330 return NULL; | |
3331 | |
3332 DW_MUTEX_LOCK; | |
3333 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) | |
3334 && GTK_IS_TREE_VIEW(tree) && | |
3335 (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) | |
3336 { | |
3337 iter = malloc(sizeof(GtkTreeIter)); | |
3338 | |
3339 pixbuf = _find_pixbuf(icon); | |
3340 | |
3341 gtk_tree_store_append (store, iter, (GtkTreeIter *)parent); | |
3342 gtk_tree_store_set (store, iter, 0, title, 1, pixbuf, -1); | |
3343 retval = (HWND)iter; | |
3344 } | |
3345 DW_MUTEX_UNLOCK; | |
3346 | |
3347 return retval; | |
3348 #else | |
3248 GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; | 3349 GtkWidget *item, *tree, *subtree, *label, *hbox, *pixmap; |
3249 GdkPixmap *gdkpix; | 3350 GdkPixmap *gdkpix; |
3250 GdkBitmap *gdkbmp = NULL; | 3351 GdkBitmap *gdkbmp = NULL; |
3251 int _locked_by_me = FALSE; | 3352 int _locked_by_me = FALSE; |
3252 | 3353 |
3319 gtk_tree_item_expand(GTK_TREE_ITEM(item)); | 3420 gtk_tree_item_expand(GTK_TREE_ITEM(item)); |
3320 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); | 3421 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); |
3321 gtk_widget_show(item); | 3422 gtk_widget_show(item); |
3322 DW_MUTEX_UNLOCK; | 3423 DW_MUTEX_UNLOCK; |
3323 return item; | 3424 return item; |
3425 #endif | |
3324 } | 3426 } |
3325 | 3427 |
3326 /* | 3428 /* |
3327 * Sets the text and icon of an item in a tree window (widget). | 3429 * Sets the text and icon of an item in a tree window (widget). |
3328 * Parameters: | 3430 * Parameters: |
3331 * title: The text title of the entry. | 3433 * title: The text title of the entry. |
3332 * icon: Handle to coresponding icon. | 3434 * icon: Handle to coresponding icon. |
3333 */ | 3435 */ |
3334 void dw_tree_set(HWND handle, HWND item, char *title, unsigned long icon) | 3436 void dw_tree_set(HWND handle, HWND item, char *title, unsigned long icon) |
3335 { | 3437 { |
3438 #if GTK_MAJOR_VERSION > 1 | |
3439 GtkWidget *tree; | |
3440 GtkTreeStore *store; | |
3441 GdkPixbuf *pixbuf; | |
3442 int _locked_by_me = FALSE; | |
3443 | |
3444 if(!handle) | |
3445 return; | |
3446 | |
3447 DW_MUTEX_LOCK; | |
3448 if((tree = (GtkWidget *)gtk_object_get_user_data(GTK_OBJECT(handle))) | |
3449 && GTK_IS_TREE_VIEW(tree) && | |
3450 (store = (GtkTreeStore *)gtk_object_get_data(GTK_OBJECT(tree), "_dw_tree_store"))) | |
3451 { | |
3452 pixbuf = _find_pixbuf(icon); | |
3453 | |
3454 gtk_tree_store_set (store, (GtkTreeIter *)item, 0, title, 1, pixbuf, -1); | |
3455 } | |
3456 DW_MUTEX_UNLOCK; | |
3457 #else | |
3336 GtkWidget *label, *hbox, *pixmap; | 3458 GtkWidget *label, *hbox, *pixmap; |
3337 GdkPixmap *gdkpix; | 3459 GdkPixmap *gdkpix; |
3338 GdkBitmap *gdkbmp = NULL; | 3460 GdkBitmap *gdkbmp = NULL; |
3339 char *oldtext; | 3461 char *oldtext; |
3340 int _locked_by_me = FALSE; | 3462 int _locked_by_me = FALSE; |
3363 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); | 3485 gtk_box_pack_start(GTK_BOX(hbox), label, FALSE, TRUE, 0); |
3364 gtk_widget_show(label); | 3486 gtk_widget_show(label); |
3365 gtk_widget_show(pixmap); | 3487 gtk_widget_show(pixmap); |
3366 gtk_widget_show(hbox); | 3488 gtk_widget_show(hbox); |
3367 DW_MUTEX_UNLOCK; | 3489 DW_MUTEX_UNLOCK; |
3490 #endif | |
3368 } | 3491 } |
3369 | 3492 |
3370 /* | 3493 /* |
3371 * Sets the item data of a tree item. | 3494 * Sets the item data of a tree item. |
3372 * Parameters: | 3495 * Parameters: |
3392 * handle: Handle to the tree window (widget) to be selected. | 3515 * handle: Handle to the tree window (widget) to be selected. |
3393 * item: Handle to the item to be selected. | 3516 * item: Handle to the item to be selected. |
3394 */ | 3517 */ |
3395 void dw_tree_item_select(HWND handle, HWND item) | 3518 void dw_tree_item_select(HWND handle, HWND item) |
3396 { | 3519 { |
3520 #if GTK_MAJOR_VERSION > 1 | |
3521 #else | |
3397 GtkWidget *lastselect, *tree; | 3522 GtkWidget *lastselect, *tree; |
3398 int _locked_by_me = FALSE; | 3523 int _locked_by_me = FALSE; |
3399 | 3524 |
3400 if(!handle || !item) | 3525 if(!handle || !item) |
3401 return; | 3526 return; |
3406 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) | 3531 if(lastselect && GTK_IS_TREE_ITEM(lastselect)) |
3407 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); | 3532 gtk_tree_item_deselect(GTK_TREE_ITEM(lastselect)); |
3408 gtk_tree_item_select(GTK_TREE_ITEM(item)); | 3533 gtk_tree_item_select(GTK_TREE_ITEM(item)); |
3409 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item); | 3534 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", (gpointer)item); |
3410 DW_MUTEX_UNLOCK; | 3535 DW_MUTEX_UNLOCK; |
3536 #endif | |
3411 } | 3537 } |
3412 | 3538 |
3413 /* | 3539 /* |
3414 * Removes all nodes from a tree. | 3540 * Removes all nodes from a tree. |
3415 * Parameters: | 3541 * Parameters: |
3416 * handle: Handle to the window (widget) to be cleared. | 3542 * handle: Handle to the window (widget) to be cleared. |
3417 */ | 3543 */ |
3418 void dw_tree_clear(HWND handle) | 3544 void dw_tree_clear(HWND handle) |
3419 { | 3545 { |
3546 #if GTK_MAJOR_VERSION > 1 | |
3420 GtkWidget *tree; | 3547 GtkWidget *tree; |
3421 int _locked_by_me = FALSE; | 3548 int _locked_by_me = FALSE; |
3422 | 3549 |
3423 if(!handle) | 3550 if(!handle) |
3424 return; | 3551 return; |
3431 return; | 3558 return; |
3432 } | 3559 } |
3433 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL); | 3560 gtk_object_set_data(GTK_OBJECT(tree), "lastselect", NULL); |
3434 gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); | 3561 gtk_tree_clear_items(GTK_TREE(tree), 0, 1000000); |
3435 DW_MUTEX_UNLOCK; | 3562 DW_MUTEX_UNLOCK; |
3563 #endif | |
3436 } | 3564 } |
3437 | 3565 |
3438 /* | 3566 /* |
3439 * Expands a node on a tree. | 3567 * Expands a node on a tree. |
3440 * Parameters: | 3568 * Parameters: |
3441 * handle: Handle to the tree window (widget). | 3569 * handle: Handle to the tree window (widget). |
3442 * item: Handle to node to be expanded. | 3570 * item: Handle to node to be expanded. |
3443 */ | 3571 */ |
3444 void dw_tree_expand(HWND handle, HWND item) | 3572 void dw_tree_expand(HWND handle, HWND item) |
3445 { | 3573 { |
3574 #if GTK_MAJOR_VERSION > 1 | |
3575 #else | |
3446 int _locked_by_me = FALSE; | 3576 int _locked_by_me = FALSE; |
3447 | 3577 |
3448 if(!handle || !item) | 3578 if(!handle || !item) |
3449 return; | 3579 return; |
3450 | 3580 |
3451 DW_MUTEX_LOCK; | 3581 DW_MUTEX_LOCK; |
3452 if(GTK_IS_TREE_ITEM(item)) | 3582 if(GTK_IS_TREE_ITEM(item)) |
3453 gtk_tree_item_expand(GTK_TREE_ITEM(item)); | 3583 gtk_tree_item_expand(GTK_TREE_ITEM(item)); |
3454 DW_MUTEX_UNLOCK; | 3584 DW_MUTEX_UNLOCK; |
3585 #endif | |
3455 } | 3586 } |
3456 | 3587 |
3457 /* | 3588 /* |
3458 * Collapses a node on a tree. | 3589 * Collapses a node on a tree. |
3459 * Parameters: | 3590 * Parameters: |
3460 * handle: Handle to the tree window (widget). | 3591 * handle: Handle to the tree window (widget). |
3461 * item: Handle to node to be collapsed. | 3592 * item: Handle to node to be collapsed. |
3462 */ | 3593 */ |
3463 void dw_tree_collapse(HWND handle, HWND item) | 3594 void dw_tree_collapse(HWND handle, HWND item) |
3464 { | 3595 { |
3596 #if GTK_MAJOR_VERSION > 1 | |
3597 #else | |
3465 int _locked_by_me = FALSE; | 3598 int _locked_by_me = FALSE; |
3466 | 3599 |
3467 if(!handle || !item) | 3600 if(!handle || !item) |
3468 return; | 3601 return; |
3469 | 3602 |
3470 DW_MUTEX_LOCK; | 3603 DW_MUTEX_LOCK; |
3471 if(GTK_IS_TREE_ITEM(item)) | 3604 if(GTK_IS_TREE_ITEM(item)) |
3472 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); | 3605 gtk_tree_item_collapse(GTK_TREE_ITEM(item)); |
3473 DW_MUTEX_UNLOCK; | 3606 DW_MUTEX_UNLOCK; |
3607 #endif | |
3474 } | 3608 } |
3475 | 3609 |
3476 /* | 3610 /* |
3477 * Removes a node from a tree. | 3611 * Removes a node from a tree. |
3478 * Parameters: | 3612 * Parameters: |
3479 * handle: Handle to the window (widget) to be cleared. | 3613 * handle: Handle to the window (widget) to be cleared. |
3480 * item: Handle to node to be deleted. | 3614 * item: Handle to node to be deleted. |
3481 */ | 3615 */ |
3482 void dw_tree_delete(HWND handle, HWND item) | 3616 void dw_tree_delete(HWND handle, HWND item) |
3483 { | 3617 { |
3618 #if GTK_MAJOR_VERSION > 1 | |
3619 #else | |
3484 GtkWidget *tree, *lastselect, *parenttree; | 3620 GtkWidget *tree, *lastselect, *parenttree; |
3485 int _locked_by_me = FALSE; | 3621 int _locked_by_me = FALSE; |
3486 | 3622 |
3487 if(!handle || !item || !GTK_IS_WIDGET(handle) || !GTK_IS_WIDGET(item)) | 3623 if(!handle || !item || !GTK_IS_WIDGET(handle) || !GTK_IS_WIDGET(item)) |
3488 return; | 3624 return; |
3506 } | 3642 } |
3507 | 3643 |
3508 if(parenttree && GTK_IS_WIDGET(parenttree)) | 3644 if(parenttree && GTK_IS_WIDGET(parenttree)) |
3509 gtk_container_remove(GTK_CONTAINER(parenttree), item); | 3645 gtk_container_remove(GTK_CONTAINER(parenttree), item); |
3510 DW_MUTEX_UNLOCK; | 3646 DW_MUTEX_UNLOCK; |
3647 #endif | |
3511 } | 3648 } |
3512 | 3649 |
3513 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) | 3650 int _dw_container_setup(HWND handle, unsigned long *flags, char **titles, int count, int separator, int extra) |
3514 { | 3651 { |
3515 GtkWidget *clist; | 3652 GtkWidget *clist; |