summaryrefslogtreecommitdiff
path: root/gtk2_ardour/audio_clock.h
diff options
context:
space:
mode:
authorTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
committerTaybin Rutkin <taybin@taybin.com>2005-09-25 18:42:24 +0000
commit209d967b1bb80a9735d690d8f4f0455ecb9970ca (patch)
tree9d76ddcd7c1ac9d91bb2b1a33d31b66ce4ded5de /gtk2_ardour/audio_clock.h
parente4b9aed743fc765219ac775905a221c017c88fba (diff)
Initial import of gtk2_ardour.
git-svn-id: svn://localhost/trunk/ardour2@24 d708f5d6-7413-0410-9779-e7cbd77b26cf
Diffstat (limited to 'gtk2_ardour/audio_clock.h')
-rw-r--r--gtk2_ardour/audio_clock.h176
1 files changed, 176 insertions, 0 deletions
diff --git a/gtk2_ardour/audio_clock.h b/gtk2_ardour/audio_clock.h
new file mode 100644
index 0000000000..b9c9be095d
--- /dev/null
+++ b/gtk2_ardour/audio_clock.h
@@ -0,0 +1,176 @@
+/*
+ Copyright (C) 1999 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.
+
+ $Id$
+*/
+
+#ifndef __audio_clock_h__
+#define __audio_clock_h__
+
+#include <gtk--.h>
+#include <ardour/ardour.h>
+
+namespace ARDOUR {
+ class Session;
+};
+
+class AudioClock : public Gtk::HBox
+{
+ public:
+ enum Mode {
+ SMPTE,
+ BBT,
+ MinSec,
+ Frames,
+ Off,
+ };
+
+ AudioClock (const string& name, bool editable, bool is_duration = false, bool with_tempo_meter = false);
+
+ Mode mode() const { return _mode; }
+
+ void set (jack_nframes_t, bool force = false);
+ void set_mode (Mode);
+
+ jack_nframes_t current_time (jack_nframes_t position = 0) const;
+ jack_nframes_t current_duration (jack_nframes_t position = 0) const;
+ void set_session (ARDOUR::Session *s);
+
+ SigC::Signal0<void> ValueChanged;
+
+ private:
+ ARDOUR::Session *session;
+ Mode _mode;
+ uint32_t key_entry_state;
+ bool is_duration;
+ bool editable;
+
+ Gtk::Menu *ops_menu;
+
+ Gtk::HBox smpte_packer_hbox;
+ Gtk::HBox smpte_packer;
+
+ Gtk::HBox minsec_packer_hbox;
+ Gtk::HBox minsec_packer;
+
+ Gtk::HBox bbt_packer_hbox;
+ Gtk::HBox bbt_packer;
+
+ Gtk::HBox frames_packer_hbox;
+
+ enum Field {
+ SMPTE_Hours,
+ SMPTE_Minutes,
+ SMPTE_Seconds,
+ SMPTE_Frames,
+ MS_Hours,
+ MS_Minutes,
+ MS_Seconds,
+ Bars,
+ Beats,
+ Ticks,
+ AudioFrames,
+ };
+
+ Gtk::EventBox audio_frames_ebox;
+ Gtk::Label audio_frames_label;
+
+ Gtk::EventBox hours_ebox;
+ Gtk::EventBox minutes_ebox;
+ Gtk::EventBox seconds_ebox;
+ Gtk::EventBox frames_ebox;
+
+ Gtk::EventBox ms_hours_ebox;
+ Gtk::EventBox ms_minutes_ebox;
+ Gtk::EventBox ms_seconds_ebox;
+
+ Gtk::EventBox bars_ebox;
+ Gtk::EventBox beats_ebox;
+ Gtk::EventBox ticks_ebox;
+
+ Gtk::Label hours_label;
+ Gtk::Label minutes_label;
+ Gtk::Label seconds_label;
+ Gtk::Label frames_label;
+ Gtk::Label colon1, colon2, colon3;
+
+ Gtk::Label ms_hours_label;
+ Gtk::Label ms_minutes_label;
+ Gtk::Label ms_seconds_label;
+ Gtk::Label colon4, colon5;
+
+ Gtk::Label bars_label;
+ Gtk::Label beats_label;
+ Gtk::Label ticks_label;
+ Gtk::Label b1;
+ Gtk::Label b2;
+
+ Gtk::Label* tempo_label;
+ Gtk::Label* meter_label;
+
+ Gtk::VBox tempo_meter_box;
+
+ Gtk::EventBox clock_base;
+ Gtk::Frame clock_frame;
+
+ jack_nframes_t last_when;
+
+ long last_hrs;
+ long last_mins;
+ long last_secs;
+ long last_frames;
+ bool last_negative;
+
+ long ms_last_hrs;
+ long ms_last_mins;
+ float ms_last_secs;
+
+ bool dragging;
+ double drag_start_y;
+ double drag_y;
+ double drag_accum;
+
+ void realize_impl ();
+
+ gint field_motion_notify_event (GdkEventMotion *ev, Field);
+ gint field_button_press_event (GdkEventButton *ev, Field);
+ gint field_button_release_event (GdkEventButton *ev, Field);
+ gint field_key_release_event (GdkEventKey *, Field);
+ gint field_focus_in_event (GdkEventFocus *, Field);
+ gint field_focus_out_event (GdkEventFocus *, Field);
+
+ void set_smpte (jack_nframes_t, bool);
+ void set_bbt (jack_nframes_t, bool);
+ void set_minsec (jack_nframes_t, bool);
+ void set_frames (jack_nframes_t, bool);
+
+ jack_nframes_t get_frames (Field,jack_nframes_t pos = 0,int dir=1);
+
+ void smpte_sanitize_display();
+ jack_nframes_t smpte_frame_from_display () const;
+ jack_nframes_t bbt_frame_from_display (jack_nframes_t) const;
+ jack_nframes_t bbt_frame_duration_from_display (jack_nframes_t) const;
+ jack_nframes_t minsec_frame_from_display () const;
+ jack_nframes_t audio_frame_from_display () const;
+
+ void build_ops_menu ();
+ void setup_events ();
+
+ static const uint32_t field_length[(int)AudioFrames+1];
+};
+
+#endif /* __audio_clock_h__ */