color coded keyframe curves, keyframe popups, cwin scrollbar fixes
[goodguy/history.git] / cinelerra-5.1 / cinelerra / pluginclient.C
index 64c7d53f6649d64ef1e0131d59e688d764c15fc5..0e0637b734036cdf06c47459f60b524b8cc1d9c8 100644 (file)
@@ -26,6 +26,7 @@
 #include "condition.h"
 #include "edl.h"
 #include "edlsession.h"
+#include "file.h"
 #include "filesystem.h"
 #include "language.h"
 #include "localsession.h"
@@ -55,10 +56,10 @@ PluginClientThread::PluginClientThread(PluginClient *client)
 
 PluginClientThread::~PluginClientThread()
 {
+       join();
 //printf("PluginClientThread::~PluginClientThread %p %d\n", this, __LINE__);
-       delete window;
+       delete window;  window = 0;
 //printf("PluginClientThread::~PluginClientThread %p %d\n", this, __LINE__);
-       window = 0;
        delete init_complete;
 }
 
@@ -68,10 +69,10 @@ void PluginClientThread::run()
        int result = 0;
        if(client->window_x < 0) client->window_x = info.get_abs_cursor_x();
        if(client->window_y < 0) client->window_y = info.get_abs_cursor_y();
-       window = client->new_window();
+       if(!window)
+               window = client->new_window();
 
-       if(window)
-       {
+       if(window) {
                window->lock_window("PluginClientThread::run");
                window->create_objects();
                window->unlock_window();
@@ -85,8 +86,6 @@ void PluginClientThread::run()
 //printf("PluginClientThread::run %p %d\n", this, __LINE__);
                window->hide_window(1);
                window->unlock_window();
-
-
 // Can't save defaults in the destructor because it's not called immediately
 // after closing.
                /* if(client->defaults) */ client->save_defaults_xml();
@@ -144,35 +143,14 @@ PluginClientWindow::PluginClientWindow(PluginClient *client,
  : BC_Window(client->gui_string, 
        client->window_x /* - w / 2 */, 
        client->window_y /* - h / 2 */, 
-       w, 
-       h, 
-       min_w, 
-       min_h,
-       allow_resize, 
-       0,
-       1)
+       w, h, min_w, min_h, allow_resize, 0, 1)
 {
        this->client = client;
 }
 
 PluginClientWindow::PluginClientWindow(const char *title, 
-       int x,
-       int y,
-       int w,
-       int h,
-       int min_w,
-       int min_h,
-       int allow_resize)
- : BC_Window(title, 
-       x, 
-       y, 
-       w, 
-       h, 
-       min_w, 
-       min_h,
-       allow_resize, 
-       0,
-       1)
+       int x, int y, int w, int h, int min_w, int min_h, int allow_resize)
+ : BC_Window(title, x, y, w, h, min_w, min_h, allow_resize, 0, 1)
 {
        this->client = 0;
 }
@@ -217,11 +195,7 @@ PluginClient::PluginClient(PluginServer *server)
 PluginClient::~PluginClient()
 {
 // Delete the GUI thread.  The GUI must be hidden with hide_gui first.
-       if(thread) 
-       {
-               thread->join();
-               delete thread;
-       }
+       delete thread;
 
 // Virtual functions don't work here.
        if(defaults) delete defaults;
@@ -384,7 +358,7 @@ int PluginClient::set_string()
        if(thread)
        {
                thread->window->lock_window("PluginClient::set_string");
-               thread->window->set_title(gui_string);
+               thread->window->put_title(gui_string);
                thread->window->unlock_window();
        }
        return 0;
@@ -619,23 +593,21 @@ void PluginClient::save_defaults_xml()
        using_defaults = 1;
 
        KeyFrame temp_keyframe;
-
        save_data(&temp_keyframe);
-       FILE *fd = fopen(path, "w");
-       if(fd)
-       {
-               fprintf(fd, "%d\n%d\n", window_x, window_y);
-               if(!fwrite(temp_keyframe.get_data(), strlen(temp_keyframe.get_data()), 1, fd))
-               {
+
+       const char *data = temp_keyframe.get_data();
+       int len = strlen(data);
+       FILE *fp = fopen(path, "w");
+
+       if( fp ) {
+               fprintf(fp, "%d\n%d\n", window_x, window_y);
+               if( len > 0 && !fwrite(data, len, 1, fp) ) {
                        fprintf(stderr, "PluginClient::save_defaults_xml %d \"%s\" %d bytes: %s\n",
-                               __LINE__,
-                               path,
-                               (int)strlen(temp_keyframe.get_data()),
-                               strerror(errno));
+                               __LINE__, path, len, strerror(errno));
                }
-
-               fclose(fd);
+               fclose(fp);
        }
+
        using_defaults = 0;
 }
 
@@ -687,12 +659,6 @@ int PluginClient::get_gui_status()
        return server->get_gui_status();
 }
 
-int PluginClient::start_plugin()
-{
-       printf(_("No processing defined for this plugin.\n"));
-       return 0;
-}
-
 // close event from client side
 void PluginClient::client_side_close()
 {
@@ -843,7 +809,7 @@ int PluginClient::get_project_smp()
 
 const char* PluginClient::get_defaultdir()
 {
-       return BCASTDIR;
+       return File::get_plugin_path();
 }