Skip to content

Commit

Permalink
Add code for controlling the TreeView and TreeNode's with lua
Browse files Browse the repository at this point in the history
  • Loading branch information
cheatengine@gmail.com committed Dec 12, 2013
1 parent 1f200c6 commit 310ff09
Show file tree
Hide file tree
Showing 12 changed files with 1,210 additions and 267 deletions.
4 changes: 3 additions & 1 deletion Cheat Engine/LuaHandler.pas
Original file line number Diff line number Diff line change
Expand Up @@ -73,7 +73,8 @@ implementation
LuaEdit, LuaMemo, LuaCollection, LuaListColumns, LuaListitem, LuaListItems,
LuaTimer, LuaListview, LuaGenericHotkey, LuaTableFile, LuaMemoryRecordHotkey,
LuaMemoryView, LuaD3DHook, LuaDisassembler, LuaDissectCode, LuaByteTable, LuaBinary,
lua_server, HotkeyHandler, LuaPipeClient, LuaPipeServer;
lua_server, HotkeyHandler, LuaPipeClient, LuaPipeServer, LuaTreeview,
LuaTreeNodes, LuaTreeNode;

resourcestring
rsLUA_DoScriptWasNotCalledRomTheMainThread = 'LUA_DoScript was not called '
Expand Down Expand Up @@ -4547,6 +4548,7 @@ procedure InitializeLua;


initializeLuaListview;
initializeLuaTreeview;
initializeLuaTimer;


Expand Down
2 changes: 1 addition & 1 deletion Cheat Engine/LuaListItem.pas
Original file line number Diff line number Diff line change
Expand Up @@ -131,7 +131,7 @@ function listitem_makeVisible(L: PLua_State): integer; cdecl;

listitem.MakeVisible(partialok);

result:=1;
result:=0;
end;

procedure listitem_addMetaData(L: PLua_state; metatable: integer; userdata: integer );
Expand Down
1 change: 1 addition & 0 deletions Cheat Engine/LuaListview.pas
Original file line number Diff line number Diff line change
Expand Up @@ -130,6 +130,7 @@ procedure listview_addMetaData(L: PLua_state; metatable: integer; userdata: inte
procedure initializeLuaListview;
begin
lua_register(LuaVM, 'createListView', createListView);
lua_register(LuaVM, 'createListview', createListView);
lua_register(LuaVM, 'listview_clear', listview_clear);
lua_register(LuaVM, 'listview_getColumns', listview_getColumns);
lua_register(LuaVM, 'listview_getItems', listview_getItems);
Expand Down
172 changes: 172 additions & 0 deletions Cheat Engine/celistviewitemeditor.lfm
Original file line number Diff line number Diff line change
@@ -0,0 +1,172 @@
object frmCEListviewItemEditor: TfrmCEListviewItemEditor
Left = 805
Height = 240
Top = 359
Width = 349
Caption = 'Item editor'
ClientHeight = 240
ClientWidth = 349
Position = poScreenCenter
LCLVersion = '1.0.8.0'
object Panel1: TPanel
Left = 0
Height = 200
Top = 0
Width = 349
Align = alClient
BevelOuter = bvNone
ClientHeight = 200
ClientWidth = 349
TabOrder = 0
object TreeView1: TTreeView
Left = 0
Height = 200
Top = 0
Width = 207
Align = alClient
DefaultItemHeight = 18
HideSelection = False
TabOrder = 0
OnChange = TreeView1Change
OnSelectionChanged = TreeView1SelectionChanged
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoShowButtons, tvoShowLines, tvoShowRoot, tvoToolTips, tvoThemedDraw]
end
object Panel2: TPanel
Left = 207
Height = 200
Top = 0
Width = 142
Align = alRight
BevelOuter = bvNone
ClientHeight = 200
ClientWidth = 142
TabOrder = 1
object edtText: TEdit
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = lblText
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel2
AnchorSideRight.Side = asrBottom
Left = 6
Height = 23
Top = 28
Width = 130
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
OnChange = edtTextChange
TabOrder = 0
end
object lblText: TLabel
Left = 6
Height = 16
Top = 6
Width = 130
Align = alTop
BorderSpacing.Around = 6
Caption = 'Text'
ParentColor = False
end
object btnAddItem: TButton
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = edtText
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel2
AnchorSideRight.Side = asrBottom
Left = 6
Height = 25
Top = 57
Width = 130
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
Caption = 'Add Item'
OnClick = btnAddItemClick
TabOrder = 1
end
object btnAddSubItem: TButton
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = btnAddItem
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel2
AnchorSideRight.Side = asrBottom
Left = 6
Height = 25
Top = 88
Width = 130
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
Caption = 'Add SubItem'
Enabled = False
OnClick = btnAddSubItemClick
TabOrder = 2
end
object btnDelete: TButton
AnchorSideLeft.Control = Panel2
AnchorSideTop.Control = btnAddSubItem
AnchorSideTop.Side = asrBottom
AnchorSideRight.Control = Panel2
AnchorSideRight.Side = asrBottom
Left = 6
Height = 25
Top = 119
Width = 130
Anchors = [akTop, akLeft, akRight]
BorderSpacing.Around = 6
Caption = 'Delete'
Enabled = False
OnClick = btnDeleteClick
TabOrder = 3
end
end
end
object Panel3: TPanel
Left = 0
Height = 40
Top = 200
Width = 349
Align = alBottom
Anchors = [akTop, akLeft, akRight, akBottom]
BevelOuter = bvNone
ClientHeight = 40
ClientWidth = 349
TabOrder = 1
object Panel4: TPanel
AnchorSideRight.Control = Panel3
AnchorSideRight.Side = asrCenter
Left = 94
Height = 26
Top = 8
Width = 159
Anchors = [akTop, akRight]
BevelOuter = bvNone
ClientHeight = 26
ClientWidth = 159
TabOrder = 0
object btnCancel: TButton
AnchorSideRight.Control = Panel4
AnchorSideRight.Side = asrBottom
Left = 84
Height = 25
Top = 0
Width = 75
Anchors = [akTop, akRight]
Cancel = True
Caption = 'Cancel'
ModalResult = 2
TabOrder = 0
end
object btnOk: TButton
AnchorSideLeft.Control = Panel4
AnchorSideRight.Control = btnCancel
Left = 0
Height = 25
Top = 0
Width = 75
BorderSpacing.Right = 10
Caption = 'OK'
Default = True
OnClick = btnOkClick
TabOrder = 1
end
end
end
end
7 changes: 7 additions & 0 deletions Cheat Engine/celistviewitemeditor.lrt
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
TFRMCELISTVIEWITEMEDITOR.CAPTION=Item editor
TFRMCELISTVIEWITEMEDITOR.LBLTEXT.CAPTION=Text
TFRMCELISTVIEWITEMEDITOR.BTNADDITEM.CAPTION=Add Item
TFRMCELISTVIEWITEMEDITOR.BTNADDSUBITEM.CAPTION=Add SubItem
TFRMCELISTVIEWITEMEDITOR.BTNDELETE.CAPTION=Delete
TFRMCELISTVIEWITEMEDITOR.BTNCANCEL.CAPTION=Cancel
TFRMCELISTVIEWITEMEDITOR.BTNOK.CAPTION=OK
178 changes: 178 additions & 0 deletions Cheat Engine/celistviewitemeditor.pas
Original file line number Diff line number Diff line change
@@ -0,0 +1,178 @@
unit CEListviewItemEditor;

{$mode delphi}

interface

uses
Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls,
ComCtrls, ExtCtrls, propedits;

type

{ TfrmCEListviewItemEditor }

TfrmCEListviewItemEditor = class(TForm)
btnDelete: TButton;
btnCancel: TButton;
btnOk: TButton;
btnAddItem: TButton;
btnAddSubItem: TButton;
edtText: TEdit;
lblText: TLabel;
Panel1: TPanel;
Panel2: TPanel;
Panel3: TPanel;
Panel4: TPanel;
TreeView1: TTreeView;
procedure btnAddItemClick(Sender: TObject);
procedure btnAddSubItemClick(Sender: TObject);
procedure btnDeleteClick(Sender: TObject);
procedure btnOkClick(Sender: TObject);
procedure edtTextChange(Sender: TObject);
procedure TreeView1Change(Sender: TObject; Node: TTreeNode);
procedure TreeView1SelectionChanged(Sender: TObject);
private
{ private declarations }
c: TWinControl; //the TCEListview object
public
procedure setControl(wc: TWincontrol);
{ public declarations }
end;

TCEListViewItemsPropertyEditor = Class(TClassPropertyEditor)
public
procedure Edit; override;
function GetAttributes: TPropertyAttributes; override;
end;

implementation

{$R *.lfm}

uses ceguicomponents;

procedure TfrmCEListviewItemEditor.btnOkClick(Sender: TObject);
var
lv: TCEListView;
lvi: Tlistitem;
i: integer;

tn: TTreenode;
begin
//apply the changes
lv:=TCEListView(c);

lv.Items.Clear;

tn:=treeview1.Items.GetFirstNode;
while tn<>nil do
begin
lvi:=lv.items.add;
lvi.caption:=tn.Text;

i:=0;
for i:=0 to tn.Count-1 do
lvi.SubItems.Add(tn[i].Text);


tn:=tn.GetNextSibling;
end;


modalresult:=mrok;
end;

procedure TfrmCEListviewItemEditor.edtTextChange(Sender: TObject);
begin
if treeview1.selected<>nil then
treeview1.Selected.text:=edtText.text;
end;

procedure TfrmCEListviewItemEditor.TreeView1Change(Sender: TObject;
Node: TTreeNode);
begin

end;

procedure TfrmCEListviewItemEditor.TreeView1SelectionChanged(Sender: TObject);
begin
btnAddSubItem.Enabled:=treeview1.selected<>nil;
btnDelete.enabled:=treeview1.selected<>nil;
end;

procedure TfrmCEListviewItemEditor.btnAddItemClick(Sender: TObject);
var tn: TTreeNode;
begin
tn:=treeview1.items.Add(nil, edtText.text);
tn.selected:=true;
treeview1.MakeSelectionVisible;
end;

procedure TfrmCEListviewItemEditor.btnAddSubItemClick(Sender: TObject);
var tn: TTreeNode;
begin
tn:=treeview1.selected;


if tn<>nil then
begin
while tn.Parent<>nil do
tn:=tn.parent;

tn:=treeview1.items.AddChild(tn, edtText.text);
tn.selected:=true;
treeview1.MakeSelectionVisible;
end;
end;

procedure TfrmCEListviewItemEditor.btnDeleteClick(Sender: TObject);
begin
if treeview1.selected<>nil then
treeview1.Selected.Delete;
end;

procedure TfrmCEListviewItemEditor.setControl(wc: twincontrol);
var
lv: TCEListView;
i,j: integer;

tn: TTreeNode;
begin
c:=wc;

lv:=TCEListview(wc);

treeview1.Items.clear;

for i:=0 to lv.items.Count-1 do
begin
tn:=treeview1.items.Add(nil, lv.Items[i].Caption);
for j:=0 to lv.items[i].SubItems.Count-1 do
treeview1.Items.AddChild(tn, lv.items[i].SubItems[j]);
end;
end;


procedure TCEListViewItemsPropertyEditor.Edit;
var lv: TCEListview;
begin
lv:=TCEListView(GetComponent(0));

with TfrmCEListviewItemEditor.create(application) do
begin
setControl(lv);
if showmodal=mrok then
modified;

free;
end;
end;

function TCEListViewItemsPropertyEditor.GetAttributes: TPropertyAttributes;
begin
Result:=[paDialog, paReadOnly, paRevertable];
end;

end.

Loading

0 comments on commit 310ff09

Please sign in to comment.