/* 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_GRAPHTREEWINDOW_HPP #define INGEN_GUI_GRAPHTREEWINDOW_HPP #include #include #include #include #include "Window.hpp" namespace Raul { class Path; } namespace Ingen { namespace Client { class ClientStore; class ObjectModel; } namespace GUI { class GraphWindow; class GraphTreeView; /** Window with a TreeView of all loaded graphs. * * \ingroup GUI */ class GraphTreeWindow : public Window { public: GraphTreeWindow(BaseObjectType* cobject, const Glib::RefPtr& xml); void init(App& app, Client::ClientStore& store); void new_object(SPtr object); void graph_property_changed(const Raul::URI& key, const Atom& value, SPtr gm); void graph_moved(SPtr graph); void add_graph(SPtr gm); void remove_graph(SPtr gm); void show_graph_menu(GdkEventButton* ev); protected: void event_graph_activated(const Gtk::TreeModel::Path& path, Gtk::TreeView::Column* col); void event_graph_enabled_toggled(const Glib::ustring& path_str); Gtk::TreeModel::iterator find_graph( Gtk::TreeModel::Children root, SPtr graph); GraphTreeView* _graphs_treeview; struct GraphTreeModelColumns : public Gtk::TreeModel::ColumnRecord { GraphTreeModelColumns() { add(name_col); add(enabled_col); add(graph_model_col); } Gtk::TreeModelColumn name_col; Gtk::TreeModelColumn enabled_col; Gtk::TreeModelColumn > graph_model_col; }; App* _app; GraphTreeModelColumns _graph_tree_columns; Glib::RefPtr _graph_treestore; Glib::RefPtr _graph_tree_selection; bool _enable_signal; }; /** Derived TreeView class to support context menus for graphs */ class GraphTreeView : public Gtk::TreeView { public: GraphTreeView(BaseObjectType* cobject, const Glib::RefPtr& xml) : Gtk::TreeView(cobject) , _window(NULL) {} void set_window(GraphTreeWindow* win) { _window = win; } bool on_button_press_event(GdkEventButton* ev) { bool ret = Gtk::TreeView::on_button_press_event(ev); if ((ev->type == GDK_BUTTON_PRESS) && (ev->button == 3)) _window->show_graph_menu(ev); return ret; } private: GraphTreeWindow* _window; }; // struct GraphTreeView } // namespace GUI } // namespace Ingen #endif // INGEN_GUI_GRAPHTREEWINDOW_HPP