1 // SPDX-License-Identifier: GPL-2.0-or-later 2 /** \file 3 * \brief Document Properties dialog 4 */ 5 /* Authors: 6 * Ralf Stephan <ralf@ark.in-berlin.de> 7 * Bryce W. Harrington <bryce@bryceharrington.org> 8 * 9 * Copyright (C) 2006-2008 Johan Engelen <johan@shouraizou.nl> 10 * Copyright (C) 2004, 2005 Authors 11 * 12 * Released under GNU GPL v2+, read the file 'COPYING' for more information. 13 */ 14 15 #ifndef INKSCAPE_UI_DIALOG_DOCUMENT_PREFERENCES_H 16 #define INKSCAPE_UI_DIALOG_DOCUMENT_PREFERENCES_H 17 18 #ifdef HAVE_CONFIG_H 19 # include "config.h" // only include where actually required! 20 #endif 21 22 #include <cstddef> 23 #include <gtkmm/buttonbox.h> 24 #include <gtkmm/comboboxtext.h> 25 #include <gtkmm/liststore.h> 26 #include <gtkmm/notebook.h> 27 #include <gtkmm/textview.h> 28 #include <sigc++/sigc++.h> 29 30 #include "ui/dialog/dialog-base.h" 31 #include "ui/widget/licensor.h" 32 #include "ui/widget/page-sizer.h" 33 #include "ui/widget/registered-widget.h" 34 #include "ui/widget/registry.h" 35 #include "ui/widget/tolerance-slider.h" 36 #include "xml/helper-observer.h" 37 38 namespace Inkscape { 39 namespace XML { 40 class Node; 41 } 42 namespace UI { 43 namespace Widget { 44 class EntityEntry; 45 class NotebookPage; 46 } 47 namespace Dialog { 48 49 typedef std::list<UI::Widget::EntityEntry*> RDElist; 50 51 class DocumentProperties : public DialogBase 52 { 53 public: 54 void update_widgets(); 55 static DocumentProperties &getInstance(); 56 static void destroy(); 57 58 void update() override; 59 60 void update_gridspage(); 61 62 protected: 63 void build_page(); 64 void build_grid(); 65 void build_guides(); 66 void build_snap(); 67 void build_gridspage(); 68 69 void create_guides_around_page(); 70 void delete_all_guides(); 71 void build_cms(); 72 void build_scripting(); 73 void build_metadata(); 74 void init(); 75 76 virtual void on_response (int); 77 void populate_available_profiles(); 78 void populate_linked_profiles_box(); 79 void linkSelectedProfile(); 80 void removeSelectedProfile(); 81 void onColorProfileSelectRow(); 82 void linked_profiles_list_button_release(GdkEventButton* event); 83 void cms_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem); 84 85 void external_scripts_list_button_release(GdkEventButton* event); 86 void embedded_scripts_list_button_release(GdkEventButton* event); 87 void populate_script_lists(); 88 void addExternalScript(); 89 void browseExternalScript(); 90 void addEmbeddedScript(); 91 void removeExternalScript(); 92 void removeEmbeddedScript(); 93 void changeEmbeddedScript(); 94 void onExternalScriptSelectRow(); 95 void onEmbeddedScriptSelectRow(); 96 void editEmbeddedScript(); 97 void external_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem); 98 void embedded_create_popup_menu(Gtk::Widget& parent, sigc::slot<void> rem); 99 void load_default_metadata(); 100 void save_default_metadata(); 101 102 Inkscape::XML::SignalObserver _emb_profiles_observer, _scripts_observer; 103 Gtk::Notebook _notebook; 104 105 UI::Widget::NotebookPage *_page_page; 106 UI::Widget::NotebookPage *_page_guides; 107 UI::Widget::NotebookPage *_page_snap; 108 UI::Widget::NotebookPage *_page_cms; 109 UI::Widget::NotebookPage *_page_scripting; 110 111 Gtk::Notebook _scripting_notebook; 112 UI::Widget::NotebookPage *_page_external_scripts; 113 UI::Widget::NotebookPage *_page_embedded_scripts; 114 115 UI::Widget::NotebookPage *_page_metadata1; 116 UI::Widget::NotebookPage *_page_metadata2; 117 118 Gtk::Box _grids_vbox; 119 120 UI::Widget::Registry _wr; 121 //--------------------------------------------------------------- 122 Gtk::Grid _rcb_doc_props_left; 123 Gtk::Grid _rcb_doc_props_right; 124 UI::Widget::RegisteredCheckButton _rcb_antialias; 125 UI::Widget::RegisteredCheckButton _rcb_checkerboard; 126 UI::Widget::RegisteredCheckButton _rcb_canb; 127 UI::Widget::RegisteredCheckButton _rcb_bord; 128 UI::Widget::RegisteredCheckButton _rcb_shad; 129 UI::Widget::RegisteredColorPicker _rcp_bg; 130 UI::Widget::RegisteredColorPicker _rcp_bord; 131 UI::Widget::RegisteredUnitMenu _rum_deflt; 132 UI::Widget::PageSizer _page_sizer; 133 //--------------------------------------------------------------- 134 UI::Widget::RegisteredCheckButton _rcb_sgui; 135 UI::Widget::RegisteredCheckButton _rcb_lgui; 136 UI::Widget::RegisteredColorPicker _rcp_gui; 137 UI::Widget::RegisteredColorPicker _rcp_hgui; 138 Gtk::Button _create_guides_btn; 139 Gtk::Button _delete_guides_btn; 140 //--------------------------------------------------------------- 141 UI::Widget::ToleranceSlider _rsu_sno; 142 UI::Widget::ToleranceSlider _rsu_sn; 143 UI::Widget::ToleranceSlider _rsu_gusn; 144 UI::Widget::RegisteredCheckButton _rcb_snclp; 145 UI::Widget::RegisteredCheckButton _rcb_snmsk; 146 UI::Widget::RegisteredCheckButton _rcb_perp; 147 UI::Widget::RegisteredCheckButton _rcb_tang; 148 //--------------------------------------------------------------- 149 Gtk::Button _unlink_btn; 150 class AvailableProfilesColumns : public Gtk::TreeModel::ColumnRecord 151 { 152 public: AvailableProfilesColumns()153 AvailableProfilesColumns() 154 { add(fileColumn); add(nameColumn); add(separatorColumn); } 155 Gtk::TreeModelColumn<Glib::ustring> fileColumn; 156 Gtk::TreeModelColumn<Glib::ustring> nameColumn; 157 Gtk::TreeModelColumn<bool> separatorColumn; 158 }; 159 AvailableProfilesColumns _AvailableProfilesListColumns; 160 Glib::RefPtr<Gtk::ListStore> _AvailableProfilesListStore; 161 Gtk::ComboBox _AvailableProfilesList; 162 bool _AvailableProfilesList_separator(const Glib::RefPtr<Gtk::TreeModel>& model, const Gtk::TreeModel::iterator& iter); 163 class LinkedProfilesColumns : public Gtk::TreeModel::ColumnRecord 164 { 165 public: LinkedProfilesColumns()166 LinkedProfilesColumns() 167 { add(nameColumn); add(previewColumn); } 168 Gtk::TreeModelColumn<Glib::ustring> nameColumn; 169 Gtk::TreeModelColumn<Glib::ustring> previewColumn; 170 }; 171 LinkedProfilesColumns _LinkedProfilesListColumns; 172 Glib::RefPtr<Gtk::ListStore> _LinkedProfilesListStore; 173 Gtk::TreeView _LinkedProfilesList; 174 Gtk::ScrolledWindow _LinkedProfilesListScroller; 175 Gtk::Menu _EmbProfContextMenu; 176 177 //--------------------------------------------------------------- 178 Gtk::Button _external_add_btn; 179 Gtk::Button _external_remove_btn; 180 Gtk::Button _embed_new_btn; 181 Gtk::Button _embed_remove_btn; 182 Gtk::ButtonBox _embed_button_box; 183 184 class ExternalScriptsColumns : public Gtk::TreeModel::ColumnRecord 185 { 186 public: ExternalScriptsColumns()187 ExternalScriptsColumns() 188 { add(filenameColumn); } 189 Gtk::TreeModelColumn<Glib::ustring> filenameColumn; 190 }; 191 ExternalScriptsColumns _ExternalScriptsListColumns; 192 class EmbeddedScriptsColumns : public Gtk::TreeModel::ColumnRecord 193 { 194 public: EmbeddedScriptsColumns()195 EmbeddedScriptsColumns() 196 { add(idColumn); } 197 Gtk::TreeModelColumn<Glib::ustring> idColumn; 198 }; 199 EmbeddedScriptsColumns _EmbeddedScriptsListColumns; 200 Glib::RefPtr<Gtk::ListStore> _ExternalScriptsListStore; 201 Glib::RefPtr<Gtk::ListStore> _EmbeddedScriptsListStore; 202 Gtk::TreeView _ExternalScriptsList; 203 Gtk::TreeView _EmbeddedScriptsList; 204 Gtk::ScrolledWindow _ExternalScriptsListScroller; 205 Gtk::ScrolledWindow _EmbeddedScriptsListScroller; 206 Gtk::Menu _ExternalScriptsContextMenu; 207 Gtk::Menu _EmbeddedScriptsContextMenu; 208 Gtk::Entry _script_entry; 209 Gtk::TextView _EmbeddedContent; 210 Gtk::ScrolledWindow _EmbeddedContentScroller; 211 //--------------------------------------------------------------- 212 213 Gtk::Notebook _grids_notebook; 214 Gtk::Box _grids_hbox_crea; 215 Gtk::Label _grids_label_crea; 216 Gtk::Button _grids_button_new; 217 Gtk::Button _grids_button_remove; 218 Gtk::ComboBoxText _grids_combo_gridtype; 219 Gtk::Label _grids_label_def; 220 Gtk::Box _grids_space; 221 //--------------------------------------------------------------- 222 223 RDElist _rdflist; 224 UI::Widget::Licensor _licensor; 225 226 Gtk::Box& _createPageTabLabel(const Glib::ustring& label, const char *label_image); 227 228 private: 229 DocumentProperties(); 230 ~DocumentProperties() override; 231 232 // callback methods for buttons on grids page. 233 void onNewGrid(); 234 void onRemoveGrid(); 235 236 // callback for document unit change 237 void onDocUnitChange(); 238 239 // nodes connected to listeners 240 Inkscape::XML::Node *_repr_namedview = nullptr; 241 Inkscape::XML::Node *_repr_root = nullptr; 242 243 sigc::connection _document_replaced_connection; 244 }; 245 246 } // namespace Dialog 247 } // namespace UI 248 } // namespace Inkscape 249 250 #endif // INKSCAPE_UI_DIALOG_DOCUMENT_PREFERENCES_H 251 252 /* 253 Local Variables: 254 mode:c++ 255 c-file-style:"stroustrup" 256 c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) 257 indent-tabs-mode:nil 258 fill-column:99 259 End: 260 */ 261 // vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : 262