Skip to content

Commit

Permalink
#5565: Highlight modified materials in the tree view.
Browse files Browse the repository at this point in the history
  • Loading branch information
codereader committed Mar 27, 2021
1 parent 6b4f50e commit e423935
Show file tree
Hide file tree
Showing 4 changed files with 75 additions and 4 deletions.
13 changes: 13 additions & 0 deletions libs/wxutil/dataview/TreeViewItemStyle.h
Expand Up @@ -22,6 +22,19 @@ class TreeViewItemStyle

return wxDataViewItemAttr();
}

static wxDataViewItemAttr Modified(bool isModified)
{
if (isModified)
{
wxDataViewItemAttr bold;
bold.SetBold(true);

return bold;
}

return wxDataViewItemAttr();
}
};

}
57 changes: 54 additions & 3 deletions radiant/ui/materials/editor/MaterialEditor.cpp
Expand Up @@ -20,6 +20,7 @@
#include "wxutil/SourceView.h"
#include "wxutil/dialog/MessageBox.h"
#include "wxutil/dataview/ResourceTreeViewToolbar.h"
#include "wxutil/dataview/TreeViewItemStyle.h"
#include "wxutil/Bitmap.h"
#include "fmt/format.h"
#include "string/join.h"
Expand Down Expand Up @@ -245,6 +246,9 @@ void MaterialEditor::setupMaterialTreeView()
panel->GetSizer()->Add(treeToolbar, 0, wxEXPAND | wxBOTTOM, 6);
panel->GetSizer()->Add(_treeView, 1, wxEXPAND);

auto newButton = getControl<wxButton>("MaterialEditorNewDefButton");
newButton->Bind(wxEVT_BUTTON, &MaterialEditor::_onNewMaterial, this);

auto saveButton = getControl<wxButton>("MaterialEditorSaveDefButton");
saveButton->Disable();
saveButton->Bind(wxEVT_BUTTON, &MaterialEditor::_onSaveMaterial, this);
Expand Down Expand Up @@ -1147,6 +1151,18 @@ void MaterialEditor::_onSaveMaterial(wxCommandEvent& ev)
// TODO
}

void MaterialEditor::_onNewMaterial(wxCommandEvent& ev)
{
if (!_material) return;

if (_material->isModified())
{

}

// TODO
}

void MaterialEditor::_onCopyMaterial(wxCommandEvent& ev)
{
if (!_material) return;
Expand Down Expand Up @@ -1251,8 +1267,10 @@ void MaterialEditor::_onStageListItemActivated(wxDataViewEvent& ev)
toggleSelectedStage();
}

void MaterialEditor::updateMaterialButtonSensitivity()
void MaterialEditor::updateMaterialControlSensitivity()
{
getControl<wxButton>("MaterialEditorNewDefButton")->Enable(!_material || !_material->isModified());

getControl<wxButton>("MaterialEditorSaveDefButton")->Enable(_material && _material->isModified() &&
GlobalMaterialManager().materialCanBeModified(_material->getName()));

Expand All @@ -1266,7 +1284,7 @@ void MaterialEditor::updateControlsFromMaterial()

_preview->setMaterial(_material);

updateMaterialButtonSensitivity();
updateMaterialControlSensitivity();
updateMaterialPropertiesFromMaterial();
updateStageListFromMaterial();
}
Expand Down Expand Up @@ -2109,9 +2127,42 @@ void MaterialEditor::_onSortRequestChanged(wxCommandEvent& ev)
onMaterialChanged();
}

void MaterialEditor::updateMaterialTreeItem()
{
if (!_material) return;

auto item = _treeView->GetTreeModel()->FindString(_material->getName(), _treeView->Columns().fullName);

if (!item.IsOk())
{
return;
}

bool isModified = _material->isModified();

wxutil::TreeModel::Row row(item, *_treeView->GetModel());
row[_treeView->Columns().iconAndName] = wxutil::TreeViewItemStyle::Modified(isModified);

wxDataViewIconText value = row[_treeView->Columns().iconAndName];

if (!isModified && value.GetText().EndsWith("*"))
{
value.SetText(value.GetText().RemoveLast(1));
row[_treeView->Columns().iconAndName] = wxVariant(value);
}
else if (isModified && !value.GetText().EndsWith("*"))
{
value.SetText(value.GetText() + "*");
row[_treeView->Columns().iconAndName] = wxVariant(value);
}

row.SendItemChanged();
}

void MaterialEditor::onMaterialChanged()
{
updateMaterialButtonSensitivity();
updateMaterialTreeItem();
updateMaterialControlSensitivity();
updateSourceView();
}

Expand Down
4 changes: 3 additions & 1 deletion radiant/ui/materials/editor/MaterialEditor.h
Expand Up @@ -142,15 +142,17 @@ class MaterialEditor :
void moveStagePosition(int direction);
void updateStageButtonSensitivity();
void updateSettingsNotebook();
void updateMaterialButtonSensitivity();
void updateMaterialControlSensitivity();
void updateSourceView();
void updateMaterialTreeItem();

bool isAllowedToChangeMaterial();
bool askUserAboutModifiedMaterial();
bool saveCurrentMaterial();
void revertCurrentMaterial();

void _onMaterialSelectionChanged(wxDataViewEvent& ev);
void _onNewMaterial(wxCommandEvent& ev);
void _onSaveMaterial(wxCommandEvent& ev);
void _onCopyMaterial(wxCommandEvent& ev);
void _onRevertMaterial(wxCommandEvent& ev);
Expand Down
5 changes: 5 additions & 0 deletions radiantcore/shaders/Doom3ShaderSystem.cpp
Expand Up @@ -207,6 +207,11 @@ bool Doom3ShaderSystem::materialCanBeModified(const std::string& name)
{
ensureDefsLoaded();

if (!_library->definitionExists(name))
{
return false;
}

const auto& def = _library->getDefinition(name);
return def.file.getIsPhysicalFile();
}
Expand Down

0 comments on commit e423935

Please sign in to comment.