X-Git-Url: https://main.carlh.net/gitweb/?a=blobdiff_plain;f=gtk2_ardour%2Flocation_ui.h;h=2cd69b834c038a89724d1c649982a33457cd44e2;hb=8a2c82465938cd528781e7cdcb04e8a3530a0b51;hp=8f16e2b43ac135a8a4a9a48de4d0276e58e5faa0;hpb=c2c3f3177c6f3642f69f0266360c027e27568f1a;p=ardour.git diff --git a/gtk2_ardour/location_ui.h b/gtk2_ardour/location_ui.h index 8f16e2b43a..2cd69b834c 100644 --- a/gtk2_ardour/location_ui.h +++ b/gtk2_ardour/location_ui.h @@ -1,5 +1,5 @@ /* - Copyright (C) 1999-2002 Paul Davis + Copyright (C) 1999-2002 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 __ardour_location_ui_h__ @@ -27,22 +26,28 @@ #include #include #include +#include -#include -#include +#include "pbd/signals.h" -#include "ardour_dialog.h" -#include "keyboard_target.h" +#include "ardour/location.h" +#include "ardour/session_handle.h" + +#include "widgets/ardour_button.h" +#include "widgets/pane.h" + +#include "ardour_window.h" +#include "audio_clock.h" namespace ARDOUR { - class LocationStack; - class Session; class Location; } -class LocationEditRow : public Gtk::HBox +class ClockGroup; + +class LocationEditRow : public Gtk::HBox, public ARDOUR::SessionHandlePtr { - public: +public: LocationEditRow (ARDOUR::Session *sess=0, ARDOUR::Location *loc=0, int32_t num=-1); virtual ~LocationEditRow(); @@ -52,11 +57,14 @@ class LocationEditRow : public Gtk::HBox void set_session (ARDOUR::Session *); void set_number (int); - - sigc::signal remove_requested; - sigc::signal redraw_ranges; + void focus_name(); + void set_clock_group (ClockGroup&); + void unset_clock_group () { _clock_group = 0; } - protected: + sigc::signal remove_requested; + sigc::signal redraw_ranges; + +protected: enum LocationPart { LocStart, @@ -65,31 +73,30 @@ class LocationEditRow : public Gtk::HBox }; ARDOUR::Location *location; - ARDOUR::Session *session; - - Gtk::Table item_table; - + Gtk::Entry name_entry; Gtk::Label name_label; Gtk::Label number_label; - + Gtk::HBox start_hbox; - Gtk::Button start_set_button; - Gtk::Button start_go_button; AudioClock start_clock; + ArdourWidgets::ArdourButton start_to_playhead_button; + ArdourWidgets::ArdourButton locate_to_start_button; Gtk::HBox end_hbox; - Gtk::Button end_set_button; - Gtk::Button end_go_button; AudioClock end_clock; + ArdourWidgets::ArdourButton end_to_playhead_button; + ArdourWidgets::ArdourButton locate_to_end_button; AudioClock length_clock; Gtk::CheckButton cd_check_button; Gtk::CheckButton hide_check_button; + Gtk::CheckButton lock_check_button; + Gtk::CheckButton glue_check_button; - Gtk::Button remove_button; + ArdourWidgets::ArdourButton remove_button; Gtk::HBox cd_track_details_hbox; Gtk::Entry isrc_entry; @@ -97,87 +104,93 @@ class LocationEditRow : public Gtk::HBox Gtk::Label performer_label; - Gtk::Entry performer_entry; + Gtk::Entry performer_entry; Gtk::Label composer_label; - Gtk::Entry composer_entry; + Gtk::Entry composer_entry; Gtk::CheckButton scms_check_button; + Gtk::Label scms_label; Gtk::CheckButton preemph_check_button; - + Gtk::Label preemph_label; + ClockGroup* _clock_group; guint32 i_am_the_modifier; int number; - + void name_entry_changed (); void isrc_entry_changed (); void performer_entry_changed (); void composer_entry_changed (); - - void set_button_pressed (LocationPart part); - void go_button_pressed (LocationPart part); + + void to_playhead_button_pressed (LocationPart part); + void locate_button_pressed (LocationPart part); void clock_changed (LocationPart part); + bool locate_to_clock (GdkEventButton*, AudioClock*); void cd_toggled (); void hide_toggled (); + void lock_toggled (); + void glue_toggled (); void remove_button_pressed (); void scms_toggled (); void preemph_toggled (); - gint entry_focus_event (GdkEventFocus* ev); - - void end_changed (ARDOUR::Location *); - void start_changed (ARDOUR::Location *); - void name_changed (ARDOUR::Location *); - void location_changed (ARDOUR::Location *); - void flags_changed (ARDOUR::Location *, void *src); - - sigc::connection start_changed_connection; - sigc::connection end_changed_connection; - sigc::connection name_changed_connection; - sigc::connection changed_connection; - sigc::connection flags_changed_connection; - -}; + void end_changed (); + void start_changed (); + void name_changed (); + void location_changed (); + void flags_changed (); + void lock_changed (); + void position_lock_style_changed (); + + void set_clock_editable_status (); + void show_cd_track_details (); + PBD::ScopedConnectionList connections; +}; -class LocationUI : public ArdourDialog +class LocationUI : public Gtk::HBox, public ARDOUR::SessionHandlePtr { - public: - LocationUI (); +public: + LocationUI (std::string state_node_name = "LocationUI"); ~LocationUI (); void set_session (ARDOUR::Session *); - private: - + void add_new_location(); + void add_new_range(); - ARDOUR::LocationStack *locations; + void refresh_location_list (); - void session_gone(); + XMLNode & get_state () const; + int set_state (const XMLNode&); +private: + /** set to the location that has just been created with the LocationUI `add' button + (if Config->get_name_new_markers() is true); if it is non-0, the name entry of + the location is given the focus by location_added(). + */ + ARDOUR::Location *newest_location; - Gtk::VBox location_vpacker; - Gtk::HBox location_hpacker; + void session_going_away (); LocationEditRow loop_edit_row; LocationEditRow punch_edit_row; - - Gtk::VPaned loc_range_panes; - - Gtk::Frame loc_frame; + Gtk::VBox loop_punch_box; + + ArdourWidgets::VPane loc_range_panes; + Gtk::VBox loc_frame_box; Gtk::Button add_location_button; Gtk::ScrolledWindow location_rows_scroller; Gtk::VBox location_rows; - Gtk::Frame range_frame; Gtk::VBox range_frame_box; Gtk::Button add_range_button; Gtk::ScrolledWindow range_rows_scroller; Gtk::VBox range_rows; - /* When any location changes it start or end points, it sends a signal that is caught by one of these functions @@ -188,17 +201,37 @@ class LocationUI : public ArdourDialog void location_redraw_ranges (); gint do_location_remove (ARDOUR::Location *); - + guint32 i_am_the_modifier; - void add_new_location(); - void add_new_range(); - - void refresh_location_list (); - void refresh_location_list_s (ARDOUR::Change); void location_removed (ARDOUR::Location *); void location_added (ARDOUR::Location *); - void map_locations (ARDOUR::Locations::LocationList&); + void map_locations (const ARDOUR::Locations::LocationList&); + + ClockGroup* _clock_group; + AudioClock::Mode clock_mode_from_session_instant_xml (); + + AudioClock::Mode _mode; + bool _mode_set; + + std::string _state_node_name; +}; + +class LocationUIWindow : public ArdourWindow +{ +public: + LocationUIWindow (); + ~LocationUIWindow (); + + void on_map (); + void set_session (ARDOUR::Session *); + + LocationUI& ui() { return _ui; } + +protected: + LocationUI _ui; + bool on_delete_event (GdkEventAny*); + void session_going_away(); }; #endif // __ardour_location_ui_h__