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 }