~tristan-brindle/oggconvert/vala

« back to all changes in this revision

Viewing changes to ocv_gtk.vala

  • Committer: Tristan Brindle
  • Date: 2009-06-03 15:10:46 UTC
  • Revision ID: t.c.brindle@gmail.com-20090603151046-lyd32e0xftrus6fk
Autotool-ise, courtesy of vala-gen-project. Import .po files from 
mainline OggConvert.

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
 
 
2
 
using GLib;
3
 
using Gtk;
4
 
 
5
 
namespace OggCv {
6
 
 
7
 
public class GtkInterface : GLib.Object {
8
 
 
9
 
    public OggCv.Core core { get; construct; }
10
 
    
11
 
    private const string UI_FILE = "oggconvert.ui";
12
 
    private const string LOGO_FILE = "oggconvert.svg";
13
 
    
14
 
    //Widgets
15
 
    private Gtk.Window main_window;
16
 
    private Gtk.FileChooserButton file_chooser_button;
17
 
    private Gtk.Button go_button;
18
 
    private Gtk.FileChooserButton save_folder_button;
19
 
    private Gtk.Entry output_file_entry;
20
 
    private Gtk.HScale video_quality_slider;
21
 
    private Gtk.Label video_quality_label;
22
 
    private Gtk.HScale audio_quality_slider;
23
 
    private Gtk.Label audio_quality_label;
24
 
    private Gtk.ComboBox format_combobox;
25
 
    private Gtk.Label format_label;
26
 
    private Gtk.ComboBox container_combobox;
27
 
    private Gtk.Label container_label;
28
 
    
29
 
    
30
 
 
31
 
    public GtkInterface(OggCv.Core core) {
32
 
        this.core = core;
33
 
        build_ui();
34
 
    }
35
 
 
36
 
    private void build_ui() {
37
 
        var builder = new Gtk.Builder();
38
 
        try {
39
 
            builder.add_from_file (UI_FILE);
40
 
        } catch (Error e) {
41
 
            var msg = new MessageDialog (null, DialogFlags.MODAL,
42
 
                                         MessageType.ERROR, ButtonsType.CANCEL, 
43
 
                                         "Failed to load UI\n%s", e.message);
44
 
            msg.run ();
45
 
        }
46
 
        
47
 
        
48
 
        // Grab widgets
49
 
        main_window = builder.get_object("app_window") as Gtk.Window;
50
 
        var about_button = builder.get_object("about_button") as Gtk.Button;
51
 
        var quit_button = builder.get_object("quit_button") as Gtk.Button;
52
 
        go_button = builder.get_object("go_button") as Gtk.Button;
53
 
        file_chooser_button = builder.get_object("filechooserbutton")
54
 
                                    as Gtk.FileChooserButton;
55
 
        save_folder_button = builder.get_object("save_folder_button") 
56
 
                                    as Gtk.FileChooserButton;
57
 
        output_file_entry = builder.get_object("outfile_entry") as Gtk.Entry;
58
 
        video_quality_slider = builder.get_object("video_quality_slider") as Gtk.HScale;
59
 
        video_quality_label = builder.get_object("video_quality_label") as Gtk.Label;
60
 
        audio_quality_slider = builder.get_object("audio_quality_slider") as Gtk.HScale;
61
 
        audio_quality_label = builder.get_object("audio_quality_label") as Gtk.Label;
62
 
        format_combobox = builder.get_object("format_combobox") as Gtk.ComboBox;
63
 
        format_label = builder.get_object("format_label") as Gtk.Label;
64
 
        container_combobox= builder.get_object("containter_combobox") as Gtk.ComboBox;
65
 
        container_label = builder.get_object("container_label") as Gtk.Label;      
66
 
        
67
 
        
68
 
        // Connect callbacks
69
 
        main_window.destroy += on_quit;
70
 
        about_button.clicked += on_about_clicked;
71
 
        quit_button.clicked += on_quit;
72
 
        go_button.clicked += on_go_clicked;
73
 
        file_chooser_button.selection_changed += on_file_chooser_selection_changed;
74
 
        save_folder_button.selection_changed += on_save_folder_changed;
75
 
        video_quality_slider.value_changed += on_video_quality_slider_changed;
76
 
        audio_quality_slider.value_changed += on_audio_quality_slider_changed;
77
 
        //format_combobox.changed += on_format_combobox_changed;
78
 
        //container_combobox.changed += on_container_combobox_changed;
79
 
        
80
 
        
81
 
        //output_file_entry.
82
 
        
83
 
        connect_core_signals();
84
 
        
85
 
        // Final setup
86
 
        set_up_file_chooser(file_chooser_button);
87
 
        try {
88
 
            main_window.set_default_icon_from_file(LOGO_FILE);
89
 
        } catch(Error e) {
90
 
            warning("%s", e.message);
91
 
        }
92
 
        
93
 
        // All done!
94
 
        main_window.show_all();
95
 
        
96
 
    }
97
 
 
98
 
    private void connect_core_signals() {
99
 
        // Does Vala offer a way to connect to "notify::propname" that I 
100
 
        // don't know about?
101
 
        core.notify += (s, p) => {
102
 
            switch(p.name) {
103
 
                case "input-uri":  {
104
 
                    on_core_input_uri_changed();
105
 
                    break;
106
 
                }
107
 
                case "output-uri": {
108
 
                    on_core_output_uri_changed();
109
 
                    break;
110
 
                }
111
 
                case "video-quality": {
112
 
                    on_core_video_quality_changed();
113
 
                    break;
114
 
                }
115
 
            }
116
 
        };
117
 
        
118
 
        core.uri_rejected += on_core_uri_rejected;
119
 
    }
120
 
 
121
 
    private void set_sensitivities() {
122
 
        
123
 
    }
124
 
 
125
 
 
126
 
    /*
127
 
    Widget callbacks
128
 
    */
129
 
    
130
 
    private void on_about_clicked() {
131
 
        stdout.printf("About clicked\n");
132
 
    }
133
 
    
134
 
    private void on_quit() {
135
 
        stdout.printf("Bye, then!\n");
136
 
        Gtk.main_quit();
137
 
    }
138
 
 
139
 
    private void on_go_clicked() {
140
 
        stdout.printf("Go go go!\n");
141
 
    }
142
 
    
143
 
    private void on_file_chooser_selection_changed(Gtk.FileChooserButton fcb) {
144
 
        string? new_uri = fcb.get_uri();
145
 
        if (new_uri==null) {
146
 
            return;
147
 
        }
148
 
        stdout.printf("New file selected: %s\n", new_uri);
149
 
        core.open_uri(fcb.get_uri());
150
 
    }
151
 
 
152
 
    private void on_save_folder_changed() {
153
 
        stdout.printf("New folder selected\n");
154
 
        var new_folder = save_folder_button.get_uri();
155
 
        var new_filename = output_file_entry.get_text();
156
 
        var new_uri = GLib.Path.build_filename(new_folder, new_filename);
157
 
        core.output_uri = new_uri;
158
 
    }
159
 
   
160
 
   
161
 
    private void on_video_quality_slider_changed() {
162
 
        core.video_quality = (int) video_quality_slider.get_value();
163
 
    }
164
 
    
165
 
    private void on_audio_quality_slider_changed() {
166
 
        core.audio_quality = (int) audio_quality_slider.get_value();
167
 
    }
168
 
    
169
 
    private void on_format_combobox_changed() {    
170
 
    }
171
 
   
172
 
    private void on_container_combobox_changed() {
173
 
    }
174
 
 
175
 
    /*
176
 
    Core callbacks
177
 
    */   
178
 
  
179
 
    private void on_core_input_uri_changed() {
180
 
        var new_uri = core.input_uri;
181
 
        if (file_chooser_button.get_uri() != new_uri)
182
 
            file_chooser_button.set_uri(new_uri);
183
 
    }
184
 
    
185
 
    private void on_core_output_uri_changed() {
186
 
        var new_uri = core.output_uri;
187
 
        stdout.printf("Core output-uri changed to %s\n", new_uri);
188
 
        var new_folder = GLib.Path.get_dirname(new_uri);
189
 
        var new_filename = GLib.Path.get_basename(new_uri);
190
 
        stdout.printf(" with output folder %s\nand filename %s\n", new_folder, new_filename);
191
 
        if (new_folder!=save_folder_button.get_uri()) {
192
 
            save_folder_button.set_uri(new_uri);
193
 
        }
194
 
        if (new_filename != output_file_entry.get_text()) {
195
 
            output_file_entry.set_text(new_filename);
196
 
        }
197
 
        
198
 
    }
199
 
    
200
 
    private void on_core_video_quality_changed() {
201
 
        stdout.printf("VIDEO QUALITY CHANGED!\n");
202
 
    }
203
 
    
204
 
    private void on_core_audio_quality_changed() {
205
 
        stdout.printf("INPUT URI CHANGED!\n");
206
 
    }
207
 
    
208
 
    private void on_core_video_codec_changed() {
209
 
        stdout.printf("INPUT URI CHANGED!\n");
210
 
    }
211
 
    
212
 
    private void on_core_uri_rejected(RejectionReason reason, string detail) {
213
 
        stdout.printf("URI rejected: %s", detail);
214
 
    }    
215
 
    
216
 
    /*
217
 
    Misc functions
218
 
    */
219
 
    private void set_up_file_chooser(Gtk.FileChooser fc) {
220
 
    
221
 
        var video = new Gtk.FileFilter();
222
 
        video.set_name("Video Files");
223
 
        video.add_mime_type("video/*");
224
 
        video.add_mime_type("application/x-flash-video");
225
 
        
226
 
        var audio = new Gtk.FileFilter();
227
 
        audio.set_name("Audio Files");
228
 
        audio.add_mime_type("audio/*");
229
 
        
230
 
        
231
 
        var all_media = new Gtk.FileFilter();
232
 
        all_media.set_name("All Media Files");
233
 
        all_media.add_mime_type("video/*");
234
 
        all_media.add_mime_type("application/x-flash-video");
235
 
        all_media.add_mime_type("audio/*");
236
 
        
237
 
        var all_files = new Gtk.FileFilter();
238
 
        all_files.set_name("All Files");
239
 
        all_files.add_pattern("*");        
240
 
        
241
 
        fc.add_filter(all_media);
242
 
        fc.add_filter(video);
243
 
        fc.add_filter(audio);
244
 
        fc.add_filter(all_files);
245
 
        
246
 
        fc.set_local_only(false);
247
 
        
248
 
        string user_home_dir = GLib.Environment.get_home_dir();
249
 
        fc.set_current_folder(user_home_dir);
250
 
        
251
 
        
252
 
    }
253
 
    
254
 
}
255
 
 
256
 
}