Add undo for material creation
This commit is contained in:
+59
-2
@@ -8,6 +8,7 @@ import arm.ui.UINodes;
|
||||
import arm.ui.UIToolbar;
|
||||
import arm.sys.Path;
|
||||
import arm.data.LayerSlot;
|
||||
import arm.data.MaterialSlot;
|
||||
import arm.node.MakeMaterial;
|
||||
|
||||
class History {
|
||||
@@ -169,6 +170,24 @@ class History {
|
||||
else if (step.name == tr("Edit Nodes")) {
|
||||
swapCanvas(step);
|
||||
}
|
||||
else if (step.name == tr("New Material")) {
|
||||
Context.material = Project.materials[step.material];
|
||||
step.canvas = Context.material.canvas;
|
||||
Context.material.delete();
|
||||
}
|
||||
else if (step.name == tr("Delete Material")) {
|
||||
Context.material = new MaterialSlot(Project.materials[0].data);
|
||||
Project.materials.insert(step.material, Context.material);
|
||||
Context.material.canvas = step.canvas;
|
||||
UINodes.inst.canvasChanged();
|
||||
@:privateAccess UINodes.inst.getNodes().handle = new zui.Zui.Handle();
|
||||
UINodes.inst.hwnd.redraws = 2;
|
||||
}
|
||||
else if (step.name == tr("Duplicate Material")) {
|
||||
Context.material = Project.materials[step.material];
|
||||
step.canvas = Context.material.canvas;
|
||||
Context.material.delete();
|
||||
}
|
||||
else { // Paint operation
|
||||
undoI = undoI - 1 < 0 ? Config.raw.undo_steps - 1 : undoI - 1;
|
||||
var lay = undoLayers[undoI];
|
||||
@@ -180,6 +199,7 @@ class History {
|
||||
undos--;
|
||||
redos++;
|
||||
UISidebar.inst.hwnd0.redraws = 2;
|
||||
UISidebar.inst.hwnd1.redraws = 2;
|
||||
Context.ddirty = 2;
|
||||
if (UIView2D.inst.show) UIView2D.inst.hwnd.redraws = 2;
|
||||
}
|
||||
@@ -294,6 +314,27 @@ class History {
|
||||
else if (step.name == tr("Edit Nodes")) {
|
||||
swapCanvas(step);
|
||||
}
|
||||
else if (step.name == tr("New Material")) {
|
||||
Context.material = new MaterialSlot(Project.materials[0].data);
|
||||
Project.materials.insert(step.material, Context.material);
|
||||
Context.material.canvas = step.canvas;
|
||||
UINodes.inst.canvasChanged();
|
||||
@:privateAccess UINodes.inst.getNodes().handle = new zui.Zui.Handle();
|
||||
UINodes.inst.hwnd.redraws = 2;
|
||||
}
|
||||
else if (step.name == tr("Delete Material")) {
|
||||
Context.material = Project.materials[step.material];
|
||||
step.canvas = Context.material.canvas;
|
||||
Context.material.delete();
|
||||
}
|
||||
else if (step.name == tr("Duplicate Material")) {
|
||||
Context.material = new MaterialSlot(Project.materials[0].data);
|
||||
Project.materials.insert(step.material, Context.material);
|
||||
Context.material.canvas = step.canvas;
|
||||
UINodes.inst.canvasChanged();
|
||||
@:privateAccess UINodes.inst.getNodes().handle = new zui.Zui.Handle();
|
||||
UINodes.inst.hwnd.redraws = 2;
|
||||
}
|
||||
else { // Paint operation
|
||||
var lay = undoLayers[undoI];
|
||||
Context.selectPaintObject(Project.paintObjects[step.object]);
|
||||
@@ -305,6 +346,7 @@ class History {
|
||||
undos++;
|
||||
redos--;
|
||||
UISidebar.inst.hwnd0.redraws = 2;
|
||||
UISidebar.inst.hwnd1.redraws = 2;
|
||||
Context.ddirty = 2;
|
||||
if (UIView2D.inst.show) UIView2D.inst.hwnd.redraws = 2;
|
||||
}
|
||||
@@ -410,8 +452,23 @@ class History {
|
||||
push(tr("Layer Blending"));
|
||||
}
|
||||
|
||||
// public static function newMaterial() {}
|
||||
// public static function deleteMaterial() {}
|
||||
public static function newMaterial() {
|
||||
var step = push(tr("New Material"));
|
||||
step.canvas_type = 0;
|
||||
step.canvas = haxe.Json.parse(haxe.Json.stringify(Context.material.canvas));
|
||||
}
|
||||
|
||||
public static function deleteMaterial() {
|
||||
var step = push(tr("Delete Material"));
|
||||
step.canvas_type = 0;
|
||||
step.canvas = haxe.Json.parse(haxe.Json.stringify(Context.material.canvas));
|
||||
}
|
||||
|
||||
public static function duplicateMaterial() {
|
||||
var step = push(tr("Duplicate Material"));
|
||||
step.canvas_type = 0;
|
||||
step.canvas = haxe.Json.parse(haxe.Json.stringify(Context.material.canvas));
|
||||
}
|
||||
|
||||
public static function editNodes(canvas: TNodeCanvas, canvas_type: Int, canvas_group: Null<Int> = null) {
|
||||
var step = push(tr("Edit Nodes"));
|
||||
|
||||
@@ -58,4 +58,13 @@ class MaterialSlot {
|
||||
}
|
||||
App.notifyOnNextFrame(_next);
|
||||
}
|
||||
|
||||
public function delete() {
|
||||
unload();
|
||||
var mpos = Project.materials.indexOf(this);
|
||||
Project.materials.remove(this);
|
||||
if (Project.materials.length > 0) {
|
||||
Context.setMaterial(Project.materials[mpos > 0 ? mpos - 1 : 0]);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
@@ -393,6 +393,7 @@ class ImportArm {
|
||||
Context.material = new MaterialSlot(m0, c);
|
||||
Project.materials.push(Context.material);
|
||||
imported.push(Context.material);
|
||||
History.newMaterial();
|
||||
}
|
||||
|
||||
if (project.material_groups != null) {
|
||||
|
||||
@@ -624,6 +624,7 @@ class ImportBlend {
|
||||
link = link.get("next");
|
||||
if (last.block == link.block) break;
|
||||
}
|
||||
History.newMaterial();
|
||||
}
|
||||
|
||||
function _init() {
|
||||
|
||||
@@ -113,6 +113,7 @@ class ImportFolder {
|
||||
MakeMaterial.parsePaintMaterial();
|
||||
RenderUtil.makeMaterialPreview();
|
||||
UISidebar.inst.hwnd1.redraws = 2;
|
||||
History.newMaterial();
|
||||
}
|
||||
|
||||
static function placeImageNode(nodes: Nodes, canvas: TNodeCanvas, asset: String, ny: Int, to_id: Int, to_socket: Int) {
|
||||
|
||||
@@ -33,6 +33,7 @@ class TabMaterials {
|
||||
materials.push(Context.material);
|
||||
updateMaterial();
|
||||
ui.g.begin(false);
|
||||
History.newMaterial();
|
||||
}
|
||||
|
||||
if (ui.button(tr("Import"))) {
|
||||
@@ -136,11 +137,13 @@ class TabMaterials {
|
||||
var cloned = Json.parse(Json.stringify(materials[i].canvas));
|
||||
Context.material.canvas = cloned;
|
||||
updateMaterial();
|
||||
History.duplicateMaterial();
|
||||
}
|
||||
iron.App.notifyOnInit(_init);
|
||||
}
|
||||
|
||||
if (materials.length > 1 && ui.button(tr("Delete"), Left)) {
|
||||
History.deleteMaterial();
|
||||
selectMaterial(i == 0 ? 1 : 0);
|
||||
materials.splice(i, 1);
|
||||
UISidebar.inst.hwnd1.redraws = 2;
|
||||
|
||||
Reference in New Issue
Block a user