along with this program; if not, write to the Free Software
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
- $Id$
*/
#ifndef __ardour_panner_2d_h__
#include <sys/types.h>
#include <map>
-#include <string>
+#include <vector>
#include <glibmm/refptr.h>
#include <gtkmm/drawingarea.h>
-
-using std::map;
-using std::string;
+#include <gtkmm/window.h>
+#include <gtkmm/box.h>
+#include <gtkmm/button.h>
+#include <gtkmm/spinbutton.h>
+#include <gtkmm/adjustment.h>
namespace ARDOUR {
class Panner;
class Layout;
}
+class Panner2dWindow;
+
class Panner2d : public Gtk::DrawingArea
{
public:
- Panner2d (ARDOUR::Panner&, int32_t height);
+ Panner2d (boost::shared_ptr<ARDOUR::Panner>, int32_t height);
~Panner2d ();
-
- int puck_position (int which_puck, float& x, float& y);
- int target_position (int which_target, float& x, float& y);
void allow_x_motion(bool);
void allow_y_motion(bool);
void move_puck (int, float x, float y);
void reset (uint32_t n_inputs);
+ Gtk::Adjustment& azimuth (uint32_t which);
+
+ boost::shared_ptr<ARDOUR::Panner> get_panner() const { return panner; }
+
sigc::signal<void,int> PuckMoved;
sigc::signal<void,int> TargetMoved;
private:
struct Target {
- float x;
- float y;
+ Gtk::Adjustment x;
+ Gtk::Adjustment y;
+ Gtk::Adjustment azimuth;
bool visible;
char* text;
- size_t textlen;
Target (float xa, float ya, const char* txt = 0);
~Target ();
+
+ void set_text (const char*);
};
- ARDOUR::Panner& panner;
- Gtk::Menu* context_menu;
- Gtk::CheckMenuItem* bypass_menu_item;
+ boost::shared_ptr<ARDOUR::Panner> panner;
Glib::RefPtr<Pango::Layout> layout;
typedef std::map<int,Target *> Targets;
Targets pucks;
Target *drag_target;
+ int drag_x;
+ int drag_y;
int drag_index;
bool drag_is_puck;
bool allow_x;
int height;
bool bypassflag;
-
+
gint compute_x (float);
gint compute_y (float);
gint handle_motion (gint, gint, GdkModifierType);
void toggle_bypass ();
- void show_context_menu ();
void handle_state_change ();
+ void handle_position_change ();
+};
+
+class Panner2dWindow : public Gtk::Window
+{
+ public:
+ Panner2dWindow (boost::shared_ptr<ARDOUR::Panner>, int32_t height, uint32_t inputs);
+
+ void reset (uint32_t n_inputs);
+
+ private:
+ Panner2d widget;
+
+ Gtk::HBox hpacker;
+ Gtk::VBox button_box;
+ Gtk::Button reset_button;
+ Gtk::ToggleButton bypass_button;
+ Gtk::ToggleButton mute_button;
+ Gtk::VBox spinner_box;
+ Gtk::VBox left_side;
+
+ std::vector<Gtk::SpinButton*> spinners;
};
#endif /* __ardour_panner_2d_h__ */