/* * This file is part of RawTherapee. * * Copyright (c) 2004-2010 Gabor Horvath * * RawTherapee is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * RawTherapee is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with RawTherapee. If not, see . */ #pragma once #include #include #include #include "guiutils.h" #include "threadutils.h" class ProfileStoreEntry; /** * @brief subclass of Gtk::Label with extra fields for Combobox and Menu, to link with a ProfileStoreEntry */ class ProfileStoreLabel final : public Gtk::Label { public: const ProfileStoreEntry *entry; #ifndef NDEBUG ProfileStoreLabel() : Gtk::Label ("*** error ***"), entry (nullptr) {} #else ProfileStoreLabel() : Gtk::Label (""), entry (nullptr) {} #endif /** @brief Create a new ProfileStoreLabel * * @param entry Pointer to the ProfileStoreEntry object, be it a directory or a file */ explicit ProfileStoreLabel (const ProfileStoreEntry *entry); ProfileStoreLabel (const ProfileStoreLabel &other); }; class ProfileStoreComboBox final : public MyComboBox { private: class MethodColumns final : public Gtk::TreeModel::ColumnRecord { public: Gtk::TreeModelColumn label; Gtk::TreeModelColumn profileStoreEntry; MethodColumns() { add (label); add (profileStoreEntry); } }; Glib::RefPtr refTreeModel; MethodColumns methodColumns; void refreshProfileList_ (Gtk::TreeModel::Row *parentRow, int parentFolderId, bool initial, const std::vector *entryList); Gtk::TreeIter findRowFromEntry_ (Gtk::TreeModel::Children childs, const ProfileStoreEntry *pse) const; Gtk::TreeIter findRowFromFullPath_ (Gtk::TreeModel::Children childs, int parentFolderId, const Glib::ustring &name) const; Gtk::TreeIter findRowFromEntry (const ProfileStoreEntry *pse) const; Gtk::TreeIter findRowFromFullPath (const Glib::ustring &path) const; public: ProfileStoreComboBox(); void updateProfileList(); Glib::ustring getCurrentLabel() const; const ProfileStoreEntry* getSelectedEntry() const; Glib::ustring getFullPathFromActiveRow () const; bool setActiveRowFromFullPath (const Glib::ustring &oldPath); bool setActiveRowFromEntry (const ProfileStoreEntry *pse); bool setInternalEntry (); Gtk::TreeIter getRowFromLabel (const Glib::ustring &name) const; Gtk::TreeIter addRow (const ProfileStoreEntry *profileStoreEntry); void deleteRow (const ProfileStoreEntry *profileStoreEntry); };