do not reset session for MonitorSection just because monitor out was removed
[ardour.git] / gtk2_ardour / speaker_dialog.h
index 4deee287ff375e44d991ec6bcc3d6e5581e3b2f9..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,25 +47,39 @@ private:
        Gtk::Adjustment  azimuth_adjustment;
        Gtk::SpinButton  azimuth_spinner;
        Gtk::Button      add_speaker_button;
-       Gtk::Button      use_system_button;
-       int32_t          selected_speaker;
-       int              width;
-       int              height;
-       int              drag_x;
-       int              drag_y;
+       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
+       int              y_origin;      ///< y origin of our stuff within the drawing area
+       /** distance from the centre of the object being dragged to the mouse pointer
+        *  when the drag was started (ie start_pointer - object_position).
+        */
+       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__ */