home *** CD-ROM | disk | FTP | other *** search
/ Chip 2001 September / Chip_2001-09_cd1.bin / zkuste / delphi / kolekce / d56 / RMCTL.ZIP / rmInspectorEdit.pas < prev    next >
Pascal/Delphi Source File  |  2001-06-22  |  16KB  |  622 lines

  1. {================================================================================
  2. Copyright (C) 1997-2001 Mills Enterprise
  3.  
  4. Unit     : rmInspectorItems
  5. Purpose  : This is THE designtime unit to help with selecting and creating
  6.            rmInspectorItems.
  7. Date     : 01-18-2001
  8. Author   : Ryan J. Mills
  9. Version  : 1.80
  10. ================================================================================}
  11.  
  12. unit rmInspectorEdit;
  13.  
  14. interface
  15.  
  16. {$I CompilerDefines.INC}
  17.  
  18. {@$DEFINE rmDesign}
  19.  
  20. {$ifdef BD6}
  21. uses {$IFNDEF rmDesign}DesignIntf, DesignEditors, TypInfo, {$ENDIF}Classes, Forms, ExtCtrls, StdCtrls, Controls,
  22.   rmInspector, rmInspectorItems, windows, rmTreeNonView, Dialogs, rmTabs3x, rmLabel,
  23.   ActnList;
  24. {$else}
  25. uses {$IFNDEF rmDesign}DsgnIntf, TypInfo, {$ENDIF}Classes, Forms, ExtCtrls, StdCtrls, Controls,
  26.   rmInspector, rmInspectorItems, windows, rmTreeNonView, Dialogs, rmTabs3x, rmLabel,
  27.   ActnList;
  28. {$endif}
  29.  
  30. type
  31.   TfrmInspectorEditor = class(TForm)
  32.     Panel3: TPanel;
  33.     btnCancel: TButton;
  34.     btnOK: TButton;
  35.     Panel1: TPanel;
  36.     Panel2: TPanel;
  37.     Label2: TLabel;
  38.     Panel5: TPanel;
  39.     rmTabSet1: TrmTabSet;
  40.     Notebook1: TNotebook;
  41.     Label10: TLabel;
  42.     Label7: TLabel;
  43.     Label8: TLabel;
  44.     Label9: TLabel;
  45.     ItemType: TrmLabel;
  46.     itemName: TEdit;
  47.     ItemText: TEdit;
  48.     ItemValue: TEdit;
  49.     ItemDesc: TEdit;
  50.     Label3: TLabel;
  51.     Label4: TLabel;
  52.     edtStrPassChar: TEdit;
  53.     edtStrMaxLen: TEdit;
  54.     Panel6: TPanel;
  55.     Label1: TLabel;
  56.     rmInspector1: TrmInspector;
  57.     btnNew: TButton;
  58.     btnNewSub: TButton;
  59.     btnDelete: TButton;
  60.     Label5: TLabel;
  61.     mCmbItems: TMemo;
  62.     cbxIntUseRanges: TCheckBox;
  63.     Panel7: TPanel;
  64.     Label6: TLabel;
  65.     edtIntMinVal: TEdit;
  66.     Label11: TLabel;
  67.     edtIntMaxVal: TEdit;
  68.     Label12: TLabel;
  69.     ActionList1: TActionList;
  70.     actNewItem: TAction;
  71.     actNewSubItem: TAction;
  72.     actDeleteItem: TAction;
  73.     Label13: TLabel;
  74.     Label14: TLabel;
  75.     edtDateformat: TEdit;
  76.     procedure actNewExecute(Sender: TObject);
  77.     procedure actNewSubExecute(Sender: TObject);
  78.     procedure btnDeleteClick(Sender: TObject);
  79.     procedure rmInspector1ItemIndexChanged(Sender: TObject);
  80.     procedure FormCreate(Sender: TObject);
  81.     procedure rmInspector1ItemIndexChanging(CurrentNode,
  82.       NewNode: TrmTreeNonViewNode; var AllowChange: Boolean);
  83.     procedure Button1Click(Sender: TObject);
  84.     procedure rmTabSet1Change(Sender: TObject; NewTab: Integer;
  85.       var AllowChange: Boolean);
  86.     procedure edtStrMaxLenExit(Sender: TObject);
  87.     procedure edtStrPassCharExit(Sender: TObject);
  88.     procedure edtStrPassCharEnter(Sender: TObject);
  89.     procedure edtStrMaxLenEnter(Sender: TObject);
  90.     procedure cbxIntUseRangesClick(Sender: TObject);
  91.     procedure edtIntMinValEnter(Sender: TObject);
  92.     procedure edtIntMaxValEnter(Sender: TObject);
  93.     procedure edtIntMinValExit(Sender: TObject);
  94.     procedure ItemTextEnter(Sender: TObject);
  95.     procedure itemNameEnter(Sender: TObject);
  96.     procedure ItemValueEnter(Sender: TObject);
  97.     procedure ItemTextExit(Sender: TObject);
  98.     procedure ItemValueExit(Sender: TObject);
  99.     procedure itemNameExit(Sender: TObject);
  100.     procedure actNewSubItemUpdate(Sender: TObject);
  101.     procedure actDeleteItemUpdate(Sender: TObject);
  102.     procedure mCmbItemsEnter(Sender: TObject);
  103.     procedure mCmbItemsExit(Sender: TObject);
  104.     procedure edtDateformatEnter(Sender: TObject);
  105.     procedure edtDateformatExit(Sender: TObject);
  106.     procedure edtIntMaxValExit(Sender: TObject);
  107.   private
  108.     { Private declarations }
  109.     fOldValue: string;
  110.     procedure GetItemValues;
  111.     procedure EnabledProperties(Enable: boolean);
  112.     function UpdateItem: boolean;
  113.     procedure NewItem(ParentNode:TrmTreeNonViewNode);
  114.   public
  115.     { Public declarations }
  116.   end;
  117.  
  118. {$IFNDEF rmDesign}
  119.   TrmInspectorItemsProperty = class(TPropertyEditor)
  120.     function GetAttributes: TPropertyAttributes; override;
  121.     function GetValue: string; override;
  122.   end;
  123.  
  124.   TrmInspectorEditor = class(TComponentEditor)
  125.   private
  126.     procedure ClearData;
  127.     procedure EditItems;
  128.   public
  129.     function GetVerb(index: integer): string; override;
  130.     function GetVerbCount: integer; override;
  131.     procedure ExecuteVerb(index: integer); override;
  132.   end;
  133. {$ENDIF}
  134.  
  135. var
  136.   frmInspectorEditor: TfrmInspectorEditor;
  137.  
  138. implementation
  139.  
  140. {$R *.DFM}
  141.  
  142. uses
  143.   rmLibrary, sysutils, rmInspectorEdit2;
  144.  
  145. procedure TfrmInspectorEditor.actNewExecute(Sender: TObject);
  146. begin
  147.   NewItem(nil);
  148. end;
  149.  
  150. procedure TfrmInspectorEditor.actNewSubExecute(Sender: TObject);
  151. begin
  152.    NewItem(rmInspector1.CurrentNode);
  153. end;
  154.  
  155. procedure TfrmInspectorEditor.btnDeleteClick(Sender: TObject);
  156. begin
  157.   if assigned(rmInspector1.CurrentItem) then
  158.     rmInspector1.DeleteItem(rmInspector1.CurrentItemPath);
  159. end;
  160.  
  161. procedure TfrmInspectorEditor.rmInspector1ItemIndexChanged(
  162.   Sender: TObject);
  163. begin
  164.   Notebook1.ActivePage := 'Standard';
  165.   if assigned(rmInspector1.CurrentItem) then
  166.   begin
  167.     GetItemValues;
  168.     EnabledProperties(true);
  169.   end
  170.   else
  171.   begin
  172.     ItemName.text := '';
  173.     ItemDesc.Text := '';
  174.     ItemValue.text := '';
  175.     ItemText.Text := '';
  176.     ItemType.Caption := '';
  177.     EnabledProperties(false);
  178.   end;
  179. end;
  180.  
  181. procedure TfrmInspectorEditor.FormCreate(Sender: TObject);
  182. begin
  183.   enabledProperties(false);
  184.   Notebook1.PageIndex := 0;
  185. end;
  186.  
  187. procedure TfrmInspectorEditor.EnabledProperties(Enable: boolean);
  188. begin
  189.   ItemName.enabled := enable;
  190.   ItemDesc.enabled := enable;
  191.   ItemValue.enabled := enable;
  192.   ItemText.enabled := enable;
  193.   Notebook1.Enabled := enable;
  194.   rmTabSet1.Enabled := enable;
  195. end;
  196.  
  197. {$IFNDEF rmDesign}
  198.  
  199. { TrmInspectorEditor }
  200.  
  201. procedure TrmInspectorEditor.ClearData;
  202. begin
  203.   if assigned(Component) then
  204.   begin
  205.     TrmInspector(Component).ClearItems;
  206.     designer.modified;
  207.   end;
  208. end;
  209.  
  210. procedure TrmInspectorEditor.EditItems;
  211. var
  212.   MyDialog: TfrmInspectorEditor;
  213. begin
  214.   MyDialog := TfrmInspectorEditor.Create(Application);
  215.   try
  216.     MyDialog.rmInspector1.AssignItems(TrmInspector(Component));
  217.     if MyDialog.ShowModal = mrOK then
  218.     begin
  219.       TrmInspector(Component).AssignItems(MyDialog.rmInspector1);
  220.       designer.Modified;
  221.     end;
  222.   finally
  223.     MyDialog.Free;
  224.   end;
  225. end;
  226.  
  227. procedure TrmInspectorEditor.ExecuteVerb(index: integer);
  228. begin
  229.   case index of
  230.     0: EditItems;
  231.     1: ClearData;
  232.   end;
  233. end;
  234.  
  235. function TrmInspectorEditor.GetVerb(index: integer): string;
  236. begin
  237.   case index of
  238.     0: result := 'Edit Items...';
  239.     1: result := 'Clear Items';
  240.   end;
  241. end;
  242.  
  243. function TrmInspectorEditor.GetVerbCount: integer;
  244. begin
  245.   result := 2;
  246. end;
  247.  
  248. { TrmInspectorItemsProperty }
  249.  
  250. function TrmInspectorItemsProperty.GetAttributes: TPropertyAttributes;
  251. begin
  252.   Result := [paReadOnly];
  253. end;
  254.  
  255. function TrmInspectorItemsProperty.GetValue: string;
  256. begin
  257.   Result := '<TrmInspectorItems>';
  258. end;
  259.  
  260. {$ENDIF}
  261.  
  262. procedure TfrmInspectorEditor.rmInspector1ItemIndexChanging(CurrentNode,
  263.   NewNode: TrmTreeNonViewNode; var AllowChange: Boolean);
  264. begin
  265. {  if assigned(CurrentNode) then
  266.     AllowChange := UpdateItem;}
  267. end;
  268.  
  269. function TfrmInspectorEditor.UpdateItem: boolean;
  270. var
  271.   wPath : string;
  272. begin
  273.   result := false;
  274.   if assigned(rmInspector1.CurrentNode) then
  275.   begin
  276.     if (ItemName.text <> '') and (ItemText.Text <> '') then
  277.     begin
  278.       if assigned(rmInspector1.currentNode.parent) then
  279.          wPath := rmInspector1.currentNode.parent.NodePath
  280.       else
  281.          wPath := '';
  282.  
  283.       if (rmInspector1.Items.LocateNode(wPath+rmInspector1.SepChar+ItemText.Text) <> nil) then
  284.       begin
  285.          showmessage('An item with that text already appears in that level');
  286.          exit;
  287.       end;
  288. //      ApplyItemChanges;
  289.       result := true;
  290.     end
  291.     else
  292.     begin
  293.       showmessage('The Object Name and the Item Text properties must contain a value');
  294.       exit;
  295.     end;
  296.   end;
  297. end;
  298.  
  299. procedure TfrmInspectorEditor.Button1Click(Sender: TObject);
  300. begin
  301.   if UpdateItem then
  302.     rmInspector1.Invalidate;
  303. end;
  304.  
  305. procedure TfrmInspectorEditor.rmTabSet1Change(Sender: TObject;
  306.   NewTab: Integer; var AllowChange: Boolean);
  307. begin
  308.   if NewTab = 1 then
  309.     Notebook1.ActivePage := rmTabSet1.Tabs[NewTab] + '_' + rmInspector1.CurrentItem.ClassName
  310.   else
  311.     Notebook1.ActivePage := rmTabSet1.Tabs[NewTab];
  312. end;
  313.  
  314. procedure TfrmInspectorEditor.edtStrMaxLenExit(Sender: TObject);
  315. begin
  316.   try
  317.     strtoint(edtStrMaxLen.text);
  318.     TrmStringInspectorItem(rmInspector1.CurrentItem).MaxLength := strtoint(edtStrMaxLen.text);
  319.   except
  320.     on e:Exception do
  321.     begin
  322.        ShowMessage(e.message);
  323.        edtStrMaxLen.text := fOldValue;
  324.     end;
  325.   end;
  326. end;
  327.  
  328. procedure TfrmInspectorEditor.edtStrPassCharExit(Sender: TObject);
  329. begin
  330.   try
  331.     edtStrPassChar.text := chartostr(strtochar(edtStrPassChar.text));
  332.     TrmStringInspectorItem(rmInspector1.CurrentItem).PasswordChar := strtochar(edtStrPassChar.text);
  333.   except
  334.     on e: exception do
  335.     begin
  336.       showmessage(e.message);
  337.       edtstrpasschar.text := foldvalue;
  338.     end;
  339.   end;
  340. end;
  341.  
  342. procedure TfrmInspectorEditor.edtStrPassCharEnter(Sender: TObject);
  343. begin
  344.   fOldValue := edtStrPassChar.text;
  345. end;
  346.  
  347. procedure TfrmInspectorEditor.edtStrMaxLenEnter(Sender: TObject);
  348. begin
  349.   fOldValue := edtStrMaxLen.text;
  350. end;
  351.  
  352. procedure TfrmInspectorEditor.GetItemValues;
  353. var
  354.   wItem: TrmCustomInspectorItem;
  355. begin
  356.   wItem := rmInspector1.CurrentItem;
  357.   ItemName.text := wItem.Name;
  358.   ItemDesc.Text := wItem.Hint;
  359.   ItemValue.text := wItem.AsString;
  360.   ItemText.Text := rmInspector1.CurrentNode.Text;
  361.   ItemType.Caption := wItem.ClassName;
  362.  
  363.   if wItem.ClassType = TrmStringInspectorItem then
  364.   begin
  365.     with TrmStringInspectorItem(wItem) do
  366.     begin
  367.       edtStrPassChar.text := chartostr(PasswordChar);
  368.       edtStrMaxLen.text := inttostr(MaxLength);
  369.     end;
  370.   end
  371.  
  372.   else if wItem.ClassType = TrmComplexInspectorItem then
  373.   begin
  374.      // Nothing To Set...
  375.   end
  376.  
  377.   else if wItem.ClassType = TrmComboInspectorItem then
  378.   begin
  379.     with TrmComboInspectorItem(wItem) do
  380.     begin
  381.       mCmbItems.Lines.assign(Items);
  382.     end;
  383.   end
  384.  
  385.   else if wItem.ClassType = TrmIntegerInspectorItem then
  386.   begin
  387.     with TrmIntegerInspectorItem(wItem) do
  388.     begin
  389.       edtIntMinVal.text := IntToStr(MinValue);
  390.       edtIntMaxVal.text := IntToStr(MaxValue);
  391.       cbxIntUseRanges.Checked := UseRange;
  392.     end;
  393.   end
  394.  
  395.   else if wItem.ClassType = TrmDateInspectorItem then
  396.   begin
  397.     with TrmDateInspectorItem(wItem) do
  398.     begin
  399.        edtDateformat.text := DateFormat;
  400.     end;
  401.   end;
  402. end;
  403.  
  404. procedure TfrmInspectorEditor.cbxIntUseRangesClick(Sender: TObject);
  405. begin
  406.   TrmIntegerInspectorItem(rmInspector1.CurrentItem).UseRange := cbxIntUseRanges.Checked;
  407.   label6.Enabled := cbxIntUseRanges.Checked;
  408.   label11.Enabled := cbxIntUseRanges.Checked;
  409.   edtIntMinVal.Enabled := cbxIntUseRanges.Checked;
  410.   edtIntMaxVal.Enabled := cbxIntUseRanges.Checked;
  411. end;
  412.  
  413. procedure TfrmInspectorEditor.edtIntMinValEnter(Sender: TObject);
  414. begin
  415.   fOldValue := edtIntMinVal.Text;
  416. end;
  417.  
  418. procedure TfrmInspectorEditor.edtIntMaxValEnter(Sender: TObject);
  419. begin
  420.   fOldValue := edtIntMaxVal.Text;
  421. end;
  422.  
  423. procedure TfrmInspectorEditor.edtIntMinValExit(Sender: TObject);
  424. begin
  425.    try
  426.      StrToInt(edtIntMinVal.text);
  427.      TrmIntegerInspectorItem(rmInspector1.CurrentItem).MinValue := StrToInt(edtIntMinVal.text);
  428.    except
  429.      on E: Exception do
  430.      begin
  431.        showmessage(E.Message);
  432.        edtIntMinVal.Text := fOldValue;
  433.      end;
  434.    end;
  435. end;
  436.  
  437. procedure TfrmInspectorEditor.ItemTextEnter(Sender: TObject);
  438. begin
  439.    fOldValue := ItemText.text;
  440. end;
  441.  
  442. procedure TfrmInspectorEditor.itemNameEnter(Sender: TObject);
  443. begin
  444.    fOldValue := ItemName.text;
  445. end;
  446.  
  447. procedure TfrmInspectorEditor.ItemValueEnter(Sender: TObject);
  448. begin
  449.    fOldValue := ItemValue.text;
  450. end;
  451.  
  452. procedure TfrmInspectorEditor.ItemTextExit(Sender: TObject);
  453. var
  454.    wPath : string;
  455.    wNode : TrmTreeNonViewNode;
  456. begin
  457.    if ItemText.Text <> '' then
  458.    begin
  459.       if assigned(rmInspector1.currentNode.parent) then
  460.          wPath := rmInspector1.currentNode.parent.NodePath
  461.       else
  462.          wPath := '';
  463.  
  464.       wNode := rmInspector1.Items.LocateNode(wPath+rmInspector1.SepChar+ItemText.Text);
  465.       if (wNode <> nil) and (wNode <> rmInspector1.currentNode) then
  466.       begin
  467.          showmessage('An item with that text already appears in that level');
  468.          ItemText.Text := foldValue;
  469.       end
  470.       else
  471.          rmInspector1.CurrentNode.Text := ItemText.Text;
  472.       rmInspector1.Invalidate;
  473.    end
  474.    else
  475.    begin
  476.       showmessage('Each item must have a Text value');
  477.       ItemText.Text := foldValue;
  478.    end
  479. end;
  480.  
  481. procedure TfrmInspectorEditor.ItemValueExit(Sender: TObject);
  482. begin
  483.    try
  484.       rmInspector1.CurrentItem.AsString := ItemValue.Text;
  485.    except
  486.       on e:Exception do
  487.       begin
  488.          showmessage(e.message);
  489.          ItemValue.text := fOldValue;
  490.       end;
  491.    end;
  492. end;
  493.  
  494. procedure TfrmInspectorEditor.itemNameExit(Sender: TObject);
  495. begin
  496.    try
  497.       rmInspector1.CurrentItem.Name := ItemName.Text;
  498.    except
  499.       on e:Exception do
  500.       begin
  501.          showmessage(e.message);
  502.          ItemName.text := fOldValue;
  503.       end;
  504.    end;
  505. end;
  506.  
  507. procedure TfrmInspectorEditor.actNewSubItemUpdate(Sender: TObject);
  508. begin
  509.    actNewSubItem.enabled := rmInspector1.currentItem <> nil;
  510. end;
  511.  
  512. procedure TfrmInspectorEditor.actDeleteItemUpdate(Sender: TObject);
  513. begin
  514.    actDeleteItem.Enabled := rmInspector1.currentItem <> nil;
  515. end;
  516.  
  517. procedure TfrmInspectorEditor.NewItem(ParentNode: TrmTreeNonViewNode);
  518. var
  519.   wPath: string;
  520.   frmItemTypes: TfrmInspectorItemTypes;
  521.   wItem: TrmCustomInspectorItem;
  522.   wIndex: integer;
  523.   wValue : string;
  524.   wFound : boolean;
  525. begin
  526.   frmItemTypes := TfrmInspectorItemTypes.create(self);
  527.   try
  528.     if frmItemTypes.ShowModal = mrok then
  529.     begin
  530.       wPath := rmInspector1.sepchar + 'New Item';
  531.  
  532.       if ParentNode <> nil then
  533.          wPath := ParentNode.NodePath+wPath;
  534.  
  535.       wIndex := 1;
  536.       while rmInspector1.FindInspectorItem(wPath + inttostr(wIndex)) <> nil do
  537.            inc(wIndex);
  538.  
  539.  
  540.       if frmItemTypes.ChosenType = TrmIntegerInspectorItem then
  541.          wValue := '0'
  542.       else if frmItemTypes.ChosenType = TrmDateInspectorItem then
  543.          wValue := DateToStr(now)
  544.       else
  545.          wValue := '<Empty Value>';
  546.  
  547.       wItem := rmInspector1.AddInspectorItem(wPath + inttostr(wIndex), wValue, frmItemTypes.ChosenType);
  548.  
  549.       if assigned(wItem) then
  550.       begin
  551.         wValue := wItem.ClassName;
  552.         delete(wValue, 1, 1);
  553.         wIndex := 1;
  554.         wFound := true;
  555.         while wFound do
  556.         try
  557.            wItem.Name := wValue+inttostr(wIndex);;
  558.            wFound := false;
  559.         except
  560.            inc(wIndex);
  561.         end;
  562.         rmInspector1.CurrentNode := wItem.PathNode;
  563.       end;
  564.     end;
  565.   finally
  566.     frmItemTypes.free;
  567.   end;
  568. end;
  569.  
  570. procedure TfrmInspectorEditor.mCmbItemsEnter(Sender: TObject);
  571. begin
  572.    fOldValue := mcmbitems.text;
  573. end;
  574.  
  575. procedure TfrmInspectorEditor.mCmbItemsExit(Sender: TObject);
  576. begin
  577.    try
  578.       TrmComboInspectorItem(rmInspector1.CurrentItem).Items.Text := mCmbItems.Text;
  579.    except
  580.       on e:Exception do
  581.       begin
  582.          showmessage(e.message);
  583.          mCmbItems.Text := fOldValue;
  584.       end;
  585.    end;
  586. end;
  587.  
  588. procedure TfrmInspectorEditor.edtDateformatEnter(Sender: TObject);
  589. begin
  590.    fOldValue := edtDateFormat.Text;
  591. end;
  592.  
  593. procedure TfrmInspectorEditor.edtDateformatExit(Sender: TObject);
  594. begin
  595.    Try
  596.       TrmDateInspectorItem(rmInspector1.CurrentItem).DateFormat := edtDateformat.text;
  597.    except
  598.       on E:Exception do
  599.       begin
  600.          ShowMessage(e.message);
  601.          EdtDateFormat.Text := fOldValue; 
  602.       end;
  603.    end
  604. end;
  605.  
  606. procedure TfrmInspectorEditor.edtIntMaxValExit(Sender: TObject);
  607. begin
  608.    try
  609.      StrToInt(edtIntMaxVal.text);
  610.      TrmIntegerInspectorItem(rmInspector1.CurrentItem).MaxValue := StrToInt(edtIntMaxVal.text);
  611.    except
  612.      on E: Exception do
  613.      begin
  614.        showmessage(E.Message);
  615.        edtIntMaxVal.Text := fOldValue;
  616.      end;
  617.    end;
  618. end;
  619.  
  620. end.
  621.  
  622.