plugins.remove_all();
}
+void MWindow::init_plugin_tips(ArrayList<PluginServer*> &plugins)
+{
+ const char *cfg_path = File::get_cindat_path();
+ char msg_path[BCTEXTLEN]; int txt = 0;
+ FILE *fp = 0;
+ if( BC_Resources::language[0] ) {
+ snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.%s",
+ cfg_path, BC_Resources::language);
+ fp = fopen(msg_path, "r");
+ }
+ if( !fp ) {
+ txt = 1;
+ snprintf(msg_path, sizeof(msg_path), "%s/info/plugins.txt",
+ cfg_path);
+ fp = fopen(msg_path, "r");
+ }
+ if( !fp ) return;
+ char text[BCTEXTLEN];
+ char *tp = text, *ep = tp + sizeof(text)-1;
+ char title[BCTEXTLEN];
+ title[0] = 0;
+ int no = 0;
+ for(;;) {
+ ++no; int done = 1;
+ char line[BCTEXTLEN], *cp = line;
+ if( fgets(line,sizeof(line)-1,fp) ) {
+ if( *cp == '#' ) continue;
+ done = *cp == ' ' || *cp == '\t' ? 0 : -1;
+ }
+ if( done ) {
+ if( tp > text && *--tp == '\n' ) *tp = 0;
+ if( title[0] ) {
+ tp = !txt ? title : _(title);
+ int idx = plugins.size();
+ while( --idx>=0 && strcmp(plugins[idx]->title, tp) );
+ if( idx >= 0 ) {
+ delete [] plugins[idx]->tip;
+ plugins[idx]->tip = cstrdup(text);
+ }
+ title[0] = 0;
+ }
+ if( done > 0 ) break;
+ tp = text; *tp = 0;
+ char *dp = strchr(cp, ':');
+ if( !dp ) {
+ printf("plugin tips: error on line %d\n", no);
+ continue;
+ }
+ char *bp = title;
+ while( cp < dp ) *bp++ = *cp++;
+ *bp = 0;
+ ++cp;
+ }
+
+ while( *cp == ' ' || *cp == '\t' ) ++cp;
+ for( ; tp<ep && (*tp=*cp)!=0; ++tp,++cp );
+ }
+ fclose(fp);
+}
+
void MWindow::delete_plugins()
{
plugindb->remove_all_objects();
fprintf(stderr, _("MWindow::init_theme: prefered theme %s not found.\n"),
preferences->theme);
- if( !theme_plugin && strcasecmp(preferences->theme, DEFAULT_THEME) ) {
+ const char *default_theme = _(DEFAULT_THEME);
+ if( !theme_plugin && strcasecmp(preferences->theme, default_theme) ) {
fprintf(stderr, _("MWindow::init_theme: trying default theme %s\n"),
- DEFAULT_THEME);
+ default_theme);
for(int i = 0; i < plugindb->total && !theme_plugin; i++) {
if( plugindb->get(i)->theme &&
- !strcasecmp(DEFAULT_THEME, plugindb->get(i)->title) )
+ !strcasecmp(default_theme, plugindb->get(i)->title) )
theme_plugin = plugindb->get(i);
}
}
void MWindow::restart_brender()
{
//printf("MWindow::restart_brender 1\n");
- if(!brender_active || !preferences->use_brender) return;
- if(brender) brender->restart(edl);
+ if( !brender_active || !preferences->use_brender ) return;
+ if( !brender ) return;
+ int locked = gui->get_window_lock();
+ if( locked ) gui->unlock_window();
+ brender->restart(edl);
+ if( locked ) gui->lock_window("MWindow::restart_brender");
}
void MWindow::stop_brender()
{
- if(brender) brender->stop();
+ if( !brender ) return;
+ int locked = gui->get_window_lock();
+ if( locked ) gui->unlock_window();
+ brender->stop();
+ if( locked ) gui->lock_window("MWindow::stop_brender");
}
int MWindow::brender_available(int position)
case FILE_NOT_FOUND:
sprintf(string, _("Failed to open %s"), new_asset->path);
gui->show_message(string, theme->message_error);
+ gui->update_default_message();
break;
// Unknown format
if(update_filename)
set_filename(new_edl->local_session->clip_title);
}
+ else
+ if( load_mode == LOADMODE_RESOURCESONLY ) {
+ strcpy(new_edl->local_session->clip_title,
+ filenames->get(i));
+ struct stat st;
+ time_t t = !stat(filenames->get(i),&st) ?
+ st.st_mtime : time(&t);
+ ctime_r(&t, new_edl->local_session->clip_notes);
+ }
}
new_edls.append(new_edl);
if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
- if(!result) gui->statusbar->default_message();
-
-
-
-
-
+ if(!result) {
+ gui->reset_default_message();
+ gui->default_message();
+ }
if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
edl->session->autos_follow_edits);
}
- paste_edls(&new_edls,
- load_mode,
- 0,
- -1,
+ paste_edls(&new_edls, load_mode, 0, -1,
edl->session->labels_follow_edits,
edl->session->plugins_follow_edits,
edl->session->autos_follow_edits,
}
if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
- if(new_assets.size())
+ for(int i = 0; i < new_assets.size(); i++)
{
- for(int i = 0; i < new_assets.size(); i++)
- {
- Asset *new_asset = new_assets[i];
+ Asset *new_asset = new_assets[i];
- File *new_file = 0;
- int got_it = 0;
- for(int j = 0; j < new_files.size(); j++)
+ File *new_file = 0;
+ int got_it = 0;
+ for(int j = 0; j < new_files.size(); j++)
+ {
+ new_file = new_files[j];
+ if(!strcmp(new_file->asset->path,
+ new_asset->path))
{
- new_file = new_files[j];
- if(!strcmp(new_file->asset->path,
- new_asset->path))
- {
- got_it = 1;
- break;
- }
+ got_it = 1;
+ break;
}
-
- mainindexes->add_next_asset(got_it ? new_file : 0, new_asset);
- got_indexes = 1;
- edl->assets->update(new_asset);
-
}
-
+ mainindexes->add_next_asset(got_it ? new_file : 0, new_asset);
+ got_indexes = 1;
+ edl->assets->update(new_asset);
}
if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
if(debug) PRINT_TRACE
init_ladspa_plugins(this, preferences);
if(debug) PRINT_TRACE
+ init_plugin_tips(*plugindb);
if(splash_window)
splash_window->operation->update(_("Initializing GUI"));
if(debug) PRINT_TRACE
Timer timer;
+ init_awindow();
+ if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
init_compositor();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
init_gui();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
- init_awindow();
- if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
-
init_levelwindow();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
- if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
-
init_indexes();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
init_channeldb();
-
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
init_gwindow();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
init_render();
if(debug) printf("MWindow::create_objects %d total_time=%d\n", __LINE__, (int)timer.get_difference());
+
init_brender();
init_exportedl();
init_commercials();
index_state->index_status = INDEX_NOTTESTED;
if( indexable->is_asset ) {
Asset *asset = (Asset *)indexable;
- if( asset->format != FILE_PCM )
+ if( asset->format != FILE_PCM ) {
+ asset->format = FILE_UNKNOWN;
asset->reset_audio();
+ }
asset->reset_video();
+// File file; // re-probe the asset
+// file.open_file(preferences, asset, 1, 0);
}
mainindexes->add_next_asset(0, indexable);
}
void MWindow::remove_assets_from_project(int push_undo, int redraw,
ArrayList<Indexable*> *drag_assets, ArrayList<EDL*> *drag_clips)
{
- for(int i = 0; i < session->drag_assets->total; i++) {
- Indexable *indexable = session->drag_assets->get(i);
+ for(int i = 0; i < drag_assets->total; i++) {
+ Indexable *indexable = drag_assets->get(i);
if(indexable->is_asset) remove_asset_from_caches((Asset*)indexable);
}
}
}
- for(int i = 0; i < session->drag_assets->size(); i++) {
+ for(int i = 0; i < drag_assets->size(); i++) {
for(int j = 0; j < vwindows.size(); j++) {
VWindow *vwindow = vwindows[j];
if( !vwindow->is_running() ) continue;
- if(session->drag_assets->get(i) == vwindow->get_source()) {
+ if(drag_assets->get(i) == vwindow->get_source()) {
vwindow->gui->lock_window("MWindow::remove_assets_from_project 2");
vwindow->delete_source(1, 1);
vwindow->gui->unlock_window();
}
}
- for(int i = 0; i < session->drag_assets->size(); i++) {
- Indexable *indexable = session->drag_assets->get(i);
+ for(int i = 0; i < drag_assets->size(); i++) {
+ Indexable *indexable = drag_assets->get(i);
remove_indexfile(indexable);
}
//printf("MWindow::rebuild_indices 1 %s\n", indexable->path);
if(push_undo) undo->update_undo_before();
if(drag_assets) edl->remove_from_project(drag_assets);
- if(drag_clips) edl->remove_from_project(session->drag_clips);
+ if(drag_clips) edl->remove_from_project(drag_clips);
if(redraw) save_backup();
if(push_undo) undo->update_undo_after(_("remove assets"), LOAD_ALL);
- if(redraw)
- {
+ if(redraw) {
restart_brender();
gui->lock_window("MWindow::remove_assets_from_project 3");
- gui->update(1,
- 1,
- 1,
- 1,
- 0,
- 1,
- 0);
+ gui->update(1, 1, 1, 1, 0, 1, 0);
gui->unlock_window();
// Removes from playback here