/** * server/src/hardware/decoder/decoderlist.cpp * * This file is part of the traintastic source code. * * Copyright (C) 2019-2020 Reinder Feenstra * * 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., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ #include "decoderlist.hpp" #include "decoderlisttablemodel.hpp" #include "../../world/getworld.hpp" #include "../../core/attributes.hpp" #include "../../utils/displayname.hpp" DecoderList::DecoderList(Object& _parent, const std::string& parentPropertyName) : ObjectList(_parent, parentPropertyName), add{*this, "add", [this]() { auto world = getWorld(&this->parent()); if(!world) return std::shared_ptr(); auto decoder = Decoder::create(world, world->getUniqueId("decoder")); if(const auto controller = std::dynamic_pointer_cast(parent().shared_from_this())) { // todo: select free address? decoder->interface = controller; } return decoder; }} , remove{*this, "remove", [this](const std::shared_ptr& decoder) { if(!decoder) return; decoder->destroy(); assert(!containsObject(decoder)); }} { auto world = getWorld(&_parent); const bool editable = world && contains(world->state.value(), WorldState::Edit); Attributes::addDisplayName(add, DisplayName::List::add); Attributes::addEnabled(add, editable); m_interfaceItems.add(add); Attributes::addDisplayName(remove, DisplayName::List::remove); Attributes::addEnabled(remove, editable); m_interfaceItems.add(remove); } TableModelPtr DecoderList::getModel() { return std::make_shared(*this); } void DecoderList::worldEvent(WorldState state, WorldEvent event) { ObjectList::worldEvent(state, event); const bool editable = contains(state, WorldState::Edit); Attributes::setEnabled(add, editable); Attributes::setEnabled(remove, editable); } bool DecoderList::isListedProperty(const std::string& name) { return DecoderListTableModel::isListedProperty(name); }