/* This file is part of Ingen. Copyright 2007-2012 David Robillard Ingen is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or any later version. Ingen 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 Affero General Public License for details. You should have received a copy of the GNU Affero General Public License along with Ingen. If not, see . */ #ifndef INGEN_GUI_PROPERTIES_WINDOW_HPP #define INGEN_GUI_PROPERTIES_WINDOW_HPP #include #include #include #include #include #include #include #include #include #include #include "ingen/client/BlockModel.hpp" #include "ingen/types.hpp" #include "Window.hpp" namespace Ingen { namespace Client { class ObjectModel; } namespace GUI { /** Object properties window. * * Loaded from XML as a derived object. * * \ingroup GUI */ class PropertiesWindow : public Window { public: PropertiesWindow(BaseObjectType* cobject, const Glib::RefPtr& xml); void present(SPtr model); void set_object(SPtr model); private: /** Record of a property (row in the table) */ struct Record { Record(const Atom& v, Gtk::Alignment* vw, int r, Gtk::CheckButton* cb) : value(v), value_widget(vw), row(r), present_button(cb) {} Atom value; Gtk::Alignment* value_widget; int row; Gtk::CheckButton* present_button; }; struct ComboColumns : public Gtk::TreeModel::ColumnRecord { ComboColumns() { add(label_col); add(uri_col); } Gtk::TreeModelColumn label_col; Gtk::TreeModelColumn uri_col; }; void add_property(const Raul::URI& uri, const Atom& value); Gtk::Widget* create_value_widget(const Raul::URI& uri, const Atom& value); void reset(); void on_show(); void property_changed(const Raul::URI& predicate, const Atom& value); void property_removed(const Raul::URI& predicate, const Atom& value); void value_edited(const Raul::URI& predicate); void key_changed(); void add_clicked(); void cancel_clicked(); void apply_clicked(); void ok_clicked(); typedef std::map Records; Records _records; SPtr _model; ComboColumns _combo_columns; Glib::RefPtr _key_store; Glib::RefPtr _value_store; sigc::connection _property_connection; sigc::connection _property_removed_connection; Gtk::VBox* _vbox; Gtk::ScrolledWindow* _scrolledwindow; Gtk::Table* _table; Gtk::ComboBox* _key_combo; Gtk::ComboBox* _value_combo; Gtk::Button* _add_button; Gtk::Button* _cancel_button; Gtk::Button* _apply_button; Gtk::Button* _ok_button; }; } // namespace GUI } // namespace Ingen #endif // INGEN_GUI_PROPERTIES_WINDOW_HPP