Fix playhead smoothing when auditioning.
[ardour.git] / gtk2_ardour / latency_gui.h
index 49f22fa2664c4128b9210103adb6fca360f99489..943944571ea59f1956ad0b22a657c46169578a6a 100644 (file)
@@ -1,15 +1,36 @@
+/*
+    Copyright (C) 2012 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
+    the Free Software Foundation; either version 2 of the License, or
+    (at your option) any later version.
+
+    This program is distributed in the hope that it will be useful,
+    but WITHOUT ANY WARRANTY; without even the implied warranty of
+    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+    GNU General Public License for more details.
+
+    You should have received a copy of the GNU General Public License
+    along with this program; if not, write to the Free Software
+    Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
+
+*/
+
+#ifndef __gtk2_ardour_latency_gui_h__
+#define __gtk2_ardour_latency_gui_h__
+
 #include <vector>
 #include <string>
 
-#include <gtkmm/dialog.h>
+#include <gtkmm/adjustment.h>
 #include <gtkmm/box.h>
 #include <gtkmm/button.h>
-#include <gtkmm/adjustment.h>
+#include <gtkmm/comboboxtext.h>
 
-#include <gtkmm2ext/barcontroller.h>
-#include <pbd/controllable.h>
-
-#include <ardour/types.h>
+#include "pbd/controllable.h"
+#include "ardour/types.h"
+#include "widgets/barcontroller.h"
 
 #include "ardour_dialog.h"
 
@@ -17,25 +38,41 @@ namespace ARDOUR {
        class Latent;
 }
 
+class LatencyGUI;
+
+class LatencyBarController : public ArdourWidgets::BarController
+{
+public:
+       LatencyBarController (Gtk::Adjustment& adj, LatencyGUI* g)
+               : BarController (adj, boost::shared_ptr<PBD::IgnorableControllable> (new PBD::IgnorableControllable ())),
+                                _latency_gui (g)
+       {}
+
+private:
+       LatencyGUI* _latency_gui;
+
+       std::string get_label (double&);
+};
+
 class LatencyGUI : public Gtk::VBox
 {
-  public:
-       LatencyGUI (ARDOUR::Latent&, nframes64_t sample_rate, nframes64_t period_size);
+public:
+       LatencyGUI (ARDOUR::Latent&, samplepos_t sample_rate, samplepos_t period_size);
        ~LatencyGUI() { }
 
        void finish ();
        void reset ();
        void refresh ();
 
-  private:
+private:
        ARDOUR::Latent& _latent;
-       nframes64_t initial_value;
-       nframes64_t sample_rate;
-       nframes64_t period_size;
-       PBD::IgnorableControllable ignored;
+       samplepos_t initial_value;
+       samplepos_t sample_rate;
+       samplepos_t period_size;
+       boost::shared_ptr<PBD::IgnorableControllable> ignored;
 
        Gtk::Adjustment adjustment;
-       Gtkmm2ext::BarController bc;
+       LatencyBarController bc;
        Gtk::HBox hbox1;
        Gtk::HBox hbox2;
        Gtk::HButtonBox hbbox;
@@ -45,7 +82,8 @@ class LatencyGUI : public Gtk::VBox
        Gtk::ComboBoxText units_combo;
 
        void change_latency_from_button (int dir);
-       void latency_printer (char* buf, unsigned int bufsize);
+
+       friend class LatencyBarController;
 
        static std::vector<std::string> unit_strings;
 };
@@ -53,9 +91,11 @@ class LatencyGUI : public Gtk::VBox
 class LatencyDialog : public ArdourDialog
 {
   public:
-       LatencyDialog (const Glib::ustring& title, ARDOUR::Latent&, nframes64_t sample_rate, nframes64_t period_size);
+       LatencyDialog (const std::string& title, ARDOUR::Latent&, samplepos_t sample_rate, samplepos_t period_size);
        ~LatencyDialog() {}
 
   private:
        LatencyGUI lwidget;
 };
+
+#endif /* __gtk2_ardour_latency_gui_h__ */