Merged with trunk R1761

git-svn-id: svn://localhost/ardour2/branches/midi@1762 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
David Robillard 2007-04-29 17:23:11 +00:00
parent 490e18d80a
commit b3fe7cfc89
34 changed files with 255 additions and 118 deletions

View file

@ -16,7 +16,7 @@ import SCons.Node.FS
SConsignFile()
EnsureSConsVersion(0, 96)
ardour_version = '2.0rc1'
ardour_version = '2.0rc2'
subst_dict = { }
@ -382,14 +382,22 @@ env.Append (BUILDERS = {'Tarball' : tarball_bld})
#
if env['VST']:
sys.stdout.write ("Are you building Ardour for personal use (rather than distribution to others)? [no]: ")
answer = sys.stdin.readline ()
answer = answer.rstrip().strip()
if answer != "yes" and answer != "y":
print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. Build with VST=false.'
sys.exit (-1);
if os.path.isfile('.personal_use_only'):
print "Enabling VST support. Note that distributing a VST-enabled ardour\nis a violation of several different licences.\nBuild with VST=false if you intend to distribute ardour to others."
else:
print "OK, VST support will be enabled"
sys.stdout.write ("Are you building Ardour for personal use (rather than distribution to others)? [no]: ")
answer = sys.stdin.readline ()
answer = answer.rstrip().strip()
if answer == "yes" or answer == "y":
fh = open('.personal_use_only', 'w')
fh.close()
print "OK, VST support will be enabled"
else:
print 'You cannot build Ardour with VST support for distribution to others.\nIt is a violation of several different licenses. Build with VST=false.'
sys.exit (-1);
else:
if os.path.isfile('.personal_use_only'):
os.remove('.personal_use_only')
#######################
@ -1091,7 +1099,13 @@ if not conf.CheckFunc('posix_memalign'):
env = conf.Finish()
# generate the per-user and system rc files from the same source
rcbuild = env.SubstInFile ('ardour.rc','ardour.rc.in', SUBST_DICT = subst_dict)
sysrcbuild = env.SubstInFile ('ardour_system.rc','ardour.rc.in', SUBST_DICT = subst_dict)
# add to the substitution dictionary
subst_dict['%VERSION%'] = ardour_version[0:3]
subst_dict['%EXTRA_VERSION%'] = ardour_version[3:]
subst_dict['%REVISION_STRING%'] = ''
@ -1107,6 +1121,7 @@ env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.rc'))
Default (rcbuild)
Default (sysrcbuild)
# source tarball
@ -1116,7 +1131,6 @@ env.Distribute (env['DISTTREE'],
[ 'SConstruct', 'svn_revision.h',
'COPYING', 'PACKAGER_README', 'README',
'ardour.rc.in',
'ardour_system.rc',
'tools/config.guess',
'icons/icon/ardour_icon_mac_mask.png',
'icons/icon/ardour_icon_mac.png',

View file

@ -32,6 +32,7 @@
<Option name="quieten-at-speed" value="1.000000"/>
<Option name="use-vst" value="yes"/>
<Option name="use-tranzport" value="yes"/>
<Option name="disk-choice-space-threshold" value="57600000"/>
<Option name="destructive-xfade-msecs" value="20"/>
<Option name="periodic-safety-backups" value="1"/>
<Option name="periodic-safety-backup-interval" value="120"/>
@ -40,3 +41,4 @@
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
</extra>
</Ardour>

View file

@ -1,17 +0,0 @@
<?xml version="1.0" encoding="UTF-8"?>
<Ardour>
<Config>
<Option name="minimum-disk-io-bytes" value="262144"/>
<Option name="track-buffer-seconds" value="5.000000"/>
<Option name="mute-affects-pre-fader" value="yes"/>
<Option name="mute-affects-post-fader" value="yes"/>
<Option name="mute-affects-control-outs" value="yes"/>
<Option name="mute-affects-main-outs" value="yes"/>
<Option name="solo-latch" value="yes"/>
<Option name="pixmap-path" value="/usr/share/ardour/pixmaps:/usr/local/share/ardour/pixmaps"/>
<Option name="disk-choice-space-threshold" value="57600000"/>
<Option name="mtc-port" value="trident"/>
<Option name="mmc-port" value="trident"/>
<Option name="monitor-inputs" value="no"/>
</Config>
</Ardour>

View file

@ -17,9 +17,9 @@ cTransportMarkerBar 0.60 0.60 0.64 1.0
cTimeStretchFill 0.89 0.71 0.71 0.59
cTimeStretchOutline 0.39 0.39 0.39 0.59
cAutomationLine 0.27 0.74 0.35 1.0
cLeftPanAutomationLine 0.77 0.24 0.01 1.0
cLeftPanAutomationLine 0.87 0.44 0.11 1.0
cRightPanAutomationLine 0.03 0.26 0.73 1.0
cRedirectAutomationLine 0.28 0.34 0.74 1.0
cRedirectAutomationLine 0.48 0.64 0.98 1.0
cControlPointFill 0 0 0 1.0
cControlPointOutline 0 0 0 1.0
cEnteredControlPointOutline 1.0 0.21 0.21 1.0

View file

@ -449,6 +449,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
# make it bigger.
#
GtkRange::slider_width = 27
GtkScrollbar::slider_width = 27
}
style "ardour_progressbars" = "default_buttons_menus"

View file

@ -951,9 +951,30 @@ ARDOUR_UI::filter_ardour_session_dirs (const FileFilter::Info& info)
return S_ISREG (statbuf.st_mode);
}
bool
ARDOUR_UI::check_audioengine ()
{
if (engine) {
if (!engine->connected()) {
MessageDialog msg (_("Ardour is not connected to JACK\n"
"You cannot open or close sessions in this condition"));
msg.run ();
return false;
}
return true;
} else {
return false;
}
}
void
ARDOUR_UI::open_session ()
{
if (!check_audioengine()) {
return;
}
/* popup selector window */
if (open_session_selector == 0) {
@ -1789,9 +1810,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
string session_name;
string session_path;
if (!engine->connected()) {
MessageDialog msg (_("Ardour is not connected to JACK at this time. Creating new sessions is not possible."));
msg.run ();
if (!check_audioengine()) {
return false;
}
@ -1801,14 +1820,13 @@ ARDOUR_UI::new_session (std::string predetermined_path)
new_session_dialog->set_name (predetermined_path);
new_session_dialog->reset_recent();
new_session_dialog->show();
new_session_dialog->set_current_page (0);
do {
response = new_session_dialog->run ();
if (!engine->connected()) {
if (!check_audioengine()) {
new_session_dialog->hide ();
MessageDialog msg (_("Ardour is not connected to JACK at this time. Creating new sessions is not possible."));
msg.run ();
return false;
}
@ -2001,6 +2019,10 @@ ARDOUR_UI::new_session (std::string predetermined_path)
void
ARDOUR_UI::close_session()
{
if (!check_audioengine()) {
return;
}
unload_session();
new_session ();
}
@ -2012,6 +2034,10 @@ ARDOUR_UI::load_session (const string & path, const string & snap_name, string*
int x;
session_loaded = false;
if (!check_audioengine()) {
return -1;
}
x = unload_session ();
if (x < 0) {
@ -2068,8 +2094,14 @@ ARDOUR_UI::build_session (const string & path, const string & snap_name,
Session *new_session;
int x;
if (!check_audioengine()) {
return -1;
}
session_loaded = false;
x = unload_session ();
if (x < 0) {
return -1;
} else if (x > 0) {

View file

@ -263,6 +263,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
ARDOUR::AudioEngine *engine;
ARDOUR::Session *session;
bool check_audioengine();
Gtk::Tooltips _tooltips;
void goto_editor_window ();

View file

@ -288,13 +288,27 @@ AudioStreamView::playlist_changed (boost::shared_ptr<Diskstream> ds)
playlist_connections.push_back (apl->NewCrossfade.connect (mem_fun (*this, &AudioStreamView::add_crossfade)));
}
void
AudioStreamView::add_crossfade_weak (boost::weak_ptr<Crossfade> crossfade)
{
boost::shared_ptr<Crossfade> sp (crossfade.lock());
if (!sp) {
return;
}
add_crossfade (sp);
}
void
AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
{
AudioRegionView* lview = 0;
AudioRegionView* rview = 0;
/* we do not allow shared_ptr<T> to be bound to slots */
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade), crossfade));
ENSURE_GUI_THREAD (bind (mem_fun (*this, &AudioStreamView::add_crossfade_weak), boost::weak_ptr<Crossfade> (crossfade)));
/* first see if we already have a CrossfadeView for this Crossfade */

View file

@ -94,6 +94,7 @@ class AudioStreamView : public StreamView
void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
void add_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
void add_crossfade_weak (boost::weak_ptr<ARDOUR::Crossfade>);
void remove_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
void color_handler (ColorID id, uint32_t val);

View file

@ -73,7 +73,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
base_rect = new SimpleRect(*canvas_display);
base_rect->property_x1() = 0.0;
base_rect->property_y1() = 0.0;
base_rect->property_x2() = max_frames;
base_rect->property_x2() = editor.frame_to_pixel (max_frames);
base_rect->property_outline_color_rgba() = color_map[cAutomationTrackOutline];
/* outline ends and bottom */
base_rect->property_outline_what() = (guint32) (0x1|0x2|0x8);

View file

@ -27,7 +27,7 @@
#include <pbd/convert.h>
#include <pbd/error.h>
#include <pbd/stacktrace.h>
#include <pbd/enumwriter.h>
#include <pbd/memento_command.h>
#include <glibmm/miscutils.h>
@ -2042,6 +2042,10 @@ Editor::set_state (const XMLNode& node)
edit_cursor->set_position (0);
}
if ((prop = node.property ("mixer-width"))) {
editor_mixer_strip_width = Width (string_2_enum (prop->value(), editor_mixer_strip_width));
}
if ((prop = node.property ("zoom-focus"))) {
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
}
@ -2182,6 +2186,8 @@ Editor::get_state ()
node->add_child_nocopy (*geometry);
}
maybe_add_mixer_strip_width (*node);
snprintf (buf, sizeof(buf), "%d", (int) zoom_focus);
node->add_property ("zoom-focus", buf);
snprintf (buf, sizeof(buf), "%f", frames_per_unit);
@ -3777,7 +3783,7 @@ Editor::idle_visual_changer ()
}
}
return 0;
return 0; /* this is always a one-shot call */
}
struct EditorOrderTimeAxisSorter {

View file

@ -264,6 +264,7 @@ class Editor : public PublicEditor
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
Width editor_mixer_strip_width;
void maybe_add_mixer_strip_width (XMLNode&);
void show_editor_mixer (bool yn);
void set_selected_mixer_strip (TimeAxisView&);
void hide_track_in_display (TimeAxisView& tv);

View file

@ -20,6 +20,9 @@
#include <glibmm/miscutils.h>
#include <gtkmm2ext/utils.h>
#include <gtkmm2ext/window_title.h>
#include <pbd/enumwriter.h>
#include <ardour/audioengine.h>
#include "editor.h"
@ -32,6 +35,7 @@
#include "i18n.h"
using namespace Gtkmm2ext;
using namespace PBD;
void
Editor::editor_mixer_button_toggled ()
@ -107,8 +111,8 @@ Editor::show_editor_mixer (bool yn)
current_mixer_strip->set_embedded (true);
current_mixer_strip->Hiding.connect (mem_fun(*this, &Editor::current_mixer_strip_hidden));
current_mixer_strip->GoingAway.connect (mem_fun(*this, &Editor::current_mixer_strip_removed));
current_mixer_strip->set_width (editor_mixer_strip_width);
current_mixer_strip->set_width (editor_mixer_strip_width, (void*) this);
global_hpacker.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK );
global_hpacker.reorder_child (*current_mixer_strip, 0);
@ -355,3 +359,11 @@ Editor::session_going_away ()
session = 0;
}
void
Editor::maybe_add_mixer_strip_width (XMLNode& node)
{
if (current_mixer_strip) {
node.add_property ("mixer-width", enum_2_string (current_mixer_strip->get_width()));
}
}

View file

@ -1622,7 +1622,6 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
stop_canvas_autoscroll ();
if (drag_info.item == 0) {
cerr << "end grab with no item\n";
return false;
}
@ -2770,7 +2769,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
drag_info.want_move_threshold = false; // don't copy again
/* duplicate the region(s) */
vector<RegionView*> new_regionviews;
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
@ -2804,7 +2803,7 @@ Editor::region_drag_motion_callback (ArdourCanvas::Item* item, GdkEvent* event)
/* reset drag_info data to reflect the fact that we are dragging the copies */
drag_info.data = new_regionviews.front();
swap_grab (new_regionviews.front()->get_canvas_group (), 0, event->motion.time);
}
@ -3237,6 +3236,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
RouteTimeAxisView* rtv;
bool regionview_y_movement;
bool regionview_x_movement;
vector<RegionView*> copies;
/* first_move is set to false if the regionview has been moved in the
motion handler.
@ -3244,6 +3244,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
if (drag_info.first_move) {
/* just a click */
if (drag_info.copy) {
for (list<RegionView*>::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
copies.push_back (*i);
}
}
goto out;
}
@ -3257,6 +3263,13 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
if (drag_info.brushing) {
/* all changes were made during motion event handlers */
if (drag_info.copy) {
for (list<RegionView*>::iterator i = selection->regions.begin(); i != selection->regions.end(); ++i) {
copies.push_back (*i);
}
}
goto out;
}
@ -3299,7 +3312,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
vector<RegionView*> new_selection;
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
RegionView* rv = (*i);
double ix1, ix2, iy1, iy2;
@ -3335,6 +3348,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
from_playlist->remove_region ((rv->region()));
session->add_command (new MementoCommand<Playlist>(*from_playlist, 0, &from_playlist->get_state()));
} else {
/* the regionview we dragged around is a temporary copy, queue it for deletion */
copies.push_back (rv);
}
latest_regionview = 0;
@ -3349,11 +3368,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
new_selection.push_back (latest_regionview);
}
if (drag_info.copy) {
// get rid of the copy
delete rv;
}
/* OK, this is where it gets tricky. If the playlist was being used by >1 tracks, and the region
was selected in all of them, then removing it from the playlist will have removed all
trace of it from the selection (i.e. there were N regions selected, we removed 1,
@ -3366,12 +3380,19 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
here. if the region selection is not empty, then restart the loop because we know that
we must have removed at least the region(view) we've just been working on as well as any
that we processed on previous iterations.
EXCEPT .... if we are doing a copy drag, then the selection hasn't been modified and
we can just iterate.
*/
if (selection->regions.empty()) {
break;
} else {
i = selection->regions.by_layer().begin();
if (drag_info.copy) {
++i;
} else {
if (selection->regions.empty()) {
break;
} else {
i = selection->regions.by_layer().begin();
}
}
}
@ -3465,10 +3486,8 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
/* get rid of the copy */
if (drag_info.copy) {
delete rv;
copies.push_back (rv);
}
}
}
@ -3478,6 +3497,10 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
if (!nocommit) {
commit_reversible_command ();
}
for (vector<RegionView*>::iterator x = copies.begin(); x != copies.end(); ++x) {
delete *x;
}
}
void
@ -4764,7 +4787,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
string str;
prompter.get_result(str);
if (str.length()) {
clicked_regionview->region()->set_name (str);
clicked_regionview->region()->set_name (str);
}
break;
}

View file

@ -20,6 +20,7 @@
#include <pbd/enumwriter.h>
#include "audio_clock.h"
#include "enums.h"
using namespace std;
using namespace PBD;
@ -33,6 +34,7 @@ setup_gtk_ardour_enums ()
vector<string> s;
AudioClock::Mode clock_mode;
Width width;
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
#define REGISTER_BITS(e) enum_writer.register_bits (typeid(e).name(), i, s); i.clear(); s.clear()
@ -45,4 +47,8 @@ setup_gtk_ardour_enums ()
REGISTER_CLASS_ENUM (AudioClock, Frames);
REGISTER_CLASS_ENUM (AudioClock, Off);
REGISTER (clock_mode);
REGISTER_ENUM (Wide);
REGISTER_ENUM (Narrow);
REGISTER (width);
}

View file

@ -22,6 +22,7 @@
#include <sigc++/bind.h>
#include <pbd/convert.h>
#include <pbd/enumwriter.h>
#include <gtkmm2ext/gtk_ui.h>
#include <gtkmm2ext/utils.h>
@ -111,6 +112,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
ignore_speed_adjustment = false;
comment_window = 0;
comment_area = 0;
_width_owner = 0;
width_button.add (*(manage (new Gtk::Image (::get_icon("strip_width")))));
hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
@ -174,7 +176,7 @@ MixerStrip::MixerStrip (Mixer_UI& mx, Session& sess, boost::shared_ptr<Route> rt
bottom_button_table.set_col_spacings (0);
bottom_button_table.set_homogeneous (true);
bottom_button_table.attach (group_button, 0, 1, 0, 1);
if (is_audio_track()) {
rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press), false);
@ -366,22 +368,13 @@ void
MixerStrip::set_stuff_from_route ()
{
XMLProperty *prop;
ensure_xml_node ();
/* if width is not set, it will be set by the MixerUI or editor */
if ((prop = xml_node->property ("strip_width")) != 0) {
if (prop->value() == "wide") {
set_width (Wide);
} else if (prop->value() == "narrow") {
set_width (Narrow);
}
else {
error << string_compose(_("unknown strip width \"%1\" in XML GUI information"), prop->value()) << endmsg;
set_width (Wide);
}
}
else {
set_width (Wide);
set_width (Width (string_2_enum (prop->value(), _width)), this);
}
if ((prop = xml_node->property ("shown_mixer")) != 0) {
@ -397,14 +390,17 @@ MixerStrip::set_stuff_from_route ()
}
void
MixerStrip::set_width (Width w)
MixerStrip::set_width (Width w, void* owner)
{
/* always set the gpm width again, things may be hidden */
gpm.set_width (w);
panners.set_width (w);
pre_redirect_box.set_width (w);
post_redirect_box.set_width (w);
_width_owner = owner;
if (_width == w) {
return;
}
@ -412,11 +408,14 @@ MixerStrip::set_width (Width w)
ensure_xml_node ();
_width = w;
if (_width_owner == this) {
xml_node->add_property ("strip_width", enum_2_string (_width));
}
switch (w) {
case Wide:
set_size_request (-1, -1);
xml_node->add_property ("strip_width", "wide");
if (rec_enable_button) {
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("record"));
@ -440,8 +439,6 @@ MixerStrip::set_width (Width w)
break;
case Narrow:
xml_node->add_property ("strip_width", "narrow");
if (rec_enable_button) {
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Rec"));
}
@ -562,7 +559,7 @@ MixerStrip::input_press (GdkEventButton *ev)
msg.run ();
return true;
}
switch (ev->button) {
case 1:
@ -691,7 +688,7 @@ void
MixerStrip::connect_to_pan ()
{
ENSURE_GUI_THREAD(mem_fun(*this, &MixerStrip::connect_to_pan));
panstate_connection.disconnect ();
panstyle_connection.disconnect ();
@ -772,7 +769,8 @@ MixerStrip::output_changed (IOChange change, void *src)
void
MixerStrip::comment_editor_done_editing() {
MixerStrip::comment_editor_done_editing()
{
string str = comment_area->get_buffer()->get_text();
if (_route->comment() != str) {
_route->set_comment (str, this);
@ -972,12 +970,11 @@ void
MixerStrip::build_route_ops_menu ()
{
using namespace Menu_Helpers;
route_ops_menu = manage (new Menu);
route_ops_menu->set_name ("ArdourContextMenu");
MenuList& items = route_ops_menu->items();
items.push_back (MenuElem (_("Rename"), mem_fun(*this, &RouteUI::route_rename)));
items.push_back (SeparatorElem());
items.push_back (CheckMenuElem (_("Active"), mem_fun (*this, &RouteUI::toggle_route_active)));
@ -1002,6 +999,11 @@ MixerStrip::name_button_button_press (GdkEventButton* ev)
{
if (ev->button == 1) {
list_route_operations ();
Menu_Helpers::MenuList& items = route_ops_menu->items();
/* do not allow rename if the track is record-enabled */
static_cast<MenuItem*> (&items.front())->set_sensitive (!_route->record_enabled());
route_ops_menu->popup (1, ev->time);
}
return FALSE;
@ -1089,10 +1091,10 @@ MixerStrip::width_clicked ()
{
switch (_width) {
case Wide:
set_width (Narrow);
set_width (Narrow, this);
break;
case Narrow:
set_width (Wide);
set_width (Wide, this);
break;
}
}

View file

@ -85,12 +85,13 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
MixerStrip (Mixer_UI&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, bool in_mixer = true);
~MixerStrip ();
void set_width (Width);
void set_width (Width, void* owner);
Width get_width() const { return _width; }
void* width_owner() const { return _width_owner; }
void fast_update ();
void set_embedded (bool);
ARDOUR::RouteGroup* mix_group() const;
protected:
@ -107,6 +108,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
bool _embedded;
bool _packed;
Width _width;
void* _width_owner;
Gtk::Button hide_button;
Gtk::Button width_button;

View file

@ -244,7 +244,7 @@ Mixer_UI::show_window ()
for (ri = rows.begin(); ri != rows.end(); ++ri) {
ms = (*ri)[track_columns.strip];
ms->set_width (ms->get_width());
ms->set_width (ms->get_width(), ms->width_owner());
}
_visible = true;
}
@ -274,7 +274,10 @@ Mixer_UI::add_strip (Session::RouteList& routes)
strip = new MixerStrip (*this, *session, route);
strips.push_back (strip);
strip->set_width (_strip_width);
if (strip->width_owner() != strip) {
strip->set_width (_strip_width, this);
}
show_strip (strip);
no_track_list_redisplay = true;
@ -1040,7 +1043,7 @@ Mixer_UI::set_strip_width (Width w)
_strip_width = w;
for (list<MixerStrip*>::iterator i = strips.begin(); i != strips.end(); ++i) {
(*i)->set_width (w);
(*i)->set_width (w, this);
}
}

View file

@ -575,7 +575,12 @@ int
NewSessionDialog::get_current_page()
{
return m_notebook->get_current_page();
}
void
NewSessionDialog::set_current_page(int page)
{
return m_notebook->set_current_page (page);
}
void

View file

@ -82,6 +82,7 @@ public:
bool connect_outs_to_master() const;
bool connect_outs_to_physical() const ;
int get_current_page();
void set_current_page (int);
void reset_recent();
// reset everything to default values.

View file

@ -1776,3 +1776,10 @@ RouteTimeAxisView::reset_redirect_automation_curves ()
}
}
void
RouteTimeAxisView::update_rec_display ()
{
RouteUI::update_rec_display ();
name_entry.set_sensitive (!_route->record_enabled());
}

View file

@ -159,6 +159,8 @@ protected:
void route_name_changed (void *);
void name_entry_changed ();
void update_rec_display ();
virtual void label_view ();
void add_edit_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);

View file

@ -148,7 +148,7 @@ class RouteUI : public virtual AxisView
void disconnect_input ();
void disconnect_output ();
void update_rec_display ();
virtual void update_rec_display ();
void update_mute_display ();
bool was_solo_safe;

View file

@ -112,16 +112,16 @@ StreamView::set_height (gdouble h)
return -1;
}
if (canvas_rect->property_y2() == h) {
return 0;
}
canvas_rect->property_y2() = h;
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
(*i)->set_height (h);
}
/*for (CrossfadeViewList::iterator i = crossfade_views.begin(); i != crossfade_views.end(); ++i) {
(*i)->set_height (h);
}*/
for (vector<RecBoxInfo>::iterator i = rec_rects.begin(); i != rec_rects.end(); ++i) {
RecBoxInfo &recbox = (*i);
recbox.rectangle->property_y2() = h - 1.0;

View file

@ -18,6 +18,7 @@
*/
#include <pbd/error.h>
#include <pbd/stacktrace.h>
#include <ardour/types.h>
#include <ardour/ardour.h>
@ -571,7 +572,7 @@ TimeAxisViewItem::set_name_text(const ustring& new_name)
* @param h the new height
*/
void
TimeAxisViewItem::set_height(double height)
TimeAxisViewItem::set_height (double height)
{
if (name_highlight) {
if (height < NAME_HIGHLIGHT_THRESH) {
@ -975,8 +976,7 @@ TimeAxisViewItem::reset_name_width (double pixel_width)
}
if (n == 0) {
/* nothing will fit */
name_text->hide ();
name_text->property_text() = "";
last_name_text_width = pixel_width;
return;
}

View file

@ -30,6 +30,7 @@
#include <ardour/crossfade.h>
#include <ardour/crossfade_compare.h>
#include <ardour/session.h>
#include <pbd/enumwriter.h>
#include "i18n.h"
@ -386,6 +387,7 @@ AudioPlaylist::check_dependents (boost::shared_ptr<Region> r, bool norefresh)
}
OverlapType c = top->coverage (bottom->position(), bottom->last_frame());
try {
@ -416,7 +418,7 @@ AudioPlaylist::check_dependents (boost::shared_ptr<Region> r, bool norefresh)
xfade = boost::shared_ptr<Crossfade> (new Crossfade (top, bottom, xfade_length, top->first_frame(), StartOfIn));
add_crossfade (xfade);
if (top_region_at (top->last_frame() - 1) == top) {
/*
only add a fade out if there is no region on top of the end of 'top' (which

View file

@ -764,6 +764,7 @@ AudioEngine::halted (void *arg)
ae->_running = false;
ae->_buffer_size = 0;
ae->_frame_rate = 0;
ae->_jack = 0;
ae->Halted(); /* EMIT SIGNAL */
}

View file

@ -97,6 +97,7 @@ ControlProtocolManager::drop_session ()
for (list<ControlProtocolInfo*>::iterator p = control_protocol_info.begin(); p != control_protocol_info.end(); ++p) {
// otherwise the ControlProtocol instances are not recreated in set_session
(*p)->requested = true;
(*p)->protocol = 0;
}
}
}

View file

@ -424,7 +424,7 @@ PluginInsert::automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offs
while (nframes) {
nframes_t cnt = min (((nframes_t) floor (next_event.when) - now), nframes);
nframes_t cnt = min (((nframes_t) ceil (next_event.when) - now), nframes);
connect_and_run (bufs, cnt, offset, true, now);

View file

@ -81,8 +81,9 @@ Session::memento_command_factory(XMLNode *n)
/* create command */
string obj_T = n->property ("type_name")->value();
if (obj_T == typeid (AudioRegion).name() || obj_T == typeid (MidiRegion).name() || obj_T == typeid (Region).name()) {
if (regions.count(id))
if (regions.count(id)) {
return new MementoCommand<Region>(*regions[id], before, after);
}
} else if (obj_T == typeid (AudioSource).name() || obj_T == typeid (MidiSource).name()) {
if (sources.count(id))
return new MementoCommand<Source>(*sources[id], before, after);
@ -107,6 +108,7 @@ Session::memento_command_factory(XMLNode *n)
/* we failed */
error << string_compose (_("could not reconstitute MementoCommand from XMLNode. object type = %1 id = %2"), obj_T, id.to_s()) << endmsg;
return 0 ;
}

View file

@ -708,7 +708,7 @@ Session::save_state (string snapshot_name, bool pending)
tmp_path += snapshot_name;
tmp_path += ".tmp";
cerr << "actually writing state to " << xml_path << endl;
// cerr << "actually writing state to " << xml_path << endl;
if (!tree.write (tmp_path)) {
error << string_compose (_("state could not be saved to %1"), tmp_path) << endmsg;
@ -770,7 +770,7 @@ Session::load_state (string snapshot_name)
xmlpath += snapshot_name;
xmlpath += _pending_suffix;
if (!access (xmlpath.c_str(), F_OK)) {
if (Glib::file_test (xmlpath, Glib::FILE_TEST_EXISTS)) {
/* there is pending state from a crashed capture attempt */
@ -785,8 +785,8 @@ Session::load_state (string snapshot_name)
xmlpath += snapshot_name;
xmlpath += _statefile_suffix;
}
if (access (xmlpath.c_str(), F_OK)) {
if (!Glib::file_test (xmlpath, Glib::FILE_TEST_EXISTS)) {
error << string_compose(_("%1: session state information file \"%2\" doesn't exist!"), _name, xmlpath) << endmsg;
return 1;
}
@ -828,8 +828,10 @@ Session::load_state (string snapshot_name)
if (is_old) {
string backup_path;
backup_path = xmlpath;
backup_path += ".1";
backup_path = _path;
backup_path += snapshot_name;
backup_path += "-1";
backup_path += _statefile_suffix;
info << string_compose (_("Copying old session file %1 to %2\nUse %2 with Ardour versions before 2.0 from now on"),
xmlpath, backup_path)
@ -1614,7 +1616,7 @@ Session::path_from_region_name (string name, string identifier)
snprintf (buf, sizeof(buf), "%s/%s-%" PRIu32 ".wav", dir.c_str(), name.c_str(), n);
}
if (!g_file_test (buf, G_FILE_TEST_EXISTS)) {
if (!Glib::file_test (buf, Glib::FILE_TEST_EXISTS)) {
return buf;
}
}

View file

@ -1,4 +1,4 @@
#ifndef __ardour_svn_revision_h__
#define __ardour_svn_revision_h__
static const char* ardour_svn_revision = "1681";
static const char* ardour_svn_revision = "1745";
#endif

View file

@ -448,6 +448,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
# make it bigger.
#
GtkRange::slider_width = 27
GtkScrollbar::slider_width = 27
}
style "ardour_progressbars" = "default_buttons_menus"

View file

@ -111,6 +111,7 @@ class Data(object):
sessions[session_name]['collabs'][collab_name]['sounds'] = []
sessions[session_name]['collabs'][collab_name]['ip'] = ip_address
sessions[session_name]['collabs'][collab_name]['port'] = port
sessions[session_name]['collabs'][collab_name]['v2paths'] = true
self._data['sessions'] = sessions
client = ExchangeClientFactory(session_name, collab_name, None, self.debug_mode)
@ -129,6 +130,10 @@ class Data(object):
sessions[session_name]['collabs'][self._data['user']] = {}
sessions[session_name]['collabs'][self._data['user']]['snaps'] = []
sessions[session_name]['collabs'][self._data['user']]['sounds'] = []
if os.path.test (os.path.join (session_path,'sounds')):
sessions[session_name]['collabs'][collab_name]['v2paths'] = False
else:
sessions[session_name]['collabs'][collab_name]['v2paths'] = True
self._data['sessions'] = sessions
@ -150,7 +155,8 @@ class Data(object):
def create_session(self, session_path):
try:
os.mkdir(session_path)
os.mkdir(session_path+"/sounds")
os.mkdir(os.path.join (session_path,'interchange',session_name,'audiofiles'))
except OSError:
raise_error("Could not create session directory", g_display.window)
return
@ -230,7 +236,10 @@ class Data(object):
def _scan_sounds(self, session):
sounds = []
files = os.listdir(session+'/sounds')
if v2paths:
files = os.listdir(os.path.join (session,'interchange', session, 'audiofiles'))
else:
files = os.listdir(os.path.join (session,'sounds'))
pattern = re.compile(r'\.peak$')
for file in files:
if not pattern.search(file):
@ -755,21 +764,21 @@ class ArdourShareWindow(object):
#need to hold a reference to the item_factory or the menubar will disappear.
self.item_factory = gtk.ItemFactory(gtk.MenuBar, '<main>', accel_group)
self.item_factory.create_items(menu_items, self.window)
main_box.pack_start(self.item_factory.get_widget('<main>'), gtk.FALSE)
main_box.pack_start(self.item_factory.get_widget('<main>'), False)
pane1 = gtk.HPaned()
pane2 = gtk.HPaned()
pane1.pack2(pane2, gtk.TRUE, gtk.FALSE)
pane1.pack2(pane2, True, False)
scroll1 = gtk.ScrolledWindow()
scroll1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
pane1.pack1(scroll1, gtk.TRUE, gtk.FALSE)
pane1.pack1(scroll1, True, False)
scroll2 = gtk.ScrolledWindow()
scroll2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
pane2.pack1(scroll2, gtk.TRUE, gtk.FALSE)
pane2.pack1(scroll2, True, False)
scroll3 = gtk.ScrolledWindow()
scroll3.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
pane2.pack2(scroll3, gtk.TRUE, gtk.FALSE)
pane2.pack2(scroll3, True, False)
self.session_model = gtk.ListStore(gobject.TYPE_STRING)
view1 = gtk.TreeView(self.session_model)
@ -797,10 +806,10 @@ class ArdourShareWindow(object):
self.snap_selection.connect("changed", self.cb_snap_selection_changed)
scroll3.add(view3)
main_box.pack_start(pane1, gtk.TRUE, gtk.TRUE)
main_box.pack_start(pane1, True, True)
self.status_bar = gtk.Statusbar()
main_box.pack_start(self.status_bar, gtk.FALSE)
main_box.pack_start(self.status_bar, False)
self._status_cid = self.status_bar.get_context_id('display')
self._status_mid = ''