#include "..\Header\MainWindow.h" #include "..\Header\OglViewerWidget.h" #include #include #include #include #include #include #include #include #include "..\Header\FileInterface.h" #define WINDOW_NAME "Mesh Viewer" MainWindow::MainWindow(QWidget *parent) : QMainWindow(parent) , ui(new Ui::MainWindowClass) , m_curSeverity(0) { ui->setupUi(this); setWindowTitle(WINDOW_NAME); setWindowIcon(QIcon(":/images/icon.ico")); QSurfaceFormat format; format.setDepthBufferSize(24); QSurfaceFormat::setDefaultFormat(format); setupWidgets(); ui->statusBar->showMessage("MeshViewer by Anakin", 0); m_fileInfo += "Filename: -\nMaterials: -\nVertices: -\nTriangle: -\nNo file is open"; } MainWindow::~MainWindow() { delete ui; } void MainWindow::openFile() { QString fileName = QFileDialog::getOpenFileName(this, "Open File", "", "Mesh (*.msh)"); if(!fileName.isEmpty()) emit loadFile(fileName); } void MainWindow::setupWidgets() { OglViewerWidget* viewer = new OglViewerWidget(this); setCentralWidget(viewer); QAction *openFile = new QAction("Open file", this); connect(openFile, &QAction::triggered, this, &MainWindow::openFile); ui->mainToolBar->addAction(openFile); QSignalMapper* signalMapper = new QSignalMapper(this); QAction *x = new QAction("X", this); x->setCheckable(true); x->setChecked(true); ui->mainToolBar->addAction(x); QAction *y = new QAction("Y", this); y->setCheckable(true); y->setChecked(true); ui->mainToolBar->addAction(y); QAction *z = new QAction("Z", this); z->setCheckable(true); z->setChecked(true); ui->mainToolBar->addAction(z); connect(x, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(y, SIGNAL(triggered()), signalMapper, SLOT(map())); connect(z, SIGNAL(triggered()), signalMapper, SLOT(map())); signalMapper->setMapping(x, 1); signalMapper->setMapping(y, 2); signalMapper->setMapping(z, 3); connect(signalMapper, SIGNAL(mapped(int)), viewer, SLOT(changeDirection(int))); QAction *fileInfo = new QAction("File info", this); connect(fileInfo, &QAction::triggered, this, &MainWindow::aboutFile); ui->mainToolBar->addAction(fileInfo); QAction *help = new QAction("Help", this); connect(help, &QAction::triggered, this, &MainWindow::aboutTool); ui->mainToolBar->addAction(help); } void MainWindow::aboutFile() { QMessageBox* dialog = new QMessageBox(QMessageBox::NoIcon, WINDOW_NAME, QString(m_fileInfo.left(m_fileInfo.indexOf(""))), QMessageBox::StandardButton::Close, this, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); dialog->setStyleSheet("QLabel{min-width: 200px;}"); dialog->setDetailedText(QString(m_fileInfo.right(m_fileInfo.size() - m_fileInfo.indexOf("") - 8))); dialog->exec(); delete dialog; } void MainWindow::aboutTool() { QFile file(":/files/about.txt"); file.open(QIODevice::ReadOnly); QMessageBox* dialog = new QMessageBox( QMessageBox::Question, WINDOW_NAME, QString(file.readAll()), QMessageBox::StandardButton::Close, this, Qt::Dialog | Qt::MSWindowsFixedSizeDialogHint); file.close(); dialog->exec(); delete dialog; } void MainWindow::setFileInfo(QString name, QStringList textures, int vertices, int triangle) { m_fileInfo = QByteArray("Filename: "); m_fileInfo += name; m_fileInfo += "\nMaterials: "; m_fileInfo += QByteArray::number(textures.size()); m_fileInfo += "\nVertices: "; m_fileInfo += QByteArray::number(vertices); m_fileInfo += "\nTriangle: "; m_fileInfo += QByteArray::number(triangle); m_fileInfo += ""; int count(0); for (auto& it : textures) { m_fileInfo += "Material "; m_fileInfo += QByteArray::number(count++); m_fileInfo += " - "; m_fileInfo += it; m_fileInfo += "\n"; } } 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); }