basic startup changes to enable the engine control stuff to work; a little ARDOUR_SAE work

git-svn-id: svn://localhost/ardour2/branches/2.0-ongoing@2304 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis 2007-08-15 16:07:26 +00:00
parent a4c84de53c
commit e96e4bacbe
15 changed files with 775 additions and 297 deletions

View file

@ -66,7 +66,7 @@ ActionManager::init ()
{
ui_manager = UIManager::create ();
std::string ui_file = ARDOUR::find_config_file(GTK_ARDOUR::menus_file);
std::string ui_file = ARDOUR::find_config_file (ARDOUR_COMMAND_LINE::menus_file);
bool loaded = false;

View file

@ -0,0 +1,326 @@
<ui>
<menubar name='Main' action='MainMenu'>
<menu name='Session' action='Session'>
<menuitem action='New'/>
<menuitem action='Open'/>
<menuitem action='Recent'/>
<menuitem action='Close'/>
<separator/>
<menuitem action='Save'/>
<menuitem action='Snapshot'/>
<menuitem action='SaveTemplate'/>
<separator/>
<menuitem action='AddTrackBus'/>
<separator/>
<separator/>
<menu name='Cleanup' action='Cleanup'>
<menuitem action='CleanupUnused'/>
<menuitem action='FlushWastebasket'/>
</menu>
<separator/>
<menuitem action='Quit'/>
</menu>
<menu name='Files' action='Files'>
<menu action='addExistingAudioFiles'>
<menuitem action='addExternalAudioAsRegion'/>
<menuitem action='addExternalAudioToTrack'/>
<separator/>
<menuitem action='addExternalAudioAsTrack'/>
<menuitem action='addExternalAudioAsTapeTrack'/>
</menu>
<separator/>
<menuitem action='ExportSession'/>
<menuitem action='ExportSelection'/>
<menuitem action='ExportRangeMarkers'/>
</menu>
<menu name='Transport' action='Transport'>
<menuitem action='ToggleRoll'/>
<menuitem action='ToggleRollForgetCapture'/>
<menuitem action='Loop'/>
<menuitem action='PlaySelection'/>
<menuitem action='set-playhead'/>
<menuitem action='Forward'/>
<menuitem action='Rewind'/>
<menuitem action='GotoZero'/>
<menuitem action='GotoStart'/>
<menuitem action='GotoEnd'/>
<separator/>
<menuitem action='Record'/>
<separator/>
<menuitem action='TransitionToRoll'/>
<menuitem action='TransitionToReverse'/>
<separator/>
<menuitem action='jump-forward-to-mark'/>
<menuitem action='jump-backward-to-mark'/>
<menuitem action='add-location-from-playhead'/>
<separator/>
<menuitem action='playhead-to-next-region-start'/>
<menuitem action='playhead-to-next-region-end'/>
<menuitem action='playhead-to-previous-region-start'/>
<menuitem action='playhead-to-previous-region-end'/>
<menuitem action='playhead-to-next-region-sync'/>
<menuitem action='playhead-to-previous-region-sync'/>
<menuitem action='center-playhead'/>
<menuitem action='playhead-to-edit'/>
<separator/>
<menuitem action='playhead-to-range-start'/>
<menuitem action='playhead-to-range-end'/>
<menu action='TransportOptions'>
<menuitem action='ToggleTimeMaster'/>
<menuitem action='TogglePunchIn'/>
<menuitem action='TogglePunchOut'/>
<menuitem action='ToggleAutoInput'/>
<menuitem action='ToggleAutoPlay'/>
<menuitem action='ToggleAutoReturn'/>
<menuitem action='ToggleClick'/>
<menuitem action='toggle-follow-playhead'/>
<menuitem action='ToggleVideoSync'/>
</menu>
</menu>
<menu name='Edit' action='Edit'>
<menuitem action='undo'/>
<menuitem action='redo'/>
<menuitem action='editor-cut'/>
<menuitem action='editor-delete'/>
<menuitem action='editor-copy'/>
<menuitem action='editor-paste'/>
<menuitem action='set-edit-cursor'/>
<menuitem action='remove-last-capture'/>
<separator/>
<menu action="EditSelectRangeOptions">
<menuitem action='extend-range-to-start-of-region'/>
<menuitem action='extend-range-to-end-of-region'/>
<menuitem action='start-range'/>
<menuitem action='finish-range'/>
<menuitem action='finish-add-range'/>
</menu>
<menu action="EditSelectRegionOptions">
<menuitem action='select-all'/>
<menuitem action='select-all-after-edit-cursor'/>
<menuitem action='select-all-before-edit-cursor'/>
<menuitem action='select-all-after-playhead'/>
<menuitem action='select-all-before-playhead'/>
<menuitem action='select-all-between-cursors'/>
<menuitem action='select-all-in-punch-range'/>
<menuitem action='select-all-in-loop-range'/>
</menu>
<menu action='EditCursorMovementOptions'>
<menuitem action='edit-cursor-to-next-region-start'/>
<menuitem action='edit-cursor-to-next-region-end'/>
<menuitem action='edit-cursor-to-previous-region-start'/>
<menuitem action='edit-cursor-to-previous-region-end'/>
<menuitem action='edit-cursor-to-next-region-sync'/>
<menuitem action='edit-cursor-to-previous-region-sync'/>
<menuitem action='center-edit-cursor'/>
<menuitem action='edit-to-playhead'/>
<menuitem action='edit-cursor-to-range-start'/>
<menuitem action='edit-cursor-to-range-end'/>
</menu>
<menu name='KeyMouse Actions' action='KeyMouse Actions'>
<menuitem action='audition-at-mouse'/>
<menuitem action='brush-at-mouse'/>
<menuitem action='mute-unmute-region'/>
<separator/>
<menuitem action='set-mouse-mode-object'/>
<menuitem action='set-mouse-mode-range'/>
<menuitem action='set-mouse-mode-gain'/>
<menuitem action='set-mouse-mode-zoom'/>
<menuitem action='set-mouse-mode-timefx'/>
</menu>
</menu>
<menu name='Regions' action='Regions'>
<menuitem action='crop'/>
<menuitem action='duplicate-region'/>
<menuitem action='insert-region'/>
<menuitem action='normalize-region'/>
<separator/>
<menuitem action="nudge-forward"/>
<menuitem action="nudge-next-forward"/>
<menuitem action="nudge-backward"/>
<menuitem action="nudge-next-backward"/>
<menuitem action='split-region'/>
<menuitem action='set-region-sync-position'/>
</menu>
<menu name='View' action = 'View'>
<menu name='ZoomFocus' action='ZoomFocus'>
<menuitem action='zoom-focus-left'/>
<menuitem action='zoom-focus-right'/>
<menuitem action='zoom-focus-center'/>
<menuitem action='zoom-focus-playhead'/>
<menuitem action='zoom-focus-edit'/>
</menu>
<menu name='SnapMode' action='SnapMode'>
<menuitem action='snap-normal'/>
<menuitem action='snap-magnetic'/>
</menu>
<menu name='SnapTo' action='SnapTo'>
<menuitem action='snap-to-frame'/>
<menuitem action='snap-to-cd-frame'/>
<menuitem action='snap-to-smpte-frame'/>
<menuitem action='snap-to-smpte-seconds'/>
<menuitem action='snap-to-smpte-minutes'/>
<menuitem action='snap-to-seconds'/>
<menuitem action='snap-to-minutes'/>
<menuitem action='snap-to-thirtyseconds'/>
<menuitem action='snap-to-asixteenthbeat'/>
<menuitem action='snap-to-eighths'/>
<menuitem action='snap-to-quarters'/>
<menuitem action='snap-to-thirds'/>
<menuitem action='snap-to-beat'/>
<menuitem action='snap-to-bar'/>
<menuitem action='snap-to-mark'/>
<menuitem action='snap-to-edit-cursor'/>
<menuitem action='snap-to-region-start'/>
<menuitem action='snap-to-region-end'/>
<menuitem action='snap-to-region-sync'/>
<menuitem action='snap-to-region-boundary'/>
</menu>
<separator/>
<menuitem action='temporal-zoom-in'/>
<menuitem action='temporal-zoom-out'/>
<menuitem action='zoom-to-session'/>
<menuitem action='scroll-tracks-down'/>
<menuitem action='scroll-tracks-up'/>
<menuitem action='scroll-tracks-down'/>
<menuitem action='step-tracks-up'/>
<menuitem action='step-tracks-down'/>
<separator/>
<menuitem action='scroll-forward'/>
<menuitem action='scroll-backward'/>
<separator/>
<menuitem action='scroll-playhead-forward'/>
<menuitem action='scroll-playhead-backward'/>
<separator/>
<menuitem action='show-editor-mixer'/>
</menu>
<menu name='JACK' action='JACK'>
<menuitem action='JACKDisconnect'/>
<menuitem action='JACKReconnect'/>
<menu name='Latency' action='Latency'>
<menuitem action='JACKLatency32'/>
<menuitem action='JACKLatency64'/>
<menuitem action='JACKLatency128'/>
<menuitem action='JACKLatency256'/>
<menuitem action='JACKLatency512'/>
<menuitem action='JACKLatency1024'/>
<menuitem action='JACKLatency2048'/>
<menuitem action='JACKLatency4096'/>
<menuitem action='JACKLatency8192'/>
</menu>
</menu>
<menu name='Windows' action = 'Windows'>
<menuitem action='ToggleMaximalEditor'/>
<separator/>
<menuitem action='goto-editor'/>
<menuitem action='goto-mixer'/>
<menuitem action='ToggleOptionsEditor'/>
<menuitem action='ToggleInspector'/>
<menuitem action='ToggleLocations'/>
<menuitem action='ToggleThemeManager'/>
<menuitem action='ToggleBigClock'/>
<separator/>
</menu>
<menu name='Options' action='Options'>
<menu action='AudioFileFormat'>
<menu action='AudioFileFormatData'>
<menuitem action='FileDataFormatFloat'/>
<menuitem action='FileDataFormat24bit'/>
<menuitem action='FileDataFormat16bit'/>
</menu>
<menu action='AudioFileFormatHeader'>
<menuitem action='FileHeaderFormatBWF'/>
<menuitem action='FileHeaderFormatWAVE'/>
<menuitem action='FileHeaderFormatWAVE64'/>
<menuitem action='FileHeaderFormatCAF'/>
</menu>
</menu>
<menu action='Monitoring'>
<menuitem action='UseHardwareMonitoring'/>
<menuitem action='UseSoftwareMonitoring'/>
<menuitem action='UseExternalMonitoring'/>
</menu>
<menu action='Metering'>
<menu action='MeteringFallOffRate'>
<menuitem action='MeterFalloffOff'/>
<menuitem action='MeterFalloffSlowest'/>
<menuitem action='MeterFalloffSlow'/>
<menuitem action='MeterFalloffMedium'/>
<menuitem action='MeterFalloffFast'/>
<menuitem action='MeterFalloffFaster'/>
<menuitem action='MeterFalloffFastest'/>
</menu>
<menu action='MeteringHoldTime'>
<menuitem action='MeterHoldOff'/>
<menuitem action='MeterHoldShort'/>
<menuitem action='MeterHoldMedium'/>
<menuitem action='MeterHoldLong'/>
</menu>
</menu>
<menu action='Solo'>
<menuitem action='LatchedSolo'/>
</menu>
</menu>
<menu name='Help' action='Help'>
<menuitem action='About'/>
</menu>
</menubar>
<popup name='redirectmenu'>
<menuitem action='newplugin'/>
<menuitem action='newinsert'/>
<menuitem action='newsend'/>
<separator/>
<menuitem action='clear'/>
<separator/>
<menuitem action='cut'/>
<menuitem action='copy'/>
<menuitem action='paste'/>
<menuitem action='delete'/>
<separator/>
<menuitem action='rename'/>
<separator/>
<menuitem action='selectall'/>
<menuitem action='deselectall'/>
<separator/>
<menuitem action='activate'/>
<menuitem action='deactivate'/>
<separator/>
<menuitem action='activate_all'/>
<menuitem action='deactivate_all'/>
<separator/>
<menuitem action='edit'/>
</popup>
<popup name='ShuttleUnitPopup'>
<menuitem action='SetShuttleUnitsPercentage'/>
<menuitem action='SetShuttleUnitsSemitones'/>
</popup>
<popup name='RegionListMenu'>
<menuitem action='rlAudition'/>
<menuitem action='rlHide'/>
<menuitem action='rlRemove'/>
<separator/>
<menuitem action='rlShowAll'/>
<menuitem action='rlShowAuto'/>
<menu name='Sort' action='RegionListSort'>
<menuitem action='SortAscending'/>
<menuitem action='SortDescending'/>
<separator/>
<menuitem action='SortByRegionName'/>
<menuitem action='SortByRegionLength'/>
<menuitem action='SortByRegionPosition'/>
<menuitem action='SortByRegionTimestamp'/>
<menuitem action='SortByRegionStartinFile'/>
<menuitem action='SortByRegionEndinFile'/>
<menuitem action='SortBySourceFileName'/>
<menuitem action='SortBySourceFileLength'/>
<menuitem action='SortBySourceFileCreationDate'/>
<menuitem action='SortBySourceFilesystem'/>
</menu>
<separator/>
<menuitem action='addExternalAudioToRegionList'/>
</popup>
</ui>

View file

@ -169,6 +169,7 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
_session_is_new = false;
big_clock_window = 0;
session_selector_window = 0;
new_session_dialog = 0;
last_key_press_time = 0;
connection_editor = 0;
add_route_dialog = 0;
@ -210,31 +211,81 @@ ARDOUR_UI::ARDOUR_UI (int *argcp, char **argvp[])
ARDOUR::Session::AskAboutPendingState.connect (mem_fun(*this, &ARDOUR_UI::pending_state_dialog));
/* have to wait for AudioEngine and Configuration before proceeding */
/* lets get this party started */
try {
ARDOUR::init (ARDOUR_COMMAND_LINE::use_vst, ARDOUR_COMMAND_LINE::try_hw_optimization);
setup_gtk_ardour_enums ();
Config->set_current_owner (ConfigVariableBase::Interface);
setup_profile ();
} catch (failed_constructor& err) {
error << _("could not initialize Ardour.") << endmsg;
// pass it on up
throw err;
}
/* we like keyboards */
keyboard = new Keyboard;
starting.connect (mem_fun(*this, &ARDOUR_UI::startup));
stopping.connect (mem_fun(*this, &ARDOUR_UI::shutdown));
}
gint
ARDOUR_UI::start_backend_audio ()
{
if (new_session_dialog->engine_control.start_engine ()) {
return -1;
}
return 0;
}
void
ARDOUR_UI::set_engine (AudioEngine& e)
ARDOUR_UI::create_engine ()
{
engine = &e;
// this gets called every time by new_session()
if (engine) {
return;
}
try {
engine = new ARDOUR::AudioEngine (ARDOUR_COMMAND_LINE::jack_client_name);
} catch (AudioEngine::NoBackendAvailable& err) {
backend_audio_error ();
error << string_compose (_("Could not connect to JACK server as \"%1\""), ARDOUR_COMMAND_LINE::jack_client_name) << endmsg;
quit ();
}
engine->Stopped.connect (mem_fun(*this, &ARDOUR_UI::engine_stopped));
engine->Running.connect (mem_fun(*this, &ARDOUR_UI::engine_running));
engine->Halted.connect (mem_fun(*this, &ARDOUR_UI::engine_halted));
engine->SampleRateChanged.connect (mem_fun(*this, &ARDOUR_UI::update_sample_rate));
post_engine ();
}
void
ARDOUR_UI::post_engine ()
{
/* Things to be done once we create the AudioEngine
*/
check_memory_locking();
ActionManager::init ();
new_session_dialog = new NewSessionDialog();
_tooltips.enable();
keyboard = new Keyboard;
if (setup_windows ()) {
throw failed_constructor ();
}
if (GTK_ARDOUR::show_key_actions) {
/* this is the first point at which all the keybindings are available */
if (ARDOUR_COMMAND_LINE::show_key_actions) {
vector<string> names;
vector<string> paths;
vector<string> keys;
@ -251,9 +302,6 @@ ARDOUR_UI::set_engine (AudioEngine& e)
exit (0);
}
/* start with timecode, metering enabled
*/
blink_timeout_tag = -1;
/* the global configuration object is now valid */
@ -279,8 +327,16 @@ ARDOUR_UI::set_engine (AudioEngine& e)
update_cpu_load ();
update_sample_rate (engine->frame_rate());
starting.connect (mem_fun(*this, &ARDOUR_UI::startup));
stopping.connect (mem_fun(*this, &ARDOUR_UI::shutdown));
/* now start and maybe save state */
if (do_engine_start () == 0) {
if (session && _session_is_new) {
/* we need to retain initial visual
settings for a new session
*/
session->save_state ("");
}
}
}
ARDOUR_UI::~ARDOUR_UI ()
@ -302,6 +358,10 @@ ARDOUR_UI::~ARDOUR_UI ()
if (add_route_dialog) {
delete add_route_dialog;
}
if (new_session_dialog) {
delete new_session_dialog;
}
}
gint
@ -463,10 +523,117 @@ ARDOUR_UI::update_autosave ()
}
}
void
ARDOUR_UI::backend_audio_error ()
{
MessageDialog win (_("Ardour could not connect to JACK."),
false,
Gtk::MESSAGE_INFO,
(Gtk::ButtonsType)(Gtk::BUTTONS_NONE));
win.set_secondary_text(_("There are several possible reasons:\n\
\n\
1) JACK is not running.\n\
2) JACK is running as another user, perhaps root.\n\
3) There is already another client called \"ardour\".\n\
\n\
Please consider the possibilities, and perhaps (re)start JACK."));
win.add_button (Stock::QUIT, RESPONSE_CLOSE);
win.set_default_response (RESPONSE_CLOSE);
win.show_all ();
win.set_position (Gtk::WIN_POS_CENTER);
if (!ARDOUR_COMMAND_LINE::no_splash) {
hide_splash ();
}
/* we just don't care about the result, but we want to block */
win.run ();
}
void
ARDOUR_UI::startup ()
{
check_memory_locking();
using namespace ARDOUR_COMMAND_LINE;
string name, path;
bool isnew;
new_session_dialog = new NewSessionDialog();
/* If no session name is given: we're not loading a session yet, nor creating a new one */
if (session_name.length()) {
/* Load session or start the new session dialog */
if (Session::find_session (session_name, path, name, isnew)) {
error << string_compose(_("could not load command line session \"%1\""), session_name) << endmsg;
return;
}
if (!ARDOUR_COMMAND_LINE::new_session) {
/* Supposed to be loading an existing session, but the session doesn't exist */
if (isnew) {
error << string_compose (_("\n\nNo session named \"%1\" exists.\n"
"To create it from the command line, start ardour as \"ardour --new %1"), path)
<< endmsg;
return;
}
}
new_session_dialog->set_session_name (name);
new_session_dialog->set_session_folder (Glib::path_get_basename (path));
_session_is_new = isnew;
}
hide_splash ();
bool have_backend = EngineControl::engine_running();
bool need_nsd;
bool load_needed = false;
if (have_backend) {
/* backend audio is working */
if (session_name.empty() || ARDOUR_COMMAND_LINE::new_session) {
/* need NSD to get session name and other info */
need_nsd = true;
} else {
need_nsd = false;
}
} else {
/* no backend audio, must bring up NSD to check configuration */
need_nsd = true;
}
if (need_nsd) {
if (!new_session (session_name,have_backend)) {
return;
}
} else {
load_needed = true;
}
create_engine ();
if (load_needed) {
if (load_session (session_name, name)) {
return;
}
}
show ();
}
void
@ -971,7 +1138,6 @@ ARDOUR_UI::open_session ()
{
if (!check_audioengine()) {
return;
}
/* popup selector window */
@ -1472,21 +1638,6 @@ ARDOUR_UI::setup_theme ()
theme_manager->setup_theme();
}
gint
ARDOUR_UI::start_engine ()
{
if (do_engine_start () == 0) {
if (session && _session_is_new) {
/* we need to retain initial visual
settings for a new session
*/
session->save_state ("");
}
}
return FALSE;
}
void
ARDOUR_UI::update_clocks ()
{
@ -1780,15 +1931,11 @@ ARDOUR_UI::save_template ()
}
bool
ARDOUR_UI::new_session (std::string predetermined_path)
ARDOUR_UI::new_session (Glib::ustring predetermined_path, bool have_engine)
{
string session_name;
string session_path;
if (!check_audioengine()) {
return false;
}
int response = Gtk::RESPONSE_NONE;
new_session_dialog->set_modal(true);
@ -1798,13 +1945,11 @@ ARDOUR_UI::new_session (std::string predetermined_path)
new_session_dialog->set_current_page (0);
do {
new_session_dialog->set_have_engine (have_engine);
response = new_session_dialog->run ();
if (!check_audioengine()) {
new_session_dialog->hide ();
return false;
}
_session_is_new = false;
if (response == Gtk::RESPONSE_CANCEL || response == Gtk::RESPONSE_DELETE_EVENT) {
@ -1819,10 +1964,26 @@ ARDOUR_UI::new_session (std::string predetermined_path)
/* Clear was pressed */
new_session_dialog->reset();
continue;
}
} else if (response == Gtk::RESPONSE_YES) {
/* first things first ... we need an audio engine running */
/* YES == OPEN, but there's no enum for that */
if (!have_engine) {
if (start_backend_audio ()) {
new_session_dialog->hide ();
return false;
}
have_engine = true;
}
create_engine ();
/* now handle possible affirmative responses */
if (response == Gtk::RESPONSE_YES) {
/* YES == OPEN from the open session tab */
session_name = new_session_dialog->session_name();
@ -1842,15 +2003,11 @@ ARDOUR_UI::new_session (std::string predetermined_path)
} else if (response == Gtk::RESPONSE_OK) {
/* OK == OPEN from new session tab */
session_name = new_session_dialog->session_name();
if (new_session_dialog->get_current_page() == 1) {
/* XXX this is a bit of a hack..
i really want the new sesion dialog to return RESPONSE_YES
if we're on page 1 (the load page)
Unfortunately i can't see how atm..
*/
if (session_name.empty()) {
response = Gtk::RESPONSE_NONE;
@ -1873,6 +2030,8 @@ ARDOUR_UI::new_session (std::string predetermined_path)
continue;
}
/* handle what appear to be paths rather than just a name */
if (session_name[0] == '/' ||
(session_name.length() > 2 && session_name[0] == '.' && session_name[1] == '/') ||
(session_name.length() > 3 && session_name[0] == '.' && session_name[1] == '.' && session_name[2] == '/')) {
@ -1891,7 +2050,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
session_path = Glib::build_filename (session_path, session_name);
if (g_file_test (session_path.c_str(), GFileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
if (Glib::file_test (session_path, Glib::FileTest (G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR))) {
Glib::ustring str = string_compose (_("This session\n%1\nalready exists. Do you want to open it?"), session_path);
@ -1999,7 +2158,7 @@ ARDOUR_UI::close_session()
}
unload_session();
new_session ();
new_session ("", true);
}
int
@ -2808,13 +2967,13 @@ ARDOUR_UI::setup_profile ()
if (gdk_screen_width() < 1200) {
Profile->set_small_screen ();
}
if (getenv ("ARDOUR_SAE")) {
Profile->set_sae ();
}
}
void
ARDOUR_UI::audioengine_setup ()
{
EngineDialog ed;
ed.show_all ();
ed.run ();
}

View file

@ -72,9 +72,9 @@ class ConnectionEditor;
class RouteParams_UI;
class About;
class AddRouteDialog;
class NewSessionDialog;
class LocationUI;
class ThemeManager;
class NewSessionDialog;
namespace Gtkmm2ext {
class TearOff;
@ -130,7 +130,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
_will_create_new_session_automatically = yn;
}
bool new_session(std::string path = string());
bool new_session (Glib::ustring path, bool have_engine = false);
gint cmdline_new_session (string path);
int unload_session ();
void close_session();
@ -202,8 +202,9 @@ class ARDOUR_UI : public Gtkmm2ext::UI
void session_add_midi_track ();
void set_engine (ARDOUR::AudioEngine&);
gint start_engine ();
void create_engine ();
void post_engine ();
gint start_backend_audio ();
gint exit_on_main_window_close (GdkEventAny *);
@ -291,6 +292,7 @@ class ARDOUR_UI : public Gtkmm2ext::UI
static ARDOUR_UI *theArdourUI;
void backend_audio_error ();
void startup ();
void shutdown ();

View file

@ -47,7 +47,7 @@ void
ARDOUR_UI::shutdown ()
{
if (session) {
delete session;
// delete session;
session = 0;
}

View file

@ -101,7 +101,7 @@ ARDOUR_UI::install_actions ()
/* the real actions */
act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (bind (mem_fun(*this, &ARDOUR_UI::new_session), string ())));
act = ActionManager::register_action (main_actions, X_("New"), _("New"), hide_return (bind (mem_fun(*this, &ARDOUR_UI::new_session), string (), true)));
ActionManager::register_action (main_actions, X_("Open"), _("Open"), mem_fun(*this, &ARDOUR_UI::open_session));
ActionManager::register_action (main_actions, X_("Recent"), _("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session));
@ -162,10 +162,6 @@ ARDOUR_UI::install_actions ()
/* not sensitive to the presence or absence of JACK */
act = ActionManager::register_action (jack_actions, X_("AudioEngineSetup"), _("Setup"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::audioengine_setup));
if (EngineDialog::engine_running()) {
// act->set_sensitive (false);
}
act = ActionManager::register_action (jack_actions, X_("JACKReconnect"), _("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack));
ActionManager::jack_opposite_sensitive_actions.push_back (act);
@ -701,7 +697,9 @@ ARDOUR_UI::build_control_surface_menu ()
void
ARDOUR_UI::build_menu_bar ()
{
build_control_surface_menu ();
if (!Profile->get_sae()) {
build_control_surface_menu ();
}
menu_bar = dynamic_cast<MenuBar*> (ActionManager::get_widget (X_("/Main")));
menu_bar->set_name ("MainMenuBar");

View file

@ -1,4 +1,6 @@
#include <vector>
#include <cmath>
#include <fstream>
#include <glibmm.h>
@ -8,6 +10,7 @@
#include <gtkmm2ext/utils.h>
#include <pbd/convert.h>
#include <pbd/error.h>
#include "engine_dialog.h"
#include "i18n.h"
@ -18,9 +21,8 @@ using namespace Gtkmm2ext;
using namespace PBD;
using namespace Glib;
EngineDialog::EngineDialog ()
: ArdourDialog (_("Audio Engine"), false, true),
periods_adjustment (2, 2, 16, 1, 2),
EngineControl::EngineControl ()
: periods_adjustment (2, 2, 16, 1, 2),
periods_spinner (periods_adjustment),
priority_adjustment (60, 10, 90, 1, 10),
priority_spinner (priority_adjustment),
@ -35,7 +37,9 @@ EngineDialog::EngineDialog ()
hw_monitor_button (_("H/W monitoring")),
hw_meter_button (_("H/W metering")),
verbose_output_button (_("Verbose output")),
basic_packer (5, 2),
start_button (_("Start")),
stop_button (_("Stop")),
basic_packer (8, 2),
options_packer (12, 2),
device_packer (3, 2)
{
@ -86,7 +90,7 @@ EngineDialog::EngineDialog ()
/* figure out available devices and set up interface_combo */
enumerate_devices ();
driver_combo.signal_changed().connect (mem_fun (*this, &EngineDialog::driver_changed));
driver_combo.signal_changed().connect (mem_fun (*this, &EngineControl::driver_changed));
driver_changed ();
strings.clear ();
@ -96,6 +100,9 @@ EngineDialog::EngineDialog ()
set_popdown_strings (audio_mode_combo, strings);
audio_mode_combo.set_active_text (strings.front());
audio_mode_combo.signal_changed().connect (mem_fun (*this, &EngineControl::audio_mode_changed));
audio_mode_changed ();
label = manage (new Label (_("Driver")));
basic_packer.attach (*label, 0, 1, 0, 1, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (driver_combo, 1, 2, 0, 1, FILL|EXPAND, (AttachOptions) 0);
@ -108,18 +115,44 @@ EngineDialog::EngineDialog ()
basic_packer.attach (*label, 0, 1, 2, 3, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (sample_rate_combo, 1, 2, 2, 3, FILL|EXPAND, (AttachOptions) 0);
label = manage (new Label (_("Period Size")));
label = manage (new Label (_("Buffer size")));
basic_packer.attach (*label, 0, 1, 3, 4, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (period_size_combo, 1, 2, 3, 4, FILL|EXPAND, (AttachOptions) 0);
label = manage (new Label (_("Number of periods")));
label = manage (new Label (_("Number of buffers")));
basic_packer.attach (*label, 0, 1, 4, 5, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (periods_spinner, 1, 2, 4, 5, FILL|EXPAND, (AttachOptions) 0);
periods_spinner.set_value (2);
label = manage (new Label (_("Audio Mode")));
label = manage (new Label (_("Approximate latency")));
basic_packer.attach (*label, 0, 1, 5, 6, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (audio_mode_combo, 1, 2, 5, 6, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (latency_label, 1, 2, 5, 6, FILL|EXPAND, (AttachOptions) 0);
sample_rate_combo.signal_changed().connect (mem_fun (*this, &EngineControl::redisplay_latency));
periods_adjustment.signal_value_changed().connect (mem_fun (*this, &EngineControl::redisplay_latency));
period_size_combo.signal_changed().connect (mem_fun (*this, &EngineControl::redisplay_latency));
redisplay_latency();
label = manage (new Label (_("Audio Mode")));
basic_packer.attach (*label, 0, 1, 6, 7, FILL|EXPAND, (AttachOptions) 0);
basic_packer.attach (audio_mode_combo, 1, 2, 6, 7, FILL|EXPAND, (AttachOptions) 0);
/*
if (engine_running()) {
start_button.set_sensitive (false);
} else {
stop_button.set_sensitive (false);
}
start_button.signal_clicked().connect (mem_fun (*this, &EngineControl::start_engine));
stop_button.signal_clicked().connect (mem_fun (*this, &EngineControl::start_engine));
*/
button_box.pack_start (start_button, false, false);
button_box.pack_start (stop_button, false, false);
// basic_packer.attach (button_box, 0, 2, 8, 9, FILL|EXPAND, (AttachOptions) 0);
/* options */
@ -129,7 +162,7 @@ EngineDialog::EngineDialog ()
options_packer.attach (priority_spinner, 1, 2, 1, 2, FILL|EXPAND, (AttachOptions) 0);
priority_spinner.set_value (60);
realtime_button.signal_toggled().connect (mem_fun (*this, &EngineDialog::realtime_changed));
realtime_button.signal_toggled().connect (mem_fun (*this, &EngineControl::realtime_changed));
realtime_changed ();
#ifndef __APPLE
@ -213,42 +246,29 @@ EngineDialog::EngineDialog ()
label = manage (new Label (_("Output channels")));
device_packer.attach (*label, 0, 1, 3, 4, FILL|EXPAND, (AttachOptions) 0);
device_packer.attach (output_channels, 1, 2, 3, 4, FILL|EXPAND, (AttachOptions) 0);
label = manage (new Label (_("Input latency")));
label = manage (new Label (_("Input latency (samples)")));
device_packer.attach (*label, 0, 1, 4, 5, FILL|EXPAND, (AttachOptions) 0);
device_packer.attach (input_latency, 1, 2, 4, 5, FILL|EXPAND, (AttachOptions) 0);
label = manage (new Label (_("Output latency")));
label = manage (new Label (_("Output latency (samples)")));
device_packer.attach (*label, 0, 1, 5, 6, FILL|EXPAND, (AttachOptions) 0);
device_packer.attach (output_latency, 1, 2, 5, 6, FILL|EXPAND, (AttachOptions) 0);
notebook.pages().push_back (TabElem (basic_packer, _("Parameters")));
notebook.pages().push_back (TabElem (basic_packer, _("Basics")));
notebook.pages().push_back (TabElem (options_packer, _("Options")));
notebook.pages().push_back (TabElem (device_packer, _("Device")));
notebook.pages().push_back (TabElem (device_packer, _("Device Parameters")));
get_vbox()->set_border_width (12);
get_vbox()->pack_start (notebook);
add_button (Stock::OK, RESPONSE_ACCEPT);
start_button = add_button (_("Start"), RESPONSE_YES);
stop_button = add_button (_("Stop"), RESPONSE_NO);
if (engine_running()) {
start_button->set_sensitive (false);
} else {
stop_button->set_sensitive (false);
}
start_button->signal_clicked().connect (mem_fun (*this, &EngineDialog::start_engine));
stop_button->signal_clicked().connect (mem_fun (*this, &EngineDialog::start_engine));
set_border_width (12);
pack_start (notebook);
}
EngineDialog::~EngineDialog ()
EngineControl::~EngineControl ()
{
}
void
EngineDialog::build_command_line (vector<string>& cmd)
EngineControl::build_command_line (vector<string>& cmd)
{
string str;
bool using_oss = false;
@ -335,15 +355,16 @@ EngineDialog::build_command_line (vector<string>& cmd)
cmd.push_back (to_string ((uint32_t) floor (periods_spinner.get_value()), std::dec));
cmd.push_back ("-r");
/* rate string has "Hz" on the end of it */
uint32_t rate = atoi (sample_rate_combo.get_active_text ());
cmd.push_back (to_string (rate, std::dec));
cmd.push_back (to_string (get_rate(), std::dec));
cmd.push_back ("-p");
cmd.push_back (period_size_combo.get_active_text());
if (using_alsa) {
cmd.push_back ("-d");
cmd.push_back (interface_combo.get_active_text());
if (hw_meter_button.get_active()) {
cmd.push_back ("-M");
}
@ -383,7 +404,7 @@ EngineDialog::build_command_line (vector<string>& cmd)
}
bool
EngineDialog::engine_running ()
EngineControl::engine_running ()
{
jack_status_t status;
jack_client_t* c = jack_client_open ("ardourprobe", JackNoStartServer, &status);
@ -395,43 +416,60 @@ EngineDialog::engine_running ()
return false;
}
void
EngineDialog::start_engine ()
int
EngineControl::start_engine ()
{
vector<string> args;
std::string cwd;
std::string cwd = "/tmp";
int ret = 0;
build_command_line (args);
cerr << "will execute:\n";
for (vector<string>::iterator i = args.begin(); i != args.end(); ++i) {
cerr << (*i) << ' ';
ofstream jackdrc ("/home/paul/.jackdrc");
if (!jackdrc) {
error << _("cannot open JACK rc file to store parameters") << endmsg;
return -1;
}
cerr << endl;
for (vector<string>::iterator i = args.begin(); i != args.end(); ++i) {
jackdrc << (*i) << ' ';
}
jackdrc << endl;
jackdrc.close ();
#if 0
try {
// spawn_async_with_pipes (cwd, args, SpawnFlags (0), sigc::slot<void>(), &engine_pid, &engine_stdin, &engine_stdout, &engine_stderr);
spawn_async_with_pipes (cwd, args, SpawnFlags (0), sigc::slot<void>(), &engine_pid, &engine_stdin, &engine_stdout, &engine_stderr);
}
catch (Glib::Exception& err) {
cerr << "spawn failed\n";
error << _("could not start JACK server: ") << err.what() << endmsg;
ret = -1;
}
#endif
return ret;
}
void
EngineDialog::stop_engine ()
int
EngineControl::stop_engine ()
{
close (engine_stdin);
close (engine_stderr);
close (engine_stdout);
spawn_close_pid (engine_pid);
return 0;
}
void
EngineDialog::realtime_changed ()
EngineControl::realtime_changed ()
{
priority_spinner.set_sensitive (realtime_button.get_active());
}
void
EngineDialog::enumerate_devices ()
EngineControl::enumerate_devices ()
{
/* note: case matters for the map keys */
@ -448,14 +486,14 @@ EngineDialog::enumerate_devices ()
#ifdef __APPLE
vector<string>
EngineDialog::enumerate_coreaudio_devices ()
EngineControl::enumerate_coreaudio_devices ()
{
vector<string> devs;
return devs;
}
#else
vector<string>
EngineDialog::enumerate_alsa_devices ()
EngineControl::enumerate_alsa_devices ()
{
vector<string> devs;
devs.push_back ("hw:0");
@ -465,25 +503,25 @@ EngineDialog::enumerate_alsa_devices ()
return devs;
}
vector<string>
EngineDialog::enumerate_ffado_devices ()
EngineControl::enumerate_ffado_devices ()
{
vector<string> devs;
return devs;
}
vector<string>
EngineDialog::enumerate_oss_devices ()
EngineControl::enumerate_oss_devices ()
{
vector<string> devs;
return devs;
}
vector<string>
EngineDialog::enumerate_dummy_devices ()
EngineControl::enumerate_dummy_devices ()
{
vector<string> devs;
return devs;
}
vector<string>
EngineDialog::enumerate_netjack_devices ()
EngineControl::enumerate_netjack_devices ()
{
vector<string> devs;
return devs;
@ -491,7 +529,7 @@ EngineDialog::enumerate_netjack_devices ()
#endif
void
EngineDialog::driver_changed ()
EngineControl::driver_changed ()
{
string driver = driver_combo.get_active_text();
vector<string>& strings = devices[driver];
@ -516,3 +554,36 @@ EngineDialog::driver_changed ()
monitor_button.set_sensitive (false);
}
}
uint32_t
EngineControl::get_rate ()
{
return atoi (sample_rate_combo.get_active_text ());
}
void
EngineControl::redisplay_latency ()
{
uint32_t rate = get_rate();
float periods = periods_adjustment.get_value();
float period_size = atof (period_size_combo.get_active_text());
char buf[32];
snprintf (buf, sizeof(buf), "%.1fmsec", (periods * period_size) / (rate/1000.0));
latency_label.set_text (buf);
}
void
EngineControl::audio_mode_changed ()
{
Glib::ustring str = audio_mode_combo.get_active_text();
if (str == _("Duplex")) {
input_device_combo.set_sensitive (false);
output_device_combo.set_sensitive (false);
} else {
input_device_combo.set_sensitive (true);
output_device_combo.set_sensitive (true);
}
}

View file

@ -12,15 +12,17 @@
#include <gtkmm/table.h>
#include <gtkmm/expander.h>
#include <gtkmm/box.h>
#include <gtkmm/buttonbox.h>
#include <gtkmm/button.h>
#include "ardour_dialog.h"
class EngineDialog : public ArdourDialog {
class EngineControl : public Gtk::VBox {
public:
EngineDialog ();
~EngineDialog ();
EngineControl ();
~EngineControl ();
static bool engine_running ();
int start_engine ();
int stop_engine ();
private:
Gtk::Adjustment periods_adjustment;
@ -33,6 +35,7 @@ class EngineDialog : public ArdourDialog {
Gtk::SpinButton output_channels;
Gtk::SpinButton input_latency;
Gtk::SpinButton output_latency;
Gtk::Label latency_label;
Gtk::CheckButton realtime_button;
Gtk::CheckButton no_memory_lock_button;
@ -43,6 +46,10 @@ class EngineDialog : public ArdourDialog {
Gtk::CheckButton hw_monitor_button;
Gtk::CheckButton hw_meter_button;
Gtk::CheckButton verbose_output_button;
Gtk::Button start_button;
Gtk::Button stop_button;
Gtk::HButtonBox button_box;
Gtk::ComboBoxText sample_rate_combo;
Gtk::ComboBoxText period_size_combo;
@ -63,15 +70,10 @@ class EngineDialog : public ArdourDialog {
Gtk::Notebook notebook;
Gtk::Button* start_button;
Gtk::Button* stop_button;
void realtime_changed ();
void driver_changed ();
void build_command_line (std::vector<std::string>&);
void start_engine ();
void stop_engine ();
Glib::Pid engine_pid;
int engine_stdin;
int engine_stdout;
@ -88,6 +90,10 @@ class EngineDialog : public ArdourDialog {
std::vector<std::string> enumerate_ffado_devices ();
std::vector<std::string> enumerate_dummy_devices ();
#endif
void redisplay_latency ();
uint32_t get_rate();
void audio_mode_changed ();
};
#endif /* __gtk2_ardour_engine_dialog_h__ */

View file

@ -46,7 +46,7 @@
#include "i18n.h"
using namespace Gtk;
using namespace GTK_ARDOUR;
using namespace ARDOUR_COMMAND_LINE;
using namespace ARDOUR;
using namespace PBD;
using namespace sigc;
@ -67,95 +67,6 @@ show_ui_callback (void *arg)
return FALSE;
}
void
gui_jack_error ()
{
MessageDialog win (_("Ardour could not connect to JACK."),
false,
Gtk::MESSAGE_INFO,
(Gtk::ButtonsType)(Gtk::BUTTONS_NONE));
win.set_secondary_text(_("There are several possible reasons:\n\
\n\
1) JACK is not running.\n\
2) JACK is running as another user, perhaps root.\n\
3) There is already another client called \"ardour\".\n\
\n\
Please consider the possibilities, and perhaps (re)start JACK."));
win.add_button (Stock::QUIT, RESPONSE_CLOSE);
win.set_default_response (RESPONSE_CLOSE);
win.show_all ();
win.set_position (Gtk::WIN_POS_CENTER);
if (!no_splash) {
ui->hide_splash ();
}
/* we just don't care about the result, but we want to block */
win.run ();
}
static bool
maybe_load_session ()
{
/* If no session name is given: we're not loading a session yet, nor creating a new one */
if (!session_name.length()) {
ui->hide_splash ();
if (!Config->get_no_new_session_dialog()) {
if (!ui->new_session ()) {
return false;
}
}
return true;
}
/* Load session or start the new session dialog */
string name, path;
bool isnew;
if (Session::find_session (session_name, path, name, isnew)) {
error << string_compose(_("could not load command line session \"%1\""), session_name) << endmsg;
return false;
}
if (!new_session) {
/* Loading a session, but the session doesn't exist */
if (isnew) {
error << string_compose (_("\n\nNo session named \"%1\" exists.\n"
"To create it from the command line, start ardour as \"ardour --new %1"), path)
<< endmsg;
return false;
}
if (ui->load_session (path, name)) {
/* it failed */
return false;
}
} else {
/* TODO: This bit of code doesn't work properly yet
Glib::signal_idle().connect (bind (mem_fun (*ui, &ARDOUR_UI::cmdline_new_session), path));
ui->set_will_create_new_session_automatically (true);
*/
/* Show the NSD */
ui->hide_splash ();
if (!Config->get_no_new_session_dialog()) {
if (!ui->new_session ()) {
return false;
}
}
}
return true;
}
#ifdef VST_SUPPORT
/* this is called from the entry point of a wine-compiled
executable that is linked against gtk2_ardour built
@ -168,7 +79,6 @@ int main (int argc, char *argv[])
#endif
{
ARDOUR::AudioEngine *engine;
vector<Glib::ustring> null_file_list;
Glib::thread_init();
@ -235,10 +145,6 @@ int main (int argc, char *argv[])
exit (1);
}
if (!keybindings_path.empty()) {
ui->set_keybindings_path (keybindings_path);
}
if (!no_splash) {
ui->show_splash ();
if (session_name.length()) {
@ -246,45 +152,15 @@ int main (int argc, char *argv[])
}
}
try {
ARDOUR::init (use_vst, try_hw_optimization);
setup_gtk_ardour_enums ();
Config->set_current_owner (ConfigVariableBase::Interface);
ui->setup_profile ();
try {
engine = new ARDOUR::AudioEngine (jack_client_name);
} catch (AudioEngine::NoBackendAvailable& err) {
gui_jack_error ();
error << string_compose (_("Could not connect to JACK server as \"%1\""), jack_client_name) << endmsg;
return -1;
}
ui->set_engine (*engine);
} catch (failed_constructor& err) {
error << _("could not initialize Ardour.") << endmsg;
return -1;
}
ui->start_engine ();
if (maybe_load_session ()) {
ui->run (text_receiver);
ui = 0;
if (!keybindings_path.empty()) {
ui->set_keybindings_path (keybindings_path);
}
delete engine;
ui->run (text_receiver);
ui = 0;
ARDOUR::cleanup ();
if (ui) {
ui->kill();
}
pthread_cancel_all ();
exit (0);
return 0;
}
#ifdef VST_SUPPORT

View file

@ -22,6 +22,7 @@
#include <ardour/recent_sessions.h>
#include <ardour/session.h>
#include <ardour/profile.h>
#include <gtkmm/entry.h>
#include <gtkmm/filechooserbutton.h>
@ -41,9 +42,10 @@ using namespace Gtkmm2ext;
NewSessionDialog::NewSessionDialog()
: ArdourDialog ("session control")
{
in_destructor = false;
session_name_label = Gtk::manage(new class Gtk::Label(_("Name :")));
m_name = Gtk::manage(new class Gtk::Entry());
m_name->set_text(GTK_ARDOUR::session_name);
m_name->set_text(ARDOUR_COMMAND_LINE::session_name);
chan_count_label_1 = Gtk::manage(new class Gtk::Label(_("channels")));
chan_count_label_2 = Gtk::manage(new class Gtk::Label(_("channels")));
@ -305,7 +307,10 @@ NewSessionDialog::NewSessionDialog()
new_session_table->attach(*m_folder, 1, 2, 1, 2, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*session_template_label, 0, 1, 2, 3, Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*m_template, 1, 2, 2, 3, Gtk::EXPAND|Gtk::FILL, Gtk::FILL, 0, 0);
new_session_table->attach(*advanced_expander, 0, 2, 3, 4, Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 6);
if (!ARDOUR::Profile->get_sae()) {
new_session_table->attach(*advanced_expander, 0, 2, 3, 4, Gtk::FILL, Gtk::EXPAND|Gtk::FILL, 0, 6);
}
open_session_hbox->pack_start(*open_session_file_label, false, false, 12);
open_session_hbox->pack_start(*m_open_filechooser, true, true, 12);
@ -333,12 +338,14 @@ NewSessionDialog::NewSessionDialog()
recent_frame->set_label_widget(*recent_sesion_label);
open_session_vbox->pack_start(*recent_frame, Gtk::PACK_EXPAND_WIDGET, 0);
open_session_vbox->pack_start(*open_session_hbox, Gtk::PACK_SHRINK, 12);
m_notebook->set_flags(Gtk::CAN_FOCUS);
m_notebook->set_scrollable(true);
m_notebook->append_page(*new_session_table, _("New Session"));
m_notebook->pages().back().set_tab_label_packing(false, true, Gtk::PACK_START);
m_notebook->append_page(*open_session_vbox, _("Open Session"));
m_notebook->pages().back().set_tab_label_packing(false, true, Gtk::PACK_START);
get_vbox()->set_homogeneous(false);
get_vbox()->set_spacing(0);
get_vbox()->pack_start(*m_notebook, Gtk::PACK_SHRINK, 0);
@ -355,7 +362,7 @@ NewSessionDialog::NewSessionDialog()
// add_button(Gtk::Stock::HELP, Gtk::RESPONSE_HELP);
add_button(Gtk::Stock::QUIT, Gtk::RESPONSE_CANCEL);
add_button(Gtk::Stock::CLEAR, Gtk::RESPONSE_NONE);
m_okbutton = add_button(Gtk::Stock::NEW, Gtk::RESPONSE_OK);
m_okbutton = add_button(Gtk::Stock::OPEN, Gtk::RESPONSE_OK);
recent_model = Gtk::TreeStore::create (recent_columns);
m_treeview->set_model (recent_model);
@ -411,7 +418,7 @@ NewSessionDialog::NewSessionDialog()
set_default_response (Gtk::RESPONSE_OK);
if (!GTK_ARDOUR::session_name.length()) {
if (!ARDOUR_COMMAND_LINE::session_name.length()) {
set_response_sensitive (Gtk::RESPONSE_OK, false);
set_response_sensitive (Gtk::RESPONSE_NONE, false);
} else {
@ -436,12 +443,36 @@ NewSessionDialog::NewSessionDialog()
m_name->grab_focus();
}
NewSessionDialog::~NewSessionDialog()
{
in_destructor = true;
}
void
NewSessionDialog::set_have_engine (bool yn)
{
if (yn) {
cerr << "removing audio page\n";
m_notebook->remove_page (engine_control);
} else {
cerr << "appending audio page\n";
m_notebook->append_page (engine_control, _("Audio Setup"));
m_notebook->show_all_children();
}
}
void
NewSessionDialog::set_session_name(const Glib::ustring& name)
{
m_name->set_text(name);
}
void
NewSessionDialog::set_session_folder(const Glib::ustring& dir)
{
// XXX DO SOMETHING
}
std::string
NewSessionDialog::session_name() const
{
@ -605,11 +636,13 @@ NewSessionDialog::on_new_session_name_entry_changed ()
void
NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
{
if (in_destructor) {
return;
}
if (pagenum == 1) {
on_new_session_page = false;
m_okbutton->set_label(_("Open"));
set_response_sensitive (Gtk::RESPONSE_NONE, false);
// m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::OPEN, Gtk::ICON_SIZE_BUTTON)));
if (m_treeview->get_selection()->count_selected_rows() == 0) {
set_response_sensitive (Gtk::RESPONSE_OK, false);
} else {
@ -620,8 +653,6 @@ NewSessionDialog::notebook_page_changed (GtkNotebookPage* np, uint pagenum)
if (m_name->get_text() != "") {
set_response_sensitive (Gtk::RESPONSE_NONE, true);
}
m_okbutton->set_label(_("New"));
// m_okbutton->set_image (*(new Gtk::Image (Gtk::Stock::NEW, Gtk::ICON_SIZE_BUTTON)));
if (m_name->get_text() == "") {
set_response_sensitive (Gtk::RESPONSE_OK, false);
} else {

View file

@ -38,6 +38,7 @@
#include <glibmm/refptr.h>
#include "ardour_dialog.h"
#include "engine_dialog.h"
namespace Gtk {
class Entry;
@ -54,8 +55,10 @@ class NewSessionDialog : public ArdourDialog
public:
NewSessionDialog();
~NewSessionDialog ();
void set_session_name(const Glib::ustring& name);
void set_session_folder(const Glib::ustring& folder);
std::string session_name() const;
std::string session_folder() const;
@ -88,11 +91,14 @@ public:
// reset everything to default values.
void reset();
EngineControl engine_control;
void set_have_engine (bool yn);
protected:
void reset_name();
void reset_template();
Gtk::Label * session_name_label;
Gtk::Label * session_location_label;
Gtk::Label * session_template_label;
@ -170,6 +176,7 @@ protected:
RecentSessionModelColumns recent_columns;
Glib::RefPtr<Gtk::TreeStore> recent_model;
bool in_destructor;
void recent_session_selection_changed ();
void nsd_redisplay_recent_sessions();
@ -193,8 +200,7 @@ protected:
void monitor_bus_button_clicked ();
bool on_new_session_page;
bool have_engine;
};
#endif // NEW_SESSION_DIALOG_H

View file

@ -27,19 +27,19 @@
using namespace std;
string GTK_ARDOUR::session_name = "";
string GTK_ARDOUR::jack_client_name = "ardour";
bool GTK_ARDOUR::show_key_actions = false;
bool GTK_ARDOUR::no_splash = true;
bool GTK_ARDOUR::just_version = false;
bool GTK_ARDOUR::use_vst = true;
bool GTK_ARDOUR::new_session = false;
char* GTK_ARDOUR::curvetest_file = 0;
bool GTK_ARDOUR::try_hw_optimization = true;
string GTK_ARDOUR::keybindings_path = ""; /* empty means use builtin default */
string GTK_ARDOUR::menus_file = "ardour.menus";
Glib::ustring ARDOUR_COMMAND_LINE::session_name = "";
string ARDOUR_COMMAND_LINE::jack_client_name = "ardour";
bool ARDOUR_COMMAND_LINE::show_key_actions = false;
bool ARDOUR_COMMAND_LINE::no_splash = true;
bool ARDOUR_COMMAND_LINE::just_version = false;
bool ARDOUR_COMMAND_LINE::use_vst = true;
bool ARDOUR_COMMAND_LINE::new_session = false;
char* ARDOUR_COMMAND_LINE::curvetest_file = 0;
bool ARDOUR_COMMAND_LINE::try_hw_optimization = true;
Glib::ustring ARDOUR_COMMAND_LINE::keybindings_path = ""; /* empty means use builtin default */
Glib::ustring ARDOUR_COMMAND_LINE::menus_file = "ardour.menus";
using namespace GTK_ARDOUR;
using namespace ARDOUR_COMMAND_LINE;
int
print_help (const char *execname)
@ -66,11 +66,15 @@ print_help (const char *execname)
}
int
GTK_ARDOUR::parse_opts (int argc, char *argv[])
ARDOUR_COMMAND_LINE::parse_opts (int argc, char *argv[])
{
const char *optstring = "U:hSbvVnOc:C:m:N:k:";
const char *execname = strrchr (argv[0], '/');
if (getenv ("ARDOUR_SAE")) {
menus_file = "ardour-sae.menus";
}
if (execname == 0) {
execname = argv[0];
} else {

View file

@ -21,23 +21,22 @@
#define __ardour_opts_h__
#include <string>
#include <glibmm/ustring.h>
using std::string;
namespace ARDOUR_COMMAND_LINE {
namespace GTK_ARDOUR {
extern string session_name;
extern Glib::ustring session_name;
extern bool show_key_actions;
extern bool no_splash;
extern bool just_version;
extern string jack_client_name;
extern std::string jack_client_name;
extern bool use_vst;
extern bool new_session;
extern char* curvetest_file;
extern bool try_hw_optimization;
extern bool use_gtk_theme;
extern string keybindings_path;
extern string menus_file;
extern Glib::ustring keybindings_path;
extern Glib::ustring menus_file;
extern int32_t parse_opts (int argc, char *argv[]);

View file

@ -29,6 +29,7 @@ class RuntimeProfile {
public:
enum Element {
SmallScreen,
SAE,
LastElement
};
@ -38,6 +39,9 @@ class RuntimeProfile {
void set_small_screen() { bits[SmallScreen] = true; }
bool get_small_screen() const { return bits[SmallScreen]; }
void set_sae () { bits[SAE] = true; }
bool get_sae () const { return bits[SAE]; }
private:
boost::dynamic_bitset<uint64_t> bits;

View file

@ -1034,10 +1034,6 @@ AudioEngine::connect_to_jack (string client_name)
return -1;
}
if (status & JackServerStarted) {
info << _("JACK server started") << endmsg;
}
if (status & JackNameNotUnique) {
jack_client_name = jack_get_client_name (_jack);
}