support for glade and new new session dialog
git-svn-id: svn://localhost/trunk/ardour2@88 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
3c6f29ceea
commit
f0416627d6
|
@ -43,7 +43,8 @@ gtkardour.Merge ([
|
|||
libraries['xml'],
|
||||
libraries['soundtouch'],
|
||||
libraries['samplerate'],
|
||||
libraries['jack']
|
||||
libraries['jack'],
|
||||
libraries['libglademm']
|
||||
])
|
||||
|
||||
if gtkardour['VST']:
|
||||
|
@ -110,6 +111,8 @@ export_dialog.cc
|
|||
gain_automation_time_axis.cc
|
||||
gain_meter.cc
|
||||
ghostregion.cc
|
||||
glade_path.cc
|
||||
glade_factory.cc
|
||||
grouped_buttons.cc
|
||||
gtk-custom-hruler.c
|
||||
gtk-custom-ruler.c
|
||||
|
@ -166,6 +169,10 @@ visual_time_axis.cc
|
|||
waveview.cc
|
||||
""")
|
||||
|
||||
glade_files=glob.glob('glade/*.glade')
|
||||
|
||||
intl_files = gtkardour_files + glade_files + glob.glob('*.h')
|
||||
|
||||
mtest_files=Split("""
|
||||
mtest.cc
|
||||
""")
|
||||
|
@ -180,9 +187,12 @@ vst_files = [ 'vst_pluginui.cc' ]
|
|||
if env['VST']:
|
||||
extra_sources += vst_files
|
||||
|
||||
intl_files += extra_sources
|
||||
|
||||
gtkardour.Append(CCFLAGS="-D_REENTRANT -D_LARGEFILE_SOURCE -D_LARGEFILE64_SOURCE")
|
||||
gtkardour.Append(CXXFLAGS="-DDATA_DIR=\\\""+final_prefix+"/share\\\"")
|
||||
gtkardour.Append(CXXFLAGS="-DLOCALEDIR=\\\""+final_prefix+"/share/locale\\\"")
|
||||
gtkardour.Append(CXXFLAGS="-DGLADEPATH=\\\""+final_prefix+"/share/ardour/glade\\\"")
|
||||
|
||||
versionflag = '-DVERSIONSTRING=\\\"' + env['VERSION'] + '\\\"'
|
||||
|
||||
|
@ -202,14 +212,16 @@ if env['VERSIONED']:
|
|||
Default (env.VersionedExecutable ('tagged_executable', ardour))
|
||||
|
||||
if env['NLS']:
|
||||
i18n (gtkardour, gtkardour_files + extra_sources, env)
|
||||
|
||||
Export('gtkardour', 'intl_files')
|
||||
SConscript ('po/SConscript')
|
||||
|
||||
#install
|
||||
|
||||
|
||||
env.Alias('install', env.InstallAs(os.path.join(install_prefix, 'bin')+'/ardour', ardour))
|
||||
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour'), 'ardour_ui.rc'))
|
||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour'), 'splash.ppm'))
|
||||
env.Alias('install', env.Install(os.path.join(install_prefix, 'share/ardour/glade'), glade_files))
|
||||
|
||||
#dist
|
||||
env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
||||
|
@ -218,7 +230,7 @@ env.Alias ('tarball', env.Distribute (env['DISTTREE'],
|
|||
'editor_xpms', 'misc_xpms', 'transport_xpms',
|
||||
'ardour_ui.rc', 'splash.ppm'
|
||||
] +
|
||||
gtkardour_files + vst_files +
|
||||
gtkardour_files + vst_files + glade_files +
|
||||
glob.glob('po/*.po') + glob.glob('*.h')))
|
||||
|
||||
# generate a prototype full-featured ardour_ui.rc file
|
||||
|
|
|
@ -781,7 +781,7 @@ vector<string> channel_combo_strings;
|
|||
ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
||||
|
||||
: Gtkmm2ext::UI ("ardour", argcp, argvp, rcfile),
|
||||
|
||||
|
||||
primary_clock (X_("TransportClockDisplay"), true, false, true),
|
||||
secondary_clock (X_("SecondaryClockDisplay"), true, false, true),
|
||||
preroll_clock (X_("PreRollClock"), true, true),
|
||||
|
@ -830,7 +830,11 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
|||
if (theArdourUI == 0) {
|
||||
theArdourUI = this;
|
||||
}
|
||||
|
||||
|
||||
m_new_session_dialog = 0;
|
||||
m_new_session_dialog_ref = NewSessionDialogFactory::create();
|
||||
m_new_session_dialog_ref->get_widget_derived(NewSessionDialogFactory::top_level_widget_name(),
|
||||
m_new_session_dialog);
|
||||
editor = 0;
|
||||
mixer = 0;
|
||||
session = 0;
|
||||
|
@ -844,7 +848,6 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
|||
meter_bridge = 0;
|
||||
option_editor = 0;
|
||||
location_ui = 0;
|
||||
new_session_window = 0;
|
||||
open_session_selector = 0;
|
||||
have_configure_timeout = false;
|
||||
have_disk_overrun_displayed = false;
|
||||
|
@ -852,6 +855,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[], string rcfile)
|
|||
_will_create_new_session_automatically = false;
|
||||
session_loaded = false;
|
||||
|
||||
|
||||
last_configure_time.tv_sec = 0;
|
||||
last_configure_time.tv_usec = 0;
|
||||
|
||||
|
@ -1778,21 +1782,6 @@ ARDOUR_UI::open_recent_session ()
|
|||
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::fs_cancel_clicked (Gtk::FileSelection* fs)
|
||||
{
|
||||
fs->hide_all();
|
||||
fs->get_selection_entry()->set_text("");
|
||||
allow_focus (false);
|
||||
}
|
||||
|
||||
gint
|
||||
ARDOUR_UI::fs_delete_event (GdkEventAny* ev, Gtk::FileSelection* fs)
|
||||
{
|
||||
fs_cancel_clicked (fs);
|
||||
return 1;
|
||||
}
|
||||
|
||||
bool
|
||||
ARDOUR_UI::filter_ardour_session_dirs (const FileFilter::Info& info)
|
||||
{
|
||||
|
@ -2697,87 +2686,81 @@ ARDOUR_UI::save_template ()
|
|||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::new_session (bool startup, string predetermined_path)
|
||||
ARDOUR_UI::new_session (bool startup, std::string predetermined_path)
|
||||
{
|
||||
if (new_session_window == 0){
|
||||
new_session_window = new NewSessionDialog (*engine, startup, predetermined_path);
|
||||
editor->ensure_float (*new_session_window);
|
||||
}
|
||||
m_new_session_dialog->show_all();
|
||||
m_new_session_dialog->set_transient_for(*editor);
|
||||
m_new_session_dialog->set_name(predetermined_path);
|
||||
|
||||
new_session_window->run ();
|
||||
int response = Gtk::RESPONSE_CANCEL;
|
||||
|
||||
#if 0
|
||||
// GTK2FIX
|
||||
do {
|
||||
response = m_new_session_dialog->run ();
|
||||
|
||||
/* write favorites either way */
|
||||
Session::FavoriteDirs favs;
|
||||
new_session_window->file_selector.get_favorites (favs);
|
||||
Session::write_favorite_dirs (favs);
|
||||
if(response == Gtk::RESPONSE_OK) {
|
||||
|
||||
if (new_session_window->run_status()) {
|
||||
return;
|
||||
}
|
||||
#endif
|
||||
|
||||
string session_path = new_session_window->file_selector.get_filename ();
|
||||
string session_name = PBD::basename (session_path);
|
||||
|
||||
// Check that it doesn't already exist.
|
||||
access(session_path.c_str(), R_OK);
|
||||
if (errno != ENOENT){
|
||||
error << string_compose(_("Session %1 already exists at %2"), session_name, session_path) << endmsg;
|
||||
return;
|
||||
}
|
||||
|
||||
_session_is_new = true;
|
||||
|
||||
if (session_path[session_path.length()-1] != '/') {
|
||||
|
||||
string template_name = new_session_window->get_template_name ();
|
||||
|
||||
if (template_name.length()) {
|
||||
|
||||
load_session (session_path, session_name, &template_name);
|
||||
|
||||
} else {
|
||||
|
||||
uint32_t cchns;
|
||||
uint32_t mchns;
|
||||
Session::AutoConnectOption iconnect;
|
||||
Session::AutoConnectOption oconnect;
|
||||
|
||||
if (new_session_window->use_control_button.get_active()) {
|
||||
cchns = (uint32_t) channel_combo_get_channel_count (new_session_window->control_out_channel_combo);
|
||||
_session_is_new = true;
|
||||
|
||||
std::string session_name = m_new_session_dialog->session_name();
|
||||
std::string session_path = m_new_session_dialog->session_folder();
|
||||
std::string template_name = m_new_session_dialog->session_template_name();
|
||||
|
||||
if (m_new_session_dialog->use_session_template()) {
|
||||
|
||||
load_session (session_path, session_name, &template_name);
|
||||
|
||||
} else {
|
||||
cchns = 0;
|
||||
}
|
||||
if (new_session_window->use_master_button.get_active()) {
|
||||
mchns = (uint32_t) channel_combo_get_channel_count (new_session_window->master_out_channel_combo);
|
||||
} else {
|
||||
mchns = 0;
|
||||
}
|
||||
|
||||
uint32_t cchns;
|
||||
uint32_t mchns;
|
||||
Session::AutoConnectOption iconnect;
|
||||
Session::AutoConnectOption oconnect;
|
||||
|
||||
if (m_new_session_dialog->create_control_track()) {
|
||||
cchns = (uint32_t) m_new_session_dialog->control_channel_count();
|
||||
} else {
|
||||
cchns = 0;
|
||||
}
|
||||
|
||||
if (m_new_session_dialog->create_master_track()) {
|
||||
mchns = (uint32_t) m_new_session_dialog->master_channel_count();
|
||||
} else {
|
||||
mchns = 0;
|
||||
}
|
||||
|
||||
if (m_new_session_dialog->connect_inputs()) {
|
||||
iconnect = Session::AutoConnectPhysical;
|
||||
} else {
|
||||
iconnect = Session::AutoConnectOption (0);
|
||||
}
|
||||
|
||||
/// @todo some minor tweaks.
|
||||
|
||||
if (new_session_window->connect_to_physical_inputs_button.get_active()) {
|
||||
iconnect = Session::AutoConnectPhysical;
|
||||
} else {
|
||||
iconnect = Session::AutoConnectOption (0);
|
||||
}
|
||||
|
||||
if (new_session_window->connect_to_master_button.get_active ()) {
|
||||
oconnect = Session::AutoConnectMaster;
|
||||
} else if (new_session_window->connect_to_physical_outputs_button.get_active ()) {
|
||||
oconnect = Session::AutoConnectPhysical;
|
||||
} else {
|
||||
oconnect = Session::AutoConnectOption (0);
|
||||
}
|
||||
|
||||
uint32_t nphysin = (uint32_t) new_session_window->in_count_adjustment.get_value();
|
||||
uint32_t nphysout = (uint32_t) new_session_window->out_count_adjustment.get_value();
|
||||
|
||||
build_session (session_path, session_name, cchns, mchns, iconnect, oconnect, nphysin, nphysout,
|
||||
engine->frame_rate() * 60 * 5);
|
||||
if (m_new_session_dialog->connect_outs_to_master()) {
|
||||
oconnect = Session::AutoConnectMaster;
|
||||
} else if (m_new_session_dialog->connect_outs_to_physical()) {
|
||||
oconnect = Session::AutoConnectPhysical;
|
||||
} else {
|
||||
oconnect = Session::AutoConnectOption (0);
|
||||
}
|
||||
|
||||
uint32_t nphysin = (uint32_t) m_new_session_dialog->input_limit_count();
|
||||
uint32_t nphysout = (uint32_t) m_new_session_dialog->output_limit_count();
|
||||
|
||||
build_session (session_path,
|
||||
session_name,
|
||||
cchns,
|
||||
mchns,
|
||||
iconnect,
|
||||
oconnect,
|
||||
nphysin,
|
||||
nphysout,
|
||||
engine->frame_rate() * 60 * 5);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
} while(response == Gtk::RESPONSE_HELP);
|
||||
m_new_session_dialog->hide_all();
|
||||
}
|
||||
|
||||
int
|
||||
|
@ -2875,12 +2858,6 @@ ARDOUR_UI::build_session (string path, string snap_name,
|
|||
return 0;
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::hide_dialog (ArdourDialog *dialog)
|
||||
{
|
||||
dialog->hide_all();
|
||||
}
|
||||
|
||||
void
|
||||
ARDOUR_UI::show ()
|
||||
{
|
||||
|
|
|
@ -61,6 +61,7 @@
|
|||
#include "audio_clock.h"
|
||||
#include "ardour_dialog.h"
|
||||
#include "editing.h"
|
||||
#include "glade_factory.h"
|
||||
|
||||
class AudioClock;
|
||||
class PublicEditor;
|
||||
|
@ -127,7 +128,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
_will_create_new_session_automatically = yn;
|
||||
}
|
||||
|
||||
void new_session (bool startup = false, std::string path = string());
|
||||
void new_session(bool startup = false, std::string path = string());
|
||||
gint cmdline_new_session (std::string path);
|
||||
int unload_session ();
|
||||
void close_session() { unload_session(); }
|
||||
|
@ -548,16 +549,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
|||
|
||||
bool _will_create_new_session_automatically;
|
||||
|
||||
NewSessionDialog* new_session_window;
|
||||
string template_name;
|
||||
|
||||
void new_session_ok_clicked ();
|
||||
void new_session_template_choice (Gtk::TreeView&, Glib::RefPtr<Gtk::TreeSelection>);
|
||||
void hide_dialog (ArdourDialog *dialog);
|
||||
|
||||
void fs_cancel_clicked (Gtk::FileSelection*);
|
||||
gint fs_delete_event (GdkEventAny*, Gtk::FileSelection*);
|
||||
|
||||
GladeRef m_new_session_dialog_ref;
|
||||
NewSessionDialog* m_new_session_dialog;
|
||||
|
||||
void open_session ();
|
||||
void open_recent_session ();
|
||||
void open_ok_clicked ();
|
||||
|
|
|
@ -1199,14 +1199,21 @@ AudioTimeAxisView::add_gain_automation_child ()
|
|||
XMLProperty* prop;
|
||||
AutomationLine* line;
|
||||
|
||||
gain_track = new GainAutomationTimeAxisView (_session, _route, editor, *this, parent_canvas, _("gain"),
|
||||
gain_track = new GainAutomationTimeAxisView (_session,
|
||||
_route,
|
||||
editor,
|
||||
*this,
|
||||
parent_canvas,
|
||||
_("gain"),
|
||||
_route.gain_automation_curve());
|
||||
|
||||
|
||||
sigc::slot<bool,GdkEvent*,ControlPoint*> cslot = mem_fun (editor, &PublicEditor::canvas_control_point_event);
|
||||
sigc::slot<bool,GdkEvent*,AutomationLine*> lslot = mem_fun (editor, &PublicEditor::canvas_line_event);
|
||||
|
||||
line = new AutomationGainLine ("automation gain", _session, *gain_track,
|
||||
line = new AutomationGainLine ("automation gain",
|
||||
_session,
|
||||
*gain_track,
|
||||
*gain_track->canvas_display,
|
||||
_route.gain_automation_curve(), cslot, lslot);
|
||||
|
||||
|
|
|
@ -0,0 +1,37 @@
|
|||
/*
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <iostream>
|
||||
|
||||
#include "glade_factory.h"
|
||||
|
||||
Glib::RefPtr<Gnome::Glade::Xml>
|
||||
GladeFactory::create(const std::string& full_path_to_file,
|
||||
const Glib::ustring& toplevel_widget)
|
||||
{
|
||||
try {
|
||||
return Gnome::Glade::Xml::create(full_path_to_file,
|
||||
toplevel_widget,
|
||||
PACKAGE );
|
||||
} catch(const Gnome::Glade::XmlError& ex) {
|
||||
std::cerr << ex.what() << std::endl;
|
||||
throw ex;
|
||||
}
|
||||
}
|
|
@ -0,0 +1,45 @@
|
|||
/*
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
// -*- c++ -*-
|
||||
|
||||
#ifndef GLADE_FACTORY_H
|
||||
#define GLADE_FACTORY_H
|
||||
|
||||
#include <string>
|
||||
#include <libglademm/xml.h>
|
||||
|
||||
typedef Glib::RefPtr<Gnome::Glade::Xml> GladeRef;
|
||||
|
||||
/**
|
||||
This is the base class for all glade
|
||||
factories so that the same domain is
|
||||
used.
|
||||
*/
|
||||
class GladeFactory {
|
||||
|
||||
protected:
|
||||
static GladeRef
|
||||
create(const std::string& full_path,
|
||||
const Glib::ustring& toplevel_widget = Glib::ustring());
|
||||
};
|
||||
|
||||
|
||||
#endif // GLADE_FACTORY_H
|
|
@ -0,0 +1,59 @@
|
|||
/*
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#include <glibmm/fileutils.h>
|
||||
#include <glibmm/miscutils.h>
|
||||
|
||||
#include "i18n.h"
|
||||
#include "glade_path.h"
|
||||
|
||||
#include <iostream>
|
||||
|
||||
std::string
|
||||
GladePath::path(const std::string& glade_file)
|
||||
{
|
||||
std::string user_glade_dir = Glib::getenv(X_("ARDOUR_GLADE_PATH"));
|
||||
std::string full_path;
|
||||
|
||||
if(user_glade_dir != "") {
|
||||
full_path = Glib::build_filename(user_glade_dir, glade_file);
|
||||
if(Glib::file_test(full_path, Glib::FILE_TEST_EXISTS)) return full_path;
|
||||
}
|
||||
|
||||
// check if file ~/.ardour/glade/glade_file exists.
|
||||
std::vector<std::string> path;
|
||||
path.push_back(Glib::get_home_dir());
|
||||
path.push_back(X_(".ardour")); // define as a constant somewhere?
|
||||
path.push_back(X_("glade"));
|
||||
path.push_back(glade_file);
|
||||
full_path = Glib::build_filename(path);
|
||||
|
||||
// temporary debugging
|
||||
std::cout << "Path to glade file" << full_path << std::endl;
|
||||
|
||||
if(Glib::file_test(full_path, Glib::FILE_TEST_EXISTS)) return full_path;
|
||||
|
||||
/*
|
||||
If for some wierd reason the system wide glade file
|
||||
doesn't exist libglademm will throw an exception
|
||||
so don't bother testing if it exists etc.
|
||||
*/
|
||||
return Glib::build_filename(GLADEPATH, glade_file);
|
||||
}
|
|
@ -0,0 +1,49 @@
|
|||
/*
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
$Id$
|
||||
*/
|
||||
|
||||
#ifndef GLADE_PATH_H
|
||||
#define GLADE_PATH_H
|
||||
|
||||
#include <string>
|
||||
|
||||
struct GladePath {
|
||||
|
||||
/**
|
||||
@return Path to glade file.
|
||||
|
||||
XXX subject to change upon discussion.
|
||||
|
||||
glade files are currently looked for in
|
||||
three possible directories in this order.
|
||||
|
||||
In the directory defined in the environment
|
||||
variable ARDOUR_GLADE_PATH
|
||||
|
||||
In the users .ardour/glade directory.
|
||||
|
||||
In the system defined glade path.
|
||||
*/
|
||||
static std::string
|
||||
path(const std::string& glade_filename);
|
||||
|
||||
};
|
||||
|
||||
#endif // GLADE_PATH_H
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
Copyright (C) 1999-2002 Paul Davis
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
|
@ -18,322 +18,171 @@
|
|||
$Id$
|
||||
*/
|
||||
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <ardour/session.h>
|
||||
#include <ardour/audioengine.h>
|
||||
|
||||
#include "prompter.h"
|
||||
#include "new_session_dialog.h"
|
||||
|
||||
using namespace Gtkmm2ext;
|
||||
using namespace Gtk;
|
||||
using namespace ARDOUR;
|
||||
|
||||
#include "i18n.h"
|
||||
#include "new_session_dialog.h"
|
||||
#include "glade_path.h"
|
||||
|
||||
extern std::vector<string> channel_combo_strings;
|
||||
const char* NewSessionDialogFactory::s_m_top_level_widget_name = X_("new_session_dialog");
|
||||
|
||||
NewSessionDialog::NewSessionDialog (ARDOUR::AudioEngine& engine, bool startup, string given_path)
|
||||
: ArdourDialog ("new session dialog"),
|
||||
file_selector (_("Session name:"), _("Create")),
|
||||
use_control_button (_("use control outs")),
|
||||
use_master_button (_("use master outs")),
|
||||
connect_to_physical_inputs_button (_("automatically connect track inputs to physical ports")),
|
||||
connect_to_master_button (_("automatically connect track outputs to master outs")),
|
||||
connect_to_physical_outputs_button (_("automatically connect track outputs to physical ports")),
|
||||
manual_connect_outputs_button (_("manually connect track outputs")),
|
||||
in_count_adjustment (2, 1, 1000, 1, 2),
|
||||
out_count_adjustment (2, 1, 1000, 1, 2),
|
||||
output_label (_("Output Connections")),
|
||||
input_label (_("Input Connections")),
|
||||
expansion_button (_("Advanced...")),
|
||||
out_table (2, 2),
|
||||
show_again (_("show again")),
|
||||
in_count_spinner (in_count_adjustment),
|
||||
out_count_spinner (out_count_adjustment),
|
||||
in_count_label (_("Hardware Inputs: use")),
|
||||
out_count_label (_("Hardware Outputs: use"))
|
||||
|
||||
|
||||
Glib::RefPtr<Gnome::Glade::Xml>
|
||||
NewSessionDialogFactory::create()
|
||||
{
|
||||
using namespace Notebook_Helpers;
|
||||
return GladeFactory::create(GladePath::path(X_("new_session_dialog.glade")));
|
||||
}
|
||||
|
||||
set_name ("NewSessionDialog");
|
||||
set_title (_("new session setup"));
|
||||
set_wmclass (_("ardour_new_session"), "Ardour");
|
||||
set_position (Gtk::WIN_POS_MOUSE);
|
||||
set_keyboard_input (true);
|
||||
// GTK2FIX
|
||||
// set_policy (false, true, false);
|
||||
set_modal (true);
|
||||
|
||||
/* sample rate */
|
||||
NewSessionDialog::NewSessionDialog(BaseObjectType* cobject,
|
||||
const Glib::RefPtr<Gnome::Glade::Xml>& xml)
|
||||
: Gtk::Dialog(cobject)
|
||||
{
|
||||
// look up the widgets we care about.
|
||||
|
||||
sr_label1.set_text (string_compose
|
||||
(_("This session will playback and record at %1 Hz"),
|
||||
engine.frame_rate()));
|
||||
sr_label2.set_text (_("This rate is set by JACK and cannot be changed.\n"
|
||||
"If you want to use a different sample rate\n"
|
||||
"please exit and restart JACK"));
|
||||
sr_box.set_spacing (12);
|
||||
sr_box.set_border_width (12);
|
||||
sr_box.pack_start (sr_label1, false, false);
|
||||
sr_box.pack_start (sr_label2, false, false);
|
||||
sr_frame.add (sr_box);
|
||||
|
||||
/* input */
|
||||
|
||||
connect_to_physical_inputs_button.set_active (true);
|
||||
connect_to_physical_inputs_button.set_name ("NewSessionDialogButton");
|
||||
xml->get_widget(X_("SessionName"), m_name);
|
||||
xml->get_widget(X_("SessionFolder"), m_folder);
|
||||
xml->get_widget(X_("SessionTemplate"), m_template);
|
||||
|
||||
HBox* input_limit_box = manage (new HBox);
|
||||
input_limit_box->set_spacing (7);
|
||||
input_limit_box->pack_start (in_count_label, false, false);
|
||||
input_limit_box->pack_start (in_count_spinner, false, false);
|
||||
|
||||
input_label.set_alignment (0.1, 0.5);
|
||||
input_vbox.pack_start (input_label, false, false, 7);
|
||||
input_vbox.pack_start (connect_to_physical_inputs_button, false, false);
|
||||
|
||||
if (engine.n_physical_inputs() > 2) {
|
||||
input_vbox.pack_start (*input_limit_box, false, false);
|
||||
}
|
||||
|
||||
/* output */
|
||||
|
||||
use_master_button.set_active (true);
|
||||
use_master_button.set_name ("NewSessionDialogButton");
|
||||
xml->get_widget(X_("CreateMasterTrack"), m_create_master_track);
|
||||
xml->get_widget(X_("MasterChannelCount"), m_master_track_channel_count);
|
||||
|
||||
connect_to_physical_outputs_button.set_group (connect_to_master_button.get_group());
|
||||
manual_connect_outputs_button.set_group (connect_to_master_button.get_group());
|
||||
connect_to_master_button.set_active (true);
|
||||
|
||||
connect_to_physical_outputs_button.set_name ("NewSessionDialogButton");
|
||||
manual_connect_outputs_button.set_name ("NewSessionDialogButton");
|
||||
connect_to_master_button.set_name ("NewSessionDialogButton");
|
||||
use_control_button.set_name ("NewSessionDialogButton");
|
||||
|
||||
out_count_adjustment.set_value (engine.n_physical_outputs());
|
||||
in_count_adjustment.set_value (engine.n_physical_inputs());
|
||||
xml->get_widget(X_("CreateControlTrack"), m_create_control_track);
|
||||
xml->get_widget(X_("ControlChannelCount"), m_control_track_channel_count);
|
||||
|
||||
set_popdown_strings (control_out_channel_combo, channel_combo_strings);
|
||||
control_out_channel_combo.set_name (X_("NewSessionChannelCombo"));
|
||||
// use stereo as default
|
||||
control_out_channel_combo.set_active_text (channel_combo_strings.front());
|
||||
xml->get_widget(X_("ConnectInputs"), m_connect_inputs);
|
||||
xml->get_widget(X_("LimitInputPorts"), m_limit_input_ports);
|
||||
xml->get_widget(X_("InputLimitCount"), m_input_limit_count);
|
||||
|
||||
set_popdown_strings (master_out_channel_combo, channel_combo_strings);
|
||||
master_out_channel_combo.set_name (X_("NewSessionChannelCombo"));
|
||||
// use stereo as default
|
||||
master_out_channel_combo.set_active_text (channel_combo_strings.front());
|
||||
xml->get_widget(X_("ConnectOutputs"), m_connect_outputs);
|
||||
xml->get_widget(X_("LimitOutputPorts"), m_limit_output_ports);
|
||||
xml->get_widget(X_("OutputLimitCount"), m_output_limit_count);
|
||||
xml->get_widget(X_("ConnectOutsToMaster"), m_connect_outputs_to_master);
|
||||
xml->get_widget(X_("ConnectOutsToPhysical"), m_connect_outputs_to_physical);
|
||||
|
||||
|
||||
out_table.set_col_spacings (7);
|
||||
out_table.set_row_spacings (7);
|
||||
if (engine.n_physical_outputs() > 2) {
|
||||
out_table.attach (out_count_label, 0, 1, 0, 1, 0, 0);
|
||||
out_table.attach (out_count_spinner, 1, 2, 0, 1, 0, 0);
|
||||
}
|
||||
out_table.attach (use_control_button, 0, 1, 1, 2, 0, 0);
|
||||
out_table.attach (control_out_channel_combo, 1, 2, 1, 2, 0, 0);
|
||||
out_table.attach (use_master_button, 0, 1, 2, 3, 0, 0);
|
||||
out_table.attach (master_out_channel_combo, 1, 2, 2, 3, 0, 0);
|
||||
|
||||
output_label.set_alignment (0.1, 0.5);
|
||||
output_vbox.pack_start (output_label, true, true, 7);
|
||||
output_vbox.pack_start (out_table, false, false, 5);
|
||||
output_vbox.pack_start (connect_to_master_button, false);
|
||||
output_vbox.pack_start (connect_to_physical_outputs_button, false);
|
||||
output_vbox.pack_start (manual_connect_outputs_button, false);
|
||||
|
||||
input_hbox.pack_start (input_vbox, false, false);
|
||||
output_hbox.pack_start (output_vbox, false, false);
|
||||
///@ todo connect some signals
|
||||
|
||||
VBox* template_vbox = manage (new VBox);
|
||||
Label* template_label = manage (new Label (_("Session template")));
|
||||
|
||||
template_label->set_alignment (0.1, 0.5);
|
||||
template_vbox->pack_start (*template_label, true, true, 7);
|
||||
template_vbox->pack_start (template_combo, false, false);
|
||||
|
||||
io_box.set_border_width (12);
|
||||
io_box.set_spacing (7);
|
||||
io_box.pack_start (*template_vbox);
|
||||
|
||||
io_box.pack_start (input_hbox);
|
||||
io_box.pack_start (output_hbox);
|
||||
|
||||
reset_templates();
|
||||
|
||||
option_hbox.set_spacing (7);
|
||||
option_hbox.pack_start (io_box);
|
||||
|
||||
fsbox.set_border_width (12);
|
||||
fsbox.set_spacing (7);
|
||||
fsbox.pack_start (file_selector.table, false, false);
|
||||
|
||||
notebook.pages().push_back (TabElem (fsbox, _("Location")));
|
||||
notebook.pages().push_back (TabElem (option_hbox, _("Configuration")));
|
||||
|
||||
if (startup) {
|
||||
show_again.set_active(true);
|
||||
show_again.toggled.connect (mem_fun(*this, &NewSessionDialog::show_again_toggled));
|
||||
file_selector.button_box.pack_end(show_again, false, false);
|
||||
}
|
||||
|
||||
main_vbox.set_border_width (12);
|
||||
main_vbox.set_border_width (12);
|
||||
main_vbox.set_spacing (7);
|
||||
main_vbox.pack_start (sr_frame, false, false);
|
||||
main_vbox.pack_start (notebook, false, false);
|
||||
main_vbox.pack_start (file_selector.button_box, false, false);
|
||||
|
||||
add (main_vbox);
|
||||
|
||||
// template_selector.shift_made.connect (
|
||||
// mem_fun(*this, &NewSessionDialog::mix_template_shift));
|
||||
// template_selector.control_made.connect (
|
||||
// mem_fun(*this, &NewSessionDialog::mix_template_control));
|
||||
|
||||
file_selector.cancel_button.signal_clicked().connect (bind (mem_fun(*this, &ArdourDialog::stop), -1));
|
||||
file_selector.op_button.signal_clicked().connect (bind (mem_fun(*this, &ArdourDialog::stop), 0));
|
||||
file_selector.Expanded.connect (mem_fun(*this, &NewSessionDialog::file_selector_expansion));
|
||||
|
||||
delete_event.connect (mem_fun(*this, &ArdourDialog::wm_close_event));
|
||||
show.connect (mem_fun(*this, &NewSessionDialog::fixup_at_show));
|
||||
|
||||
file_selector.entry_label.set_name ("NewSessionMainLabel");
|
||||
file_selector.where_label.set_name ("NewSessionMainLabel");
|
||||
template_label->set_name ("NewSessionIOLabel");
|
||||
input_label.set_name ("NewSessionIOLabel");
|
||||
output_label.set_name ("NewSessionIOLabel");
|
||||
sr_label1.set_name ("NewSessionSR1Label");
|
||||
sr_label2.set_name ("NewSessionSR2Label");
|
||||
|
||||
if (given_path.empty()) {
|
||||
Session::FavoriteDirs favs;
|
||||
Session::read_favorite_dirs (favs);
|
||||
file_selector.set_favorites (favs);
|
||||
} else {
|
||||
file_selector.set_path (given_path, true);
|
||||
notebook.set_page (-1);
|
||||
notebook.show.connect (bind (mem_fun (notebook, &Notebook::set_page), -1));
|
||||
}
|
||||
|
||||
set_default_size(531, 358);
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::file_selector_expansion (bool expanded)
|
||||
NewSessionDialog::set_session_name(const Glib::ustring& name)
|
||||
{
|
||||
if (expanded) {
|
||||
fsbox.pack_start (file_selector.expansion_vbox);
|
||||
fsbox.reorder_child (file_selector.expansion_vbox, 2);
|
||||
} else {
|
||||
fsbox.remove (file_selector.expansion_vbox);
|
||||
}
|
||||
m_name->set_text(name);
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::fixup_at_show ()
|
||||
std::string
|
||||
NewSessionDialog::session_name() const
|
||||
{
|
||||
// if (template_selector.clist().rows().size() == 0) {
|
||||
// use_template_button.set_sensitive (false);
|
||||
// }
|
||||
|
||||
Session::FavoriteDirs favs;
|
||||
Session::read_favorite_dirs (favs);
|
||||
file_selector.set_favorites (favs);
|
||||
|
||||
file_selector.entry.grab_focus ();
|
||||
return Glib::filename_from_utf8(m_name->get_text());
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::_mix_template_refiller (CList &clist, void *arg)
|
||||
|
||||
std::string
|
||||
NewSessionDialog::session_folder() const
|
||||
{
|
||||
((NewSessionDialog*) arg)->mix_template_refiller (clist);
|
||||
return Glib::filename_from_utf8(m_folder->get_current_folder());
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::mix_template_refiller (CList &clist)
|
||||
bool
|
||||
NewSessionDialog::use_session_template() const
|
||||
{
|
||||
const gchar *rowdata[2];
|
||||
list<string> templates;
|
||||
list<string>::iterator i;
|
||||
if(m_template->get_filename().empty()) return false;
|
||||
return true;
|
||||
}
|
||||
|
||||
std::string
|
||||
NewSessionDialog::session_template_name() const
|
||||
{
|
||||
return Glib::filename_from_utf8(m_template->get_filename());
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::create_master_track() const
|
||||
{
|
||||
return m_create_master_track->get_active();
|
||||
}
|
||||
|
||||
int
|
||||
NewSessionDialog::master_channel_count() const
|
||||
{
|
||||
return m_master_track_channel_count->get_value_as_int();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::create_control_track() const
|
||||
{
|
||||
return m_create_control_track->get_active();
|
||||
}
|
||||
|
||||
int
|
||||
NewSessionDialog::control_channel_count() const
|
||||
{
|
||||
return m_control_track_channel_count->get_value_as_int();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::connect_inputs() const
|
||||
{
|
||||
return m_connect_inputs->get_active();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::limit_inputs_used_for_connection() const
|
||||
{
|
||||
return m_limit_input_ports->get_active();
|
||||
}
|
||||
|
||||
int
|
||||
NewSessionDialog::input_limit_count() const
|
||||
{
|
||||
return m_input_limit_count->get_value_as_int();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::connect_outputs() const
|
||||
{
|
||||
return m_connect_outputs->get_active();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::limit_outputs_used_for_connection() const
|
||||
{
|
||||
return m_limit_output_ports->get_active();
|
||||
}
|
||||
|
||||
int
|
||||
NewSessionDialog::output_limit_count() const
|
||||
{
|
||||
return m_output_limit_count->get_value_as_int();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::connect_outs_to_master() const
|
||||
{
|
||||
return m_connect_outputs_to_master->get_active();
|
||||
}
|
||||
|
||||
bool
|
||||
NewSessionDialog::connect_outs_to_physical() const
|
||||
{
|
||||
return m_connect_outputs_to_physical->get_active();
|
||||
}
|
||||
|
||||
|
||||
void
|
||||
NewSessionDialog::reset_name()
|
||||
{
|
||||
m_name->set_text(Glib::ustring());
|
||||
|
||||
Session::get_template_list(templates);
|
||||
|
||||
rowdata[0] = _("blank");
|
||||
clist.insert_row (0, rowdata);
|
||||
}
|
||||
|
||||
/// @todo
|
||||
void
|
||||
NewSessionDialog::reset_template()
|
||||
{
|
||||
|
||||
guint row;
|
||||
for (row=1, i=templates.begin(); i != templates.end(); ++row, ++i) {
|
||||
rowdata[0] = (*i).c_str();
|
||||
clist.insert_row (row, rowdata);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::mix_template_shift (Gtkmm2ext::Selector* selector, Gtkmm2ext::SelectionResult* res)
|
||||
NewSessionDialog::reset()
|
||||
{
|
||||
if (res && res->text){
|
||||
Session::delete_template(*res->text);
|
||||
// template_selector.rescan();
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::mix_template_control (Gtkmm2ext::Selector* selector, Gtkmm2ext::SelectionResult* res)
|
||||
{
|
||||
#if 0
|
||||
if (res && res->text) {
|
||||
ArdourPrompter prompter (true);
|
||||
prompter.set_prompt(_("Name for mix template:"));
|
||||
|
||||
string old_name = *(res->text);
|
||||
prompter.set_initial_text (old_name);
|
||||
prompter.done.connect (Gtk::Main::quit.slot());
|
||||
prompter.show_all();
|
||||
|
||||
Gtk::Main::run();
|
||||
|
||||
if (prompter.status == Gtkmm2ext::Prompter::entered) {
|
||||
string name;
|
||||
|
||||
prompter.get_result (name);
|
||||
|
||||
if (name.length() && name != old_name) {
|
||||
Session::rename_template(old_name, name);
|
||||
template_selector.rescan();
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::show_again_toggled ()
|
||||
{
|
||||
Config->set_no_new_session_dialog(!show_again.get_active());
|
||||
Config->save_state();
|
||||
}
|
||||
|
||||
void
|
||||
NewSessionDialog::reset_templates ()
|
||||
{
|
||||
templates.clear ();
|
||||
templates.push_back (_("No template - create tracks/busses manually"));
|
||||
Session::get_template_list (templates);
|
||||
set_popdown_strings (template_combo, templates);
|
||||
}
|
||||
|
||||
string
|
||||
NewSessionDialog::get_template_name()
|
||||
{
|
||||
string str = template_combo.get_entry()->get_text();
|
||||
if (str.substr (0, 11) == _("No template")) {
|
||||
return "";
|
||||
} else {
|
||||
return str;
|
||||
}
|
||||
reset_name();
|
||||
reset_template();
|
||||
}
|
||||
|
|
|
@ -1,99 +1,110 @@
|
|||
#ifndef __gtk_ardour_new_session_dialog_h__
|
||||
#define __gtk_ardour_new_session_dialog_h__
|
||||
/*
|
||||
Copyright (C) 2005 Paul Davis
|
||||
|
||||
#include <gtkmm/adjustment.h>
|
||||
#include <gtkmm/radiobutton.h>
|
||||
#include <gtkmm/frame.h>
|
||||
#include <gtkmm/filechooserwidget.h>
|
||||
#include <gtkmm/box.h>
|
||||
#include <gtkmm/checkbutton.h>
|
||||
#include <gtkmm/comboboxtext.h>
|
||||
This program is free software; you can redistribute it and/or modify
|
||||
it under the terms of the GNU General Public License as published by
|
||||
the Free Software Foundation; either version 2 of the License, or
|
||||
(at your option) any later version.
|
||||
|
||||
namespace Gtk {
|
||||
class CList;
|
||||
}
|
||||
This program is distributed in the hope that it will be useful,
|
||||
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
GNU General Public License for more details.
|
||||
|
||||
namespace ARDOUR {
|
||||
class AudioEngine;
|
||||
}
|
||||
You should have received a copy of the GNU General Public License
|
||||
along with this program; if not, write to the Free Software
|
||||
Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||
|
||||
#include <gtkmm2ext/click_box.h>
|
||||
#include <gtkmm2ext/selector.h>
|
||||
#include "ardour_dialog.h"
|
||||
$Id$
|
||||
*/
|
||||
|
||||
class NewSessionDialog : public ArdourDialog
|
||||
// -*- c++ -*-
|
||||
|
||||
#ifndef NEW_SESSION_DIALOG_H
|
||||
#define NEW_SESSION_DIALOG_H
|
||||
|
||||
#include <string>
|
||||
#include <gtkmm.h>
|
||||
|
||||
#include "glade_factory.h"
|
||||
|
||||
struct NewSessionDialogFactory : public GladeFactory
|
||||
{
|
||||
public:
|
||||
NewSessionDialog (ARDOUR::AudioEngine&, bool startup, std::string path);
|
||||
static GladeRef create();
|
||||
|
||||
static const char* top_level_widget_name();
|
||||
|
||||
private:
|
||||
|
||||
static const char* s_m_top_level_widget_name;
|
||||
|
||||
Gtk::FileChooserWidget file_selector;
|
||||
Gtk::ComboBoxText control_out_channel_combo;
|
||||
Gtk::ComboBoxText master_out_channel_combo;
|
||||
Gtk::CheckButton use_control_button;
|
||||
Gtk::CheckButton use_master_button;
|
||||
Gtk::CheckButton connect_to_physical_inputs_button;
|
||||
|
||||
Gtk::RadioButton connect_to_master_button;
|
||||
Gtk::RadioButton connect_to_physical_outputs_button;
|
||||
Gtk::RadioButton manual_connect_outputs_button;
|
||||
|
||||
Gtk::VBox input_vbox;
|
||||
Gtk::VBox manual_vbox;
|
||||
Gtk::VBox output_vbox;
|
||||
Gtk::VBox vbox;
|
||||
|
||||
Gtk::Adjustment in_count_adjustment;
|
||||
Gtk::Adjustment out_count_adjustment;
|
||||
|
||||
string get_template_name ();
|
||||
|
||||
private:
|
||||
Gtk::Notebook notebook;
|
||||
Gtk::VBox main_vbox;
|
||||
Gtk::VBox fsbox;
|
||||
|
||||
Gtk::Frame control_out_config_frame;
|
||||
Gtk::Frame master_out_config_frame;
|
||||
Gtk::Label output_label;
|
||||
Gtk::Label input_label;
|
||||
Gtk::Frame sr_frame;
|
||||
Gtk::Frame template_frame;
|
||||
Gtk::Frame manual_frame;
|
||||
Gtk::HBox control_hbox;
|
||||
Gtk::HBox master_hbox;
|
||||
Gtk::Table io_table;
|
||||
Gtk::VBox template_box;
|
||||
Gtk::HBox output_hbox;
|
||||
Gtk::HBox input_hbox;
|
||||
Gtk::HBox option_hbox;
|
||||
Gtk::VBox io_box;
|
||||
Gtk::Label sr_label2;
|
||||
Gtk::Label sr_label1;
|
||||
Gtk::VBox sr_box;
|
||||
Gtk::Button expansion_button;
|
||||
Gtk::Table out_table;
|
||||
Gtk::CheckButton show_again;
|
||||
Gtk::ComboBoxText template_combo;
|
||||
list<string> templates;
|
||||
Gtk::SpinButton in_count_spinner;
|
||||
Gtk::SpinButton out_count_spinner;
|
||||
Gtk::Label in_count_label;
|
||||
Gtk::Label out_count_label;
|
||||
|
||||
void reset_templates ();
|
||||
|
||||
static void _mix_template_refiller (Gtk::CList &clist, void *);
|
||||
void mix_template_refiller (Gtk::CList &clist);
|
||||
|
||||
void mix_template_shift (Gtkmm2ext::Selector *, Gtkmm2ext::Selector::Result*);
|
||||
void mix_template_control (Gtkmm2ext::Selector *, Gtkmm2ext::Selector::Result*);
|
||||
|
||||
void fixup_at_realize ();
|
||||
void fixup_at_show ();
|
||||
void toggle_expansion ();
|
||||
void file_selector_expansion (bool);
|
||||
|
||||
void show_again_toggled ();
|
||||
};
|
||||
|
||||
#endif // __gtk_ardour_new_session_dialog_h__ */
|
||||
class NewSessionDialog : public Gtk::Dialog
|
||||
{
|
||||
public:
|
||||
|
||||
NewSessionDialog(BaseObjectType* cobject,
|
||||
const Glib::RefPtr<Gnome::Glade::Xml>& xml);
|
||||
|
||||
void set_session_name(const Glib::ustring& name);
|
||||
|
||||
std::string session_name() const;
|
||||
std::string session_folder() const;
|
||||
|
||||
bool use_session_template() const;
|
||||
std::string session_template_name() const;
|
||||
|
||||
// advanced.
|
||||
|
||||
bool create_master_track() const;
|
||||
int master_channel_count() const;
|
||||
|
||||
bool create_control_track() const;
|
||||
int control_channel_count() const;
|
||||
|
||||
bool connect_inputs() const;
|
||||
bool limit_inputs_used_for_connection() const;
|
||||
int input_limit_count() const;
|
||||
|
||||
bool connect_outputs() const;
|
||||
bool limit_outputs_used_for_connection() const;
|
||||
int output_limit_count() const;
|
||||
|
||||
bool connect_outs_to_master() const;
|
||||
bool connect_outs_to_physical() const ;
|
||||
|
||||
protected:
|
||||
|
||||
void reset_name();
|
||||
void reset_template();
|
||||
|
||||
// reset everything to default values.
|
||||
void reset();
|
||||
|
||||
// references to widgets we care about.
|
||||
|
||||
Gtk::Entry* m_name;
|
||||
Gtk::FileChooserButton* m_folder;
|
||||
Gtk::FileChooserButton* m_template;
|
||||
|
||||
Gtk::CheckButton* m_create_master_track;
|
||||
Gtk::SpinButton* m_master_track_channel_count;
|
||||
|
||||
Gtk::CheckButton* m_create_control_track;
|
||||
Gtk::SpinButton* m_control_track_channel_count;
|
||||
|
||||
Gtk::CheckButton* m_connect_inputs;
|
||||
Gtk::CheckButton* m_limit_input_ports;
|
||||
Gtk::SpinButton* m_input_limit_count;
|
||||
|
||||
Gtk::CheckButton* m_connect_outputs;
|
||||
Gtk::CheckButton* m_limit_output_ports;
|
||||
Gtk::SpinButton* m_output_limit_count;
|
||||
|
||||
Gtk::RadioButton* m_connect_outputs_to_master;
|
||||
Gtk::RadioButton* m_connect_outputs_to_physical;
|
||||
|
||||
};
|
||||
|
||||
#endif // NEW_SESSION_DIALOG_H
|
||||
|
|
|
@ -0,0 +1,47 @@
|
|||
# -*- python -*-
|
||||
import os
|
||||
import os.path
|
||||
import glob
|
||||
|
||||
Import ('env gtkardour install_prefix intl_files')
|
||||
|
||||
potfiles_in = open('POTFILES.in', 'w')
|
||||
|
||||
intl_files.sort()
|
||||
|
||||
print "Generating POTFILES.in in gtk_ardour/po"
|
||||
|
||||
potfiles_in.write("""# This file was automatically generated by a configuration script.
|
||||
# Contains a list of source files containing translatable
|
||||
# strings sorted alphabetically.
|
||||
[encoding: UTF-8]
|
||||
""")
|
||||
|
||||
for f in intl_files[:]:
|
||||
potfiles_in.write(f + '\n')
|
||||
|
||||
potfiles_in.close()
|
||||
|
||||
print "Updating pot file: "
|
||||
|
||||
domain = gtkardour['DOMAIN']
|
||||
potfile = gtkardour['POTFILE']
|
||||
|
||||
poaction = Action('intltool-update -p -g=' + domain)
|
||||
|
||||
Execute(poaction)
|
||||
|
||||
# this should probably be merged with the i18n builder somehow
|
||||
|
||||
p_oze = [ os.path.basename (po) for po in glob.glob ('*.po') ]
|
||||
languages = [ po.replace ('.po', '') for po in p_oze ]
|
||||
m_oze = [ po.replace (".po", ".mo") for po in p_oze ]
|
||||
|
||||
for mo in m_oze[:]:
|
||||
po = mo.replace (".mo", ".po")
|
||||
env.Alias ('install', gtkardour.MoBuild (mo, [ po, potfile ]))
|
||||
|
||||
for lang in languages[:]:
|
||||
modir = (os.path.join (install_prefix, 'share/locale/' + lang + '/LC_MESSAGES/'))
|
||||
moname = domain + '.mo'
|
||||
env.Alias('install', env.InstallAs (os.path.join (modir, moname), lang + '.mo'))
|
Loading…
Reference in New Issue