From c853ffb5b2f75f5a889ed2e3ef89b818a736e87a Mon Sep 17 00:00:00 2001 From: Daniel Baumann Date: Sat, 13 Apr 2024 13:50:49 +0200 Subject: Adding upstream version 1.3+ds. Signed-off-by: Daniel Baumann --- src/ui/dialog/font-collections-manager.cpp | 172 +++++++++++++++++++++++++++++ 1 file changed, 172 insertions(+) create mode 100644 src/ui/dialog/font-collections-manager.cpp (limited to 'src/ui/dialog/font-collections-manager.cpp') diff --git a/src/ui/dialog/font-collections-manager.cpp b/src/ui/dialog/font-collections-manager.cpp new file mode 100644 index 0000000..9e35831 --- /dev/null +++ b/src/ui/dialog/font-collections-manager.cpp @@ -0,0 +1,172 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/** @file + * @brief A dialog to manage the font collections. + */ +/* Authors: + * Vaibhav Malik + * + * Released under GNU GPLv2 or later, read the file 'COPYING' for more information + */ + +#include "font-collections-manager.h" + +#include "io/resource.h" +#include "ui/icon-names.h" +#include "util/font-collections.h" + +#include +#include +#include "libnrtype/font-lister.h" + +namespace Inkscape { +namespace UI { +namespace Dialog { + +FontCollectionsManager::FontCollectionsManager() + : DialogBase("/dialogs/fontcollections", "FontCollections") +{ + std::string gladefile = get_filename_string(Inkscape::IO::Resource::UIS, "dialog-font-collections.glade"); + Glib::RefPtr builder; + try { + builder = Gtk::Builder::create_from_file(gladefile); + } catch (const Glib::Error &ex) { + g_error("Cannot load glade file: %s", ex.what().c_str()); + throw; + } + + builder->get_widget("contents", _contents); + builder->get_widget("paned", _paned); + builder->get_widget("collections_box", _collections_box); + builder->get_widget("buttons_box", _buttons_box); + builder->get_widget("font_list_box", _font_list_box); + builder->get_widget("font_count_label", _font_count_label); + builder->get_widget("font_list_filter_box", _font_list_filter_box); + builder->get_widget("search_entry", _search_entry); + builder->get_widget("reset_button", _reset_button); + builder->get_widget("create_button", _create_button); + builder->get_widget("edit_button", _edit_button); + builder->get_widget("delete_button", _delete_button); + + _font_list_box->pack_start(_font_selector, true, true); + _font_list_box->reorder_child(_font_selector, 1); + + _collections_box->pack_start(_user_font_collections, true, true); + _collections_box->reorder_child(_user_font_collections, 0); + + _user_font_collections.populate_system_collections(); + _user_font_collections.populate_user_collections(); + _user_font_collections.change_frame_name(_("Font Collections")); + + add(*_contents); + + // Set the button images. + _create_button->set_image_from_icon_name(INKSCAPE_ICON("list-add")); + _edit_button->set_image_from_icon_name(INKSCAPE_ICON("document-edit")); + _delete_button->set_image_from_icon_name(INKSCAPE_ICON("edit-delete")); + + // Paned settings. + _paned->child_property_resize(*_paned->get_child1()) = false; + _paned->child_property_resize(*_paned->get_child2()) = true; + + change_font_count_label(); + _font_selector.hide_others(); + show_all_children(); + + // Setup the signals. + _font_count_changed_connection = Inkscape::FontLister::get_instance()->connectUpdate(sigc::mem_fun(*this, &FontCollectionsManager::change_font_count_label)); + _search_entry->signal_search_changed().connect([=](){ on_search_entry_changed(); }); + _user_font_collections.connect_signal_changed([=](int s){ on_selection_changed(s); }); + _create_button->signal_clicked().connect([=](){ on_create_button_pressed(); }); + _edit_button->signal_clicked().connect([=](){ on_edit_button_pressed(); }); + _delete_button->signal_clicked().connect([=](){ on_delete_button_pressed(); }); + _reset_button->signal_clicked().connect([=](){ on_reset_button_pressed(); }); + + // Edit and delete are initially insensitive because nothing is selected. + _edit_button->set_sensitive(false); + _delete_button->set_sensitive(false); +} + +void FontCollectionsManager::on_search_entry_changed() +{ + auto search_txt = _search_entry->get_text(); + _font_selector.unset_model(); + Inkscape::FontLister *font_lister = Inkscape::FontLister::get_instance(); + font_lister->show_results(search_txt); + _font_selector.set_model(); + change_font_count_label(); +} + +void FontCollectionsManager::on_create_button_pressed() +{ + _user_font_collections.on_create_collection(); +} + +void FontCollectionsManager::on_delete_button_pressed() +{ + _user_font_collections.on_delete_button_pressed(); +} + +void FontCollectionsManager::on_edit_button_pressed() +{ + _user_font_collections.on_edit_button_pressed(); +} + +void FontCollectionsManager::on_reset_button_pressed() +{ + _search_entry->set_text(""); + Inkscape::FontLister* font_lister = Inkscape::FontLister::get_instance(); + + if(font_lister->get_font_families_size() == font_lister->get_font_list()->children().size()) { + // _user_font_collections.populate_collections(); + return; + } + + Inkscape::FontCollections::get()->clear_selected_collections(); + font_lister->init_font_families(); + font_lister->init_default_styles(); + SPDocument *document = getDesktop()->getDocument(); + font_lister->add_document_fonts_at_top(document); +} + +void FontCollectionsManager::change_font_count_label() +{ + auto label = Inkscape::FontLister::get_instance()->get_font_count_label(); + _font_count_label->set_label(label); +} + +// This function will set the sensitivity of the edit and delete buttons +// Whenever the selection changes. +void FontCollectionsManager::on_selection_changed(int state) +{ + bool edit = false, del = false; + switch(state) { + case SYSTEM_COLLECTION: + break; + case USER_COLLECTION: + edit = true; + del = true; + break; + case USER_COLLECTION_FONT: + edit = false; + del = true; + default: + break; + } + _edit_button->set_sensitive(edit); + _delete_button->set_sensitive(del); +} + +} // namespace Dialog +} // namespace UI +} // namespace Inkscape + +/* + 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