From 35a96bde514a8897f6f0fcc41c5833bf63df2e2a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 27 Apr 2024 18:29:01 +0200 Subject: Adding upstream version 1.0.2. Signed-off-by: Daniel Baumann --- src/ui/dialog/dialog.h | 179 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 179 insertions(+) create mode 100644 src/ui/dialog/dialog.h (limited to 'src/ui/dialog/dialog.h') diff --git a/src/ui/dialog/dialog.h b/src/ui/dialog/dialog.h new file mode 100644 index 0000000..012bbc6 --- /dev/null +++ b/src/ui/dialog/dialog.h @@ -0,0 +1,179 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * @brief Base class for dialogs in Inkscape + */ +/* Authors: + * Bryce W. Harrington + * Gustav Broberg + * Kris De Gussem + * + * Copyright (C) 2004--2007 Authors + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef INKSCAPE_DIALOG_H +#define INKSCAPE_DIALOG_H + +#include "dock-behavior.h" +#include "floating-behavior.h" + +class SPDesktop; +struct InkscapeApplication; + +namespace Inkscape { +class Selection; +} + +namespace Inkscape { +namespace UI { +namespace Dialog { + +enum BehaviorType { FLOATING, DOCK }; + +gboolean sp_retransientize_again(gpointer dlgPtr); +void sp_dialog_shutdown(GObject *object, gpointer dlgPtr); + +/** + * Base class for Inkscape dialogs. + * + * UI::Dialog::Dialog is a base class for all dialogs in Inkscape. The + * purpose of this class is to provide a unified place for ensuring + * style and behavior. Specifically, this class provides functionality + * for saving and restoring the size and position of dialogs (through + * the user's preferences file). + * + * It also provides some general purpose signal handlers for things like + * showing and hiding all dialogs. + * + * Fundamental parts of the dialog's behavior are controlled by + * a UI::Dialog::Behavior subclass instance connected to the dialog. + * + * @see UI::Widget::Panel panel class from which the dialogs are actually derived from. + * @see UI::Dialog::DialogManager manages the dialogs within inkscape. + * @see UI::Dialog::PanelDialog which links Panel and Dialog together in a dockable and floatable dialog. + */ +class Dialog { + +public: + + /** + * Constructor. + * + * @param behavior_factory floating or docked. + * @param prefs_path characteristic path for loading/saving dialog position. + * @param verb_num the dialog verb. + */ + Dialog(Behavior::BehaviorFactory behavior_factory, const char *prefs_path = nullptr, + int verb_num = 0, Glib::ustring apply_label = ""); + + virtual ~Dialog(); + + virtual void onDesktopActivated(SPDesktop*); + virtual void onShutdown(); + + /* Hide and show dialogs */ + virtual void onHideF12(); + virtual void onShowF12(); + + virtual operator Gtk::Widget &(); + virtual GtkWidget *gobj(); + virtual void present(); + virtual Gtk::Box *get_vbox(); + virtual void show(); + virtual void hide(); + virtual void show_all_children(); + virtual void set_size_request(int, int); + virtual void size_request(Gtk::Requisition &); + virtual void get_position(int &x, int &y); + virtual void get_size(int &width, int &height); + virtual void resize(int width, int height); + virtual void move(int x, int y); + virtual void set_position(Gtk::WindowPosition position); + virtual void set_title(Glib::ustring title); + virtual void set_sensitive(bool sensitive=true); + + virtual Glib::SignalProxy0 signal_show(); + virtual Glib::SignalProxy0 signal_hide(); + + bool _user_hidden; // when it is closed by the user, to prevent repopping on f12 + bool _hiddenF12; + + /** + * Read window position from preferences. + */ + void read_geometry(); + + /** + * Save window position to preferences. + */ + void save_geometry(); + void save_status(int visible, int state, int placement); + + bool retransientize_suppress; // when true, do not retransientize (prevents races when switching new windows too fast) + +protected: + Glib::ustring const _prefs_path; + int _verb_num; + Glib::ustring _title; + Glib::ustring _apply_label; + SPDesktop * _desktop; + bool _is_active_desktop; + + virtual void _handleResponse(int response_id); + + virtual bool _onDeleteEvent (GdkEventAny*); + virtual bool _onEvent(GdkEvent *event); + virtual bool _onKeyPress(GdkEventKey *event); + + virtual void _apply(); + + /* Closes the dialog window. + * + * This code sends a delete_event to the dialog, + * instead of just destroying it, so that the + * dialog can do some housekeeping, such as remember + * its position. + */ + virtual void _close(); + virtual void _defocus(); + + Inkscape::Selection* _getSelection(); + + sigc::connection _desktop_activated_connection; + sigc::connection _dialogs_hidden_connection; + sigc::connection _dialogs_unhidden_connection; + sigc::connection _shutdown_connection; + sigc::connection _change_theme_connection; + + private: + Behavior::Behavior* _behavior; + + Dialog() = delete; // no constructor without params + + Dialog(Dialog const &d) = delete; // no copy + Dialog& operator=(Dialog const &d) = delete; // no assign + + friend class Behavior::FloatingBehavior; + friend class Behavior::DockBehavior; +}; + +void sp_add_top_window_classes(Gtk::Widget *widg); +} // namespace Dialog +} // namespace UI +} // namespace Inkscape + + + +#endif //INKSCAPE_DIALOG_H + +/* + Local Variables: + mode:c++ + c-file-style:"stroustrup" + c-file-offsets:((innamespace . 0)(inline-open . 0)(case-label . +)) + indent-tabs-mode:nil + fill-column:99 + End: +*/ +// vim: filetype=cpp:expandtab:shiftwidth=4:tabstop=8:softtabstop=4:fileencoding=utf-8:textwidth=99 : -- cgit v1.2.3