/*
This file is part of Ingen.
Copyright 2007-2016 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_GRAPH_BOX_HPP
#define INGEN_GUI_GRAPH_BOX_HPP
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include "ingen/ingen.h"
#include "ingen/types.hpp"
#include "Window.hpp"
namespace Raul {
class Atom;
class Path;
}
namespace Ingen {
class URI;
namespace Client {
class GraphModel;
class PortModel;
class ObjectModel;
}
namespace GUI {
class BreadCrumbs;
class LoadGraphBox;
class LoadPluginWindow;
class NewSubgraphWindow;
class GraphDescriptionWindow;
class GraphView;
class GraphWindow;
class SubgraphModule;
/** A window for a graph.
*
* \ingroup GUI
*/
class INGEN_API GraphBox : public Gtk::VBox
{
public:
GraphBox(BaseObjectType* cobject,
const Glib::RefPtr& xml);
~GraphBox();
static SPtr create(
App& app, SPtr graph);
void init_box(App& app);
void set_status_text(const std::string& text);
void set_graph(SPtr graph,
SPtr view);
void set_window(GraphWindow* win) { _window = win; }
bool documentation_is_visible() { return _doc_scrolledwindow->is_visible(); }
void set_documentation(const std::string& doc, bool html);
SPtr graph() const { return _graph; }
SPtr view() const { return _view; }
void show_port_status(const Client::PortModel* port,
const Atom& value);
void set_graph_from_path(const Raul::Path& path, SPtr view);
void object_entered(const Client::ObjectModel* model);
void object_left(const Client::ObjectModel* model);
private:
void graph_port_added(SPtr port);
void graph_port_removed(SPtr port);
void property_changed(const URI& predicate, const Atom& value);
void show_status(const Client::ObjectModel* model);
void error(const Glib::ustring& message,
const Glib::ustring& secondary_text="");
bool confirm(const Glib::ustring& message,
const Glib::ustring& secondary_text="");
void save_graph(const URI& uri);
void event_import();
void event_save();
void event_save_as();
void event_export_image();
void event_redo();
void event_undo();
void event_copy();
void event_paste();
void event_delete();
void event_select_all();
void event_close();
void event_quit();
void event_parent_activated();
void event_refresh_activated();
void event_fullscreen_toggled();
void event_doc_pane_toggled();
void event_status_bar_toggled();
void event_animate_signals_toggled();
void event_sprung_layout_toggled();
void event_human_names_toggled();
void event_port_names_toggled();
void event_zoom_in();
void event_zoom_out();
void event_zoom_normal();
void event_zoom_full();
void event_increase_font_size();
void event_decrease_font_size();
void event_normal_font_size();
void event_arrange();
void event_show_properties();
void event_show_engine();
void event_clipboard_changed(GdkEventOwnerChange* ev);
App* _app;
SPtr _graph;
SPtr _view;
GraphWindow* _window;
sigc::connection new_port_connection;
sigc::connection removed_port_connection;
sigc::connection edit_mode_connection;
Gtk::MenuItem* _menu_import;
Gtk::MenuItem* _menu_save;
Gtk::MenuItem* _menu_save_as;
Gtk::MenuItem* _menu_export_image;
Gtk::MenuItem* _menu_redo;
Gtk::MenuItem* _menu_undo;
Gtk::MenuItem* _menu_cut;
Gtk::MenuItem* _menu_copy;
Gtk::MenuItem* _menu_paste;
Gtk::MenuItem* _menu_delete;
Gtk::MenuItem* _menu_select_all;
Gtk::MenuItem* _menu_close;
Gtk::MenuItem* _menu_quit;
Gtk::CheckMenuItem* _menu_animate_signals;
Gtk::CheckMenuItem* _menu_sprung_layout;
Gtk::CheckMenuItem* _menu_human_names;
Gtk::CheckMenuItem* _menu_show_port_names;
Gtk::CheckMenuItem* _menu_show_doc_pane;
Gtk::CheckMenuItem* _menu_show_status_bar;
Gtk::MenuItem* _menu_zoom_in;
Gtk::MenuItem* _menu_zoom_out;
Gtk::MenuItem* _menu_zoom_normal;
Gtk::MenuItem* _menu_zoom_full;
Gtk::MenuItem* _menu_increase_font_size;
Gtk::MenuItem* _menu_decrease_font_size;
Gtk::MenuItem* _menu_normal_font_size;
Gtk::MenuItem* _menu_parent;
Gtk::MenuItem* _menu_refresh;
Gtk::MenuItem* _menu_fullscreen;
Gtk::MenuItem* _menu_arrange;
Gtk::MenuItem* _menu_view_engine_window;
Gtk::MenuItem* _menu_view_control_window;
Gtk::MenuItem* _menu_view_graph_properties;
Gtk::MenuItem* _menu_view_messages_window;
Gtk::MenuItem* _menu_view_graph_tree_window;
Gtk::MenuItem* _menu_help_about;
Gtk::Alignment* _alignment;
BreadCrumbs* _breadcrumbs;
Gtk::Statusbar* _status_bar;
Gtk::Label* _status_label;
Gtk::HPaned* _doc_paned;
Gtk::ScrolledWindow* _doc_scrolledwindow;
sigc::connection _entered_connection;
sigc::connection _left_connection;
/** Invisible bin used to store breadcrumbs when not shown by a view */
Gtk::Alignment _breadcrumb_bin;
bool _has_shown_documentation;
bool _enable_signal;
};
} // namespace GUI
} // namespace Ingen
#endif // INGEN_GUI_GRAPH_BOX_HPP