new startup assistant/wizard; unfinished; can potentially interfere with your normal...
[ardour.git] / gtk2_ardour / startup.h
1 #ifndef __gtk2_ardour_startup_h__
2 #define __gtk2_ardour_startup_h__
3
4 #include <string>
5
6 #include <gdkmm/pixbuf.h>
7 #include <gtkmm/assistant.h>
8 #include <gtkmm/label.h>
9 #include <gtkmm/drawingarea.h>
10 #include <gtkmm/box.h>
11 #include <gtkmm/radiobutton.h>
12 #include <gtkmm/filechooserbutton.h>
13 #include <gtkmm/scrolledwindow.h>
14 #include <gtkmm/treeview.h>
15 #include <gtkmm/treestore.h>
16 #include <gtkmm/checkbutton.h>
17
18 class ArdourStartup : public Gtk::Assistant {
19   public:
20         ArdourStartup ();
21         ~ArdourStartup ();
22
23   private:
24         bool applying;
25
26         void on_apply ();
27         void on_cancel ();
28         void on_close ();
29         void on_prepare (Gtk::Widget*);
30
31         static ArdourStartup *the_startup;
32
33         Glib::RefPtr<Gdk::Pixbuf> icon_pixbuf;
34
35         void setup_new_user_page ();
36         Glib::RefPtr<Gdk::Pixbuf> splash_pixbuf;
37         Gtk::DrawingArea splash_area;
38         bool splash_expose (GdkEventExpose* ev);
39
40         void setup_first_time_config_page ();
41
42         /* first page */
43         void setup_first_page ();
44
45         /* initial choice page */
46
47         void setup_initial_choice_page ();
48         Gtk::VBox ic_vbox;
49         Gtk::RadioButton ic_new_session_button;
50         Gtk::RadioButton ic_existing_session_button;
51
52         /* session page (could be new or existing) */
53
54         void setup_session_page ();
55         Gtk::VBox session_vbox;
56         Gtk::HBox session_hbox;
57         
58         /* recent sessions */
59         
60         void setup_existing_session_page ();
61         
62         struct RecentSessionsSorter {
63             bool operator() (std::pair<std::string,std::string> a, std::pair<std::string,std::string> b) const {
64                     return cmp_nocase(a.first, b.first) == -1;
65             }
66         };
67
68         struct RecentSessionModelColumns : public Gtk::TreeModel::ColumnRecord {
69             RecentSessionModelColumns() {
70                     add (visible_name);
71                     add (fullpath);
72             }
73             Gtk::TreeModelColumn<Glib::ustring> visible_name;
74             Gtk::TreeModelColumn<Glib::ustring> fullpath;
75         };
76
77         RecentSessionModelColumns    recent_session_columns;
78         Gtk::TreeView                recent_session_display;
79         Glib::RefPtr<Gtk::TreeStore> recent_session_model;
80         Gtk::ScrolledWindow          recent_scroller;
81         void redisplay_recent_sessions ();
82         void recent_session_row_selected ();
83
84         /* new sessions */
85
86         void setup_new_session_page ();
87         Gtk::Entry new_name_entry;
88         Gtk::FileChooserButton new_folder_chooser;
89         Gtk::FileChooserButton session_template_chooser;
90         Gtk::VBox session_new_vbox;
91         Gtk::CheckButton more_new_session_options_button;
92
93         void more_new_session_options_button_clicked();
94         void new_name_changed ();
95
96         /* more options for new sessions */
97
98         Gtk::VBox more_options_vbox;
99         Gtk::HBox more_options_hbox;
100         void setup_more_options_page ();
101
102         /* final page */
103
104         void setup_final_page ();
105         Gtk::Label final_page;
106
107         /* always there */
108
109         Glib::RefPtr<Pango::Layout> layout;
110
111
112
113 };
114
115 #endif /* __gtk2_ardour_startup_h__ */