}
list<string>
-Config::template_names () const
+Config::templates () const
{
list<string> n;
for (boost::filesystem::directory_iterator i (path("templates")); i != boost::filesystem::directory_iterator(); ++i) {
{
return path("templates") / tidy_for_filename (name);
}
+
+void
+Config::rename_template (string old_name, string new_name) const
+{
+ boost::filesystem::rename (template_path (old_name), template_path (new_name));
+}
+
+void
+Config::delete_template (string name) const
+{
+ boost::filesystem::remove (template_path (name));
+}
void save_template (boost::shared_ptr<const Film> film, std::string name) const;
bool existing_template (std::string name) const;
- std::list<std::string> template_names () const;
+ std::list<std::string> templates () const;
boost::filesystem::path template_path (std::string name) const;
+ void rename_template (std::string old_name, std::string new_name) const;
+ void delete_template (std::string name) const;
static Config* instance ();
static void drop ();
#include "wx/report_problem_dialog.h"
#include "wx/video_waveform_dialog.h"
#include "wx/save_template_dialog.h"
+#include "wx/templates_dialog.h"
#include "lib/film.h"
#include "lib/config.h"
#include "lib/util.h"
ID_tools_video_waveform,
ID_tools_hints,
ID_tools_encoding_servers,
+ ID_tools_manage_templates,
ID_tools_check_for_updates,
ID_tools_restore_default_preferences,
ID_help_report_a_problem,
, _servers_list_dialog (0)
, _config_dialog (0)
, _kdm_dialog (0)
+ , _templates_dialog (0)
, _file_menu (0)
, _history_items (0)
, _history_position (0)
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_video_waveform, this), ID_tools_video_waveform);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_hints, this), ID_tools_hints);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_encoding_servers, this), ID_tools_encoding_servers);
+ Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_manage_templates, this), ID_tools_manage_templates);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_check_for_updates, this), ID_tools_check_for_updates);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::tools_restore_default_preferences, this), ID_tools_restore_default_preferences);
Bind (wxEVT_COMMAND_MENU_SELECTED, boost::bind (&DOMFrame::help_about, this), wxID_ABOUT);
SaveTemplateDialog* d = new SaveTemplateDialog (this);
int const r = d->ShowModal ();
if (r == wxID_OK) {
- bool ok = true;
- if (Config::instance()->existing_template (d->name ())) {
- ok = confirm_dialog (d, _("There is already a template with this name. Do you want to overwrite it?"));
- }
- if (ok) {
- Config::instance()->save_template (_film, d->name ());
- }
+ Config::instance()->save_template (_film, d->name ());
}
d->Destroy ();
}
_servers_list_dialog->Show ();
}
+ void tools_manage_templates ()
+ {
+ if (!_templates_dialog) {
+ _templates_dialog = new TemplatesDialog (this);
+ }
+
+ _templates_dialog->Show ();
+ }
+
void tools_check_for_updates ()
{
UpdateChecker::instance()->run ();
add_item (tools, _("Video waveform..."), ID_tools_video_waveform, NEEDS_FILM);
add_item (tools, _("Hints..."), ID_tools_hints, 0);
add_item (tools, _("Encoding servers..."), ID_tools_encoding_servers, 0);
+ add_item (tools, _("Manage templates..."), ID_tools_manage_templates, 0);
add_item (tools, _("Check for updates"), ID_tools_check_for_updates, 0);
tools->AppendSeparator ();
add_item (tools, _("Restore default preferences"), ID_tools_restore_default_preferences, ALWAYS);
ServersListDialog* _servers_list_dialog;
wxPreferencesEditor* _config_dialog;
KDMDialog* _kdm_dialog;
+ TemplatesDialog* _templates_dialog;
wxMenu* _file_menu;
shared_ptr<Film> _film;
int _history_items;
_name->SetFocus ();
_template_name->Enable (false);
- BOOST_FOREACH (string i, Config::instance()->template_names ()) {
+ BOOST_FOREACH (string i, Config::instance()->templates ()) {
_template_name->Append (std_to_wx (i));
}
--- /dev/null
+/*
+ Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic 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.
+
+ DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "rename_template_dialog.h"
+
+RenameTemplateDialog::RenameTemplateDialog (wxWindow* parent)
+ : TableDialog (parent, _("Rename template"), 2, 1, true)
+{
+ add (_("New name"), true);
+ _name = add (new wxTextCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (300, -1)));
+ layout ();
+}
+
+wxString
+RenameTemplateDialog::get () const
+{
+ return _name->GetValue ();
+}
+
+void
+RenameTemplateDialog::set (wxString s)
+{
+ _name->SetValue (s);
+}
--- /dev/null
+/*
+ Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic 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.
+
+ DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "table_dialog.h"
+
+class RenameTemplateDialog : public TableDialog
+{
+public:
+ RenameTemplateDialog (wxWindow* parent);
+
+ void set (wxString n);
+ wxString get () const;
+
+private:
+ wxTextCtrl* _name;
+};
#include "save_template_dialog.h"
#include "wx_util.h"
+#include "lib/config.h"
#include <boost/foreach.hpp>
using std::string;
_name = add (new wxTextCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (300, -1)));
_name->SetFocus ();
layout ();
+
+ wxButton* ok = dynamic_cast<wxButton *> (FindWindowById (wxID_OK, this));
+ ok->Bind (wxEVT_COMMAND_BUTTON_CLICKED, bind (&SaveTemplateDialog::check, this, _1));
}
string
{
return wx_to_std (_name->GetValue ());
}
+
+void
+SaveTemplateDialog::check (wxCommandEvent& ev)
+{
+ bool ok = true;
+
+ if (_name->GetValue().IsEmpty()) {
+ error_dialog (this, _("Template names must not be empty."));
+ ok = false;
+ } else if (Config::instance()->existing_template (wx_to_std (_name->GetValue ()))) {
+ ok = confirm_dialog (this, _("There is already a template with this name. Do you want to overwrite it?"));
+ }
+
+ if (ok) {
+ ev.Skip ();
+ }
+}
std::string name () const;
private:
+ void check (wxCommandEvent& ev);
+
wxTextCtrl* _name;
};
--- /dev/null
+/*
+ Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic 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.
+
+ DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include "templates_dialog.h"
+#include "wx_util.h"
+#include "rename_template_dialog.h"
+#include "lib/config.h"
+#include <wx/wx.h>
+#include <boost/foreach.hpp>
+
+using std::string;
+using boost::bind;
+
+TemplatesDialog::TemplatesDialog (wxWindow* parent)
+ : wxDialog (parent, wxID_ANY, _("Templates"))
+{
+ _sizer = new wxBoxSizer (wxVERTICAL);
+ SetSizer (_sizer);
+
+ wxSizer* hs = new wxBoxSizer (wxHORIZONTAL);
+ _list = new wxListCtrl (this, wxID_ANY, wxDefaultPosition, wxSize (200, 100), wxLC_REPORT | wxLC_SINGLE_SEL);
+
+ wxListItem ip;
+ ip.SetId (0);
+ ip.SetText (_("Template"));
+ ip.SetWidth (200);
+ _list->InsertColumn (0, ip);
+
+ hs->Add (_list, 1, wxEXPAND, DCPOMATIC_SIZER_GAP);
+
+ {
+ wxSizer* s = new wxBoxSizer (wxVERTICAL);
+ _rename = new wxButton (this, wxID_ANY, _("Rename..."));
+ s->Add (_rename, 0, wxTOP | wxBOTTOM, 2);
+ _remove = new wxButton (this, wxID_ANY, _("Remove"));
+ s->Add (_remove, 0, wxTOP | wxBOTTOM, 2);
+ hs->Add (s, 0, wxLEFT, DCPOMATIC_SIZER_X_GAP);
+ }
+
+ _sizer->Add (hs, 1, wxEXPAND | wxALL, DCPOMATIC_DIALOG_BORDER);
+
+ wxSizer* buttons = CreateSeparatedButtonSizer (wxCLOSE);
+ if (buttons) {
+ _sizer->Add (buttons, wxSizerFlags().Expand().DoubleBorder());
+ }
+
+ _rename->Bind (wxEVT_COMMAND_BUTTON_CLICKED, bind (&TemplatesDialog::rename_clicked, this));
+ _remove->Bind (wxEVT_COMMAND_BUTTON_CLICKED, bind (&TemplatesDialog::remove_clicked, this));
+
+ _list->Bind (wxEVT_COMMAND_LIST_ITEM_SELECTED, bind (&TemplatesDialog::selection_changed, this));
+ _list->Bind (wxEVT_COMMAND_LIST_ITEM_DESELECTED, bind (&TemplatesDialog::selection_changed, this));
+ _list->Bind (wxEVT_SIZE, bind (&TemplatesDialog::resized, this, _1));
+ _config_connection = Config::instance()->Changed.connect (bind (&TemplatesDialog::refresh, this));
+
+ refresh ();
+ selection_changed ();
+}
+
+void
+TemplatesDialog::refresh ()
+{
+ _list->DeleteAllItems ();
+
+ BOOST_FOREACH (string i, Config::instance()->templates()) {
+ wxListItem list_item;
+ int const n = _list->GetItemCount ();
+ list_item.SetId (n);
+ _list->InsertItem (list_item);
+ _list->SetItem (n, 0, std_to_wx (i));
+ }
+}
+
+void
+TemplatesDialog::layout ()
+{
+ _sizer->Layout ();
+}
+
+void
+TemplatesDialog::selection_changed ()
+{
+ int const i = _list->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ _rename->Enable (i >= 0);
+ _remove->Enable (i >= 0);
+}
+
+void
+TemplatesDialog::rename_clicked ()
+{
+ int item = _list->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ if (item == -1) {
+ return;
+ }
+
+ wxListItem li;
+ li.m_itemId = item;
+ li.m_col = 0;
+ li.m_mask = wxLIST_MASK_TEXT;
+ _list->GetItem (li);
+
+ RenameTemplateDialog* d = new RenameTemplateDialog (this);
+ d->set (li.m_text);
+ if (d->ShowModal() == wxID_OK) {
+ if (!d->get().IsEmpty()) {
+ Config::instance()->rename_template (wx_to_std (li.m_text), wx_to_std (d->get ()));
+ _list->SetItem (item, 0, d->get());
+ } else {
+ error_dialog (this, _("Template names must not be empty."));
+ }
+ }
+ d->Destroy ();
+}
+
+void
+TemplatesDialog::remove_clicked ()
+{
+ int i = _list->GetNextItem (-1, wxLIST_NEXT_ALL, wxLIST_STATE_SELECTED);
+ if (i == -1) {
+ return;
+ }
+
+ wxListItem li;
+ li.m_itemId = i;
+ li.m_col = 0;
+ li.m_mask = wxLIST_MASK_TEXT;
+ _list->GetItem (li);
+
+ Config::instance()->delete_template (wx_to_std (li.m_text));
+ _list->DeleteItem (i);
+
+ selection_changed ();
+}
+
+void
+TemplatesDialog::resized (wxSizeEvent& ev)
+{
+ _list->SetColumnWidth (0, GetSize().GetWidth());
+ ev.Skip ();
+}
--- /dev/null
+/*
+ Copyright (C) 2016 Carl Hetherington <cth@carlh.net>
+
+ This file is part of DCP-o-matic.
+
+ DCP-o-matic 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.
+
+ DCP-o-matic 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 DCP-o-matic. If not, see <http://www.gnu.org/licenses/>.
+
+*/
+
+#include <wx/wx.h>
+#include <wx/listctrl.h>
+#include <boost/signals2.hpp>
+
+class TemplatesDialog : public wxDialog
+{
+public:
+ TemplatesDialog (wxWindow* parent);
+
+ void refresh ();
+ void layout ();
+
+private:
+ void selection_changed ();
+ void rename_clicked ();
+ void remove_clicked ();
+ void resized (wxSizeEvent& ev);
+
+ wxButton* _rename;
+ wxButton* _remove;
+ wxListCtrl* _list;
+ wxBoxSizer* _sizer;
+
+ boost::signals2::scoped_connection _config_connection;
+};
playhead_to_frame_dialog.cc
repeat_dialog.cc
report_problem_dialog.cc
+ rename_template_dialog.cc
rgba_colour_picker.cc
save_template_dialog.cc
screen_dialog.cc
subtitle_view.cc
system_font_dialog.cc
table_dialog.cc
+ templates_dialog.cc
text_subtitle_appearance_dialog.cc
time_picker.cc
timecode.cc