File indexing completed on 2024-05-12 17:05:51

0001 /*
0002     this file is part of the oxygen gtk engine
0003     SPDX-FileCopyrightText: 2010 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0004     SPDX-FileCopyrightText: 2010 Ruslan Kabatsayev <b7.10110111@gmail.com>
0005 
0006     SPDX-License-Identifier: LGPL-2.0-or-later
0007 */
0008 
0009 #include "oxygentreeviewengine.h"
0010 
0011 namespace Oxygen
0012 {
0013 
0014 
0015     //____________________________________________________________________
0016     TreeViewEngine::TreeViewEngine( Animations* parent ):
0017         GenericEngine<TreeViewData>( parent ),
0018         _cursorLoaded( false ),
0019         _cursor( 0L )
0020     {}
0021 
0022     //____________________________________________________________________
0023     TreeViewEngine::~TreeViewEngine( void )
0024     { if( _cursor ) gdk_cursor_unref( _cursor ); }
0025 
0026     //____________________________________________________________________
0027     bool TreeViewEngine::registerWidget( GtkWidget* widget )
0028     {
0029         if( !GenericEngine<TreeViewData>::registerWidget( widget ) ) return false;
0030         else if( GTK_IS_TREE_VIEW( widget ) )
0031         {
0032 
0033             // always disable treelines.
0034             /* tree lines are rendered by the style, in order to be able to draw them with custom color */
0035             GtkTreeView* treeView( GTK_TREE_VIEW( widget ) );
0036             gtk_tree_view_set_enable_tree_lines( treeView, false );
0037 
0038             GtkWidget* parent( gtk_widget_get_parent( widget ) );
0039             GtkScrolledWindow* scrolledWindow(0);
0040             if(
0041                 GTK_IS_SCROLLED_WINDOW( parent ) &&
0042                 gtk_scrolled_window_get_shadow_type( (scrolledWindow = GTK_SCROLLED_WINDOW( parent ) ) ) != GTK_SHADOW_IN &&
0043                 !Gtk::gtk_parent_is_shadow_in( parent ) )
0044             { gtk_scrolled_window_set_shadow_type( scrolledWindow, GTK_SHADOW_IN ); }
0045 
0046             // load cursor if needed
0047             if( !_cursorLoaded )
0048             {
0049                 assert( !_cursor );
0050                 GdkDisplay *display( gtk_widget_get_display( widget ) );
0051                 _cursor = gdk_cursor_new_from_name( display, "row-resize" );
0052                 _cursorLoaded = true;
0053             }
0054 
0055             // pass cursor to data
0056             data().value( widget ).setCursor( _cursor );
0057 
0058         }
0059 
0060         return true;
0061 
0062     }
0063 
0064 
0065 }