Skip to content

Commit

Permalink
#5532: Material Editor can display vertex parameters in a list
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Feb 28, 2021
1 parent 87ee8bf commit 0b1e67a
Show file tree
Hide file tree
Showing 4 changed files with 109 additions and 43 deletions.
81 changes: 42 additions & 39 deletions install/ui/materialeditor.fbp
Expand Up @@ -16520,9 +16520,9 @@
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxFlexGridSizer" expanded="0">
<property name="cols">2</property>
<property name="cols">4</property>
<property name="flexible_direction">wxBOTH</property>
<property name="growablecols">1</property>
<property name="growablecols">1,3</property>
<property name="growablerows"></property>
<property name="hgap">12</property>
<property name="minimum_size"></property>
Expand Down Expand Up @@ -16785,61 +16785,64 @@
</object>
<object class="sizeritem" expanded="1">
<property name="border">6</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="flag">wxEXPAND | wxALL</property>
<property name="proportion">1</property>
<object class="wxDataViewListCtrl" expanded="1">
<object class="wxPanel" expanded="1">
<property name="BottomDockable">1</property>
<property name="LeftDockable">1</property>
<property name="RightDockable">1</property>
<property name="TopDockable">1</property>
<property name="aui_layer"></property>
<property name="aui_name"></property>
<property name="aui_position"></property>
<property name="aui_row"></property>
<property name="best_size"></property>
<property name="bg"></property>
<property name="caption"></property>
<property name="caption_visible">1</property>
<property name="center_pane">0</property>
<property name="close_button">1</property>
<property name="context_help"></property>
<property name="context_menu">1</property>
<property name="default_pane">0</property>
<property name="dock">Dock</property>
<property name="dock_fixed">0</property>
<property name="docking">Left</property>
<property name="enabled">1</property>
<property name="fg"></property>
<property name="floatable">1</property>
<property name="font"></property>
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_ANY</property>
<property name="max_size"></property>
<property name="maximize_button">0</property>
<property name="maximum_size"></property>
<property name="min_size"></property>
<property name="minimize_button">0</property>
<property name="minimum_size"></property>
<property name="name">m_dataViewListCtrl1</property>
<property name="moveable">1</property>
<property name="name">MaterialStageProgramParameters</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="show">1</property>
<property name="size"></property>
<property name="style"></property>
<property name="subclass">; ; forward_declare</property>
<property name="toolbar_pane">0</property>
<property name="tooltip"></property>
<property name="window_extra_style"></property>
<property name="window_name"></property>
<property name="window_style"></property>
<object class="dataViewListColumn" expanded="1">
<property name="align">wxALIGN_LEFT</property>
<property name="ellipsize"></property>
<property name="flags">wxDATAVIEW_COL_RESIZABLE</property>
<property name="label">Type</property>
<property name="mode">wxDATAVIEW_CELL_INERT</property>
<property name="name">TypeColumn</property>
<property name="permission">protected</property>
<property name="type">Text</property>
<property name="width">-1</property>
</object>
<object class="dataViewListColumn" expanded="1">
<property name="align">wxALIGN_LEFT</property>
<property name="ellipsize"></property>
<property name="flags">wxDATAVIEW_COL_RESIZABLE</property>
<property name="label">Index</property>
<property name="mode">wxDATAVIEW_CELL_INERT</property>
<property name="name">IndexColumn</property>
<property name="permission">protected</property>
<property name="type">Text</property>
<property name="width">-1</property>
</object>
<object class="dataViewListColumn" expanded="1">
<property name="align">wxALIGN_LEFT</property>
<property name="ellipsize"></property>
<property name="flags">wxDATAVIEW_COL_RESIZABLE</property>
<property name="label">Expression</property>
<property name="mode">wxDATAVIEW_CELL_INERT</property>
<property name="name">m_dataViewListColumn3</property>
<property name="permission">protected</property>
<property name="type">Text</property>
<property name="width">-1</property>
<property name="window_style">wxTAB_TRAVERSAL</property>
<object class="wxBoxSizer" expanded="1">
<property name="minimum_size"></property>
<property name="name">bSizer80</property>
<property name="orient">wxVERTICAL</property>
<property name="permission">none</property>
</object>
</object>
</object>
Expand Down
13 changes: 9 additions & 4 deletions install/ui/materialeditor.xrc
Expand Up @@ -2847,10 +2847,10 @@
<border>6</border>
<object class="wxFlexGridSizer">
<rows>7</rows>
<cols>2</cols>
<cols>4</cols>
<vgap>6</vgap>
<hgap>12</hgap>
<growablecols>1</growablecols>
<growablecols>1,3</growablecols>
<growablerows></growablerows>
<object class="sizeritem">
<option>0</option>
Expand Down Expand Up @@ -2890,9 +2890,14 @@
</object>
<object class="sizeritem">
<option>1</option>
<flag>wxALL|wxEXPAND</flag>
<flag>wxEXPAND | wxALL</flag>
<border>6</border>
<object class="unknown" name="m_dataViewListCtrl1" />
<object class="wxPanel" name="MaterialStageProgramParameters">
<style>wxTAB_TRAVERSAL</style>
<object class="wxBoxSizer">
<orient>wxVERTICAL</orient>
</object>
</object>
</object>
<object class="sizeritem">
<option>0</option>
Expand Down
41 changes: 41 additions & 0 deletions radiant/ui/materials/MaterialEditor.cpp
Expand Up @@ -9,6 +9,7 @@
#include <wx/collpane.h>
#include <wx/spinctrl.h>
#include <wx/combo.h>
#include <wx/dataview.h>

#include "wxutil/SourceView.h"
#include "fmt/format.h"
Expand Down Expand Up @@ -431,6 +432,19 @@ void MaterialEditor::setupMaterialStageProperties()
[=](const ShaderLayerPtr& layer) { return layer->getColourExpression(ShaderLayer::COMP_BLUE); }));
_stageBindings.emplace(std::make_shared<ExpressionBinding<ShaderLayerPtr>>(getControl<wxTextCtrl>("MaterialStageAlpha"),
[=](const ShaderLayerPtr& layer) { return layer->getColourExpression(ShaderLayer::COMP_ALPHA); }));

auto parameterPanel = getControl<wxPanel>("MaterialStageProgramParameters");
_stageProgramParameters = wxutil::TreeModel::Ptr(new wxutil::TreeModel(_stageProgramColumns, true));

auto paramsView = wxutil::TreeView::CreateWithModel(parameterPanel, _stageProgramParameters.get(), wxDV_NO_HEADER);
paramsView->AppendTextColumn("Type", _stageProgramColumns.type.getColumnIndex(),
wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT, wxDATAVIEW_COL_SORTABLE);
paramsView->AppendTextColumn("Index", _stageProgramColumns.index.getColumnIndex(),
wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT, wxDATAVIEW_COL_SORTABLE);
paramsView->AppendTextColumn("Expression", _stageProgramColumns.expression.getColumnIndex(),
wxDATAVIEW_CELL_INERT, wxCOL_WIDTH_AUTOSIZE, wxALIGN_NOT, wxDATAVIEW_COL_SORTABLE);

parameterPanel->GetSizer()->Add(paramsView, 1, wxEXPAND);
}

void MaterialEditor::_onTreeViewSelectionChanged(wxDataViewEvent& ev)
Expand Down Expand Up @@ -943,6 +957,32 @@ void MaterialEditor::updateStageControls()

getControl<wxTextCtrl>("MaterialStageVertexProgram")->SetValue(selectedStage->getVertexProgram());
getControl<wxTextCtrl>("MaterialStageFragmentProgram")->SetValue(selectedStage->getFragmentProgram());

_stageProgramParameters->Clear();

for (int i = 0; i < selectedStage->getNumVertexParms(); ++i)
{
const auto& parm = selectedStage->getVertexParm(i);

if (parm.index == -1) continue; // undefined param

auto row = _stageProgramParameters->AddItem();

row[_stageProgramColumns.type] = "vertexParm";
row[_stageProgramColumns.index] = string::to_string(parm.index);

std::string expression;

for (int expr = 0; parm.expressions[expr] && expr < 4; ++expr)
{
expression += expression.empty() ? "" : " ";
expression += parm.expressions[expr]->getExpressionString();
}

row[_stageProgramColumns.expression] = expression;

row.SendItemAdded();
}
}
else
{
Expand All @@ -952,6 +992,7 @@ void MaterialEditor::updateStageControls()

getControl<wxTextCtrl>("MaterialStageVertexProgram")->SetValue("");
getControl<wxTextCtrl>("MaterialStageFragmentProgram")->SetValue("");
_stageProgramParameters->Clear();
}
}

Expand Down
17 changes: 17 additions & 0 deletions radiant/ui/materials/MaterialEditor.h
Expand Up @@ -38,6 +38,23 @@ class MaterialEditor :
std::set<std::shared_ptr<Binding<ShaderLayerPtr>>> _stageBindings;
std::map<Material::DeformType, wxPanel*> _deformPanels;

struct StageProgramParmsColumns :
public wxutil::TreeModel::ColumnRecord
{
StageProgramParmsColumns() :
type(add(wxutil::TreeModel::Column::String)),
index(add(wxutil::TreeModel::Column::String)),
expression(add(wxutil::TreeModel::Column::String))
{}

wxutil::TreeModel::Column type;
wxutil::TreeModel::Column index;
wxutil::TreeModel::Column expression;
};

StageProgramParmsColumns _stageProgramColumns;
wxutil::TreeModel::Ptr _stageProgramParameters;

private:
MaterialEditor();

Expand Down

0 comments on commit 0b1e67a

Please sign in to comment.