miscellaneous stuff, SVN IS TEMPORARILY BROKEN. FIX WITHIN 18 HOURS

git-svn-id: svn://localhost/ardour2/trunk@1192 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
Paul Davis
2006-12-06 19:00:57 +00:00
parent 79e8659a1b
commit 4566992139
16 changed files with 221 additions and 41 deletions

View File

@@ -59,6 +59,8 @@ mantis and some not, fairly continuously for several months. He then
moved on to write SSE assembler routines to handle the CPU-hungry
metering and mixing routines.
Brian Ahr contributed many small fixes for ardour 2.0.
Smaller (but not necessarily minor) patches were received from the
following people:
@@ -73,3 +75,4 @@ following people:
Rob Holland
Joshua Leachman
Per Sigmond
Nimal Ratnayake

View File

@@ -389,6 +389,57 @@ if env['VST']:
print "OK, VST support will be enabled"
#######################
# Dependency Checking #
#######################
deps = \
{
'glib-2.0' : '2.10.1',
'gthread-2.0' : '2.10.1',
'gtk+-2.0' : '2.8.1',
'libxml-2.0' : '2.6.0',
'samplerate' : '0.1.2',
'raptor' : '1.4.8',
'lrdf' : '0.4.0',
'jack' : '0.101.1',
'libgnomecanvas-2.0' : '2.0'
}
def DependenciesRequiredMessage():
print 'You do not have the necessary dependencies required to build ardour'
print 'Please consult http://ardour.org/building for more information'
def CheckPKGConfig(context, version):
context.Message( 'Checking for pkg-config version >= %s... ' %version )
ret = context.TryAction('pkg-config --atleast-pkgconfig-version=%s' % version)[0]
context.Result( ret )
return ret
def CheckPKGVersion(context, name, version):
context.Message( 'Checking for %s... ' % name )
ret = context.TryAction('pkg-config --atleast-version=%s %s' %(version,name) )[0]
context.Result( ret )
return ret
conf = Configure(env, custom_tests = { 'CheckPKGConfig' : CheckPKGConfig,
'CheckPKGVersion' : CheckPKGVersion })
# I think a more recent version is needed on win32
min_pkg_config_version = '0.8.0'
if not conf.CheckPKGConfig(min_pkg_config_version):
print 'pkg-config >= %s not found.' % min_pkg_config_version
Exit(1)
for pkg, version in deps.iteritems():
if not conf.CheckPKGVersion( pkg, version ):
print '%s >= %s not found.' %(pkg, version)
DependenciesRequiredMessage()
Exit(1)
env = conf.Finish()
# ----------------------------------------------------------------------
# Construction environment setup
# ----------------------------------------------------------------------
@@ -540,6 +591,24 @@ else:
env = conf.Finish()
if env['SYSLIBS']:
syslibdeps = \
{
'sigc++-2.0' : '2.0',
'gtkmm-2.4' : '2.8',
'libgnomecanvasmm-2.6' : '2.12.0'
}
conf = Configure(env, custom_tests = { 'CheckPKGConfig' : CheckPKGConfig,
'CheckPKGVersion' : CheckPKGVersion })
for pkg, version in syslibdeps.iteritems():
if not conf.CheckPKGVersion( pkg, version ):
print '%s >= %s not found.' %(pkg, version)
DependenciesRequiredMessage()
Exit(1)
env = conf.Finish()
libraries['sigc2'] = LibraryInfo()
libraries['sigc2'].ParseConfig('pkg-config --cflags --libs sigc++-2.0')

View File

@@ -145,6 +145,8 @@ static const char* authors[] = {
N_("Stefan Kersten"),
N_("Christopher George"),
N_("Robert Jordens"),
N_("Brian Ahr"),
N_("Nimal Ratnayake"),
0
};

View File

@@ -444,6 +444,7 @@ ARDOUR_UI::ask_about_saving_session (const string & what)
save_the_session = 0;
window.set_keep_above (true);
window.present ();
ResponseType r = (ResponseType) window.run();

View File

@@ -685,6 +685,27 @@ Editor::Editor (AudioEngine& eng)
fade_context_menu.set_name ("ArdourContextMenu");
/* icons, titles, WM stuff */
list<Glib::RefPtr<Gdk::Pixbuf> > window_icons;
Glib::RefPtr<Gdk::Pixbuf> icon;
if ((icon = ::get_icon ("ardour_icon_16px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_22px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_32px")) != 0) {
window_icons.push_back (icon);
}
if ((icon = ::get_icon ("ardour_icon_48px")) != 0) {
window_icons.push_back (icon);
}
if (!window_icons.empty()) {
set_icon_list (window_icons);
set_default_icon_list (window_icons);
}
set_title (_("ardour: editor"));
set_wmclass (_("ardour_editor"), "Ardour");
@@ -1860,6 +1881,7 @@ Editor::add_selection_context_items (Menu_Helpers::MenuList& edit_items)
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Select all in range"), mem_fun(*this, &Editor::select_all_selectables_using_time_selection)));
items.push_back (SeparatorElem());
items.push_back (MenuElem (_("Add Range Markers"), mem_fun (*this, &Editor::add_location_from_selection)));
items.push_back (MenuElem (_("Set range to loop range"), mem_fun(*this, &Editor::set_selection_from_loop)));
items.push_back (MenuElem (_("Set range to punch range"), mem_fun(*this, &Editor::set_selection_from_punch)));
items.push_back (SeparatorElem());

View File

@@ -1208,7 +1208,7 @@ Editor::add_location_from_selection ()
nframes_t start = selection->time[clicked_selection].start;
nframes_t end = selection->time[clicked_selection].end;
Location *location = new Location (start, end, "selection");
Location *location = new Location (start, end, "selection", Location::IsRangeMarker);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
@@ -1242,7 +1242,7 @@ Editor::add_location_from_audio_region ()
RegionView* rv = *(selection->regions.begin());
boost::shared_ptr<Region> region = rv->region();
Location *location = new Location (region->position(), region->last_frame(), region->name());
Location *location = new Location (region->position(), region->last_frame(), region->name(), Location::IsRangeMarker);
session->begin_reversible_command (_("add marker"));
XMLNode &before = session->locations()->get_state();
session->locations()->add (location, true);

View File

@@ -417,7 +417,7 @@ IOSelector::display_ports ()
really_short_name = port->short_name();
really_short_name = really_short_name.substr (really_short_name.find ('/') + 1);
tview = manage (new TreeView());
RefPtr<ListStore> port_model = ListStore::create (port_display_columns);
@@ -437,7 +437,6 @@ IOSelector::display_ports ()
/* now fill the clist with the current connections */
const char **connections = port->get_connections ();
if (connections) {
@@ -446,7 +445,7 @@ IOSelector::display_ports ()
row[port_display_columns.displayed_name] = connections[c];
row[port_display_columns.full_name] = connections[c];
}
}
}
if (for_input) {

View File

@@ -19,6 +19,7 @@
*/
#include <cmath>
#include <iostream>
#include <sigc++/bind.h>
@@ -285,7 +286,7 @@ RedirectBox::redirect_button_press_event (GdkEventButton *ev)
if (redirect && Keyboard::is_delete_event (ev)) {
Glib::signal_idle().connect (bind (mem_fun(*this, &RedirectBox::idle_delete_redirect), redirect));
Glib::signal_idle().connect (bind (mem_fun(*this, &RedirectBox::idle_delete_redirect), boost::weak_ptr<Redirect>(redirect)));
ret = true;
} else if (redirect && (Keyboard::is_edit_event (ev) || (ev->button == 1 && ev->type == GDK_2BUTTON_PRESS && ev->state == 0))) {
@@ -362,7 +363,7 @@ RedirectBox::insert_plugin_chosen (boost::shared_ptr<Plugin> plugin)
boost::shared_ptr<Redirect> redirect (new PluginInsert (_session, plugin, _placement));
redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active));
redirect->active_changed.connect (bind (mem_fun (*this, &RedirectBox::show_redirect_active), boost::weak_ptr<Redirect>(redirect), (void*) 0));
uint32_t err_streams;
@@ -440,7 +441,7 @@ void
RedirectBox::choose_insert ()
{
boost::shared_ptr<Redirect> redirect (new PortInsert (_session, _placement));
redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active));
redirect->active_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_active), boost::weak_ptr<Redirect>(redirect)));
_route->add_redirect (redirect, this);
}
@@ -456,15 +457,24 @@ RedirectBox::choose_send ()
IOSelectorWindow *ios = new IOSelectorWindow (_session, send, false, true);
ios->show_all ();
ios->selector().Finished.connect (bind (mem_fun(*this, &RedirectBox::send_io_finished), boost::static_pointer_cast<Redirect>(send), ios));
boost::shared_ptr<Redirect> r = boost::static_pointer_cast<Redirect>(send);
ios->selector().Finished.connect (bind (mem_fun(*this, &RedirectBox::send_io_finished), boost::weak_ptr<Redirect>(r), ios));
}
void
RedirectBox::send_io_finished (IOSelector::Result r, boost::shared_ptr<Redirect> redirect, IOSelectorWindow* ios)
RedirectBox::send_io_finished (IOSelector::Result r, boost::weak_ptr<Redirect> weak_redirect, IOSelectorWindow* ios)
{
boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
if (!redirect) {
return;
}
switch (r) {
case IOSelector::Cancelled:
// delete redirect; XXX SHAREDPTR HOW TO DESTROY THE REDIRECT ? do we even need to think about it?
// redirect will go away when all shared_ptrs to it vanish
break;
case IOSelector::Accepted:
@@ -481,9 +491,10 @@ RedirectBox::redisplay_redirects (void *src)
ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::redisplay_redirects), src));
if (no_redirect_redisplay) {
cerr << "redisplay redirects skipped, no redisplay set\n";
return;
}
ignore_delete = true;
model->clear ();
ignore_delete = false;
@@ -514,16 +525,22 @@ RedirectBox::add_redirect_to_display (boost::shared_ptr<Redirect> redirect)
Gtk::TreeModel::Row row = *(model->append());
row[columns.text] = redirect_name (redirect);
row[columns.redirect] = redirect;
show_redirect_active (redirect.get(), this);
redirect_active_connections.push_back (redirect->active_changed.connect (mem_fun(*this, &RedirectBox::show_redirect_active)));
redirect_name_connections.push_back (redirect->name_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_name), redirect)));
show_redirect_active (redirect, this);
redirect_active_connections.push_back (redirect->active_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_active), boost::weak_ptr<Redirect>(redirect))));
redirect_name_connections.push_back (redirect->name_changed.connect (bind (mem_fun(*this, &RedirectBox::show_redirect_name), boost::weak_ptr<Redirect>(redirect))));
}
string
RedirectBox::redirect_name (boost::shared_ptr<Redirect> redirect)
RedirectBox::redirect_name (boost::weak_ptr<Redirect> weak_redirect)
{
boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
if (!redirect) {
return string();
}
boost::shared_ptr<Send> send;
string name_display;
@@ -585,16 +602,22 @@ RedirectBox::build_redirect_tooltip (EventBox& box, string start)
}
void
RedirectBox::show_redirect_name (void* src, boost::shared_ptr<Redirect> redirect)
RedirectBox::show_redirect_name (void* src, boost::weak_ptr<Redirect> redirect)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_name), src, redirect));
show_redirect_active (redirect.get(), src);
show_redirect_active (redirect, src);
}
void
RedirectBox::show_redirect_active (Redirect* redirect, void *src)
RedirectBox::show_redirect_active (void *src, boost::weak_ptr<Redirect> weak_redirect)
{
ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_active), redirect, src));
ENSURE_GUI_THREAD(bind (mem_fun(*this, &RedirectBox::show_redirect_active), weak_redirect, src));
boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
if (!redirect) {
return;
}
Gtk::TreeModel::Children children = model->children();
Gtk::TreeModel::Children::iterator iter = children.begin();
@@ -603,7 +626,7 @@ RedirectBox::show_redirect_active (Redirect* redirect, void *src)
boost::shared_ptr<Redirect> r = (*iter)[columns.redirect];
if (r.get() == redirect) {
if (r == redirect) {
(*iter)[columns.text] = redirect_name (r);
if (redirect->active()) {
@@ -698,6 +721,7 @@ RedirectBox::cut_redirects ()
_rr_selection.set (to_be_removed);
no_redirect_redisplay = true;
for (vector<boost::shared_ptr<Redirect> >::iterator i = to_be_removed.begin(); i != to_be_removed.end(); ++i) {
void* gui = (*i)->get_gui ();
@@ -712,6 +736,8 @@ RedirectBox::cut_redirects ()
}
}
no_redirect_redisplay = false;
redisplay_redirects (this);
}
void
@@ -734,12 +760,22 @@ RedirectBox::copy_redirects ()
}
gint
RedirectBox::idle_delete_redirect (boost::shared_ptr<Redirect> redirect)
RedirectBox::idle_delete_redirect (boost::weak_ptr<Redirect> weak_redirect)
{
boost::shared_ptr<Redirect> redirect (weak_redirect.lock());
if (!redirect) {
return false;
}
/* NOT copied to _mixer.selection() */
no_redirect_redisplay = true;
_route->remove_redirect (redirect, this);
return FALSE;
no_redirect_redisplay = false;
redisplay_redirects (this);
return false;
}
void
@@ -783,9 +819,12 @@ RedirectBox::cut_redirect (boost::shared_ptr<Redirect> redirect)
static_cast<Gtk::Widget*>(gui)->hide ();
}
no_redirect_redisplay = true;
if (_route->remove_redirect (redirect, this)) {
_rr_selection.remove (redirect);
}
no_redirect_redisplay = false;
redisplay_redirects (this);
}
void
@@ -979,7 +1018,7 @@ RedirectBox::edit_redirect (boost::shared_ptr<Redirect> redirect)
plugin_insert->set_gui (plugin_ui);
// change window title when route name is changed
_route->name_changed.connect (bind (mem_fun(*this, &RedirectBox::route_name_changed), plugin_ui, plugin_insert));
_route->name_changed.connect (bind (mem_fun(*this, &RedirectBox::route_name_changed), plugin_ui, boost::weak_ptr<PluginInsert> (plugin_insert)));
} else {
@@ -1238,11 +1277,13 @@ RedirectBox::rb_edit ()
}
void
RedirectBox::route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::shared_ptr<PluginInsert> pi)
RedirectBox::route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::weak_ptr<PluginInsert> wpi)
{
ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, pi));
plugin_ui->set_title (generate_redirect_title (pi));
ENSURE_GUI_THREAD(bind (mem_fun (*this, &RedirectBox::route_name_changed), src, plugin_ui, wpi));
boost::shared_ptr<PluginInsert> pi (wpi.lock());
if (pi) {
plugin_ui->set_title (generate_redirect_title (pi));
}
}
string

View File

@@ -97,7 +97,9 @@ class RedirectBox : public Gtk::HBox
PluginSelector & _plugin_selector;
RouteRedirectSelection & _rr_selection;
void route_going_away ();
struct ModelColumns : public Gtk::TreeModel::ColumnRecord {
ModelColumns () {
add (text);
@@ -140,7 +142,7 @@ class RedirectBox : public Gtk::HBox
void show_redirect_menu (gint arg);
void choose_send ();
void send_io_finished (IOSelector::Result, boost::shared_ptr<ARDOUR::Redirect>, IOSelectorWindow*);
void send_io_finished (IOSelector::Result, boost::weak_ptr<ARDOUR::Redirect>, IOSelectorWindow*);
void choose_insert ();
void choose_plugin ();
void insert_plugin_chosen (boost::shared_ptr<ARDOUR::Plugin>);
@@ -152,15 +154,15 @@ class RedirectBox : public Gtk::HBox
void redisplay_redirects (void* src);
void add_redirect_to_display (boost::shared_ptr<ARDOUR::Redirect>);
void row_deleted (const Gtk::TreeModel::Path& path);
void show_redirect_name (void*, boost::shared_ptr<ARDOUR::Redirect>);
void show_redirect_name (void*, boost::weak_ptr<ARDOUR::Redirect>);
/* these are handlers for Redirect signals, so they take Redirect*
directly, rather than shared_ptr<Redirect>
*/
void show_redirect_active (ARDOUR::Redirect*, void *);
void show_redirect_active (boost::weak_ptr<ARDOUR::Redirect>, void *);
string redirect_name (boost::shared_ptr<ARDOUR::Redirect>);
string redirect_name (boost::weak_ptr<ARDOUR::Redirect>);
void remove_redirect_gui (boost::shared_ptr<ARDOUR::Redirect>);
@@ -195,7 +197,7 @@ class RedirectBox : public Gtk::HBox
void hide_redirect_editor (boost::shared_ptr<ARDOUR::Redirect>);
void rename_redirect (boost::shared_ptr<ARDOUR::Redirect>);
gint idle_delete_redirect (boost::shared_ptr<ARDOUR::Redirect>);
gint idle_delete_redirect (boost::weak_ptr<ARDOUR::Redirect>);
void wierd_plugin_dialog (ARDOUR::Plugin& p, uint32_t streams, boost::shared_ptr<ARDOUR::IO> io);
@@ -219,7 +221,7 @@ class RedirectBox : public Gtk::HBox
static void rb_deactivate_all ();
static void rb_edit ();
void route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::shared_ptr<ARDOUR::PluginInsert> pi);
void route_name_changed (void* src, PluginUIWindow* plugin_ui, boost::weak_ptr<ARDOUR::PluginInsert> pi);
std::string generate_redirect_title (boost::shared_ptr<ARDOUR::PluginInsert> pi);
};

View File

@@ -173,6 +173,8 @@ class Route : public IO
void all_redirects_flip();
void all_redirects_active (bool state);
uint32_t count_sends ();
virtual nframes_t update_total_latency();
nframes_t signal_latency() const { return _own_latency; }
virtual void set_latency_delay (nframes_t);

View File

@@ -53,6 +53,8 @@ class Send : public Redirect {
uint32_t pans_required() const { return expected_inputs; }
void expect_inputs (uint32_t);
static uint32_t how_many_sends();
private:
bool _metering;
uint32_t expected_inputs;

View File

@@ -58,6 +58,7 @@ Redirect::Redirect (Session& s, const string& name, Placement p,
Redirect::~Redirect ()
{
notify_callbacks ();
}
boost::shared_ptr<Redirect>

View File

@@ -780,6 +780,21 @@ Route::set_mute (bool yn, void *src)
}
}
uint32_t
Route::count_sends ()
{
uint32_t cnt = 0;
Glib::RWLock::ReaderLock lm (redirect_lock);
for (RedirectList::iterator i = _redirects.begin(); i != _redirects.end(); ++i) {
if (boost::dynamic_pointer_cast<Send> (*i)) {
++cnt;
}
}
return cnt;
}
int
Route::add_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_t* err_streams)
{
@@ -923,6 +938,10 @@ Route::clear_redirects (void *src)
{
Glib::RWLock::WriterLock lm (redirect_lock);
RedirectList::iterator i;
for (i = _redirects.begin(); i != _redirects.end(); ++i) {
(*i)->drop_references ();
}
_redirects.clear ();
}
@@ -1019,6 +1038,8 @@ Route::remove_redirect (boost::shared_ptr<Redirect> redirect, void *src, uint32_
reset_panner ();
}
redirect->drop_references ();
redirects_changed (src); /* EMIT SIGNAL */
return 0;
}

View File

@@ -3313,6 +3313,8 @@ Session::remove_redirect (Redirect* redirect)
PortInsert* port_insert;
PluginInsert* plugin_insert;
cerr << "Removing a redirect!\n";
if ((insert = dynamic_cast<Insert *> (redirect)) != 0) {
if ((port_insert = dynamic_cast<PortInsert *> (insert)) != 0) {
_port_inserts.remove (port_insert);
@@ -3323,7 +3325,9 @@ Session::remove_redirect (Redirect* redirect)
/*NOTREACHED*/
}
} else if ((send = dynamic_cast<Send *> (redirect)) != 0) {
cerr << "Remove send, used to have " << _sends.size() << endl;
_sends.remove (send);
cerr << "post removal, have " << _sends.size() << endl;
} else {
fatal << _("programming error: unknown type of Redirect deleted!") << endmsg;
/*NOTREACHED*/
@@ -3451,9 +3455,15 @@ Session::ensure_passthru_buffers (uint32_t howmany)
string
Session::next_send_name ()
{
char buf[32];
snprintf (buf, sizeof (buf), "send %" PRIu32, ++send_cnt);
return buf;
uint32_t cnt = 0;
shared_ptr<RouteList> r = routes.reader ();
for (RouteList::const_iterator i = r->begin(); i != r->end(); ++i) {
cnt += (*i)->count_sends ();
}
return string_compose (_("send %1"), ++cnt);
}
string

View File

@@ -123,7 +123,6 @@ Session::first_stage_init (string fullpath, string snapshot_name)
_tempo_map->StateChanged.connect (mem_fun (*this, &Session::tempo_map_changed));
g_atomic_int_set (&processing_prohibited, 0);
send_cnt = 0;
insert_cnt = 0;
_transport_speed = 0;
_last_transport_speed = 0;

View File

@@ -127,7 +127,7 @@ TearOff::close_click (GdkEventButton* ev)
gint
TearOff::window_button_press (GdkEventButton* ev)
{
if (dragging) {
if (dragging || ev->button != 1) {
dragging = false;
own_window.remove_modal_grab();
return true;
@@ -172,6 +172,12 @@ TearOff::window_motion (GdkEventMotion* ev)
return true;
}
if (!(ev->state & GDK_BUTTON1_MASK)) {
dragging = false;
own_window.remove_modal_grab();
return true;
}
x_delta = ev->x_root - drag_x;
y_delta = ev->y_root - drag_y;