summaryrefslogtreecommitdiff
path: root/gtk2_ardour/startup.h
blob: 96adf954ba3c450ff0e9569fc6b5112f0ea0c4fb (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
#ifndef __gtk2_ardour_startup_h__
#define __gtk2_ardour_startup_h__

#include <string>

#include <gdkmm/pixbuf.h>
#include <gtkmm/assistant.h>
#include <gtkmm/label.h>
#include <gtkmm/drawingarea.h>
#include <gtkmm/box.h>
#include <gtkmm/radiobutton.h>
#include <gtkmm/filechooserbutton.h>
#include <gtkmm/scrolledwindow.h>
#include <gtkmm/treeview.h>
#include <gtkmm/treestore.h>
#include <gtkmm/checkbutton.h>

class ArdourStartup : public Gtk::Assistant {
  public:
	ArdourStartup ();
	~ArdourStartup ();

  private:
	bool applying;

	void on_apply ();
	void on_cancel ();
	void on_close ();
	void on_prepare (Gtk::Widget*);

	static ArdourStartup *the_startup;

	Glib::RefPtr<Gdk::Pixbuf> icon_pixbuf;

	void setup_new_user_page ();
	Glib::RefPtr<Gdk::Pixbuf> splash_pixbuf;
	Gtk::DrawingArea splash_area;
	bool splash_expose (GdkEventExpose* ev);

	void setup_first_time_config_page ();

	/* first page */
	void setup_first_page ();

	/* initial choice page */

	void setup_initial_choice_page ();
	Gtk::VBox ic_vbox;
	Gtk::RadioButton ic_new_session_button;
	Gtk::RadioButton ic_existing_session_button;

	/* monitoring choices */

	Gtk::VBox mon_vbox;
	Gtk::Label monitor_label;
	Gtk::RadioButton monitor_via_hardware_button;
	Gtk::RadioButton monitor_via_ardour_button;
	void setup_monitoring_choice_page ();

	/* session page (could be new or existing) */

	void setup_session_page ();
	Gtk::VBox session_vbox;
	Gtk::HBox session_hbox;
	
	/* recent sessions */
	
	void setup_existing_session_page ();
	
	struct RecentSessionsSorter {
	    bool operator() (std::pair<std::string,std::string> a, std::pair<std::string,std::string> b) const {
		    return cmp_nocase(a.first, b.first) == -1;
	    }
	};

	struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
	    RecentSessionModelColumns() {
		    add (visible_name);
		    add (fullpath);
	    }
	    Gtk::TreeModelColumn<Glib::ustring> visible_name;
	    Gtk::TreeModelColumn<Glib::ustring> fullpath;
	};

	RecentSessionModelColumns    recent_session_columns;
	Gtk::TreeView                recent_session_display;
	Glib::RefPtr<Gtk::TreeStore> recent_session_model;
	Gtk::ScrolledWindow          recent_scroller;
	void redisplay_recent_sessions ();
	void recent_session_row_selected ();

	/* new sessions */

	void setup_new_session_page ();
	Gtk::Entry new_name_entry;
	Gtk::FileChooserButton new_folder_chooser;
	Gtk::FileChooserButton session_template_chooser;
	Gtk::VBox session_new_vbox;
	Gtk::CheckButton more_new_session_options_button;

	void more_new_session_options_button_clicked();
	void new_name_changed ();

	/* more options for new sessions */

	Gtk::VBox more_options_vbox;
	Gtk::HBox more_options_hbox;
	void setup_more_options_page ();

	/* final page */

	void setup_final_page ();
	Gtk::Label final_page;

	/* always there */

	Glib::RefPtr<Pango::Layout> layout;



};

#endif /* __gtk2_ardour_startup_h__ */