Mator

TTreeView with checkboxes in jvinterpreter

Apr 9th, 2015
357
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Pascal 5.13 KB | None | 0 0
  1. {
  2.   Description
  3. }
  4. unit userscript;
  5.  
  6. uses mteFunctions;
  7.  
  8. const
  9.   cChecked = 1;
  10.   cUnChecked = 2;
  11.   cPartiallyChecked = 3;
  12.  
  13. var
  14.   frm: TForm;
  15.   TreeView1: TTreeView;
  16.   ImageList1: TCustomImageList;
  17.  
  18. procedure SetChildren(Node:TTreeNode; state:Integer);
  19. var
  20.   tmp:TTreeNode;
  21. begin
  22.   // exit if node not assigned
  23.   if not Assigned(Node) then exit;
  24.  
  25.   // set first child and all siblings to state
  26.   Node.StateIndex := state;
  27.   tmp := Node.getNextSibling;
  28.   if Assigned(tmp) then SetChildren(tmp, state);
  29.  
  30.   // set all children to state
  31.   tmp := Node.getFirstChild;
  32.   if Assigned(tmp) then SetChildren(tmp, state);
  33. end;
  34.  
  35. procedure SetParents(Node:TTreeNode);
  36. var
  37.   tmp:TTreeNode;
  38.   state:Integer;
  39. begin
  40.   // exit if node not assigned
  41.   if not Assigned(Node) then exit;
  42.  
  43.   // parent state is checked if all siblings are checked
  44.   state := cChecked;
  45.   tmp := Node.getFirstChild;
  46.   while Assigned(tmp) do begin
  47.     if tmp.StateIndex <> cChecked then begin
  48.       state := cPartiallyChecked;
  49.       break;
  50.     end;
  51.     tmp := tmp.getNextSibling;
  52.   end;
  53.  
  54.   // parent state is unchecked if all siblings are unchecked
  55.   if state = cPartiallyChecked then begin
  56.     state := cUnChecked;
  57.     tmp := Node.getFirstChild;
  58.     while Assigned(tmp) do begin
  59.       if tmp.StateIndex <> cUnChecked then begin
  60.         state := cPartiallyChecked;
  61.         break;
  62.       end;
  63.       tmp := tmp.getNextSibling;
  64.     end;
  65.   end;
  66.  
  67.   // set state, recurse to next parent
  68.   Node.StateIndex := state;
  69.   tmp := Node.Parent;
  70.   if Assigned(tmp) then
  71.     SetParents(tmp);
  72. end;
  73.  
  74. procedure ToggleTreeViewCheckBoxes(Node:TTreeNode);
  75. var
  76.   tmp:TTreeNode;
  77. begin
  78.   if Assigned(Node) then begin
  79.     if (Node.StateIndex = cUnChecked)
  80.     or (Node.StateIndex = cPartiallyChecked) then begin
  81.       Node.StateIndex := cChecked;
  82.       SetChildren(Node.getFirstChild, cChecked);
  83.       SetParents(Node.Parent);
  84.     end
  85.     else if Node.StateIndex = cChecked then begin
  86.       Node.StateIndex := cUnChecked;
  87.       SetChildren(Node.getFirstChild, cUnChecked);
  88.       SetParents(Node.Parent);
  89.     end;
  90.   end; // if Assigned(Node)
  91. end;
  92.  
  93. procedure TreeView1Click(Sender: TObject; Button: TMouseButton;
  94.   Shift: TShiftState; X, Y: Integer);
  95. var
  96.   HT: THitTests;
  97. begin
  98.   HT := TreeView1.GetHitTestInfoAt(X, Y);
  99.   if (HT - [htOnStateIcon] <> HT) then
  100.     ToggleTreeViewCheckBoxes(TreeView1.Selected);
  101. end;
  102.  
  103. procedure TreeView1KeyDown(Sender: TObject; var Key: Word;
  104.   Shift: TShiftState);
  105. begin
  106.   if (Key = VK_SPACE) and Assigned(TreeView1.Selected) then
  107.     ToggleTreeViewCheckBoxes(TreeView1.Selected);
  108. end;
  109.  
  110. function Initialize: integer;
  111. var
  112.   pic: TPicture;
  113.   bmpChecked, bmpUnChecked, bmpPChecked: TBitmap;
  114.   AssetPath: string;
  115.   node, n, acti, armo, cobj: TTreeNode;
  116. begin
  117.   // load images
  118.   ImageList1 := TCustomImageList.Create(nil);
  119.   pic := TPicture.Create;
  120.   AssetPath := ScriptsPath + 'smash\assets\';
  121.  
  122.   bmpChecked := TBitmap.Create;
  123.   bmpUnChecked := TBitmap.Create;
  124.   bmpPChecked := TBitmap.Create;
  125.  
  126.   pic.LoadFromFile(AssetPath + 'Check.bmp');
  127.   bmpChecked.SetSize(17, 17);
  128.   bmpChecked.Canvas.Draw(0, 0, pic.Graphic);  
  129.  
  130.   pic.LoadFromFile(AssetPath + 'UnCheck.bmp');
  131.   bmpUnChecked.SetSize(17, 17);
  132.   bmpUnChecked.Canvas.Draw(0, 0, pic.Graphic);  
  133.  
  134.   pic.LoadFromFile(AssetPath + 'PartialCheck.bmp');
  135.   bmpPChecked.SetSize(17, 17);
  136.   bmpPChecked.Canvas.Draw(0, 0, pic.Graphic);  
  137.  
  138.   ImageList1.Add(bmpChecked, nil);
  139.   ImageList1.Add(bmpChecked, nil);
  140.   ImageList1.Add(bmpUnChecked, nil);
  141.   ImageList1.Add(bmpPChecked, nil);
  142.  
  143.   frm := TForm.Create(nil);
  144.   try
  145.     frm.Caption := 'CheckBoxTree Text';
  146.     frm.Width := 400;
  147.     frm.Height := 500;
  148.  
  149.     TreeView1 := TTreeView.Create(frm);
  150.     TreeView1.Parent := frm;
  151.     TreeView1.Left := 4;
  152.     TreeView1.Top := 4;
  153.     TreeView1.Width := 376;
  154.     TreeView1.Height := 454;
  155.     TreeView1.Indent := 19;
  156.     TreeView1.ReadOnly := true;
  157.     node := TreeView1.Items.Add(nil, 'Records');
  158.     node.StateIndex := cChecked;
  159.     acti := TreeView1.Items.AddChild(node, 'ACTI');
  160.     acti.StateIndex := cChecked;
  161.     n := TreeView1.Items.AddChild(acti, 'EDID - Editor ID');
  162.     n.StateIndex := cChecked;
  163.     n := TreeView1.Items.AddChild(acti, 'FNAM - Flags');
  164.     n.StateIndex := cChecked;
  165.     n := TreeView1.Items.AddChild(acti, 'FULL - Name');
  166.     n.StateIndex := cChecked;
  167.     n := TreeView1.Items.AddChild(acti, 'KNAM - Interaction Keyword');
  168.     n.StateIndex := cChecked;
  169.     n := TreeView1.Items.AddChild(acti, 'KSIZ - Keyword Count');
  170.     n.StateIndex := cChecked;
  171.     n := TreeView1.Items.AddChild(acti, 'Model');
  172.     n.StateIndex := cChecked;
  173.     n := TreeView1.Items.AddChild(acti, 'OBND - Object Bounds');
  174.     n.StateIndex := cChecked;
  175.     armo := TreeView1.Items.AddChild(node, 'ARMO');
  176.     armo.StateIndex := cChecked;
  177.     cobj := TreeView1.Items.AddChild(node, 'COBJ');
  178.     cobj.StateIndex := cChecked;
  179.     TreeView1.StateImages := ImageList1;
  180.     TreeView1.OnMouseDown := TreeView1Click;
  181.     TreeView1.OnKeyDown := TreeView1KeyDown;
  182.    
  183.     if frm.ShowModal = mrOk then
  184.       AddMessage('ok');
  185.   finally
  186.     frm.Free;
  187.   end;
  188.   Result := 0;
  189. end;
  190.  
  191. end.
Advertisement
Add Comment
Please, Sign In to add comment