mirror of https://github.com/mgba-emu/mgba.git
Qt: Add additional info to map view
This commit is contained in:
parent
ba00cdfc02
commit
06657d9fde
2
CHANGES
2
CHANGES
|
@ -7,7 +7,7 @@ Features:
|
||||||
- GB: Expose platform information to CLI debugger
|
- GB: Expose platform information to CLI debugger
|
||||||
- Support Discord Rich Presence
|
- Support Discord Rich Presence
|
||||||
- Debugger: Add tracing to file
|
- Debugger: Add tracing to file
|
||||||
- Map viewer supports bitmapped GBA modes
|
- Enhanced map viewer, supporting bitmapped GBA modes and more displayed info
|
||||||
- OpenGL renderer with high-resolution upscaling support
|
- OpenGL renderer with high-resolution upscaling support
|
||||||
- Experimental high level "XQ" audio for most GBA games
|
- Experimental high level "XQ" audio for most GBA games
|
||||||
- Interframe blending for games that use flicker effects
|
- Interframe blending for games that use flicker effects
|
||||||
|
|
|
@ -0,0 +1,40 @@
|
||||||
|
/* Copyright (c) 2013-2019 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#include "AssetInfo.h"
|
||||||
|
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#include <QHBoxLayout>
|
||||||
|
|
||||||
|
using namespace QGBA;
|
||||||
|
|
||||||
|
AssetInfo::AssetInfo(QWidget* parent)
|
||||||
|
: QGroupBox(parent)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetInfo::addCustomProperty(const QString& id, const QString& visibleName) {
|
||||||
|
QHBoxLayout* newLayout = new QHBoxLayout;
|
||||||
|
newLayout->addWidget(new QLabel(visibleName));
|
||||||
|
QLabel* value = new QLabel;
|
||||||
|
value->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
||||||
|
value->setAlignment(Qt::AlignRight);
|
||||||
|
newLayout->addWidget(value);
|
||||||
|
m_customProperties[id] = value;
|
||||||
|
int index = customLocation();
|
||||||
|
static_cast<QBoxLayout*>(layout())->insertLayout(index, newLayout);
|
||||||
|
}
|
||||||
|
|
||||||
|
void AssetInfo::setCustomProperty(const QString& id, const QVariant& value) {
|
||||||
|
QLabel* label = m_customProperties[id];
|
||||||
|
if (!label) {
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
label->setText(value.toString());
|
||||||
|
}
|
||||||
|
|
||||||
|
int AssetInfo::customLocation(const QString&) {
|
||||||
|
return layout()->count();
|
||||||
|
}
|
|
@ -0,0 +1,34 @@
|
||||||
|
/* Copyright (c) 2013-2019 Jeffrey Pfau
|
||||||
|
*
|
||||||
|
* This Source Code Form is subject to the terms of the Mozilla Public
|
||||||
|
* License, v. 2.0. If a copy of the MPL was not distributed with this
|
||||||
|
* file, You can obtain one at http://mozilla.org/MPL/2.0/. */
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <QGroupBox>
|
||||||
|
#include <QHash>
|
||||||
|
#include <QLabel>
|
||||||
|
#include <QVariant>
|
||||||
|
|
||||||
|
namespace QGBA {
|
||||||
|
|
||||||
|
class CoreController;
|
||||||
|
|
||||||
|
class AssetInfo : public QGroupBox {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
AssetInfo(QWidget* parent = nullptr);
|
||||||
|
void addCustomProperty(const QString& id, const QString& visibleName);
|
||||||
|
|
||||||
|
public slots:
|
||||||
|
void setCustomProperty(const QString& id, const QVariant& value);
|
||||||
|
|
||||||
|
protected:
|
||||||
|
virtual int customLocation(const QString& id = {});
|
||||||
|
|
||||||
|
private:
|
||||||
|
QHash<QString, QLabel*> m_customProperties;
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -22,7 +22,7 @@
|
||||||
using namespace QGBA;
|
using namespace QGBA;
|
||||||
|
|
||||||
AssetTile::AssetTile(QWidget* parent)
|
AssetTile::AssetTile(QWidget* parent)
|
||||||
: QGroupBox(parent)
|
: AssetInfo(parent)
|
||||||
{
|
{
|
||||||
m_ui.setupUi(this);
|
m_ui.setupUi(this);
|
||||||
|
|
||||||
|
@ -42,16 +42,8 @@ AssetTile::AssetTile(QWidget* parent)
|
||||||
m_ui.b->setFont(font);
|
m_ui.b->setFont(font);
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetTile::addCustomProperty(const QString& id, const QString& visibleName) {
|
int AssetTile::customLocation(const QString&) {
|
||||||
QHBoxLayout* newLayout = new QHBoxLayout;
|
return layout()->indexOf(m_ui.line);
|
||||||
newLayout->addWidget(new QLabel(visibleName));
|
|
||||||
QLabel* value = new QLabel;
|
|
||||||
value->setFont(QFontDatabase::systemFont(QFontDatabase::FixedFont));
|
|
||||||
value->setAlignment(Qt::AlignRight);
|
|
||||||
newLayout->addWidget(value);
|
|
||||||
m_customProperties[id] = value;
|
|
||||||
int index = layout()->indexOf(m_ui.line);
|
|
||||||
static_cast<QBoxLayout*>(layout())->insertLayout(index, newLayout);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetTile::setController(std::shared_ptr<CoreController> controller) {
|
void AssetTile::setController(std::shared_ptr<CoreController> controller) {
|
||||||
|
@ -149,11 +141,3 @@ void AssetTile::selectColor(int index) {
|
||||||
m_ui.g->setText(tr("0x%0 (%1)").arg(g, 2, 16, QChar('0')).arg(g, 2, 10, QChar('0')));
|
m_ui.g->setText(tr("0x%0 (%1)").arg(g, 2, 16, QChar('0')).arg(g, 2, 10, QChar('0')));
|
||||||
m_ui.b->setText(tr("0x%0 (%1)").arg(b, 2, 16, QChar('0')).arg(b, 2, 10, QChar('0')));
|
m_ui.b->setText(tr("0x%0 (%1)").arg(b, 2, 16, QChar('0')).arg(b, 2, 10, QChar('0')));
|
||||||
}
|
}
|
||||||
|
|
||||||
void AssetTile::setCustomProperty(const QString& id, const QVariant& value) {
|
|
||||||
QLabel* label = m_customProperties[id];
|
|
||||||
if (!label) {
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
label->setText(value.toString());
|
|
||||||
}
|
|
||||||
|
|
|
@ -15,13 +15,12 @@ namespace QGBA {
|
||||||
|
|
||||||
class CoreController;
|
class CoreController;
|
||||||
|
|
||||||
class AssetTile : public QGroupBox {
|
class AssetTile : public AssetInfo {
|
||||||
Q_OBJECT
|
Q_OBJECT
|
||||||
|
|
||||||
public:
|
public:
|
||||||
AssetTile(QWidget* parent = nullptr);
|
AssetTile(QWidget* parent = nullptr);
|
||||||
void setController(std::shared_ptr<CoreController>);
|
void setController(std::shared_ptr<CoreController>);
|
||||||
void addCustomProperty(const QString& id, const QString& visibleName);
|
|
||||||
|
|
||||||
public slots:
|
public slots:
|
||||||
void setPalette(int);
|
void setPalette(int);
|
||||||
|
@ -29,7 +28,9 @@ public slots:
|
||||||
void selectIndex(int);
|
void selectIndex(int);
|
||||||
void setFlip(bool h, bool v);
|
void setFlip(bool h, bool v);
|
||||||
void selectColor(int);
|
void selectColor(int);
|
||||||
void setCustomProperty(const QString& id, const QVariant& value);
|
|
||||||
|
protected:
|
||||||
|
int customLocation(const QString& id = {}) override;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
Ui::AssetTile m_ui;
|
Ui::AssetTile m_ui;
|
||||||
|
|
|
@ -1,13 +1,13 @@
|
||||||
<?xml version="1.0" encoding="UTF-8"?>
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
<ui version="4.0">
|
<ui version="4.0">
|
||||||
<class>AssetTile</class>
|
<class>AssetTile</class>
|
||||||
<widget class="QGroupBox" name="AssetTile">
|
<widget class="QGBA::AssetInfo" name="AssetTile">
|
||||||
<property name="geometry">
|
<property name="geometry">
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>171</width>
|
<width>241</width>
|
||||||
<height>355</height>
|
<height>406</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="sizePolicy">
|
<property name="sizePolicy">
|
||||||
|
@ -185,6 +185,12 @@
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QGBA::AssetInfo</class>
|
||||||
|
<extends>QGroupBox</extends>
|
||||||
|
<header>AssetInfo.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>QGBA::Swatch</class>
|
<class>QGBA::Swatch</class>
|
||||||
<extends>QWidget</extends>
|
<extends>QWidget</extends>
|
||||||
|
|
|
@ -59,6 +59,7 @@ set(SOURCE_FILES
|
||||||
AbstractUpdater.cpp
|
AbstractUpdater.cpp
|
||||||
Action.cpp
|
Action.cpp
|
||||||
ActionMapper.cpp
|
ActionMapper.cpp
|
||||||
|
AssetInfo.cpp
|
||||||
AssetTile.cpp
|
AssetTile.cpp
|
||||||
AssetView.cpp
|
AssetView.cpp
|
||||||
AudioProcessor.cpp
|
AudioProcessor.cpp
|
||||||
|
|
|
@ -18,6 +18,7 @@
|
||||||
#include <mgba/internal/gba/video.h>
|
#include <mgba/internal/gba/video.h>
|
||||||
#endif
|
#endif
|
||||||
#ifdef M_CORE_GB
|
#ifdef M_CORE_GB
|
||||||
|
#include <mgba/internal/gb/gb.h>
|
||||||
#include <mgba/internal/gb/memory.h>
|
#include <mgba/internal/gb/memory.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
@ -42,6 +43,12 @@ MapView::MapView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||||
m_boundary = 2048;
|
m_boundary = 2048;
|
||||||
m_addressBase = BASE_VRAM;
|
m_addressBase = BASE_VRAM;
|
||||||
m_addressWidth = 8;
|
m_addressWidth = 8;
|
||||||
|
m_ui.bgInfo->addCustomProperty("priority", tr("Priority"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("screenBase", tr("Map base"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("charBase", tr("Tile base"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("size", tr("Size"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("offset", tr("Offset"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("transform", tr("Xform"));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
#ifdef M_CORE_GB
|
#ifdef M_CORE_GB
|
||||||
|
@ -49,6 +56,9 @@ MapView::MapView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||||
m_boundary = 1024;
|
m_boundary = 1024;
|
||||||
m_addressBase = GB_BASE_VRAM;
|
m_addressBase = GB_BASE_VRAM;
|
||||||
m_addressWidth = 4;
|
m_addressWidth = 4;
|
||||||
|
m_ui.bgInfo->addCustomProperty("screenBase", tr("Map base"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("charBase", tr("Tile base"));
|
||||||
|
m_ui.bgInfo->addCustomProperty("offset", tr("Offset"));
|
||||||
break;
|
break;
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
|
@ -143,16 +153,58 @@ void MapView::updateTilesGBA(bool force) {
|
||||||
{
|
{
|
||||||
CoreController::Interrupter interrupter(m_controller);
|
CoreController::Interrupter interrupter(m_controller);
|
||||||
int bitmap = -1;
|
int bitmap = -1;
|
||||||
|
int priority = -1;
|
||||||
|
int frame = 0;
|
||||||
|
QString offset(tr("N/A"));
|
||||||
|
QString transform(tr("N/A"));
|
||||||
if (m_controller->platform() == PLATFORM_GBA) {
|
if (m_controller->platform() == PLATFORM_GBA) {
|
||||||
int mode = GBARegisterDISPCNTGetMode(static_cast<GBA*>(m_controller->thread()->core->board)->memory.io[REG_DISPCNT]);
|
uint16_t* io = static_cast<GBA*>(m_controller->thread()->core->board)->memory.io;
|
||||||
|
int mode = GBARegisterDISPCNTGetMode(io[REG_DISPCNT >> 1]);
|
||||||
if (m_map == 2 && mode > 2) {
|
if (m_map == 2 && mode > 2) {
|
||||||
bitmap = mode == 4 ? 1 : 0;
|
bitmap = mode == 4 ? 1 : 0;
|
||||||
|
if (mode != 3) {
|
||||||
|
frame = GBARegisterDISPCNTGetFrameSelect(io[REG_DISPCNT >> 1]);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
priority = GBARegisterBGCNTGetPriority(io[(REG_BG0CNT >> 1) + m_map]);
|
||||||
|
if (mode == 0 || (mode == 1 && m_map != 2)) {
|
||||||
|
offset = QString("%1, %2")
|
||||||
|
.arg(io[(REG_BG0HOFS >> 1) + (m_map << 1)])
|
||||||
|
.arg(io[(REG_BG0VOFS >> 1) + (m_map << 1)]);
|
||||||
|
} else if ((mode > 0 && m_map == 2) || (mode == 2 && m_map == 3)) {
|
||||||
|
int32_t refX = io[(REG_BG2X_LO >> 1) + ((m_map - 2) << 2)];
|
||||||
|
refX |= io[(REG_BG2X_HI >> 1) + ((m_map - 2) << 2)] << 16;
|
||||||
|
int32_t refY = io[(REG_BG2Y_LO >> 1) + ((m_map - 2) << 2)];
|
||||||
|
refY |= io[(REG_BG2Y_HI >> 1) + ((m_map - 2) << 2)] << 16;
|
||||||
|
refX <<= 4;
|
||||||
|
refY <<= 4;
|
||||||
|
refX >>= 4;
|
||||||
|
refY >>= 4;
|
||||||
|
offset = QString("%1\n%2").arg(refX / 65536., 0, 'f', 3).arg(refY / 65536., 0, 'f', 3);
|
||||||
|
transform = QString("%1 %2\n%3 %4")
|
||||||
|
.arg(io[(REG_BG2PA >> 1) + ((m_map - 2) << 2)] / 256., 3, 'f', 2)
|
||||||
|
.arg(io[(REG_BG2PB >> 1) + ((m_map - 2) << 2)] / 256., 3, 'f', 2)
|
||||||
|
.arg(io[(REG_BG2PC >> 1) + ((m_map - 2) << 2)] / 256., 3, 'f', 2)
|
||||||
|
.arg(io[(REG_BG2PD >> 1) + ((m_map - 2) << 2)] / 256., 3, 'f', 2);
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (m_controller->platform() == PLATFORM_GB) {
|
||||||
|
uint8_t* io = static_cast<GB*>(m_controller->thread()->core->board)->memory.io;
|
||||||
|
int x = io[m_map == 0 ? 0x42 : 0x4A];
|
||||||
|
int y = io[m_map == 0 ? 0x43 : 0x4B];
|
||||||
|
offset = QString("%1, %2").arg(x).arg(y);
|
||||||
}
|
}
|
||||||
if (bitmap >= 0) {
|
if (bitmap >= 0) {
|
||||||
mBitmapCache* bitmapCache = mBitmapCacheSetGetPointer(&m_cacheSet->bitmaps, bitmap);
|
mBitmapCache* bitmapCache = mBitmapCacheSetGetPointer(&m_cacheSet->bitmaps, bitmap);
|
||||||
int width = mBitmapCacheSystemInfoGetWidth(bitmapCache->sysConfig);
|
int width = mBitmapCacheSystemInfoGetWidth(bitmapCache->sysConfig);
|
||||||
int height = mBitmapCacheSystemInfoGetHeight(bitmapCache->sysConfig);
|
int height = mBitmapCacheSystemInfoGetHeight(bitmapCache->sysConfig);
|
||||||
|
m_ui.bgInfo->setCustomProperty("screenBase", QString("0x%1").arg(m_addressBase + bitmapCache->bitsStart[frame], 8, 16, QChar('0')));
|
||||||
|
m_ui.bgInfo->setCustomProperty("charBase", tr("N/A"));
|
||||||
|
m_ui.bgInfo->setCustomProperty("size", QString("%1×%2").arg(width).arg(height));
|
||||||
|
m_ui.bgInfo->setCustomProperty("priority", priority);
|
||||||
|
m_ui.bgInfo->setCustomProperty("offset", offset);
|
||||||
|
m_ui.bgInfo->setCustomProperty("transform", transform);
|
||||||
m_rawMap = QImage(QSize(width, height), QImage::Format_ARGB32);
|
m_rawMap = QImage(QSize(width, height), QImage::Format_ARGB32);
|
||||||
uchar* bgBits = m_rawMap.bits();
|
uchar* bgBits = m_rawMap.bits();
|
||||||
for (int j = 0; j < height; ++j) {
|
for (int j = 0; j < height; ++j) {
|
||||||
|
@ -163,6 +215,16 @@ void MapView::updateTilesGBA(bool force) {
|
||||||
mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map);
|
mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, m_map);
|
||||||
int tilesW = 1 << mMapCacheSystemInfoGetTilesWide(mapCache->sysConfig);
|
int tilesW = 1 << mMapCacheSystemInfoGetTilesWide(mapCache->sysConfig);
|
||||||
int tilesH = 1 << mMapCacheSystemInfoGetTilesHigh(mapCache->sysConfig);
|
int tilesH = 1 << mMapCacheSystemInfoGetTilesHigh(mapCache->sysConfig);
|
||||||
|
m_ui.bgInfo->setCustomProperty("screenBase", QString("%0%1")
|
||||||
|
.arg(m_addressWidth == 8 ? "0x" : "")
|
||||||
|
.arg(m_addressBase + mapCache->mapStart, m_addressWidth, 16, QChar('0')));
|
||||||
|
m_ui.bgInfo->setCustomProperty("charBase", QString("%0%1")
|
||||||
|
.arg(m_addressWidth == 8 ? "0x" : "")
|
||||||
|
.arg(m_addressBase + mapCache->tileCache->tileBase, m_addressWidth, 16, QChar('0')));
|
||||||
|
m_ui.bgInfo->setCustomProperty("size", QString("%1×%2").arg(tilesW * 8).arg(tilesH * 8));
|
||||||
|
m_ui.bgInfo->setCustomProperty("priority", priority);
|
||||||
|
m_ui.bgInfo->setCustomProperty("offset", offset);
|
||||||
|
m_ui.bgInfo->setCustomProperty("transform", transform);
|
||||||
m_rawMap = QImage(QSize(tilesW * 8, tilesH * 8), QImage::Format_ARGB32);
|
m_rawMap = QImage(QSize(tilesW * 8, tilesH * 8), QImage::Format_ARGB32);
|
||||||
uchar* bgBits = m_rawMap.bits();
|
uchar* bgBits = m_rawMap.bits();
|
||||||
for (int j = 0; j < tilesH; ++j) {
|
for (int j = 0; j < tilesH; ++j) {
|
||||||
|
|
|
@ -6,18 +6,80 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>641</width>
|
<width>1273</width>
|
||||||
<height>489</height>
|
<height>736</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<property name="windowTitle">
|
<property name="windowTitle">
|
||||||
<string>Maps</string>
|
<string>Maps</string>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QGridLayout" name="gridLayout">
|
<layout class="QGridLayout" name="gridLayout" rowstretch="0,0,0,0,0,0">
|
||||||
<item row="0" column="0">
|
<item row="3" column="0">
|
||||||
<layout class="QVBoxLayout" name="bgLayout"/>
|
<widget class="QGBA::AssetTile" name="tile"/>
|
||||||
</item>
|
</item>
|
||||||
<item row="0" column="1" rowspan="5">
|
<item row="2" column="0">
|
||||||
|
<widget class="QGBA::AssetInfo" name="bgInfo">
|
||||||
|
<property name="title">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout_2"/>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="5" column="0">
|
||||||
|
<widget class="QPushButton" name="exportButton">
|
||||||
|
<property name="text">
|
||||||
|
<string>Export</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="4" column="0">
|
||||||
|
<spacer name="verticalSpacer">
|
||||||
|
<property name="orientation">
|
||||||
|
<enum>Qt::Vertical</enum>
|
||||||
|
</property>
|
||||||
|
<property name="sizeHint" stdset="0">
|
||||||
|
<size>
|
||||||
|
<width>0</width>
|
||||||
|
<height>0</height>
|
||||||
|
</size>
|
||||||
|
</property>
|
||||||
|
</spacer>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="0">
|
||||||
|
<layout class="QVBoxLayout" name="bgLayout">
|
||||||
|
<item>
|
||||||
|
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
||||||
|
<item>
|
||||||
|
<widget class="QSpinBox" name="magnification">
|
||||||
|
<property name="sizePolicy">
|
||||||
|
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
||||||
|
<horstretch>0</horstretch>
|
||||||
|
<verstretch>0</verstretch>
|
||||||
|
</sizepolicy>
|
||||||
|
</property>
|
||||||
|
<property name="suffix">
|
||||||
|
<string>×</string>
|
||||||
|
</property>
|
||||||
|
<property name="minimum">
|
||||||
|
<number>1</number>
|
||||||
|
</property>
|
||||||
|
<property name="maximum">
|
||||||
|
<number>8</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Magnification</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
<item row="1" column="1" rowspan="5" colspan="2">
|
||||||
<widget class="QScrollArea" name="scrollArea">
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
<property name="widgetResizable">
|
<property name="widgetResizable">
|
||||||
<bool>true</bool>
|
<bool>true</bool>
|
||||||
|
@ -30,8 +92,8 @@
|
||||||
<rect>
|
<rect>
|
||||||
<x>0</x>
|
<x>0</x>
|
||||||
<y>0</y>
|
<y>0</y>
|
||||||
<width>457</width>
|
<width>835</width>
|
||||||
<height>463</height>
|
<height>720</height>
|
||||||
</rect>
|
</rect>
|
||||||
</property>
|
</property>
|
||||||
<layout class="QVBoxLayout" name="verticalLayout">
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
@ -71,62 +133,15 @@
|
||||||
</widget>
|
</widget>
|
||||||
</widget>
|
</widget>
|
||||||
</item>
|
</item>
|
||||||
<item row="2" column="0">
|
|
||||||
<widget class="QGBA::AssetTile" name="tile"/>
|
|
||||||
</item>
|
|
||||||
<item row="4" column="0">
|
|
||||||
<spacer name="verticalSpacer">
|
|
||||||
<property name="orientation">
|
|
||||||
<enum>Qt::Vertical</enum>
|
|
||||||
</property>
|
|
||||||
<property name="sizeHint" stdset="0">
|
|
||||||
<size>
|
|
||||||
<width>0</width>
|
|
||||||
<height>0</height>
|
|
||||||
</size>
|
|
||||||
</property>
|
|
||||||
</spacer>
|
|
||||||
</item>
|
|
||||||
<item row="1" column="0">
|
|
||||||
<layout class="QHBoxLayout" name="horizontalLayout_4">
|
|
||||||
<item>
|
|
||||||
<widget class="QSpinBox" name="magnification">
|
|
||||||
<property name="sizePolicy">
|
|
||||||
<sizepolicy hsizetype="Fixed" vsizetype="Fixed">
|
|
||||||
<horstretch>0</horstretch>
|
|
||||||
<verstretch>0</verstretch>
|
|
||||||
</sizepolicy>
|
|
||||||
</property>
|
|
||||||
<property name="suffix">
|
|
||||||
<string>×</string>
|
|
||||||
</property>
|
|
||||||
<property name="minimum">
|
|
||||||
<number>1</number>
|
|
||||||
</property>
|
|
||||||
<property name="maximum">
|
|
||||||
<number>8</number>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
<item>
|
|
||||||
<widget class="QLabel" name="label_2">
|
|
||||||
<property name="text">
|
|
||||||
<string>Magnification</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
|
||||||
</item>
|
|
||||||
<item row="3" column="0">
|
|
||||||
<widget class="QPushButton" name="exportButton">
|
|
||||||
<property name="text">
|
|
||||||
<string>Export</string>
|
|
||||||
</property>
|
|
||||||
</widget>
|
|
||||||
</item>
|
|
||||||
</layout>
|
</layout>
|
||||||
</widget>
|
</widget>
|
||||||
<customwidgets>
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QGBA::AssetInfo</class>
|
||||||
|
<extends>QGroupBox</extends>
|
||||||
|
<header>AssetInfo.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
<customwidget>
|
<customwidget>
|
||||||
<class>QGBA::AssetTile</class>
|
<class>QGBA::AssetTile</class>
|
||||||
<extends>QGroupBox</extends>
|
<extends>QGroupBox</extends>
|
||||||
|
|
Loading…
Reference in New Issue