Move things round a bit.
[dcpomatic.git] / src / gtk / film_editor.h
1 /*
2     Copyright (C) 2012 Carl Hetherington <cth@carlh.net>
3
4     This program is free software; you can redistribute it and/or modify
5     it under the terms of the GNU General Public License as published by
6     the Free Software Foundation; either version 2 of the License, or
7     (at your option) any later version.
8
9     This program is distributed in the hope that it will be useful,
10     but WITHOUT ANY WARRANTY; without even the implied warranty of
11     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
12     GNU General Public License for more details.
13
14     You should have received a copy of the GNU General Public License
15     along with this program; if not, write to the Free Software
16     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
17
18 */
19
20 /** @file src/film_editor.h
21  *  @brief A GTK widget to edit a film's metadata, and perform various functions.
22  */
23
24 #include <gtkmm.h>
25
26 class Film;
27
28 /** @class FilmEditor
29  *  @brief A GTK widget to edit a film's metadata, and perform various functions.
30  */
31 class FilmEditor
32 {
33 public:
34         FilmEditor (Film *);
35
36         Gtk::Widget& widget ();
37
38         void set_film (Film *);
39         void setup_visibility ();
40
41         sigc::signal1<void, std::string> FileChanged;
42
43 private:
44         /* Handle changes to the view */
45         void name_changed ();
46         void left_crop_changed ();
47         void right_crop_changed ();
48         void top_crop_changed ();
49         void bottom_crop_changed ();
50         void content_changed ();
51         void frames_per_second_changed ();
52         void format_changed ();
53         void dcp_range_changed (int, TrimAction);
54         void dcp_content_type_changed ();
55         void dcp_ab_toggled ();
56         void scaler_changed ();
57         void audio_gain_changed ();
58         void audio_delay_changed ();
59         void still_duration_changed ();
60
61         /* Handle changes to the model */
62         void film_changed (Film::Property);
63
64         /* Button clicks */
65         void edit_filters_clicked ();
66         void change_dcp_range_clicked ();
67
68         void set_things_sensitive (bool);
69
70         Gtk::Widget & video_widget (Gtk::Widget &);
71         Gtk::Widget & still_widget (Gtk::Widget &);
72
73         /** The film we are editing */
74         Film* _film;
75         /** The overall VBox containing our widget */
76         Gtk::VBox _vbox;
77         /** The Film's name */
78         Gtk::Entry _name;
79         /** The Film's frames per second */
80         Gtk::SpinButton _frames_per_second;
81         /** The Film's format */
82         Gtk::ComboBoxText _format;
83         /** The Film's content file */
84         Gtk::FileChooserButton _content;
85         /** The Film's left crop */
86         Gtk::SpinButton _left_crop;
87         /** The Film's right crop */
88         Gtk::SpinButton _right_crop;
89         /** The Film's top crop */
90         Gtk::SpinButton _top_crop;
91         /** The Film's bottom crop */
92         Gtk::SpinButton _bottom_crop;
93         /** Currently-applied filters */
94         Gtk::Label _filters;
95         /** Button to open the filters dialogue */
96         Gtk::Button _filters_button;
97         /** The Film's scaler */
98         Gtk::ComboBoxText _scaler;
99         /** The Film's audio gain */
100         Gtk::SpinButton _audio_gain;
101         /** The Film's audio delay */
102         Gtk::SpinButton _audio_delay;
103         /** The Film's DCP content type */
104         Gtk::ComboBoxText _dcp_content_type;
105         /** The Film's original size */
106         Gtk::Label _original_size;
107         /** The Film's length */
108         Gtk::Label _length;
109         /** The Film's audio details */
110         Gtk::Label _audio;
111         /** The Film's duration for still sources */
112         Gtk::SpinButton _still_duration;
113
114         /** Button to start making a DCP from existing J2K and WAV files */
115         Gtk::Button _make_dcp_from_existing_button;
116         /** Display of the range of frames that will be used */
117         Gtk::Label _dcp_range;
118         /** Button to change the range */
119         Gtk::Button _change_dcp_range_button;
120         /** Selector to generate an A/B comparison DCP */
121         Gtk::CheckButton _dcp_ab;
122
123         std::list<Gtk::Widget*> _video_widgets;
124         std::list<Gtk::Widget*> _still_widgets;
125 };