mirror of https://github.com/mgba-emu/mgba.git
Qt: Initial map cache UI
This commit is contained in:
parent
c6f0d6c5db
commit
2c59cb8211
|
@ -85,6 +85,7 @@ set(SOURCE_FILES
|
||||||
LoadSaveState.cpp
|
LoadSaveState.cpp
|
||||||
LogController.cpp
|
LogController.cpp
|
||||||
LogView.cpp
|
LogView.cpp
|
||||||
|
MapView.cpp
|
||||||
MemoryModel.cpp
|
MemoryModel.cpp
|
||||||
MemorySearch.cpp
|
MemorySearch.cpp
|
||||||
MemoryView.cpp
|
MemoryView.cpp
|
||||||
|
@ -119,6 +120,7 @@ set(UI_FILES
|
||||||
IOViewer.ui
|
IOViewer.ui
|
||||||
LoadSaveState.ui
|
LoadSaveState.ui
|
||||||
LogView.ui
|
LogView.ui
|
||||||
|
MapView.ui
|
||||||
MemorySearch.ui
|
MemorySearch.ui
|
||||||
MemoryView.ui
|
MemoryView.ui
|
||||||
ObjView.ui
|
ObjView.ui
|
||||||
|
|
|
@ -0,0 +1,65 @@
|
||||||
|
/* Copyright (c) 2013-2017 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 "MapView.h"
|
||||||
|
|
||||||
|
#include "CoreController.h"
|
||||||
|
#include "GBAApp.h"
|
||||||
|
|
||||||
|
#include <QFontDatabase>
|
||||||
|
#include <QTimer>
|
||||||
|
|
||||||
|
using namespace QGBA;
|
||||||
|
|
||||||
|
MapView::MapView(std::shared_ptr<CoreController> controller, QWidget* parent)
|
||||||
|
: AssetView(controller, parent)
|
||||||
|
, m_controller(controller)
|
||||||
|
{
|
||||||
|
m_ui.setupUi(this);
|
||||||
|
m_ui.tile->setController(controller);
|
||||||
|
|
||||||
|
switch (m_controller->platform()) {
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
case PLATFORM_GBA:
|
||||||
|
m_ui.tile->setBoundary(2048, 0, 2);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
case PLATFORM_GB:
|
||||||
|
m_ui.tile->setBoundary(1024, 0, 0);
|
||||||
|
break;
|
||||||
|
#endif
|
||||||
|
default:
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
connect(m_ui.magnification, static_cast<void (QSpinBox::*)(int)>(&QSpinBox::valueChanged), [this]() {
|
||||||
|
updateTiles(true);
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
void MapView::updateTilesGBA(bool force) {
|
||||||
|
QImage bg(QSize(256, 256), QImage::Format_ARGB32);
|
||||||
|
uchar* bgBits = bg.bits();
|
||||||
|
mMapCache* mapCache = mMapCacheSetGetPointer(&m_cacheSet->maps, 0);
|
||||||
|
for (int j = 0; j < 32; ++j) {
|
||||||
|
for (int i = 0; i < 32; ++i) {
|
||||||
|
mMapCacheCleanTile(mapCache, &m_mapStatus[i + j * 32], i, j);
|
||||||
|
}
|
||||||
|
for (int i = 0; i < 8; ++i) {
|
||||||
|
memcpy(static_cast<void*>(&bgBits[256 * 4 * (i + j * 8)]), mMapCacheGetRow(mapCache, i + j * 8), 256 * 4);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
bg = bg.convertToFormat(QImage::Format_RGB32).rgbSwapped();
|
||||||
|
m_ui.map->setPixmap(QPixmap::fromImage(bg));
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
void MapView::updateTilesGB(bool force) {
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
|
@ -0,0 +1,38 @@
|
||||||
|
/* Copyright (c) 2013-2017 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 "AssetView.h"
|
||||||
|
|
||||||
|
#include "ui_MapView.h"
|
||||||
|
|
||||||
|
#include <mgba/core/map-cache.h>
|
||||||
|
|
||||||
|
namespace QGBA {
|
||||||
|
|
||||||
|
class CoreController;
|
||||||
|
|
||||||
|
class MapView : public AssetView {
|
||||||
|
Q_OBJECT
|
||||||
|
|
||||||
|
public:
|
||||||
|
MapView(std::shared_ptr<CoreController> controller, QWidget* parent = nullptr);
|
||||||
|
|
||||||
|
private:
|
||||||
|
#ifdef M_CORE_GBA
|
||||||
|
void updateTilesGBA(bool force) override;
|
||||||
|
#endif
|
||||||
|
#ifdef M_CORE_GB
|
||||||
|
void updateTilesGB(bool force) override;
|
||||||
|
#endif
|
||||||
|
|
||||||
|
Ui::MapView m_ui;
|
||||||
|
|
||||||
|
std::shared_ptr<CoreController> m_controller;
|
||||||
|
mMapCacheEntry m_mapStatus[1024 * 1024] = {}; // TODO: Correct size
|
||||||
|
};
|
||||||
|
|
||||||
|
}
|
|
@ -0,0 +1,101 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8"?>
|
||||||
|
<ui version="4.0">
|
||||||
|
<class>MapView</class>
|
||||||
|
<widget class="QWidget" name="MapView">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>498</width>
|
||||||
|
<height>335</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<property name="windowTitle">
|
||||||
|
<string>Maps</string>
|
||||||
|
</property>
|
||||||
|
<layout class="QGridLayout" name="gridLayout">
|
||||||
|
<item row="1" column="0">
|
||||||
|
<widget class="QGBA::AssetTile" name="tile"/>
|
||||||
|
</item>
|
||||||
|
<item row="0" column="1" rowspan="3">
|
||||||
|
<widget class="QScrollArea" name="scrollArea">
|
||||||
|
<property name="widgetResizable">
|
||||||
|
<bool>true</bool>
|
||||||
|
</property>
|
||||||
|
<widget class="QWidget" name="scrollAreaWidgetContents">
|
||||||
|
<property name="geometry">
|
||||||
|
<rect>
|
||||||
|
<x>0</x>
|
||||||
|
<y>0</y>
|
||||||
|
<width>314</width>
|
||||||
|
<height>309</height>
|
||||||
|
</rect>
|
||||||
|
</property>
|
||||||
|
<layout class="QVBoxLayout" name="verticalLayout">
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="map">
|
||||||
|
<property name="text">
|
||||||
|
<string/>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item row="2" 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="0" 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>4</number>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
<item>
|
||||||
|
<widget class="QLabel" name="label_2">
|
||||||
|
<property name="text">
|
||||||
|
<string>Magnification</string>
|
||||||
|
</property>
|
||||||
|
</widget>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</item>
|
||||||
|
</layout>
|
||||||
|
</widget>
|
||||||
|
<customwidgets>
|
||||||
|
<customwidget>
|
||||||
|
<class>QGBA::AssetTile</class>
|
||||||
|
<extends>QGroupBox</extends>
|
||||||
|
<header>AssetTile.h</header>
|
||||||
|
<container>1</container>
|
||||||
|
</customwidget>
|
||||||
|
</customwidgets>
|
||||||
|
<resources/>
|
||||||
|
<connections/>
|
||||||
|
</ui>
|
|
@ -35,9 +35,10 @@
|
||||||
#include "IOViewer.h"
|
#include "IOViewer.h"
|
||||||
#include "LoadSaveState.h"
|
#include "LoadSaveState.h"
|
||||||
#include "LogView.h"
|
#include "LogView.h"
|
||||||
#include "MultiplayerController.h"
|
#include "MapView.h"
|
||||||
#include "MemorySearch.h"
|
#include "MemorySearch.h"
|
||||||
#include "MemoryView.h"
|
#include "MemoryView.h"
|
||||||
|
#include "MultiplayerController.h"
|
||||||
#include "OverrideView.h"
|
#include "OverrideView.h"
|
||||||
#include "ObjView.h"
|
#include "ObjView.h"
|
||||||
#include "PaletteView.h"
|
#include "PaletteView.h"
|
||||||
|
@ -1491,6 +1492,11 @@ void Window::setupMenu(QMenuBar* menubar) {
|
||||||
m_gameActions.append(tileView);
|
m_gameActions.append(tileView);
|
||||||
addControlledAction(toolsMenu, tileView, "tileWindow");
|
addControlledAction(toolsMenu, tileView, "tileWindow");
|
||||||
|
|
||||||
|
QAction* mapView = new QAction(tr("View &map..."), toolsMenu);
|
||||||
|
connect(mapView, &QAction::triggered, openControllerTView<MapView>());
|
||||||
|
m_gameActions.append(mapView);
|
||||||
|
addControlledAction(toolsMenu, mapView, "mapWindow");
|
||||||
|
|
||||||
QAction* memoryView = new QAction(tr("View memory..."), toolsMenu);
|
QAction* memoryView = new QAction(tr("View memory..."), toolsMenu);
|
||||||
connect(memoryView, &QAction::triggered, openControllerTView<MemoryView>());
|
connect(memoryView, &QAction::triggered, openControllerTView<MemoryView>());
|
||||||
m_gameActions.append(memoryView);
|
m_gameActions.append(memoryView);
|
||||||
|
|
Loading…
Reference in New Issue