Added delete and throttle support to object list, removed old useless classes

Dieser Commit ist enthalten in:
Reinder Feenstra 2021-08-21 21:26:14 +02:00
Ursprung f4db05aa0a
Commit 4ca523a513
12 geänderte Dateien mit 120 neuen und 290 gelöschten Zeilen

Datei anzeigen

@ -50,6 +50,8 @@ file(GLOB SOURCES
"src/widget/*.cpp"
"src/widget/object/*.hpp"
"src/widget/object/*.cpp"
"src/widget/objectlist/*.hpp"
"src/widget/objectlist/*.cpp"
"src/widget/throttle/*.hpp"
"src/widget/throttle/*.cpp"
"../shared/src/traintastic/locale/locale.cpp"

Datei anzeigen

@ -1,31 +0,0 @@
/**
* client/src/widget/commandstationlistwidget.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 "commandstationlistwidget.hpp"
CommandStationListWidget::CommandStationListWidget(const ObjectPtr& object, QWidget* parent) :
ObjectListWidget(object, parent)
{
//addActionAdd();
addActionEdit();
addActionDelete();
}

Datei anzeigen

@ -1,36 +0,0 @@
/**
* client/src/widget/commandstationlistwidget.hpp
*
* 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.
*/
#ifndef TRAINTASTIC_CLIENT_WIDGET_COMMANDSTATIONLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_COMMANDSTATIONLISTWIDGET_HPP
#include "objectlistwidget.hpp"
class CommandStationListWidget : public ObjectListWidget
{
Q_OBJECT
public:
CommandStationListWidget(const ObjectPtr& object, QWidget* parent = nullptr);
};
#endif

Datei anzeigen

@ -21,10 +21,7 @@
*/
#include "createwidget.hpp"
#include "commandstationlistwidget.hpp"
#include "decoderlistwidget.hpp"
#include "inputlistwidget.hpp"
#include "luascriptlistwidget.hpp"
#include "objectlist/throttleobjectlistwidget.hpp"
#include "object/luascripteditwidget.hpp"
#include "object/objecteditwidget.hpp"
#include "object/itemseditwidget.hpp"
@ -42,17 +39,17 @@ QWidget* createWidgetIfCustom(const ObjectPtr& object, QWidget* parent)
const QString& classId = object->classId();
if(classId == "command_station_list")
return new CommandStationListWidget(object, parent); // todo remove
return new ObjectListWidget(object, parent); // todo remove
else if(classId == "decoder_list")
return new DecoderListWidget(object, parent); // todo remove
return new ThrottleObjectListWidget(object, parent); // todo remove
else if(classId == "input_list")
return new InputListWidget(object, parent); // todo remove
return new ObjectListWidget(object, parent); // todo remove
else if(classId == "controller_list")
return new ObjectListWidget(object, parent); // todo remove
else if(classId == "rail_vehicle_list")
return new ObjectListWidget(object, parent); // todo remove
else if(classId == "lua.script_list")
return new LuaScriptListWidget(object, parent); // todo remove
return new ObjectListWidget(object, parent); // todo remove
else if(classId == "world_list")
return new ObjectListWidget(object, parent);
else if(classId == "lua.script")

Datei anzeigen

@ -1,35 +0,0 @@
/**
* client/src/widget/decoderlistwidget.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 "inputlistwidget.hpp"
InputListWidget::InputListWidget(const ObjectPtr& object, QWidget* parent) :
ObjectListWidget(object, parent)
{
//addActionAdd();
addActionEdit();
addActionDelete();
}
void InputListWidget::add()
{
}

Datei anzeigen

@ -1,39 +0,0 @@
/**
* client/src/widget/decoderlistwidget.hpp
*
* 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.
*/
#ifndef TRAINTASTIC_CLIENT_WIDGET_INPUTLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_INPUTLISTWIDGET_HPP
#include "objectlistwidget.hpp"
class InputListWidget : public ObjectListWidget
{
Q_OBJECT
protected:
void add() final;
public:
InputListWidget(const ObjectPtr& object, QWidget* parent = nullptr);
};
#endif

Datei anzeigen

@ -1,37 +0,0 @@
/**
* client/src/widget/luascriptlistwidget.cpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 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 "luascriptlistwidget.hpp"
#include "../network/connection.hpp"
LuaScriptListWidget::LuaScriptListWidget(const ObjectPtr& object, QWidget* parent) :
ObjectListWidget(object, parent)
{
//addActionAdd();
//addActionEdit();
//addActionDelete();
}
void LuaScriptListWidget::add()
{
//Client::instance->createObject("lua.script");
}

Datei anzeigen

@ -1,39 +0,0 @@
/**
* client/src/widget/luascriptlistwidget.hpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 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.
*/
#ifndef TRAINTASTIC_CLIENT_WIDGET_LUASCRIPTLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_LUASCRIPTLISTWIDGET_HPP
#include "objectlistwidget.hpp"
class LuaScriptListWidget : public ObjectListWidget
{
Q_OBJECT
protected:
void add() final;
public:
LuaScriptListWidget(const ObjectPtr& object, QWidget* parent = nullptr);
};
#endif

Datei anzeigen

@ -1,9 +1,9 @@
/**
* client/src/widget/objectlistwidget.cpp
* client/src/widget/objectlist/objectlistwidget.cpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 2019-2020 Reinder Feenstra
* Copyright (C) 2019-2021 Reinder Feenstra
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -26,17 +26,19 @@
#include <QTableView>
#include <QtWaitingSpinner/waitingspinnerwidget.h>
#include <traintastic/locale/locale.hpp>
#include "tablewidget.hpp"
#include "../network/connection.hpp"
#include "../network/object.hpp"
#include "../network/tablemodel.hpp"
#include "../network/method.hpp"
#include "../network/utils.hpp"
#include "../widget/alertwidget.hpp"
#include "../theme/theme.hpp"
#include "../tablewidget.hpp"
#include "../../network/connection.hpp"
#include "../../network/object.hpp"
#include "../../network/tablemodel.hpp"
#include "../../network/method.hpp"
#include "../../network/utils.hpp"
#include "../../network/callmethod.hpp"
#include "../alertwidget.hpp"
#include "../../theme/theme.hpp"
#include "../../misc/methodaction.hpp"
#include "../mainwindow.hpp"
#include "../../mainwindow.hpp"
@ -55,6 +57,8 @@ ObjectListWidget::ObjectListWidget(const ObjectPtr& object, QWidget* parent) :
m_actionDelete{nullptr},
m_tableWidget{new TableWidget()}
{
m_tableWidget->setSelectionBehavior(QAbstractItemView::SelectRows);
QVBoxLayout* layout = new QVBoxLayout();
layout->setMargin(0);
layout->addWidget(m_toolbar);
@ -73,6 +77,12 @@ ObjectListWidget::ObjectListWidget(const ObjectPtr& object, QWidget* parent) :
m_tableWidget->setTableModel(tableModel);
connect(m_tableWidget, &TableWidget::doubleClicked, this, &ObjectListWidget::tableDoubleClicked);
connect(m_tableWidget->selectionModel(), &QItemSelectionModel::selectionChanged, this,
[this](const QItemSelection&, const QItemSelection&)
{
tableSelectionChanged();
});
tableSelectionChanged();
delete spinner;
}
@ -159,13 +169,24 @@ ObjectListWidget::ObjectListWidget(const ObjectPtr& object, QWidget* parent) :
Q_ASSERT(false); // unsupported method prototype
}
m_actionEdit = m_toolbar->addAction(Theme::getIcon("edit"), tr("Edit"));
m_actionEdit = m_toolbar->addAction(Theme::getIcon("edit"), Locale::tr("object_list:edit"),
[this]()
{
for(const QString& id : getSelectedObjectIds())
MainWindow::instance->showObject(id);
});
m_actionEdit->setEnabled(false);
if(Method* method = m_object->getMethod("remove"))
{
m_actionDelete = m_toolbar->addAction(Theme::getIcon("delete"), method->displayName());
//m_actionDelete->setEnabled(false);
m_actionDelete = new MethodAction(Theme::getIcon("delete"), *method,
[this]()
{
for(const QString& id : getSelectedObjectIds())
callMethod(m_actionDelete->method(), nullptr, id);
});
m_actionDelete->setForceDisabled(true);
m_toolbar->addAction(m_actionDelete);
}
}
@ -174,17 +195,6 @@ ObjectListWidget::~ObjectListWidget()
m_object->connection()->cancelRequest(m_requestId);
}
void ObjectListWidget::addActionEdit()
{
// Q_ASSERT(!m_actionEdit);
}
void ObjectListWidget::addActionDelete()
{
// Q_ASSERT(!m_actionDelete);
}
void ObjectListWidget::objectDoubleClicked(const QString& id)
{
MainWindow::instance->showObject(id);
@ -197,5 +207,27 @@ void ObjectListWidget::tableDoubleClicked(const QModelIndex& index)
objectDoubleClicked(id);
}
QStringList ObjectListWidget::getSelectedObjectIds() const
{
QStringList ids;
if(auto* model = m_tableWidget->selectionModel(); model && model->hasSelection())
for(const auto& index : model->selectedRows())
if(QString id = m_tableWidget->getRowObjectId(index.row()); !id.isEmpty())
ids.append(id);
return ids;
}
void ObjectListWidget::tableSelectionChanged()
{
tableSelectionChanged(m_tableWidget->selectionModel() && m_tableWidget->selectionModel()->hasSelection());
}
void ObjectListWidget::tableSelectionChanged(bool hasSelection)
{
if(m_actionEdit)
m_actionEdit->setEnabled(hasSelection);
if(m_actionDelete)
m_actionDelete->setForceDisabled(!hasSelection);
}

Datei anzeigen

@ -1,9 +1,9 @@
/**
* client/src/widget/objectlistwidget.hpp
* client/src/widget/objectlist/objectlistwidget.hpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 2019-2020 Reinder Feenstra
* Copyright (C) 2019-2021 Reinder Feenstra
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -20,42 +20,45 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef TRAINTASTIC_CLIENT_WIDGET_OBJECTLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_OBJECTLISTWIDGET_HPP
#ifndef TRAINTASTIC_CLIENT_WIDGET_OBJECTLIST_OBJECTLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_OBJECTLIST_OBJECTLISTWIDGET_HPP
#include <QWidget>
#include "../network/objectptr.hpp"
#include "../../network/objectptr.hpp"
class QToolBar;
class QToolButton;
class TableWidget;
class MethodAction;
class ObjectListWidget : public QWidget
{
Q_OBJECT
private:
//const QString m_id;
int m_requestId;
int m_requestIdAdd;
ObjectPtr m_object;
QToolBar* m_toolbar;
QToolButton* m_buttonAdd;
QAction* m_actionAdd;
QAction* m_actionEdit;
MethodAction* m_actionDelete;
TableWidget* m_tableWidget;
void tableSelectionChanged();
private slots:
void tableDoubleClicked(const QModelIndex& index);
protected:
const QString m_id;
int m_requestId;
int m_requestIdAdd;
ObjectPtr m_object;
QToolBar* m_toolbar;
QAction* m_actionAdd;
QAction* m_actionEdit;
QAction* m_actionDelete;
TableWidget* m_tableWidget;
const ObjectPtr& object() { return m_object; }
QToolBar* toolbar() { return m_toolbar; }
void addActionEdit();
void addActionDelete();
virtual void add() { Q_ASSERT(false); }
virtual void tableSelectionChanged(bool hasSelection);
virtual void objectDoubleClicked(const QString& id);
QStringList getSelectedObjectIds() const;
public:
explicit ObjectListWidget(const ObjectPtr& object, QWidget* parent = nullptr);

Datei anzeigen

@ -1,9 +1,9 @@
/**
* client/src/widget/decoderlistwidget.cpp
* client/src/widget/objectlist/throttleobjectlistwidget.cpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 2019-2020 Reinder Feenstra
* Copyright (C) 2021 Reinder Feenstra
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -20,25 +20,36 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#include "decoderlistwidget.hpp"
#include "tablewidget.hpp"
#include "../network/connection.hpp"
#include "../network/object.hpp"
#include "../network/abstractproperty.hpp"
#include "../mainwindow.hpp"
#include "throttleobjectlistwidget.hpp"
#include <QToolBar>
#include "../../network/connection.hpp"
#include "../../network/object.hpp"
#include "../../network/abstractproperty.hpp"
#include "../../mainwindow.hpp"
DecoderListWidget::DecoderListWidget(const ObjectPtr& object, QWidget* parent) :
ObjectListWidget(object, parent)
ThrottleObjectListWidget::ThrottleObjectListWidget(const ObjectPtr& object, QWidget* parent)
: ObjectListWidget(object, parent)
{
addActionEdit();
addActionDelete();
toolbar()->addSeparator();
m_actionThrottle = toolbar()->addAction("throttle_object_list:throttle",
[this]()
{
for(const QString& id : getSelectedObjectIds())
MainWindow::instance->showObject(id, "", SubWindowType::Throttle);
});
m_actionThrottle->setEnabled(false);
}
void DecoderListWidget::objectDoubleClicked(const QString& id)
void ThrottleObjectListWidget::tableSelectionChanged(bool hasSelection)
{
if(m_object)
m_actionThrottle->setEnabled(hasSelection);
}
void ThrottleObjectListWidget::objectDoubleClicked(const QString& id)
{
if(object())
{
if(const auto& c = m_object->connection())
if(const auto& c = object()->connection())
{
if(const auto& w = c->world())
{

Datei anzeigen

@ -1,9 +1,9 @@
/**
* client/src/widget/decoderlistwidget.hpp
* client/src/widget/objectlist/throttleobjectlistwidget.hpp
*
* This file is part of the traintastic source code.
*
* Copyright (C) 2019-2020 Reinder Feenstra
* Copyright (C) 2021 Reinder Feenstra
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License
@ -20,20 +20,22 @@
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
*/
#ifndef TRAINTASTIC_CLIENT_WIDGET_DECODERLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_DECODERLISTWIDGET_HPP
#ifndef TRAINTASTIC_CLIENT_WIDGET_OBJECTLIST_THROTTLEOBJECTLISTWIDGET_HPP
#define TRAINTASTIC_CLIENT_WIDGET_OBJECTLIST_THROTTLEOBJECTLISTWIDGET_HPP
#include "objectlistwidget.hpp"
class DecoderListWidget : public ObjectListWidget
class ThrottleObjectListWidget : public ObjectListWidget
{
Q_OBJECT
private:
QAction* m_actionThrottle;
protected:
void tableSelectionChanged(bool hasSelection) final;
void objectDoubleClicked(const QString& id) final;
public:
explicit DecoderListWidget(const ObjectPtr& object, QWidget* parent = nullptr);
explicit ThrottleObjectListWidget(const ObjectPtr& object, QWidget* parent = nullptr);
};
#endif