- if(g_TextureBrowser.m_tags)
- {
- g_TextureBrowser.m_all_tags_list = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);
- GtkTreeSortable* sortable = GTK_TREE_SORTABLE(g_TextureBrowser.m_all_tags_list);
- gtk_tree_sortable_set_sort_column_id(sortable, TAG_COLUMN, GTK_SORT_ASCENDING);
-
- TagBuilder.GetAllTags(g_TextureBrowser.m_all_tags);
- TextureBrowser_buildTagList();
- }
-
- GlobalShaderSystem().setActiveShadersChangedNotify(ReferenceCaller<TextureBrowser, TextureBrowser_activeShadersChanged>(g_TextureBrowser));
-
- g_TextureBrowser.m_parent = toplevel;
-
- GtkWidget* table = gtk_table_new(3, 3, FALSE);
- GtkWidget* frame_table = NULL;
- GtkWidget* vbox = gtk_vbox_new(FALSE, 0);
- gtk_table_attach(GTK_TABLE(table), vbox, 0, 1, 1, 3, GTK_FILL, GTK_FILL, 0, 0);
- gtk_widget_show(vbox);
-
- { // menu bar
- GtkWidget* menu_bar = gtk_menu_bar_new();
- GtkWidget* menu_view = gtk_menu_new();
- GtkWidget* view_item = (GtkWidget*)TextureBrowser_constructViewMenu(GTK_MENU(menu_view));
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(view_item), menu_view);
- gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), view_item);
-
- GtkWidget* menu_tools = gtk_menu_new();
- GtkWidget* tools_item = (GtkWidget*)TextureBrowser_constructToolsMenu(GTK_MENU(menu_tools));
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(tools_item), menu_tools);
- gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), tools_item);
-
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* menu_tags = gtk_menu_new();
- GtkWidget* tags_item = (GtkWidget*)TextureBrowser_constructTagsMenu(GTK_MENU(menu_tags));
- gtk_menu_item_set_submenu(GTK_MENU_ITEM(tags_item), menu_tags);
- gtk_menu_bar_append(GTK_MENU_BAR(menu_bar), tags_item);
- }
-
- gtk_table_attach(GTK_TABLE (table), menu_bar, 0, 3, 0, 1, GTK_FILL, GTK_SHRINK, 0, 0);
- gtk_widget_show(menu_bar);
- }
- { // tag tool bar
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* toolbar = TextureBrowser_constructTagToolbar();
-
- gtk_box_pack_start(GTK_BOX(vbox), toolbar, FALSE, FALSE, 0);
- gtk_widget_show(toolbar);
- }
- }
- { // gl_widget scrollbar
- GtkWidget* w = gtk_vscrollbar_new(GTK_ADJUSTMENT(gtk_adjustment_new (0,0,0,1,1,1)));
- gtk_table_attach(GTK_TABLE (table), w, 2, 3, 1, 2, GTK_SHRINK, GTK_FILL, 0, 0);
- gtk_widget_show(w);
- g_TextureBrowser.m_texture_scroll = w;
-
- GtkAdjustment *vadjustment = gtk_range_get_adjustment (GTK_RANGE (g_TextureBrowser.m_texture_scroll));
- g_signal_connect(G_OBJECT(vadjustment), "value_changed", G_CALLBACK(TextureBrowser_verticalScroll), &g_TextureBrowser);
-
- widget_set_visible(g_TextureBrowser.m_texture_scroll, g_TextureBrowser.m_showTextureScrollbar);
- }
- { // TreeView
- g_TextureBrowser.m_scr_win_tree = gtk_scrolled_window_new(NULL, NULL);
- gtk_container_set_border_width(GTK_CONTAINER(g_TextureBrowser.m_scr_win_tree), 0);
-
- // vertical only scrolling for treeview
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(g_TextureBrowser.m_scr_win_tree), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- gtk_box_pack_end(GTK_BOX(vbox), g_TextureBrowser.m_scr_win_tree, TRUE, TRUE, 0);
- gtk_widget_show(g_TextureBrowser.m_scr_win_tree);
-
- TextureBrowser_createTreeViewTree();
-
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW(g_TextureBrowser.m_scr_win_tree), GTK_WIDGET(g_TextureBrowser.m_treeViewTree));
- gtk_widget_show(GTK_WIDGET(g_TextureBrowser.m_treeViewTree));
- }
- { // TreeView for tags
- if(g_TextureBrowser.m_tags)
- {
- g_TextureBrowser.m_scr_win_tags = gtk_scrolled_window_new(NULL, NULL);
- gtk_container_set_border_width(GTK_CONTAINER(g_TextureBrowser.m_scr_win_tags), 0);
-
- // vertical only scrolling for treeview
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW(g_TextureBrowser.m_scr_win_tags), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- gtk_box_pack_end(GTK_BOX(vbox), g_TextureBrowser.m_scr_win_tags, TRUE, TRUE, 0);
-
- TextureBrowser_createTreeViewTags();
-
- GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(g_TextureBrowser.m_treeViewTags));
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
-
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (g_TextureBrowser.m_scr_win_tags), GTK_WIDGET (g_TextureBrowser.m_treeViewTags));
- gtk_widget_show(GTK_WIDGET(g_TextureBrowser.m_treeViewTags));
- }
- }
- { // gl_widget
- g_TextureBrowser.m_gl_widget = glwidget_new(FALSE);
- gtk_widget_ref(g_TextureBrowser.m_gl_widget);
-
- gtk_widget_set_events(g_TextureBrowser.m_gl_widget, GDK_DESTROY | GDK_EXPOSURE_MASK | GDK_BUTTON_PRESS_MASK | GDK_BUTTON_RELEASE_MASK | GDK_POINTER_MOTION_MASK | GDK_SCROLL_MASK);
- GTK_WIDGET_SET_FLAGS(g_TextureBrowser.m_gl_widget, GTK_CAN_FOCUS);
-
- gtk_table_attach_defaults(GTK_TABLE(table), g_TextureBrowser.m_gl_widget, 1, 2, 1, 2);
- gtk_widget_show(g_TextureBrowser.m_gl_widget);
-
- g_TextureBrowser.m_sizeHandler = g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "size_allocate", G_CALLBACK(TextureBrowser_size_allocate), &g_TextureBrowser);
- g_TextureBrowser.m_exposeHandler = g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "expose_event", G_CALLBACK(TextureBrowser_expose), &g_TextureBrowser);
-
- g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "button_press_event", G_CALLBACK(TextureBrowser_button_press), &g_TextureBrowser);
- g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "button_release_event", G_CALLBACK(TextureBrowser_button_release), &g_TextureBrowser);
- g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "motion_notify_event", G_CALLBACK(TextureBrowser_motion), &g_TextureBrowser);
- g_signal_connect(G_OBJECT(g_TextureBrowser.m_gl_widget), "scroll_event", G_CALLBACK(TextureBrowser_scroll), &g_TextureBrowser);
- }
- { // tag frame
- if(g_TextureBrowser.m_tags)
- {
- frame_table = gtk_table_new(3, 3, FALSE);
-
- g_TextureBrowser.m_tag_frame = gtk_frame_new("Tag assignment");
- gtk_frame_set_label_align(GTK_FRAME(g_TextureBrowser.m_tag_frame), 0.5, 0.5);
- gtk_frame_set_shadow_type(GTK_FRAME(g_TextureBrowser.m_tag_frame), GTK_SHADOW_NONE);
-
- gtk_table_attach(GTK_TABLE(table), g_TextureBrowser.m_tag_frame, 1, 3, 2, 3, GTK_FILL, GTK_SHRINK, 0, 0);
-
- // set the size of the tag frame
- gtk_widget_show(frame_table);
-
- gtk_container_add (GTK_CONTAINER(g_TextureBrowser.m_tag_frame), frame_table);
- }
- }
- { // assigned tag list
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* scrolled_win = gtk_scrolled_window_new(NULL, NULL);
- gtk_container_set_border_width(GTK_CONTAINER (scrolled_win), 0);
- gtk_scrolled_window_set_policy(GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- g_TextureBrowser.m_assigned_store = gtk_list_store_new(N_COLUMNS, G_TYPE_STRING);
-
- GtkTreeSortable* sortable = GTK_TREE_SORTABLE(g_TextureBrowser.m_assigned_store);
- gtk_tree_sortable_set_sort_column_id(sortable, TAG_COLUMN, GTK_SORT_ASCENDING);
-
- GtkCellRenderer* renderer = gtk_cell_renderer_text_new();
-
- g_TextureBrowser.m_assigned_tree = gtk_tree_view_new_with_model(GTK_TREE_MODEL (g_TextureBrowser.m_assigned_store));
- g_object_unref(G_OBJECT (g_TextureBrowser.m_assigned_store));
- g_signal_connect(g_TextureBrowser.m_assigned_tree, "row-activated", (GCallback) TextureBrowser_removeTags, NULL);
- gtk_tree_view_set_headers_visible(GTK_TREE_VIEW (g_TextureBrowser.m_assigned_tree), FALSE);
-
- GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(g_TextureBrowser.m_assigned_tree));
- gtk_tree_selection_set_mode(selection, GTK_SELECTION_MULTIPLE);
-
- GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes("", renderer, "text", TAG_COLUMN, NULL);
- gtk_tree_view_append_column(GTK_TREE_VIEW (g_TextureBrowser.m_assigned_tree), column);
- gtk_widget_show(g_TextureBrowser.m_assigned_tree);
-
- gtk_widget_show(scrolled_win);
- gtk_scrolled_window_add_with_viewport(GTK_SCROLLED_WINDOW (scrolled_win), GTK_WIDGET (g_TextureBrowser.m_assigned_tree));
-
- gtk_table_attach(GTK_TABLE(frame_table), scrolled_win, 0, 1, 1, 3, GTK_FILL, GTK_FILL, 0, 0);
- }
- }
- { // available tag list
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* scrolled_win = gtk_scrolled_window_new (NULL, NULL);
- gtk_container_set_border_width (GTK_CONTAINER (scrolled_win), 0);
- gtk_scrolled_window_set_policy (GTK_SCROLLED_WINDOW (scrolled_win), GTK_POLICY_NEVER, GTK_POLICY_ALWAYS);
-
- g_TextureBrowser.m_available_store = gtk_list_store_new (N_COLUMNS, G_TYPE_STRING);
- GtkTreeSortable* sortable = GTK_TREE_SORTABLE(g_TextureBrowser.m_available_store);
- gtk_tree_sortable_set_sort_column_id(sortable, TAG_COLUMN, GTK_SORT_ASCENDING);
-
- GtkCellRenderer* renderer = gtk_cell_renderer_text_new ();
-
- g_TextureBrowser.m_available_tree = gtk_tree_view_new_with_model (GTK_TREE_MODEL (g_TextureBrowser.m_available_store));
- g_object_unref (G_OBJECT (g_TextureBrowser.m_available_store));
- g_signal_connect(g_TextureBrowser.m_available_tree, "row-activated", (GCallback) TextureBrowser_assignTags, NULL);
- gtk_tree_view_set_headers_visible (GTK_TREE_VIEW (g_TextureBrowser.m_available_tree), FALSE);
-
- GtkTreeSelection* selection = gtk_tree_view_get_selection(GTK_TREE_VIEW(g_TextureBrowser.m_available_tree));
- gtk_tree_selection_set_mode (selection, GTK_SELECTION_MULTIPLE);
-
- GtkTreeViewColumn* column = gtk_tree_view_column_new_with_attributes ("", renderer, "text", TAG_COLUMN, NULL);
- gtk_tree_view_append_column (GTK_TREE_VIEW (g_TextureBrowser.m_available_tree), column);
- gtk_widget_show (g_TextureBrowser.m_available_tree);
-
- gtk_widget_show (scrolled_win);
- gtk_scrolled_window_add_with_viewport (GTK_SCROLLED_WINDOW (scrolled_win), GTK_WIDGET (g_TextureBrowser.m_available_tree));
-
- gtk_table_attach (GTK_TABLE (frame_table), scrolled_win, 2, 3, 1, 3, GTK_FILL, GTK_FILL, 0, 0);
- }
- }
- { // arrow buttons
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* m_btn_left = gtk_button_new();
- GtkWidget* m_btn_right = gtk_button_new();
- GtkWidget* m_arrow_left = gtk_arrow_new(GTK_ARROW_LEFT, GTK_SHADOW_OUT);
- GtkWidget* m_arrow_right = gtk_arrow_new(GTK_ARROW_RIGHT, GTK_SHADOW_OUT);
- gtk_container_add(GTK_CONTAINER(m_btn_left), m_arrow_left);
- gtk_container_add(GTK_CONTAINER(m_btn_right), m_arrow_right);
-
- // workaround. the size of the tag frame depends of the requested size of the arrow buttons.
- gtk_widget_set_size_request(m_arrow_left, -1, 68);
- gtk_widget_set_size_request(m_arrow_right, -1, 68);
-
- gtk_table_attach(GTK_TABLE(frame_table), m_btn_left, 1, 2, 1, 2, GTK_SHRINK, GTK_EXPAND, 0, 0);
- gtk_table_attach(GTK_TABLE(frame_table), m_btn_right, 1, 2, 2, 3, GTK_SHRINK, GTK_EXPAND, 0, 0);
-
- g_signal_connect(G_OBJECT (m_btn_left), "clicked", G_CALLBACK(TextureBrowser_assignTags), NULL);
- g_signal_connect(G_OBJECT (m_btn_right), "clicked", G_CALLBACK(TextureBrowser_removeTags), NULL);
-
- gtk_widget_show(m_btn_left);
- gtk_widget_show(m_btn_right);
- gtk_widget_show(m_arrow_left);
- gtk_widget_show(m_arrow_right);
- }
- }
- { // tag frame labels
- if(g_TextureBrowser.m_tags)
- {
- GtkWidget* m_lbl_assigned = gtk_label_new ("Assigned");
- GtkWidget* m_lbl_unassigned = gtk_label_new ("Available");
-
- gtk_table_attach (GTK_TABLE (frame_table), m_lbl_assigned, 0, 1, 0, 1, GTK_EXPAND, GTK_SHRINK, 0, 0);
- gtk_table_attach (GTK_TABLE (frame_table), m_lbl_unassigned, 2, 3, 0, 1, GTK_EXPAND, GTK_SHRINK, 0, 0);
-
- gtk_widget_show (m_lbl_assigned);
- gtk_widget_show (m_lbl_unassigned);
- }
- }
-
- // TODO do we need this?
- //gtk_container_set_focus_chain(GTK_CONTAINER(hbox_table), NULL);
-
- return table;