Add browse button to recent session dialogue. Fixes #3357.
[ardour.git] / gtk2_ardour / marker.h
index 65952899016f498fba9eb3859a147c611d6f482b..e9ff0501edc1fdc28ac908953d284355f8135978 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
@@ -15,7 +15,6 @@
     along with this program; if not, write to the Free Software
     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
 
-    $Id$
 */
 
 #ifndef __gtk_ardour_marker_h__
 
 #include <string>
 #include <glib.h>
-#include <ardour/ardour.h>
-#include <libgnomecanvasmm/libgnomecanvasmm.h>
-#include <libgnomecanvasmm/polygon.h>
+
+#include <libgnomecanvasmm/pixbuf.h>
 #include <sigc++/signal.h>
 
+#include "ardour/ardour.h"
+#include "pbd/signals.h"
+
+#include "canvas.h"
+
 namespace ARDOUR {
        class TempoSection;
        class MeterSection;
@@ -42,48 +45,69 @@ class Marker : public sigc::trackable
                Mark,
                Tempo,
                Meter,
-               Start,
-               End,
+               Start, ///< session start
+               End,   ///< session end
                LoopStart,
                LoopEnd,
                PunchIn,
                PunchOut
        };
 
-       Marker (PublicEditor& editor, Gnome::Canvas::Group& parent, guint32 rgba, const string& text, Type, 
-               gint (*callback)(Gnome::Canvas::Item *, GdkEvent *, gpointer), jack_nframes_t frame = 0);
+
+       Marker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, Type,
+               nframes_t frame = 0, bool handle_events = true);
+
        virtual ~Marker ();
 
-       void set_position (jack_nframes_t);
-       void set_name (const string&);
+       static PBD::Signal1<void,Marker*> CatchDeletion;
+
+       ArdourCanvas::Item& the_item() const;
+
+       void add_line (ArdourCanvas::Group*, double y_origin, double initial_height);
+       void show_line ();
+       void hide_line ();
+       void set_line_vpos (double y_origin, double height);
+
+       void set_position (nframes64_t);
+       void set_name (const std::string&);
        void set_color_rgba (uint32_t rgba);
 
+       nframes64_t position() const { return frame_position; }
+
+       ArdourCanvas::Group * get_parent() { return _parent; }
+       void reparent (ArdourCanvas::Group & parent);
+
        void hide ();
        void show ();
 
        Type type () { return _type; }
-       
+
   protected:
        PublicEditor& editor;
 
-       Gnome::Canvas::Group *group;
-       Gnome::Canvas::Item *mark;
-       Gnome::Canvas::Text *text;
-       Gnome::Canvas::Points *points;
+       Pango::FontDescription* name_font;
+
+       ArdourCanvas::Group * _parent;
+       ArdourCanvas::Group *group;
+       ArdourCanvas::Polygon *mark;
+       ArdourCanvas::Pixbuf *name_pixbuf;
+       ArdourCanvas::Points *points;
+       ArdourCanvas::SimpleLine *line;
+       ArdourCanvas::Points *line_points;
+
+       double        unit_position;
+       nframes64_t   frame_position;
+       unsigned char shift; /* should be double, but its always small and integral */
+       Type          _type;
+       int           name_height;
 
-       double    unit_position;
-       jack_nframes_t frame_position;
-       unsigned char      shift; /* should be double, but its always small and integral */
-       Type      _type;
-       
        void reposition ();
 };
 
 class TempoMarker : public Marker
 {
   public:
-        TempoMarker (PublicEditor& editor, Gnome::Canvas::Group& parent, guint32 rgba, const string& text, ARDOUR::TempoSection&, 
-                    gint (*callback)(Gnome::Canvas::Item *, GdkEvent *, gpointer));
+        TempoMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, ARDOUR::TempoSection&);
        ~TempoMarker ();
 
        ARDOUR::TempoSection& tempo() const { return _tempo; }
@@ -95,8 +119,7 @@ class TempoMarker : public Marker
 class MeterMarker : public Marker
 {
   public:
-        MeterMarker (PublicEditor& editor, Gnome::Canvas::Group& parent, guint32 rgba, const string& text, ARDOUR::MeterSection&, 
-                    gint (*callback)(Gnome::Canvas::Item *, GdkEvent *, gpointer));
+        MeterMarker (PublicEditor& editor, ArdourCanvas::Group& parent, guint32 rgba, const std::string& text, ARDOUR::MeterSection&);
        ~MeterMarker ();
 
        ARDOUR::MeterSection& meter() const { return _meter; }