diff --git a/armoury/include/boneeditor.h b/armoury/include/boneeditor.h index fa3d80a..e16e5d0 100644 --- a/armoury/include/boneeditor.h +++ b/armoury/include/boneeditor.h @@ -3,8 +3,6 @@ #pragma once -#include "quaternionedit.h" -#include "vec3edit.h" #include #include #include @@ -12,18 +10,22 @@ #include #include +#include "quaternionedit.h" +#include "vec3edit.h" + class GearView; -class BoneEditor : public QWidget { +class BoneEditor : public QWidget +{ Q_OBJECT public: - explicit BoneEditor(GearView* gearView, QWidget* parent = nullptr); + explicit BoneEditor(GearView *gearView, QWidget *parent = nullptr); private: - void treeItemClicked(QTreeWidgetItem* item, int column); + void treeItemClicked(QTreeWidgetItem *item, int column); - GearView* gearView; + GearView *gearView; glm::vec3 currentPosition; glm::quat currentRotation; @@ -33,13 +35,13 @@ private: glm::quat currentRaceRotation; glm::vec3 currentRaceScale; - physis_Bone* currentEditedBone; + physis_Bone *currentEditedBone = nullptr; - Vector3Edit* posEdit; - QuaternionEdit* rotationEdit; - Vector3Edit* scaleEdit; + Vector3Edit *posEdit = nullptr; + QuaternionEdit *rotationEdit = nullptr; + Vector3Edit *scaleEdit = nullptr; - Vector3Edit* raceDeformPosEdit; - QuaternionEdit* raceDeformRotationEdit; - Vector3Edit* raceDeformScaleEdit; + Vector3Edit *raceDeformPosEdit = nullptr; + QuaternionEdit *raceDeformRotationEdit = nullptr; + Vector3Edit *raceDeformScaleEdit = nullptr; }; diff --git a/armoury/include/cmpeditor.h b/armoury/include/cmpeditor.h index 96a664b..a8bb339 100644 --- a/armoury/include/cmpeditor.h +++ b/armoury/include/cmpeditor.h @@ -7,44 +7,51 @@ #include #include -class RaceTreeData : public QObject { +class RaceTreeData : public QObject +{ Q_OBJECT + public: - RaceTreeData(Race race, Subrace subrace) : race(race), subrace(subrace) {} + RaceTreeData(Race race, Subrace subrace) + : race(race) + , subrace(subrace) + { + } Race race; Subrace subrace; }; -class CmpEditor : public QWidget { +class CmpEditor : public QWidget +{ Q_OBJECT public: - explicit CmpEditor(GameData* data); + explicit CmpEditor(GameData *data, QWidget *parent = nullptr); private: void loadRaceData(Race race, Subrace subrace); - GameData* data; + GameData *data = nullptr; physis_CMP cmp; - QDoubleSpinBox* maleMinSize; - QDoubleSpinBox* maleMaxSize; + QDoubleSpinBox *maleMinSize = nullptr; + QDoubleSpinBox *maleMaxSize = nullptr; - QDoubleSpinBox* maleMinTail; - QDoubleSpinBox* maleMaxTail; + QDoubleSpinBox *maleMinTail = nullptr; + QDoubleSpinBox *maleMaxTail = nullptr; - QDoubleSpinBox* femaleMinSize; - QDoubleSpinBox* femaleMaxSize; + QDoubleSpinBox *femaleMinSize = nullptr; + QDoubleSpinBox *femaleMaxSize = nullptr; - QDoubleSpinBox* femaleMinTail; - QDoubleSpinBox* femaleMaxTail; + QDoubleSpinBox *femaleMinTail = nullptr; + QDoubleSpinBox *femaleMaxTail = nullptr; - QDoubleSpinBox* bustMinX; - QDoubleSpinBox* bustMinY; - QDoubleSpinBox* bustMinZ; + QDoubleSpinBox *bustMinX = nullptr; + QDoubleSpinBox *bustMinY = nullptr; + QDoubleSpinBox *bustMinZ = nullptr; - QDoubleSpinBox* bustMaxX; - QDoubleSpinBox* bustMaxY; - QDoubleSpinBox* bustMaxZ; + QDoubleSpinBox *bustMaxX = nullptr; + QDoubleSpinBox *bustMaxY = nullptr; + QDoubleSpinBox *bustMaxZ = nullptr; }; diff --git a/armoury/include/fullmodelviewer.h b/armoury/include/fullmodelviewer.h index ffb8480..8419235 100644 --- a/armoury/include/fullmodelviewer.h +++ b/armoury/include/fullmodelviewer.h @@ -11,10 +11,12 @@ struct GameData; class FileCache; -class FullModelViewer : public QMainWindow { +class FullModelViewer : public QMainWindow +{ Q_OBJECT + public: - explicit FullModelViewer(GameData* data, FileCache& cache); + explicit FullModelViewer(GameData *data, FileCache &cache, QWidget *parent = nullptr); Q_SIGNALS: void gearChanged(); @@ -22,7 +24,7 @@ Q_SIGNALS: public Q_SLOTS: void clear(); - void addGear(GearInfo& info); + void addGear(GearInfo &info); private Q_SLOTS: void reloadGear(); @@ -33,18 +35,18 @@ private: void updateCharacterParameters(); void updateSupportedSubraces(); - QGroupBox* addFaceGroup(); - QGroupBox* addHairGroup(); - QGroupBox* addEarGroup(); - QGroupBox* addTailGroup(); + QGroupBox *addFaceGroup(); + QGroupBox *addHairGroup(); + QGroupBox *addEarGroup(); + QGroupBox *addTailGroup(); std::optional topSlot; std::optional bottomSlot; - GearView* gearView = nullptr; - QComboBox *raceCombo, *subraceCombo, *genderCombo; + GearView *gearView = nullptr; + QComboBox *raceCombo = nullptr, *subraceCombo = nullptr, *genderCombo = nullptr; - GameData* data = nullptr; + GameData *data = nullptr; physis_CMP cmp; float heightScale = 0.5f; diff --git a/armoury/include/gearlistmodel.h b/armoury/include/gearlistmodel.h index dc85506..4da5f0e 100644 --- a/armoury/include/gearlistmodel.h +++ b/armoury/include/gearlistmodel.h @@ -8,48 +8,45 @@ #include "gearview.h" -enum class TreeType { - Root, - Category, - Item -}; +enum class TreeType { Root, Category, Item }; struct TreeInformation { TreeType type; std::optional slotType; - TreeInformation* parent = nullptr; + TreeInformation *parent = nullptr; std::optional gear; int row = 0; - std::vector children; + std::vector children; }; -class GearListModel : public QAbstractItemModel { +class GearListModel : public QAbstractItemModel +{ Q_OBJECT public: - explicit GearListModel(GameData* data); + explicit GearListModel(GameData *data, QObject *parent = nullptr); - int rowCount(const QModelIndex& parent = QModelIndex()) const override; - int columnCount(const QModelIndex& parent = QModelIndex()) const override; + int rowCount(const QModelIndex &parent = QModelIndex()) const override; + int columnCount(const QModelIndex &parent = QModelIndex()) const override; - QModelIndex index(int row, int column = 0, const QModelIndex& parent = QModelIndex()) const override; - QModelIndex parent(const QModelIndex& child) const override; + QModelIndex index(int row, int column = 0, const QModelIndex &parent = QModelIndex()) const override; + QModelIndex parent(const QModelIndex &child) const override; - QVariant data(const QModelIndex& index, int role = Qt::DisplayRole) const override; + QVariant data(const QModelIndex &index, int role = Qt::DisplayRole) const override; QVariant headerData(int section, Qt::Orientation orientation, int role = Qt::DisplayRole) const override; - std::optional getGearFromIndex(const QModelIndex& index); + std::optional getGearFromIndex(const QModelIndex &index); private: void exdFinished(int index); void finished(); - QFutureWatcher* exdFuture; + QFutureWatcher *exdFuture; std::vector gears; QStringList slotNames; - GameData* gameData = nullptr; - TreeInformation* rootItem = nullptr; + GameData *gameData = nullptr; + TreeInformation *rootItem = nullptr; }; \ No newline at end of file diff --git a/armoury/include/gearlistwidget.h b/armoury/include/gearlistwidget.h index 76d125a..21456e2 100644 --- a/armoury/include/gearlistwidget.h +++ b/armoury/include/gearlistwidget.h @@ -9,17 +9,18 @@ #include "gearview.h" -class GearListWidget : public QWidget { +class GearListWidget : public QWidget +{ Q_OBJECT public: - explicit GearListWidget(GameData* data, QWidget* parent = nullptr); + explicit GearListWidget(GameData *data, QWidget *parent = nullptr); Q_SIGNALS: - void gearSelected(const GearInfo& gear); + void gearSelected(const GearInfo &gear); private: - QTreeView* listWidget = nullptr; + QTreeView *listWidget = nullptr; - GameData* data = nullptr; + GameData *data = nullptr; }; diff --git a/armoury/include/gearview.h b/armoury/include/gearview.h index e24cb9d..86929b4 100644 --- a/armoury/include/gearview.h +++ b/armoury/include/gearview.h @@ -19,7 +19,8 @@ struct GearInfo { Slot slot; ModelInfo modelInfo; - std::string getMtrlPath(const std::string_view material_name) const { + std::string getMtrlPath(const std::string_view material_name) const + { return physis_build_gear_material_path(modelInfo.primaryID, modelInfo.gearVersion, material_name.data()); } }; @@ -31,10 +32,12 @@ inline bool operator==(const GearInfo &a, const GearInfo &b) struct GameData; -class GearView : public QWidget { +class GearView : public QWidget +{ Q_OBJECT + public: - explicit GearView(GameData* data, FileCache& cache); + explicit GearView(GameData *data, FileCache &cache, QWidget *parent = nullptr); /// Returns an inclusive list of races supported by the current gearset. std::vector> supportedRaces() const; @@ -45,9 +48,9 @@ public: /// Returns an inclusive list of LoDs supported by the current gearset. int lodCount() const; - void exportModel(const QString& fileName); + void exportModel(const QString &fileName); - MDLPart& part() const; + MDLPart &part() const; Race currentRace = Race::Hyur; Subrace currentSubrace = Subrace::Midlander; @@ -71,7 +74,7 @@ Q_SIGNALS: void tailChanged(); public Q_SLOTS: - void addGear(GearInfo& gear); + void addGear(GearInfo &gear); void removeGear(GearInfo &gear); void setRace(Race race); @@ -106,15 +109,12 @@ private: bool faceDirty = false, hairDirty = false, earDirty = false, tailDirty = false; bool raceDirty = false; - MDLPart* mdlPart = nullptr; + MDLPart *mdlPart = nullptr; - GameData* data; - FileCache& cache; + GameData *data; + FileCache &cache; bool updating = false; void updatePart(); bool needsUpdate() const; - - void gearUpdate(LoadedGear &gear); - void queueGearUpdate(LoadedGear &gear); }; \ No newline at end of file diff --git a/armoury/include/mainwindow.h b/armoury/include/mainwindow.h index 30849a1..c66b247 100644 --- a/armoury/include/mainwindow.h +++ b/armoury/include/mainwindow.h @@ -17,16 +17,18 @@ class FileCache; class MainWindow : public NovusMainWindow { + Q_OBJECT + public: - explicit MainWindow(GameData* data); + explicit MainWindow(GameData *data); protected: void setupAdditionalMenus(QMenuBar *menuBar) override; private: - SingleGearView* gearView = nullptr; - FullModelViewer* fullModelViewer = nullptr; + SingleGearView *gearView = nullptr; + FullModelViewer *fullModelViewer = nullptr; - GameData& data; + GameData &data; FileCache cache; }; \ No newline at end of file diff --git a/armoury/include/quaternionedit.h b/armoury/include/quaternionedit.h index 57fbc51..3550f09 100644 --- a/armoury/include/quaternionedit.h +++ b/armoury/include/quaternionedit.h @@ -8,12 +8,14 @@ #include -class QuaternionEdit : public QWidget { +class QuaternionEdit : public QWidget +{ Q_OBJECT -public: - explicit QuaternionEdit(glm::quat& quat, QWidget* parent = nullptr); - void setQuat(glm::quat& quat); +public: + explicit QuaternionEdit(glm::quat &quat, QWidget *parent = nullptr); + + void setQuat(glm::quat &quat); Q_SIGNALS: void onValueChanged(); @@ -23,5 +25,5 @@ private: QDoubleSpinBox *x, *y, *z; } spinBoxes; - glm::quat& quat; + glm::quat &quat; }; diff --git a/armoury/include/singlegearview.h b/armoury/include/singlegearview.h index 7f588a8..bdcd5d4 100644 --- a/armoury/include/singlegearview.h +++ b/armoury/include/singlegearview.h @@ -10,11 +10,12 @@ struct GameData; -class SingleGearView : public QWidget { +class SingleGearView : public QWidget +{ Q_OBJECT public: - explicit SingleGearView(GameData* data, FileCache& cache); + explicit SingleGearView(GameData *data, FileCache &cache, QWidget *parent = nullptr); QString getLoadedGearPath() const; @@ -27,11 +28,11 @@ Q_SIGNALS: void genderChanged(); void levelOfDetailChanged(); - void addToFullModelViewer(GearInfo& info); + void addToFullModelViewer(GearInfo &info); public Q_SLOTS: void clear(); - void setGear(const GearInfo& info); + void setGear(const GearInfo &info); void setRace(Race race); void setSubrace(Subrace subrace); @@ -51,12 +52,12 @@ private: Gender currentGender = Gender::Male; int currentLod = 0; - GearView* gearView = nullptr; + GearView *gearView = nullptr; QComboBox *raceCombo, *subraceCombo, *genderCombo, *lodCombo; QPushButton *addToFMVButton, *importButton, *exportButton; bool loadingComboData = false; bool fmvAvailable = false; - GameData* data = nullptr; + GameData *data = nullptr; }; \ No newline at end of file diff --git a/armoury/include/vec3edit.h b/armoury/include/vec3edit.h index 1b0332c..ffbe18a 100644 --- a/armoury/include/vec3edit.h +++ b/armoury/include/vec3edit.h @@ -7,13 +7,15 @@ #include #include -class Vector3Edit : public QWidget { +class Vector3Edit : public QWidget +{ Q_OBJECT + public: - explicit Vector3Edit(glm::vec3& vec, QWidget* parent = nullptr); + explicit Vector3Edit(glm::vec3 &vec, QWidget *parent = nullptr); ~Vector3Edit(); - void setVector(glm::vec3& vec); + void setVector(glm::vec3 &vec); Q_SIGNALS: void onValueChanged(); @@ -23,6 +25,6 @@ private: QDoubleSpinBox *x, *y, *z; } spinBoxes; - glm::vec3& vec; - QTimer* updateTimer; + glm::vec3 &vec; + QTimer *updateTimer; }; diff --git a/armoury/src/boneeditor.cpp b/armoury/src/boneeditor.cpp index ff844ae..8305534 100644 --- a/armoury/src/boneeditor.cpp +++ b/armoury/src/boneeditor.cpp @@ -14,11 +14,8 @@ #include "quaternionedit.h" #include "vec3edit.h" -void addItem( - physis_Skeleton& skeleton, - physis_Bone& bone, - QTreeWidget* widget, - QTreeWidgetItem* parent_item = nullptr) { +void addItem(physis_Skeleton &skeleton, physis_Bone &bone, QTreeWidget *widget, QTreeWidgetItem *parent_item = nullptr) +{ auto item = new QTreeWidgetItem(); item->setText(0, QLatin1String(bone.name)); @@ -34,7 +31,9 @@ void addItem( } } -BoneEditor::BoneEditor(GearView* gearView, QWidget* parent) : gearView(gearView) { +BoneEditor::BoneEditor(GearView *gearView, QWidget *parent) + : gearView(gearView) +{ auto layout = new QHBoxLayout(); setLayout(layout); @@ -96,8 +95,9 @@ BoneEditor::BoneEditor(GearView* gearView, QWidget* parent) : gearView(gearView) raceDeformGroupLayout->addRow(QStringLiteral("Scale"), raceDeformScaleEdit); } -void BoneEditor::treeItemClicked(QTreeWidgetItem* item, int column) { - auto& skeleton = *gearView->part().skeleton; +void BoneEditor::treeItemClicked(QTreeWidgetItem *item, int column) +{ + auto &skeleton = *gearView->part().skeleton; for (int i = 0; i < skeleton.num_bones; i++) { if (strcmp(skeleton.bones[i].name, item->text(column).toStdString().c_str()) == 0) { currentPosition = glm::make_vec3(skeleton.bones[i].position); @@ -115,8 +115,7 @@ void BoneEditor::treeItemClicked(QTreeWidgetItem* item, int column) { glm::vec3 translation; glm::vec3 skew; glm::vec4 perspective; - glm::decompose( - gearView->part().boneData[i].deformRaceMatrix, scale, rotation, translation, skew, perspective); + glm::decompose(gearView->part().boneData[i].deformRaceMatrix, scale, rotation, translation, skew, perspective); currentRacePosition = translation; currentRaceRotation = rotation; diff --git a/armoury/src/cmpeditor.cpp b/armoury/src/cmpeditor.cpp index b583213..638ca05 100644 --- a/armoury/src/cmpeditor.cpp +++ b/armoury/src/cmpeditor.cpp @@ -16,17 +16,19 @@ struct RaceTree { std::vector subRaces; }; -std::vector raceTree = { - {Race::Hyur, {Subrace::Midlander, Subrace::Highlander}}, - {Race::Elezen, {Subrace::Wildwood, Subrace::Duskwight}}, - {Race::Miqote, {Subrace::Seeker, Subrace::Keeper}}, - {Race::Roegadyn, {Subrace::SeaWolf, Subrace::Hellion}}, - {Race::Lalafell, {Subrace::Plainsfolk, Subrace::Dunesfolk}}, - {Race::AuRa, {Subrace::Raen, Subrace::Xaela}}, - {Race::Hrothgar, {Subrace::Hellion, Subrace::Lost}}, - {Race::Viera, {Subrace::Rava, Subrace::Veena}}}; +std::vector raceTree = {{Race::Hyur, {Subrace::Midlander, Subrace::Highlander}}, + {Race::Elezen, {Subrace::Wildwood, Subrace::Duskwight}}, + {Race::Miqote, {Subrace::Seeker, Subrace::Keeper}}, + {Race::Roegadyn, {Subrace::SeaWolf, Subrace::Hellion}}, + {Race::Lalafell, {Subrace::Plainsfolk, Subrace::Dunesfolk}}, + {Race::AuRa, {Subrace::Raen, Subrace::Xaela}}, + {Race::Hrothgar, {Subrace::Hellion, Subrace::Lost}}, + {Race::Viera, {Subrace::Rava, Subrace::Veena}}}; -CmpEditor::CmpEditor(GameData* data) : data(data) { +CmpEditor::CmpEditor(GameData *data, QWidget *parent) + : QWidget(parent) + , data(data) +{ setWindowTitle(QStringLiteral("CMP Editor")); auto layout = new QHBoxLayout(); @@ -53,8 +55,8 @@ CmpEditor::CmpEditor(GameData* data) : data(data) { raceListWidget->expandAll(); - connect(raceListWidget, &QTreeWidget::itemClicked, [this](QTreeWidgetItem* item, int column) { - if (auto treeData = qvariant_cast(item->data(0, Qt::UserRole))) { + connect(raceListWidget, &QTreeWidget::itemClicked, [this](QTreeWidgetItem *item, int column) { + if (auto treeData = qvariant_cast(item->data(0, Qt::UserRole))) { loadRaceData(treeData->race, treeData->subrace); } }); @@ -109,7 +111,8 @@ CmpEditor::CmpEditor(GameData* data) : data(data) { loadRaceData(Race::Hyur, Subrace::Midlander); } -void CmpEditor::loadRaceData(Race race, Subrace subrace) { +void CmpEditor::loadRaceData(Race race, Subrace subrace) +{ auto raceData = physis_cmp_get_racial_scaling_parameters(cmp, race, subrace); maleMinSize->setValue(raceData.male_min_size); diff --git a/armoury/src/fullmodelviewer.cpp b/armoury/src/fullmodelviewer.cpp index 60db898..4c8ef61 100644 --- a/armoury/src/fullmodelviewer.cpp +++ b/armoury/src/fullmodelviewer.cpp @@ -12,7 +12,10 @@ #include #include -FullModelViewer::FullModelViewer(GameData* data, FileCache& cache) : data(data) { +FullModelViewer::FullModelViewer(GameData *data, FileCache &cache, QWidget *parent) + : QMainWindow(parent) + , data(data) +{ setWindowTitle(QStringLiteral("Full Model Viewer")); setMinimumWidth(1280); setMinimumHeight(720); @@ -37,7 +40,7 @@ FullModelViewer::FullModelViewer(GameData* data, FileCache& cache) : data(data) gearView->setRace(charDat.race); gearView->setGender(charDat.gender); - //gearView->setSubrace(charDat.subrace); + // gearView->setSubrace(charDat.subrace); gearView->setFace(charDat.head); gearView->setHair(charDat.hair); updateBustScaling((float)charDat.bust / 100.0f); @@ -133,27 +136,29 @@ FullModelViewer::FullModelViewer(GameData* data, FileCache& cache) : data(data) reloadGear(); } -void FullModelViewer::clear() { +void FullModelViewer::clear() +{ topSlot.reset(); bottomSlot.reset(); Q_EMIT gearChanged(); } -void FullModelViewer::addGear(GearInfo& info) { +void FullModelViewer::addGear(GearInfo &info) +{ switch (info.slot) { - case Slot::Body: + case Slot::Body: if (topSlot ? *topSlot != info : true) { topSlot = info; } - break; - case Slot::Legs: - if (bottomSlot ? *bottomSlot != info : true) { + break; + case Slot::Legs: + if (bottomSlot ? *bottomSlot != info : true) { bottomSlot = info; - } - break; - default: - break; + } + break; + default: + break; } Q_EMIT gearChanged(); @@ -202,18 +207,16 @@ void FullModelViewer::reloadGear() } } -void FullModelViewer::updateHeightScaling(float scale) { - auto& boneData = *gearView->part().skeleton; +void FullModelViewer::updateHeightScaling(float scale) +{ + auto &boneData = *gearView->part().skeleton; for (int i = 0; i < boneData.num_bones; i++) { const std::string_view name{boneData.bones[i].name}; if (name == "n_root") { - auto racialScaling = - physis_cmp_get_racial_scaling_parameters(cmp, gearView->currentRace, gearView->currentSubrace); + auto racialScaling = physis_cmp_get_racial_scaling_parameters(cmp, gearView->currentRace, gearView->currentSubrace); - const float minSize = - gearView->currentGender == Gender::Male ? racialScaling.male_min_size : racialScaling.female_min_size; - const float maxSize = - gearView->currentGender == Gender::Male ? racialScaling.male_max_size : racialScaling.female_max_size; + const float minSize = gearView->currentGender == Gender::Male ? racialScaling.male_min_size : racialScaling.female_min_size; + const float maxSize = gearView->currentGender == Gender::Male ? racialScaling.male_max_size : racialScaling.female_max_size; const float size = glm::mix(minSize, maxSize, scale); @@ -228,13 +231,13 @@ void FullModelViewer::updateHeightScaling(float scale) { heightScale = scale; } -void FullModelViewer::updateBustScaling(float scale) { - auto& boneData = *gearView->part().skeleton; +void FullModelViewer::updateBustScaling(float scale) +{ + auto &boneData = *gearView->part().skeleton; for (int i = 0; i < boneData.num_bones; i++) { const std::string_view name{boneData.bones[i].name}; if (name == "j_mune_l" || name == "j_mune_r") { - auto racialScaling = - physis_cmp_get_racial_scaling_parameters(cmp, gearView->currentRace, gearView->currentSubrace); + auto racialScaling = physis_cmp_get_racial_scaling_parameters(cmp, gearView->currentRace, gearView->currentSubrace); const float rangeX = glm::mix(racialScaling.bust_min_x, racialScaling.bust_max_x, scale); const float rangeY = glm::mix(racialScaling.bust_min_y, racialScaling.bust_max_y, scale); @@ -251,19 +254,22 @@ void FullModelViewer::updateBustScaling(float scale) { bustScale = scale; } -void FullModelViewer::updateCharacterParameters() { +void FullModelViewer::updateCharacterParameters() +{ updateHeightScaling(heightScale); updateBustScaling(bustScale); } -void FullModelViewer::updateSupportedSubraces() { +void FullModelViewer::updateSupportedSubraces() +{ subraceCombo->clear(); for (auto subrace : physis_get_supported_subraces(gearView->currentRace).subraces) { subraceCombo->addItem(QLatin1String(magic_enum::enum_name(subrace).data()), (int)subrace); } } -QGroupBox* FullModelViewer::addFaceGroup() { +QGroupBox *FullModelViewer::addFaceGroup() +{ auto faceGroup = new QGroupBox(QStringLiteral("Face")); auto faceGroupLayout = new QVBoxLayout(); faceGroup->setLayout(faceGroupLayout); @@ -289,7 +295,8 @@ QGroupBox* FullModelViewer::addFaceGroup() { return faceGroup; } -QGroupBox* FullModelViewer::addHairGroup() { +QGroupBox *FullModelViewer::addHairGroup() +{ auto hairGroup = new QGroupBox(QStringLiteral("Hair")); auto hairGroupLayout = new QVBoxLayout(); hairGroup->setLayout(hairGroupLayout); @@ -315,7 +322,8 @@ QGroupBox* FullModelViewer::addHairGroup() { return hairGroup; } -QGroupBox* FullModelViewer::addEarGroup() { +QGroupBox *FullModelViewer::addEarGroup() +{ auto earGroup = new QGroupBox(QStringLiteral("Ears")); auto earGroupLayout = new QVBoxLayout(); earGroup->setLayout(earGroupLayout); @@ -341,7 +349,8 @@ QGroupBox* FullModelViewer::addEarGroup() { return earGroup; } -QGroupBox* FullModelViewer::addTailGroup() { +QGroupBox *FullModelViewer::addTailGroup() +{ auto tailGroup = new QGroupBox(QStringLiteral("Tail")); auto tailGroupLayout = new QVBoxLayout(); tailGroup->setLayout(tailGroupLayout); diff --git a/armoury/src/gearlistmodel.cpp b/armoury/src/gearlistmodel.cpp index c4a810b..62758b5 100644 --- a/armoury/src/gearlistmodel.cpp +++ b/armoury/src/gearlistmodel.cpp @@ -7,7 +7,10 @@ #include #include -GearListModel::GearListModel(GameData* data) : gameData(data), QAbstractItemModel() { +GearListModel::GearListModel(GameData *data, QObject *parent) + : QAbstractItemModel(parent) + , gameData(data) +{ // smallclothes body { GearInfo info = {}; @@ -26,14 +29,14 @@ GearListModel::GearListModel(GameData* data) : gameData(data), QAbstractItemMode gears.push_back(info); } - auto exh = physis_gamedata_read_excel_sheet_header(data, "Item"); + auto exh = physis_parse_excel_sheet_header(physis_gamedata_extract_file(data, "exd/item.exh")); exdFuture = new QFutureWatcher(this); connect(exdFuture, &QFutureWatcher::resultReadyAt, this, &GearListModel::exdFinished); connect(exdFuture, &QFutureWatcher::finished, this, &GearListModel::finished); QVector pages; - for(int i = 0; i < exh->page_count; i++) { + for (int i = 0; i < exh->page_count; i++) { pages.push_back(i); } @@ -51,46 +54,50 @@ GearListModel::GearListModel(GameData* data) : gameData(data), QAbstractItemMode rootItem->type = TreeType::Root; } -int GearListModel::rowCount(const QModelIndex& parent) const { - TreeInformation* parentItem; +int GearListModel::rowCount(const QModelIndex &parent) const +{ + TreeInformation *parentItem; if (parent.column() > 0) return 0; if (!parent.isValid()) parentItem = rootItem; else - parentItem = static_cast(parent.internalPointer()); + parentItem = static_cast(parent.internalPointer()); return parentItem->children.size(); } -int GearListModel::columnCount(const QModelIndex& parent) const { +int GearListModel::columnCount(const QModelIndex &parent) const +{ return 1; } -QModelIndex GearListModel::index(int row, int column, const QModelIndex& parent) const { +QModelIndex GearListModel::index(int row, int column, const QModelIndex &parent) const +{ if (!hasIndex(row, column, parent)) return QModelIndex(); - TreeInformation* parentItem; + TreeInformation *parentItem; if (!parent.isValid()) parentItem = rootItem; else - parentItem = static_cast(parent.internalPointer()); + parentItem = static_cast(parent.internalPointer()); - TreeInformation* childItem = parentItem->children[row]; + TreeInformation *childItem = parentItem->children[row]; if (childItem) return createIndex(row, column, childItem); return QModelIndex(); } -QModelIndex GearListModel::parent(const QModelIndex& index) const { +QModelIndex GearListModel::parent(const QModelIndex &index) const +{ if (!index.isValid()) return QModelIndex(); - TreeInformation* childItem = static_cast(index.internalPointer()); - TreeInformation* parentItem = childItem->parent; + TreeInformation *childItem = static_cast(index.internalPointer()); + TreeInformation *parentItem = childItem->parent; if (parentItem == rootItem) return QModelIndex(); @@ -98,7 +105,8 @@ QModelIndex GearListModel::parent(const QModelIndex& index) const { return createIndex(parentItem->row, 0, parentItem); } -QVariant GearListModel::data(const QModelIndex& index, int role) const { +QVariant GearListModel::data(const QModelIndex &index, int role) const +{ if (!index.isValid()) return {}; if (!index.isValid()) @@ -107,7 +115,7 @@ QVariant GearListModel::data(const QModelIndex& index, int role) const { if (role != Qt::DisplayRole) return QVariant(); - TreeInformation* item = static_cast(index.internalPointer()); + TreeInformation *item = static_cast(index.internalPointer()); if (item->type == TreeType::Category) { return QLatin1String(magic_enum::enum_name(*item->slotType).data()); @@ -118,7 +126,8 @@ QVariant GearListModel::data(const QModelIndex& index, int role) const { return {}; } -QVariant GearListModel::headerData(int section, Qt::Orientation orientation, int role) const { +QVariant GearListModel::headerData(int section, Qt::Orientation orientation, int role) const +{ if (role == Qt::DisplayRole && orientation == Qt::Horizontal) { if (section == 0) { return QStringLiteral("Name"); @@ -128,15 +137,17 @@ QVariant GearListModel::headerData(int section, Qt::Orientation orientation, int return QAbstractItemModel::headerData(section, orientation, role); } -std::optional GearListModel::getGearFromIndex(const QModelIndex& index) { - TreeInformation* item = static_cast(index.internalPointer()); +std::optional GearListModel::getGearFromIndex(const QModelIndex &index) +{ + TreeInformation *item = static_cast(index.internalPointer()); if (item->type == TreeType::Item) { return item->gear; } return {}; } -void GearListModel::exdFinished(int index) { +void GearListModel::exdFinished(int index) +{ auto exd = exdFuture->resultAt(index); for (int i = 0; i < exd.row_count; i++) { @@ -156,12 +167,13 @@ void GearListModel::exdFinished(int index) { } } -void GearListModel::finished() { +void GearListModel::finished() +{ beginResetModel(); int i = 0; for (auto slot : magic_enum::enum_values()) { - TreeInformation* categoryItem = new TreeInformation(); + TreeInformation *categoryItem = new TreeInformation(); categoryItem->type = TreeType::Category; categoryItem->slotType = slot; categoryItem->parent = rootItem; @@ -171,7 +183,7 @@ void GearListModel::finished() { int j = 0; for (auto gear : gears) { if (gear.slot == slot) { - TreeInformation* item = new TreeInformation(); + TreeInformation *item = new TreeInformation(); item->type = TreeType::Item; item->gear = gear; item->parent = categoryItem; diff --git a/armoury/src/gearlistwidget.cpp b/armoury/src/gearlistwidget.cpp index 0b70039..0522245 100644 --- a/armoury/src/gearlistwidget.cpp +++ b/armoury/src/gearlistwidget.cpp @@ -10,7 +10,10 @@ #include "gearlistmodel.h" -GearListWidget::GearListWidget(GameData* data, QWidget* parent) : data(data) { +GearListWidget::GearListWidget(GameData *data, QWidget *parent) + : QWidget(parent) + , data(data) +{ auto layout = new QVBoxLayout(); layout->setContentsMargins(0, 0, 0, 0); setLayout(layout); @@ -22,7 +25,7 @@ GearListWidget::GearListWidget(GameData* data, QWidget* parent) : data(data) { auto searchEdit = new QLineEdit(); searchEdit->setPlaceholderText(QStringLiteral("Search...")); searchEdit->setClearButtonEnabled(true); - connect(searchEdit, &QLineEdit::textChanged, this, [=](const QString& text) { + connect(searchEdit, &QLineEdit::textChanged, this, [=](const QString &text) { searchModel->setFilterRegularExpression(text); }); layout->addWidget(searchEdit); @@ -33,7 +36,7 @@ GearListWidget::GearListWidget(GameData* data, QWidget* parent) : data(data) { listWidget = new QTreeView(); listWidget->setModel(searchModel); - connect(listWidget, &QTreeView::clicked, [this, searchModel, originalModel](const QModelIndex& item) { + connect(listWidget, &QTreeView::clicked, [this, searchModel, originalModel](const QModelIndex &item) { if (auto gear = originalModel->getGearFromIndex(searchModel->mapToSource(item))) { Q_EMIT gearSelected(*gear); } diff --git a/armoury/src/gearview.cpp b/armoury/src/gearview.cpp index dba4268..86ce088 100644 --- a/armoury/src/gearview.cpp +++ b/armoury/src/gearview.cpp @@ -13,7 +13,11 @@ #include "magic_enum.hpp" #include "utility.h" -GearView::GearView(GameData* data, FileCache& cache) : data(data), cache(cache) { +GearView::GearView(GameData *data, FileCache &cache, QWidget *parent) + : QWidget(parent) + , data(data) + , cache(cache) +{ mdlPart = new MDLPart(data, cache); reloadRaceDeforms(); @@ -55,7 +59,8 @@ GearView::GearView(GameData* data, FileCache& cache) : data(data), cache(cache) }; } -std::vector> GearView::supportedRaces() const { +std::vector> GearView::supportedRaces() const +{ std::vector> races; for (const auto &gear : loadedGears) { for (const auto [race, race_name] : magic_enum::enum_entries()) { @@ -71,7 +76,8 @@ std::vector> GearView::supportedRaces() const { return races; } -std::vector GearView::supportedGenders() const { +std::vector GearView::supportedGenders() const +{ std::vector genders; for (const auto &gear : loadedGears) { for (auto [gender, gender_name] : magic_enum::enum_entries()) { @@ -85,11 +91,13 @@ std::vector GearView::supportedGenders() const { return genders; } -int GearView::lodCount() const { +int GearView::lodCount() const +{ return maxLod; } -void GearView::exportModel(const QString& fileName) { +void GearView::exportModel(const QString &fileName) +{ mdlPart->exportModel(fileName); } @@ -113,7 +121,8 @@ void GearView::removeGear(GearInfo &gear) Q_EMIT gearChanged(); } -void GearView::setRace(Race race) { +void GearView::setRace(Race race) +{ if (currentRace == race) { return; } @@ -136,7 +145,8 @@ void GearView::setRace(Race race) { Q_EMIT raceChanged(); } -void GearView::setSubrace(Subrace subrace) { +void GearView::setSubrace(Subrace subrace) +{ if (currentSubrace == subrace) { return; } @@ -151,7 +161,8 @@ void GearView::setSubrace(Subrace subrace) { Q_EMIT subraceChanged(); } -void GearView::setGender(Gender gender) { +void GearView::setGender(Gender gender) +{ if (currentGender == gender) { return; } @@ -163,7 +174,8 @@ void GearView::setGender(Gender gender) { Q_EMIT genderChanged(); } -void GearView::setLevelOfDetail(int lod) { +void GearView::setLevelOfDetail(int lod) +{ if (currentLod == lod) { return; } @@ -352,8 +364,9 @@ void GearView::updatePart() std::vector materials; for (int i = 0; i < mdl.num_material_names; i++) { - const char* material_name = mdl.material_names[i]; - const std::string skinmtrl_path = physis_build_face_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *face, material_name); + const char *material_name = mdl.material_names[i]; + const std::string skinmtrl_path = + physis_build_face_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *face, material_name); if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(QLatin1String(skinmtrl_path.c_str()))); @@ -374,8 +387,9 @@ void GearView::updatePart() std::vector materials; for (int i = 0; i < mdl.num_material_names; i++) { - const char* material_name = mdl.material_names[i]; - const std::string skinmtrl_path = physis_build_hair_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *hair, material_name); + const char *material_name = mdl.material_names[i]; + const std::string skinmtrl_path = + physis_build_hair_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *hair, material_name); if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(QLatin1String(skinmtrl_path.c_str()))); @@ -396,8 +410,9 @@ void GearView::updatePart() std::vector materials; for (int i = 0; i < mdl.num_material_names; i++) { - const char* material_name = mdl.material_names[i]; - const std::string skinmtrl_path = physis_build_ear_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *ear, material_name); + const char *material_name = mdl.material_names[i]; + const std::string skinmtrl_path = + physis_build_ear_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *ear, material_name); if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(QLatin1String(skinmtrl_path.c_str()))); @@ -416,8 +431,9 @@ void GearView::updatePart() if (mdl_data.size > 0) { auto mdl = physis_mdl_parse(mdl_data.size, mdl_data.data); - const char* material_name = mdl.material_names[0]; - const std::string skinmtrl_path = physis_build_tail_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *tail, material_name); + const char *material_name = mdl.material_names[0]; + const std::string skinmtrl_path = + physis_build_tail_material_path(physis_get_race_code(currentRace, currentSubrace, currentGender), *tail, material_name); if (cache.fileExists(QLatin1String(skinmtrl_path.c_str()))) { auto mat = physis_material_parse(cache.lookupFile(QLatin1String(skinmtrl_path.c_str()))); diff --git a/armoury/src/main.cpp b/armoury/src/main.cpp index 5b2c8b1..d98288d 100644 --- a/armoury/src/main.cpp +++ b/armoury/src/main.cpp @@ -9,11 +9,11 @@ #include "physis_logger.h" #include "settings.h" -int main(int argc, char* argv[]) { +int main(int argc, char *argv[]) +{ QApplication app(argc, argv); - customizeAboutData( - QStringLiteral("armoury"), QStringLiteral("Armoury"), QStringLiteral("Program to view FFXIV gear.")); + customizeAboutData(QStringLiteral("armoury"), QStringLiteral("Armoury"), QStringLiteral("Program to view FFXIV gear.")); // Default to a sensible message pattern if (qEnvironmentVariableIsEmpty("QT_MESSAGE_PATTERN")) { diff --git a/armoury/src/mainwindow.cpp b/armoury/src/mainwindow.cpp index b16e196..a509ef9 100644 --- a/armoury/src/mainwindow.cpp +++ b/armoury/src/mainwindow.cpp @@ -42,13 +42,13 @@ MainWindow::MainWindow(GameData *in_data) auto gearListWidget = new GearListWidget(&data); gearListWidget->setMaximumWidth(350); - connect(gearListWidget, &GearListWidget::gearSelected, this, [=](const GearInfo& gear) { + connect(gearListWidget, &GearListWidget::gearSelected, this, [=](const GearInfo &gear) { gearView->setGear(gear); }); layout->addWidget(gearListWidget); gearView = new SingleGearView(&data, cache); - connect(gearView, &SingleGearView::addToFullModelViewer, this, [=](GearInfo& info) { + connect(gearView, &SingleGearView::addToFullModelViewer, this, [=](GearInfo &info) { fullModelViewer->addGear(info); }); @@ -74,3 +74,5 @@ void MainWindow::setupAdditionalMenus(QMenuBar *menuBar) cmpEditor->show(); }); } + +#include "moc_mainwindow.cpp" diff --git a/armoury/src/quaternionedit.cpp b/armoury/src/quaternionedit.cpp index 97d41a0..9f2a68d 100644 --- a/armoury/src/quaternionedit.cpp +++ b/armoury/src/quaternionedit.cpp @@ -7,7 +7,10 @@ #include #include -QuaternionEdit::QuaternionEdit(glm::quat& quat, QWidget* parent) : QWidget(parent), quat(quat) { +QuaternionEdit::QuaternionEdit(glm::quat &quat, QWidget *parent) + : QWidget(parent) + , quat(quat) +{ auto itemsLayout = new QHBoxLayout(this); spinBoxes.x = new QDoubleSpinBox(); @@ -36,36 +39,34 @@ QuaternionEdit::QuaternionEdit(glm::quat& quat, QWidget* parent) : QWidget(paren spinBoxes.y->setValue(euler.y); spinBoxes.z->setValue(euler.z); - connect( - spinBoxes.x, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { - auto euler = glm::eulerAngles(this->quat); - euler.x = glm::radians(d); + connect(spinBoxes.x, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { + auto euler = glm::eulerAngles(this->quat); + euler.x = glm::radians(d); - this->quat = glm::quat(euler); + this->quat = glm::quat(euler); - Q_EMIT onValueChanged(); - }); - connect( - spinBoxes.y, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { - auto euler = glm::eulerAngles(this->quat); - euler.y = glm::radians(d); + Q_EMIT onValueChanged(); + }); + connect(spinBoxes.y, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { + auto euler = glm::eulerAngles(this->quat); + euler.y = glm::radians(d); - this->quat = glm::quat(euler); + this->quat = glm::quat(euler); - Q_EMIT onValueChanged(); - }); - connect( - spinBoxes.z, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { - auto euler = glm::eulerAngles(this->quat); - euler.z = glm::radians(d); + Q_EMIT onValueChanged(); + }); + connect(spinBoxes.z, static_cast(&QDoubleSpinBox::valueChanged), [this](double d) { + auto euler = glm::eulerAngles(this->quat); + euler.z = glm::radians(d); - this->quat = glm::quat(euler); + this->quat = glm::quat(euler); - Q_EMIT onValueChanged(); - }); + Q_EMIT onValueChanged(); + }); } -void QuaternionEdit::setQuat(glm::quat& quat) { +void QuaternionEdit::setQuat(glm::quat &quat) +{ this->quat = quat; auto euler = glm::eulerAngles(quat); euler.x = glm::degrees(euler.x); diff --git a/armoury/src/singlegearview.cpp b/armoury/src/singlegearview.cpp index c3e6356..81a6d06 100644 --- a/armoury/src/singlegearview.cpp +++ b/armoury/src/singlegearview.cpp @@ -12,7 +12,10 @@ #include "filecache.h" #include "magic_enum.hpp" -SingleGearView::SingleGearView(GameData* data, FileCache& cache) : data(data) { +SingleGearView::SingleGearView(GameData *data, FileCache &cache, QWidget *parent) + : QWidget(parent) + , data(data) +{ gearView = new GearView(data, cache); // We don't want to see the face in this view @@ -129,7 +132,8 @@ SingleGearView::SingleGearView(GameData* data, FileCache& cache) : data(data) { reloadGear(); } -void SingleGearView::clear() { +void SingleGearView::clear() +{ if (currentGear) { gearView->removeGear(*currentGear); } @@ -138,7 +142,8 @@ void SingleGearView::clear() { Q_EMIT gearChanged(); } -void SingleGearView::setGear(const GearInfo& info) { +void SingleGearView::setGear(const GearInfo &info) +{ if (info != currentGear) { if (currentGear) { gearView->removeGear(*currentGear); @@ -151,7 +156,8 @@ void SingleGearView::setGear(const GearInfo& info) { } } -void SingleGearView::setRace(Race race) { +void SingleGearView::setRace(Race race) +{ if (currentRace == race) { return; } @@ -160,7 +166,8 @@ void SingleGearView::setRace(Race race) { Q_EMIT raceChanged(); } -void SingleGearView::setSubrace(Subrace subrace) { +void SingleGearView::setSubrace(Subrace subrace) +{ if (currentSubrace == subrace) { return; } @@ -171,7 +178,8 @@ void SingleGearView::setSubrace(Subrace subrace) { Q_EMIT subraceChanged(); } -void SingleGearView::setGender(Gender gender) { +void SingleGearView::setGender(Gender gender) +{ if (currentGender == gender) { return; } @@ -180,7 +188,8 @@ void SingleGearView::setGender(Gender gender) { Q_EMIT genderChanged(); } -void SingleGearView::setLevelOfDetail(int lod) { +void SingleGearView::setLevelOfDetail(int lod) +{ if (currentLod == lod) { return; } @@ -221,7 +230,12 @@ void SingleGearView::reloadGear() } } - if (auto it = std::find_if(supportedRaces.begin(), supportedRaces.end(), [oldRace](auto p) { return std::get<0>(p) == oldRace; }); it != supportedRaces.end()) { + if (auto it = std::find_if(supportedRaces.begin(), + supportedRaces.end(), + [oldRace](auto p) { + return std::get<0>(p) == oldRace; + }); + it != supportedRaces.end()) { raceCombo->setCurrentIndex(std::distance(supportedRaces.begin(), it)); } @@ -232,7 +246,12 @@ void SingleGearView::reloadGear() } } - if (auto it = std::find_if(supportedRaces.begin(), supportedRaces.end(), [oldSubrace](auto p) { return std::get<1>(p) == oldSubrace; }); it != supportedRaces.end()) { + if (auto it = std::find_if(supportedRaces.begin(), + supportedRaces.end(), + [oldSubrace](auto p) { + return std::get<1>(p) == oldSubrace; + }); + it != supportedRaces.end()) { subraceCombo->setCurrentIndex(std::distance(supportedRaces.begin(), it)); } @@ -244,7 +263,12 @@ void SingleGearView::reloadGear() genderCombo->addItem(QLatin1String(magic_enum::enum_name(gender).data()), static_cast(gender)); } - if (auto it = std::find_if(supportedGenders.begin(), supportedGenders.end(), [oldGender](auto p) { return p == oldGender; }); it != supportedGenders.end()) { + if (auto it = std::find_if(supportedGenders.begin(), + supportedGenders.end(), + [oldGender](auto p) { + return p == oldGender; + }); + it != supportedGenders.end()) { genderCombo->setCurrentIndex(std::distance(supportedGenders.begin(), it)); } diff --git a/armoury/src/vec3edit.cpp b/armoury/src/vec3edit.cpp index 441f31b..5faeb4b 100644 --- a/armoury/src/vec3edit.cpp +++ b/armoury/src/vec3edit.cpp @@ -6,8 +6,11 @@ #include #include -Vector3Edit::Vector3Edit(glm::vec3& vec, QWidget* parent) : QWidget(parent), vec(vec) { - QHBoxLayout* itemsLayout = new QHBoxLayout(this); +Vector3Edit::Vector3Edit(glm::vec3 &vec, QWidget *parent) + : QWidget(parent) + , vec(vec) +{ + QHBoxLayout *itemsLayout = new QHBoxLayout(this); spinBoxes.x = new QDoubleSpinBox(); spinBoxes.y = new QDoubleSpinBox(); @@ -30,36 +33,31 @@ Vector3Edit::Vector3Edit(glm::vec3& vec, QWidget* parent) : QWidget(parent), vec spinBoxes.y->setValue(vec.y); spinBoxes.z->setValue(vec.z); - connect( - spinBoxes.x, - static_cast(&QDoubleSpinBox::valueChanged), - [this, &vec](double d) { - vec.x = d; - Q_EMIT onValueChanged(); - }); - connect( - spinBoxes.y, - static_cast(&QDoubleSpinBox::valueChanged), - [this, &vec](double d) { - vec.y = d; - Q_EMIT onValueChanged(); - }); - connect( - spinBoxes.z, - static_cast(&QDoubleSpinBox::valueChanged), - [this, &vec](double d) { - vec.z = d; - Q_EMIT onValueChanged(); - }); + connect(spinBoxes.x, static_cast(&QDoubleSpinBox::valueChanged), [this, &vec](double d) { + vec.x = d; + Q_EMIT onValueChanged(); + }); + connect(spinBoxes.y, static_cast(&QDoubleSpinBox::valueChanged), [this, &vec](double d) { + vec.y = d; + Q_EMIT onValueChanged(); + }); + connect(spinBoxes.z, static_cast(&QDoubleSpinBox::valueChanged), [this, &vec](double d) { + vec.z = d; + Q_EMIT onValueChanged(); + }); } -Vector3Edit::~Vector3Edit() { +Vector3Edit::~Vector3Edit() +{ updateTimer->stop(); } -void Vector3Edit::setVector(glm::vec3& vec) { +void Vector3Edit::setVector(glm::vec3 &vec) +{ this->vec = vec; spinBoxes.x->setValue(vec.x); spinBoxes.y->setValue(vec.y); spinBoxes.z->setValue(vec.z); } + +#include "moc_vec3edit.cpp" \ No newline at end of file