// SPDX-License-Identifier: GPL-2.0-or-later /* * Authors: * Johan Engelen * * Copyright (C) 2007 Authors * * Released under GNU GPL v2+, read the file 'COPYING' for more information. */ #ifndef INKSCAPE_UI_WIDGET_REGISTERED_ENUMS_H #define INKSCAPE_UI_WIDGET_REGISTERED_ENUMS_H #include "ui/widget/combo-enums.h" #include "ui/widget/registered-widget.h" namespace Inkscape { namespace UI { namespace Widget { /** * Simplified management of enumerations in the UI as combobox. */ template class RegisteredEnum : public RegisteredWidget< LabelledComboBoxEnum > { public: ~RegisteredEnum() override { _changed_connection.disconnect(); } RegisteredEnum ( const Glib::ustring& label, const Glib::ustring& tip, const Glib::ustring& key, const Util::EnumDataConverter& c, Registry& wr, Inkscape::XML::Node* repr_in = nullptr, SPDocument *doc_in = nullptr, bool sorted = true ) : RegisteredWidget< LabelledComboBoxEnum >(label, tip, c, (const Glib::ustring &)"", (const Glib::ustring &)"", true, sorted) { RegisteredWidget< LabelledComboBoxEnum >::init_parent(key, wr, repr_in, doc_in); _changed_connection = combobox()->signal_changed().connect (sigc::mem_fun (*this, &RegisteredEnum::on_changed)); } void set_active_by_id (E id) { combobox()->set_active_by_id(id); }; void set_active_by_key (const Glib::ustring& key) { combobox()->set_active_by_key(key); } inline const Util::EnumData* get_active_data() { combobox()->get_active_data(); } ComboBoxEnum * combobox() { return LabelledComboBoxEnum::getCombobox(); } sigc::connection _changed_connection; protected: void on_changed() { if (combobox()->setProgrammatically) { combobox()->setProgrammatically = false; return; } if (RegisteredWidget< LabelledComboBoxEnum >::_wr->isUpdating()) return; RegisteredWidget< LabelledComboBoxEnum >::_wr->setUpdating (true); const Util::EnumData* data = combobox()->get_active_data(); if (data) { RegisteredWidget< LabelledComboBoxEnum >::write_to_xml(data->key.c_str()); } RegisteredWidget< LabelledComboBoxEnum >::_wr->setUpdating (false); } }; } } } #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 :