#include "lib/config.h"
#include "lib/cinema.h"
#include "lib/screen.h"
-#include <boost/foreach.hpp>
using std::list;
using std::pair;
using std::map;
using std::string;
using std::make_pair;
-using boost::shared_ptr;
+using std::shared_ptr;
using boost::optional;
using namespace dcpomatic;
{
wxBoxSizer* sizer = new wxBoxSizer (wxVERTICAL);
- _search = new wxSearchCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize (200, -1));
+#ifdef __WXGTK3__
+ int const height = 30;
+#else
+ int const height = -1;
+#endif
+
+ _search = new wxSearchCtrl (this, wxID_ANY, wxEmptyString, wxDefaultPosition, wxSize(200, height));
+#ifndef __WXGTK3__
+ /* The cancel button seems to be strangely broken in GTK3; clicking on it twice sometimes works */
_search->ShowCancelButton (true);
+#endif
sizer->Add (_search, 0, wxBOTTOM, DCPOMATIC_SIZER_GAP);
wxBoxSizer* targets = new wxBoxSizer (wxHORIZONTAL);
_remove_screen->Enable (_selected_screens.size() >= 1);
}
-void
+
+optional<wxTreeItemId>
ScreensPanel::add_cinema (shared_ptr<Cinema> c)
{
string search = wx_to_std (_search->GetValue ());
string name = c->name;
transform (name.begin(), name.end(), name.begin(), ::tolower);
if (name.find (search) == string::npos) {
- return;
+ return optional<wxTreeItemId>();
}
}
- _cinemas[_targets->AppendItem (_root, std_to_wx (c->name))] = c;
+ wxTreeItemId id = _targets->AppendItem(_root, std_to_wx(c->name));
+
+ _cinemas[id] = c;
- list<shared_ptr<Screen> > sc = c->screens ();
- for (list<shared_ptr<Screen> >::iterator i = sc.begin(); i != sc.end(); ++i) {
- add_screen (c, *i);
+ for (auto i: c->screens()) {
+ add_screen (c, i);
}
_targets->SortChildren (_root);
+
+ return id;
}
+
optional<wxTreeItemId>
ScreensPanel::add_screen (shared_ptr<Cinema> c, shared_ptr<Screen> s)
{
if (d->ShowModal () == wxID_OK) {
shared_ptr<Cinema> c (new Cinema (d->name(), d->emails(), d->notes(), d->utc_offset_hour(), d->utc_offset_minute()));
Config::instance()->add_cinema (c);
- add_cinema (c);
+ optional<wxTreeItemId> id = add_cinema (c);
+ if (id) {
+ _targets->Unselect ();
+ _targets->SelectItem (*id);
+ }
}
d->Destroy ();
void
ScreensPanel::remove_cinema_clicked ()
{
+ if (_selected_cinemas.size() == 1) {
+ if (!confirm_dialog(this, wxString::Format(_("Are you sure you want to remove the cinema '%s'?"), std_to_wx(_selected_cinemas.begin()->second->name)))) {
+ return;
+ }
+ } else {
+ if (!confirm_dialog(this, wxString::Format(_("Are you sure you want to remove %d cinemas?"), int(_selected_cinemas.size())))) {
+ return;
+ }
+ }
+
for (CinemaMap::iterator i = _selected_cinemas.begin(); i != _selected_cinemas.end(); ++i) {
Config::instance()->remove_cinema (i->second);
_targets->Delete (i->first);
return;
}
- BOOST_FOREACH (shared_ptr<Screen> i, c->screens ()) {
+ for (auto i: c->screens ()) {
if (i->name == d->name()) {
error_dialog (
GetParent(),
}
}
- shared_ptr<Screen> s (new Screen (d->name(), d->recipient(), d->trusted_devices()));
+ shared_ptr<Screen> s (new Screen (d->name(), d->notes(), d->recipient(), d->trusted_devices()));
c->add_screen (s);
optional<wxTreeItemId> id = add_screen (c, s);
if (id) {
}
shared_ptr<Cinema> c = s.second->cinema;
- BOOST_FOREACH (shared_ptr<Screen> i, c->screens ()) {
+ for (auto i: c->screens ()) {
if (i != s.second && i->name == d->name()) {
error_dialog (
GetParent(),
void
ScreensPanel::remove_screen_clicked ()
{
+ if (_selected_screens.size() == 1) {
+ if (!confirm_dialog(this, wxString::Format(_("Are you sure you want to remove the screen '%s'?"), std_to_wx(_selected_screens.begin()->second->name)))) {
+ return;
+ }
+ } else {
+ if (!confirm_dialog(this, wxString::Format(_("Are you sure you want to remove %d screens?"), int(_selected_screens.size())))) {
+ return;
+ }
+ }
+
for (ScreenMap::iterator i = _selected_screens.begin(); i != _selected_screens.end(); ++i) {
CinemaMap::iterator j = _cinemas.begin ();
while (j != _cinemas.end ()) {
{
_root = _targets->AddRoot ("Foo");
- BOOST_FOREACH (shared_ptr<Cinema> i, Config::instance()->cinemas ()) {
+ for (auto i: Config::instance()->cinemas()) {
add_cinema (i);
}
}