- Added ability to edit regions for accounts
- Added AccessChangedListener to allow several listeners to react on accesslevel changes - Changed TModifyUserPacket to support the region lists - Fixed a region list parsing bug in TfrmAccountControl.OnListUsersPacket (Unsigned vs. Signed Integer) - Fixed the order of form creation in TdmNetwork to assure the functionality of the region and account control - Added some glob entries to .hgignore
This commit is contained in:
parent
85cc0c0066
commit
91af86a294
19
.hgignore
19
.hgignore
|
@ -1,2 +1,19 @@
|
|||
syntax: regexp
|
||||
#syntax: regexp
|
||||
#(?<!\.(pas|lfm|lpr|lpi))$
|
||||
syntax: glob
|
||||
obj/*
|
||||
bin/*
|
||||
doc/*
|
||||
pasdoc/*
|
||||
Setup/*
|
||||
*.lps
|
||||
*.lrs
|
||||
*.txt
|
||||
*.log
|
||||
*.png
|
||||
*.ico
|
||||
*.tga
|
||||
*.gif
|
||||
*.bmp
|
||||
*.xpm
|
||||
*.htm*
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
* Portions Copyright 2008 Andreas Schneider
|
||||
*)
|
||||
program CentrED;
|
||||
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
* Portions Copyright 2008 Andreas Schneider
|
||||
*)
|
||||
unit UAdminHandling;
|
||||
|
||||
|
@ -30,7 +30,7 @@ unit UAdminHandling;
|
|||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, UPacket, UPacketHandlers, UEnhancedMemoryStream, UEnums;
|
||||
Classes, SysUtils, UPacket, UPacketHandlers, UEnhancedMemoryStream;
|
||||
|
||||
type
|
||||
|
||||
|
|
|
@ -195,6 +195,9 @@ begin
|
|||
height := ABuffer.ReadWord;
|
||||
ResMan.InitLandscape(width, height);
|
||||
frmMain := TfrmMain.Create(dmNetwork);
|
||||
frmRadarMap := TfrmRadarMap.Create(frmMain);
|
||||
frmLargeScaleCommand := TfrmLargeScaleCommand.Create(frmMain);
|
||||
frmRegionControl := TfrmRegionControl.Create(frmMain);
|
||||
frmAccountControl := TfrmAccountControl.Create(frmMain);
|
||||
frmEditAccount := TfrmEditAccount.Create(frmAccountControl);
|
||||
frmConfirmation := TfrmConfirmation.Create(frmMain);
|
||||
|
@ -206,10 +209,7 @@ begin
|
|||
frmFilter := TfrmFilter.Create(frmMain);
|
||||
frmVirtualLayer := TfrmVirtualLayer.Create(frmMain);
|
||||
frmAbout := TfrmAbout.Create(frmMain);
|
||||
frmRadarMap := TfrmRadarMap.Create(frmMain);
|
||||
frmLargeScaleCommand := TfrmLargeScaleCommand.Create(frmMain);
|
||||
frmTileInfo := TfrmTileInfo.Create(frmMain);
|
||||
frmRegionControl := TfrmRegionControl.Create(frmMain);
|
||||
frmMain.Show;
|
||||
frmInitialize.Hide;
|
||||
tmNoOp.Enabled := True;
|
||||
|
@ -290,7 +290,6 @@ begin
|
|||
frmLogin := TfrmLogin.Create(dmNetwork);
|
||||
if frmInitialize = nil then frmInitialize := TfrmInitialize.Create(dmNetwork);
|
||||
if frmTileInfo <> nil then FreeAndNil(frmTileInfo);
|
||||
if frmLargeScaleCommand <> nil then FreeAndNil(frmLargeScaleCommand);
|
||||
if frmEditAccount <> nil then FreeAndNil(frmEditAccount);
|
||||
if frmAccountControl <> nil then FreeAndNil(frmAccountControl);
|
||||
if frmConfirmation <> nil then FreeAndNil(frmConfirmation);
|
||||
|
@ -303,6 +302,7 @@ begin
|
|||
if frmVirtualLayer <> nil then FreeAndNil(frmVirtualLayer);
|
||||
if frmAbout <> nil then FreeAndNil(frmAbout);
|
||||
if frmRegionControl <> nil then FreeAndNil(frmRegionControl);
|
||||
if frmLargeScaleCommand <> nil then FreeAndNil(frmLargeScaleCommand);
|
||||
if frmRadarMap <> nil then FreeAndNil(frmRadarMap);
|
||||
if frmMain <> nil then
|
||||
begin
|
||||
|
|
|
@ -31,7 +31,7 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, ComCtrls,
|
||||
VirtualTrees, VTHeaderPopup, UEnhancedMemoryStream, UEnums;
|
||||
VirtualTrees, Math, UEnhancedMemoryStream, UEnums;
|
||||
|
||||
type
|
||||
|
||||
|
@ -67,8 +67,6 @@ type
|
|||
procedure OnDeleteUserResponse(ABuffer: TEnhancedMemoryStream);
|
||||
procedure OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
|
||||
function FindNode(AUsername: string): PVirtualNode;
|
||||
public
|
||||
{ public declarations }
|
||||
end;
|
||||
|
||||
var
|
||||
|
@ -90,7 +88,8 @@ type
|
|||
{ TModifyUserPacket }
|
||||
|
||||
TModifyUserPacket = class(TPacket)
|
||||
constructor Create(AUsername, APassword: string; AAccessLevel: TAccessLevel);
|
||||
constructor Create(AUsername, APassword: string; AAccessLevel: TAccessLevel;
|
||||
ARegions: TStrings);
|
||||
end;
|
||||
|
||||
{ TDeleteUserPacket }
|
||||
|
@ -108,13 +107,22 @@ type
|
|||
{ TModifyUserPacket }
|
||||
|
||||
constructor TModifyUserPacket.Create(AUsername, APassword: string;
|
||||
AAccessLevel: TAccessLevel);
|
||||
AAccessLevel: TAccessLevel; ARegions: TStrings);
|
||||
var
|
||||
regionCount: Byte;
|
||||
i: Integer;
|
||||
begin
|
||||
inherited Create($03, 0);
|
||||
FStream.WriteByte($05);
|
||||
FStream.WriteStringNull(AUsername);
|
||||
FStream.WriteStringNull(APassword);
|
||||
FStream.WriteByte(Byte(AAccessLevel));
|
||||
|
||||
regionCount := Min(ARegions.Count, 256);
|
||||
FStream.WriteByte(regionCount);
|
||||
|
||||
for i := 0 to regionCount - 1 do
|
||||
FStream.WriteStringNull(ARegions.Strings[i]);
|
||||
end;
|
||||
|
||||
{ TDeleteUserPacket }
|
||||
|
@ -155,6 +163,7 @@ procedure TfrmAccountControl.tbEditUserClick(Sender: TObject);
|
|||
var
|
||||
selected: PVirtualNode;
|
||||
accountInfo: PAccountInfo;
|
||||
regions: TStrings;
|
||||
begin
|
||||
selected := vstAccounts.GetFirstSelected;
|
||||
if selected <> nil then
|
||||
|
@ -168,9 +177,14 @@ begin
|
|||
edPassword.Text := '';
|
||||
lblPasswordHint.Visible := True;
|
||||
SetAccessLevel(accountInfo^.AccessLevel);
|
||||
SetRegions(accountInfo^.Regions);
|
||||
if ShowModal = mrOK then
|
||||
begin
|
||||
regions := GetRegions;
|
||||
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text,
|
||||
edPassword.Text, GetAccessLevel));
|
||||
edPassword.Text, GetAccessLevel, regions));
|
||||
regions.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
@ -188,6 +202,8 @@ begin
|
|||
end;
|
||||
|
||||
procedure TfrmAccountControl.tbAddUserClick(Sender: TObject);
|
||||
var
|
||||
regions: TStrings;
|
||||
begin
|
||||
with frmEditAccount do
|
||||
begin
|
||||
|
@ -197,9 +213,14 @@ begin
|
|||
edPassword.Text := '';
|
||||
lblPasswordHint.Visible := False;
|
||||
cbAccessLevel.ItemIndex := 2;
|
||||
SetRegions(nil);
|
||||
if ShowModal = mrOK then
|
||||
begin
|
||||
regions := GetRegions;
|
||||
dmNetwork.Send(TModifyUserPacket.Create(edUsername.Text, edPassword.Text,
|
||||
GetAccessLevel));
|
||||
GetAccessLevel, regions));
|
||||
regions.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
|
@ -348,7 +369,7 @@ procedure TfrmAccountControl.OnListUsersPacket(ABuffer: TEnhancedMemoryStream);
|
|||
var
|
||||
node: PVirtualNode;
|
||||
accountInfo: PAccountInfo;
|
||||
i, j, count, regions: Word;
|
||||
i, j, count, regions: Integer;
|
||||
begin
|
||||
vstAccounts.BeginUpdate;
|
||||
vstAccounts.Clear;
|
||||
|
|
|
@ -10,6 +10,9 @@ object frmEditAccount: TfrmEditAccount
|
|||
ClientHeight = 214
|
||||
ClientWidth = 261
|
||||
Font.Height = -11
|
||||
OnCreate = FormCreate
|
||||
OnDestroy = FormDestroy
|
||||
OnShow = FormShow
|
||||
Position = poOwnerFormCenter
|
||||
LCLVersion = '0.9.25'
|
||||
object PageControl1: TPageControl
|
||||
|
@ -22,7 +25,7 @@ object frmEditAccount: TfrmEditAccount
|
|||
TabOrder = 0
|
||||
object tsGeneral: TTabSheet
|
||||
Caption = 'General'
|
||||
ClientHeight = 142
|
||||
ClientHeight = 144
|
||||
ClientWidth = 257
|
||||
ParentFont = True
|
||||
object lblPasswordHint: TLabel
|
||||
|
@ -39,27 +42,27 @@ object frmEditAccount: TfrmEditAccount
|
|||
end
|
||||
object lblUsername: TLabel
|
||||
Left = 6
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 12
|
||||
Width = 64
|
||||
Width = 58
|
||||
Caption = 'Username:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
end
|
||||
object lblPassword: TLabel
|
||||
Left = 6
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 44
|
||||
Width = 61
|
||||
Width = 54
|
||||
Caption = 'Password:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
end
|
||||
object lblAccessLevel: TLabel
|
||||
Left = 6
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 108
|
||||
Width = 71
|
||||
Width = 63
|
||||
Caption = 'Accesslevel:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
|
@ -86,7 +89,7 @@ object frmEditAccount: TfrmEditAccount
|
|||
end
|
||||
object cbAccessLevel: TComboBox
|
||||
Left = 86
|
||||
Height = 23
|
||||
Height = 29
|
||||
Top = 104
|
||||
Width = 160
|
||||
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
|
||||
|
@ -104,12 +107,12 @@ object frmEditAccount: TfrmEditAccount
|
|||
end
|
||||
object tsRegions: TTabSheet
|
||||
Caption = 'Regions'
|
||||
ClientHeight = 142
|
||||
ClientHeight = 144
|
||||
ClientWidth = 257
|
||||
ParentFont = True
|
||||
object Label1: TLabel
|
||||
Left = 8
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 8
|
||||
Width = 241
|
||||
Align = alTop
|
||||
|
@ -121,17 +124,17 @@ object frmEditAccount: TfrmEditAccount
|
|||
ParentColor = False
|
||||
ParentFont = True
|
||||
end
|
||||
object CheckListBox1: TCheckListBox
|
||||
object cbRegions: TCheckListBox
|
||||
Left = 8
|
||||
Height = 109
|
||||
Top = 25
|
||||
Height = 110
|
||||
Top = 26
|
||||
Width = 241
|
||||
Align = alClient
|
||||
BorderSpacing.Left = 8
|
||||
BorderSpacing.Top = 4
|
||||
BorderSpacing.Right = 8
|
||||
BorderSpacing.Bottom = 8
|
||||
ItemHeight = 10
|
||||
ItemHeight = 13
|
||||
ParentFont = True
|
||||
TabOrder = 0
|
||||
TopIndex = -1
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
* Portions Copyright 2008 Andreas Schneider
|
||||
*)
|
||||
unit UfrmEditAccount;
|
||||
|
||||
|
@ -31,7 +31,7 @@ interface
|
|||
|
||||
uses
|
||||
Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls,
|
||||
UEnums, ComCtrls, ExtCtrls, CheckLst;
|
||||
UEnums, ComCtrls, ExtCtrls, CheckLst, UfrmRegionControl, VirtualTrees;
|
||||
|
||||
type
|
||||
|
||||
|
@ -41,7 +41,7 @@ type
|
|||
btnCancel: TButton;
|
||||
btnOK: TButton;
|
||||
cbAccessLevel: TComboBox;
|
||||
CheckListBox1: TCheckListBox;
|
||||
cbRegions: TCheckListBox;
|
||||
edPassword: TEdit;
|
||||
edUsername: TEdit;
|
||||
Label1: TLabel;
|
||||
|
@ -53,9 +53,18 @@ type
|
|||
Panel1: TPanel;
|
||||
tsGeneral: TTabSheet;
|
||||
tsRegions: TTabSheet;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure FormDestroy(Sender: TObject);
|
||||
procedure FormShow(Sender: TObject);
|
||||
public
|
||||
function GetAccessLevel: TAccessLevel;
|
||||
function GetRegions: TStrings;
|
||||
procedure SetAccessLevel(AAccessLevel: TAccessLevel);
|
||||
procedure SetRegions(ARegions: TStrings);
|
||||
protected
|
||||
procedure RegionModified(ARegion: TRegionInfo);
|
||||
procedure RegionDeleted(ARegionName: string);
|
||||
procedure RegionList;
|
||||
end;
|
||||
|
||||
var
|
||||
|
@ -65,6 +74,25 @@ implementation
|
|||
|
||||
{ TfrmEditAccount }
|
||||
|
||||
procedure TfrmEditAccount.FormCreate(Sender: TObject);
|
||||
begin
|
||||
frmRegionControl.OnRegionModified := @RegionModified;
|
||||
frmRegionControl.OnRegionDeleted := @RegionDeleted;
|
||||
frmRegionControl.OnRegionList := @RegionList;
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.FormDestroy(Sender: TObject);
|
||||
begin
|
||||
frmRegionControl.OnRegionModified := nil;
|
||||
frmRegionControl.OnRegionDeleted := nil;
|
||||
frmRegionControl.OnRegionList := nil;
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.FormShow(Sender: TObject);
|
||||
begin
|
||||
PageControl1.ActivePageIndex := 0;
|
||||
end;
|
||||
|
||||
function TfrmEditAccount.GetAccessLevel: TAccessLevel;
|
||||
begin
|
||||
case cbAccessLevel.ItemIndex of
|
||||
|
@ -75,6 +103,20 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
function TfrmEditAccount.GetRegions: TStrings;
|
||||
var
|
||||
regions: TStringList;
|
||||
i: Integer;
|
||||
begin
|
||||
regions := TStringList.Create;
|
||||
for i := 0 to cbRegions.Items.Count - 1 do
|
||||
begin
|
||||
if cbRegions.Checked[i] then
|
||||
regions.Add(cbRegions.Items[i]);
|
||||
end;
|
||||
Result := regions;
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.SetAccessLevel(AAccessLevel: TAccessLevel);
|
||||
begin
|
||||
case AAccessLevel of
|
||||
|
@ -85,6 +127,43 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.SetRegions(ARegions: TStrings);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := 0 to cbRegions.Items.Count - 1 do
|
||||
cbRegions.Checked[i] := (ARegions <> nil) and
|
||||
(ARegions.IndexOf(cbRegions.Items.Strings[i]) > -1);
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.RegionModified(ARegion: TRegionInfo);
|
||||
begin
|
||||
if cbRegions.Items.IndexOf(ARegion.Name) = -1 then
|
||||
cbRegions.Items.Add(ARegion.Name);
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.RegionDeleted(ARegionName: string);
|
||||
begin
|
||||
cbRegions.Items.Delete(cbRegions.Items.IndexOf(ARegionName));
|
||||
end;
|
||||
|
||||
procedure TfrmEditAccount.RegionList;
|
||||
var
|
||||
regionNode: PVirtualNode;
|
||||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
cbRegions.Items.BeginUpdate;
|
||||
cbRegions.Items.Clear;
|
||||
regionNode := frmRegionControl.vstRegions.GetFirst;
|
||||
while regionNode <> nil do
|
||||
begin
|
||||
regionInfo := frmRegionControl.vstRegions.GetNodeData(regionNode);
|
||||
cbRegions.Items.Add(regionInfo^.Name);
|
||||
regionNode := frmRegionControl.vstRegions.GetNext(regionNode);
|
||||
end;
|
||||
cbRegions.Items.EndUpdate;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I UfrmEditAccount.lrs}
|
||||
|
||||
|
|
|
@ -16,8 +16,8 @@ object frmLogin: TfrmLogin
|
|||
ShowInTaskBar = stAlways
|
||||
LCLVersion = '0.9.25'
|
||||
object lblCopyright: TLabel
|
||||
Height = 24
|
||||
Top = 241
|
||||
Height = 25
|
||||
Top = 240
|
||||
Width = 489
|
||||
Align = alBottom
|
||||
Alignment = taCenter
|
||||
|
@ -30,33 +30,33 @@ object frmLogin: TfrmLogin
|
|||
Top = 8
|
||||
Width = 321
|
||||
Caption = 'Connection'
|
||||
ClientHeight = 111
|
||||
ClientHeight = 113
|
||||
ClientWidth = 317
|
||||
ParentFont = True
|
||||
TabOrder = 0
|
||||
object lblHost: TLabel
|
||||
Left = 30
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 9
|
||||
Width = 31
|
||||
Width = 28
|
||||
Caption = 'Host:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
end
|
||||
object lblUsername: TLabel
|
||||
Left = 30
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 43
|
||||
Width = 64
|
||||
Width = 58
|
||||
Caption = 'Username:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
end
|
||||
object lblPassword: TLabel
|
||||
Left = 30
|
||||
Height = 13
|
||||
Height = 14
|
||||
Top = 77
|
||||
Width = 61
|
||||
Width = 54
|
||||
Caption = 'Password:'
|
||||
ParentColor = False
|
||||
ParentFont = True
|
||||
|
@ -368,7 +368,7 @@ object frmLogin: TfrmLogin
|
|||
Height = 96
|
||||
Top = 8
|
||||
Width = 145
|
||||
ClientHeight = 92
|
||||
ClientHeight = 79
|
||||
ClientWidth = 141
|
||||
ParentFont = True
|
||||
TabOrder = 2
|
||||
|
@ -432,11 +432,11 @@ object frmLogin: TfrmLogin
|
|||
end
|
||||
object GroupBox1: TGroupBox
|
||||
Left = 336
|
||||
Height = 81
|
||||
Height = 84
|
||||
Top = 112
|
||||
Width = 145
|
||||
Caption = 'Profiles'
|
||||
ClientHeight = 64
|
||||
ClientHeight = 69
|
||||
ClientWidth = 141
|
||||
ParentFont = True
|
||||
TabOrder = 3
|
||||
|
@ -444,7 +444,7 @@ object frmLogin: TfrmLogin
|
|||
Left = 86
|
||||
Height = 22
|
||||
Hint = 'Save profile'
|
||||
Top = 32
|
||||
Top = 40
|
||||
Width = 23
|
||||
Color = clBtnFace
|
||||
Glyph.Data = {
|
||||
|
@ -493,7 +493,7 @@ object frmLogin: TfrmLogin
|
|||
Left = 111
|
||||
Height = 22
|
||||
Hint = 'Delete profile'
|
||||
Top = 32
|
||||
Top = 40
|
||||
Width = 23
|
||||
Color = clBtnFace
|
||||
Glyph.Data = {
|
||||
|
@ -540,7 +540,7 @@ object frmLogin: TfrmLogin
|
|||
end
|
||||
object cbProfile: TComboBox
|
||||
Left = 6
|
||||
Height = 21
|
||||
Height = 29
|
||||
Top = 8
|
||||
Width = 128
|
||||
AutoCompleteText = [cbactEndOfLineComplete, cbactSearchAscending]
|
||||
|
|
|
@ -21,7 +21,7 @@
|
|||
* CDDL HEADER END
|
||||
*
|
||||
*
|
||||
* Portions Copyright 2007 Andreas Schneider
|
||||
* Portions Copyright 2008 Andreas Schneider
|
||||
*)
|
||||
unit UfrmMain;
|
||||
|
||||
|
@ -38,10 +38,11 @@ uses
|
|||
|
||||
type
|
||||
|
||||
TVirtualTile = class(TStaticItem)
|
||||
end;
|
||||
TVirtualTile = class(TStaticItem);
|
||||
TVirtualTileArray = array of TVirtualTile;
|
||||
|
||||
TAccessChangedListener = procedure(AAccessLevel: TAccessLevel) of object;
|
||||
|
||||
{ TfrmMain }
|
||||
|
||||
TfrmMain = class(TForm)
|
||||
|
@ -277,6 +278,7 @@ type
|
|||
FLocationsFile: string;
|
||||
FRandomPresetLocation: string;
|
||||
FLastDraw: TDateTime;
|
||||
FAccessChangedListeners: array of TAccessChangedListener;
|
||||
procedure SetX(const AValue: Integer);
|
||||
procedure SetY(const AValue: Integer);
|
||||
procedure SetCurrentTile(const AValue: TWorldItem);
|
||||
|
@ -306,6 +308,8 @@ type
|
|||
property SelectedTile: TWorldItem read FSelectedTile write SetSelectedTile;
|
||||
|
||||
procedure SetPos(AX, AY: Word);
|
||||
procedure RegisterAccessChangedListener(AListener: TAccessChangedListener);
|
||||
procedure UnregisterAccessChangedListener(AListener: TAccessChangedListener);
|
||||
end;
|
||||
|
||||
var
|
||||
|
@ -1500,6 +1504,41 @@ begin
|
|||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.RegisterAccessChangedListener(
|
||||
AListener: TAccessChangedListener);
|
||||
var
|
||||
i: Integer;
|
||||
begin
|
||||
for i := Low(FAccessChangedListeners) to High(FAccessChangedListeners) do
|
||||
if FAccessChangedListeners[i] = AListener then
|
||||
Exit; //Prevent duplicates
|
||||
SetLength(FAccessChangedListeners, Length(FAccessChangedListeners) + 1);
|
||||
FAccessChangedListeners[High(FAccessChangedListeners)] := AListener;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.UnregisterAccessChangedListener(
|
||||
AListener: TAccessChangedListener);
|
||||
var
|
||||
i: Integer;
|
||||
found: Boolean;
|
||||
begin
|
||||
i := Low(FAccessChangedListeners);
|
||||
found := False;
|
||||
while (i <= High(FAccessChangedListeners)) and (not found) do
|
||||
begin
|
||||
if FAccessChangedListeners[i] = AListener then
|
||||
begin
|
||||
if i < High(FAccessChangedListeners) then
|
||||
Move(FAccessChangedListeners[i+1], FAccessChangedListeners[i],
|
||||
(High(FAccessChangedListeners) - Low(FAccessChangedListeners) - i) *
|
||||
SizeOf(TAccessChangedListener)); //move subsequent entries
|
||||
SetLength(FAccessChangedListeners, Length(FAccessChangedListeners) - 1);
|
||||
found := True;
|
||||
end else
|
||||
Inc(i);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TfrmMain.SetCurrentTile(const AValue: TWorldItem);
|
||||
begin
|
||||
if FCurrentTile <> nil then
|
||||
|
@ -2050,6 +2089,7 @@ end;
|
|||
procedure TfrmMain.OnClientHandlingPacket(ABuffer: TEnhancedMemoryStream);
|
||||
var
|
||||
sender, msg: string;
|
||||
i: Integer;
|
||||
begin
|
||||
case ABuffer.ReadByte of
|
||||
$01: //client connected
|
||||
|
@ -2096,6 +2136,9 @@ begin
|
|||
ProcessAccessLevel;
|
||||
MessageDlg('AccessLevel change', Format('Your accesslevel has been changed to %s.', [GetAccessLevelString(dmNetwork.AccessLevel)]), mtWarning, [mbOK], 0);
|
||||
end;
|
||||
|
||||
for i := Low(FAccessChangedListeners) to High(FAccessChangedListeners) do
|
||||
FAccessChangedListeners[i](dmNetwork.AccessLevel);
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
|
|
@ -32,12 +32,22 @@ interface
|
|||
uses
|
||||
Classes, SysUtils, math, LResources, Forms, Controls, Graphics, Dialogs,
|
||||
VirtualTrees, ExtCtrls, ImagingComponents, StdCtrls, Buttons, Spin, LCLIntf,
|
||||
UEnhancedMemoryStream, Menus, URectList;
|
||||
UEnhancedMemoryStream, Menus, URectList, UEnums;
|
||||
|
||||
type
|
||||
TAreaMoveType = (amLeft, amTop, amRight, amBottom);
|
||||
TAreaMove = set of TAreaMoveType;
|
||||
|
||||
PRegionInfo = ^TRegionInfo;
|
||||
TRegionInfo = record
|
||||
Name: string;
|
||||
Areas: TRectList;
|
||||
end;
|
||||
|
||||
TRegionModifiedEvent = procedure(ARegionInfo: TRegionInfo) of object;
|
||||
TRegionDeletedEvent = procedure(ARegionName: string) of object;
|
||||
TRegionListEvent = procedure of object;
|
||||
|
||||
{ TfrmRegionControl }
|
||||
|
||||
TfrmRegionControl = class(TForm)
|
||||
|
@ -91,14 +101,18 @@ type
|
|||
FLastX: Integer;
|
||||
FLastY: Integer;
|
||||
FAreaMove: TAreaMove;
|
||||
FOnRegionModified: TRegionModifiedEvent;
|
||||
FOnRegionDeleted: TRegionDeletedEvent;
|
||||
FOnRegionList: TRegionListEvent;
|
||||
function FindRegion(AName: string): PVirtualNode;
|
||||
procedure OnModifyRegionPacket(ABuffer: TEnhancedMemoryStream);
|
||||
procedure OnDeleteRegionPacket(ABuffer: TEnhancedMemoryStream);
|
||||
procedure OnListRegionsPacket(ABuffer: TEnhancedMemoryStream);
|
||||
private
|
||||
{ private declarations }
|
||||
procedure OnAccessChanged(AAccessLevel: TAccessLevel);
|
||||
public
|
||||
{ public declarations }
|
||||
property OnRegionModified: TRegionModifiedEvent read FOnRegionModified write FOnRegionModified;
|
||||
property OnRegionDeleted: TRegionDeletedEvent read FOnRegionDeleted write FOnRegionDeleted;
|
||||
property OnRegionList: TRegionListEvent read FOnRegionList write FOnRegionList;
|
||||
end;
|
||||
|
||||
var
|
||||
|
@ -108,16 +122,9 @@ implementation
|
|||
|
||||
uses
|
||||
UGameResources, UfrmRadar, UfrmMain, UdmNetwork, UPacket, UGUIPlatformUtils,
|
||||
UAdminHandling, UPacketHandlers;
|
||||
UAdminHandling, UPacketHandlers, UConsts;
|
||||
|
||||
type
|
||||
|
||||
PRegionInfo = ^TRegionInfo;
|
||||
TRegionInfo = record
|
||||
Name: string;
|
||||
Areas: TRectList;
|
||||
end;
|
||||
|
||||
{ TModifyRegionPacket }
|
||||
|
||||
TModifyRegionPacket = class(TPacket)
|
||||
|
@ -191,10 +198,13 @@ begin
|
|||
vstRegions.NodeDataSize := SizeOf(TRegionInfo);
|
||||
|
||||
frmRadarMap.Dependencies.Add(pbArea);
|
||||
frmMain.RegisterAccessChangedListener(@OnAccessChanged);
|
||||
|
||||
AssignAdminPacketHandler($08, TPacketHandler.Create(0, @OnModifyRegionPacket));
|
||||
AssignAdminPacketHandler($09, TPacketHandler.Create(0, @OnDeleteRegionPacket));
|
||||
AssignAdminPacketHandler($0A, TPacketHandler.Create(0, @OnListRegionsPacket));
|
||||
|
||||
dmNetwork.Send(TRequestRegionListPacket.Create);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.FormDestroy(Sender: TObject);
|
||||
|
@ -209,7 +219,6 @@ procedure TfrmRegionControl.FormShow(Sender: TObject);
|
|||
begin
|
||||
SetWindowParent(Handle, frmMain.Handle);
|
||||
btnSave.Enabled := False; //no changes yet
|
||||
dmNetwork.Send(TRequestRegionListPacket.Create);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.btnSaveClick(Sender: TObject);
|
||||
|
@ -532,6 +541,7 @@ var
|
|||
regionInfo: PRegionInfo;
|
||||
begin
|
||||
regionInfo := Sender.GetNodeData(Node);
|
||||
regionInfo^.Name := '';
|
||||
if regionInfo^.Areas <> nil then FreeAndNil(regionInfo^.Areas);
|
||||
end;
|
||||
|
||||
|
@ -604,6 +614,9 @@ begin
|
|||
btnSave.Enabled := False;
|
||||
vstRegionsChange(vstRegions, regionNode);
|
||||
end;
|
||||
|
||||
if Assigned(FOnRegionModified) then
|
||||
FOnRegionModified(regionInfo^);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.OnDeleteRegionPacket(ABuffer: TEnhancedMemoryStream);
|
||||
|
@ -619,6 +632,9 @@ begin
|
|||
|
||||
if regionNode <> nil then
|
||||
vstRegions.DeleteNode(regionNode);
|
||||
|
||||
if Assigned(FOnRegionDeleted) then
|
||||
FOnRegionDeleted(regionName);
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.OnListRegionsPacket(ABuffer: TEnhancedMemoryStream);
|
||||
|
@ -648,6 +664,15 @@ begin
|
|||
end;
|
||||
end;
|
||||
vstRegions.EndUpdate;
|
||||
|
||||
if Assigned(FOnRegionList) then
|
||||
FOnRegionList;
|
||||
end;
|
||||
|
||||
procedure TfrmRegionControl.OnAccessChanged(AAccessLevel: TAccessLevel);
|
||||
begin
|
||||
if AAccessLevel >= alAdministrator then
|
||||
dmNetwork.Send(TRequestRegionListPacket.Create);
|
||||
end;
|
||||
|
||||
initialization
|
||||
|
|
|
@ -352,7 +352,7 @@ begin
|
|||
FStream.WriteByte(Byte(account.AccessLevel));
|
||||
FStream.WriteByte(account.Regions.Count);
|
||||
for j := 0 to account.Regions.Count - 1 do
|
||||
FStream.WriteStringNull(account.Regions[j]);
|
||||
FStream.WriteStringNull(account.Regions.Strings[j]);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
|
Loading…
Reference in New Issue