From c056b451849b4d7bcbf7a838475b5230d1064ea6 Mon Sep 17 00:00:00 2001 From: = Date: Wed, 4 Jun 2025 22:13:13 -0400 Subject: [PATCH] Add tabs for rumble and shock file viewing. --- app/mainwindow.cpp | 58 +++++++++++++++++++++++++++++++++++++++++----- 1 file changed, 52 insertions(+), 6 deletions(-) diff --git a/app/mainwindow.cpp b/app/mainwindow.cpp index 565b339..8ce0da2 100644 --- a/app/mainwindow.cpp +++ b/app/mainwindow.cpp @@ -1,13 +1,18 @@ #include "mainwindow.h" #include "aboutdialog.h" #include "fastfile.h" +#include "highlighter_gsc.h" +#include "highlighter_cfg.h" +#include "highlighter_shock.h" +#include "highlighter_rumble.h" #include "materialviewer.h" #include "preferenceeditor.h" +#include "rumblefileviewer.h" +#include "rumblegraphviewer.h" #include "soundviewer.h" #include "stringtableviewer.h" #include "techsetviewer.h" #include "ui_mainwindow.h" -#include "compression.h" #include "fastfile_factory.h" #include "iwifile.h" #include "ddsfile.h" @@ -144,9 +149,13 @@ MainWindow::MainWindow(QWidget *parent) }); connect(mTreeWidget, &XTreeWidget::RawFileSelected, this, [this](std::shared_ptr rawFile, const QString aParentName) { - QPlainTextEdit *scriptEditor = new QPlainTextEdit(this); + QTabWidget *rawTabWidget = new QTabWidget(this); + rawTabWidget->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + + QPlainTextEdit *scriptEditor = new QPlainTextEdit(rawTabWidget); scriptEditor->setAcceptDrops(false); scriptEditor->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + scriptEditor->setFont(QFont("Consolas")); if (rawFile->contents.isEmpty()) { scriptEditor->setPlainText("EMPTY"); @@ -157,15 +166,52 @@ MainWindow::MainWindow(QWidget *parent) QString fileStem = rawFile->path.split('/').last(); for (int i = 0; i < ui->tabWidget->count(); i++) { if (ui->tabWidget->tabText(i) == fileStem) { + delete scriptEditor; return; } } - QScrollArea *scrollArea = new QScrollArea(ui->tabWidget); - scrollArea->layout()->addWidget(scriptEditor); + const int tabStopSpaces = 4; + QFontMetrics metrics(scriptEditor->font()); + scriptEditor->setTabStopDistance(tabStopSpaces * metrics.horizontalAdvance(' ')); - ui->tabWidget->addTab(scrollArea, fileStem); - ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, QIcon(":/icons/icons/Icon_GSCFile.png")); + QSyntaxHighlighter *highlighter; + if (fileStem.contains(".gsc")) { + highlighter = new Highlighter_GSC(scriptEditor->document()); + } else if (fileStem.contains(".cfg")) { + highlighter = new Highlighter_CFG(scriptEditor->document()); + } else if (fileStem.contains(".rmb")) { + highlighter = new Highlighter_Rumble(scriptEditor->document()); + + RumbleGraphViewer *rmbGraphViewer = new RumbleGraphViewer(this); + rmbGraphViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + rmbGraphViewer->SetRumbleGraphFile(rawFile); + + rawTabWidget->addTab(rmbGraphViewer, "UI Editor"); + rawTabWidget->addTab(scriptEditor, "Text Editor"); + + ui->tabWidget->addTab(rawTabWidget, fileStem); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RUMBLE)); + ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); + return; + } else if (fileStem.contains(".shock")) { + highlighter = new Highlighter_Shock(scriptEditor->document()); + } else if (rawFile->contents.left(6) == "RUMBLE") { + RumbleFileViewer *rmbFileViewer = new RumbleFileViewer(this); + rmbFileViewer->setProperty("PARENT_NAME", QVariant::fromValue(aParentName)); + rmbFileViewer->SetRumbleFile(rawFile); + + rawTabWidget->addTab(rmbFileViewer, "UI Editor"); + rawTabWidget->addTab(scriptEditor, "Text Editor"); + + ui->tabWidget->addTab(rawTabWidget, fileStem); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RUMBLE)); + ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); + return; + } + + ui->tabWidget->addTab(scriptEditor, fileStem); + ui->tabWidget->setTabIcon(ui->tabWidget->count() - 1, ZoneFile::AssetTypeToIcon(ASSET_RAW_FILE)); ui->tabWidget->setCurrentIndex(ui->tabWidget->count() - 1); });