Skip to content

Commit

Permalink
#5532: Add utility mapping Material::SurfaceType <=> string
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Feb 19, 2021
1 parent 1c0f9a7 commit 195e303
Show file tree
Hide file tree
Showing 9 changed files with 123 additions and 91 deletions.
34 changes: 17 additions & 17 deletions install/ui/materialeditor.fbp
Expand Up @@ -167,7 +167,7 @@
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="0">
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer2</property>
<property name="orient">wxVERTICAL</property>
Expand Down Expand Up @@ -712,7 +712,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Description:</property>
<property name="label">Material:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
Expand All @@ -721,7 +721,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText57</property>
<property name="name">m_staticText571</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand All @@ -743,9 +743,9 @@
</object>
<object class="sizeritem" expanded="0">
<property name="border">0</property>
<property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0">
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxChoice" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
Expand All @@ -759,6 +759,7 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
Expand All @@ -776,19 +777,19 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">MaterialDescription</property>
<property name="name">MaterialType</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
Expand All @@ -799,7 +800,6 @@
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
Expand Down Expand Up @@ -837,7 +837,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="label">Material:</property>
<property name="label">Description:</property>
<property name="markup">0</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
Expand All @@ -846,7 +846,7 @@
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">m_staticText571</property>
<property name="name">m_staticText57</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
Expand All @@ -868,9 +868,9 @@
</object>
<object class="sizeritem" expanded="0">
<property name="border">0</property>
<property name="flag">wxALIGN_CENTER_VERTICAL</property>
<property name="proportion">0</property>
<object class="wxChoice" expanded="0">
<property name="flag">wxEXPAND|wxLEFT</property>
<property name="proportion">1</property>
<object class="wxTextCtrl" expanded="0">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
Expand All @@ -884,7 +884,6 @@
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="choices"></property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
Expand All @@ -902,19 +901,19 @@
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="maxlength"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="moveable">1</property>
<property name="name">MaterialType</property>
<property name="name">MaterialDescription</property>
<property name="pane_border">1</property>
<property name="pane_position"></property>
<property name="pane_size"></property>
<property name="permission">protected</property>
<property name="pin_button">1</property>
<property name="pos"></property>
<property name="resize">Resizable</property>
<property name="selection">0</property>
<property name="show">1</property>
<property name="size"></property>
<property name="style"></property>
Expand All @@ -925,6 +924,7 @@
<property name="validator_style">wxFILTER_NONE</property>
<property name="validator_type">wxDefaultValidator</property>
<property name="validator_variable"></property>
<property name="value"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
Expand Down
26 changes: 13 additions & 13 deletions install/ui/materialeditor.xrc
Expand Up @@ -127,35 +127,35 @@
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxStaticText" name="m_staticText57">
<label>Description:</label>
<object class="wxStaticText" name="m_staticText571">
<label>Material:</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxEXPAND|wxLEFT</flag>
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<border>0</border>
<object class="wxTextCtrl" name="MaterialDescription">
<value></value>
<object class="wxChoice" name="MaterialType">
<selection>0</selection>
<content />
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL|wxALL</flag>
<border>0</border>
<object class="wxStaticText" name="m_staticText571">
<label>Material:</label>
<object class="wxStaticText" name="m_staticText57">
<label>Description:</label>
<wrap>-1</wrap>
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxALIGN_CENTER_VERTICAL</flag>
<option>1</option>
<flag>wxEXPAND|wxLEFT</flag>
<border>0</border>
<object class="wxChoice" name="MaterialType">
<selection>0</selection>
<content />
<object class="wxTextCtrl" name="MaterialDescription">
<value></value>
</object>
</object>
</object>
Expand Down
41 changes: 41 additions & 0 deletions libs/materials/ParseLib.h
@@ -0,0 +1,41 @@
#pragma once

#include <map>
#include "ishaders.h"

namespace shaders
{

constexpr std::pair<const char*, Material::SurfaceType> SurfaceTypeMapping[]
{
{ "metal", Material::SURFTYPE_METAL },
{ "stone", Material::SURFTYPE_STONE },
{ "flesh", Material::SURFTYPE_FLESH },
{ "wood", Material::SURFTYPE_WOOD },
{ "cardboard", Material::SURFTYPE_CARDBOARD },
{ "liquid", Material::SURFTYPE_LIQUID },
{ "glass", Material::SURFTYPE_GLASS },
{ "plastic", Material::SURFTYPE_PLASTIC },
{ "ricochet", Material::SURFTYPE_RICOCHET },
{ "surftype10", Material::SURFTYPE_10 },
{ "surftype11", Material::SURFTYPE_11 },
{ "surftype12", Material::SURFTYPE_12 },
{ "surftype13", Material::SURFTYPE_13 },
{ "surftype14", Material::SURFTYPE_14 },
{ "surftype15", Material::SURFTYPE_15 }
};

inline std::string getStringForSurfaceType(Material::SurfaceType type)
{
for (const auto& pair : SurfaceTypeMapping)
{
if (type == pair.second)
{
return pair.first;
}
}

return std::string();
}

}
28 changes: 27 additions & 1 deletion radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -8,6 +8,7 @@
#include <wx/collpane.h>
#include "wxutil/SourceView.h"
#include "fmt/format.h"
#include "materials/ParseLib.h"

namespace ui
{
Expand Down Expand Up @@ -77,6 +78,7 @@ MaterialEditor::MaterialEditor() :
previewPanel->GetSizer()->Add(_preview->getWidget(), 1, wxEXPAND);
previewPanel->GetSizer()->Add(_sourceView, 1, wxEXPAND);

setupMaterialProperties();
setupMaterialStageView();

// Set the default size of the window
Expand Down Expand Up @@ -118,12 +120,24 @@ void MaterialEditor::_onClose(wxCommandEvent& ev)

void MaterialEditor::ShowDialog(const cmd::ArgumentList& args)
{
MaterialEditor* editor = new MaterialEditor;
auto* editor = new MaterialEditor;

editor->ShowModal();
editor->Destroy();
}

void MaterialEditor::setupMaterialProperties()
{
auto* typeDropdown = getControl<wxChoice>("MaterialType");

typeDropdown->AppendString(""); // empty string for undefined

for (const auto& pair : shaders::SurfaceTypeMapping)
{
typeDropdown->AppendString(pair.first);
}
}

void MaterialEditor::setupMaterialStageView()
{
// Stage view
Expand Down Expand Up @@ -165,6 +179,18 @@ void MaterialEditor::updateMaterialPropertiesFromMaterial()
{
getControl<wxTextCtrl>("MaterialDescription")->SetValue(_material->getDescription());

// Type dropdown
auto* materialTypeDropdown = getControl<wxChoice>("MaterialType");
if (_material->getSurfaceType() == Material::SURFTYPE_DEFAULT)
{
materialTypeDropdown->Select(0);
}
else
{
auto surfType = shaders::getStringForSurfaceType(_material->getSurfaceType());
materialTypeDropdown->Select(materialTypeDropdown->FindString(surfType));
}

// Surround the definition with curly braces, these are not included
auto definition = fmt::format("{0}\n{{{1}}}", _material->getName(), _material->getDefinition());
_sourceView->SetValue(definition);
Expand Down

0 comments on commit 195e303

Please sign in to comment.