diff --git a/src/editor/f_main.pas b/src/editor/f_main.pas
index d869c785749cd0497a217349a91f666e436713d1..53bf85da742cf26b936bb5276e2694763f6bc7ea 100644 (file)
--- a/src/editor/f_main.pas
+++ b/src/editor/f_main.pas
procedure FormKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
procedure FormResize(Sender: TObject);
procedure FormWindowStateChange(Sender: TObject);
+ procedure miRecentFileExecute(Sender: TObject);
procedure miMacRecentClearClick(Sender: TObject);
procedure miMacZoomClick(Sender: TObject);
procedure lbTextureListClick(Sender: TObject);
type
TUndoRec = record
- UndoType: Byte;
- case Byte of
+ case UndoType: Byte of
UNDO_DELETE_PANEL: (Panel: ^TPanel);
UNDO_DELETE_ITEM: (Item: TItem);
UNDO_DELETE_AREA: (Area: TArea);
end;
TCopyRec = record
- ObjectType: Byte;
ID: Cardinal;
- case Byte of
+ case ObjectType: Byte of
OBJECT_PANEL: (Panel: ^TPanel);
OBJECT_ITEM: (Item: TItem);
OBJECT_AREA: (Area: TArea);
//Закончились вспомогательные процедуры
//----------------------------------------
-type
- TRecentHandler = class
- private
- FForm: TMainForm;
- FPath: String;
- public
- constructor Create (form: TMainForm; path: String);
- procedure Execute (Sender: TObject);
- end;
-
-constructor TRecentHandler.Create (form: TMainForm; path: String);
-begin
- Assert(form <> nil);
- FForm := form;
- FPath := path;
-end;
-
-procedure TRecentHandler.Execute (Sender: TObject);
- var fn: AnsiString;
+procedure TMainForm.miRecentFileExecute (Sender: TObject);
+var
+ s, fn: AnsiString;
begin
- fn := g_ExtractWadName(FPath);
+ s := RecentFiles[(Sender as TMenuItem).Tag];
+ fn := g_ExtractWadName(s);
if FileExists(fn) then
- OpenMap(fn, g_ExtractFilePathName(FPath))
+ OpenMap(fn, g_ExtractFilePathName(s))
else
Application.MessageBox('', 'File not available anymore', MB_OK);
-// if Application.MessageBox(PChar(MsgMsgDelRecentPromt), PChar(MsgMsgDelRecent), MB_ICONQUESTION or MB_YESNO) = idYes then
+// if Application.MessageBox(PChar(MsgMsgDelRecentPrompt), PChar(MsgMsgDelRecent), MB_ICONQUESTION or MB_YESNO) = idYes then
// begin
// RecentFiles.Delete(n);
// RefreshRecentMenu();
end;
procedure TMainForm.RefillRecentMenu (menu: TMenuItem; start: Integer; fmt: AnsiString);
- var i: Integer; MI: TMenuItem; cb: TMethod; h: TRecentHandler; s: AnsiString;
+ var i: Integer; MI: TMenuItem; s: AnsiString;
begin
Assert(menu <> nil);
Assert(start >= 0);
Assert(start <= menu.Count);
- // clear all recent entries from menu
+ // clear all the recent entries from menu
i := start;
while i < menu.Count do
begin
MI := menu.Items[i];
- cb := TMethod(MI.OnClick);
- if cb.Code = @TRecentHandler.Execute then
+ if @MI.OnClick <> @TMainForm.miRecentFileExecute then
+ i += 1
+ else
begin
- // this is recent menu entry
- // remove it and free callback handler
- h := TRecentHandler(cb.Data);
menu.Delete(i);
- MI.Free();
- h.Free();
- end
- else
- Inc(i);
+ MI.Destroy();
+ end;
end;
// fill with a new ones
- for i := 0 to RecentFiles.Count - 1 do
+ for i := 0 to RecentFiles.Count-1 do
begin
- s := RecentFiles[i];
- h := TRecentHandler.Create(self, s);
MI := TMenuItem.Create(menu);
- MI.Caption := Format(fmt, [i + 1, g_ExtractWadNameNoPath(s), g_ExtractFilePathName(s)]);
- MI.OnClick := h.Execute;
- menu.Insert(start + i, MI);
+ s := RecentFiles[i];
+ MI.Caption := Format(fmt, [i+1, g_ExtractWadNameNoPath(s), g_ExtractFilePathName(s)]);
+ MI.OnClick := miRecentFileExecute;
+ MI.Tag := i;
+ menu.Insert(start + i, MI); // transfers ownership
end;
end;
begin
// Reconstruct Windows-like recent list
start := miMenuFile.IndexOf(miWinRecent);
- if start < 0 then start := miMenuFile.Count else start := start + 1;
+ if start < 0 then start := miMenuFile.Count else start += 1;
RefillRecentMenu(miMenuFile, start, '%0:d %1:s:%2:s');
miWinRecent.Enabled := False;
miWinRecent.Visible := RecentFiles.Count = 0;
procedure TMainForm.FormCloseQuery(Sender: TObject; var CanClose: Boolean);
begin
- CanClose := Application.MessageBox(PChar(MsgMsgExitPromt),
+ CanClose := Application.MessageBox(PChar(MsgMsgExitPrompt),
PChar(MsgMsgExit),
MB_ICONQUESTION or MB_YESNO or
MB_DEFBUTTON1) = idYes;
end
end;
- if Key = Ord('V') then
+ if Key = Ord('I') then
begin // Поворот монстров и областей:
if (SelectedObjects <> nil) then
begin
if OpenedMap = '' then
Exit;
- if Application.MessageBox(PChar(MsgMsgReopenMapPromt),
+ if Application.MessageBox(PChar(MsgMsgReopenMapPrompt),
PChar(MsgMenuFileReopen), MB_ICONQUESTION or MB_YESNO) <> idYes then
Exit;
if i = -1 then
Exit;
- if Application.MessageBox(PChar(Format(MsgMsgDelTexturePromt,
+ if Application.MessageBox(PChar(Format(MsgMsgDelTexturePrompt,
[SelectedTexture()])),
PChar(MsgMsgDelTexture),
MB_ICONQUESTION or MB_YESNO or
procedure TMainForm.aNewMapExecute(Sender: TObject);
begin
- if Application.MessageBox(PChar(MsgMsgClearMapPromt), PChar(MsgMsgClearMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then
+ if Application.MessageBox(PChar(MsgMsgClearMapPrompt), PChar(MsgMsgClearMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON1) = mrYes then
FullClear();
end;
QuickSortCopyBuffer(0, b);
end;
-// Ð\9fестановка ссылок триггеров:
+// Ð\9fостановка ссылок триггеров:
for a := 0 to Length(CopyBuffer)-1 do
if CopyBuffer[a].ObjectType = OBJECT_TRIGGER then
begin
if h > 0 then
begin
- xadj := -pmin.X - Floor((MapOffset.X - 32) / DotStep) * DotStep;
- yadj := -pmin.Y - Floor((MapOffset.Y - 32) / DotStep) * DotStep;
+ xadj := Floor((-pmin.X - MapOffset.X + 32) / DotStep) * DotStep;
+ yadj := Floor((-pmin.Y - MapOffset.Y + 32) / DotStep) * DotStep;
end
else
begin
Exit;
MapName := SelectMapForm.lbMapList.Items[SelectMapForm.lbMapList.ItemIndex];
- if Application.MessageBox(PChar(Format(MsgMsgDeleteMapPromt, [MapName, OpenDialog.FileName])), PChar(MsgMsgDeleteMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then
+ if Application.MessageBox(PChar(Format(MsgMsgDeleteMapPrompt, [MapName, OpenDialog.FileName])), PChar(MsgMsgDeleteMap), MB_ICONQUESTION or MB_YESNO or MB_DEFBUTTON2) <> mrYes then
Exit;
g_DeleteResource(FileName, '', MapName, res);
end;
Application.MessageBox(
- PChar(Format(MsgMsgMapDeletedPromt, [MapName])),
+ PChar(Format(MsgMsgMapDeletedPrompt, [MapName])),
PChar(MsgMsgMapDeleted),
MB_ICONINFORMATION or MB_OK or MB_DEFBUTTON1
);