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(); dbgPrintFunc();
} }
ProjectModel::Type MapModel::type() const ProjectModelType MapModel::type() const
{ {
return ProjectModel::Map; return ProjectModelType::Map;
} }
bool MapModel::isDirty() const bool MapModel::isDirty() const

View File

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

View File

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

View File

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

View File

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