]> git.lyx.org Git - features.git/commitdiff
Sexy new GTK about dialog
authorJohn Spray <spray@lyx.org>
Tue, 7 Feb 2006 00:48:47 +0000 (00:48 +0000)
committerJohn Spray <spray@lyx.org>
Tue, 7 Feb 2006 00:48:47 +0000 (00:48 +0000)
git-svn-id: svn://svn.lyx.org/lyx/lyx-devel/trunk@10820 a592a061-630c-0410-9148-cb99ea01b6c8

src/frontends/gtk/ChangeLog
src/frontends/gtk/GAboutlyx.C
src/frontends/gtk/GAboutlyx.h
src/frontends/gtk/glade/aboutlyx.glade

index f8c444ac8faf5d0b3d1973166983ba4da8be462b..451a9e7a1173b05187327a12a296f6bf0b2b0d75 100644 (file)
@@ -5,6 +5,7 @@
        * GBibtex.[Ch], glade/bibtex.glade: Implement bibtex dialog
        * ghelpers.[Ch], GtkLengthEntry.[Ch]: Move some old stuff out of
          ghelpers into GtkLengthEntry
+       * GAboutlyx.[Ch], glade/aboutlyx.glade: Sexy new about dialog
 
 2006-02-05  John Spray  <spray@lyx.org>
 
index 5b06755e0938534e70d8bb894fd9af939c385818..abf04e9d2710cd1cb836de0d37cac7eeff30ec4d 100644 (file)
 #include "ghelpers.h"
 #include "version.h"
 
+#include "support/filetools.h" // LibFileSearch
+
 #include <libglademm.h>
 
 #include <sstream>
 
+using lyx::support::LibFileSearch;
+
 using std::ostringstream;
 using std::string;
 
@@ -157,32 +161,66 @@ void GAboutlyx::doBuild()
 {
        string const gladeName = findGladeFile("aboutlyx");
        xml_ = Gnome::Glade::Xml::create(gladeName);
-       Gtk::Label * version;
-       Gtk::Label * credits;
-       Gtk::Label * license;
-       xml_->get_widget("version", version);
-       xml_->get_widget("credits", credits);
-       xml_->get_widget("license", license);
-       std::ostringstream vs;
-       vs << controller().getVersion()
-          << std::endl << lyx_version_info;
-       version->set_text(Glib::locale_to_utf8(vs.str()));
-       std::ostringstream crs;
-       controller().getCredits(crs);
-       credits->set_markup(
-               translateMarkup(Glib::convert(crs.str(),
-                                             "UTF-8",
-                                             "ISO8859-1")));
+
+       Gtk::AboutDialog *dialog;
+       xml_->get_widget("dialog", dialog);
+
+       dialog->set_version(Glib::ustring(PACKAGE_VERSION));
+
        std::ostringstream ls;
        ls << controller().getCopyright() << "\n\n"
           << controller().getLicense() << "\n\n"
           << controller().getDisclaimer();
-       license->set_text(Glib::locale_to_utf8(ls.str()));
-       Gtk::Button * btn;
-       xml_->get_widget("close_button", btn);
-       setCancel(btn);
-       //btn->signal_clicked().connect(sigc::mem_fun(*this, &GViewBase::onCancel));
+       dialog->set_license (ls.str());
+
+       string const filename = LibFileSearch("images", "banner", "ppm");
+       Glib::RefPtr<Gdk::Pixbuf> logo = Gdk::Pixbuf::create_from_file(filename);
+       Glib::RefPtr<Gdk::Pixbuf> logo_scaled = logo->scale_simple(
+               logo->get_width() / 2,
+               logo->get_height() / 2,
+               Gdk::INTERP_BILINEAR);
+       dialog->set_logo(logo_scaled);
+
+       // Total crack - find and hide the built in Credits button
+       // that glade helpfully puts there for us.
+       Glib::List_Iterator<Gtk::Box_Helpers::Child> it =
+               dialog->get_action_area()->children().begin();
+       Glib::List_Iterator<Gtk::Box_Helpers::Child> const end =
+               dialog->get_action_area()->children().end();
+       for (; it != end; ++it) {
+               Gtk::Button * button = (Gtk::Button*)(it->get_widget());
+               // The close button is a stock ID which we can reliably test for
+               // The license button has no icon
+               // What's left is the credits button
+               if (button->get_label() != "gtk-close" && button->get_image())
+                       button->hide();
+       }
+
+       Gtk::Button &authorbutton = *Gtk::manage(
+               new Gtk::Button(_("C_redits"), true));
+       authorbutton.set_image(*Gtk::manage(
+               new Gtk::Image(Gtk::Stock::ABOUT, Gtk::ICON_SIZE_BUTTON)));
+       dialog->get_action_area()->pack_end(authorbutton);
+       dialog->get_action_area()->reorder_child(authorbutton, 0);
+       authorbutton.signal_clicked().connect(
+               sigc::mem_fun(*this, &GAboutlyx::showAuthors));
+       authorbutton.show();
+       xml_->get_widget("AuthorsDialog", authordialog_);
+       Gtk::Label *authorlabel;
+       xml_->get_widget("Authors", authorlabel);
+       std::ostringstream crs;
+       controller().getCredits(crs);
+       authorlabel->set_markup(translateMarkup(
+               Glib::convert(crs.str(), "UTF-8", "ISO-8859-1")));
+}
+
+
+void GAboutlyx::showAuthors()
+{
+       authordialog_->run();
+       authordialog_->hide();
 }
 
+
 } // namespace frontend
 } // namespace lyx
index 22166f8cbb8acc0b282745439ad48f43830367d3..0527858330fd2418b287813495ccc264b943e132 100644 (file)
@@ -26,6 +26,9 @@ private:
        virtual void apply() {}
        virtual void update() {}
        virtual void doBuild();
+
+       void showAuthors();
+       Gtk::Dialog *authordialog_;
 };
 
 } // namespace frontend
index d38a7916cff2b41370eb463847f7713770256e48..35d5982849ee803832c31f81655871f40f7a0d3c 100644 (file)
@@ -3,13 +3,26 @@
 
 <glade-interface>
 
-<widget class="GtkDialog" id="dialog">
-  <property name="title" translatable="yes">About LyX</property>
+<widget class="GtkAboutDialog" id="dialog">
+  <property name="visible">True</property>
+  <property name="destroy_with_parent">False</property>
+  <property name="name" translatable="yes">LyX</property>
+  <property name="copyright" translatable="yes">Copyright © 1995 Matthias Ettrich
+Copyright © 1995-2006 LyX Team</property>
+  <property name="comments" translatable="yes">The Document Processor</property>
+  <property name="wrap_license">True</property>
+  <property name="website">http://www.lyx.org</property>
+  <property name="website_label" translatable="yes">http://www.lyx.org</property>
+  <property name="translator_credits" translatable="yes" comments="TRANSLATORS: Replace this string with your names, one name per line.">translator-credits</property>
+</widget>
+
+<widget class="GtkDialog" id="AuthorsDialog">
+  <property name="title" translatable="yes">Credits</property>
   <property name="type">GTK_WINDOW_TOPLEVEL</property>
   <property name="window_position">GTK_WIN_POS_NONE</property>
   <property name="modal">False</property>
   <property name="default_width">300</property>
-  <property name="default_height">200</property>
+  <property name="default_height">300</property>
   <property name="resizable">True</property>
   <property name="destroy_with_parent">False</property>
   <property name="decorated">True</property>
@@ -17,7 +30,9 @@
   <property name="skip_pager_hint">False</property>
   <property name="type_hint">GDK_WINDOW_TYPE_HINT_DIALOG</property>
   <property name="gravity">GDK_GRAVITY_NORTH_WEST</property>
-  <property name="has_separator">True</property>
+  <property name="focus_on_map">True</property>
+  <property name="urgency_hint">False</property>
+  <property name="has_separator">False</property>
 
   <child internal-child="vbox">
     <widget class="GtkVBox" id="dialog-vbox1">
@@ -31,7 +46,7 @@
          <property name="layout_style">GTK_BUTTONBOX_END</property>
 
          <child>
-           <widget class="GtkButton" id="close_button">
+           <widget class="GtkButton" id="closebutton1">
              <property name="visible">True</property>
              <property name="can_default">True</property>
              <property name="can_focus">True</property>
@@ -40,7 +55,6 @@
              <property name="relief">GTK_RELIEF_NORMAL</property>
              <property name="focus_on_click">True</property>
              <property name="response_id">-7</property>
-             <accelerator key="Escape" modifiers="0" signal="clicked"/>
            </widget>
          </child>
        </widget>
       </child>
 
       <child>
-       <widget class="GtkNotebook" id="notebook1">
+       <widget class="GtkScrolledWindow" id="scrolledwindow5">
+         <property name="border_width">12</property>
          <property name="visible">True</property>
          <property name="can_focus">True</property>
-         <property name="show_tabs">True</property>
-         <property name="show_border">True</property>
-         <property name="tab_pos">GTK_POS_TOP</property>
-         <property name="scrollable">False</property>
-         <property name="enable_popup">False</property>
-
-         <child>
-           <widget class="GtkScrolledWindow" id="scrolledwindow3">
-             <property name="width_request">400</property>
-             <property name="height_request">250</property>
-             <property name="visible">True</property>
-             <property name="can_focus">True</property>
-             <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-             <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-             <property name="shadow_type">GTK_SHADOW_NONE</property>
-             <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-             <child>
-               <widget class="GtkViewport" id="viewport3">
-                 <property name="visible">True</property>
-                 <property name="shadow_type">GTK_SHADOW_IN</property>
-
-                 <child>
-                   <widget class="GtkLabel" id="version">
-                     <property name="visible">True</property>
-                     <property name="label" translatable="yes">version</property>
-                     <property name="use_underline">False</property>
-                     <property name="use_markup">False</property>
-                     <property name="justify">GTK_JUSTIFY_LEFT</property>
-                     <property name="wrap">True</property>
-                     <property name="selectable">False</property>
-                     <property name="xalign">0.5</property>
-                     <property name="yalign">0.5</property>
-                     <property name="xpad">0</property>
-                     <property name="ypad">0</property>
-                   </widget>
-                 </child>
-               </widget>
-             </child>
-           </widget>
-           <packing>
-             <property name="tab_expand">False</property>
-             <property name="tab_fill">True</property>
-           </packing>
-         </child>
-
-         <child>
-           <widget class="GtkLabel" id="label6">
-             <property name="visible">True</property>
-             <property name="label" translatable="yes">Version</property>
-             <property name="use_underline">False</property>
-             <property name="use_markup">False</property>
-             <property name="justify">GTK_JUSTIFY_LEFT</property>
-             <property name="wrap">False</property>
-             <property name="selectable">False</property>
-             <property name="xalign">0.5</property>
-             <property name="yalign">0.5</property>
-             <property name="xpad">0</property>
-             <property name="ypad">0</property>
-           </widget>
-           <packing>
-             <property name="type">tab</property>
-           </packing>
-         </child>
-
-         <child>
-           <widget class="GtkScrolledWindow" id="scrolledwindow4">
-             <property name="width_request">400</property>
-             <property name="height_request">250</property>
-             <property name="visible">True</property>
-             <property name="can_focus">True</property>
-             <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-             <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-             <property name="shadow_type">GTK_SHADOW_NONE</property>
-             <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
-
-             <child>
-               <widget class="GtkViewport" id="viewport4">
-                 <property name="visible">True</property>
-                 <property name="shadow_type">GTK_SHADOW_IN</property>
-
-                 <child>
-                   <widget class="GtkLabel" id="credits">
-                     <property name="visible">True</property>
-                     <property name="label" translatable="yes">credits</property>
-                     <property name="use_underline">False</property>
-                     <property name="use_markup">False</property>
-                     <property name="justify">GTK_JUSTIFY_LEFT</property>
-                     <property name="wrap">True</property>
-                     <property name="selectable">False</property>
-                     <property name="xalign">0.5</property>
-                     <property name="yalign">0.5</property>
-                     <property name="xpad">0</property>
-                     <property name="ypad">0</property>
-                   </widget>
-                 </child>
-               </widget>
-             </child>
-           </widget>
-           <packing>
-             <property name="tab_expand">False</property>
-             <property name="tab_fill">True</property>
-           </packing>
-         </child>
-
-         <child>
-           <widget class="GtkLabel" id="label7">
-             <property name="visible">True</property>
-             <property name="label" translatable="yes">Credits</property>
-             <property name="use_underline">False</property>
-             <property name="use_markup">False</property>
-             <property name="justify">GTK_JUSTIFY_LEFT</property>
-             <property name="wrap">False</property>
-             <property name="selectable">False</property>
-             <property name="xalign">0.5</property>
-             <property name="yalign">0.5</property>
-             <property name="xpad">0</property>
-             <property name="ypad">0</property>
-           </widget>
-           <packing>
-             <property name="type">tab</property>
-           </packing>
-         </child>
+         <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
+         <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
+         <property name="shadow_type">GTK_SHADOW_NONE</property>
+         <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
 
          <child>
-           <widget class="GtkScrolledWindow" id="scrolledwindow5">
-             <property name="width_request">400</property>
-             <property name="height_request">250</property>
+           <widget class="GtkViewport" id="viewport5">
              <property name="visible">True</property>
-             <property name="can_focus">True</property>
-             <property name="hscrollbar_policy">GTK_POLICY_NEVER</property>
-             <property name="vscrollbar_policy">GTK_POLICY_AUTOMATIC</property>
-             <property name="shadow_type">GTK_SHADOW_NONE</property>
-             <property name="window_placement">GTK_CORNER_TOP_LEFT</property>
+             <property name="shadow_type">GTK_SHADOW_IN</property>
 
              <child>
-               <widget class="GtkViewport" id="viewport5">
+               <widget class="GtkLabel" id="Authors">
                  <property name="visible">True</property>
-                 <property name="shadow_type">GTK_SHADOW_IN</property>
-
-                 <child>
-                   <widget class="GtkLabel" id="license">
-                     <property name="visible">True</property>
-                     <property name="label" translatable="yes">license</property>
-                     <property name="use_underline">False</property>
-                     <property name="use_markup">False</property>
-                     <property name="justify">GTK_JUSTIFY_LEFT</property>
-                     <property name="wrap">True</property>
-                     <property name="selectable">False</property>
-                     <property name="xalign">0.5</property>
-                     <property name="yalign">0.5</property>
-                     <property name="xpad">0</property>
-                     <property name="ypad">0</property>
-                   </widget>
-                 </child>
+                 <property name="can_focus">True</property>
+                 <property name="label" translatable="yes">label8</property>
+                 <property name="use_underline">False</property>
+                 <property name="use_markup">False</property>
+                 <property name="justify">GTK_JUSTIFY_LEFT</property>
+                 <property name="wrap">True</property>
+                 <property name="selectable">True</property>
+                 <property name="xalign">0.5</property>
+                 <property name="yalign">0.5</property>
+                 <property name="xpad">0</property>
+                 <property name="ypad">0</property>
+                 <property name="ellipsize">PANGO_ELLIPSIZE_NONE</property>
+                 <property name="width_chars">-1</property>
+                 <property name="single_line_mode">False</property>
+                 <property name="angle">0</property>
                </widget>
              </child>
            </widget>
-           <packing>
-             <property name="tab_expand">False</property>
-             <property name="tab_fill">True</property>
-           </packing>
-         </child>
-
-         <child>
-           <widget class="GtkLabel" id="label8">
-             <property name="visible">True</property>
-             <property name="label" translatable="yes">License</property>
-             <property name="use_underline">False</property>
-             <property name="use_markup">False</property>
-             <property name="justify">GTK_JUSTIFY_LEFT</property>
-             <property name="wrap">False</property>
-             <property name="selectable">False</property>
-             <property name="xalign">0.5</property>
-             <property name="yalign">0.5</property>
-             <property name="xpad">0</property>
-             <property name="ypad">0</property>
-           </widget>
-           <packing>
-             <property name="type">tab</property>
-           </packing>
          </child>
        </widget>
        <packing>