summaryrefslogtreecommitdiff
path: root/gtk2_ardour/time_axis_view.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/time_axis_view.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/time_axis_view.h')
-rw-r--r--gtk2_ardour/time_axis_view.h290
1 files changed, 290 insertions, 0 deletions
diff --git a/gtk2_ardour/time_axis_view.h b/gtk2_ardour/time_axis_view.h
new file mode 100644
index 0000000000..a125e188ba
--- /dev/null
+++ b/gtk2_ardour/time_axis_view.h
@@ -0,0 +1,290 @@
+/*
+ Copyright (C) 2003 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 __ardour_gtk_time_axis_h__
+#define __ardour_gtk_time_axis_h__
+
+#include <vector>
+#include <list>
+
+#include <gtk--.h>
+#include <gtk-canvas.h>
+
+#include <ardour/types.h>
+#include <ardour/region.h>
+
+#include "prompter.h"
+#include "axis_view.h"
+#include "enums.h"
+#include "editing.h"
+
+namespace ARDOUR {
+ class Session;
+ class Region;
+ class Session;
+ class RouteGroup;
+ class Playlist;
+}
+
+class PublicEditor;
+class AudioRegionSelection;
+class TimeSelection;
+class PointSelection;
+class TimeAxisViewItem;
+class Selection;
+class Selectable;
+
+/**
+ * TimeAxisView defines the abstract base class for time-axis views.
+ *
+ * This class provides the basic LHS controls and display methods. This should be
+ * extended to create functional time-axis based views.
+ *
+ */
+class TimeAxisView : public virtual AxisView
+{
+ public:
+ enum TrackHeight {
+ /* canvas units. they need to be odd
+ valued so that there is a precise
+ middle.
+ */
+ Largest = 301,
+ Large = 201,
+ Larger = 101,
+ Normal = 51,
+ Smaller = 31,
+ Small = 21
+ };
+
+ TimeAxisView(ARDOUR::Session& sess, PublicEditor& ed, TimeAxisView* parent, Gtk::Widget *canvas);
+ virtual ~TimeAxisView ();
+
+ /* public data: XXX create accessor/mutators for these ?? */
+
+ PublicEditor& editor;
+
+ guint32 height; /* in canvas units */
+ guint32 effective_height; /* in canvas units */
+ double y_position;
+ int order;
+
+
+ GtkCanvasItem *canvas_display;
+ Gtk::VBox *control_parent;
+
+ /* The Standard LHS Controls */
+ Gtk::Frame controls_frame;
+ Gtk::HBox controls_hbox;
+ Gtk::EventBox controls_lhs_pad;
+ Gtk::Table controls_table;
+ Gtk::EventBox controls_ebox;
+ Gtk::VBox controls_vbox;
+ Gtk::HBox name_hbox;
+ Gtk::Frame name_frame;
+ Gtk::Entry name_entry;
+
+ /**
+ * Display this TrackView as the nth component of the parent box, at y.
+ *
+ * @param y
+ * @param nth
+ * @param parent the parent component
+ * @return the height of this TrackView
+ */
+ virtual guint32 show_at (double y, int& nth, Gtk::VBox *parent);
+
+ bool touched (double top, double bot);
+
+ /**
+ * Hides this TrackView
+ */
+ virtual void hide ();
+ bool hidden() const { return _hidden; }
+
+ virtual void set_selected (bool);
+
+ /**
+ * potential handler for entered events
+ */
+
+ virtual void entered () {}
+ virtual void exited () {}
+
+ /**
+ * Sets the height of this TrackView to one of ths TrackHeghts
+ *
+ * @param h the TrackHeight value to set
+ */
+ virtual void set_height (TrackHeight h);
+ void reset_height();
+ /**
+ * Steps through the defined TrackHeights for this TrackView.
+ * Sets bigger to true to step up in size, set to fals eot step smaller.
+ *
+ * @param bigger true if stepping should increase in size, false otherwise
+ */
+ virtual void step_height (bool bigger);
+
+ virtual ARDOUR::RouteGroup* edit_group() const { return 0; }
+ virtual ARDOUR::Playlist* playlist() const { return 0; }
+
+ virtual void set_samples_per_unit (double);
+ virtual void show_selection (TimeSelection&);
+ virtual void hide_selection ();
+ virtual void reshow_selection (TimeSelection&);
+ virtual void show_timestretch (jack_nframes_t start, jack_nframes_t end);
+ virtual void hide_timestretch ();
+
+ virtual void hide_dependent_views (TimeAxisViewItem&) {}
+ virtual void reveal_dependent_views (TimeAxisViewItem&) {}
+
+ /* editing operations */
+
+ virtual bool cut_copy_clear (Selection&, Editing::CutCopyOp) { return false; }
+ virtual bool paste (jack_nframes_t, float times, Selection&, size_t nth) { return false; }
+
+ virtual void set_selected_regionviews (AudioRegionSelection&) {}
+ virtual void set_selected_points (PointSelection&) {}
+
+ virtual ARDOUR::Region* find_next_region (jack_nframes_t pos, ARDOUR::RegionPoint, int32_t dir) {
+ return 0;
+ }
+
+ void order_selection_trims (GtkCanvasItem *item, bool put_start_on_top);
+
+ virtual void get_selectables (jack_nframes_t start, jack_nframes_t end, double top, double bot, list<Selectable*>& results);
+ virtual void get_inverted_selectables (Selection&, list<Selectable *>& results);
+
+ /* state/serialization management */
+
+ void set_parent (TimeAxisView& p);
+ bool has_state () const;
+
+ virtual void set_state (const XMLNode&);
+ virtual XMLNode* get_state_node () { return 0; }
+
+ /* call this on the parent */
+
+ virtual XMLNode* get_child_xml_node (std::string childname) { return 0; }
+
+ protected:
+
+ string controls_base_unselected_name;
+ string controls_base_selected_name;
+
+ /**
+ * Handle mouse press on our LHS control name entry.
+ *
+ * @param ev the event
+ */
+ virtual gint name_entry_button_press (GdkEventButton *ev);
+
+ /**
+ * Handle mouse relaese on our LHS control name entry.
+ *
+ *@ param ev the event
+ */
+ virtual gint name_entry_button_release (GdkEventButton *ev);
+
+ /**
+ * Handle mouse relaese on our LHS control name ebox.
+ *
+ *@ param ev the event
+ */
+ virtual gint controls_ebox_button_release (GdkEventButton *ev);
+
+ /**
+ * Displays the standard LHS control menu at when.
+ *
+ * @param when the popup activation time
+ */
+ virtual void popup_display_menu (guint32 when);
+
+ /**
+ * Build the standard LHS control menu.
+ * Subclasses should extend this method to add their own menu options.
+ *
+ */
+ virtual void build_display_menu ();
+
+ /**
+ * Do anything that needs to be done to dynamically reset
+ * the LHS control menu.
+ */
+ virtual gint handle_display_menu_map_event (GdkEventAny *ev) { return FALSE; }
+
+ /**
+ * Build the standard LHS control size menu for the default TrackHeight options.
+ *
+ */
+ virtual void build_size_menu();
+
+ /**
+ * Displays the standard LHS controls size menu for the TrackHeight.
+ *
+ * @parem when the popup activation time
+ */
+ void popup_size_menu(guint32 when);
+
+ /**
+ * Handle the size option of out main menu.
+ *
+ * @param ev the event
+ */
+ gint size_click(GdkEventButton *ev);
+
+ /* The standard LHS Track control popup-menus */
+
+ Gtk::Menu *display_menu;
+ Gtk::Menu *size_menu;
+
+ Gtk::Label name_label;
+
+ TimeAxisView* parent;
+
+ /* find the parent with state */
+
+ TimeAxisView* get_parent_with_state();
+
+ std::vector<TimeAxisView*> children;
+ bool is_child (TimeAxisView*);
+
+ void remove_child (TimeAxisView*);
+ void add_child (TimeAxisView*);
+
+ /* selection display */
+
+ GtkCanvasItem *selection_group;
+
+ list<SelectionRect*> free_selection_rects;
+ list<SelectionRect*> used_selection_rects;
+
+ SelectionRect* get_selection_rect(uint32_t id);
+
+ virtual void selection_click (GdkEventButton*);
+
+ bool _hidden;
+ bool _has_state;
+
+}; /* class TimeAxisView */
+
+#endif /* __ardour_gtk_time_axis_h__ */
+