From 4f584c5fea581bf09afc639e964f491f25c31186 Mon Sep 17 00:00:00 2001 From: Carl Hetherington Date: Thu, 26 Jul 2012 17:08:46 +0100 Subject: [PATCH] Missing files, and try to improve the new film more on Windows. --- src/wx/dir_picker_ctrl.cc | 73 +++++++++++++++++++++++++++++++++++ src/wx/dir_picker_ctrl.h | 39 +++++++++++++++++++ src/wx/new_film_dialog.cc | 12 +++++- src/wx/new_film_dialog.h | 39 +++++++++++++++++++ src/wx/server_dialog.cc | 81 +++++++++++++++++++++++++++++++++++++++ src/wx/server_dialog.h | 39 +++++++++++++++++++ src/wx/wscript | 1 + 7 files changed, 283 insertions(+), 1 deletion(-) create mode 100644 src/wx/dir_picker_ctrl.cc create mode 100644 src/wx/dir_picker_ctrl.h create mode 100644 src/wx/new_film_dialog.h create mode 100644 src/wx/server_dialog.cc create mode 100644 src/wx/server_dialog.h diff --git a/src/wx/dir_picker_ctrl.cc b/src/wx/dir_picker_ctrl.cc new file mode 100644 index 000000000..4cd7c3d15 --- /dev/null +++ b/src/wx/dir_picker_ctrl.cc @@ -0,0 +1,73 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include +#include +#include "dir_picker_ctrl.h" +#include "wx_util.h" + +using namespace std; +using namespace boost; + +DirPickerCtrl::DirPickerCtrl (wxWindow* parent) + : wxPanel (parent) + , _parent (parent) +{ + _sizer = new wxBoxSizer (wxHORIZONTAL); + + _folder = new wxStaticText (this, wxID_ANY, wxT ("This is the length of the folder label")); + _sizer->Add (_folder, 1, wxEXPAND | wxALL, 6); + _browse = new wxButton (this, wxID_ANY, _("Browse...")); + _sizer->Add (_browse, 0); + + SetSizerAndFit (_sizer); + + _browse->Connect (wxID_ANY, wxEVT_COMMAND_BUTTON_CLICKED, wxCommandEventHandler (DirPickerCtrl::browse_clicked), 0, this); + + /* Do this after the fit so that our folder label stays long */ + SetPath (wxStandardPaths::Get().GetDocumentsDir()); +} + +void +DirPickerCtrl::SetPath (wxString p) +{ + _path = p; + + if (_path == wxStandardPaths::Get().GetDocumentsDir()) { + _folder->SetLabel (_("My Documents")); + } else { + _folder->SetLabel (std_to_wx (filesystem::path (wx_to_std (_path)).leaf().string())); + } +} + +wxString +DirPickerCtrl::GetPath () const +{ + return _path; +} + +void +DirPickerCtrl::browse_clicked (wxCommandEvent &) +{ + wxDirDialog* d = new wxDirDialog (this); + d->ShowModal (); + SetPath (d->GetPath ()); + d->Destroy (); +} diff --git a/src/wx/dir_picker_ctrl.h b/src/wx/dir_picker_ctrl.h new file mode 100644 index 000000000..df7b25f7a --- /dev/null +++ b/src/wx/dir_picker_ctrl.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include + +class DirPickerCtrl : public wxPanel +{ +public: + DirPickerCtrl (wxWindow *); + + wxString GetPath () const; + void SetPath (wxString); + +private: + void browse_clicked (wxCommandEvent &); + + wxWindow* _parent; + wxStaticText* _folder; + wxButton* _browse; + wxString _path; + wxSizer* _sizer; +}; + diff --git a/src/wx/new_film_dialog.cc b/src/wx/new_film_dialog.cc index 93d0f3b19..cc48c422a 100644 --- a/src/wx/new_film_dialog.cc +++ b/src/wx/new_film_dialog.cc @@ -18,7 +18,11 @@ */ #include +#include #include "new_film_dialog.h" +#ifdef __WXMSW__ +#include "dir_picker_ctrl.h" +#endif #include "wx_util.h" using namespace std; @@ -28,6 +32,8 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent) : wxDialog (parent, wxID_ANY, wxString (_("New Film"))) { wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + SetSizer (overall_sizer); + wxFlexGridSizer* table = new wxFlexGridSizer (2, 6, 6); table->AddGrowableCol (1, 1); overall_sizer->Add (table, 1, wxEXPAND | wxALL, 6); @@ -37,7 +43,12 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent) table->Add (_name, 1, wxEXPAND); add_label_to_sizer (table, this, "Create in folder"); +#ifdef __WXMSW__ + _folder = new DirPickerCtrl (this); +#else _folder = new wxDirPickerCtrl (this, wxDD_DIR_MUST_EXIST); +#endif + _folder->SetPath (wxStandardPaths::Get().GetDocumentsDir()); table->Add (_folder, 1, wxEXPAND); wxSizer* buttons = CreateSeparatedButtonSizer (wxOK | wxCANCEL); @@ -45,7 +56,6 @@ NewFilmDialog::NewFilmDialog (wxWindow* parent) overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); } - SetSizer (overall_sizer); overall_sizer->Layout (); overall_sizer->SetSizeHints (this); } diff --git a/src/wx/new_film_dialog.h b/src/wx/new_film_dialog.h new file mode 100644 index 000000000..3d1253ecc --- /dev/null +++ b/src/wx/new_film_dialog.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include + +class DirPickerCtrl; + +class NewFilmDialog : public wxDialog +{ +public: + NewFilmDialog (wxWindow *); + + std::string get_path () const; + +private: + wxTextCtrl* _name; +#ifdef __WXMSW__ + DirPickerCtrl* _folder; +#else + wxDirPickerCtrl* _folder; +#endif +}; diff --git a/src/wx/server_dialog.cc b/src/wx/server_dialog.cc new file mode 100644 index 000000000..0ae34b1fc --- /dev/null +++ b/src/wx/server_dialog.cc @@ -0,0 +1,81 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include "lib/server.h" +#include "server_dialog.h" +#include "wx_util.h" + +ServerDialog::ServerDialog (wxWindow* parent, Server* server) + : wxDialog (parent, wxID_ANY, wxString (_("Server"))) +{ + if (server) { + _server = server; + } else { + _server = new Server ("localhost", 1); + } + + wxFlexGridSizer* table = new wxFlexGridSizer (2, 4, 4); + table->AddGrowableCol (1, 1); + + add_label_to_sizer (table, this, "Host name or IP address"); + _host = new wxTextCtrl (this, wxID_ANY); + table->Add (_host, 1, wxEXPAND); + + add_label_to_sizer (table, this, "Threads to use"); + _threads = new wxSpinCtrl (this, wxID_ANY); + table->Add (_threads, 1, wxEXPAND); + + _host->Connect (wxID_ANY, wxEVT_COMMAND_TEXT_UPDATED, wxCommandEventHandler (ServerDialog::host_changed), 0, this); + _threads->SetRange (0, 256); + _threads->Connect (wxID_ANY, wxEVT_COMMAND_SPINCTRL_UPDATED, wxCommandEventHandler (ServerDialog::threads_changed), 0, this); + + _host->SetValue (std_to_wx (_server->host_name ())); + _threads->SetValue (_server->threads ()); + + wxBoxSizer* overall_sizer = new wxBoxSizer (wxVERTICAL); + overall_sizer->Add (table, 1, wxEXPAND); + + wxSizer* buttons = CreateSeparatedButtonSizer (wxOK); + if (buttons) { + overall_sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder()); + } + + SetSizer (overall_sizer); + overall_sizer->Layout (); + overall_sizer->SetSizeHints (this); +} + +void +ServerDialog::host_changed (wxCommandEvent &) +{ + _server->set_host_name (wx_to_std (_host->GetValue ())); +} + +void +ServerDialog::threads_changed (wxCommandEvent &) +{ + _server->set_threads (_threads->GetValue ()); +} + +Server * +ServerDialog::server () const +{ + return _server; +} + diff --git a/src/wx/server_dialog.h b/src/wx/server_dialog.h new file mode 100644 index 000000000..05630c377 --- /dev/null +++ b/src/wx/server_dialog.h @@ -0,0 +1,39 @@ +/* + Copyright (C) 2012 Carl Hetherington + + 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 + the Free Software Foundation; either version 2 of the License, or + (at your option) any later version. + + This program is distributed in the hope that it will be useful, + but WITHOUT ANY WARRANTY; without even the implied warranty of + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program; if not, write to the Free Software + Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA. + +*/ + +#include +#include + +class Server; + +class ServerDialog : public wxDialog +{ +public: + ServerDialog (wxWindow *, Server *); + + Server* server () const; + +private: + void host_changed (wxCommandEvent &); + void threads_changed (wxCommandEvent &); + + Server* _server; + wxTextCtrl* _host; + wxSpinCtrl* _threads; +}; diff --git a/src/wx/wscript b/src/wx/wscript index 258e4df87..f59dbe983 100644 --- a/src/wx/wscript +++ b/src/wx/wscript @@ -20,6 +20,7 @@ def build(bld): dcp_range_dialog.cc server_dialog.cc new_film_dialog.cc + dir_picker_ctrl.cc """ # alignment.cc -- 2.30.2