clean up HitCreateDrag. should be a no-op.
[ardour.git] / gtk2_ardour / sfdb_freesound_mootcher.h
index ee650200210a1ca4e9cfe1f7386f67b2d3dcb233..c9a27c7c1c39ae9de91cd0ba123af2f05957fefe 100644 (file)
@@ -1,5 +1,5 @@
 /*
-    Copyright (C) 2012 Paul Davis 
+    Copyright (C) 2012 Paul Davis
 
     This program is free software; you can redistribute it and/or modify
     it under the terms of the GNU General Public License as published by
 
 *****************************************************************************/
 
+#ifndef __gtk_ardour_sfdb_freesound_mootcher_h__
+#define __gtk_ardour_sfdb_freesound_mootcher_h__
+
 #include <string>
-#include <fstream>
-#include <iostream>
 #include <stdio.h>
 #include <cstring>
 #include <string>
@@ -47,7 +48,7 @@
 #include "curl/curl.h"
 
 //--- struct to store XML file
-struct MemoryStruct {
+struct SfdbMemoryStruct {
        char *memory;
        size_t size;
 };
@@ -65,7 +66,7 @@ enum sortMethod {
 };
 
 
-class Mootcher
+class Mootcher: public sigc::trackable, public PBD::ScopedConnectionList
 {
 public:
        Mootcher();
@@ -76,10 +77,18 @@ public:
        std::string     searchText(std::string query, int page, std::string filter, enum sortMethod sort);
        std::string     searchSimilar(std::string id);
        void *          threadFunc();
-       SoundFileBrowser *sfb; 
+       SoundFileBrowser *sfb;
        std::string     audioFileName;
        std::string     ID;
 
+       /** signal emitted when mootcher reports progress updates during download.
+        * The parameters are current and total numbers of bytes downloaded.
+        */
+       PBD::Signal2<void, double, double> Progress;
+       /** signal emitted when the mootcher has finished downloading. */
+       PBD::Signal0<void> Finished;
+
+
 private:
 
        void            ensureWorkingDir();
@@ -97,12 +106,15 @@ private:
 
        FILE* theFile;
 
+       void updateProgress(double dlnow, double dltotal);
+       void doneWithMootcher();
+
        Gtk::HBox progress_hbox;
        Gtk::ProgressBar progress_bar;
        Gtk::Button cancel_download_btn;
 
        bool cancel_download;
-       void cancelDownload() { 
+       void cancelDownload() {
                cancel_download = true;
                progress_hbox.hide();
        }
@@ -111,3 +123,4 @@ private:
        std::string xmlLocation;
 };
 
+#endif // __gtk_ardour_sfdb_freesound_mootcher_h__