awindowgui / mwindowedit / label rework
[goodguy/history.git] / cinelerra-5.1 / cinelerra / mwindow.C
index 478c845c2279d08ea4ec29ce9d345297e68113ce..8fc55bca298377f259094e6101bd75ae39c038c5 100644 (file)
@@ -201,6 +201,7 @@ MWindow::MWindow()
        mainprogress = 0;
        brender = 0;
        brender_active = 0;
+       strcpy(cin_lang,"en");
        channeldb_buz =  new ChannelDB;
        channeldb_v4l2jpeg =  new ChannelDB;
        //file_server = 0;
@@ -230,6 +231,7 @@ MWindow::MWindow()
 MWindow::~MWindow()
 {
        run_lock->lock("MWindow::~MWindow");
+       stop_playback(1);
        in_destructor = 1;
 //printf("MWindow::~MWindow %d\n", __LINE__);
        gui->stop_drawing();
@@ -470,7 +472,7 @@ void MWindow::check_language()
        if( !env_lang ) env_lang = getenv("LC_ALL");
        if( !env_lang ) env_lang = getenv("LANG");
        if( !env_lang ) {
-               snprintf(curr_lang, sizeof(curr_lang), "%s-%s.%s",
+               snprintf(curr_lang, sizeof(curr_lang), "%s_%s-%s",
                        BC_Resources::language, BC_Resources::region, BC_Resources::encoding);
                env_lang = curr_lang;
        }
@@ -487,6 +489,12 @@ void MWindow::check_language()
                ::remove(ladspa_path);
                defaults->save();
        }
+       if( strlen(env_lang) > 1 &&
+           ( env_lang[2] == 0 || env_lang[2] == '_'  || env_lang[2] == '.' ) ) {
+               cin_lang[0] = env_lang[0];  cin_lang[1] = env_lang[1];  cin_lang[2] = 0;
+       }
+       else
+               strcpy(cin_lang, "en");
 }
 
 void MWindow::get_plugin_path(char *path, const char *plug_dir, const char *fs_path)
@@ -919,6 +927,7 @@ void MWindow::init_gwindow()
 
 void MWindow::init_tipwindow()
 {
+       TipWindow::load_tips(cin_lang);
        if( !twindow )
                twindow = new TipWindow(this);
        twindow->start();
@@ -1171,20 +1180,28 @@ void MWindow::init_brender()
 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)
 {
        int result = 0;
        brender_lock->lock("MWindow::brender_available 1");
-       if(brender)
+       if(brender && brender_active)
        {
                if(brender->map_valid)
                {
@@ -1217,8 +1234,10 @@ void MWindow::set_brender_active(int v, int update)
                }
                restart_brender();
        }
-       else
+       else {
+               edl->session->brender_start = edl->session->brender_end = 0;
                stop_brender();
+       }
        if( update ) {
                gui->update_timebar(0);
                gui->draw_overlays(1);
@@ -1326,17 +1345,12 @@ void MWindow::stop_playback(int wait)
        int locked  = gui->get_window_lock();
        if( locked ) gui->unlock_window();
 
-       cwindow->playback_engine->que->send_command(STOP,
-               CHANGE_NONE,
-               0,
-               0);
-       cwindow->playback_engine->interrupt_playback(wait);
+       cwindow->playback_engine->stop_playback();
 
        for(int i = 0; i < vwindows.size(); i++) {
                VWindow *vwindow = vwindows[i];
                if( !vwindow->is_running() ) continue;
-               vwindow->playback_engine->que->send_command(STOP, CHANGE_NONE, 0, 0);
-               vwindow->playback_engine->interrupt_playback(wait);
+               vwindow->playback_engine->stop_playback();
        }
        if( locked ) gui->lock_window("MWindow::stop_playback");
 }
@@ -1461,11 +1475,9 @@ SET_TRACE
                        case FILE_UNRECOGNIZED_CODEC:
                        {
 // Test index file
-                               IndexFile indexfile(this, new_asset);
-                               result = indexfile.open_index();
-                               if(!result)
-                               {
-                                       indexfile.close_index();
+                               {       IndexFile indexfile(this, new_asset);
+                                       if( !(result = indexfile.open_index()) )
+                                               indexfile.close_index();
                                }
 
 // Test existing EDLs
@@ -1474,7 +1486,7 @@ SET_TRACE
                                                new_edls[j]->assets->get_asset(new_asset->path) :
                                                edl->assets->get_asset(new_asset->path);
                                        if( old_asset ) {
-                                               *new_asset = *old_asset;
+                                               new_asset->copy_from(old_asset,1);
                                                result = 0;
                                        }
                                }
@@ -1598,6 +1610,15 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
                                                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);
@@ -1618,12 +1639,10 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
 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__);
@@ -1677,32 +1696,26 @@ if(debug) printf("MWindow::load_filenames %d\n", __LINE__);
        }
 
 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__);
 
@@ -2971,9 +2984,13 @@ void MWindow::rebuild_indices()
                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);
        }