Code

trivial: ui/widget/*, ui/dialog/*: svn propset svn:eol-style native *.h *.cpp.
[inkscape.git] / src / ui / widget / page-sizer.h
index d5934be0438ce09535f6788900c4031674a10952..e3d10f578829861339c8159be082d04f2043ff89 100644 (file)
@@ -4,7 +4,7 @@
  * Author:
  *   Ralf Stephan <ralf@ark.in-berlin.de>
  *
- * Copyright (C) 2005 Authors
+ * Copyright (C) 2005-2006 Authors
  *
  * Released under GNU GPL.  Read the file 'COPYING' for more information.
  */
@@ -12,8 +12,8 @@
 #ifndef INKSCAPE_UI_WIDGET_PAGE_SIZER__H
 #define INKSCAPE_UI_WIDGET_PAGE_SIZER__H
 
-#include <sigc++/sigc++.h>
 #include <gtkmm.h>
+#include <sigc++/sigc++.h>
 #include "ui/widget/registry.h"
 #include "ui/widget/registered-widget.h"
 #include "helper/units.h"
@@ -24,13 +24,22 @@ namespace UI {
 namespace Widget {
 
 /**
- * Class used to store common paper dimensions
+ * Data class used to store common paper dimensions.  Used to make
+ * PageSizer's _paperSizeTable. 
  */ 
 class PaperSize
 {
 public:
+
+    /**
+     * Default constructor
+     */
     PaperSize()
         { init(); }
+
+    /**
+     * Main constructor.  Use this one.
+     */
     PaperSize(const Glib::ustring &nameArg,
                  double smallerArg,
                  double largerArg,
@@ -42,15 +51,46 @@ public:
            unit    = unitArg;
            }
 
+    /**
+     * Copy constructor
+     */
     PaperSize(const PaperSize &other)
         { assign(other); }
         
+    /**
+     * Assignment operator
+     */             
     PaperSize &operator=(const PaperSize &other)
         { assign(other); return *this; }
 
+    /**
+     * Destructor
+     */             
        virtual ~PaperSize()
            {}
            
+    /**
+     * Name of this paper specification
+     */             
+    Glib::ustring name;
+    
+    /**
+     * The lesser of the two dimensions
+     */             
+    double smaller;
+    
+    /**
+     * The greater of the two dimensions
+     */             
+    double larger;
+    
+    /**
+     * The units (px, pt, mm, etc) of this specification
+     */             
+    SPUnitId unit;
+
+private:
+
        void init()
            {
            name    = "";
@@ -67,10 +107,6 @@ public:
            unit    = other.unit;
         }
 
-    Glib::ustring name;
-    double smaller;
-    double larger;
-    SPUnitId unit;
 };
 
 
@@ -78,7 +114,8 @@ public:
 
 
 /**
- * Widget containing all widgets for specifying page size.
+ * A compound widget that allows the user to select the desired
+ * page size.  This widget is used in DocumentPreferences 
  */ 
 class PageSizer : public Gtk::VBox
 {
@@ -94,34 +131,82 @@ public:
      */
     virtual ~PageSizer();
 
+    /**
+     * Set up or reset this widget
+     */             
     void init (Registry& reg);
+    
+    /**
+     * Set the page size to the given dimensions.  If 'changeList' is
+     * true, then reset the paper size list to the closest match
+     */
     void setDim (double w, double h, bool changeList=true);
-    bool                 _landscape;
-
 protected:
 
-    int find_paper_size (double w, double h) const;
+    /**
+     * Our handy table of all 'standard' paper sizes.
+     */             
+    std::map<Glib::ustring, PaperSize> _paperSizeTable;
+
+    /**
+     * Find the closest standard paper size in the table, to the
+     */
+    Gtk::ListStore::iterator find_paper_size (double w, double h) const;
     void fire_fit_canvas_to_selection_or_drawing();
-    void on_portrait();
-    void on_landscape();
-    void on_value_changed();
-    void on_paper_size_list_changed();
     
-    RegisteredUnitMenu   _rum;
-    RegisteredScalarUnit _rusw, _rush;
+    Gtk::Tooltips _tips;
     
-    //# Various things for a ComboBox
-    Gtk::ComboBoxText _paperSizeList;
-    std::map<Glib::ustring, PaperSize> paperSizeTable;
+    //### The Paper Size selection list
+    Gtk::HBox _paperSizeListBox;
+    Gtk::Label _paperSizeListLabel;
+    class PaperSizeColumns : public Gtk::TreeModel::ColumnRecord
+        {
+        public:
+            PaperSizeColumns()
+               { add(nameColumn); add(descColumn);  }
+            Gtk::TreeModelColumn<Glib::ustring> nameColumn;
+            Gtk::TreeModelColumn<Glib::ustring> descColumn;
+        };
+
+    PaperSizeColumns _paperSizeListColumns;
+    Glib::RefPtr<Gtk::ListStore> _paperSizeListStore;
+    Gtk::TreeView _paperSizeList;
+    Glib::RefPtr<Gtk::TreeSelection> _paperSizeListSelection;
+    Gtk::ScrolledWindow  _paperSizeListScroller;
+    //callback
+    void on_paper_size_list_changed();
+    sigc::connection    _paper_size_list_connection;
     
+    //### Portrait or landscape orientation
+    Gtk::HBox           _orientationBox;
+    Gtk::Label          _orientationLabel;
     Gtk::RadioButton    _portraitButton;
        Gtk::RadioButton    _landscapeButton;
-    sigc::connection    _paper_size_list_connection;
+    //callbacks
+    void on_portrait();
+    void on_landscape();
     sigc::connection    _portrait_connection;
        sigc::connection    _landscape_connection;
+
+    //### Custom size frame
+    Gtk::Frame           _customFrame;
+    Gtk::Table           _customTable;
+    RegisteredUnitMenu   _dimensionUnits;
+    RegisteredScalarUnit _dimensionWidth;
+       RegisteredScalarUnit _dimensionHeight;
+       Gtk::Button          _fitPageButton;
+    //callback
+    void on_value_changed();
     sigc::connection    _changedw_connection;
        sigc::connection    _changedh_connection;
-    Registry            *_wr;
+
+    Registry            *_widgetRegistry;
+
+    //### state - whether we are currently landscape or portrait
+    bool                 _landscape;
+
 };
 
 } // namespace Widget