Compare commits

...

20 Commits

Author SHA1 Message Date
Anakin 54b87b5de7 fixed things i've broken by the merge conflict 2017-06-20 11:58:03 +02:00
Anakin 68387fe7a7 Merge branch 'developement_1' of git.rwth-aachen.de:carstenf/OpenGL into developement_1
# Conflicts:
#	QtMeshViewer/Header/MainWindow.h
#	QtMeshViewer/Source/MainWindow.cpp
2017-06-20 11:45:15 +02:00
Anakin 44732057b6 using signal slot to update the combobox entries 2017-06-20 11:41:10 +02:00
Maxim Stewart 2d34492517 Implemented qtreeviewwidget instead of a list 2017-06-18 09:33:02 -05:00
Maxim Stewart 3f2713bd16 Fixed logic issue with offset file to file name in listWidget. Edited feel of settings window a bit 2017-06-18 06:46:45 -05:00
Maxim Stewart c2f7118ed6 Implemented recursive scan for mesh files on selection of dir path. Setup name instead of full path in list. 2017-06-18 06:17:40 -05:00
Maxim Stewart c6d82f5f55 Updated Settings to cleanup logic plus add a note for hard coded paths. 2017-06-18 06:14:10 -05:00
Anakin 33fafb29a8 removed unused or useless stuff,
renamed some functions for better description,
repaired the SettingsManager usage,
ToDo:
Dropdown list is not updated, it needs a restart,
display names for the directories instead of the path,
2017-06-17 15:42:43 +02:00
Maxim Stewart 6141263f45 Edited open() function to be more descriptive. Set to openFileActual 2017-06-17 05:18:21 -05:00
Maxim Stewart e59dd980bd Temp update to show unexpected segfault error 2017-06-16 03:16:30 -05:00
Maxim Stewart 1e71ebed47 Set ability to fill listWidget in SettingsWindow with saved dir list from SettingsManager. 2017-06-15 23:28:53 -05:00
Maxim Stewart d908894265 Added add and remove functionality to settings listWidget 2017-06-15 22:31:11 -05:00
Maxim Stewart bddc7ea852 Getting dir list to the drop down field 2017-05-31 03:10:34 -05:00
Maxim Stewart 0372a4ad8c Setting up removing and adding stuff to the settings window dirlistview 2017-05-31 03:09:32 -05:00
Maxim Stewart e768ae9af8 Setup dirList access from settings through getter and setters 2017-05-30 21:38:51 -05:00
Maxim Stewart b089fcdaf6 Added settings for getting drop down filled and set list to hide folders.
Need to make a dirList setter plus get settings window to keep dirList for editing.
2017-05-30 21:37:17 -05:00
Maxim Stewart cdda1922fa Fixed accidental overload of function. 2017-05-30 07:49:54 -05:00
Maxim Stewart 031c620f52 Added filter to QFileSystemModel fmodel
Setup some comments regarding a setFilter part
Edited getAssetLibrary to pass arguments to setAsset -- Note will be used for dropdown interaction.
Set a temp path for testing purposes.
2017-05-30 07:42:14 -05:00
Maxim Stewart 7a41f2d9bf Added QFileSystemModel for the fileListView or aka treeView
Added QString filters to be used with QFileSystemModel
Added setAsset method as part of getAssetLibrary for reusability
2017-05-30 07:38:19 -05:00
Maxim Stewart b2efa83e17 Added check for qkList in meshviewer.config
Added QString listOfDirs
Added gettter method to get listOfDirs
Edited MainWindow.ui to prepare for list of file plus dir drop down
2017-05-30 07:12:50 -05:00
8 changed files with 352 additions and 250 deletions

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>600</width> <width>800</width>
<height>400</height> <height>600</height>
</rect> </rect>
</property> </property>
<property name="minimumSize"> <property name="minimumSize">
@ -38,8 +38,11 @@
<property name="autoFillBackground"> <property name="autoFillBackground">
<bool>false</bool> <bool>false</bool>
</property> </property>
<property name="floating">
<bool>false</bool>
</property>
<property name="features"> <property name="features">
<set>QDockWidget::DockWidgetClosable|QDockWidget::DockWidgetFloatable</set> <set>QDockWidget::DockWidgetFloatable</set>
</property> </property>
<property name="allowedAreas"> <property name="allowedAreas">
<set>Qt::RightDockWidgetArea</set> <set>Qt::RightDockWidgetArea</set>
@ -68,42 +71,31 @@
<number>0</number> <number>0</number>
</property> </property>
<item> <item>
<widget class="QTreeWidget" name="treeWidget"> <layout class="QVBoxLayout" name="verticalLayout_2">
<property name="showDropIndicator" stdset="0"> <item>
<bool>false</bool> <widget class="QComboBox" name="dirDropDownList">
<property name="focusPolicy">
<enum>Qt::ClickFocus</enum>
</property> </property>
<property name="dragEnabled"> </widget>
<bool>true</bool> </item>
</property> <item>
<property name="dragDropMode"> <widget class="QTreeWidget" name="fileTreeWidget">
<enum>QAbstractItemView::DragOnly</enum> <property name="autoExpandDelay">
</property> <number>0</number>
<property name="selectionBehavior">
<enum>QAbstractItemView::SelectItems</enum>
</property>
<property name="verticalScrollMode">
<enum>QAbstractItemView::ScrollPerPixel</enum>
</property> </property>
<property name="headerHidden"> <property name="headerHidden">
<bool>true</bool> <bool>true</bool>
</property> </property>
<property name="expandsOnDoubleClick">
<bool>false</bool>
</property>
<column>
<property name="text">
<string notr="true">1</string>
</property>
</column>
</widget> </widget>
</item> </item>
</layout> </layout>
</item>
</layout>
</widget> </widget>
</widget> </widget>
</widget> </widget>
<layoutdefault spacing="6" margin="11"/> <layoutdefault spacing="6" margin="11"/>
<resources> <resources/>
<include location="../Resources/Resources.qrc"/>
</resources>
<connections/> <connections/>
</ui> </ui>

View File

@ -6,8 +6,8 @@
<rect> <rect>
<x>0</x> <x>0</x>
<y>0</y> <y>0</y>
<width>400</width> <width>584</width>
<height>358</height> <height>645</height>
</rect> </rect>
</property> </property>
<property name="windowTitle"> <property name="windowTitle">
@ -290,77 +290,15 @@
<string>Light</string> <string>Light</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_3"> <layout class="QGridLayout" name="gridLayout_3">
<item row="1" column="1"> <item row="2" column="0" colspan="4">
<widget class="QSpinBox" name="light_R_SB"> <widget class="QLabel" name="labelAmbCoeff">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_7">
<property name="text"> <property name="text">
<string>G:</string> <string>Ambientcoefficient:</string>
</property> </property>
</widget> </widget>
</item> </item>
<item row="3" column="0" colspan="4"> <item row="1" column="5">
<widget class="QLabel" name="labelAttFac"> <widget class="QSlider" name="light_G_S">
<property name="text">
<string>Attenuationfactor:</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QSpinBox" name="light_G_SB">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QLabel" name="label_8">
<property name="text">
<string>B:</string>
</property>
</widget>
</item>
<item row="1" column="7">
<widget class="QSpinBox" name="light_B_SB">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSlider" name="light_R_S">
<property name="maximum"> <property name="maximum">
<number>255</number> <number>255</number>
</property> </property>
@ -372,55 +310,6 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="8">
<widget class="QSlider" name="light_B_S">
<property name="maximum">
<number>255</number>
</property>
<property name="value">
<number>255</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>R:</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QRadioButton" name="radioDirectLight">
<property name="text">
<string>Directional light</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="3" column="4" colspan="2">
<widget class="QDoubleSpinBox" name="attFac">
<property name="enabled">
<bool>false</bool>
</property>
<property name="maximumSize">
<size>
<width>55</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
</widget>
</item>
<item row="2" column="4" colspan="2"> <item row="2" column="4" colspan="2">
<widget class="QDoubleSpinBox" name="ambCoef"> <widget class="QDoubleSpinBox" name="ambCoef">
<property name="enabled"> <property name="enabled">
@ -446,8 +335,44 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="5"> <item row="3" column="4" colspan="2">
<widget class="QSlider" name="light_G_S"> <widget class="QDoubleSpinBox" name="attFac">
<property name="enabled">
<bool>false</bool>
</property>
<property name="maximumSize">
<size>
<width>55</width>
<height>16777215</height>
</size>
</property>
<property name="decimals">
<number>1</number>
</property>
<property name="singleStep">
<double>0.100000000000000</double>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QLabel" name="label_6">
<property name="text">
<string>R:</string>
</property>
</widget>
</item>
<item row="0" column="0" colspan="4">
<widget class="QRadioButton" name="radioDirectLight">
<property name="text">
<string>Directional light</string>
</property>
<property name="checked">
<bool>true</bool>
</property>
</widget>
</item>
<item row="1" column="8">
<widget class="QSlider" name="light_B_S">
<property name="maximum"> <property name="maximum">
<number>255</number> <number>255</number>
</property> </property>
@ -459,17 +384,19 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="2" column="0" colspan="4"> <item row="1" column="1">
<widget class="QLabel" name="labelAmbCoeff"> <widget class="QSpinBox" name="light_R_SB">
<property name="text"> <property name="maximumSize">
<string>Ambientcoefficient:</string> <size>
<width>30</width>
<height>16777215</height>
</size>
</property> </property>
</widget> <property name="buttonSymbols">
</item> <enum>QAbstractSpinBox::NoButtons</enum>
<item row="0" column="7" colspan="2"> </property>
<widget class="QCheckBox" name="checkHeadlight"> <property name="maximum">
<property name="text"> <number>255</number>
<string>Headlight</string>
</property> </property>
</widget> </widget>
</item> </item>
@ -480,6 +407,79 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="1" column="2">
<widget class="QSlider" name="light_R_S">
<property name="maximum">
<number>255</number>
</property>
<property name="value">
<number>255</number>
</property>
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
</widget>
</item>
<item row="1" column="3">
<widget class="QLabel" name="label_7">
<property name="text">
<string>G:</string>
</property>
</widget>
</item>
<item row="1" column="4">
<widget class="QSpinBox" name="light_G_SB">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="3" column="0" colspan="4">
<widget class="QLabel" name="labelAttFac">
<property name="text">
<string>Attenuationfactor:</string>
</property>
</widget>
</item>
<item row="1" column="6">
<widget class="QLabel" name="label_8">
<property name="text">
<string>B:</string>
</property>
</widget>
</item>
<item row="1" column="7">
<widget class="QSpinBox" name="light_B_SB">
<property name="maximumSize">
<size>
<width>30</width>
<height>16777215</height>
</size>
</property>
<property name="buttonSymbols">
<enum>QAbstractSpinBox::NoButtons</enum>
</property>
<property name="maximum">
<number>255</number>
</property>
</widget>
</item>
<item row="0" column="7" colspan="2">
<widget class="QCheckBox" name="checkHeadlight">
<property name="text">
<string>Headlight</string>
</property>
</widget>
</item>
</layout> </layout>
</widget> </widget>
</item> </item>
@ -489,7 +489,21 @@
<string>General</string> <string>General</string>
</property> </property>
<layout class="QGridLayout" name="gridLayout_4"> <layout class="QGridLayout" name="gridLayout_4">
<item row="0" column="3" colspan="3">
<widget class="QCheckBox" name="checkBackfaceCulling">
<property name="text">
<string>Backface Culling</string>
</property>
</widget>
</item>
<item row="1" column="3"> <item row="1" column="3">
<widget class="QLabel" name="labelZoomSpeed">
<property name="text">
<string>Zoom speed:</string>
</property>
</widget>
</item>
<item row="1" column="6">
<spacer name="horizontalSpacer"> <spacer name="horizontalSpacer">
<property name="orientation"> <property name="orientation">
<enum>Qt::Horizontal</enum> <enum>Qt::Horizontal</enum>
@ -502,14 +516,7 @@
</property> </property>
</spacer> </spacer>
</item> </item>
<item row="1" column="1"> <item row="1" column="5">
<widget class="QLabel" name="labelZoomSpeed">
<property name="text">
<string>Zoom speed:</string>
</property>
</widget>
</item>
<item row="1" column="2">
<widget class="QSpinBox" name="spinZSpeed"> <widget class="QSpinBox" name="spinZSpeed">
<property name="suffix"> <property name="suffix">
<string>%</string> <string>%</string>
@ -525,29 +532,41 @@
</property> </property>
</widget> </widget>
</item> </item>
<item row="0" column="1" colspan="2"> <item row="2" column="3" colspan="4">
<widget class="QCheckBox" name="checkBackfaceCulling"> <widget class="QLabel" name="label">
<property name="text"> <property name="text">
<string>Backface Culling</string> <string>Directory Drop Down List:</string>
</property>
</widget>
</item>
<item row="4" column="3" colspan="4">
<widget class="QListWidget" name="dirListWidget"/>
</item>
<item row="3" column="3">
<widget class="QLabel" name="label_9">
<property name="text">
<string>*** &quot;BF1_ModTools&quot; Goes To &quot;C:/BF1_ModTools/Assets/Shipped Worlds/&quot;
&quot;BF2_ModTools&quot; Goes To &quot;C:/BF2_ModTools/assets/Sides/&quot;</string>
</property>
</widget>
</item>
<item row="5" column="5">
<widget class="QPushButton" name="removeItem">
<property name="text">
<string>--</string>
</property>
</widget>
</item>
<item row="5" column="4">
<widget class="QPushButton" name="addItem">
<property name="text">
<string>+</string>
</property> </property>
</widget> </widget>
</item> </item>
</layout> </layout>
</widget> </widget>
</item> </item>
<item row="4" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>40</height>
</size>
</property>
</spacer>
</item>
</layout> </layout>
</widget> </widget>
<resources/> <resources/>

View File

@ -6,7 +6,6 @@
#include <QByteArray> #include <QByteArray>
#include <QLabel> #include <QLabel>
struct Material; struct Material;
class MainWindow : public QMainWindow class MainWindow : public QMainWindow
@ -26,13 +25,14 @@ private:
int m_curSeverity; int m_curSeverity;
FileInfoWindow* m_infoWindow; FileInfoWindow* m_infoWindow;
QStringList m_filters;
// functions // functions
private: private:
void setupWidgets(); void setupWidgets();
void getAssetLibrary(); void updateAssetTree(QString);
void searchMeshFiles(QString path); void openFileDialog();
void openFile(); void openFile(QString);
void takeScreenShot(); void takeScreenShot();
void aboutTool(); void aboutTool();
@ -44,6 +44,12 @@ public slots:
void printMessage(QString message, int severity); void printMessage(QString message, int severity);
void setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle); void setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle);
// private slots
private slots:
void setupAssetLibrary();
void on_fileTreeWidget_doubleClicked();
void on_dirDropDownList_currentTextChanged(const QString &arg1);
// signals // signals
signals: signals:
void loadFile(QString); void loadFile(QString);

View File

@ -22,19 +22,19 @@ public:
// attributes // attributes
private: private:
QFile file; QFile m_file;
QStringList m_listOfDirs;
QVector3D m_bgColorOn = { 5, 5, 5 }; QVector3D m_bgColorOn = { 5, 5, 5 };
QVector3D m_bgColorOff = { 128, 204, 255 }; QVector3D m_bgColorOff = { 128, 204, 255 };
QVector3D m_lightColor = { 255,255,255 };
bool m_bfCulling = false; bool m_bfCulling = false;
bool m_light = false; bool m_light = false;
int m_lightType = 1; // 1 = direct, 2 = point
QVector3D m_lightColor = { 255,255,255 };
float m_attenuation = 0.0f;
float m_ambient = 0.005f;
bool m_headlight = false; bool m_headlight = false;
bool m_autoColor = true; bool m_autoColor = true;
float m_attenuation = 0.0f;
float m_ambient = 0.005f;
int m_lightType = 1; // 1 = direct, 2 = point
// functions // functions
private: private:
@ -47,6 +47,8 @@ public:
bool isBfCulling() const; bool isBfCulling() const;
bool isLight() const; bool isLight() const;
QStringList getListOfDirs();
int getLightType() const; int getLightType() const;
QVector3D getLightColor() const; QVector3D getLightColor() const;
float getAttenuation() const; float getAttenuation() const;
@ -69,4 +71,9 @@ public:
void setHeadlight(bool value); void setHeadlight(bool value);
void setAutoColor(int value); void setAutoColor(int value);
void updateDirectories(QString path);
// signals
signals:
void dirsChanged();
}; };

View File

@ -24,6 +24,9 @@ private slots:
void backgroundColorOnChanged(); void backgroundColorOnChanged();
void lightColorChanged(); void lightColorChanged();
void on_addItem_clicked();
void on_removeItem_clicked();
signals: signals:
void updateBGColorOff(QVector3D value); void updateBGColorOff(QVector3D value);
void updateBGColorOn(QVector3D value); void updateBGColorOn(QVector3D value);
@ -34,5 +37,6 @@ signals:
void sendBackfaceCulling(bool value); void sendBackfaceCulling(bool value);
void sendZommSpeed(int percent); void sendZommSpeed(int percent);
void changeLightType(int value); void changeLightType(int value);
void pathChanged(QString path);
}; };

View File

@ -2,6 +2,7 @@
#include "..\Header\OglViewerWidget.h" #include "..\Header\OglViewerWidget.h"
#include "..\Header\FileInterface.h" #include "..\Header\FileInterface.h"
#include "..\Header\OutputDevice.h" #include "..\Header\OutputDevice.h"
#include "..\Header\SettingsManager.h"
#include <QSurfaceFormat> #include <QSurfaceFormat>
#include <QSignalMapper> #include <QSignalMapper>
#include <QToolButton> #include <QToolButton>
@ -10,6 +11,9 @@
#include <QMessageBox> #include <QMessageBox>
#include <QPalette> #include <QPalette>
#include <QResizeEvent> #include <QResizeEvent>
#include <QDirIterator>
#include <QFileInfo>
#define WINDOW_NAME "Mesh Viewer" #define WINDOW_NAME "Mesh Viewer"
@ -41,6 +45,9 @@ MainWindow::MainWindow(QWidget *parent)
// set default text to file info // set default text to file info
m_fileInfo = "Filename: -\nMaterials: -\nVertices: -\nTriangle: -<detail>No file is open"; m_fileInfo = "Filename: -\nMaterials: -\nVertices: -\nTriangle: -<detail>No file is open";
ui->dirDropDownList->addItem("BF1_ModTools", "C:/BF1_ModTools/Assets/Shipped Worlds/");
ui->dirDropDownList->addItem("BF2_ModTools", "C:/BF2_ModTools/assets/Sides/");
// add widgets to the window // add widgets to the window
setupWidgets(); setupWidgets();
@ -49,7 +56,9 @@ MainWindow::MainWindow(QWidget *parent)
styleSheet.open(QIODevice::ReadOnly); styleSheet.open(QIODevice::ReadOnly);
this->setStyleSheet(styleSheet.readAll()); this->setStyleSheet(styleSheet.readAll());
getAssetLibrary(); // setup dropdown
setupAssetLibrary();
connect(SettingsManager::getInstance(), &SettingsManager::dirsChanged, this, &MainWindow::setupAssetLibrary);
printMessage("MeshViewer by Anakin", 0); printMessage("MeshViewer by Anakin", 0);
} }
@ -61,10 +70,8 @@ MainWindow::~MainWindow()
delete m_infoWindow; delete m_infoWindow;
} }
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// functions // functions
void MainWindow::setupWidgets() void MainWindow::setupWidgets()
{ {
// Ogl Viewer // Ogl Viewer
@ -73,11 +80,11 @@ void MainWindow::setupWidgets()
connect(this, &MainWindow::loadFile, viewer, &OglViewerWidget::loadFile); connect(this, &MainWindow::loadFile, viewer, &OglViewerWidget::loadFile);
// open file // open file
QToolButton *openFile = new QToolButton(this); QToolButton *openFileDialog = new QToolButton(this);
openFile->setObjectName("openFile"); openFileDialog->setObjectName("openFile");
openFile->setToolTip("open file"); openFileDialog->setToolTip("open file");
connect(openFile, &QToolButton::pressed, this, &MainWindow::openFile); connect(openFileDialog, &QToolButton::pressed, this, &MainWindow::openFileDialog);
ui->mainToolBar->addWidget(openFile); ui->mainToolBar->addWidget(openFileDialog);
// screenshot // screenshot
QToolButton *screenshot = new QToolButton(this); QToolButton *screenshot = new QToolButton(this);
@ -160,39 +167,31 @@ void MainWindow::setupWidgets()
m_output->setAlignment(Qt::AlignTop); m_output->setAlignment(Qt::AlignTop);
m_output->setText(m_fileInfo.left(m_fileInfo.indexOf("<detail>"))); m_output->setText(m_fileInfo.left(m_fileInfo.indexOf("<detail>")));
m_output->raise(); m_output->raise();
} }
void MainWindow::getAssetLibrary() void MainWindow::updateAssetTree(QString path)
{ {
QTreeWidgetItem* item = new QTreeWidgetItem;
item->setData(0, Qt::DisplayRole, "Wuhu");
ui->treeWidget->addTopLevelItem(item);
searchMeshFiles("D:/workspaces/Visual Studio 2015/Projects/OpenGL/Release"); ui->fileTreeWidget->clear();
QDirIterator itterator(path, QStringList() << "*.msh" << "*.MSH" << "*.mesh" << "*.MESH",
QDir::Files, QDirIterator::Subdirectories);
while (itterator.hasNext()) {
QTreeWidgetItem* sub = new QTreeWidgetItem(ui->fileTreeWidget);
sub->setData(0, Qt::DisplayRole, itterator.fileName());
sub->setData(1, Qt::DisplayRole, itterator.fileInfo().absoluteFilePath());
itterator.next();
}
} }
void MainWindow::searchMeshFiles(QString path) void MainWindow::openFileDialog()
{
QDir directory(path);
directory.setNameFilters(QStringList("*.msh"));
QStringList childDirectories = directory.entryList(QDir::AllDirs | QDir::NoDotAndDotDot);
QStringList fileNames = directory.entryList(QDir::Files);
for (auto &it : childDirectories)
qDebug() << it;
for (auto &it : fileNames)
qDebug() << it;
}
void MainWindow::openFile()
{ {
QString fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Mesh (*.msh)"); QString fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Mesh (*.msh)");
openFile(fileName);
}
void MainWindow::openFile(QString fileName)
{
if(!fileName.isEmpty()) if(!fileName.isEmpty())
emit loadFile(fileName); emit loadFile(fileName);
} }
@ -234,6 +233,35 @@ void MainWindow::resizeEvent(QResizeEvent * e)
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// slots // slots
void MainWindow::setupAssetLibrary()
{
// get all directories and put them in the dropdown.
while (ui->dirDropDownList->count() != 0)
ui->dirDropDownList->removeItem(0);
QStringList tmp_list = SettingsManager::getInstance()->getListOfDirs();
for (QString &it : tmp_list)
ui->dirDropDownList->addItem(it, it);
// choose the current path and display it.
if (ui->dirDropDownList->currentData().isValid())
updateAssetTree(ui->dirDropDownList->currentData().toString());
}
void MainWindow::on_fileTreeWidget_doubleClicked()
{
QString clickedFile = ui->fileTreeWidget->currentItem()->text(1);
openFile(clickedFile);
}
void MainWindow::on_dirDropDownList_currentTextChanged(const QString &arg1)
{
QString selectedDir;
selectedDir = ui->dirDropDownList->itemData(ui->dirDropDownList->currentIndex()).toString();
printMessage(arg1 + " : " + selectedDir, 0);
updateAssetTree(selectedDir);
}
void MainWindow::printMessage(QString message, int severity) void MainWindow::printMessage(QString message, int severity)
{ {
if (!ui->statusBar->currentMessage().isEmpty() && severity < m_curSeverity) if (!ui->statusBar->currentMessage().isEmpty() && severity < m_curSeverity)

View File

@ -1,4 +1,5 @@
#include "..\Header\SettingsManager.h" #include "..\Header\SettingsManager.h"
#include "qdebug.h"
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
@ -7,7 +8,7 @@
SettingsManager::SettingsManager(QObject *parent) SettingsManager::SettingsManager(QObject *parent)
: QObject(parent) : QObject(parent)
{ {
file.setFileName("meshviewer.config"); m_file.setFileName("meshviewer.config");
readFromFile(); readFromFile();
} }
@ -28,10 +29,10 @@ SettingsManager* SettingsManager::getInstance(QObject *parent)
void SettingsManager::readFromFile() void SettingsManager::readFromFile()
{ {
if (file.open(QIODevice::ReadOnly)) if (m_file.open(QIODevice::ReadOnly))
{ {
QByteArray stream = file.readAll(); QByteArray stream = m_file.readAll();
QList<QByteArray> lines = stream.split('\n'); QList<QByteArray> lines = stream.split('\n');
for (auto& it : lines) for (auto& it : lines)
@ -85,34 +86,45 @@ void SettingsManager::readFromFile()
{ {
m_ambient = it.right(it.size() - it.indexOf('>') - 1).toFloat(); m_ambient = it.right(it.size() - it.indexOf('>') - 1).toFloat();
} }
else if (it.startsWith("<qkList>"))
{
m_listOfDirs = QString(it.right(it.size() - it.indexOf('>') - 1)).split(";");
}
} }
file.close(); m_file.close();
} }
} }
void SettingsManager::writeToFile() void SettingsManager::writeToFile()
{ {
file.open(QIODevice::WriteOnly); m_file.open(QIODevice::WriteOnly);
file.write(QString("<bgOn>%1;%2;%3\n").arg(m_bgColorOn.x()).arg(m_bgColorOn.y()).arg(m_bgColorOn.z()).toUtf8()); m_file.write(QString("<bgOn>%1;%2;%3\n").arg(m_bgColorOn.x()).arg(m_bgColorOn.y()).arg(m_bgColorOn.z()).toUtf8());
file.write(QString("<bgOff>%1;%2;%3\n").arg(m_bgColorOff.x()).arg(m_bgColorOff.y()).arg(m_bgColorOff.z()).toUtf8()); m_file.write(QString("<bgOff>%1;%2;%3\n").arg(m_bgColorOff.x()).arg(m_bgColorOff.y()).arg(m_bgColorOff.z()).toUtf8());
file.write(QString("<liCo>%1;%2;%3\n").arg(m_lightColor.x()).arg(m_lightColor.y()).arg(m_lightColor.z()).toUtf8()); m_file.write(QString("<liCo>%1;%2;%3\n").arg(m_lightColor.x()).arg(m_lightColor.y()).arg(m_lightColor.z()).toUtf8());
file.write(QString("<bfCul>%1\n").arg(m_bfCulling).toUtf8()); m_file.write(QString("<bfCul>%1\n").arg(m_bfCulling).toUtf8());
file.write(QString("<liOn>%1\n").arg(m_light).toUtf8()); m_file.write(QString("<liOn>%1\n").arg(m_light).toUtf8());
file.write(QString("<heLi>%1\n").arg(m_headlight).toUtf8()); m_file.write(QString("<heLi>%1\n").arg(m_headlight).toUtf8());
file.write(QString("<auCo>%1\n").arg(m_autoColor).toUtf8()); m_file.write(QString("<auCo>%1\n").arg(m_autoColor).toUtf8());
file.write(QString("<liTy>%1\n").arg(m_lightType).toUtf8()); m_file.write(QString("<liTy>%1\n").arg(m_lightType).toUtf8());
file.write(QString("<atFa>%1\n").arg(m_attenuation).toUtf8()); m_file.write(QString("<atFa>%1\n").arg(m_attenuation).toUtf8());
file.write(QString("<amCo>%1\n").arg(m_ambient).toUtf8()); m_file.write(QString("<amCo>%1\n").arg(m_ambient).toUtf8());
if(!m_listOfDirs.isEmpty())
m_file.write(QString("<qkList>%1\n").arg(m_listOfDirs.join(";")).toUtf8());
file.close(); m_file.close();
} }
// getter /////////////////////////////////////////////////////////////// // getter ///////////////////////////////////////////////////////////////
QStringList SettingsManager::getListOfDirs()
{
return m_listOfDirs;
}
QVector3D SettingsManager::getBgColorOn() const QVector3D SettingsManager::getBgColorOn() const
{ {
return m_bgColorOn; return m_bgColorOn;
@ -220,3 +232,12 @@ void SettingsManager::setAutoColor(int value)
m_autoColor = true; m_autoColor = true;
} }
void SettingsManager::updateDirectories(QString path)
{
if (m_listOfDirs.contains(path))
m_listOfDirs.removeAll(path);
else
m_listOfDirs.append(path);
emit dirsChanged();
}

View File

@ -1,6 +1,7 @@
#include "..\Header\SettingsWindow.h" #include "..\Header\SettingsWindow.h"
#include "..\Header\SettingsManager.h" #include "..\Header\SettingsManager.h"
#include <QFileDialog>
#include <QListWidgetItem>
///////////////////////////////////////////////////////////////////////// /////////////////////////////////////////////////////////////////////////
// constructor/destructor // constructor/destructor
@ -18,6 +19,11 @@ SettingsWindow::SettingsWindow(QWidget * parent)
// set default values // set default values
SettingsManager* sm = SettingsManager::getInstance(this); SettingsManager* sm = SettingsManager::getInstance(this);
// set dirList for passing to Main and then fill settings manager dir list window
QStringList tmp_directories = sm->getListOfDirs();
for (auto &it : tmp_directories)
ui->dirListWidget->insertItem(0, it);
ui->lightOff_R_SB->setValue((int)(sm->getBgColorOff()[0])); ui->lightOff_R_SB->setValue((int)(sm->getBgColorOff()[0]));
ui->lightOff_G_SB->setValue((int)(sm->getBgColorOff()[1])); ui->lightOff_G_SB->setValue((int)(sm->getBgColorOff()[1]));
ui->lightOff_B_SB->setValue((int)(sm->getBgColorOff()[2])); ui->lightOff_B_SB->setValue((int)(sm->getBgColorOff()[2]));
@ -51,7 +57,7 @@ SettingsWindow::SettingsWindow(QWidget * parent)
connect(this, &SettingsWindow::sendBackfaceCulling, sm, &SettingsManager::setBfCulling); connect(this, &SettingsWindow::sendBackfaceCulling, sm, &SettingsManager::setBfCulling);
connect(ui->checkAutoColor, &QCheckBox::stateChanged, sm, &SettingsManager::setAutoColor); connect(ui->checkAutoColor, &QCheckBox::stateChanged, sm, &SettingsManager::setAutoColor);
connect(this, &SettingsWindow::changeLightType, sm, &SettingsManager::setLightType); connect(this, &SettingsWindow::changeLightType, sm, &SettingsManager::setLightType);
connect(this, &SettingsWindow::pathChanged, sm, &SettingsManager::updateDirectories);
} }
SettingsWindow::~SettingsWindow() SettingsWindow::~SettingsWindow()
@ -181,3 +187,22 @@ void SettingsWindow::lightColorChanged()
ui->lightOn_B_S->setValue((int)(ui->light_B_S->value() / 50)); ui->lightOn_B_S->setValue((int)(ui->light_B_S->value() / 50));
} }
} }
void SettingsWindow::on_addItem_clicked()
{
QString dirName = QFileDialog::getExistingDirectory(this, tr("Open Directory"), "/home",
QFileDialog::ShowDirsOnly |
QFileDialog::DontResolveSymlinks);
if (!SettingsManager::getInstance()->getListOfDirs().contains(dirName))
{
ui->dirListWidget->insertItem(0, dirName);
emit pathChanged(dirName);
}
}
void SettingsWindow::on_removeItem_clicked()
{
QListWidgetItem* tmp = ui->dirListWidget->takeItem(ui->dirListWidget->currentRow());
emit pathChanged(tmp->text());
delete tmp;
}