Merge branch 'master' of ssh://houllier/home/carl/git/dvdomatic
[dcpomatic.git] / src / tools / servomatic_gui.cc
index d89bd91ad67b236c88f1639a8503911f1794dda3..5e36660eb798b861372db178c5010f4c97a8d271 100644 (file)
 #include "wx_util.h"
 #include "lib/util.h"
 #include "lib/server.h"
+#include "lib/config.h"
 
-using namespace boost;
+using std::cout;
+using std::string;
+using boost::shared_ptr;
+using boost::thread;
+using boost::bind;
 
 enum {
        ID_status = 1,
-       ID_quit
+       ID_quit,
+       ID_timer
 };
 
+class MemoryLog : public Log
+{
+public:
+
+       string get () const {
+               boost::mutex::scoped_lock (_mutex);
+               return _log;
+       }
+
+private:
+       void do_log (string m)
+       {
+               _log = m;
+       }
+
+       string _log;    
+};
+
+static shared_ptr<MemoryLog> memory_log (new MemoryLog);
+
 class StatusDialog : public wxDialog
 {
 public:
        StatusDialog ()
-               : wxDialog (0, wxID_ANY, _("DVD-o-matic encode server"), wxDefaultPosition, wxDefaultSize, wxDEFAULT_DIALOG_STYLE)
+               : wxDialog (0, wxID_ANY, _("DVD-o-matic encode server"), wxDefaultPosition, wxSize (600, 80), wxDEFAULT_DIALOG_STYLE | wxRESIZE_BORDER)
+               , _timer (this, ID_timer)
        {
-               wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6);
-               table->AddGrowableCol (1, 1);
+               _sizer = new wxFlexGridSizer (1, 6, 6);
+               _sizer->AddGrowableCol (0, 1);
+
+               _text = new wxTextCtrl (this, wxID_ANY, _(""), wxDefaultPosition, wxDefaultSize, wxTE_READONLY);
+               _sizer->Add (_text, 1, wxEXPAND);
+
+               SetSizer (_sizer);
+               _sizer->Layout ();
 
-               add_label_to_sizer (table, this, "Hello");
+               Connect (ID_timer, wxEVT_TIMER, wxTimerEventHandler (StatusDialog::update));
+               _timer.Start (1000);
+       }
 
-               SetSizer (table);
-               table->Layout ();
-               table->SetSizeHints (this);
+private:
+       void update (wxTimerEvent &)
+       {
+               _text->ChangeValue (std_to_wx (memory_log->get ()));
+               _sizer->Layout ();
        }
+
+       wxFlexGridSizer* _sizer;
+       wxTextCtrl* _text;
+       wxTimer _timer;
 };
 
 class TaskBarIcon : public wxTaskBarIcon
@@ -53,7 +94,15 @@ class TaskBarIcon : public wxTaskBarIcon
 public:
        TaskBarIcon ()
        {
+#ifdef __WXMSW__               
                wxIcon icon (std_to_wx ("taskbar_icon"));
+#endif
+#ifdef __WXGTK__
+               wxInitAllImageHandlers();
+               wxBitmap bitmap (wxString::Format (wxT ("%s/taskbar_icon.png"), POSIX_ICON_PREFIX), wxBITMAP_TYPE_PNG);
+               wxIcon icon;
+               icon.CopyFromBitmap (bitmap);
+#endif         
                SetIcon (icon, std_to_wx ("DVD-o-matic encode server"));
 
                Connect (ID_status, wxEVT_COMMAND_MENU_SELECTED, wxCommandEventHandler (TaskBarIcon::status));
@@ -87,27 +136,39 @@ public:
        App ()
                : wxApp ()
                , _thread (0)
+               , _icon (0)
        {}
 
 private:       
        
        bool OnInit ()
        {
+               if (!wxApp::OnInit ()) {
+                       return false;
+               }
+               
                dvdomatic_setup ();
 
-               new TaskBarIcon;
-
+               _icon = new TaskBarIcon;
                _thread = new thread (bind (&App::main_thread, this));
+               
                return true;
        }
 
+       int OnExit ()
+       {
+               delete _icon;
+               return wxApp::OnExit ();
+       }
+
        void main_thread ()
        {
-               Server server;
-               server.run ();
+               Server server (memory_log);
+               server.run (Config::instance()->num_local_encoding_threads ());
        }
 
        boost::thread* _thread;
+       TaskBarIcon* _icon;
 };
 
 IMPLEMENT_APP (App)