Clean up project settings editor UI

This commit is contained in:
GriffinR 2023-09-08 13:05:38 -04:00
parent 61cbbbf08a
commit 7a399daaff
2 changed files with 401 additions and 370 deletions

View file

@ -6,8 +6,8 @@
<rect>
<x>0</x>
<y>0</y>
<width>563</width>
<height>1129</height>
<width>611</width>
<height>1137</height>
</rect>
</property>
<property name="windowTitle">
@ -28,15 +28,15 @@
<rect>
<x>0</x>
<y>0</y>
<width>537</width>
<height>1427</height>
<width>585</width>
<height>1486</height>
</rect>
</property>
<layout class="QVBoxLayout" name="verticalLayout_5">
<item>
<widget class="QGroupBox" name="groupBox_UserConfig">
<property name="title">
<string>User config</string>
<string>Preferences</string>
</property>
<layout class="QVBoxLayout" name="verticalLayout_2">
<item>
@ -233,381 +233,416 @@
</widget>
</item>
<item>
<widget class="QLabel" name="label_Warning">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
<widget class="QFrame" name="frame_Warning">
<property name="styleSheet">
<string notr="true">.QFrame { border: 1px solid red; }</string>
</property>
<property name="text">
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:13pt; color:#d7000c;&quot;&gt;WARNING: &lt;/span&gt;&lt;span style=&quot; font-weight:400;&quot;&gt;The settings from this point below require project changes to function properly. Do not modify these settings without the necessary changes. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
<property name="frameShape">
<enum>QFrame::StyledPanel</enum>
</property>
<property name="wordWrap">
<bool>true</bool>
<property name="frameShadow">
<enum>QFrame::Raised</enum>
</property>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_BaseGameVersion" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<layout class="QVBoxLayout" name="verticalLayout_3">
<item>
<widget class="QLabel" name="label_BaseGameVersion">
<property name="text">
<string>Base game version</string>
</property>
</widget>
</item>
<item>
<widget class="NoScrollComboBox" name="comboBox_BaseGameVersion">
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_TilesetsMetatiles">
<property name="title">
<string>Tilesets / Metatiles</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="8" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableTripleLayerMetatiles">
<property name="text">
<string>Enable Triple Layer Metatiles</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="NoScrollSpinBox" name="spinBox_TerrainTypeMask">
<property name="toolTip">
<string>The mask used to read/write Terrain Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_AttributesSize">
<property name="toolTip">
<string>The number of bytes used per metatile for metatile attributes</string>
<widget class="QLabel" name="label_Warning">
<property name="font">
<font>
<pointsize>12</pointsize>
<weight>75</weight>
<bold>true</bold>
</font>
</property>
<property name="text">
<string>Attributes size (in bytes)</string>
<string>&lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;span style=&quot; font-size:13pt; color:#d7000c;&quot;&gt;WARNING: &lt;/span&gt;&lt;span style=&quot; font-weight:400;&quot;&gt;The settings from this point below require project changes to function properly. Do not modify these settings without the necessary changes. &lt;/span&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_TerrainTypeMask">
<property name="text">
<string>Terrain Type mask</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="NoScrollComboBox" name="comboBox_AttributesSize">
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>15</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_BehaviorMask">
<property name="text">
<string>Behavior mask</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="NoScrollSpinBox" name="spinBox_BehaviorMask">
<property name="toolTip">
<string>The mask used to read/write Metatile Behavior from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="checkBox_OutputCallback">
<property name="toolTip">
<string>Whether the C data outputted for new tilesets will include the &quot;callback&quot; field</string>
</property>
<property name="text">
<string>Output 'callback' field</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QCheckBox" name="checkBox_OutputIsCompressed">
<property name="toolTip">
<string>Whether the C data outputted for new tilesets will include the &quot;isCompressed&quot; field</string>
</property>
<property name="text">
<string>Output 'isCompressed' field</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="NoScrollSpinBox" name="spinBox_EncounterTypeMask">
<property name="toolTip">
<string>The mask used to read/write Encounter Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_EncounterTypeMask">
<property name="text">
<string>Encounter Type mask</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_LayerTypeMask">
<property name="text">
<string>Layer Type mask</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="NoScrollSpinBox" name="spinBox_LayerTypeMask">
<property name="toolTip">
<string>The mask used to read/write Layer Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_ProjectPaths">
<property name="minimumSize">
<size>
<width>0</width>
<height>320</height>
</size>
</property>
<property name="title">
<string>Path Overrides</string>
</property>
<layout class="QHBoxLayout" name="horizontalLayout">
<property name="spacing">
<number>1</number>
</property>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QScrollArea" name="scrollArea_ProjectPaths">
<property name="frameShape">
<enum>QFrame::NoFrame</enum>
</property>
<property name="frameShadow">
<enum>QFrame::Plain</enum>
</property>
<property name="widgetResizable">
<property name="wordWrap">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaContents_ProjectPaths">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>507</width>
<height>295</height>
</rect>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_BaseGameVersion" native="true">
<layout class="QHBoxLayout" name="horizontalLayout_2">
<item>
<widget class="QLabel" name="label_BaseGameVersion">
<property name="text">
<string>Base game version</string>
</property>
</widget>
</item>
<item>
<widget class="NoScrollComboBox" name="comboBox_BaseGameVersion">
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
<item>
<spacer name="horizontalSpacer_6">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_TilesetsMetatiles">
<property name="title">
<string>Tilesets / Metatiles</string>
</property>
<layout class="QGridLayout" name="gridLayout_2">
<item row="8" column="0">
<spacer name="verticalSpacer_2">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>10</height>
</size>
</property>
</spacer>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableTripleLayerMetatiles">
<property name="text">
<string>Enable Triple Layer Metatiles</string>
</property>
</widget>
</item>
<item row="7" column="1">
<widget class="NoScrollSpinBox" name="spinBox_TerrainTypeMask">
<property name="toolTip">
<string>The mask used to read/write Terrain Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QLabel" name="label_AttributesSize">
<property name="toolTip">
<string>The number of bytes used per metatile for metatile attributes</string>
</property>
<property name="text">
<string>Attributes size (in bytes)</string>
</property>
</widget>
</item>
<item row="7" column="0">
<widget class="QLabel" name="label_TerrainTypeMask">
<property name="text">
<string>Terrain Type mask</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="NoScrollComboBox" name="comboBox_AttributesSize">
<property name="editable">
<bool>false</bool>
</property>
</widget>
</item>
<item row="1" column="0">
<spacer name="verticalSpacer">
<property name="orientation">
<enum>Qt::Vertical</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>20</width>
<height>15</height>
</size>
</property>
</spacer>
</item>
<item row="3" column="0">
<widget class="QLabel" name="label_BehaviorMask">
<property name="text">
<string>Behavior mask</string>
</property>
</widget>
</item>
<item row="3" column="1">
<widget class="NoScrollSpinBox" name="spinBox_BehaviorMask">
<property name="toolTip">
<string>The mask used to read/write Metatile Behavior from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="10" column="0">
<widget class="QCheckBox" name="checkBox_OutputCallback">
<property name="toolTip">
<string>Whether the C data outputted for new tilesets will include the &quot;callback&quot; field</string>
</property>
<property name="text">
<string>Output 'callback' field</string>
</property>
</widget>
</item>
<item row="11" column="0">
<widget class="QCheckBox" name="checkBox_OutputIsCompressed">
<property name="toolTip">
<string>Whether the C data outputted for new tilesets will include the &quot;isCompressed&quot; field</string>
</property>
<property name="text">
<string>Output 'isCompressed' field</string>
</property>
</widget>
</item>
<item row="5" column="1">
<widget class="NoScrollSpinBox" name="spinBox_EncounterTypeMask">
<property name="toolTip">
<string>The mask used to read/write Encounter Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
<item row="5" column="0">
<widget class="QLabel" name="label_EncounterTypeMask">
<property name="text">
<string>Encounter Type mask</string>
</property>
</widget>
</item>
<item row="4" column="0">
<widget class="QLabel" name="label_LayerTypeMask">
<property name="text">
<string>Layer Type mask</string>
</property>
</widget>
</item>
<item row="4" column="1">
<widget class="NoScrollSpinBox" name="spinBox_LayerTypeMask">
<property name="toolTip">
<string>The mask used to read/write Layer Type from the metatile's attributes data. If 0, this attribute is disabled.</string>
</property>
<property name="prefix">
<string>0x</string>
</property>
<property name="displayIntegerBase">
<number>16</number>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QWidget" name="widget_ProjectPaths" native="true">
<layout class="QVBoxLayout" name="verticalLayout_6">
<property name="spacing">
<number>2</number>
</property>
<layout class="QFormLayout" name="layout_ProjectPaths"/>
</widget>
<property name="leftMargin">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>0</number>
</property>
<property name="bottomMargin">
<number>0</number>
</property>
<item>
<widget class="QLabel" name="label_ProjectFiles">
<property name="text">
<string> &lt;html&gt;&lt;head/&gt;&lt;body&gt;&lt;p&gt;&lt;a href=&quot;https://huderlem.github.io/porymap/manual/project-files.html&quot;&gt;&lt;span style=&quot; text-decoration: underline;&quot;&gt;Project Files&lt;/span&gt;&lt;/a&gt;&lt;/p&gt;&lt;/body&gt;&lt;/html&gt;</string>
</property>
<property name="textFormat">
<enum>Qt::RichText</enum>
</property>
<property name="alignment">
<set>Qt::AlignBottom|Qt::AlignLeading|Qt::AlignLeft</set>
</property>
<property name="openExternalLinks">
<bool>true</bool>
</property>
</widget>
</item>
<item>
<widget class="QScrollArea" name="scrollArea_ProjectPaths">
<property name="minimumSize">
<size>
<width>0</width>
<height>320</height>
</size>
</property>
<property name="lineWidth">
<number>2</number>
</property>
<property name="widgetResizable">
<bool>true</bool>
</property>
<widget class="QWidget" name="scrollAreaContents_ProjectPaths">
<property name="geometry">
<rect>
<x>0</x>
<y>0</y>
<width>533</width>
<height>318</height>
</rect>
</property>
<layout class="QFormLayout" name="layout_ProjectPaths">
<property name="verticalSpacing">
<number>0</number>
</property>
<property name="topMargin">
<number>0</number>
</property>
<property name="rightMargin">
<number>4</number>
</property>
</layout>
</widget>
</widget>
</item>
</layout>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Events">
<property name="title">
<string>Events</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="1" column="1">
<widget class="QCheckBox" name="checkBox_EnableRequiresItemfinder">
<property name="text">
<string>Enable 'Requires Itemfinder' for Hidden Items</string>
<item>
<widget class="QGroupBox" name="groupBox_Events">
<property name="title">
<string>Events</string>
</property>
<layout class="QGridLayout" name="gridLayout_5">
<item row="2" column="0">
<widget class="QCheckBox" name="checkBox_EnableWeatherTriggers">
<property name="text">
<string>Enable Weather Triggers</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_EnableSecretBases">
<property name="text">
<string>Enable Secret Bases</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableCloneObjects">
<property name="text">
<string>Enable Clone Objects</string>
</property>
</widget>
</item>
<item row="1" column="1">
<widget class="QCheckBox" name="checkBox_EnableRequiresItemfinder">
<property name="text">
<string>Enable 'Requires Itemfinder' for Hidden Items</string>
</property>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_EnableQuantity">
<property name="text">
<string>Enable 'Quantity' for Hidden Items</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_EnableRespawn">
<property name="text">
<string>Enable 'Respawn Map/NPC' for Heal Locations</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_EnableQuantity">
<property name="text">
<string>Enable 'Quantity' for Hidden Items</string>
<item>
<widget class="QGroupBox" name="groupBox_Maps">
<property name="title">
<string>Maps</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_EnableAllowFlags">
<property name="toolTip">
<string>Whether &quot;Allow Running&quot;, &quot;Allow Biking&quot; and &quot;Allow Dig &amp; Escape Rope&quot; are default options for Map Headers</string>
</property>
<property name="text">
<string>Enable 'Allow Running/Biking/Escaping'</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableFloorNumber">
<property name="toolTip">
<string>Whether &quot;Floor Number&quot; is a default option for Map Headers</string>
</property>
<property name="text">
<string>Enable 'Floor Number'</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_EnableCustomBorderSize">
<property name="toolTip">
<string>Whether the dimensions of the border can be changed. If not set, all borders are 2x2</string>
</property>
<property name="text">
<string>Enable Custom Border Size</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_2">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_EnableSecretBases">
<property name="text">
<string>Enable Secret Bases</string>
</property>
</widget>
</item>
<item row="2" column="0">
<widget class="QCheckBox" name="checkBox_EnableWeatherTriggers">
<property name="text">
<string>Enable Weather Triggers</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableCloneObjects">
<property name="text">
<string>Enable Clone Objects</string>
</property>
</widget>
</item>
<item row="2" column="1">
<widget class="QCheckBox" name="checkBox_EnableRespawn">
<property name="text">
<string>Enable 'Respawn Map/NPC' for Heal Locations</string>
</property>
</widget>
</item>
</layout>
</widget>
</item>
<item>
<widget class="QGroupBox" name="groupBox_Maps">
<property name="title">
<string>Maps</string>
</property>
<layout class="QGridLayout" name="gridLayout">
<item row="0" column="1">
<widget class="QCheckBox" name="checkBox_EnableAllowFlags">
<property name="toolTip">
<string>Whether &quot;Allow Running&quot;, &quot;Allow Biking&quot; and &quot;Allow Dig &amp; Escape Rope&quot; are default options for Map Headers</string>
</property>
<property name="text">
<string>Enable 'Allow Running/Biking/Escaping'</string>
</property>
</widget>
</item>
<item row="0" column="0">
<widget class="QCheckBox" name="checkBox_EnableFloorNumber">
<property name="toolTip">
<string>Whether &quot;Floor Number&quot; is a default option for Map Headers</string>
</property>
<property name="text">
<string>Enable 'Floor Number'</string>
</property>
</widget>
</item>
<item row="1" column="0">
<widget class="QCheckBox" name="checkBox_EnableCustomBorderSize">
<property name="toolTip">
<string>Whether the dimensions of the border can be changed. If not set, all borders are 2x2</string>
</property>
<property name="text">
<string>Enable Custom Border Size</string>
</property>
</widget>
</item>
<item row="0" column="2">
<spacer name="horizontalSpacer_3">
<property name="orientation">
<enum>Qt::Horizontal</enum>
</property>
<property name="sizeHint" stdset="0">
<size>
<width>40</width>
<height>20</height>
</size>
</property>
</spacer>
</item>
</layout>
</widget>
</item>

View file

@ -11,8 +11,6 @@
Editor for the settings in a user's porymap.project.cfg file (and 'use_encounter_json' in porymap.user.cfg).
*/
// TODO: Better red outline around warning section
ProjectSettingsEditor::ProjectSettingsEditor(QWidget *parent, Project *project) :
QMainWindow(parent),
ui(new Ui::ProjectSettingsEditor),
@ -78,14 +76,12 @@ void ProjectSettingsEditor::initUi() {
ui->spinBox_TerrainTypeMask->setMaximum(INT_MAX);
}
// TODO: Reduce vertical space between entries
// TODO: Fix vertical misalignment between label and edit area
// TODO: Add description / manual link at top?
void ProjectSettingsEditor::createProjectPathsTable() {
auto pathPairs = ProjectConfig::defaultPaths.values();
for (auto pathPair : pathPairs) {
// Name of the path
auto name = new QLabel();
name->setAlignment(Qt::AlignBottom);
name->setText(pathPair.first);
// Editable area of the path
@ -99,11 +95,11 @@ void ProjectSettingsEditor::createProjectPathsTable() {
//connect(button, &QAbstractButton::clicked, this, &ProjectSettingsEditor::);
// Add to list
auto editFrame = new QFrame();
auto layout = new QHBoxLayout(editFrame);
auto editArea = new QWidget();
auto layout = new QHBoxLayout(editArea);
layout->addWidget(path);
layout->addWidget(button);
ui->layout_ProjectPaths->addRow(name, editFrame);
ui->layout_ProjectPaths->addRow(name, editArea);
}
}