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;