*/
+
#ifndef DCPOMATIC_EDITABLE_LIST_H
#define DCPOMATIC_EDITABLE_LIST_H
-#include "wx_util.h"
+
#include "dcpomatic_button.h"
-#include <wx/wx.h>
+#include "wx_util.h"
+#include <dcp/warnings.h>
+LIBDCP_DISABLE_WARNINGS
#include <wx/listctrl.h>
-#include <boost/function.hpp>
+#include <wx/wx.h>
+LIBDCP_ENABLE_WARNINGS
#include <vector>
+
class EditableListColumn
{
public:
EditableList (
wxWindow* parent,
std::vector<EditableListColumn> columns,
- boost::function<std::vector<T> ()> get,
- boost::function<void (std::vector<T>)> set,
- boost::function<std::string (T, int)> column,
+ std::function<std::vector<T> ()> get,
+ std::function<void (std::vector<T>)> set,
+ std::function<std::string (T, int)> column,
bool can_edit = true,
bool title = true
)
S* dialog = new S (this);
if (dialog->ShowModal() == wxID_OK) {
- boost::optional<T> const v = dialog->get ();
+ auto const v = dialog->get ();
+ static_assert(std::is_same<typename std::remove_const<decltype(v)>::type, boost::optional<T>>::value, "get() must return boost::optional<T>");
if (v) {
add_to_control (v.get ());
std::vector<T> all = _get ();
S* dialog = new S (this);
dialog->set (all[item]);
if (dialog->ShowModal() == wxID_OK) {
- boost::optional<T> const v = dialog->get ();
+ auto const v = dialog->get ();
+ static_assert(std::is_same<typename std::remove_const<decltype(v)>::type, boost::optional<T>>::value, "get() must return boost::optional<T>");
if (!v) {
return;
}
ev.Skip ();
}
- boost::function <std::vector<T> ()> _get;
- boost::function <void (std::vector<T>)> _set;
+ std::function <std::vector<T> ()> _get;
+ std::function <void (std::vector<T>)> _set;
std::vector<EditableListColumn> _columns;
- boost::function<std::string (T, int)> _column;
+ std::function<std::string (T, int)> _column;
wxButton* _add;
wxButton* _edit;