tycho: use views in projects

master
an 2019-07-02 21:16:34 -04:00
parent 4a0257324e
commit e58f5d8907
5 changed files with 28 additions and 24 deletions

View File

@ -12,9 +12,9 @@ MapModel::~MapModel()
dbgPrintFunc();
}
ProjectModel::Type MapModel::type() const
ProjectModelType MapModel::type() const
{
return ProjectModel::Map;
return ProjectModelType::Map;
}
bool MapModel::isDirty() const

View File

@ -22,7 +22,7 @@ Menu::~Menu()
void Menu::mapNew()
{
QScopedPointer proj{new Project(new MapModel)};
QScopedPointer proj{new Project(ProjectModelType::Map)};
addProject(proj.take());
}
@ -40,7 +40,7 @@ void Menu::mapOpen()
"All files (*)"));
if(!fname.isEmpty()) {
QScopedPointer proj{new Project(new MapModel)};
QScopedPointer proj{new Project(ProjectModelType::Map)};
if(proj->getModel()->open(fname)) {
addProject(proj.take());
@ -98,7 +98,7 @@ void Menu::openMapProperties()
{
auto proj = activeProject();
if(proj && proj->getModel()->type() == ProjectModel::Map) {
if(proj && proj->getModel()->type() == ProjectModelType::Map) {
MapProps props{proj->getMapModel(), proj};
props.exec();
}
@ -111,8 +111,6 @@ void Menu::updateActions()
actionClose->setEnabled(active);
actionMapProps->setEnabled(active);
dbgPrintFunc();
}
void Menu::closeEvent(QCloseEvent *event)

View File

@ -1,8 +1,9 @@
#include "tycho.h"
Project::Project(ProjectModel *_model, QWidget *parent) :
QMdiSubWindow(parent),
model(_model)
Project::Project(ProjectModelType type) :
QMdiSubWindow(),
model(nullptr),
view(nullptr)
{
auto widget = new QWidget(this);
@ -11,7 +12,15 @@ Project::Project(ProjectModel *_model, QWidget *parent) :
setWidget(widget);
setAttribute(Qt::WA_DeleteOnClose);
switch(type) {
case ProjectModelType::Map:
model.reset(new MapModel(this));
view = new MapView(getMapModel(), this);
break;
}
listView->setModel(dynamic_cast<QAbstractItemModel *>(model.get()));
verticalLayout->insertWidget(0, view);
dbgPrintFunc();
}

View File

@ -31,17 +31,17 @@ class MapView;
class Menu;
class Project;
enum class ProjectModelType
{
Map,
};
class ProjectModel
{
public:
enum Type
{
Map,
};
virtual ~ProjectModel() {}
virtual Type type() const = 0;
virtual ProjectModelType type() const = 0;
virtual bool isDirty() const = 0;
virtual bool open(QString const &path) = 0;
@ -57,7 +57,7 @@ public:
explicit MapModel(QObject *parent = nullptr);
~MapModel() override;
ProjectModel::Type type() const override;
ProjectModelType type() const override;
bool isDirty() const override;
bool open(QString const &path) override;
@ -126,18 +126,18 @@ class Project final : public QMdiSubWindow, private Ui::Project
Q_OBJECT
public:
explicit Project(ProjectModel *model, QWidget *parent = nullptr);
explicit Project(ProjectModelType type);
~Project();
std::shared_ptr<ProjectModel> getModel();
std::shared_ptr<MapModel> getMapModel();
std::shared_ptr<QAbstractItemModel> getAbstractModel();
std::shared_ptr<ProjectModel> getModel();
std::shared_ptr<MapModel> getMapModel();
protected:
void closeEvent(QCloseEvent *event) override;
private:
std::shared_ptr<ProjectModel> model;
QWidget *view;
};
template<typename... VA>

View File

@ -14,9 +14,6 @@
<string>Project</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout">
<item>
<widget class="QWidget" name="widget" native="true"/>
</item>
<item>
<widget class="QListView" name="listView">
<property name="frameShape">