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/util/font-collections.h | 140 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 140 insertions(+) create mode 100644 src/util/font-collections.h (limited to 'src/util/font-collections.h') diff --git a/src/util/font-collections.h b/src/util/font-collections.h new file mode 100644 index 0000000..5b9e088 --- /dev/null +++ b/src/util/font-collections.h @@ -0,0 +1,140 @@ +// SPDX-License-Identifier: GPL-2.0-or-later +/* + * This file defines the Font Collections class. A map takes care of all the collections. + * On the hard disk the font collections are stored in the user profile path under the + * "fontcollections" directory. Each collection file is a plain text file which is named + * as "collection_name.txt" and contains the fonts contained in that collection. On + * initializing the collections, it loads the font collections stored in the files and + * their respective fonts. + * + * This file further contains all the necessary functions to create a new font collection, + * update the fonts stored in a collection, rename a collection and deletion of collections + * and their fonts. + * + * Authors: + * Vaibhav Malik + * + * The contents of this file may be used under the GNU General Public License Version 2 or later. + * + */ + +#ifndef INK_COLLECTIONS_H +#define INK_COLLECTIONS_H + +#include +#include + +#include +#include +#include +#include + +namespace Inkscape { + + inline const std::string RECENTLY_USED_FONTS = _("Recently Used Fonts"); + inline const std::string DOCUMENT_FONTS = _("Document Fonts"); + +struct FontCollection { + Glib::ustring name; + std::set fonts; + bool is_system; + + bool operator == (const FontCollection& ft) const { return name == ft.name;} + bool operator < (const FontCollection& ft) const { return name < ft.name;} + + FontCollection(const Glib::ustring name, bool is_system): name(name), is_system(is_system) {} + + FontCollection(const Glib::ustring name, const std::set fonts, bool is_system): name(name), fonts(fonts), is_system(is_system) {} + + void insert_font(const Glib::ustring &font_name) + { + fonts.insert(font_name); + } +}; + +// The FontCollections class is a singleton class. +class FontCollections { + +public: + enum What { + All, + System, + User + }; + + static FontCollections* get(); + ~FontCollections() = default; + + void init(); + void clear(); + // void print_collection_font_map(); + + void read(const std::vector &, bool is_system = false); + void write_collection(const Glib::ustring& collection_name, const std::set & fonts, bool is_system = false); + + // System collections. + // We just store the names of system collections here. + // The logic to manage the system collections is written in separate files. + void add_system_collections(); + + // Add/remove user collections + void add_collection(const Glib::ustring& collection_name, bool is_system = false); + void remove_collection(const Glib::ustring& collection_name); + void rename_collection(const Glib::ustring& old_name, const Glib::ustring& new_name); + void rename_font(const Glib::ustring& collection_name, const Glib::ustring& old_name, const Glib::ustring& new_name); + void add_font(const Glib::ustring& collection_name, const Glib::ustring& font_name); + void remove_font(const Glib::ustring& collection_name, const Glib::ustring& font_name); + void update_selected_collections(const Glib::ustring& collection_name); + bool is_collection_selected(const Glib::ustring& collection_name); + void clear_selected_collections(); + + // Utility + std::string& trim_left_and_right(std::string& s, const char* t = " \t\n\r\f\v"); + int get_user_collection_location(const Glib::ustring& collection_name); + std::string generate_filename_from_collection(const Glib::ustring &collection_name, bool is_system); + int get_collections_count(bool is_system = false); + bool find_collection(const Glib::ustring& collection_name, bool is_system = false); + + std::vector get_collections(bool is_system = false); + std::vector get_all_collections(); + std::set get_fonts(const Glib::ustring& name, bool is_system = false); + + // This signal will be emitted whenever there's a change in the font collections + // This includes: Creating/deleting collection, and adding/deleting fonts. + sigc::connection connect_update(sigc::slot slot) { + return update_signal.connect(slot); + } + + // This signal will be emitted whenever the user selects or + // un-selects a font collection. + sigc::connection connect_selection_update(sigc::slot slot) { + return selection_update_signal.connect(slot); + } + +private: + FontCollections(); + + std::set _system_collections; + std::set _user_collections; + std::set _selected_collections; + + void _read(const Glib::ustring&, bool is_system = false); + + sigc::signal update_signal; + sigc::signal selection_update_signal; +}; + +} // Namespace Inkscape + +#endif // INK_COLLECTIONS_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 : -- cgit v1.2.3