--- gigedit/trunk/src/gigedit/mainwindow.h 2019/02/12 18:54:58 3469 +++ gigedit/trunk/src/gigedit/mainwindow.h 2019/02/14 19:10:49 3470 @@ -156,9 +156,8 @@ Gtk::ProgressBar progressBar; }; -class Loader : public sigc::trackable { +class LoaderSaverBase { public: - Loader(const char* filename); void launch(); Glib::Dispatcher& signal_progress(); Glib::Dispatcher& signal_finished(); ///< Finished successfully, without error. @@ -169,9 +168,13 @@ Glib::ustring error_message; gig::File* gig; +protected: + LoaderSaverBase(const Glib::ustring filename, gig::File* gig); + private: Glib::Threads::Thread* thread; void thread_function(); + virtual void thread_function_sub(gig::progress_t& progress) = 0; Glib::Dispatcher finished_dispatcher; Glib::Dispatcher progress_dispatcher; Glib::Dispatcher error_dispatcher; @@ -179,27 +182,20 @@ float progress; }; -class Saver : public sigc::trackable { +class Loader : public LoaderSaverBase { +public: + Loader(const char* filename); + +private: + void thread_function_sub(gig::progress_t& progress); +}; + +class Saver : public LoaderSaverBase { public: Saver(gig::File* file, Glib::ustring filename = ""); ///< one argument means "save", two arguments means "save as" - void launch(); - Glib::Dispatcher& signal_progress(); - Glib::Dispatcher& signal_finished(); ///< Finished successfully, without error. - Glib::Dispatcher& signal_error(); - void progress_callback(float fraction); - float get_progress(); - gig::File* gig; - const Glib::ustring filename; - Glib::ustring error_message; private: - Glib::Threads::Thread* thread; - void thread_function(); - Glib::Dispatcher finished_dispatcher; - Glib::Dispatcher progress_dispatcher; - Glib::Dispatcher error_dispatcher; - Glib::Threads::Mutex progressMutex; - float progress; + void thread_function_sub(gig::progress_t& progress); }; class MainWindow : public ManagedWindow {