- Added "select offset" button/functionality to frmLargeScaleCommand (fixes #56)

- Fixed frmFilter placement (fixes #57)
This commit is contained in:
Andreas Schneider 2009-12-21 19:07:07 +01:00
parent 8976774665
commit 3ffe710c31
3 changed files with 141 additions and 13 deletions

View File

@ -116,8 +116,8 @@ begin
upperLeft := frmMain.pcLeft.ClientToScreen(Point(frmMain.pcLeft.Width, 0)); upperLeft := frmMain.pcLeft.ClientToScreen(Point(frmMain.pcLeft.Width, 0));
lowerLeft := frmMain.pcLeft.ClientToScreen(Point(frmMain.pcLeft.Width, lowerLeft := frmMain.pcLeft.ClientToScreen(Point(frmMain.pcLeft.Width,
frmMain.pcLeft.Height)); frmMain.pcLeft.Height));
Left := upperLeft.x - 4; Left := upperLeft.x - 8;
Top := upperLeft.y - 4; Top := upperLeft.y - 8;
Height := lowerLeft.y - upperLeft.y; Height := lowerLeft.y - upperLeft.y;
SetWindowParent(Handle, frmMain.Handle); SetWindowParent(Handle, frmMain.Handle);

View File

@ -28,20 +28,20 @@ object frmLargeScaleCommand: TfrmLargeScaleCommand
Top = 0 Top = 0
Width = 468 Width = 468
Anchors = [akTop, akLeft, akRight, akBottom] Anchors = [akTop, akLeft, akRight, akBottom]
PageIndex = 0 PageIndex = 1
ShowTabs = False ShowTabs = False
TabOrder = 0 TabOrder = 0
object pgArea: TPage object pgArea: TPage
Caption = 'pgArea' Caption = 'pgArea'
ClientWidth = 462 ClientWidth = 462
ClientHeight = 343 ClientHeight = 316
object sbArea: TScrollBox object sbArea: TScrollBox
Left = 0 Left = 0
Height = 343 Height = 316
Top = 0 Top = 0
Width = 462 Width = 462
Align = alClient Align = alClient
ClientHeight = 341 ClientHeight = 314
ClientWidth = 460 ClientWidth = 460
TabOrder = 0 TabOrder = 0
object pbArea: TPaintBox object pbArea: TPaintBox
@ -58,7 +58,7 @@ object frmLargeScaleCommand: TfrmLargeScaleCommand
object pgCopyMove: TPage object pgCopyMove: TPage
Caption = 'Copy/Move' Caption = 'Copy/Move'
ClientWidth = 462 ClientWidth = 462
ClientHeight = 316 ClientHeight = 343
object rgCMAction: TRadioGroup object rgCMAction: TRadioGroup
AnchorSideLeft.Control = pgCopyMove AnchorSideLeft.Control = pgCopyMove
AnchorSideTop.Control = pgCopyMove AnchorSideTop.Control = pgCopyMove
@ -126,14 +126,15 @@ object frmLargeScaleCommand: TfrmLargeScaleCommand
AnchorSideLeft.Control = Label9 AnchorSideLeft.Control = Label9
AnchorSideLeft.Side = asrBottom AnchorSideLeft.Side = asrBottom
AnchorSideTop.Control = gbCMOffset AnchorSideTop.Control = gbCMOffset
AnchorSideRight.Control = gbCMOffset AnchorSideRight.Control = btnGrabOffset
AnchorSideRight.Side = asrBottom
Left = 27 Left = 27
Height = 19 Height = 19
Top = 8 Top = 8
Width = 82 Width = 62
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 8 BorderSpacing.Top = 4
BorderSpacing.Bottom = 4
BorderSpacing.Around = 4
TabOrder = 0 TabOrder = 0
end end
object seCMOffsetY: TSpinEdit object seCMOffsetY: TSpinEdit
@ -145,10 +146,66 @@ object frmLargeScaleCommand: TfrmLargeScaleCommand
Left = 27 Left = 27
Height = 19 Height = 19
Top = 35 Top = 35
Width = 82 Width = 62
Anchors = [akTop, akLeft, akRight] Anchors = [akTop, akLeft, akRight]
BorderSpacing.Bottom = 8
TabOrder = 1 TabOrder = 1
end end
object btnGrabOffset: TSpeedButton
AnchorSideTop.Control = gbCMOffset
AnchorSideTop.Side = asrCenter
AnchorSideRight.Control = gbCMOffset
AnchorSideRight.Side = asrBottom
Left = 93
Height = 22
Hint = 'Grab coordinates and calculate the offset in relation to the selected area.'
Top = 22
Width = 22
Anchors = [akTop, akRight]
BorderSpacing.Around = 4
Color = clBtnFace
Enabled = False
Glyph.Data = {
36040000424D3604000000000000360000002800000010000000100000000100
2000000000000004000064000000640000000000000000000000FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF007F7F7F067C7C
7CE6787878CC75757581FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF008383835DAAAA
AAFFDBDBDBFF797979F275757506FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF0097979709FFFFFF00FFFFFF00FFFFFF00888888E7DBDB
DBFFB7B7B7FF7D7D7D80FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF009C9C9CC99898981EFFFFFF0090909050ADADADFFF2F2
F2FF848484FD8181810FFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A0A0A0FF9C9C9CE798989836949494DFD9D9D9FFC1C1
C1FF898989A0FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A4A4A4FFD7D7D7FF9D9D9DF8D0D0D0FFEEEEEEFF9191
91FE8D8D8D18FFFFFF00FFFFFF00818181097E7E7E09FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00A9A9A9FFF2F2F2FFE5E5E5FFE2E2E2FFE3E3E3FF9595
95F4919191CC8D8D8DF9898989FF86868693FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00ADADADFFEEEEEEFFE1E1E1FFDFDFDFFFE0E0E0FFE7E7
E7FFE4E4E4FFBBBBBBFF8E8E8E93FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00B1B1B1FFF0F0F0FFE4E4E4FFE2E2E2FFE2E2E2FFE7E7
E7FFC1C1C1FF96969690FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00B5B5B5FFF2F2F2FFE8E8E8FFE7E7E7FFEAEAEAFFC6C6
C6FF9E9E9E8DFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00B9B9B9FFF4F4F4FFECECECFFEDEDEDFFCBCBCBFFA7A7
A78AFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00BDBDBDFFF7F7F7FFEFEFEFFFD0D0D0FFAFAFAF8AFFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C1C1C1FFF7F7F7FFD5D5D5FFB6B6B687FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C4C4C4FFD9D9D9FFBEBEBE84FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00C8C8C8FFC5C5C581FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00CBCBCB7EFFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFF
FF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00FFFFFF00
}
NumGlyphs = 0
OnClick = btnGrabOffsetClick
ShowHint = True
ParentShowHint = False
end
end end
object cbCMEraseTarget: TCheckBox object cbCMEraseTarget: TCheckBox
AnchorSideLeft.Control = gbCMOffset AnchorSideLeft.Control = gbCMOffset
@ -1493,4 +1550,24 @@ object frmLargeScaleCommand: TfrmLargeScaleCommand
ShowHint = True ShowHint = True
ParentShowHint = False ParentShowHint = False
end end
object pmSelectOffset: TPopupMenu
left = 421
top = 82
object mnuSelectTopLeft: TMenuItem
Caption = 'Select Top-Left Corner'
OnClick = mnuSelectTopLeftClick
end
object mnuSelectTopRight: TMenuItem
Caption = 'Select Top-Right Corner'
OnClick = mnuSelectTopLeftClick
end
object mnuSelectBottomLeft: TMenuItem
Caption = 'Select Bottom-Left Corner'
OnClick = mnuSelectTopLeftClick
end
object mnuSelectBottomRight: TMenuItem
Caption = 'Select Bottom-Right Corner'
OnClick = mnuSelectTopLeftClick
end
end
end end

View File

@ -32,7 +32,7 @@ interface
uses uses
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Math, Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, Math,
VirtualTrees, ExtCtrls, ImagingComponents, StdCtrls, Buttons, Spin, LCLIntf, VirtualTrees, ExtCtrls, ImagingComponents, StdCtrls, Buttons, Spin, LCLIntf,
UPlatformTypes, UEnhancedMemoryStream, UWorldItem; Menus, UPlatformTypes, UEnhancedMemoryStream, UWorldItem;
type type
@ -76,6 +76,10 @@ type
lblInsertStaticsTiles: TLabel; lblInsertStaticsTiles: TLabel;
lblX: TLabel; lblX: TLabel;
lblY: TLabel; lblY: TLabel;
mnuSelectTopLeft: TMenuItem;
mnuSelectTopRight: TMenuItem;
mnuSelectBottomLeft: TMenuItem;
mnuSelectBottomRight: TMenuItem;
nbActions: TNotebook; nbActions: TNotebook;
pgCopyMove: TPage; pgCopyMove: TPage;
pgDeleteStatics: TPage; pgDeleteStatics: TPage;
@ -84,6 +88,7 @@ type
pbArea: TPaintBox; pbArea: TPaintBox;
pgArea: TPage; pgArea: TPage;
pgDrawTerrain: TPage; pgDrawTerrain: TPage;
pmSelectOffset: TPopupMenu;
rgCMAction: TRadioGroup; rgCMAction: TRadioGroup;
rbPlaceStaticsOnTerrain: TRadioButton; rbPlaceStaticsOnTerrain: TRadioButton;
rbPlaceStaticsOnTop: TRadioButton; rbPlaceStaticsOnTop: TRadioButton;
@ -106,12 +111,14 @@ type
seY2: TSpinEdit; seY2: TSpinEdit;
btnGrab1: TSpeedButton; btnGrab1: TSpeedButton;
btnGrab2: TSpeedButton; btnGrab2: TSpeedButton;
btnGrabOffset: TSpeedButton;
vdtTerrainTiles: TVirtualDrawTree; vdtTerrainTiles: TVirtualDrawTree;
vdtInsertStaticsTiles: TVirtualDrawTree; vdtInsertStaticsTiles: TVirtualDrawTree;
vdtDeleteStaticsTiles: TVirtualDrawTree; vdtDeleteStaticsTiles: TVirtualDrawTree;
vstActions: TVirtualStringTree; vstActions: TVirtualStringTree;
vstArea: TVirtualStringTree; vstArea: TVirtualStringTree;
procedure btnGrab1Click(Sender: TObject); procedure btnGrab1Click(Sender: TObject);
procedure btnGrabOffsetClick(Sender: TObject);
procedure FormShow(Sender: TObject); procedure FormShow(Sender: TObject);
procedure btnAddAreaClick(Sender: TObject); procedure btnAddAreaClick(Sender: TObject);
procedure btnClearDStaticsTilesClick(Sender: TObject); procedure btnClearDStaticsTilesClick(Sender: TObject);
@ -124,6 +131,7 @@ type
procedure btnExecuteClick(Sender: TObject); procedure btnExecuteClick(Sender: TObject);
procedure FormCreate(Sender: TObject); procedure FormCreate(Sender: TObject);
procedure FormDestroy(Sender: TObject); procedure FormDestroy(Sender: TObject);
procedure mnuSelectTopLeftClick(Sender: TObject);
procedure pbAreaMouseDown(Sender: TObject; Button: TMouseButton; procedure pbAreaMouseDown(Sender: TObject; Button: TMouseButton;
Shift: TShiftState; X, Y: Integer); Shift: TShiftState; X, Y: Integer);
procedure pbAreaMouseMove(Sender: TObject; Shift: TShiftState; X, procedure pbAreaMouseMove(Sender: TObject; Shift: TShiftState; X,
@ -162,10 +170,12 @@ type
FDelStaticsNode: PVirtualNode; FDelStaticsNode: PVirtualNode;
FAddStaticsNode: PVirtualNode; FAddStaticsNode: PVirtualNode;
FSelectFirst: Boolean; FSelectFirst: Boolean;
FOffsetSelection: TObject;
FOldWindowState: TWindowState; FOldWindowState: TWindowState;
function AddNode(AActionID: Integer; ACaption: String): PVirtualNode; function AddNode(AActionID: Integer; ACaption: String): PVirtualNode;
function FindNode(AActionID: Integer): PVirtualNode; function FindNode(AActionID: Integer): PVirtualNode;
procedure TileSelection(AWorldItem: TWorldItem); procedure TileSelection(AWorldItem: TWorldItem);
procedure OffsetSelection(AWorldItem: TWorldItem);
procedure SerializeTiles(ATileList: TVirtualDrawTree; procedure SerializeTiles(ATileList: TVirtualDrawTree;
AStream: TEnhancedMemoryStream); AStream: TEnhancedMemoryStream);
public public
@ -231,6 +241,15 @@ begin
frmRadarMap.Dependencies.Remove(pbArea); frmRadarMap.Dependencies.Remove(pbArea);
end; end;
procedure TfrmLargeScaleCommand.mnuSelectTopLeftClick(Sender: TObject);
begin
FOffsetSelection := Sender;
frmMain.RegisterSelectionListener(@OffsetSelection);
FOldWindowState := WindowState;
WindowState := wsMinimized;
frmMain.SwitchToSelection;
end;
procedure TfrmLargeScaleCommand.pbAreaMouseDown(Sender: TObject; procedure TfrmLargeScaleCommand.pbAreaMouseDown(Sender: TObject;
Button: TMouseButton; Shift: TShiftState; X, Y: Integer); Button: TMouseButton; Shift: TShiftState; X, Y: Integer);
var var
@ -323,6 +342,11 @@ begin
frmMain.SwitchToSelection; frmMain.SwitchToSelection;
end; end;
procedure TfrmLargeScaleCommand.btnGrabOffsetClick(Sender: TObject);
begin
pmSelectOffset.PopUp;
end;
procedure TfrmLargeScaleCommand.btnClearDStaticsTilesClick(Sender: TObject); procedure TfrmLargeScaleCommand.btnClearDStaticsTilesClick(Sender: TObject);
begin begin
vdtDeleteStaticsTiles.Clear; vdtDeleteStaticsTiles.Clear;
@ -638,6 +662,7 @@ begin
seY2.Enabled := selected; seY2.Enabled := selected;
btnGrab1.Enabled := selected; btnGrab1.Enabled := selected;
btnGrab2.Enabled := selected; btnGrab2.Enabled := selected;
btnGrabOffset.Enabled := selected;
if selected then if selected then
begin begin
nodeInfo := Sender.GetNodeData(Node); nodeInfo := Sender.GetNodeData(Node);
@ -708,6 +733,32 @@ begin
WindowState := FOldWindowState; WindowState := FOldWindowState;
end; end;
procedure TfrmLargeScaleCommand.OffsetSelection(AWorldItem: TWorldItem);
begin
if FOffsetSelection = mnuSelectTopLeft then
begin
seCMOffsetX.Value := AWorldItem.X - Min(seX1.Value, seX2.Value);
seCMOffsetY.Value := AWorldItem.Y - Min(seY1.Value, seY2.Value);
end else
if FOffsetSelection = mnuSelectTopRight then
begin
seCMOffsetX.Value := AWorldItem.X - Max(seX1.Value, seX2.Value);
seCMOffsetY.Value := AWorldItem.Y - Min(seY1.Value,seY2.Value);
end else
if FOffsetSelection = mnuSelectBottomLeft then
begin
seCMOffsetX.Value := AWorldItem.X - Min(seX1.Value, seX2.Value);
seCMOffsetY.Value := AWorldItem.Y - Max(seY1.Value, seY2.Value);
end else
if FOffsetSelection = mnuSelectBottomRight then
begin
seCMOffsetX.Value := AWorldItem.X - Max(seX1.Value, seX2.Value);
seCMOffsetY.Value := AWorldItem.Y - Max(seY1.Value, seY2.Value);
end;
frmMain.UnregisterSelectionListener(@OffsetSelection);
WindowState := FOldWindowState;
end;
procedure TfrmLargeScaleCommand.SerializeTiles(ATileList: TVirtualDrawTree; procedure TfrmLargeScaleCommand.SerializeTiles(ATileList: TVirtualDrawTree;
AStream: TEnhancedMemoryStream); AStream: TEnhancedMemoryStream);
var var