index d0fdeb8cc24127690a411ca0282b4b016898bd3d..e3d10f578829861339c8159be082d04f2043ff89 100644 (file)
* Author:
* Ralf Stephan <ralf@ark.in-berlin.de>
*
* 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.
*/
*
* Released under GNU GPL. Read the file 'COPYING' for more information.
*/
#ifndef INKSCAPE_UI_WIDGET_PAGE_SIZER__H
#define INKSCAPE_UI_WIDGET_PAGE_SIZER__H
#ifndef INKSCAPE_UI_WIDGET_PAGE_SIZER__H
#define INKSCAPE_UI_WIDGET_PAGE_SIZER__H
+#include <gtkmm.h>
#include <sigc++/sigc++.h>
#include <sigc++/sigc++.h>
-#include <gtkmm/box.h>
#include "ui/widget/registry.h"
#include "ui/widget/registered-widget.h"
#include "ui/widget/registry.h"
#include "ui/widget/registered-widget.h"
+#include "helper/units.h"
-namespace Gtk {
- class OptionMenu;
- class RadioButton;
-}
namespace Inkscape {
namespace Inkscape {
- namespace UI {
- namespace Widget {
+namespace UI {
+namespace Widget {
-/// Widget containing all widgets for specifying page size.
-class PageSizer : public Gtk::VBox {
+/**
+ * Data class used to store common paper dimensions. Used to make
+ * PageSizer's _paperSizeTable.
+ */
+class PaperSize
+{
public:
public:
+
+ /**
+ * Default constructor
+ */
+ PaperSize()
+ { init(); }
+
+ /**
+ * Main constructor. Use this one.
+ */
+ PaperSize(const Glib::ustring &nameArg,
+ double smallerArg,
+ double largerArg,
+ SPUnitId unitArg)
+ {
+ name = nameArg;
+ smaller = smallerArg;
+ larger = largerArg;
+ 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 = "";
+ smaller = 0.0;
+ larger = 0.0;
+ unit = SP_UNIT_PX;
+ }
+
+ void assign(const PaperSize &other)
+ {
+ name = other.name;
+ smaller = other.smaller;
+ larger = other.larger;
+ unit = other.unit;
+ }
+
+};
+
+
+
+
+
+/**
+ * A compound widget that allows the user to select the desired
+ * page size. This widget is used in DocumentPreferences
+ */
+class PageSizer : public Gtk::VBox
+{
+public:
+
+ /**
+ * Constructor
+ */
PageSizer();
PageSizer();
+
+ /**
+ * Destructor
+ */
virtual ~PageSizer();
virtual ~PageSizer();
- void init (Registry& reg);
- void setDim (double w, double h, bool update = false);
- bool _landscape;
+ /**
+ * 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);
+
protected:
protected:
- void setDoc (double w, double h);
- 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 fire_fit_canvas_to_selection_or_drawing();
+
+ Gtk::Tooltips _tips;
+
+ //### 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;
+ //callbacks
void on_portrait();
void on_landscape();
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();
void on_value_changed();
-
- RegisteredUnitMenu _rum;
- RegisteredScalarUnit _rusw, _rush;
- Gtk::OptionMenu *_omenu_size;
- Gtk::RadioButton *_rb_port, *_rb_land;
- sigc::connection _portrait_connection, _landscape_connection;
- sigc::connection _changedw_connection, _changedh_connection;
- Registry *_wr;
+ sigc::connection _changedw_connection;
+ sigc::connection _changedh_connection;
+
+ Registry *_widgetRegistry;
+
+ //### state - whether we are currently landscape or portrait
+ bool _landscape;
+
};
};
-}}}
+} // namespace Widget
+} // namespace UI
+} // namespace Inkscape
+
#endif /* INKSCAPE_UI_WIDGET_PAGE_SIZER__H */
#endif /* INKSCAPE_UI_WIDGET_PAGE_SIZER__H */