summaryrefslogtreecommitdiff
path: root/gtk2_ardour/marker_time_axis.h
blob: 05b95bddaaf111f7534a15f68ef157a163aed768 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
/*
    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.

*/

#ifndef __ardour_marker_time_axis_h__
#define __ardour_marker_time_axis_h__

#include <string>
#include <libgnomecanvas/libgnomecanvas.h>

#include "ardour_dialog.h"
#include "route_ui.h"
#include "enums.h"
#include "time_axis_view.h"
#include "canvas.h"
#include "visual_time_axis.h"

namespace ARDOUR {
	class Session;
}
namespace ARDOUR {
	class Menu;
}

class PublicEditor;
class ImageFrameView ;
class ImageFrameTimeAxisView ;
class MarkerTimeAxisView ;
class MarkerView ;

/**
 * MarkerTimeAxis defines a visual time axis for holding marker items associated with other time axis, and time axis items.
 *
 * The intention of this time axis is to allow markers with duration to be arranged on the time line
 * to add additional timing information to items on an associated time axis, for instance the addition
 * of effect duration and timings
 */
class MarkerTimeAxis : public VisualTimeAxis
{
	public:
		//---------------------------------------------------------------------------------------//
		// Constructor / Desctructor

		/**
		 * Constructs a new MarkerTimeAxis
		 *
		 * @param ed the PublicEditor
		 * @param sess the current session
		 * @param canvas the parent canvas item
		 * @param name the name/id of this time axis
		 * @param tav the associated track view that this MarkerTimeAxis is marking up
		 */
		MarkerTimeAxis(PublicEditor& ed, ARDOUR::Session& sess, ArdourCanvas::Canvas& canvas, const std::string & name, TimeAxisView* tav) ;

		/**
		 * Destructor
		 * Responsible for destroying any marker items upon this time axis
		 */
		virtual ~MarkerTimeAxis() ;


		//---------------------------------------------------------------------------------------//
		// ui methods & data

		/**
		 * Sets the height of this TrackView to one of the defined TrackHeights
		 *
		 * @param h the number of pixels to set the height to
		 */
		virtual void set_height(uint32_t h) ;

		/**
		 * Sets the number of samples per unit that are used.
		 * This is used to determine the sizes of items upon this time axis
		 *
		 * @param spu the number of samples per unit
		 */
		virtual void set_samples_per_unit(double spu) ;


		/**
		 * Show the popup edit menu
		 *
		 * @param button the mouse button pressed
		 * @param time when to show the popup
		 * @param clicked_mv the MarkerView that the event ocured upon, or 0 if none
		 * @param with_item true if an item has been selected upon the time axis, used to set context menu
		 */
		void popup_marker_time_axis_edit_menu(int button, int32_t time, MarkerView* clicked_mv, bool with_item) ;


		//---------------------------------------------------------------------------------------//
		// Parent/Child helper object accessors

		/**
		 * Returns the view helper of this TimeAxis
		 *
		 * @return the view helper of this TimeAxis
		 */
		MarkerTimeAxisView* get_view() ;

		/**
		 * Returns the TimeAxisView that this markerTimeAxis is marking up
		 *
		 * @return the TimeAXisView that this MarkerTimeAxis is marking
		 */
		TimeAxisView* get_marked_time_axis() ;


	private:

		/**
		 * convenience method to select a new track color and apply it to the view and view items
		 *
		 */
		void select_track_color() ;

		/**
		 * Handles the building of the popup menu
		 */
		virtual void build_display_menu() ;

		/**
		 * handles the building of the MarkerView sub menu
		 */
		void build_marker_menu() ;

		/** The associated TimeAxis that this MarkerTimeAxis is marking up */
		TimeAxisView* marked_time_axis ;

		/** Our time axis view helper */
		MarkerTimeAxisView *view ;

		/** the popup menu available by clicking upon this time axis */
		Gtk::Menu *marker_menu ;

		/** specialized sub menu available when clicking upon and item upon this time axis */
		Gtk::Menu *marker_item_menu ;


} ; /* class MarkerTimeAxis */

#endif /* __ardour_imageframe_time_axis_h__ */