diff options
author | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
---|---|---|
committer | Daniel Baumann <daniel.baumann@progress-linux.org> | 2024-04-07 18:24:48 +0000 |
commit | cca66b9ec4e494c1d919bff0f71a820d8afab1fa (patch) | |
tree | 146f39ded1c938019e1ed42d30923c2ac9e86789 /src/ui/dialog/export-batch.h | |
parent | Initial commit. (diff) | |
download | inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.tar.xz inkscape-cca66b9ec4e494c1d919bff0f71a820d8afab1fa.zip |
Adding upstream version 1.2.2.upstream/1.2.2upstream
Signed-off-by: Daniel Baumann <daniel.baumann@progress-linux.org>
Diffstat (limited to '')
-rw-r--r-- | src/ui/dialog/export-batch.h | 163 |
1 files changed, 163 insertions, 0 deletions
diff --git a/src/ui/dialog/export-batch.h b/src/ui/dialog/export-batch.h new file mode 100644 index 0000000..9c49f29 --- /dev/null +++ b/src/ui/dialog/export-batch.h @@ -0,0 +1,163 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* Authors: + * Lauris Kaplinski <lauris@kaplinski.com> + * bulia byak <buliabyak@users.sf.net> + * Johan Engelen <j.b.c.engelen@ewi.utwente.nl> + * Anshudhar Kumar Singh <anshudhar2001@gmail.com> + * + * Copyright (C) 1999-2007, 2021 Authors + * Copyright (C) 2001-2002 Ximian, Inc. + * + * Released under GNU GPL v2+, read the file 'COPYING' for more information. + */ + +#ifndef SP_EXPORT_BATCH_H +#define SP_EXPORT_BATCH_H + +#include <gtkmm.h> + +#include "ui/widget/scrollprotected.h" + +class InkscapeApplication; +class SPDocument; +class SPDesktop; + +namespace Inkscape { + class Preferences; + class Selection; + +namespace UI { +namespace Dialog { + +class ExportList; +class BatchItem; +class ExportProgressDialog; + +class BatchExport : public Gtk::Box +{ +public: + BatchExport() {}; + BatchExport(BaseObjectType *cobject, const Glib::RefPtr<Gtk::Builder> &refGlade) + : Gtk::Box(cobject){}; + ~BatchExport() override = default; + +private: + InkscapeApplication *_app; + SPDesktop *_desktop = nullptr; + SPDocument *_document = nullptr; + +private: + bool setupDone = false; // To prevent setup() call add connections again. + +public: + void setApp(InkscapeApplication *app) { _app = app; } + void setDocument(SPDocument *document); + void setDesktop(SPDesktop *desktop); + void selectionChanged(Inkscape::Selection *selection); + void selectionModified(Inkscape::Selection *selection, guint flags); + void pagesChanged(); + +private: + enum selection_mode + { + SELECTION_LAYER = 0, // Default is alaways placed first + SELECTION_SELECTION, + SELECTION_PAGE, + }; + +private: + typedef Inkscape::UI::Widget::ScrollProtected<Gtk::SpinButton> SpinButton; + + std::map<selection_mode, Gtk::RadioButton *> selection_buttons; + Gtk::FlowBox *preview_container = nullptr; + Gtk::CheckButton *show_preview = nullptr; + Gtk::Label *num_elements = nullptr; + Gtk::CheckButton *hide_all = nullptr; + Gtk::Entry *filename_entry = nullptr; + Gtk::Button *export_btn = nullptr; + Gtk::ProgressBar *_prog = nullptr; + ExportList *export_list = nullptr; + + // Store all items to be displayed in flowbox + std::map<std::string, BatchItem *> current_items; + + bool filename_modified; + Glib::ustring original_name; + Glib::ustring doc_export_name; + + Inkscape::Preferences *prefs = nullptr; + std::map<selection_mode, Glib::ustring> selection_names; + selection_mode current_key; + +public: + // initialise variables from builder + void initialise(const Glib::RefPtr<Gtk::Builder> &builder); + void setup(); + +private: + void setDefaultSelectionMode(); + void onFilenameModified(); + void onAreaTypeToggle(selection_mode key); + void onExport(); + void onBrowse(Gtk::EntryIconPosition pos, const GdkEventButton *ev); + + void refreshPreview(); + void refreshItems(); + void loadExportHints(); + +public: + void refresh() + { + refreshItems(); + loadExportHints(); + }; + +private: + void setExporting(bool exporting, Glib::ustring const &text = ""); + ExportProgressDialog *create_progress_dialog(Glib::ustring progress_text); + /** + * Callback to be used in for loop to update the progress bar. + * + * @param value number between 0 and 1 indicating the fraction of progress (0.17 = 17 % progress) + * @param dlg void pointer to the Gtk::Dialog progress dialog + */ + static unsigned int onProgressCallback(float value, void *dlg); + + /** + * Callback for pressing the cancel button. + */ + void onProgressCancel(); + + /** + * Callback invoked on closing the progress dialog. + */ + bool onProgressDelete(GdkEventAny *event); + +private: + ExportProgressDialog *prog_dlg = nullptr; + bool interrupted; + + // Gtk Signals + sigc::connection filenameConn; + sigc::connection exportConn; + sigc::connection browseConn; + sigc::connection selectionModifiedConn; + sigc::connection selectionChangedConn; + // SVG Signals + sigc::connection _pages_changed_connection; +}; +} // namespace Dialog +} // namespace UI +} // namespace Inkscape +#endif + +/* + 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 : |