mirror of
https://github.com/Ardour/ardour.git
synced 2025-12-07 23:35:03 +01:00
Merged with trunk R1761
git-svn-id: svn://localhost/ardour2/branches/midi@1762 d708f5d6-7413-0410-9779-e7cbd77b26cf
This commit is contained in:
parent
490e18d80a
commit
b3fe7cfc89
34 changed files with 255 additions and 118 deletions
32
SConstruct
32
SConstruct
|
|
@ -16,7 +16,7 @@ import SCons.Node.FS
|
||||||
SConsignFile()
|
SConsignFile()
|
||||||
EnsureSConsVersion(0, 96)
|
EnsureSConsVersion(0, 96)
|
||||||
|
|
||||||
ardour_version = '2.0rc1'
|
ardour_version = '2.0rc2'
|
||||||
|
|
||||||
subst_dict = { }
|
subst_dict = { }
|
||||||
|
|
||||||
|
|
@ -382,14 +382,22 @@ env.Append (BUILDERS = {'Tarball' : tarball_bld})
|
||||||
#
|
#
|
||||||
|
|
||||||
if env['VST']:
|
if env['VST']:
|
||||||
sys.stdout.write ("Are you building Ardour for personal use (rather than distribution to others)? [no]: ")
|
if os.path.isfile('.personal_use_only'):
|
||||||
answer = sys.stdin.readline ()
|
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."
|
||||||
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);
|
|
||||||
else:
|
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()
|
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)
|
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['%VERSION%'] = ardour_version[0:3]
|
||||||
subst_dict['%EXTRA_VERSION%'] = ardour_version[3:]
|
subst_dict['%EXTRA_VERSION%'] = ardour_version[3:]
|
||||||
subst_dict['%REVISION_STRING%'] = ''
|
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'))
|
env.Alias('install', env.Install(os.path.join(config_prefix, 'ardour2'), 'ardour.rc'))
|
||||||
|
|
||||||
Default (rcbuild)
|
Default (rcbuild)
|
||||||
|
Default (sysrcbuild)
|
||||||
|
|
||||||
# source tarball
|
# source tarball
|
||||||
|
|
||||||
|
|
@ -1116,7 +1131,6 @@ env.Distribute (env['DISTTREE'],
|
||||||
[ 'SConstruct', 'svn_revision.h',
|
[ 'SConstruct', 'svn_revision.h',
|
||||||
'COPYING', 'PACKAGER_README', 'README',
|
'COPYING', 'PACKAGER_README', 'README',
|
||||||
'ardour.rc.in',
|
'ardour.rc.in',
|
||||||
'ardour_system.rc',
|
|
||||||
'tools/config.guess',
|
'tools/config.guess',
|
||||||
'icons/icon/ardour_icon_mac_mask.png',
|
'icons/icon/ardour_icon_mac_mask.png',
|
||||||
'icons/icon/ardour_icon_mac.png',
|
'icons/icon/ardour_icon_mac.png',
|
||||||
|
|
|
||||||
|
|
@ -32,6 +32,7 @@
|
||||||
<Option name="quieten-at-speed" value="1.000000"/>
|
<Option name="quieten-at-speed" value="1.000000"/>
|
||||||
<Option name="use-vst" value="yes"/>
|
<Option name="use-vst" value="yes"/>
|
||||||
<Option name="use-tranzport" 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="destructive-xfade-msecs" value="20"/>
|
||||||
<Option name="periodic-safety-backups" value="1"/>
|
<Option name="periodic-safety-backups" value="1"/>
|
||||||
<Option name="periodic-safety-backup-interval" value="120"/>
|
<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"/>
|
<Keyboard edit-button="3" edit-modifier="4" delete-button="3" delete-modifier="1" snap-modifier="32"/>
|
||||||
</extra>
|
</extra>
|
||||||
</Ardour>
|
</Ardour>
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -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>
|
|
||||||
|
|
@ -17,9 +17,9 @@ cTransportMarkerBar 0.60 0.60 0.64 1.0
|
||||||
cTimeStretchFill 0.89 0.71 0.71 0.59
|
cTimeStretchFill 0.89 0.71 0.71 0.59
|
||||||
cTimeStretchOutline 0.39 0.39 0.39 0.59
|
cTimeStretchOutline 0.39 0.39 0.39 0.59
|
||||||
cAutomationLine 0.27 0.74 0.35 1.0
|
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
|
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
|
cControlPointFill 0 0 0 1.0
|
||||||
cControlPointOutline 0 0 0 1.0
|
cControlPointOutline 0 0 0 1.0
|
||||||
cEnteredControlPointOutline 1.0 0.21 0.21 1.0
|
cEnteredControlPointOutline 1.0 0.21 0.21 1.0
|
||||||
|
|
|
||||||
|
|
@ -449,6 +449,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
|
||||||
# make it bigger.
|
# make it bigger.
|
||||||
#
|
#
|
||||||
GtkRange::slider_width = 27
|
GtkRange::slider_width = 27
|
||||||
|
GtkScrollbar::slider_width = 27
|
||||||
}
|
}
|
||||||
|
|
||||||
style "ardour_progressbars" = "default_buttons_menus"
|
style "ardour_progressbars" = "default_buttons_menus"
|
||||||
|
|
|
||||||
|
|
@ -951,9 +951,30 @@ ARDOUR_UI::filter_ardour_session_dirs (const FileFilter::Info& info)
|
||||||
return S_ISREG (statbuf.st_mode);
|
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
|
void
|
||||||
ARDOUR_UI::open_session ()
|
ARDOUR_UI::open_session ()
|
||||||
{
|
{
|
||||||
|
if (!check_audioengine()) {
|
||||||
|
return;
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
/* popup selector window */
|
/* popup selector window */
|
||||||
|
|
||||||
if (open_session_selector == 0) {
|
if (open_session_selector == 0) {
|
||||||
|
|
@ -1789,9 +1810,7 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
||||||
string session_name;
|
string session_name;
|
||||||
string session_path;
|
string session_path;
|
||||||
|
|
||||||
if (!engine->connected()) {
|
if (!check_audioengine()) {
|
||||||
MessageDialog msg (_("Ardour is not connected to JACK at this time. Creating new sessions is not possible."));
|
|
||||||
msg.run ();
|
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -1801,14 +1820,13 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
||||||
new_session_dialog->set_name (predetermined_path);
|
new_session_dialog->set_name (predetermined_path);
|
||||||
new_session_dialog->reset_recent();
|
new_session_dialog->reset_recent();
|
||||||
new_session_dialog->show();
|
new_session_dialog->show();
|
||||||
|
new_session_dialog->set_current_page (0);
|
||||||
|
|
||||||
do {
|
do {
|
||||||
response = new_session_dialog->run ();
|
response = new_session_dialog->run ();
|
||||||
|
|
||||||
if (!engine->connected()) {
|
if (!check_audioengine()) {
|
||||||
new_session_dialog->hide ();
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -2001,6 +2019,10 @@ ARDOUR_UI::new_session (std::string predetermined_path)
|
||||||
void
|
void
|
||||||
ARDOUR_UI::close_session()
|
ARDOUR_UI::close_session()
|
||||||
{
|
{
|
||||||
|
if (!check_audioengine()) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
unload_session();
|
unload_session();
|
||||||
new_session ();
|
new_session ();
|
||||||
}
|
}
|
||||||
|
|
@ -2012,6 +2034,10 @@ ARDOUR_UI::load_session (const string & path, const string & snap_name, string*
|
||||||
int x;
|
int x;
|
||||||
session_loaded = false;
|
session_loaded = false;
|
||||||
|
|
||||||
|
if (!check_audioengine()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
x = unload_session ();
|
x = unload_session ();
|
||||||
|
|
||||||
if (x < 0) {
|
if (x < 0) {
|
||||||
|
|
@ -2068,8 +2094,14 @@ ARDOUR_UI::build_session (const string & path, const string & snap_name,
|
||||||
Session *new_session;
|
Session *new_session;
|
||||||
int x;
|
int x;
|
||||||
|
|
||||||
|
if (!check_audioengine()) {
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
session_loaded = false;
|
session_loaded = false;
|
||||||
|
|
||||||
x = unload_session ();
|
x = unload_session ();
|
||||||
|
|
||||||
if (x < 0) {
|
if (x < 0) {
|
||||||
return -1;
|
return -1;
|
||||||
} else if (x > 0) {
|
} else if (x > 0) {
|
||||||
|
|
|
||||||
|
|
@ -263,6 +263,8 @@ class ARDOUR_UI : public Gtkmm2ext::UI
|
||||||
ARDOUR::AudioEngine *engine;
|
ARDOUR::AudioEngine *engine;
|
||||||
ARDOUR::Session *session;
|
ARDOUR::Session *session;
|
||||||
|
|
||||||
|
bool check_audioengine();
|
||||||
|
|
||||||
Gtk::Tooltips _tooltips;
|
Gtk::Tooltips _tooltips;
|
||||||
|
|
||||||
void goto_editor_window ();
|
void goto_editor_window ();
|
||||||
|
|
|
||||||
|
|
@ -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)));
|
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
|
void
|
||||||
AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
|
AudioStreamView::add_crossfade (boost::shared_ptr<Crossfade> crossfade)
|
||||||
{
|
{
|
||||||
AudioRegionView* lview = 0;
|
AudioRegionView* lview = 0;
|
||||||
AudioRegionView* rview = 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 */
|
/* first see if we already have a CrossfadeView for this Crossfade */
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -94,6 +94,7 @@ class AudioStreamView : public StreamView
|
||||||
void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
|
void playlist_changed (boost::shared_ptr<ARDOUR::Diskstream>);
|
||||||
|
|
||||||
void add_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
|
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 remove_crossfade (boost::shared_ptr<ARDOUR::Crossfade>);
|
||||||
|
|
||||||
void color_handler (ColorID id, uint32_t val);
|
void color_handler (ColorID id, uint32_t val);
|
||||||
|
|
|
||||||
|
|
@ -73,7 +73,7 @@ AutomationTimeAxisView::AutomationTimeAxisView (Session& s, boost::shared_ptr<Ro
|
||||||
base_rect = new SimpleRect(*canvas_display);
|
base_rect = new SimpleRect(*canvas_display);
|
||||||
base_rect->property_x1() = 0.0;
|
base_rect->property_x1() = 0.0;
|
||||||
base_rect->property_y1() = 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];
|
base_rect->property_outline_color_rgba() = color_map[cAutomationTrackOutline];
|
||||||
/* outline ends and bottom */
|
/* outline ends and bottom */
|
||||||
base_rect->property_outline_what() = (guint32) (0x1|0x2|0x8);
|
base_rect->property_outline_what() = (guint32) (0x1|0x2|0x8);
|
||||||
|
|
|
||||||
|
|
@ -27,7 +27,7 @@
|
||||||
|
|
||||||
#include <pbd/convert.h>
|
#include <pbd/convert.h>
|
||||||
#include <pbd/error.h>
|
#include <pbd/error.h>
|
||||||
#include <pbd/stacktrace.h>
|
#include <pbd/enumwriter.h>
|
||||||
#include <pbd/memento_command.h>
|
#include <pbd/memento_command.h>
|
||||||
|
|
||||||
#include <glibmm/miscutils.h>
|
#include <glibmm/miscutils.h>
|
||||||
|
|
@ -2042,6 +2042,10 @@ Editor::set_state (const XMLNode& node)
|
||||||
edit_cursor->set_position (0);
|
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"))) {
|
if ((prop = node.property ("zoom-focus"))) {
|
||||||
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
|
set_zoom_focus ((ZoomFocus) atoi (prop->value()));
|
||||||
}
|
}
|
||||||
|
|
@ -2182,6 +2186,8 @@ Editor::get_state ()
|
||||||
node->add_child_nocopy (*geometry);
|
node->add_child_nocopy (*geometry);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
maybe_add_mixer_strip_width (*node);
|
||||||
|
|
||||||
snprintf (buf, sizeof(buf), "%d", (int) zoom_focus);
|
snprintf (buf, sizeof(buf), "%d", (int) zoom_focus);
|
||||||
node->add_property ("zoom-focus", buf);
|
node->add_property ("zoom-focus", buf);
|
||||||
snprintf (buf, sizeof(buf), "%f", frames_per_unit);
|
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 {
|
struct EditorOrderTimeAxisSorter {
|
||||||
|
|
|
||||||
|
|
@ -264,6 +264,7 @@ class Editor : public PublicEditor
|
||||||
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
|
TrackViewList* get_valid_views (TimeAxisView*, ARDOUR::RouteGroup* grp = 0);
|
||||||
|
|
||||||
Width editor_mixer_strip_width;
|
Width editor_mixer_strip_width;
|
||||||
|
void maybe_add_mixer_strip_width (XMLNode&);
|
||||||
void show_editor_mixer (bool yn);
|
void show_editor_mixer (bool yn);
|
||||||
void set_selected_mixer_strip (TimeAxisView&);
|
void set_selected_mixer_strip (TimeAxisView&);
|
||||||
void hide_track_in_display (TimeAxisView& tv);
|
void hide_track_in_display (TimeAxisView& tv);
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,9 @@
|
||||||
#include <glibmm/miscutils.h>
|
#include <glibmm/miscutils.h>
|
||||||
#include <gtkmm2ext/utils.h>
|
#include <gtkmm2ext/utils.h>
|
||||||
#include <gtkmm2ext/window_title.h>
|
#include <gtkmm2ext/window_title.h>
|
||||||
|
|
||||||
|
#include <pbd/enumwriter.h>
|
||||||
|
|
||||||
#include <ardour/audioengine.h>
|
#include <ardour/audioengine.h>
|
||||||
|
|
||||||
#include "editor.h"
|
#include "editor.h"
|
||||||
|
|
@ -32,6 +35,7 @@
|
||||||
#include "i18n.h"
|
#include "i18n.h"
|
||||||
|
|
||||||
using namespace Gtkmm2ext;
|
using namespace Gtkmm2ext;
|
||||||
|
using namespace PBD;
|
||||||
|
|
||||||
void
|
void
|
||||||
Editor::editor_mixer_button_toggled ()
|
Editor::editor_mixer_button_toggled ()
|
||||||
|
|
@ -107,8 +111,8 @@ Editor::show_editor_mixer (bool yn)
|
||||||
current_mixer_strip->set_embedded (true);
|
current_mixer_strip->set_embedded (true);
|
||||||
current_mixer_strip->Hiding.connect (mem_fun(*this, &Editor::current_mixer_strip_hidden));
|
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->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.pack_start (*current_mixer_strip, Gtk::PACK_SHRINK );
|
||||||
global_hpacker.reorder_child (*current_mixer_strip, 0);
|
global_hpacker.reorder_child (*current_mixer_strip, 0);
|
||||||
|
|
||||||
|
|
@ -355,3 +359,11 @@ Editor::session_going_away ()
|
||||||
|
|
||||||
session = 0;
|
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()));
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
|
||||||
|
|
@ -1622,7 +1622,6 @@ Editor::end_grab (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
stop_canvas_autoscroll ();
|
stop_canvas_autoscroll ();
|
||||||
|
|
||||||
if (drag_info.item == 0) {
|
if (drag_info.item == 0) {
|
||||||
cerr << "end grab with no item\n";
|
|
||||||
return false;
|
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
|
drag_info.want_move_threshold = false; // don't copy again
|
||||||
|
|
||||||
/* duplicate the region(s) */
|
/* duplicate the region(s) */
|
||||||
|
|
||||||
vector<RegionView*> new_regionviews;
|
vector<RegionView*> new_regionviews;
|
||||||
|
|
||||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ++i) {
|
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 */
|
/* reset drag_info data to reflect the fact that we are dragging the copies */
|
||||||
|
|
||||||
drag_info.data = new_regionviews.front();
|
drag_info.data = new_regionviews.front();
|
||||||
|
|
||||||
swap_grab (new_regionviews.front()->get_canvas_group (), 0, event->motion.time);
|
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;
|
RouteTimeAxisView* rtv;
|
||||||
bool regionview_y_movement;
|
bool regionview_y_movement;
|
||||||
bool regionview_x_movement;
|
bool regionview_x_movement;
|
||||||
|
vector<RegionView*> copies;
|
||||||
|
|
||||||
/* first_move is set to false if the regionview has been moved in the
|
/* first_move is set to false if the regionview has been moved in the
|
||||||
motion handler.
|
motion handler.
|
||||||
|
|
@ -3244,6 +3244,12 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
if (drag_info.first_move) {
|
if (drag_info.first_move) {
|
||||||
/* just a click */
|
/* 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;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3257,6 +3263,13 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
|
|
||||||
if (drag_info.brushing) {
|
if (drag_info.brushing) {
|
||||||
/* all changes were made during motion event handlers */
|
/* 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;
|
goto out;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -3299,7 +3312,7 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
vector<RegionView*> new_selection;
|
vector<RegionView*> new_selection;
|
||||||
|
|
||||||
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
|
for (list<RegionView*>::const_iterator i = selection->regions.by_layer().begin(); i != selection->regions.by_layer().end(); ) {
|
||||||
|
|
||||||
RegionView* rv = (*i);
|
RegionView* rv = (*i);
|
||||||
|
|
||||||
double ix1, ix2, iy1, iy2;
|
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));
|
session->add_command (new MementoCommand<Playlist>(*from_playlist, &from_playlist->get_state(), 0));
|
||||||
from_playlist->remove_region ((rv->region()));
|
from_playlist->remove_region ((rv->region()));
|
||||||
session->add_command (new MementoCommand<Playlist>(*from_playlist, 0, &from_playlist->get_state()));
|
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;
|
latest_regionview = 0;
|
||||||
|
|
@ -3349,11 +3368,6 @@ Editor::region_drag_finished_callback (ArdourCanvas::Item* item, GdkEvent* event
|
||||||
new_selection.push_back (latest_regionview);
|
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
|
/* 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
|
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,
|
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
|
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
|
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.
|
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()) {
|
if (drag_info.copy) {
|
||||||
break;
|
++i;
|
||||||
} else {
|
} else {
|
||||||
i = selection->regions.by_layer().begin();
|
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()));
|
session->add_command (new MementoCommand<Playlist>(*to_playlist, 0, &to_playlist->get_state()));
|
||||||
|
|
||||||
/* get rid of the copy */
|
|
||||||
|
|
||||||
if (drag_info.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) {
|
if (!nocommit) {
|
||||||
commit_reversible_command ();
|
commit_reversible_command ();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
for (vector<RegionView*>::iterator x = copies.begin(); x != copies.end(); ++x) {
|
||||||
|
delete *x;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
@ -4764,7 +4787,7 @@ Editor::mouse_rename_region (ArdourCanvas::Item* item, GdkEvent* event)
|
||||||
string str;
|
string str;
|
||||||
prompter.get_result(str);
|
prompter.get_result(str);
|
||||||
if (str.length()) {
|
if (str.length()) {
|
||||||
clicked_regionview->region()->set_name (str);
|
clicked_regionview->region()->set_name (str);
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -20,6 +20,7 @@
|
||||||
#include <pbd/enumwriter.h>
|
#include <pbd/enumwriter.h>
|
||||||
|
|
||||||
#include "audio_clock.h"
|
#include "audio_clock.h"
|
||||||
|
#include "enums.h"
|
||||||
|
|
||||||
using namespace std;
|
using namespace std;
|
||||||
using namespace PBD;
|
using namespace PBD;
|
||||||
|
|
@ -33,6 +34,7 @@ setup_gtk_ardour_enums ()
|
||||||
vector<string> s;
|
vector<string> s;
|
||||||
|
|
||||||
AudioClock::Mode clock_mode;
|
AudioClock::Mode clock_mode;
|
||||||
|
Width width;
|
||||||
|
|
||||||
#define REGISTER(e) enum_writer.register_distinct (typeid(e).name(), i, s); i.clear(); s.clear()
|
#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()
|
#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, Frames);
|
||||||
REGISTER_CLASS_ENUM (AudioClock, Off);
|
REGISTER_CLASS_ENUM (AudioClock, Off);
|
||||||
REGISTER (clock_mode);
|
REGISTER (clock_mode);
|
||||||
|
|
||||||
|
REGISTER_ENUM (Wide);
|
||||||
|
REGISTER_ENUM (Narrow);
|
||||||
|
REGISTER (width);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -22,6 +22,7 @@
|
||||||
#include <sigc++/bind.h>
|
#include <sigc++/bind.h>
|
||||||
|
|
||||||
#include <pbd/convert.h>
|
#include <pbd/convert.h>
|
||||||
|
#include <pbd/enumwriter.h>
|
||||||
|
|
||||||
#include <gtkmm2ext/gtk_ui.h>
|
#include <gtkmm2ext/gtk_ui.h>
|
||||||
#include <gtkmm2ext/utils.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;
|
ignore_speed_adjustment = false;
|
||||||
comment_window = 0;
|
comment_window = 0;
|
||||||
comment_area = 0;
|
comment_area = 0;
|
||||||
|
_width_owner = 0;
|
||||||
|
|
||||||
width_button.add (*(manage (new Gtk::Image (::get_icon("strip_width")))));
|
width_button.add (*(manage (new Gtk::Image (::get_icon("strip_width")))));
|
||||||
hide_button.add (*(manage (new Gtk::Image (::get_icon("hide")))));
|
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_col_spacings (0);
|
||||||
bottom_button_table.set_homogeneous (true);
|
bottom_button_table.set_homogeneous (true);
|
||||||
bottom_button_table.attach (group_button, 0, 1, 0, 1);
|
bottom_button_table.attach (group_button, 0, 1, 0, 1);
|
||||||
|
|
||||||
if (is_audio_track()) {
|
if (is_audio_track()) {
|
||||||
|
|
||||||
rec_enable_button->signal_button_press_event().connect (mem_fun(*this, &RouteUI::rec_enable_press), false);
|
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 ()
|
MixerStrip::set_stuff_from_route ()
|
||||||
{
|
{
|
||||||
XMLProperty *prop;
|
XMLProperty *prop;
|
||||||
|
|
||||||
ensure_xml_node ();
|
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 = xml_node->property ("strip_width")) != 0) {
|
||||||
if (prop->value() == "wide") {
|
set_width (Width (string_2_enum (prop->value(), _width)), this);
|
||||||
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);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if ((prop = xml_node->property ("shown_mixer")) != 0) {
|
if ((prop = xml_node->property ("shown_mixer")) != 0) {
|
||||||
|
|
@ -397,14 +390,17 @@ MixerStrip::set_stuff_from_route ()
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
MixerStrip::set_width (Width w)
|
MixerStrip::set_width (Width w, void* owner)
|
||||||
{
|
{
|
||||||
/* always set the gpm width again, things may be hidden */
|
/* always set the gpm width again, things may be hidden */
|
||||||
|
|
||||||
gpm.set_width (w);
|
gpm.set_width (w);
|
||||||
panners.set_width (w);
|
panners.set_width (w);
|
||||||
pre_redirect_box.set_width (w);
|
pre_redirect_box.set_width (w);
|
||||||
post_redirect_box.set_width (w);
|
post_redirect_box.set_width (w);
|
||||||
|
|
||||||
|
_width_owner = owner;
|
||||||
|
|
||||||
if (_width == w) {
|
if (_width == w) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -412,11 +408,14 @@ MixerStrip::set_width (Width w)
|
||||||
ensure_xml_node ();
|
ensure_xml_node ();
|
||||||
|
|
||||||
_width = w;
|
_width = w;
|
||||||
|
|
||||||
|
if (_width_owner == this) {
|
||||||
|
xml_node->add_property ("strip_width", enum_2_string (_width));
|
||||||
|
}
|
||||||
|
|
||||||
switch (w) {
|
switch (w) {
|
||||||
case Wide:
|
case Wide:
|
||||||
set_size_request (-1, -1);
|
set_size_request (-1, -1);
|
||||||
xml_node->add_property ("strip_width", "wide");
|
|
||||||
|
|
||||||
if (rec_enable_button) {
|
if (rec_enable_button) {
|
||||||
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("record"));
|
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("record"));
|
||||||
|
|
@ -440,8 +439,6 @@ MixerStrip::set_width (Width w)
|
||||||
break;
|
break;
|
||||||
|
|
||||||
case Narrow:
|
case Narrow:
|
||||||
xml_node->add_property ("strip_width", "narrow");
|
|
||||||
|
|
||||||
if (rec_enable_button) {
|
if (rec_enable_button) {
|
||||||
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Rec"));
|
((Gtk::Label*)rec_enable_button->get_child())->set_text (_("Rec"));
|
||||||
}
|
}
|
||||||
|
|
@ -562,7 +559,7 @@ MixerStrip::input_press (GdkEventButton *ev)
|
||||||
msg.run ();
|
msg.run ();
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
switch (ev->button) {
|
switch (ev->button) {
|
||||||
|
|
||||||
case 1:
|
case 1:
|
||||||
|
|
@ -691,7 +688,7 @@ void
|
||||||
MixerStrip::connect_to_pan ()
|
MixerStrip::connect_to_pan ()
|
||||||
{
|
{
|
||||||
ENSURE_GUI_THREAD(mem_fun(*this, &MixerStrip::connect_to_pan));
|
ENSURE_GUI_THREAD(mem_fun(*this, &MixerStrip::connect_to_pan));
|
||||||
|
|
||||||
panstate_connection.disconnect ();
|
panstate_connection.disconnect ();
|
||||||
panstyle_connection.disconnect ();
|
panstyle_connection.disconnect ();
|
||||||
|
|
||||||
|
|
@ -772,7 +769,8 @@ MixerStrip::output_changed (IOChange change, void *src)
|
||||||
|
|
||||||
|
|
||||||
void
|
void
|
||||||
MixerStrip::comment_editor_done_editing() {
|
MixerStrip::comment_editor_done_editing()
|
||||||
|
{
|
||||||
string str = comment_area->get_buffer()->get_text();
|
string str = comment_area->get_buffer()->get_text();
|
||||||
if (_route->comment() != str) {
|
if (_route->comment() != str) {
|
||||||
_route->set_comment (str, this);
|
_route->set_comment (str, this);
|
||||||
|
|
@ -972,12 +970,11 @@ void
|
||||||
MixerStrip::build_route_ops_menu ()
|
MixerStrip::build_route_ops_menu ()
|
||||||
{
|
{
|
||||||
using namespace Menu_Helpers;
|
using namespace Menu_Helpers;
|
||||||
|
|
||||||
route_ops_menu = manage (new Menu);
|
route_ops_menu = manage (new Menu);
|
||||||
route_ops_menu->set_name ("ArdourContextMenu");
|
route_ops_menu->set_name ("ArdourContextMenu");
|
||||||
|
|
||||||
MenuList& items = route_ops_menu->items();
|
MenuList& items = route_ops_menu->items();
|
||||||
|
|
||||||
items.push_back (MenuElem (_("Rename"), mem_fun(*this, &RouteUI::route_rename)));
|
items.push_back (MenuElem (_("Rename"), mem_fun(*this, &RouteUI::route_rename)));
|
||||||
items.push_back (SeparatorElem());
|
items.push_back (SeparatorElem());
|
||||||
items.push_back (CheckMenuElem (_("Active"), mem_fun (*this, &RouteUI::toggle_route_active)));
|
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) {
|
if (ev->button == 1) {
|
||||||
list_route_operations ();
|
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);
|
route_ops_menu->popup (1, ev->time);
|
||||||
}
|
}
|
||||||
return FALSE;
|
return FALSE;
|
||||||
|
|
@ -1089,10 +1091,10 @@ MixerStrip::width_clicked ()
|
||||||
{
|
{
|
||||||
switch (_width) {
|
switch (_width) {
|
||||||
case Wide:
|
case Wide:
|
||||||
set_width (Narrow);
|
set_width (Narrow, this);
|
||||||
break;
|
break;
|
||||||
case Narrow:
|
case Narrow:
|
||||||
set_width (Wide);
|
set_width (Wide, this);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -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 (Mixer_UI&, ARDOUR::Session&, boost::shared_ptr<ARDOUR::Route>, bool in_mixer = true);
|
||||||
~MixerStrip ();
|
~MixerStrip ();
|
||||||
|
|
||||||
void set_width (Width);
|
void set_width (Width, void* owner);
|
||||||
Width get_width() const { return _width; }
|
Width get_width() const { return _width; }
|
||||||
|
void* width_owner() const { return _width_owner; }
|
||||||
|
|
||||||
void fast_update ();
|
void fast_update ();
|
||||||
void set_embedded (bool);
|
void set_embedded (bool);
|
||||||
|
|
||||||
ARDOUR::RouteGroup* mix_group() const;
|
ARDOUR::RouteGroup* mix_group() const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
@ -107,6 +108,7 @@ class MixerStrip : public RouteUI, public Gtk::EventBox
|
||||||
bool _embedded;
|
bool _embedded;
|
||||||
bool _packed;
|
bool _packed;
|
||||||
Width _width;
|
Width _width;
|
||||||
|
void* _width_owner;
|
||||||
|
|
||||||
Gtk::Button hide_button;
|
Gtk::Button hide_button;
|
||||||
Gtk::Button width_button;
|
Gtk::Button width_button;
|
||||||
|
|
|
||||||
|
|
@ -244,7 +244,7 @@ Mixer_UI::show_window ()
|
||||||
|
|
||||||
for (ri = rows.begin(); ri != rows.end(); ++ri) {
|
for (ri = rows.begin(); ri != rows.end(); ++ri) {
|
||||||
ms = (*ri)[track_columns.strip];
|
ms = (*ri)[track_columns.strip];
|
||||||
ms->set_width (ms->get_width());
|
ms->set_width (ms->get_width(), ms->width_owner());
|
||||||
}
|
}
|
||||||
_visible = true;
|
_visible = true;
|
||||||
}
|
}
|
||||||
|
|
@ -274,7 +274,10 @@ Mixer_UI::add_strip (Session::RouteList& routes)
|
||||||
strip = new MixerStrip (*this, *session, route);
|
strip = new MixerStrip (*this, *session, route);
|
||||||
strips.push_back (strip);
|
strips.push_back (strip);
|
||||||
|
|
||||||
strip->set_width (_strip_width);
|
if (strip->width_owner() != strip) {
|
||||||
|
strip->set_width (_strip_width, this);
|
||||||
|
}
|
||||||
|
|
||||||
show_strip (strip);
|
show_strip (strip);
|
||||||
|
|
||||||
no_track_list_redisplay = true;
|
no_track_list_redisplay = true;
|
||||||
|
|
@ -1040,7 +1043,7 @@ Mixer_UI::set_strip_width (Width w)
|
||||||
_strip_width = w;
|
_strip_width = w;
|
||||||
|
|
||||||
for (list<MixerStrip*>::iterator i = strips.begin(); i != strips.end(); ++i) {
|
for (list<MixerStrip*>::iterator i = strips.begin(); i != strips.end(); ++i) {
|
||||||
(*i)->set_width (w);
|
(*i)->set_width (w, this);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -575,7 +575,12 @@ int
|
||||||
NewSessionDialog::get_current_page()
|
NewSessionDialog::get_current_page()
|
||||||
{
|
{
|
||||||
return m_notebook->get_current_page();
|
return m_notebook->get_current_page();
|
||||||
|
}
|
||||||
|
|
||||||
|
void
|
||||||
|
NewSessionDialog::set_current_page(int page)
|
||||||
|
{
|
||||||
|
return m_notebook->set_current_page (page);
|
||||||
}
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
|
|
|
||||||
|
|
@ -82,6 +82,7 @@ public:
|
||||||
bool connect_outs_to_master() const;
|
bool connect_outs_to_master() const;
|
||||||
bool connect_outs_to_physical() const ;
|
bool connect_outs_to_physical() const ;
|
||||||
int get_current_page();
|
int get_current_page();
|
||||||
|
void set_current_page (int);
|
||||||
void reset_recent();
|
void reset_recent();
|
||||||
|
|
||||||
// reset everything to default values.
|
// reset everything to default values.
|
||||||
|
|
|
||||||
|
|
@ -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());
|
||||||
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -159,6 +159,8 @@ protected:
|
||||||
void route_name_changed (void *);
|
void route_name_changed (void *);
|
||||||
void name_entry_changed ();
|
void name_entry_changed ();
|
||||||
|
|
||||||
|
void update_rec_display ();
|
||||||
|
|
||||||
virtual void label_view ();
|
virtual void label_view ();
|
||||||
|
|
||||||
void add_edit_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
|
void add_edit_group_menu_item (ARDOUR::RouteGroup *, Gtk::RadioMenuItem::Group*);
|
||||||
|
|
|
||||||
|
|
@ -148,7 +148,7 @@ class RouteUI : public virtual AxisView
|
||||||
void disconnect_input ();
|
void disconnect_input ();
|
||||||
void disconnect_output ();
|
void disconnect_output ();
|
||||||
|
|
||||||
void update_rec_display ();
|
virtual void update_rec_display ();
|
||||||
void update_mute_display ();
|
void update_mute_display ();
|
||||||
|
|
||||||
bool was_solo_safe;
|
bool was_solo_safe;
|
||||||
|
|
|
||||||
|
|
@ -112,16 +112,16 @@ StreamView::set_height (gdouble h)
|
||||||
return -1;
|
return -1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (canvas_rect->property_y2() == h) {
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
canvas_rect->property_y2() = h;
|
canvas_rect->property_y2() = h;
|
||||||
|
|
||||||
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
for (RegionViewList::iterator i = region_views.begin(); i != region_views.end(); ++i) {
|
||||||
(*i)->set_height (h);
|
(*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) {
|
for (vector<RecBoxInfo>::iterator i = rec_rects.begin(); i != rec_rects.end(); ++i) {
|
||||||
RecBoxInfo &recbox = (*i);
|
RecBoxInfo &recbox = (*i);
|
||||||
recbox.rectangle->property_y2() = h - 1.0;
|
recbox.rectangle->property_y2() = h - 1.0;
|
||||||
|
|
|
||||||
|
|
@ -18,6 +18,7 @@
|
||||||
*/
|
*/
|
||||||
|
|
||||||
#include <pbd/error.h>
|
#include <pbd/error.h>
|
||||||
|
#include <pbd/stacktrace.h>
|
||||||
|
|
||||||
#include <ardour/types.h>
|
#include <ardour/types.h>
|
||||||
#include <ardour/ardour.h>
|
#include <ardour/ardour.h>
|
||||||
|
|
@ -571,7 +572,7 @@ TimeAxisViewItem::set_name_text(const ustring& new_name)
|
||||||
* @param h the new height
|
* @param h the new height
|
||||||
*/
|
*/
|
||||||
void
|
void
|
||||||
TimeAxisViewItem::set_height(double height)
|
TimeAxisViewItem::set_height (double height)
|
||||||
{
|
{
|
||||||
if (name_highlight) {
|
if (name_highlight) {
|
||||||
if (height < NAME_HIGHLIGHT_THRESH) {
|
if (height < NAME_HIGHLIGHT_THRESH) {
|
||||||
|
|
@ -975,8 +976,7 @@ TimeAxisViewItem::reset_name_width (double pixel_width)
|
||||||
}
|
}
|
||||||
|
|
||||||
if (n == 0) {
|
if (n == 0) {
|
||||||
/* nothing will fit */
|
name_text->property_text() = "";
|
||||||
name_text->hide ();
|
|
||||||
last_name_text_width = pixel_width;
|
last_name_text_width = pixel_width;
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -30,6 +30,7 @@
|
||||||
#include <ardour/crossfade.h>
|
#include <ardour/crossfade.h>
|
||||||
#include <ardour/crossfade_compare.h>
|
#include <ardour/crossfade_compare.h>
|
||||||
#include <ardour/session.h>
|
#include <ardour/session.h>
|
||||||
|
#include <pbd/enumwriter.h>
|
||||||
|
|
||||||
#include "i18n.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());
|
OverlapType c = top->coverage (bottom->position(), bottom->last_frame());
|
||||||
|
|
||||||
try {
|
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));
|
xfade = boost::shared_ptr<Crossfade> (new Crossfade (top, bottom, xfade_length, top->first_frame(), StartOfIn));
|
||||||
add_crossfade (xfade);
|
add_crossfade (xfade);
|
||||||
|
|
||||||
if (top_region_at (top->last_frame() - 1) == top) {
|
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
|
only add a fade out if there is no region on top of the end of 'top' (which
|
||||||
|
|
|
||||||
|
|
@ -764,6 +764,7 @@ AudioEngine::halted (void *arg)
|
||||||
ae->_running = false;
|
ae->_running = false;
|
||||||
ae->_buffer_size = 0;
|
ae->_buffer_size = 0;
|
||||||
ae->_frame_rate = 0;
|
ae->_frame_rate = 0;
|
||||||
|
ae->_jack = 0;
|
||||||
|
|
||||||
ae->Halted(); /* EMIT SIGNAL */
|
ae->Halted(); /* EMIT SIGNAL */
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -97,6 +97,7 @@ ControlProtocolManager::drop_session ()
|
||||||
for (list<ControlProtocolInfo*>::iterator p = control_protocol_info.begin(); p != control_protocol_info.end(); ++p) {
|
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
|
// otherwise the ControlProtocol instances are not recreated in set_session
|
||||||
(*p)->requested = true;
|
(*p)->requested = true;
|
||||||
|
(*p)->protocol = 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -424,7 +424,7 @@ PluginInsert::automation_run (BufferSet& bufs, nframes_t nframes, nframes_t offs
|
||||||
|
|
||||||
while (nframes) {
|
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);
|
connect_and_run (bufs, cnt, offset, true, now);
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -81,8 +81,9 @@ Session::memento_command_factory(XMLNode *n)
|
||||||
/* create command */
|
/* create command */
|
||||||
string obj_T = n->property ("type_name")->value();
|
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 (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);
|
return new MementoCommand<Region>(*regions[id], before, after);
|
||||||
|
}
|
||||||
} else if (obj_T == typeid (AudioSource).name() || obj_T == typeid (MidiSource).name()) {
|
} else if (obj_T == typeid (AudioSource).name() || obj_T == typeid (MidiSource).name()) {
|
||||||
if (sources.count(id))
|
if (sources.count(id))
|
||||||
return new MementoCommand<Source>(*sources[id], before, after);
|
return new MementoCommand<Source>(*sources[id], before, after);
|
||||||
|
|
@ -107,6 +108,7 @@ Session::memento_command_factory(XMLNode *n)
|
||||||
|
|
||||||
/* we failed */
|
/* we failed */
|
||||||
error << string_compose (_("could not reconstitute MementoCommand from XMLNode. object type = %1 id = %2"), obj_T, id.to_s()) << endmsg;
|
error << string_compose (_("could not reconstitute MementoCommand from XMLNode. object type = %1 id = %2"), obj_T, id.to_s()) << endmsg;
|
||||||
|
|
||||||
return 0 ;
|
return 0 ;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -708,7 +708,7 @@ Session::save_state (string snapshot_name, bool pending)
|
||||||
tmp_path += snapshot_name;
|
tmp_path += snapshot_name;
|
||||||
tmp_path += ".tmp";
|
tmp_path += ".tmp";
|
||||||
|
|
||||||
cerr << "actually writing state to " << xml_path << endl;
|
// cerr << "actually writing state to " << xml_path << endl;
|
||||||
|
|
||||||
if (!tree.write (tmp_path)) {
|
if (!tree.write (tmp_path)) {
|
||||||
error << string_compose (_("state could not be saved to %1"), tmp_path) << endmsg;
|
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 += snapshot_name;
|
||||||
xmlpath += _pending_suffix;
|
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 */
|
/* there is pending state from a crashed capture attempt */
|
||||||
|
|
||||||
|
|
@ -785,8 +785,8 @@ Session::load_state (string snapshot_name)
|
||||||
xmlpath += snapshot_name;
|
xmlpath += snapshot_name;
|
||||||
xmlpath += _statefile_suffix;
|
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;
|
error << string_compose(_("%1: session state information file \"%2\" doesn't exist!"), _name, xmlpath) << endmsg;
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
@ -828,8 +828,10 @@ Session::load_state (string snapshot_name)
|
||||||
if (is_old) {
|
if (is_old) {
|
||||||
string backup_path;
|
string backup_path;
|
||||||
|
|
||||||
backup_path = xmlpath;
|
backup_path = _path;
|
||||||
backup_path += ".1";
|
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"),
|
info << string_compose (_("Copying old session file %1 to %2\nUse %2 with Ardour versions before 2.0 from now on"),
|
||||||
xmlpath, backup_path)
|
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);
|
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;
|
return buf;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -1,4 +1,4 @@
|
||||||
#ifndef __ardour_svn_revision_h__
|
#ifndef __ardour_svn_revision_h__
|
||||||
#define __ardour_svn_revision_h__
|
#define __ardour_svn_revision_h__
|
||||||
static const char* ardour_svn_revision = "1681";
|
static const char* ardour_svn_revision = "1745";
|
||||||
#endif
|
#endif
|
||||||
|
|
|
||||||
|
|
@ -448,6 +448,7 @@ style "editor_hscrollbar" = "ardour_adjusters"
|
||||||
# make it bigger.
|
# make it bigger.
|
||||||
#
|
#
|
||||||
GtkRange::slider_width = 27
|
GtkRange::slider_width = 27
|
||||||
|
GtkScrollbar::slider_width = 27
|
||||||
}
|
}
|
||||||
|
|
||||||
style "ardour_progressbars" = "default_buttons_menus"
|
style "ardour_progressbars" = "default_buttons_menus"
|
||||||
|
|
|
||||||
|
|
@ -111,6 +111,7 @@ class Data(object):
|
||||||
sessions[session_name]['collabs'][collab_name]['sounds'] = []
|
sessions[session_name]['collabs'][collab_name]['sounds'] = []
|
||||||
sessions[session_name]['collabs'][collab_name]['ip'] = ip_address
|
sessions[session_name]['collabs'][collab_name]['ip'] = ip_address
|
||||||
sessions[session_name]['collabs'][collab_name]['port'] = port
|
sessions[session_name]['collabs'][collab_name]['port'] = port
|
||||||
|
sessions[session_name]['collabs'][collab_name]['v2paths'] = true
|
||||||
self._data['sessions'] = sessions
|
self._data['sessions'] = sessions
|
||||||
|
|
||||||
client = ExchangeClientFactory(session_name, collab_name, None, self.debug_mode)
|
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']] = {}
|
||||||
sessions[session_name]['collabs'][self._data['user']]['snaps'] = []
|
sessions[session_name]['collabs'][self._data['user']]['snaps'] = []
|
||||||
sessions[session_name]['collabs'][self._data['user']]['sounds'] = []
|
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
|
self._data['sessions'] = sessions
|
||||||
|
|
||||||
|
|
@ -150,7 +155,8 @@ class Data(object):
|
||||||
def create_session(self, session_path):
|
def create_session(self, session_path):
|
||||||
try:
|
try:
|
||||||
os.mkdir(session_path)
|
os.mkdir(session_path)
|
||||||
os.mkdir(session_path+"/sounds")
|
os.mkdir(os.path.join (session_path,'interchange',session_name,'audiofiles'))
|
||||||
|
|
||||||
except OSError:
|
except OSError:
|
||||||
raise_error("Could not create session directory", g_display.window)
|
raise_error("Could not create session directory", g_display.window)
|
||||||
return
|
return
|
||||||
|
|
@ -230,7 +236,10 @@ class Data(object):
|
||||||
|
|
||||||
def _scan_sounds(self, session):
|
def _scan_sounds(self, session):
|
||||||
sounds = []
|
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$')
|
pattern = re.compile(r'\.peak$')
|
||||||
for file in files:
|
for file in files:
|
||||||
if not pattern.search(file):
|
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.
|
#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 = gtk.ItemFactory(gtk.MenuBar, '<main>', accel_group)
|
||||||
self.item_factory.create_items(menu_items, self.window)
|
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()
|
pane1 = gtk.HPaned()
|
||||||
pane2 = gtk.HPaned()
|
pane2 = gtk.HPaned()
|
||||||
pane1.pack2(pane2, gtk.TRUE, gtk.FALSE)
|
pane1.pack2(pane2, True, False)
|
||||||
|
|
||||||
scroll1 = gtk.ScrolledWindow()
|
scroll1 = gtk.ScrolledWindow()
|
||||||
scroll1.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
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 = gtk.ScrolledWindow()
|
||||||
scroll2.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
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 = gtk.ScrolledWindow()
|
||||||
scroll3.set_policy(gtk.POLICY_AUTOMATIC, gtk.POLICY_AUTOMATIC)
|
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)
|
self.session_model = gtk.ListStore(gobject.TYPE_STRING)
|
||||||
view1 = gtk.TreeView(self.session_model)
|
view1 = gtk.TreeView(self.session_model)
|
||||||
|
|
@ -797,10 +806,10 @@ class ArdourShareWindow(object):
|
||||||
self.snap_selection.connect("changed", self.cb_snap_selection_changed)
|
self.snap_selection.connect("changed", self.cb_snap_selection_changed)
|
||||||
scroll3.add(view3)
|
scroll3.add(view3)
|
||||||
|
|
||||||
main_box.pack_start(pane1, gtk.TRUE, gtk.TRUE)
|
main_box.pack_start(pane1, True, True)
|
||||||
|
|
||||||
self.status_bar = gtk.Statusbar()
|
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_cid = self.status_bar.get_context_id('display')
|
||||||
self._status_mid = ''
|
self._status_mid = ''
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue