do not reset session for MonitorSection just because monitor out was removed
[ardour.git] / gtk2_ardour / speaker_dialog.h
index 4922875f7fa4cb556bf3eb24647d60a61005ed0a..95217003802168da9626e5326f64872fd2787378 100644 (file)
 
 #include "ardour/speakers.h"
 
-#include "ardour_dialog.h"
+#include "ardour_window.h"
 
-class SpeakerDialog  : public ArdourDialog
+class SpeakerDialog  : public ArdourWindow
 {
 public:
        SpeakerDialog ();
-       
-       ARDOUR::Speakers get_speakers() const;
+
+       boost::shared_ptr<ARDOUR::Speakers> get_speakers() const;
        void set_speakers (boost::shared_ptr<ARDOUR::Speakers>);
-       
+
 private:
-       ARDOUR::Speakers speakers;
+       boost::weak_ptr<ARDOUR::Speakers> _speakers;
        Gtk::HBox        hbox;
        Gtk::VBox        side_vbox;
        Gtk::AspectFrame aspect_frame;
@@ -47,8 +47,7 @@ private:
        Gtk::Adjustment  azimuth_adjustment;
        Gtk::SpinButton  azimuth_spinner;
        Gtk::Button      add_speaker_button;
-       Gtk::Button      use_system_button;
-       int32_t          selected_speaker;
+       Gtk::Button      remove_speaker_button;
        int              width;         ///< width of the circle
        int              height;        ///< height of the circle
        int              x_origin;      ///< x origin of our stuff within the drawing area
@@ -59,20 +58,28 @@ private:
        double           drag_offset_x;
        double           drag_offset_y;
        int              drag_index;
-       
+       int              selected_index; ///< index of any selected speaker, or -1
+       PBD::ScopedConnection selected_speaker_connection;
+       bool             ignore_speaker_position_change;
+       bool             ignore_azimuth_change;
+
        bool darea_expose_event (GdkEventExpose*);
        void darea_size_allocate (Gtk::Allocation& alloc);
        bool darea_motion_notify_event (GdkEventMotion *ev);
        bool handle_motion (gint evx, gint evy, GdkModifierType state);
        bool darea_button_press_event (GdkEventButton *ev);
        bool darea_button_release_event (GdkEventButton *ev);
-       
+
        void clamp_to_circle (double& x, double& y);
        void gtk_to_cart (PBD::CartesianVector& c) const;
        void cart_to_gtk (PBD::CartesianVector& c) const;
        int find_closest_object (gdouble x, gdouble y);
 
        void add_speaker ();
+       void remove_speaker ();
+       void azimuth_changed ();
+       void set_selected (int);
+       void speaker_position_changed ();
 };
 
 #endif /* __ardour_gtk_speaker_dialog_h__ */