Allow markers to be glued to bar/beat time. Fixes #1815.
[ardour.git] / gtk2_ardour / region_editor.h
index 70590b0db5886e155507c0e17e7e09da343e1d2c..8fdb56321142d4bf8460740f85c87e5d7b99f958 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2001 Paul Davis 
+    Copyright (C) 2001 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id: /local/undo/gtk2_ardour/region_editor.h 5 2006-05-31T02:48:48.738745Z paul  $
 */
 
 #ifndef __gtk_ardour_region_edit_h__
 #define __gtk_ardour_region_edit_h__
 
+#include <map>
+
+#include <gtkmm/label.h>
+#include <gtkmm/entry.h>
+#include <gtkmm/box.h>
+#include <gtkmm/togglebutton.h>
+#include <gtkmm/button.h>
+#include <gtkmm/arrow.h>
+#include <gtkmm/frame.h>
+#include <gtkmm/table.h>
+#include <gtkmm/adjustment.h>
+#include <gtkmm/separator.h>
+#include <gtkmm/spinbutton.h>
+
+#include <libgnomecanvas/libgnomecanvas.h>
+
+#include "pbd/signals.h"
+
+#include "audio_clock.h"
 #include "ardour_dialog.h"
+#include "region_editor.h"
 
-namespace ARDOUR { class Session; }
+namespace ARDOUR {
+       class Region;
+       class Session;
+}
 
-/** Just a useless stub for now... */
 class RegionEditor : public ArdourDialog
 {
   public:
-       RegionEditor(ARDOUR::Session& s)
-       : ArdourDialog ("region editor")
-       , _session(s)
-       {}
+       RegionEditor (ARDOUR::Session*, boost::shared_ptr<ARDOUR::Region>);
+
+  protected:   
+       virtual void region_changed (const PBD::PropertyChange&);
+       
+       Gtk::Table _table;
+
+  private:
+       boost::shared_ptr<ARDOUR::Region> _region;
+
+       void connect_editor_events ();
+
+       Gtk::Label name_label;
+       Gtk::Entry name_entry;
+       Gtk::ToggleButton audition_button;
+
+       Gtk::Label position_label;
+       Gtk::Label end_label;
+       Gtk::Label length_label;
+       Gtk::Label sync_relative_label;
+       Gtk::Label sync_absolute_label;
+       Gtk::Label start_label;
+
+       AudioClock position_clock;
+       AudioClock end_clock;
+       AudioClock length_clock;
+       AudioClock sync_offset_relative_clock; ///< sync offset relative to the start of the region
+       AudioClock sync_offset_absolute_clock; ///< sync offset relative to the start of the timeline
+       AudioClock start_clock;
+
+       PBD::ScopedConnection state_connection;
+       PBD::ScopedConnection audition_connection;
+
+       void bounds_changed (const PBD::PropertyChange&);
+       void name_changed ();
+
+       void audition_state_changed (bool);
+
+       void activation ();
+
+       void name_entry_changed ();
+       void position_clock_changed ();
+       void end_clock_changed ();
+       void length_clock_changed ();
+       void sync_offset_absolute_clock_changed ();
+       void sync_offset_relative_clock_changed ();
+
+       void audition_button_toggled ();
+
+       gint bpressed (GdkEventButton* ev, Gtk::SpinButton* but, void (RegionEditor::*pmf)());
+       gint breleased (GdkEventButton* ev, Gtk::SpinButton* but, void (RegionEditor::*pmf)());
 
-       virtual ~RegionEditor () {}
+       bool on_delete_event (GdkEventAny *);
+       void handle_response (int);
 
-  protected:
-       ARDOUR::Session&     _session;
+       bool spin_arrow_grab;
 };
 
 #endif /* __gtk_ardour_region_edit_h__ */