/*
This file is part of Ingen.
Copyright 2007-2015 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_PORT_HPP
#define INGEN_GUI_PORT_HPP
#include
#include
#include
#include "ganv/Port.hpp"
#include "ingen/types.hpp"
namespace Raul {
class Atom;
}
namespace Ingen {
class URI;
namespace Client { class PortModel; }
namespace GUI {
class App;
class GraphBox;
/** A Port on an Module.
*
* \ingroup GUI
*/
class Port : public Ganv::Port
{
public:
static Port* create(
App& app,
Ganv::Module& module,
SPtr pm,
bool flip = false);
~Port();
SPtr model() const { return _port_model.lock(); }
bool show_menu(GdkEventButton* ev);
void update_metadata();
void ensure_label();
void value_changed(const Atom& value);
void activity(const Atom& value);
bool on_selected(gboolean b);
private:
Port(App& app,
Ganv::Module& module,
SPtr pm,
const std::string& name,
bool flip = false);
static std::string port_label(App& app, SPtr pm);
Gtk::Menu* build_enum_menu();
Gtk::Menu* build_uri_menu();
GraphBox* get_graph_box() const;
void property_changed(const URI& key, const Atom& value);
void property_removed(const URI& key, const Atom& value);
void moved();
void on_value_changed(double value);
void on_scale_point_activated(float f);
void on_uri_activated(const URI& uri);
bool on_event(GdkEvent* ev);
void port_properties_changed();
void set_type_tag();
App& _app;
WPtr _port_model;
bool _entered : 1;
bool _flipped : 1;
};
} // namespace GUI
} // namespace Ingen
#endif // INGEN_GUI_PORT_HPP