Do not try to restore Route solo state after clearing all solo state
[ardour.git] / gtk2_ardour / export_filename_selector.h
1 /*
2     Copyright (C) 2008 Paul Davis
3     Author: Sakari Bergen
4
5     This program is free software; you can redistribute it and/or modify
6     it under the terms of the GNU General Public License as published by
7     the Free Software Foundation; either version 2 of the License, or
8     (at your option) any later version.
9
10     This program is distributed in the hope that it will be useful,
11     but WITHOUT ANY WARRANTY; without even the implied warranty of
12     MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13     GNU General Public License for more details.
14
15     You should have received a copy of the GNU General Public License
16     along with this program; if not, write to the Free Software
17     Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
18
19 */
20
21 #ifndef __export_filename_selector_h__
22 #define __export_filename_selector_h__
23
24 #include <gtkmm.h>
25
26 #include "ardour/export_profile_manager.h"
27 #include "ardour/export_filename.h"
28 #include "ardour/session_handle.h"
29
30 ///
31 class ExportFilenameSelector : public Gtk::VBox, public ARDOUR::SessionHandlePtr
32 {
33   public:
34         typedef boost::shared_ptr<ARDOUR::ExportFilename> FilenamePtr;
35
36         ExportFilenameSelector ();
37         ~ExportFilenameSelector ();
38
39         void set_state (ARDOUR::ExportProfileManager::FilenameStatePtr state_, ARDOUR::Session * session_);
40         void set_example_filename (std::string filename);
41         void require_timespan (bool);
42
43         /* Compatibility with other elements */
44
45         sigc::signal<void> CriticalSelectionChanged;
46
47   private:
48
49         void load_state ();
50
51         void update_label ();
52         void update_folder ();
53         void check_folder ();
54
55         void change_date_format ();
56         void change_time_format ();
57
58         void change_session_selection ();
59         void change_timespan_selection ();
60         void change_revision_selection ();
61         void change_revision_value ();
62
63         void open_browse_dialog ();
64         void open_folder ();
65
66         boost::shared_ptr<ARDOUR::ExportFilename> filename;
67
68         Glib::RefPtr<Gtk::SizeGroup> label_sizegroup;
69
70         Gtk::Label        include_label;
71
72         Gtk::HBox         include_hbox;
73
74         Gtk::Label        label_label;
75         Gtk::Entry        label_entry;
76
77         Gtk::CheckButton  session_checkbox;
78         Gtk::CheckButton  timespan_checkbox;
79
80         Gtk::CheckButton  revision_checkbox;
81         Gtk::SpinButton   revision_spinbutton;
82
83         Gtk::HBox         path_hbox;
84
85         Gtk::Label        path_label;
86         Gtk::Entry        path_entry;
87         Gtk::Button       browse_button;
88         Gtk::Button       open_button;
89         Gtk::Label        example_filename_label;
90
91         /* Date combo */
92
93         typedef ARDOUR::ExportFilename::DateFormat DateFormat;
94
95         struct DateFormatCols : public Gtk::TreeModelColumnRecord
96         {
97           public:
98                 Gtk::TreeModelColumn<DateFormat>     format;
99                 Gtk::TreeModelColumn<std::string>  label;
100
101                 DateFormatCols () { add(format); add(label); }
102         };
103         DateFormatCols               date_format_cols;
104         Glib::RefPtr<Gtk::ListStore> date_format_list;
105         Gtk::ComboBox                date_format_combo;
106
107         /* Time combo */
108
109         typedef ARDOUR::ExportFilename::TimeFormat TimeFormat;
110
111         struct TimeFormatCols : public Gtk::TreeModelColumnRecord
112         {
113           public:
114                 Gtk::TreeModelColumn<TimeFormat>     format;
115                 Gtk::TreeModelColumn<std::string>  label;
116
117                 TimeFormatCols () { add(format); add(label); }
118         };
119         TimeFormatCols               time_format_cols;
120         Glib::RefPtr<Gtk::ListStore> time_format_list;
121         Gtk::ComboBox                time_format_combo;
122
123         /* timespan logic */
124         void update_timespan_sensitivity ();
125         bool _require_timespan;
126 };
127
128 #endif /* __export_filename_selector_h__ */