#include "mainsession.h"
#include "mainundo.h"
#include "mbuttons.h"
+#include "mixersalign.h"
#include "mutex.h"
#include "mwindowgui.h"
#include "mwindow.h"
speed_edl = 0;
proxy_beep = 0;
shuttle = 0;
+ mixers_align = 0;
}
run_lock->lock("MWindow::~MWindow");
in_destructor = 1;
//printf("MWindow::~MWindow %d\n", __LINE__);
+ if( wwindow && wwindow->is_running() )
+ wwindow->close_window();
+ if( twindow && twindow->is_running() )
+ twindow->close_window();
gui->remote_control->deactivate();
gui->record->stop();
#ifdef HAVE_DVB
delete shuttle; shuttle = 0;
delete batch_render; batch_render = 0;
delete render; render = 0;
+ delete mixers_align; mixers_align = 0;
commit_commercial();
if( commercials && !commercials->remove_user() ) commercials = 0;
close_mixers();
if( cwindow && cwindow->gui ) cwindow->gui->close(0);
if( lwindow && lwindow->gui ) lwindow->gui->close(0);
if( gwindow && gwindow->gui ) gwindow->gui->close(0);
- if( twindow && twindow->is_running() ) twindow->close_window();
- if( wwindow && wwindow->is_running() ) wwindow->close_window();
vwindows.remove_all_objects();
zwindows.remove_all_objects();
gui->close(0);
if( awindow ) awindow->join();
if( cwindow ) cwindow->join();
if( lwindow ) lwindow->join();
- if( twindow ) twindow->join();
- if( wwindow ) wwindow->join();
if( gwindow ) gwindow->join();
join();
#else
close_gui(cwindow);
close_gui(lwindow);
close_gui(gwindow);
- close_gui(twindow);
- close_gui(wwindow);
vwindows.remove_all_objects();
zwindows.remove_all_objects();
gui->close(0);
{
preferences = new Preferences;
preferences->load_defaults(defaults);
- const char *lv2_path = getenv("LV2_PATH");
- if( lv2_path && strcmp(lv2_path, preferences->lv2_path) ) {
- strncpy(preferences->lv2_path, lv2_path, sizeof(preferences->lv2_path));
- remove_plugin_index();
- }
- else if( !lv2_path && preferences->lv2_path[0] ) {
- File::setenv_path("LV2_PATH",preferences->lv2_path, 0);
- }
+ File::setenv_path("LV2_PATH",preferences->lv2_path, 1);
session = new MainSession(this);
session->load_defaults(defaults);
// set x11_host, screens, window_config
zwindows_lock->lock("MWindow::get_mixer");
if( !mixer ) mixer = edl->mixers.new_mixer();
ZWindow *zwindow = 0;
- for( int i=0; !zwindow && i<zwindows.size(); ++i )
- if( zwindows[i]->idx < 0 ) zwindow = zwindows[i];
+ for( int i=0; !zwindow && i<zwindows.size(); ++i ) {
+ ZWindow *zwdw = zwindows[i];
+ if( zwdw->running() ) continue;
+ if( zwdw->idx >= 0 ) continue;
+ zwindow = zwindows[i];
+ }
if( !zwindow )
zwindows.append(zwindow = new ZWindow(this));
zwindow->idx = mixer->idx;
for( int i=zwindows.size(); --i>=0; ) {
ZWindow *zwindow = zwindows[i];
if( zwindow->idx < 0 ) continue;
+ zwindow->idx = -1;
zwindow->destroy = destroy;
ZWindowGUI *zgui = zwindow->zgui;
zgui->lock_window("MWindow::select_zwindow 0");
}
}
-ZWindow *MWindow::create_mixer(Indexable *indexable)
+ZWindow *MWindow::create_mixer(Indexable *indexable, double position)
{
ArrayList<Indexable*> new_assets;
new_assets.append(indexable);
Track *track = edl->tracks->last;
- load_assets(&new_assets, 0, LOADMODE_NEW_TRACKS, 0, 0, 0, 0, 0, 0);
+ load_assets(&new_assets, position, LOADMODE_NEW_TRACKS, 0, 0, 0, 0, 0, 0);
track = !track ? edl->tracks->first : track->next;
Mixer *mixer = 0;
ZWindow *zwindow = get_mixer(mixer);
return zwindow;
}
-void MWindow::create_mixers()
+void MWindow::create_mixers(double position)
{
if( !session->drag_assets->size() &&
!session->drag_clips->size() ) return;
for( int i=0; i<session->drag_assets->size(); ++i ) {
Indexable *indexable = session->drag_assets->get(i);
if( !indexable->have_video() ) continue;
- ZWindow *zwindow = create_mixer(indexable);
+ ZWindow *zwindow = create_mixer(indexable, position);
new_mixers.append(zwindow);
}
for( int i=0; i<session->drag_clips->size(); ++i ) {
Indexable *indexable = (Indexable*)session->drag_clips->get(i);
if( !indexable->have_video() ) continue;
- ZWindow *zwindow = create_mixer(indexable);
+ ZWindow *zwindow = create_mixer(indexable, position);
new_mixers.append(zwindow);
}
ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_NONE);
ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_UPONE);
ILACEFIXMETHODLISTADD(ILACE_FIXMETHOD_DOWNONE);
+
+ mixers_align = new MixersAlign(this);
}
void MWindow::init_indexes()
sprintf(string, _("Loading %s"), new_asset->path);
gui->show_message(string);
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
ftype = new_file->open_file(preferences, new_asset, 1, 0);
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
result = 1;
switch( ftype ) {
if( new_asset->video_data &&
((new_asset->width % 2) || (new_asset->height % 2)) ) {
char string[BCTEXTLEN];
- sprintf(string, _("%s's resolution is %dx%d.\nImages with odd dimensions may not decode properly."),
+ sprintf(string, _("%s's resolution is %dx%d.\n"
+ "Images with odd dimensions may not decode properly."),
new_asset->path, new_asset->width, new_asset->height);
MainError::show_error(string);
}
case FILE_IS_XML: {
FileXML xml_file;
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
xml_file.read_from_file(filenames->get(i));
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
const char *cin_version = 0;
while( !xml_file.read_tag() ) {
if( xml_file.tag.title_is("EDL") ) {
nested_edl->load_xml(&xml_file, LOAD_ALL);
int groups = nested_edl->regroup(session->group_number);
session->group_number += groups;
-//printf("MWindow::load_filenames %p %s\n", nested_edl, nested_edl->project_path);
new_edl->create_nested(nested_edl);
new_edl->set_path(filenames->get(i));
nested_edl->Garbage::remove_user();
new_edl->load_xml(&xml_file, LOAD_ALL);
int groups = new_edl->regroup(session->group_number);
session->group_number += groups;
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
test_plugins(new_edl, filenames->get(i));
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
if( load_mode == LOADMODE_REPLACE ||
load_mode == LOADMODE_REPLACE_CONCATENATE ) {
// Paste them.
// Don't back up here.
- if(new_edls.size())
- {
+ if( new_edls.size() ) {
// For pasting, clear the active region
- if(load_mode == LOADMODE_PASTE ||
- load_mode == LOADMODE_NESTED)
- {
+ if( load_mode == LOADMODE_PASTE ||
+ load_mode == LOADMODE_NESTED ) {
double start = edl->local_session->get_selectionstart();
double end = edl->local_session->get_selectionend();
if(!EQUIV(start, end))
- edl->clear(start,
- end,
+ edl->clear(start, end,
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits);
- }
- paste_edls(&new_edls, load_mode, 0, -1,
- edl->session->labels_follow_edits,
- edl->session->plugins_follow_edits,
- edl->session->autos_follow_edits,
- 0); // overwrite
+ paste_edls(&new_edls, load_mode, 0, -1,
+ edl->session->labels_follow_edits,
+ edl->session->plugins_follow_edits,
+ edl->session->autos_follow_edits,
+ 0); // overwrite
+ }
+ else
+ paste_edls(&new_edls, load_mode, 0, -1, 1, 1, 1, 0);
}
-
-
-
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
-
// Add new assets to EDL and schedule assets for index building.
int got_indexes = 0;
for( int i=0; i<new_edls.size(); ++i ) {
}
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
for( int i=0; i<new_assets.size(); ++i ) {
Asset *new_asset = new_assets[i];
edl->assets->update(new_asset);
got_indexes = 1;
}
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
// Start examining next batch of index files
if(got_indexes) mainindexes->start_build();
-if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
// Open plugin GUIs
Track *track = edl->tracks->first;
- while(track)
- {
- for(int j = 0; j < track->plugin_set.size(); j++)
- {
+ while( track ) {
+ for( int j = 0; j < track->plugin_set.size(); j++ ) {
PluginSet *plugins = track->plugin_set[j];
Plugin *plugin = plugins->get_first_plugin();
- while(plugin)
- {
- if(load_mode == LOADMODE_REPLACE ||
- load_mode == LOADMODE_REPLACE_CONCATENATE)
- {
- if(plugin->plugin_type == PLUGIN_STANDALONE &&
- plugin->show)
- {
+ while(plugin) {
+ if( load_mode == LOADMODE_REPLACE ||
+ load_mode == LOADMODE_REPLACE_CONCATENATE ) {
+ if( plugin->plugin_type == PLUGIN_STANDALONE &&
+ plugin->show ) {
show_plugin(plugin);
}
}
edl->local_session->loop_playback = 0;
edl->local_session->set_selectionstart(0);
edl->local_session->set_selectionend(0);
+ edl->local_session->unset_inpoint();
+ edl->local_session-> unset_outpoint();
set_brender_active(0, 0);
fit_selection();
goto_start();
BC_WindowBase::get_resources()->vframe_shm = 1;
}
+int MWindow::uses_opengl()
+{
+ if( !playback_3d || !playback_3d->running() ) return 0;
+ PlaybackConfig *playback_config = edl->session->playback_config;
+ return playback_config->vconfig->driver == PLAYBACK_X11_GL ? 1 : 0;
+}
void MWindow::show_splash()
{
gui->focus();
}
-void MWindow::save_layout(int no)
+void MWindow::load_layout(const char *layout)
{
- char layout_path[BCTEXTLEN];
- snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE,
- File::get_config_path(), no);
- session->save_file(layout_path);
-}
-
-void MWindow::load_layout(int no)
-{
- char layout_path[BCTEXTLEN];
- snprintf(layout_path, sizeof(layout_path), "%s/" LAYOUT_FILE,
- File::get_config_path(), no);
- session->load_file(layout_path);
+ char path[BCTEXTLEN];
+ snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout);
+ session->load_file(path);
restore_windows();
gui->default_positions();
save_defaults();
}
+void MWindow::save_layout(const char *layout)
+{
+ char path[BCTEXTLEN];
+ snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout);
+ session->save_file(path);
+}
+
+void MWindow::delete_layout(const char *layout)
+{
+ char path[BCTEXTLEN];
+ snprintf(path, sizeof(path), "%s/%s", File::get_config_path(), layout);
+ unlink(path);
+}
+
int MWindow::tile_windows(int window_config)
{
int need_reload = 0;