text in FileInfoWindow can be marked and copied,
code cleaning
This commit is contained in:
@@ -1,32 +1,37 @@
|
||||
#include "..\Header\MainWindow.h"
|
||||
#include "..\Header\OglViewerWidget.h"
|
||||
#include <QSurfaceFormat>
|
||||
#include <QMessageBox>
|
||||
#include <QFileDialog>
|
||||
#include <QPalette>
|
||||
#include <QAction>
|
||||
#include <QSignalMapper>
|
||||
#include <QFile>
|
||||
#include <QSizePolicy>
|
||||
#include <QFont>
|
||||
#include <QResizeEvent>
|
||||
#include <QToolButton>
|
||||
#include "..\Header\FileInterface.h"
|
||||
#include <QSurfaceFormat>
|
||||
#include <QSignalMapper>
|
||||
#include <QToolButton>
|
||||
#include <QFile>
|
||||
#include <QFileDialog>
|
||||
#include <QMessageBox>
|
||||
#include <QPalette>
|
||||
#include <QResizeEvent>
|
||||
|
||||
#define WINDOW_NAME "Mesh Viewer"
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// constructor/destructor
|
||||
|
||||
MainWindow::MainWindow(QWidget *parent)
|
||||
: QMainWindow(parent)
|
||||
, ui(new Ui::MainWindowClass)
|
||||
, m_curSeverity(0)
|
||||
, m_output(new QLabel(this))
|
||||
, m_curSeverity(0)
|
||||
, m_infoWindow(new FileInfoWindow(this))
|
||||
{
|
||||
// setup window
|
||||
ui->setupUi(this);
|
||||
|
||||
setWindowTitle(WINDOW_NAME);
|
||||
setWindowIcon(QIcon(":/images/icon.ico"));
|
||||
|
||||
printMessage("MeshViewer by Anakin", 0);
|
||||
|
||||
// setup opengl things
|
||||
QSurfaceFormat format;
|
||||
format.setDepthBufferSize(24);
|
||||
format.setMajorVersion(2);
|
||||
@@ -34,12 +39,13 @@ MainWindow::MainWindow(QWidget *parent)
|
||||
format.setProfile(QSurfaceFormat::NoProfile);
|
||||
QSurfaceFormat::setDefaultFormat(format);
|
||||
|
||||
// set default text to file info
|
||||
m_fileInfo = "Filename: -\nMaterials: -\nVertices: -\nTriangle: -<detail>No file is open";
|
||||
|
||||
// add widgets to the window
|
||||
setupWidgets();
|
||||
|
||||
printMessage("MeshViewer by Anakin", 0);
|
||||
|
||||
m_fileInfo += "Filename: -\nMaterials: -\nVertices: -\nTriangle: -<detail>No file is open";
|
||||
|
||||
// load stylesheet
|
||||
QFile styleSheet(":/files/StyleSheet.txt");
|
||||
styleSheet.open(QIODevice::ReadOnly);
|
||||
this->setStyleSheet(styleSheet.readAll());
|
||||
@@ -52,35 +58,37 @@ MainWindow::~MainWindow()
|
||||
delete m_infoWindow;
|
||||
}
|
||||
|
||||
void MainWindow::openFile()
|
||||
{
|
||||
QString fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Mesh (*.msh)");
|
||||
if(!fileName.isEmpty())
|
||||
emit loadFile(fileName);
|
||||
}
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// functions
|
||||
|
||||
void MainWindow::setupWidgets()
|
||||
{
|
||||
// Ogl Viewer
|
||||
OglViewerWidget* viewer = new OglViewerWidget(this);
|
||||
setCentralWidget(viewer);
|
||||
connect(viewer, &OglViewerWidget::sendMessage, this, &MainWindow::printMessage);
|
||||
|
||||
// open file
|
||||
QToolButton *openFile = new QToolButton(this);
|
||||
openFile->setObjectName("openFile");
|
||||
openFile->setToolTip("open file");
|
||||
connect(openFile, &QToolButton::pressed, this, &MainWindow::openFile);
|
||||
ui->mainToolBar->addWidget(openFile);
|
||||
|
||||
// screenshot
|
||||
QToolButton *screenshot = new QToolButton(this);
|
||||
screenshot->setObjectName("screenshot");
|
||||
screenshot->setToolTip("take screenshot");
|
||||
connect(screenshot, &QToolButton::pressed, this, &MainWindow::takeScreenShot);
|
||||
ui->mainToolBar->addWidget(screenshot);
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
ui->mainToolBar->addSeparator();
|
||||
|
||||
QSignalMapper* signalMapper = new QSignalMapper(this);
|
||||
|
||||
// X
|
||||
QToolButton *x = new QToolButton(this);
|
||||
x->setObjectName("x");
|
||||
x->setToolTip("x-direction");
|
||||
@@ -88,6 +96,7 @@ void MainWindow::setupWidgets()
|
||||
x->setChecked(true);
|
||||
ui->mainToolBar->addWidget(x);
|
||||
|
||||
// Y
|
||||
QToolButton *y = new QToolButton(this);
|
||||
y->setObjectName("y");
|
||||
y->setToolTip("y-direction");
|
||||
@@ -95,6 +104,7 @@ void MainWindow::setupWidgets()
|
||||
y->setChecked(true);
|
||||
ui->mainToolBar->addWidget(y);
|
||||
|
||||
// Z
|
||||
QToolButton *z = new QToolButton(this);
|
||||
z->setObjectName("z");
|
||||
z->setToolTip("z-direction");
|
||||
@@ -110,10 +120,12 @@ void MainWindow::setupWidgets()
|
||||
signalMapper->setMapping(y, 2);
|
||||
signalMapper->setMapping(z, 3);
|
||||
|
||||
connect(signalMapper, SIGNAL(mapped(int)), viewer, SLOT(changeDirection(int)));
|
||||
connect(signalMapper, SIGNAL(mapped(int)), viewer, SLOT(toggleAxis(int)));
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
ui->mainToolBar->addSeparator();
|
||||
|
||||
// wireframe
|
||||
QToolButton *wireframe = new QToolButton(this);
|
||||
wireframe->setObjectName("wireframe");
|
||||
wireframe->setToolTip("wireframe");
|
||||
@@ -122,6 +134,7 @@ void MainWindow::setupWidgets()
|
||||
connect(wireframe, &QToolButton::pressed, viewer, &OglViewerWidget::toggleWireframe);
|
||||
ui->mainToolBar->addWidget(wireframe);
|
||||
|
||||
// light
|
||||
QToolButton *light = new QToolButton(this);
|
||||
light->setObjectName("light");
|
||||
light->setToolTip("toggle light");
|
||||
@@ -130,48 +143,52 @@ void MainWindow::setupWidgets()
|
||||
connect(light, &QToolButton::pressed, viewer, &OglViewerWidget::toggleLight);
|
||||
ui->mainToolBar->addWidget(light);
|
||||
|
||||
// settings
|
||||
QToolButton *settings = new QToolButton(this);
|
||||
settings->setObjectName("settings");
|
||||
settings->setToolTip("settings");
|
||||
connect(settings, &QToolButton::pressed, viewer, &OglViewerWidget::showSettings);
|
||||
ui->mainToolBar->addWidget(settings);
|
||||
|
||||
//////////////////////////////////////////////////
|
||||
ui->mainToolBar->addSeparator();
|
||||
|
||||
// fileinfo
|
||||
QToolButton *fileInfo = new QToolButton(this);
|
||||
fileInfo->setObjectName("fileInfo");
|
||||
fileInfo->setToolTip("file info");
|
||||
connect(fileInfo, &QToolButton::pressed, this, &MainWindow::aboutFile);
|
||||
connect(fileInfo, &QToolButton::pressed, m_infoWindow, &FileInfoWindow::show);
|
||||
ui->mainToolBar->addWidget(fileInfo);
|
||||
|
||||
// help
|
||||
QToolButton *help = new QToolButton(this);
|
||||
help->setObjectName("help");
|
||||
help->setToolTip("help");
|
||||
connect(help, &QToolButton::pressed, this, &MainWindow::aboutTool);
|
||||
ui->mainToolBar->addWidget(help);
|
||||
|
||||
// output on screen
|
||||
m_output->setObjectName("output");
|
||||
m_output->setStyleSheet("QLabel#output{color : white; min-width: 400px; min-height: 50px;}");
|
||||
m_output->setAlignment(Qt::AlignTop);
|
||||
m_output->setText("Name: -\nMaterials: -\nVertice: -\nTriangle: -");
|
||||
m_output->setText(m_fileInfo.left(m_fileInfo.indexOf("<detail>")));
|
||||
m_output->raise();
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::aboutFile()
|
||||
void MainWindow::openFile()
|
||||
{
|
||||
/*QMessageBox* dialog = new QMessageBox(QMessageBox::NoIcon,
|
||||
WINDOW_NAME,
|
||||
QString(m_fileInfo.left(m_fileInfo.indexOf("<detail>"))),
|
||||
QMessageBox::StandardButton::Close,
|
||||
this,
|
||||
Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint);
|
||||
QString fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Mesh (*.msh)");
|
||||
if(!fileName.isEmpty())
|
||||
emit loadFile(fileName);
|
||||
}
|
||||
|
||||
dialog->setStyleSheet("QLabel{min-width: 200px;}");
|
||||
dialog->setDetailedText(QString(m_fileInfo.right(m_fileInfo.size() - m_fileInfo.indexOf("<detail>") - 8)));
|
||||
dialog->exec();
|
||||
delete dialog;*/
|
||||
m_infoWindow->show();
|
||||
void MainWindow::takeScreenShot()
|
||||
{
|
||||
QString destination = QFileDialog::getSaveFileName(this, "Save as...", "", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff, *.tif);;JPEG (*.jpg *jpeg)");
|
||||
|
||||
OglViewerWidget* viewer = dynamic_cast<OglViewerWidget*>(centralWidget());
|
||||
if (!destination.isEmpty() && viewer != NULL)
|
||||
viewer->grab().save(destination);
|
||||
}
|
||||
|
||||
void MainWindow::aboutTool()
|
||||
@@ -193,22 +210,48 @@ void MainWindow::aboutTool()
|
||||
delete dialog;
|
||||
}
|
||||
|
||||
void MainWindow::takeScreenShot()
|
||||
{
|
||||
QString destination = QFileDialog::getSaveFileName(this, "Save as...", "", "PNG (*.png);; BMP (*.bmp);;TIFF (*.tiff, *.tif);;JPEG (*.jpg *jpeg)");
|
||||
|
||||
OglViewerWidget* viewer = dynamic_cast<OglViewerWidget*>(centralWidget());
|
||||
if (!destination.isEmpty() && viewer != NULL)
|
||||
viewer->grab().save(destination);
|
||||
}
|
||||
|
||||
void MainWindow::resizeEvent(QResizeEvent * e)
|
||||
{
|
||||
m_output->move(40, e->size().height() - 80);
|
||||
}
|
||||
|
||||
|
||||
/////////////////////////////////////////////////////////////////////////
|
||||
// slots
|
||||
|
||||
void MainWindow::printMessage(QString message, int severity)
|
||||
{
|
||||
if (!ui->statusBar->currentMessage().isEmpty() && severity < m_curSeverity)
|
||||
return;
|
||||
|
||||
m_curSeverity = severity;
|
||||
int time(0);
|
||||
QPalette palette;
|
||||
|
||||
switch (severity)
|
||||
{
|
||||
case 1:
|
||||
time = 3000;
|
||||
palette.setColor(QPalette::WindowText, Qt::darkYellow);
|
||||
break;
|
||||
case 2:
|
||||
time = 3000;
|
||||
palette.setColor(QPalette::WindowText, Qt::red);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
time = 2000;
|
||||
palette.setColor(QPalette::WindowText, Qt::black);
|
||||
break;
|
||||
}
|
||||
|
||||
ui->statusBar->setPalette(palette);
|
||||
ui->statusBar->showMessage(message, time);
|
||||
}
|
||||
|
||||
void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int vertices, int triangle)
|
||||
{
|
||||
// save basic file information
|
||||
m_fileInfo = QByteArray("Filename: ");
|
||||
m_fileInfo += name;
|
||||
m_fileInfo += "\nMaterials: ";
|
||||
@@ -219,6 +262,7 @@ void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int ver
|
||||
m_fileInfo += QByteArray::number(triangle);
|
||||
m_fileInfo += "<detail>";
|
||||
|
||||
// add detailed information
|
||||
for (auto& it : *materials)
|
||||
{
|
||||
m_fileInfo += it.name;
|
||||
@@ -307,39 +351,11 @@ void MainWindow::setFileInfo(QString name, QVector<Material>* materials, int ver
|
||||
m_fileInfo += "-----------------------------------------------------------------\n";
|
||||
}
|
||||
|
||||
// print basic information on screen
|
||||
m_output->setText(m_fileInfo.left(m_fileInfo.indexOf("<detail>")));
|
||||
|
||||
// print basic and detailed information on info window
|
||||
m_infoWindow->setBasicText(QString(m_fileInfo.left(m_fileInfo.indexOf("<detail>"))));
|
||||
m_infoWindow->setDetailText(QString(m_fileInfo.right(m_fileInfo.size() - m_fileInfo.indexOf("<detail>") - 8)));
|
||||
|
||||
}
|
||||
|
||||
void MainWindow::printMessage(QString message, int severity)
|
||||
{
|
||||
if (!ui->statusBar->currentMessage().isEmpty() && severity < m_curSeverity)
|
||||
return;
|
||||
|
||||
m_curSeverity = severity;
|
||||
int time(0);
|
||||
QPalette palette;
|
||||
|
||||
switch (severity)
|
||||
{
|
||||
case 1:
|
||||
time = 3000;
|
||||
palette.setColor(QPalette::WindowText, Qt::darkYellow);
|
||||
break;
|
||||
case 2:
|
||||
time = 3000;
|
||||
palette.setColor(QPalette::WindowText, Qt::red);
|
||||
break;
|
||||
case 0:
|
||||
default:
|
||||
time = 2000;
|
||||
palette.setColor(QPalette::WindowText, Qt::black);
|
||||
break;
|
||||
}
|
||||
|
||||
ui->statusBar->setPalette(palette);
|
||||
ui->statusBar->showMessage(message, time);
|
||||
}
|
||||
Reference in New Issue
Block a user