From: Peter T. <pe...@us...> - 2003-01-15 12:24:25
|
Update of /cvsroot/jvcl/jvcl/examples/Diagram3DependencyWalker In directory sc8-pr-cvs1:/tmp/cvs-serv7600/examples/Diagram3DependencyWalker Modified Files: MainFrm.dfm MainFrm.pas StatsFrm.dfm Added Files: DepWalkConsts.pas PrintFrm.dfm PrintFrm.pas Log Message: Added "print" to text, html amd xml files --- NEW FILE: DepWalkConsts.pas --- unit DepWalkConsts; interface type TPrintFormat = (pfText,pfHTML,pfXML); implementation end. --- NEW FILE: PrintFrm.dfm --- object frmPrint: TfrmPrint Left = 311 Top = 187 BorderStyle = bsDialog Caption = 'Print' ClientHeight = 126 ClientWidth = 360 Color = clBtnFace Font.Charset = DEFAULT_CHARSET Font.Color = clWindowText Font.Height = -11 Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False Position = poMainFormCenter DesignSize = ( 360 126) PixelsPerInch = 96 TextHeight = 13 object Label1: TLabel Left = 16 Top = 16 Width = 67 Height = 13 Caption = 'Output format:' end object cbFormat: TComboBox Left = 16 Top = 32 Width = 328 Height = 21 Style = csDropDownList Anchors = [akLeft, akTop, akRight] ItemHeight = 13 TabOrder = 0 Items.Strings = ( 'Text' 'HTML' 'XML') end object btnOK: TButton Left = 184 Top = 85 Width = 75 Height = 25 Anchors = [akRight, akBottom] Caption = 'OK' Default = True ModalResult = 1 TabOrder = 1 end object btnCancel: TButton Left = 264 Top = 85 Width = 75 Height = 25 Anchors = [akRight, akBottom] Cancel = True Caption = 'Cancel' ModalResult = 2 TabOrder = 2 end end --- NEW FILE: PrintFrm.pas --- unit PrintFrm; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, DepWalkConsts; type TfrmPrint = class(TForm) Label1: TLabel; cbFormat: TComboBox; btnOK: TButton; btnCancel: TButton; private { Private declarations } public { Public declarations } class function Execute(var aFormat:TPrintFormat):boolean; end; implementation {$R *.dfm} { TfrmPrint } class function TfrmPrint.Execute(var aFormat: TPrintFormat): boolean; begin with self.Create(Application) do try cbFormat.ItemIndex := Ord(AFormat); Result := ShowModal = mrOK; if Result then AFormat := TPrintFormat(cbFormat.ItemIndex); finally Free; end; end; end. Index: MainFrm.dfm =================================================================== RCS file: /cvsroot/jvcl/jvcl/examples/Diagram3DependencyWalker/MainFrm.dfm,v retrieving revision 1.6 retrieving revision 1.7 diff -C2 -d -r1.6 -r1.7 *** MainFrm.dfm 15 Jan 2003 10:38:39 -0000 1.6 --- MainFrm.dfm 15 Jan 2003 12:24:21 -0000 1.7 *************** *** 1251,1255 **** object acDelete: TAction Category = 'Skiplist' ! Caption = 'Delete' ShortCut = 16430 OnExecute = acDeleteExecute --- 1251,1255 ---- object acDelete: TAction Category = 'Skiplist' ! Caption = 'Delete...' ShortCut = 16430 OnExecute = acDeleteExecute *************** *** 1274,1278 **** object acDelDiagram: TAction Category = 'Diagrams' ! Caption = 'Delete' OnExecute = acDelDiagramExecute end --- 1274,1278 ---- object acDelDiagram: TAction Category = 'Diagrams' ! Caption = 'Delete...' OnExecute = acDelDiagramExecute end Index: MainFrm.pas =================================================================== RCS file: /cvsroot/jvcl/jvcl/examples/Diagram3DependencyWalker/MainFrm.pas,v retrieving revision 1.8 retrieving revision 1.9 diff -C2 -d -r1.8 -r1.9 *** MainFrm.pas 15 Jan 2003 10:38:39 -0000 1.8 --- MainFrm.pas 15 Jan 2003 12:24:21 -0000 1.9 *************** *** 5,9 **** Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, JvDiagramShape, Dialogs, ComCtrls, Menus, ImgList, StdCtrls, ExtCtrls, ! ActnList, IniFiles, PersistSettings; type --- 5,9 ---- Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, JvDiagramShape, Dialogs, ComCtrls, Menus, ImgList, StdCtrls, ExtCtrls, ! ActnList, IniFiles, PersistSettings, DepWalkConsts; type *************** *** 86,89 **** --- 86,90 ---- private { Private declarations } + FPrintFormat:TPrintFormat; FFileShapes: TStringlist; FLeft, FTop: integer; *************** *** 94,98 **** procedure Clear; ! procedure CreatePrintOut(Strings: TStrings); function GetFileShape(const Filename: string): TJvBitmapShape; procedure ParseUnits(Files, Errors: TStrings); --- 95,99 ---- procedure Clear; ! procedure CreatePrintOut(Strings: TStrings; AFormat:TPrintFormat=pfText); function GetFileShape(const Filename: string): TJvBitmapShape; procedure ParseUnits(Files, Errors: TStrings); *************** *** 121,130 **** implementation uses ! JCLParseUses, Clipbrd, StatsFrm, ShellAPI; const FStartX = 50; FStartY = 50; ! FOffsetX = 100; FOffsetY = 50; --- 122,131 ---- implementation uses ! JCLParseUses, Clipbrd, StatsFrm, ShellAPI, PrintFrm; const FStartX = 50; FStartY = 50; ! FOffsetX = 75; FOffsetY = 50; *************** *** 166,169 **** --- 167,176 ---- end; + function YesNo(const ACaption,AMsg:string):boolean; + begin + Result := MessageBox(GetFocus,PChar(AMsg),PChar(ACaption), + MB_YESNO or MB_ICONQUESTION or MB_TASKMODAL) = IDYES; + end; + procedure SuspendRedraw(AControl: TWinControl; Suspend: boolean); begin *************** *** 447,452 **** // add the actual file FS := GetFileShape(AFilename); ! if AUses.Count > 0 then ! Inc(FLeft, FOffsetX); for i := 0 to AUses.Count - 1 do begin --- 454,458 ---- // add the actual file FS := GetFileShape(AFilename); ! Inc(FLeft,FOffsetX); for i := 0 to AUses.Count - 1 do begin *************** *** 655,659 **** end; ! procedure TfrmMain.CreatePrintOut(Strings: TStrings); var i, j, ATag: integer; --- 661,665 ---- end; ! procedure TfrmMain.CreatePrintOut(Strings: TStrings; AFormat:TPrintFormat=pfText); var i, j, ATag: integer; *************** *** 678,702 **** ATag := -1; // no need to sort: FFileShapes already sorted by name SortItems(ATag, AList, acInvertSort.Checked); - for i := 0 to AList.Count - 1 do begin AShape := TJvBitmapShape(AList[i]); ! UsesUnits(AShape, UsesStrings); ! UsedByUnits(AShape, UsedByStrings); ! ! Strings.Add(ChangeFileExt(AShape.Caption.Text, '.pas')); ! Strings.Add(' uses:'); ! if UsesStrings.Count < 1 then ! Strings.Add(' (none)') ! else for j := 0 to UsesStrings.Count - 1 do ! Strings.Add(' ' + UsesStrings[j]); ! Strings.Add(' used by:'); ! if UsedByStrings.Count < 1 then ! Strings.Add(' (none)') ! else for j := 0 to UsedByStrings.Count - 1 do ! Strings.Add(' ' + UsedByStrings[j]); end; finally UsedByStrings.Free; --- 684,752 ---- ATag := -1; // no need to sort: FFileShapes already sorted by name SortItems(ATag, AList, acInvertSort.Checked); for i := 0 to AList.Count - 1 do begin AShape := TJvBitmapShape(AList[i]); ! UsesUnits(AShape, UsesStrings,''); ! UsedByUnits(AShape, UsedByStrings,''); ! case AFormat of ! pfText: ! begin ! Strings.Add(AShape.Caption.Text); ! Strings.Add(' uses:'); ! if UsesStrings.Count < 1 then ! Strings.Add(' (none)') ! else ! for j := 0 to UsesStrings.Count - 1 do ! Strings.Add(' ' + UsesStrings[j]); ! Strings.Add(' used by:'); ! if UsedByStrings.Count < 1 then ! Strings.Add(' (none)') ! else ! for j := 0 to UsedByStrings.Count - 1 do ! Strings.Add(' ' + UsedByStrings[j]); ! end; ! pfHTML: ! begin ! Strings.Add(Format('<h3>%s:</h3>',[AShape.Caption.Text])); ! if UsesStrings.Count > 0 then ! Strings.Add('<b>uses:</b>'); ! Strings.Add('<ul>'); for j := 0 to UsesStrings.Count - 1 do ! Strings.Add('<li>' + UsesStrings[j]); ! Strings.Add('</ul>'); ! if UsedByStrings.Count > 0 then ! Strings.Add('<b>used by:</b>'); ! Strings.Add('<ul>'); for j := 0 to UsedByStrings.Count - 1 do ! Strings.Add('<li>' + UsedByStrings[j]); ! Strings.Add('</ul>'); ! end; ! pfXML: ! begin ! Strings.Add(Format('<UNIT Name="%s">',[AShape.Caption.Text])); ! for j := 0 to UsesStrings.Count - 1 do ! Strings.Add(Format('<USES Name="%s" />',[UsesStrings[j]])); ! for j := 0 to UsedByStrings.Count - 1 do ! Strings.Add(Format('<USEDBY Name="%s" />',[UsedByStrings[j]])); ! Strings.Add('</UNIT>'); ! end; ! end; // case end; + // insert headers and footers: + case AFormat of + pfXML: + begin + Strings.Insert(0,'<?xml version="1.0" encoding="UTF-8" standalone="yes"?><DependencyWalker>'); + Strings.Add('</DependencyWalker>'); + end; + pfHTML: + begin + Strings.Insert(0,'<html><head><title>Dependency Walker</title></head>'); + Strings.Insert(1,'<body style="font-family:verdana,arial,sans serif,helvetica"><h1>Dependency Walker</h1><hr>'); + // Strings.Insert(2,'<h2>Legend:</h2><ul type="disc"><li> denotes "uses"</ul><ul type="square"><li>denotes "used by"</ul>'); + + Strings.Add('</body></html>'); + end; + end; // finally UsedByStrings.Free; *************** *** 749,752 **** --- 799,803 ---- i: integer; begin + if not YesNo('Confirm delete','Delete selected items?') then Exit; with lbSkipList do for i := Items.Count - 1 downto 0 do *************** *** 762,766 **** procedure TfrmMain.acClearExecute(Sender: TObject); begin ! Clear; end; --- 813,818 ---- procedure TfrmMain.acClearExecute(Sender: TObject); begin ! if YesNo('Confirm delete','Clear diagram?') then ! Clear; end; *************** *** 783,786 **** --- 835,839 ---- Height := Storage.ReadInteger(ClassName, 'Height', Height); acInvertSort.Checked := Storage.ReadBool(ClassName, 'InvertSort', false); + FPrintFormat := TPrintFormat(Storage.ReadInteger(ClassName,'Print Format',0)); end; *************** *** 793,798 **** Storage.WriteInteger(ClassName, 'Width', Width); Storage.WriteInteger(ClassName, 'Height', Height); - Storage.WriteBool(ClassName, 'InvertSort', acInvertSort.Checked); end; end; --- 846,852 ---- Storage.WriteInteger(ClassName, 'Width', Width); Storage.WriteInteger(ClassName, 'Height', Height); end; + Storage.WriteBool(ClassName, 'InvertSort', acInvertSort.Checked); + Storage.WriteInteger(ClassName,'Print Format',Ord(FPrintFormat)); end; *************** *** 855,859 **** // we need to remove the item from the FFileShapes list as well: AShape := GetFirstSelectedShape(sb); ! if AShape <> nil then begin i := FFileShapes.IndexOfObject(AShape); --- 909,913 ---- // we need to remove the item from the FFileShapes list as well: AShape := GetFirstSelectedShape(sb); ! if (AShape <> nil) and YesNo('Confirm delete',Format('Remove "%s" from diagram?',[AShape.Caption.Text])) then begin i := FFileShapes.IndexOfObject(AShape); *************** *** 865,879 **** procedure TfrmMain.acPrintExecute(Sender: TObject); ! var S: TStringlist; begin - WaitCursor; S := TStringlist.Create; try ! CreatePrintOut(S); if S.Count > 0 then begin ! S.SaveToFile(ExtractFilePath(Application.Exename) + 'printout.txt'); ! // show in Notepad: let user decide whether to print or not after viewing ! ShellExecute(Handle, 'open', PChar(ExtractFilePath(Application.Exename) + 'printout.txt'), nil, nil, SW_SHOWNORMAL); end; finally --- 919,939 ---- procedure TfrmMain.acPrintExecute(Sender: TObject); ! const ! cFormatExt:array[TPrintFormat] of PChar = ('.txt','.htm','.xml'); ! var ! S: TStringlist; ! AFileName:string; begin S := TStringlist.Create; try ! if not TfrmPrint.Execute(FPrintFormat) then Exit; ! WaitCursor; ! CreatePrintOut(S,FPrintFormat); if S.Count > 0 then begin ! AFilename := ExtractFilePath(Application.Exename) + 'DependencyWalker' + cFormatExt[FPrintFormat]; ! S.SaveToFile(AFilename); ! // show in default viewer: let user decide whether to print or not after viewing ! ShellExecute(Handle, 'open', PChar(AFilename), nil, nil, SW_SHOWNORMAL); end; finally Index: StatsFrm.dfm =================================================================== RCS file: /cvsroot/jvcl/jvcl/examples/Diagram3DependencyWalker/StatsFrm.dfm,v retrieving revision 1.1 retrieving revision 1.2 diff -C2 -d -r1.1 -r1.2 *** StatsFrm.dfm 15 Jan 2003 10:38:39 -0000 1.1 --- StatsFrm.dfm 15 Jan 2003 12:24:21 -0000 1.2 *************** *** 10,14 **** Font.Color = clWindowText Font.Height = -11 ! Font.Name = 'MS Sans Serif' Font.Style = [] OldCreateOrder = False --- 10,14 ---- Font.Color = clWindowText Font.Height = -11 ! Font.Name = 'MS Shell Dlg 2' Font.Style = [] OldCreateOrder = False *************** *** 28,32 **** Left = 8 Top = 72 ! Width = 42 Height = 13 Caption = 'Used by:' --- 28,32 ---- Left = 8 Top = 72 ! Width = 43 Height = 13 Caption = 'Used by:' |