Skip to content

Commit

Permalink
#5565: More insert/remove algorithm improvements. Rename buttons for …
Browse files Browse the repository at this point in the history
…clarity.
  • Loading branch information
codereader committed Mar 28, 2021
1 parent 9007cdc commit 0e8ea39
Show file tree
Hide file tree
Showing 4 changed files with 40 additions and 23 deletions.
14 changes: 7 additions & 7 deletions install/ui/materialeditor.fbp
Expand Up @@ -316,7 +316,7 @@
<property name="permission">none</property>
<object class="sizeritem" expanded="0">
<property name="border">0</property>
<property name="flag">wxALL</property>
<property name="flag">wxALL|wxEXPAND</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
Expand Down Expand Up @@ -351,7 +351,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_NEW</property>
<property name="label">New</property>
<property name="label">New Material</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
Expand Down Expand Up @@ -388,7 +388,7 @@
</object>
<object class="sizeritem" expanded="0">
<property name="border">6</property>
<property name="flag">wxTOP</property>
<property name="flag">wxEXPAND|wxTOP</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
Expand Down Expand Up @@ -423,7 +423,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_SAVE</property>
<property name="label">Save</property>
<property name="label">Save Material</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
Expand Down Expand Up @@ -460,7 +460,7 @@
</object>
<object class="sizeritem" expanded="0">
<property name="border">6</property>
<property name="flag">wxTOP</property>
<property name="flag">wxEXPAND|wxTOP</property>
<property name="proportion">0</property>
<object class="wxButton" expanded="0">
<property name="BottomDockable">1</property>
Expand Down Expand Up @@ -495,7 +495,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_COPY</property>
<property name="label">Copy</property>
<property name="label">Copy Material</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
Expand Down Expand Up @@ -567,7 +567,7 @@
<property name="gripper">0</property>
<property name="hidden">0</property>
<property name="id">wxID_COPY</property>
<property name="label">Revert</property>
<property name="label">Discard Changes</property>
<property name="margins"></property>
<property name="markup">0</property>
<property name="max_size"></property>
Expand Down
14 changes: 7 additions & 7 deletions install/ui/materialeditor.xrc
Expand Up @@ -55,32 +55,32 @@
<orient>wxVERTICAL</orient>
<object class="sizeritem">
<option>0</option>
<flag>wxALL</flag>
<flag>wxALL|wxEXPAND</flag>
<border>0</border>
<object class="wxButton" name="MaterialEditorNewDefButton">
<label>New</label>
<label>New Material</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxTOP</flag>
<flag>wxEXPAND|wxTOP</flag>
<border>6</border>
<object class="wxButton" name="MaterialEditorSaveDefButton">
<label>Save</label>
<label>Save Material</label>
<default>0</default>
<markup>0</markup>
<bitmap />
</object>
</object>
<object class="sizeritem">
<option>0</option>
<flag>wxTOP</flag>
<flag>wxEXPAND|wxTOP</flag>
<border>6</border>
<object class="wxButton" name="MaterialEditorCopyDefButton">
<label>Copy</label>
<label>Copy Material</label>
<default>0</default>
<markup>0</markup>
<bitmap />
Expand All @@ -91,7 +91,7 @@
<flag>wxTOP</flag>
<border>6</border>
<object class="wxButton" name="MaterialEditorRevertButton">
<label>Revert</label>
<label>Discard Changes</label>
<default>0</default>
<markup>0</markup>
<bitmap />
Expand Down
25 changes: 17 additions & 8 deletions radiant/ui/materials/MaterialPopulator.cpp
Expand Up @@ -209,10 +209,18 @@ void MaterialPopulator::AddSingleMaterial(const wxutil::TreeModel::Ptr& model, c
}
}

// Insert the material leaf
parentPath += !parentPath.empty() ? "/" : "";
auto row = functor.insertTexture(parentPath + parts.back(), parts.back(), parentItem);
row.SendItemAdded();
// Insert the material leaf (but don't insert dupes)
std::string itemPath = parentPath;
itemPath += !itemPath.empty() ? "/" : "";
itemPath += parts.back();

auto existingItem = model->FindString(itemPath, _columns.fullName, parentItem);

if (!existingItem.IsOk())
{
auto row = functor.insertTexture(itemPath, parts.back(), parentItem);
row.SendItemAdded();
}
}

void MaterialPopulator::RemoveSingleMaterial(const wxutil::TreeModel::Ptr& model, const std::string& materialName)
Expand All @@ -222,19 +230,20 @@ void MaterialPopulator::RemoveSingleMaterial(const wxutil::TreeModel::Ptr& model
// Walk up the parents to check if the removed material leaves any empty folders behind
auto item = model->FindString(normalisedName, _columns.fullName);

while (item.IsOk())
// Prevent removal of items with children
wxDataViewItemArray children;
while (item.IsOk() && model->GetChildren(item, children) == 0)
{
auto parentItem = model->GetParent(item);

model->RemoveItem(item);

wxDataViewItemArray children;
if (!parentItem.IsOk() || model->GetChildren(parentItem, children) > 0)
if (!parentItem.IsOk())
{
break;
}

item = parentItem; // remove the parent too
item = parentItem; // remove the parent too (if it is empty)
}
}

Expand Down
10 changes: 9 additions & 1 deletion radiant/ui/materials/editor/MaterialEditor.cpp
Expand Up @@ -2175,7 +2175,15 @@ void MaterialEditor::updateMaterialTreeItem()
bool isModified = _material->isModified();

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

if (!row[_treeView->Columns().isFolder].getBool())
{
row[_treeView->Columns().iconAndName] = wxutil::TreeViewItemStyle::Modified(isModified);
}
else
{
row[_treeView->Columns().iconAndName] = wxDataViewItemAttr();
}

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

Expand Down

0 comments on commit 0e8ea39

Please sign in to comment.