ardour/gtk2_ardour/ardour_ui_ed.cc
Paul Davis c38fdbc64c "finalmunge" patch from nick, plus work on editor region list and actions infrastructure from me
git-svn-id: svn://localhost/trunk/ardour2@52 d708f5d6-7413-0410-9779-e7cbd77b26cf
2005-10-09 05:03:29 +00:00

316 lines
11 KiB
C++

/*
Copyright (C) 20002-2004 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$
*/
/* This file contains any ARDOUR_UI methods that require knowledge of
the editor, and exists so that no compilation dependency exists
between the main ARDOUR_UI modules and the PublicEditor class. This
is to cut down on the nasty compile times for both these classes.
*/
#include <pbd/pathscanner.h>
#include "ardour_ui.h"
#include "public_editor.h"
#include "audio_clock.h"
#include "editor.h"
#include <ardour/session.h>
#include "i18n.h"
using namespace ARDOUR;
using namespace Gtk;
using namespace Gtkmm2ext;
int
ARDOUR_UI::create_editor ()
{
try {
editor = new Editor (*engine);
}
catch (failed_constructor& err) {
return -1;
}
editor->DisplayControlChanged.connect (mem_fun(*this, &ARDOUR_UI::editor_display_control_changed));
return 0;
}
void
ARDOUR_UI::build_menu_bar ()
{
using namespace Menu_Helpers;
menu_bar->set_name ("MainMenuBar");
MenuList& items = menu_bar->items();
/* file menu */
Menu *session_menu = manage (new Menu);
MenuList& session_items = session_menu->items();
session_menu->set_name ("ArdourContextMenu");
session_items.push_back (MenuElem (_("New"), bind (mem_fun(*this, &ARDOUR_UI::new_session), false, string ())));
session_items.push_back (MenuElem (_("Open"), mem_fun(*this, &ARDOUR_UI::open_session)));
session_items.push_back (MenuElem (_("Recent"), mem_fun(*this, &ARDOUR_UI::open_recent_session)));
session_items.push_back (MenuElem (_("Close"), mem_fun(*this, &ARDOUR_UI::close_session)));
close_item = &session_items.back();
close_item->set_sensitive (false);
session_items.push_back (SeparatorElem());
session_items.push_back (MenuElem (_("Add Track/Bus"), mem_fun(*this, &ARDOUR_UI::add_route)));
add_track_item = &session_items.back ();
add_track_item->set_sensitive (false);
session_items.push_back (SeparatorElem());
/* <CMT Additions> */
PathScanner scanner;
vector<string*>* results = scanner (getenv ("PATH"), "AniComp", false, false);
if (results && !results->empty()) {
Menu* image_compositor_menu = manage(new Menu());
MenuList& image_compositor_items = image_compositor_menu->items();
image_compositor_menu->set_name ("ArdourContextMenu");
image_compositor_items.push_back(MenuElem (_("Connect"), (mem_fun (editor, &PublicEditor::connect_to_image_compositor)))) ;
session_items.push_back(MenuElem (_("Image Compositor"), *image_compositor_menu)) ;
image_compositor_item = &session_items.back() ;
image_compositor_item->set_sensitive(false) ;
session_items.push_back (SeparatorElem());
} else {
image_compositor_item = 0;
}
if (results) {
delete results;
}
/* </CMT Additions> */
session_items.push_back (MenuElem (_("Save"), bind (mem_fun(*this, &ARDOUR_UI::save_state), string(""))));
save_item = &session_items.back();
save_item->set_sensitive (false);
session_items.push_back (MenuElem (_("Snapshot"), mem_fun(*this, &ARDOUR_UI::snapshot_session)));
snapshot_item = &session_items.back();
snapshot_item->set_sensitive (false);
/*
session_items.push_back (MenuElem (_("Save as...")));
save_as_item = session_items.back();
save_as_item->set_sensitive (false);
*/
session_items.push_back (MenuElem (_("Save Template..."), mem_fun(*this, &ARDOUR_UI::save_template)));
save_template_item = &session_items.back();
save_template_item->set_sensitive (false);
Menu *export_menu = manage (new Menu);
MenuList& export_items = export_menu->items();
export_menu->set_name ("ArdourContextMenu");
export_items.push_back (MenuElem (_("Export session to audiofile..."), mem_fun (*editor, &PublicEditor::export_session)));
export_items.push_back (MenuElem (_("Export range to audiofile..."), mem_fun (*editor, &PublicEditor::export_selection)));
// export_items.back()->set_sensitive (false);
session_items.push_back (MenuElem (_("Export"), *export_menu));
export_item = &session_items.back();
export_item->set_sensitive (false);
session_items.push_back (SeparatorElem());
Menu *cleanup_menu = manage (new Menu);
MenuList& cleanup_items = cleanup_menu->items();
cleanup_menu->set_name ("ArdourContextMenu");
cleanup_items.push_back (MenuElem (_("Cleanup unused sources"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::cleanup)));
cleanup_items.push_back (MenuElem (_("Flush wastebasket"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::flush_trash)));
session_items.push_back (MenuElem (_("Cleanup"), *cleanup_menu));
cleanup_item = &session_items.back ();
cleanup_item->set_sensitive (false);
session_items.push_back (SeparatorElem());
session_items.push_back (MenuElem (_("Quit"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::finish)));
items.push_back (MenuElem (_("Session"), *session_menu));
/* edit menu; the editor is responsible for the contents */
Menu *edit_menu = manage (new Menu);
editor->set_edit_menu (*edit_menu);
items.push_back (MenuElem (_("Edit"), *edit_menu));
edit_menu->set_name ("ArdourContextMenu");
/* JACK menu for controlling ... JACK */
Menu* jack_menu = manage (new Menu);
MenuList& jack_items = jack_menu->items();
jack_menu->set_name ("ArdourContextMenu");
jack_items.push_back (MenuElem (_("Disconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::disconnect_from_jack)));
jack_disconnect_item = &jack_items.back();
jack_disconnect_item->set_sensitive (false);
jack_items.push_back (MenuElem (_("Reconnect"), mem_fun (*(ARDOUR_UI::instance()), &ARDOUR_UI::reconnect_to_jack)));
jack_reconnect_item = &jack_items.back();
jack_reconnect_item->set_sensitive (false);
jack_bufsize_menu = manage (new Menu);
MenuList& jack_bufsize_items = jack_bufsize_menu->items();
jack_bufsize_menu->set_name ("ArdourContextMenu");
jack_bufsize_items.push_back (MenuElem (X_("32"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 32)));
jack_bufsize_items.push_back (MenuElem (X_("64"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 64)));
jack_bufsize_items.push_back (MenuElem (X_("128"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 128)));
jack_bufsize_items.push_back (MenuElem (X_("256"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 256)));
jack_bufsize_items.push_back (MenuElem (X_("512"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 512)));
jack_bufsize_items.push_back (MenuElem (X_("1024"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 1024)));
jack_bufsize_items.push_back (MenuElem (X_("2048"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 2048)));
jack_bufsize_items.push_back (MenuElem (X_("4096"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 4096)));
jack_bufsize_items.push_back (MenuElem (X_("8192"), bind (mem_fun(*this, &ARDOUR_UI::set_jack_buffer_size), (jack_nframes_t) 8192)));
jack_items.push_back (MenuElem (_("Latency"), *jack_bufsize_menu));
jack_bufsize_menu->set_sensitive (false);
items.push_back (MenuElem (_("JACK"), *jack_menu));
/* windows menu */
Menu *window_menu = new Menu();
MenuList& window_items = window_menu->items();
window_menu->set_name ("ArdourContextMenu");
window_items.push_back (TearoffMenuElem());
window_items.push_back (MenuElem (_("Editor"), mem_fun(*this, &ARDOUR_UI::goto_editor_window)));
window_items.push_back (MenuElem (_("Mixer"), mem_fun(*this, &ARDOUR_UI::goto_mixer_window)));
window_items.push_back (SeparatorElem());
window_items.push_back
(CheckMenuElem
(_("Options Editor"),
mem_fun(*this, &ARDOUR_UI::toggle_options_window)));
options_window_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
// options_window_check->set_sensitive (false);
window_items.push_back
(CheckMenuElem
(_("Audio Library"),
mem_fun(*this, &ARDOUR_UI::toggle_sfdb_window)));
sfdb_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
window_items.push_back
(CheckMenuElem
(_("Track/Bus Inspector"),
mem_fun(*this, &ARDOUR_UI::toggle_route_params_window)));
route_params_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
route_params_check->set_sensitive (false);
window_items.push_back
(CheckMenuElem
(_("Connections"),
mem_fun(*this, &ARDOUR_UI::toggle_connection_editor)));
connection_editor_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
connection_editor_check->set_sensitive (false);
#if 0
window_items.push_back
(CheckMenuElem
(_("Meter Bridge"),
mem_fun(*this, &ARDOUR_UI::toggle_meter_bridge_window)));
meter_bridge_dialog_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
meter_bridge_dialog_check->set_sensitive (false);
#endif
window_items.push_back
(CheckMenuElem
(_("Locations"),
mem_fun(*this, &ARDOUR_UI::toggle_location_window)));
locations_dialog_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
locations_dialog_check->set_sensitive (false);
window_items.push_back
(CheckMenuElem
(_("Big Clock"),
mem_fun(*this, &ARDOUR_UI::toggle_big_clock_window)));
big_clock_check = dynamic_cast<CheckMenuItem*>(&window_items.back());
window_items.push_back (SeparatorElem());
window_items.push_back (MenuElem (_("About"), mem_fun(*this, &ARDOUR_UI::show_splash)));
items.push_back (MenuElem (_("Windows"), *window_menu));
wall_clock_box.add (wall_clock_label);
wall_clock_box.set_name ("WallClock");
wall_clock_label.set_name ("WallClock");
disk_space_box.add (disk_space_label);
disk_space_box.set_name ("WallClock");
disk_space_label.set_name ("WallClock");
cpu_load_box.add (cpu_load_label);
cpu_load_box.set_name ("CPULoad");
cpu_load_label.set_name ("CPULoad");
buffer_load_box.add (buffer_load_label);
buffer_load_box.set_name ("BufferLoad");
buffer_load_label.set_name ("BufferLoad");
// disk_rate_box.add (disk_rate_label);
// disk_rate_box.set_name ("DiskRate");
// disk_rate_label.set_name ("DiskRate");
sample_rate_box.add (sample_rate_label);
sample_rate_box.set_name ("SampleRate");
sample_rate_label.set_name ("SampleRate");
menu_hbox.pack_start (*menu_bar, true, true);
menu_hbox.pack_end (wall_clock_box, false, false, 10);
menu_hbox.pack_end (disk_space_box, false, false, 10);
menu_hbox.pack_end (cpu_load_box, false, false, 10);
// menu_hbox.pack_end (disk_rate_box, false, false, 10);
menu_hbox.pack_end (buffer_load_box, false, false, 10);
menu_hbox.pack_end (sample_rate_box, false, false, 10);
menu_bar_base.set_name ("MainMenuBar");
menu_bar_base.add (menu_hbox);
}
void
ARDOUR_UI::editor_display_control_changed (Editing::DisplayControl c)
{
switch (c) {
case Editing::FollowPlayhead:
follow_button.set_active (editor->follow_playhead ());
break;
default:
break;
}
}