Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- {
- Description
- }
- unit userscript;
- uses mteFunctions;
- const
- cChecked = 1;
- cUnChecked = 2;
- cPartiallyChecked = 3;
- var
- frm: TForm;
- TreeView1: TTreeView;
- ImageList1: TCustomImageList;
- procedure SetChildren(Node:TTreeNode; state:Integer);
- var
- tmp:TTreeNode;
- begin
- // exit if node not assigned
- if not Assigned(Node) then exit;
- // set first child and all siblings to state
- Node.StateIndex := state;
- tmp := Node.getNextSibling;
- if Assigned(tmp) then SetChildren(tmp, state);
- // set all children to state
- tmp := Node.getFirstChild;
- if Assigned(tmp) then SetChildren(tmp, state);
- end;
- procedure SetParents(Node:TTreeNode);
- var
- tmp:TTreeNode;
- state:Integer;
- begin
- // exit if node not assigned
- if not Assigned(Node) then exit;
- // parent state is checked if all siblings are checked
- state := cChecked;
- tmp := Node.getFirstChild;
- while Assigned(tmp) do begin
- if tmp.StateIndex <> cChecked then begin
- state := cPartiallyChecked;
- break;
- end;
- tmp := tmp.getNextSibling;
- end;
- // parent state is unchecked if all siblings are unchecked
- if state = cPartiallyChecked then begin
- state := cUnChecked;
- tmp := Node.getFirstChild;
- while Assigned(tmp) do begin
- if tmp.StateIndex <> cUnChecked then begin
- state := cPartiallyChecked;
- break;
- end;
- tmp := tmp.getNextSibling;
- end;
- end;
- // set state, recurse to next parent
- Node.StateIndex := state;
- tmp := Node.Parent;
- if Assigned(tmp) then
- SetParents(tmp);
- end;
- procedure ToggleTreeViewCheckBoxes(Node:TTreeNode);
- var
- tmp:TTreeNode;
- begin
- if Assigned(Node) then begin
- if (Node.StateIndex = cUnChecked)
- or (Node.StateIndex = cPartiallyChecked) then begin
- Node.StateIndex := cChecked;
- SetChildren(Node.getFirstChild, cChecked);
- SetParents(Node.Parent);
- end
- else if Node.StateIndex = cChecked then begin
- Node.StateIndex := cUnChecked;
- SetChildren(Node.getFirstChild, cUnChecked);
- SetParents(Node.Parent);
- end;
- end; // if Assigned(Node)
- end;
- procedure TreeView1Click(Sender: TObject; Button: TMouseButton;
- Shift: TShiftState; X, Y: Integer);
- var
- HT: THitTests;
- begin
- HT := TreeView1.GetHitTestInfoAt(X, Y);
- if (HT - [htOnStateIcon] <> HT) then
- ToggleTreeViewCheckBoxes(TreeView1.Selected);
- end;
- procedure TreeView1KeyDown(Sender: TObject; var Key: Word;
- Shift: TShiftState);
- begin
- if (Key = VK_SPACE) and Assigned(TreeView1.Selected) then
- ToggleTreeViewCheckBoxes(TreeView1.Selected);
- end;
- function Initialize: integer;
- var
- pic: TPicture;
- bmpChecked, bmpUnChecked, bmpPChecked: TBitmap;
- AssetPath: string;
- node, n, acti, armo, cobj: TTreeNode;
- begin
- // load images
- ImageList1 := TCustomImageList.Create(nil);
- pic := TPicture.Create;
- AssetPath := ScriptsPath + 'smash\assets\';
- bmpChecked := TBitmap.Create;
- bmpUnChecked := TBitmap.Create;
- bmpPChecked := TBitmap.Create;
- pic.LoadFromFile(AssetPath + 'Check.bmp');
- bmpChecked.SetSize(17, 17);
- bmpChecked.Canvas.Draw(0, 0, pic.Graphic);
- pic.LoadFromFile(AssetPath + 'UnCheck.bmp');
- bmpUnChecked.SetSize(17, 17);
- bmpUnChecked.Canvas.Draw(0, 0, pic.Graphic);
- pic.LoadFromFile(AssetPath + 'PartialCheck.bmp');
- bmpPChecked.SetSize(17, 17);
- bmpPChecked.Canvas.Draw(0, 0, pic.Graphic);
- ImageList1.Add(bmpChecked, nil);
- ImageList1.Add(bmpChecked, nil);
- ImageList1.Add(bmpUnChecked, nil);
- ImageList1.Add(bmpPChecked, nil);
- frm := TForm.Create(nil);
- try
- frm.Caption := 'CheckBoxTree Text';
- frm.Width := 400;
- frm.Height := 500;
- TreeView1 := TTreeView.Create(frm);
- TreeView1.Parent := frm;
- TreeView1.Left := 4;
- TreeView1.Top := 4;
- TreeView1.Width := 376;
- TreeView1.Height := 454;
- TreeView1.Indent := 19;
- TreeView1.ReadOnly := true;
- node := TreeView1.Items.Add(nil, 'Records');
- node.StateIndex := cChecked;
- acti := TreeView1.Items.AddChild(node, 'ACTI');
- acti.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'EDID - Editor ID');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'FNAM - Flags');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'FULL - Name');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'KNAM - Interaction Keyword');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'KSIZ - Keyword Count');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'Model');
- n.StateIndex := cChecked;
- n := TreeView1.Items.AddChild(acti, 'OBND - Object Bounds');
- n.StateIndex := cChecked;
- armo := TreeView1.Items.AddChild(node, 'ARMO');
- armo.StateIndex := cChecked;
- cobj := TreeView1.Items.AddChild(node, 'COBJ');
- cobj.StateIndex := cChecked;
- TreeView1.StateImages := ImageList1;
- TreeView1.OnMouseDown := TreeView1Click;
- TreeView1.OnKeyDown := TreeView1KeyDown;
- if frm.ShowModal = mrOk then
- AddMessage('ok');
- finally
- frm.Free;
- end;
- Result := 0;
- end;
- end.
Advertisement
Add Comment
Please, Sign In to add comment