~ubuntu-branches/ubuntu/utopic/ardour3/utopic

« back to all changes in this revision

Viewing changes to gtk2_ardour/video_server_dialog.cc

  • Committer: Package Import Robot
  • Author(s): Felipe Sateler
  • Date: 2013-09-21 19:05:02 UTC
  • Revision ID: package-import@ubuntu.com-20130921190502-8gsftrku6jnzhd7v
Tags: upstream-3.4~dfsg
ImportĀ upstreamĀ versionĀ 3.4~dfsg

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
/*
 
2
    Copyright (C) 2010 Paul Davis
 
3
    Author: Robin Gareus <robin@gareus.org>
 
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
#include <cstdio>
 
21
#include <cmath>
 
22
 
 
23
#include <sigc++/bind.h>
 
24
 
 
25
#include "pbd/error.h"
 
26
#include "pbd/file_utils.h"
 
27
#include "ardour/session_directory.h"
 
28
#include "gtkmm2ext/utils.h"
 
29
#include "ardour/template_utils.h"
 
30
#include "ardour/session.h"
 
31
 
 
32
#include "video_server_dialog.h"
 
33
#include "utils_videotl.h"
 
34
#include "i18n.h"
 
35
 
 
36
using namespace Gtk;
 
37
using namespace std;
 
38
using namespace PBD;
 
39
using namespace ARDOUR;
 
40
using namespace VideoUtils;
 
41
 
 
42
VideoServerDialog::VideoServerDialog (Session* s)
 
43
        : ArdourDialog (_("Launch Video Server"))
 
44
        , path_label (_("Server Executable:"), Gtk::ALIGN_LEFT)
 
45
        , path_browse_button (_("Browse"))
 
46
        , docroot_label (_("Server Docroot:"), Gtk::ALIGN_LEFT)
 
47
        , docroot_browse_button (_("Browse"))
 
48
        , listenport_adjustment (1554, 1025, 65536, 1, 10, 0)
 
49
        , listenport_spinner (listenport_adjustment)
 
50
        , cachesize_adjustment (256, 32, 32768, 1, 32, 0)
 
51
        , cachesize_spinner (cachesize_adjustment)
 
52
        , showagain_checkbox (_("Don't show this dialog again. (Reset in Edit->Preferences)."))
 
53
{
 
54
        set_session (s);
 
55
 
 
56
        set_name ("VideoServerDialog");
 
57
        set_modal (true);
 
58
        set_skip_taskbar_hint (true);
 
59
        set_resizable (false);
 
60
 
 
61
        Gtk::Label* l;
 
62
        VBox* vbox = manage (new VBox);
 
63
        VBox* options_box = manage (new VBox);
 
64
        HBox* path_hbox = manage (new HBox);
 
65
        HBox* docroot_hbox = manage (new HBox);
 
66
 
 
67
        path_entry.set_width_chars(38);
 
68
        path_browse_button.set_name ("PaddedButton");
 
69
        path_entry.set_text("/usr/bin/harvid");
 
70
        docroot_entry.set_width_chars(38);
 
71
        docroot_entry.set_text(Config->get_video_server_docroot());
 
72
        docroot_browse_button.set_name ("PaddedButton");
 
73
 
 
74
        listenaddr_combo.set_name ("PaddedButton");
 
75
#ifndef __APPLE__
 
76
        /* Note: on OSX icsd is not able to bind to IPv4 localhost */
 
77
        listenaddr_combo.append_text("127.0.0.1");
 
78
#endif
 
79
        listenaddr_combo.append_text("0.0.0.0");
 
80
        listenaddr_combo.set_active(0);
 
81
 
 
82
        std::string icsd_file_path;
 
83
        if (find_file_in_search_path (PBD::SearchPath(Glib::getenv("PATH")), X_("harvid"), icsd_file_path)) {
 
84
                path_entry.set_text(icsd_file_path);
 
85
        }
 
86
        else if (Glib::file_test(X_("C:\\Program Files\\harvid\\harvid.exe"), Glib::FILE_TEST_EXISTS)) {
 
87
                path_entry.set_text(X_("C:\\Program Files\\harvid\\harvid.exe"));
 
88
        }
 
89
        else {
 
90
                PBD::warning <<
 
91
                        string_compose(
 
92
                        _("The external video server 'harvid' can not be found. The tool is included with the %1 releases from ardour.org, "
 
93
                          "alternatively you can download it from http://x42.github.com/harvid/ or acquire it from your distribution."), PROGRAM_NAME)
 
94
                        << endmsg;
 
95
        }
 
96
 
 
97
 
 
98
        if (docroot_entry.get_text().empty()) {
 
99
          std::string docroot =  Glib::path_get_dirname(_session->session_directory().root_path());
 
100
          if ((docroot.empty() || docroot.at(docroot.length()-1) != '/')) { docroot += "/"; }
 
101
                docroot_entry.set_text(docroot);
 
102
        }
 
103
 
 
104
        path_hbox->pack_start (path_label, false, false, 3);
 
105
        path_hbox->pack_start (path_entry, true, true, 3);
 
106
        path_hbox->pack_start (path_browse_button, false, false, 3);
 
107
 
 
108
        docroot_hbox->pack_start (docroot_label, false, false, 3);
 
109
        docroot_hbox->pack_start (docroot_entry, true, true, 3);
 
110
        docroot_hbox->pack_start (docroot_browse_button, false, false, 3);
 
111
 
 
112
        l = manage (new Label (_("<b>Options</b>"), Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false));
 
113
        l->set_use_markup ();
 
114
        options_box->pack_start (*l, false, true, 4);
 
115
 
 
116
        Table* t = manage (new Table (2, 3));
 
117
        t->set_spacings (4);
 
118
        options_box->pack_start (*t, true, true, 4);
 
119
 
 
120
        l = manage (new Label (_("Listen Address:")));
 
121
        l->set_alignment (0, 0.5);
 
122
        t->attach (*l, 0, 1, 0, 1, FILL);
 
123
        t->attach (listenaddr_combo, 1, 2, 0, 1);
 
124
 
 
125
        l = manage (new Label (_("Listen Port:")));
 
126
        l->set_alignment (0, 0.5);
 
127
        t->attach (*l, 0, 1, 1, 2, FILL);
 
128
        t->attach (listenport_spinner, 1, 2, 1, 2);
 
129
 
 
130
        l = manage (new Label (_("Cache Size:")));
 
131
        l->set_alignment (0, 0.5);
 
132
        t->attach (*l, 0, 1, 2, 3, FILL);
 
133
        t->attach (cachesize_spinner, 1, 2, 2, 3);
 
134
 
 
135
        l = manage (new Label (string_compose(
 
136
                                        _("%1 relies on an external Video Server for the videotimeline.\nThe server configured in Edit -> Prefereces -> Video is not reachable.\nDo you want ardour to launch 'harvid' on this machine?"), PROGRAM_NAME)
 
137
                                , Gtk::ALIGN_LEFT, Gtk::ALIGN_CENTER, false));
 
138
        l->set_max_width_chars(80);
 
139
        l->set_line_wrap();
 
140
        vbox->pack_start (*l, true, true, 4);
 
141
        vbox->pack_start (*path_hbox, false, false);
 
142
        if (Config->get_video_advanced_setup()){
 
143
                vbox->pack_start (*docroot_hbox, false, false);
 
144
        } else {
 
145
                docroot_entry.set_text(X_("/"));
 
146
                listenport_spinner.set_sensitive(false);
 
147
        }
 
148
        vbox->pack_start (*options_box, false, true);
 
149
 
 
150
        get_vbox()->set_spacing (4);
 
151
        get_vbox()->pack_start (*vbox, false, false);
 
152
        get_vbox()->pack_start (showagain_checkbox, false, false);
 
153
        showagain_checkbox.set_active(!Config->get_show_video_server_dialog());
 
154
 
 
155
        path_browse_button.signal_clicked().connect (sigc::mem_fun (*this, &VideoServerDialog::open_path_dialog));
 
156
        docroot_browse_button.signal_clicked().connect (sigc::mem_fun (*this, &VideoServerDialog::open_docroot_dialog));
 
157
 
 
158
        show_all_children ();
 
159
        add_button (Stock::CANCEL, RESPONSE_CANCEL);
 
160
        add_button (Stock::EXECUTE, RESPONSE_ACCEPT);
 
161
}
 
162
 
 
163
VideoServerDialog::~VideoServerDialog ()
 
164
{
 
165
}
 
166
 
 
167
void
 
168
VideoServerDialog::on_show ()
 
169
{
 
170
        Dialog::on_show ();
 
171
}
 
172
 
 
173
void
 
174
VideoServerDialog::open_path_dialog ()
 
175
{
 
176
        Gtk::FileChooserDialog dialog(_("Set Video Server Executable"), Gtk::FILE_CHOOSER_ACTION_OPEN);
 
177
        dialog.set_filename (path_entry.get_text());
 
178
 
 
179
        dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
 
180
        dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
 
181
 
 
182
        int result = dialog.run();
 
183
 
 
184
        if (result == Gtk::RESPONSE_OK) {
 
185
                std::string filename = dialog.get_filename();
 
186
 
 
187
                if (filename.length()) {
 
188
                        path_entry.set_text (filename);
 
189
                }
 
190
        }
 
191
}
 
192
 
 
193
void
 
194
VideoServerDialog::open_docroot_dialog ()
 
195
{
 
196
        Gtk::FileChooserDialog dialog(_("Server docroot"), Gtk::FILE_CHOOSER_ACTION_SELECT_FOLDER);
 
197
        dialog.set_filename (docroot_entry.get_text());
 
198
 
 
199
        dialog.add_button(Gtk::Stock::CANCEL, Gtk::RESPONSE_CANCEL);
 
200
        dialog.add_button(Gtk::Stock::OK, Gtk::RESPONSE_OK);
 
201
 
 
202
        int result = dialog.run();
 
203
 
 
204
        if (result == Gtk::RESPONSE_OK) {
 
205
                std::string dirname = dialog.get_filename();
 
206
 
 
207
                if (dirname.empty() || dirname.at(dirname.length()-1) != G_DIR_SEPARATOR) {
 
208
                        dirname += "/";
 
209
                }
 
210
 
 
211
                if (dirname.length()) {
 
212
                        docroot_entry.set_text (dirname);
 
213
                }
 
214
        }
 
215
}
 
216
 
 
217
std::string
 
218
VideoServerDialog::get_docroot () {
 
219
        return docroot_entry.get_text();
 
220
}