From f928869357765e3a73501064408bb7bc0ee363ef Mon Sep 17 00:00:00 2001 From: Treeki Date: Wed, 5 Sep 2012 01:36:57 +0200 Subject: improving the material editor --- LayoutStudio.pro | 6 ++++-- lslayoutwindow.cpp | 10 ++++++++++ lsmaterialeditor.cpp | 31 +++++++++++++++++++++++++++++++ lsmaterialmodel.cpp | 23 +++++++++++++++++++++++ lsmaterialmodel.h | 25 +++++++++++++++++++++++++ 5 files changed, 93 insertions(+), 2 deletions(-) create mode 100644 lsmaterialmodel.cpp create mode 100644 lsmaterialmodel.h diff --git a/LayoutStudio.pro b/LayoutStudio.pro index 9f2fc26..e4c57c6 100644 --- a/LayoutStudio.pro +++ b/LayoutStudio.pro @@ -42,7 +42,8 @@ SOURCES += main.cpp \ lspaneeditor.cpp \ lstexcoordseteditor.cpp \ lsmaterialeditor.cpp \ - lscolorpicker.cpp + lscolorpicker.cpp \ + lsmaterialmodel.cpp HEADERS += lsmainwindow.h \ lsglobals.h \ lyt/packagebase.h \ @@ -83,7 +84,8 @@ HEADERS += lsmainwindow.h \ lspaneeditor.h \ lstexcoordseteditor.h \ lsmaterialeditor.h \ - lscolorpicker.h + lscolorpicker.h \ + lsmaterialmodel.h FORMS += RESOURCES += resources.qrc diff --git a/lslayoutwindow.cpp b/lslayoutwindow.cpp index 38e0417..3323803 100644 --- a/lslayoutwindow.cpp +++ b/lslayoutwindow.cpp @@ -1,5 +1,6 @@ #include "lslayoutwindow.h" #include "lsscenemodel.h" +#include "lsmaterialmodel.h" #include "lspaneeditor.h" #include "lsmaterialeditor.h" #include "layoutgl/widget.h" @@ -123,6 +124,12 @@ LSLayoutWindow::LSLayoutWindow(LYTPackageBase *pkg, const QString &layoutName, Q m_sceneGraph->expandAll(); connect(m_sceneGraph->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(selectedPaneChanged(QModelIndex,QModelIndex))); + LSMaterialModel *matModel = new LSMaterialModel(&m_layout->materials, this); + + m_materialList->setSelectionMode(QAbstractItemView::SingleSelection); + m_materialList->setModel(matModel); + connect(m_materialList->selectionModel(), SIGNAL(currentChanged(QModelIndex,QModelIndex)), SLOT(selectedMaterialChanged(QModelIndex,QModelIndex))); + setWindowTitle(m_layoutName); @@ -161,7 +168,10 @@ void LSLayoutWindow::selectedPaneChanged(const QModelIndex ¤t, const QMode } void LSLayoutWindow::selectedMaterialChanged(const QModelIndex ¤t, const QModelIndex &previous) { + (void)previous; + LYTMaterial *mat = m_layout->materials.getMaterialByIndex(current.row()); + m_materialEditor->setMaterial(mat); } diff --git a/lsmaterialeditor.cpp b/lsmaterialeditor.cpp index 20f36f5..f1c5736 100644 --- a/lsmaterialeditor.cpp +++ b/lsmaterialeditor.cpp @@ -1,4 +1,5 @@ #include "lsmaterialeditor.h" +#include LSMaterialEditor::LSMaterialEditor(QWidget *parent) : QWidget(parent) { @@ -10,6 +11,25 @@ LSMaterialEditor::LSMaterialEditor(QWidget *parent) : grid->addWidget(new QLabel("Name:", this), 0, 0, 1, 1); grid->addWidget(m_nameEntry, 0, 1, 1, 1); + // TEV colour box + QGroupBox *tevCBox = new QGroupBox("TEV Colours", this); + QGridLayout *tevCLayout = new QGridLayout(tevCBox); + + tevCLayout->addWidget(new QLabel("Registers:", tevCBox), 0, 0, 1, 4); + tevCLayout->addWidget(new QLabel("Constant:", tevCBox), 2, 0, 1, 4); + + for (int i = 0; i < 7; i++) { + m_colourPickers[i] = new LSColorPicker(tevCBox); + bool isKonst = (i >= 3); + tevCLayout->addWidget(m_colourPickers[i], isKonst?3:1, isKonst?(i-3):i, 1, 1); + } + + grid->addWidget(tevCBox, 1, 0, 1, 2); + + + grid->setRowStretch(2, 1); + + m_currentlyLoadingMaterial = false; m_material = 0; } @@ -18,6 +38,13 @@ void LSMaterialEditor::setMaterial(LYTMaterial *mat) { m_currentlyLoadingMaterial = true; m_material = mat; + m_nameEntry->setText(mat->name); + + for (int i = 0; i < 3; i++) + m_colourPickers[i]->setColor(mat->colours[i]); + for (int i = 0; i < 4; i++) + m_colourPickers[i+3]->setColor(mat->tevKColour[i]); + m_currentlyLoadingMaterial = false; } @@ -29,3 +56,7 @@ void LSMaterialEditor::handleNameChanged(QString value) { void LSMaterialEditor::handleSaveChangedName() { } + +void LSMaterialEditor::handleColourPicked(QColor value) { + +} diff --git a/lsmaterialmodel.cpp b/lsmaterialmodel.cpp new file mode 100644 index 0000000..37f8f58 --- /dev/null +++ b/lsmaterialmodel.cpp @@ -0,0 +1,23 @@ +#include "lsmaterialmodel.h" + +LSMaterialModel::LSMaterialModel(LYTMaterialContainer *container, QObject *parent) : + QAbstractListModel(parent) +{ + m_container = container; +} + + +int LSMaterialModel::rowCount(const QModelIndex &parent) const { + return m_container->count(); +} + +QVariant LSMaterialModel::data(const QModelIndex &index, int role) const { + if (index.isValid()) { + switch (role) { + case Qt::DisplayRole: + return m_container->getNameOfIndex(index.row()); + } + } + + return QVariant(); +} diff --git a/lsmaterialmodel.h b/lsmaterialmodel.h new file mode 100644 index 0000000..6b75fd6 --- /dev/null +++ b/lsmaterialmodel.h @@ -0,0 +1,25 @@ +#ifndef LSMATERIALMODEL_H +#define LSMATERIALMODEL_H + +#include +#include "lyt/materials/materialcontainer.h" + +class LSMaterialModel : public QAbstractListModel +{ + Q_OBJECT +public: + explicit LSMaterialModel(LYTMaterialContainer *container, QObject *parent = 0); + + int rowCount(const QModelIndex &parent) const; + QVariant data(const QModelIndex &index, int role) const; + +private: + LYTMaterialContainer *m_container; + +signals: + +public slots: + +}; + +#endif // LSMATERIALMODEL_H -- cgit v1.2.3