File indexing completed on 2024-05-05 05:34:56

0001 /*
0002     this file is part of the oxygen gtk engine
0003     SPDX-FileCopyrightText: 2014 Hugo Pereira Da Costa <hugo.pereira@free.fr>
0004 
0005     based on the Null Theme Engine for Gtk+.
0006     SPDX-FileCopyrightText: 2008 Robert Staudinger <robert.staudinger@gmail.com>
0007 
0008     SPDX-License-Identifier: LGPL-2.0-or-later
0009 */
0010 
0011 #include "oxygeninfowidget.h"
0012 #include "oxygenversion.h"
0013 #include "config.h"
0014 
0015 #include <iostream>
0016 #include <string>
0017 #include <sstream>
0018 
0019 namespace Oxygen
0020 {
0021 
0022     //____________________________________________________
0023     InfoWidget::InfoWidget( void )
0024     {
0025 
0026         // main widget
0027         GtkWidget* mainWidget( gtk_vbox_new( false, 0 ) );
0028         gtk_box_set_spacing( GTK_BOX( mainWidget ), 5 );
0029         setWidget( mainWidget );
0030 
0031         // setup
0032         setName( "About" );
0033         setComments( "Shows information about this application" );
0034         setIconName( "dialog-information" );
0035         realize();
0036 
0037         // about information
0038         {
0039             GtkWidget* frame( gtk_frame_new( "About" ) );
0040             gtk_box_pack_start( GTK_BOX( mainWidget ), frame, false, true, 0 );
0041             gtk_widget_show( frame );
0042 
0043             // vbox
0044             GtkWidget* box( gtk_vbox_new( false, 0 ) );
0045             gtk_box_set_spacing( GTK_BOX( box ), 5 );
0046             gtk_container_add( GTK_CONTAINER( frame ), box );
0047             gtk_container_set_border_width( GTK_CONTAINER( box ), 10 );
0048             gtk_widget_show( box );
0049 
0050             // application name
0051             GtkWidget* label;
0052             label = boldLabel();
0053             gtk_label_set_text( GTK_LABEL( label ), "oxygen-gtk-demo" );
0054             gtk_label_set_selectable( GTK_LABEL( label ), true );
0055             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0056             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0057             gtk_widget_show( label );
0058 
0059             // version
0060             {
0061                 std::ostringstream stream;
0062                 stream << "version " << OXYGEN_VERSION;
0063                 label = boldLabel();
0064                 gtk_label_set_selectable( GTK_LABEL( label ), true );
0065                 gtk_label_set_text( GTK_LABEL( label ), stream.str().c_str() );
0066                 gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0067                 gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0068                 gtk_widget_show( label );
0069             }
0070 
0071             // gtk version
0072             {
0073                 std::ostringstream stream;
0074                 stream << "using gtk version " << Version::gtkVersion();
0075                 gtk_label_set_selectable( GTK_LABEL( label ), true );
0076                 label = gtk_label_new( stream.str().c_str() );
0077                 gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0078                 gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0079                 gtk_widget_show( label );
0080             }
0081 
0082             // library version
0083             const std::string libVersion( Version::libVersion() );
0084             if( !libVersion.empty() )
0085             {
0086                 std::ostringstream stream;
0087                 stream << "using oxygen-gtk version " << libVersion;
0088                 gtk_label_set_selectable( GTK_LABEL( label ), true );
0089                 label = gtk_label_new( stream.str().c_str() );
0090                 gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0091                 gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0092                 gtk_widget_show( label );
0093             }
0094 
0095             label = gtk_label_new( "" );
0096             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0097             gtk_widget_show( label );
0098 
0099             // description
0100             label = gtk_label_new( "Gtk+ widgets preview for Oxygen" );
0101             gtk_label_set_selectable( GTK_LABEL( label ), true );
0102             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0103             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0104             gtk_widget_show( label );
0105 
0106             label = gtk_label_new( "" );
0107             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0108             gtk_widget_show( label );
0109 
0110             label = gtk_label_new( "(C) 2010 Hugo Pereira Da Costa, Ruslan Kabatsayev, Cédric Bellegarde" );
0111             gtk_label_set_selectable( GTK_LABEL( label ), true );
0112             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0113             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0114             gtk_widget_show( label );
0115 
0116             label = gtk_label_new( "" );
0117             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0118             gtk_widget_show( label );
0119 
0120             label = gtk_label_new( 0L );
0121             gtk_label_set_markup( GTK_LABEL( label ), "<a href=\"https://projects.kde.org/projects/playground/artwork/oxygen-gtk\">https://projects.kde.org/projects/playground/artwork/oxygen-gtk</a>" );
0122             gtk_label_set_selectable( GTK_LABEL( label ), true );
0123             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0124             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0125             gtk_widget_show( label );
0126 
0127             label = gtk_label_new( 0L );
0128             gtk_label_set_markup( GTK_LABEL( label ), "<a href=\"http://kde-look.org/content/show.php/?content=136216\">http://kde-look.org/content/show.php/?content=136216</a>" );
0129             gtk_label_set_selectable( GTK_LABEL( label ), true );
0130             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0131             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0132             gtk_widget_show( label );
0133 
0134             label = gtk_label_new( "" );
0135             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0136             gtk_widget_show( label );
0137 
0138             label = gtk_label_new( 0L );
0139             gtk_label_set_selectable( GTK_LABEL( label ), true );
0140             gtk_label_set_markup( GTK_LABEL( label ), "License: <a href=\"http://www.gnu.org/licenses/lgpl-2.1.html\">GNU Lesser General Public License Version 2</a>" );
0141             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0142             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0143             gtk_widget_show( label );
0144 
0145 
0146         }
0147 
0148         // authors information
0149         {
0150             GtkWidget* frame( gtk_frame_new( "Authors" ) );
0151             gtk_box_pack_start( GTK_BOX( mainWidget ), frame, false, true, 0 );
0152             gtk_widget_show( frame );
0153 
0154             // vbox
0155             GtkWidget* box( gtk_vbox_new( false, 0 ) );
0156             gtk_box_set_spacing( GTK_BOX( box ), 5 );
0157             gtk_container_add( GTK_CONTAINER( frame ), box );
0158             gtk_container_set_border_width( GTK_CONTAINER( box ), 10 );
0159             gtk_widget_show( box );
0160 
0161             GtkWidget* label = gtk_label_new( 0L );
0162             gtk_label_set_markup( GTK_LABEL( label ), "Please use <a href=\"https://bugs.kde.org\">bugs.kde.org</a> to report bugs" );
0163             gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0164             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0165             gtk_widget_show( label );
0166 
0167             label = gtk_label_new( "" );
0168             gtk_box_pack_start( GTK_BOX( box ), label, true, true, 0 );
0169             gtk_widget_show( label );
0170 
0171             // table
0172             GtkWidget* table( gtk_table_new( 3, 3, false ) );
0173             gtk_box_pack_start( GTK_BOX( box ), table, false, false, 0 );
0174             gtk_container_set_border_width( GTK_CONTAINER( table ), 0 );
0175             gtk_table_set_row_spacings( GTK_TABLE( table ), 5 );
0176             gtk_table_set_col_spacings( GTK_TABLE( table ), 5 );
0177             gtk_widget_show( table );
0178 
0179             // spacing
0180             GtkWidget* spacing( gtk_label_new( "" ) );
0181             gtk_table_attach( GTK_TABLE( table ), spacing, 2, 3, 0, 1, GTK_EXPAND, GTK_FILL, 2, 0  );
0182             gtk_widget_show( spacing );
0183 
0184             addAuthor( table, 0, "<a href=\"mailto:hugo.pereira@free.fr\">Hugo Pereira Da Costa</a>", "Maintainer and developer" );
0185             addAuthor( table, 1, "<a href=\"mailto:b7.10110111@gmail.com\">Ruslan Kabatsayev</a>", "Maintainer and developer" );
0186             addAuthor( table, 2, "<a href=\"mailto:cedric.bellegarde@ensat.fr\">Cédric Bellegarde</a>", "Developer" );
0187 
0188         }
0189 
0190     }
0191 
0192     //____________________________________________________
0193     InfoWidget::~InfoWidget( void )
0194     {}
0195 
0196     //____________________________________________________
0197     GtkWidget* InfoWidget::boldLabel( void ) const
0198     {
0199         GtkWidget* label = gtk_label_new( 0L );
0200 
0201         // create pango attributes list
0202         PangoAttrList* attributes( pango_attr_list_new() );
0203         pango_attr_list_insert( attributes, pango_attr_weight_new( PANGO_WEIGHT_BOLD ) );
0204 
0205         GValue val = { 0, };
0206         g_value_init(&val, PANGO_TYPE_ATTR_LIST );
0207         g_value_set_boxed( &val, attributes );
0208         g_object_set_property( G_OBJECT( label ), "attributes", &val );
0209 
0210         pango_attr_list_unref( attributes );
0211 
0212         return label;
0213     }
0214 
0215     //____________________________________________________
0216     void InfoWidget::addAuthor( GtkWidget* table, int row, const std::string& author, const std::string& comment ) const
0217     {
0218 
0219         GtkWidget* label;
0220         label = gtk_label_new( 0L );
0221         gtk_label_set_markup( GTK_LABEL( label ), author.c_str() );
0222         gtk_misc_set_alignment( GTK_MISC( label ), 1, 0.5 );
0223         gtk_table_attach( GTK_TABLE( table ), label, 0, 1, row, row+1, GTK_FILL, GTK_FILL, 0, 0 );
0224         gtk_widget_show( label );
0225 
0226         label = gtk_label_new( 0L );
0227         gtk_label_set_markup( GTK_LABEL( label ), comment.c_str() );
0228         gtk_misc_set_alignment( GTK_MISC( label ), 0, 0.5 );
0229         gtk_table_attach( GTK_TABLE( table ), label, 1, 2, row, row+1, GTK_FILL, GTK_FILL, 0, 0 );
0230         gtk_widget_show( label );
0231 
0232         return;
0233 
0234     }
0235 
0236 }