X-Git-Url: https://git.tokkee.org/?a=blobdiff_plain;f=src%2Fui%2Fwidget%2Fpage-sizer.h;h=9efef5e64a75bf6603c30397b8adcef0b65ab787;hb=41d5edd305122148718ea6dcfce4f92150215f8e;hp=e17628c7618cee532cdb69ffb2d1e55733cbc4a6;hpb=6b15695578f07a3f72c4c9475c1a261a3021472a;p=inkscape.git diff --git a/src/ui/widget/page-sizer.h b/src/ui/widget/page-sizer.h index e17628c76..9efef5e64 100644 --- a/src/ui/widget/page-sizer.h +++ b/src/ui/widget/page-sizer.h @@ -4,7 +4,7 @@ * Author: * Ralf Stephan * - * Copyright (C) 2005 Authors + * Copyright (C) 2005-2006 Authors * * Released under GNU GPL. Read the file 'COPYING' for more information. */ @@ -12,46 +12,207 @@ #ifndef INKSCAPE_UI_WIDGET_PAGE_SIZER__H #define INKSCAPE_UI_WIDGET_PAGE_SIZER__H +#include #include -#include #include "ui/widget/registry.h" #include "ui/widget/registered-widget.h" +#include "helper/units.h" -namespace Gtk { - class OptionMenu; - class RadioButton; -} 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: + + /** + * 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(); + + /** + * Destructor + */ 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: - void setDoc (double w, double h); + + /** + * Our handy table of all 'standard' paper sizes. + */ + std::map _paperSizeTable; + + /** + * Find the closest standard paper size in the table, to the + */ int find_paper_size (double w, double h) const; + + 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 nameColumn; + Gtk::TreeModelColumn descColumn; + }; + + PaperSizeColumns _paperSizeListColumns; + Glib::RefPtr _paperSizeListStore; + Gtk::TreeView _paperSizeList; + Glib::RefPtr _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(); + 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(); - - 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 */