diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas
index e5389bd8ad9171f61439cb5d23e0e246b89a963f..d40610abd027e358c38bd3916a6ba3f53c979e57 100644 (file)
--- a/src/editor/f_main.pas
+++ b/src/editor/f_main.pas
end;
UndoBuffer[i, ii].AddID := ID;
-
MainForm.miUndo.Enabled := UndoBuffer <> nil;
end;
+procedure DiscardUndoBuffer();
+var
+ i, k: Integer;
+begin
+ for i := 0 to High(UndoBuffer) do
+ for k := 0 to High(UndoBuffer[i]) do
+ with UndoBuffer[i][k] do
+ if UndoType = UNDO_DELETE_PANEL then
+ Dispose(Panel);
+
+ UndoBuffer := nil;
+end;
+
procedure FullClear();
begin
RemoveSelectFromObjects();
ClearMap();
LoadSky(gMapInfo.SkyName);
- UndoBuffer := nil;
+ DiscardUndoBuffer();
slInvalidTextures.Clear();
MapCheckForm.lbErrorList.Clear();
MapCheckForm.mErrorDescription.Clear();
procedure TMainForm.miRecentFileExecute (Sender: TObject);
var
s, fn: AnsiString;
+ n: LongInt;
begin
- s := RecentFiles[(Sender as TMenuItem).Tag];
+ n := (Sender as TMenuItem).Tag;
+ s := RecentFiles[n];
fn := g_ExtractWadName(s);
if FileExists(fn) then
OpenMap(fn, g_ExtractFilePathName(s))
else
begin
menu.Delete(i);
- MI.Destroy();
+ Application.ReleaseComponent(MI);
end;
end;
else
begin
item.ItemType := lbItemList.ItemIndex + ITEM_MEDKIT_SMALL;
- if item.ItemType >= ITEM_WEAPON_KASTET then
+ if item.ItemType >= ITEM_WEAPON_IRONFIST then
item.ItemType := item.ItemType + 2;
item.X := MousePos.X-MapOffset.X;
item.Y := MousePos.Y-MapOffset.Y;
config.SaveFile(CfgFileName);
config.Free();
- slInvalidTextures.Free;
+ slInvalidTextures.Free();
+ DiscardUndoBuffer();
end;
procedure TMainForm.FormDropFiles(Sender: TObject;
end;
// Удалить выделенные объекты:
- if (Key = VK_DELETE) and (SelectedObjects <> nil) and
- RenderPanel.Focused() then
+ if (Key = VK_DELETE) and (SelectedObjects <> nil) and RenderPanel.Focused() then
DeleteSelectedObjects();
// Снять выделение:
UNDO_DELETE_PANEL:
begin
AddPanel(Panel^);
- Panel := nil;
+ Dispose(Panel);
end;
UNDO_DELETE_ITEM: AddItem(Item);
UNDO_DELETE_AREA: AddArea(Area);
end;
SetLength(UndoBuffer, Length(UndoBuffer)-1);
-
RemoveSelectFromObjects();
-
miUndo.Enabled := UndoBuffer <> nil;
end;
if ShowModal() = mrOK then
begin
b := lbTypeSelect.ItemIndex + ITEM_MEDKIT_SMALL;
- if b >= ITEM_WEAPON_KASTET then
+ if b >= ITEM_WEAPON_IRONFIST then
b := b + 2;
Values[Key] := ItemToStr(b);
vleObjectPropertyApply(Sender);