unit Modeler;
//-----------------------------------------------------------------
//
//1. Bracketing ausgeschaltet
//...
//
//-----------------------------------------------------------------
interface
//-----------------------------------------------------------------
//
//-----------------------------------------------------------------
uses
//-----------------------------------------------------------------
//local
//-----------------------------------------------------------------
GenDefs,OwnUtils,Frame11,Frame22,Frame33,Graphs,StatusThread,Command,
OptionClass,SearchReplace,AboutBox,Sample,ThreadExecute,Lizenz,
Utilities,Splash,Language,Natural,ColorDialog,MDIClass,Editor,FullScreen,
//-----------------------------------------------------------------
//global
//-----------------------------------------------------------------
Forms,Menus,Dialogs,Extctrls,Controls,ComCtrls,StdCtrls,Classes,
Types,Messages,Graphics,ImgList,ToolWin;
//-------------------------------------------------------
//Types
//-------------------------------------------------------
type
TModelFrame=
class(TForm)
MainMenu1:TMainMenu;
File1:TMenuItem;
Exit1:TMenuItem;
FontDialog:TFontDialog;
View1:TMenuItem;
Font2:TMenuItem;
Oeffne:TMenuItem;
Hilfe1:TMenuItem;
Hilfe2:TMenuItem;
ber1:TMenuItem;
Frame11:TFrame1;
Frame21:TFrame2;
Frame31:TFrame3;
SplitterVertical:TSplitter;
Farben:TMenuItem;
Speichere:TMenuItem;
Speichernunter:TMenuItem;
Syntaxhervorhebung1:TMenuItem;
Zeilennummern1:TMenuItem;
N2:TMenuItem;
N3:TMenuItem;
N4:TMenuItem;
N5:TMenuItem;
NeueVersion1:TMenuItem;
Druckvorschau:TMenuItem;
Edit1:TMenuItem;
Kopieren:TMenuItem;
Suchen1:TMenuItem;
Ausschneiden1:TMenuItem;
Einfuegen1:TMenuItem;
N6:TMenuItem;
Ersetzen1:TMenuItem;
N7:TMenuItem;
Allesauswhlen1:TMenuItem;
IconImageList:TImageList;
Default1:TMenuItem;
Navigation1:TMenuItem;
Vor1:TMenuItem;
Zur1:TMenuItem;
Home1:TMenuItem;
ToolBar1:TToolBar;
Oeffnen:TToolButton;
Template:TToolButton;
Speichern:TToolButton;
Zur:TToolButton;
Vor:TToolButton;
Home:TToolButton;
Split:TToolButton;
Previewbutton:TToolButton;
SaveDialog:TSaveDialog;
Optionen1:TMenuItem;
Simulation:TMenuItem;
Auf:TToolButton;
Ab:TToolButton;
Inspector1:TMenuItem;
Split1:TMenuItem;
N12:TMenuItem;
Neu1:TMenuItem;
N13:TMenuItem;
Blocknummern:TMenuItem;
SplitterHorizontal:TSplitter;
Auf1:TMenuItem;
Ab1:TMenuItem;
Ersetzenwiederholt1:TMenuItem;
Simulation1:TToolButton;
Exportieren1:TMenuItem;
Undo:TMenuItem;
N1:TMenuItem;
Aktivierung1:TMenuItem;
Execute1:TMenuItem;
Execute:TToolButton;
Hochformat:TToolButton;
Querformat:TToolButton;
PrintButton:TToolButton;
PDFButton:TToolButton;
Drucken1:TMenuItem;
Importieren1:TMenuItem;
N9:TMenuItem;
Leerzeichen1:TMenuItem;
ToolBar2:TToolBar;
Panel1:TPanel;
SwitchIDEPrint:TToolButton;
Sprache1:TMenuItem;
N8:TMenuItem;
Vollbild1:TMenuItem;
Suchen:TToolButton;
Ersetzen:TToolButton;
Zeilennummern:TToolButton;
SyntaxHighLite:TToolButton;
ToolButton1:TToolButton;
ToolButton2:TToolButton;
ToolButton3:TToolButton;
ToolButton4:TToolButton;
ApplicationIcons:TImageList;
ToolButton5:TToolButton;
ToolButton7:TToolButton;
ToolButton8:TToolButton;
ToolButton9:TToolButton;
PopupMenu1:TPopupMenu;
rckgngig2:TMenuItem;
ausschneiden2:TMenuItem;
kopieren22:TMenuItem;
einfgen2:TMenuItem;
N11:TMenuItem;
allesauswhlen2:TMenuItem;
N14:TMenuItem;
PopupMenu2:TPopupMenu;
allesauswhlen3:TMenuItem;
kopieren3:TMenuItem;
Kopieren2:TToolButton;
Ausschneiden:TToolButton;
Einfuegen:TToolButton;
ToolButton15:TToolButton;
UndoButton:TToolButton;
ToolButton10:TToolButton;
ToolButton12:TToolButton;
ToolButton13:TToolButton;
Lizenzerwerben1:TMenuItem;
ToolButton11:TToolButton;
Dateityp1:TMenuItem;
Oeffne2:TToolButton;
ToolButton14:TToolButton;
Feedback1:TMenuItem;
Indenting:TToolButton;
Indenting2:TMenuItem;
N15:TMenuItem;
ContextIT1:TMenuItem;
N16:TMenuItem;
N17:TMenuItem;
N10:TMenuItem;
N18:TMenuItem;
PopupMenu3:TPopupMenu;
drucken2:TMenuItem;
N19:TMenuItem;
drucken3:TMenuItem;
PopupMenu4:TPopupMenu;
drucken11:TMenuItem;
N20:TMenuItem;
verallgemeinern:TMenuItem;
insDetail1:TMenuItem;
drucken4:TMenuItem;
PopupMenu5:TPopupMenu;
drucken5:TMenuItem;
Zoomin:TToolButton;
Zoomout:TToolButton;
ZoomNormal: TToolButton;
procedure SemantikChange(Sender:TObject;Node:TTreeNode);
procedure NavigatorChange(Sender:TObject;Node:TTreeNode);
procedure GraphClick(Sender:TObject);
procedure GraphDblClick(Sender:TObject);
procedure FormMouseWheel(Sender:TObject;Shift:TShiftState;
WheelDelta:
Integer;MousePos:TPoint;
var Handled:
Boolean);
procedure Simulation1Click(Sender:TObject);
procedure InspectorClick(Sender:TObject);
Procedure UpDateInspector(LTP:PLongTexts;TT:TTreeNode);
procedure AbClick(Sender:TObject);
procedure AufClick(Sender:TObject);
procedure SetFrameOptions;
procedure SetWindowColors;
procedure SetWindowFonts;
Procedure RepairHistory();
procedure DisplayHistory();
function findinHistory(F:JString):
Integer;
Procedure SavetoHistory(F:JString);
procedure LoadfromHistory(Fn:JString);
procedure sortHistory();
procedure Setnavigation();
procedure SaveView();
procedure NavGetImageIndex(Sender:TObject;Node:TTreeNode);
procedure NavGetSelectedIndex(Sender:TObject;Node:TTreeNode);
procedure Font2Click(Sender:TObject);
function MakeFilters(filnam:JString):
Integer;
procedure OeffnenClick(Sender:TObject);
procedure Hilfe2Click(Sender:TObject);
procedure AboutClick(Sender:TObject);
procedure SplitterVerticalMoved(Sender:TObject);
procedure ProcessFile(Fn,Ft:JString);
procedure TreeClick(Sender:TObject);
procedure TreeSelChange(Sender:TObject;
var Key:
Word;Shift:TShiftState);
procedure FarbenClick(Sender:TObject);
procedure Zeilennummern1Click(Sender:TObject);
procedure SpeichernunterClick(Sender:TObject);
procedure Syntaxhighlight1Click(Sender:TObject);
procedure Backwards(Sender:TObject);
procedure Walk(Prev,this:TFramestate;F:Frames);
procedure Forwards(Sender:TObject);
procedure Homewards(Sender:TObject);
function Viewof(F:Frames):FrameView;
procedure DistributeFrames;
procedure GetFramePointers;
procedure SplitFrames(Sender:TObject);
procedure DrawBothImages;
procedure ExportCSV(Outname:JString);
procedure ExportXML(Outname:JString);
procedure ExportText(Outname:JString);
procedure ExportProgram(Outname:JString);
procedure ExportImage(Outname:JString);
procedure Importieren1Click(Sender:TObject);
procedure TreeDblClick(Sender:TObject);
procedure MaxFrame1(Sender:TObject);
procedure MaxFrame2(Sender:TObject);
procedure MaxFrame3(Sender:TObject);
procedure Druckereinstellung1Click(Sender:TObject);
procedure TemplateClick(Sender:TObject);
procedure NeueVersion1Click(Sender:TObject);
procedure KopierenClick(Sender:TObject);
procedure Allesauswhlen1Click(Sender:TObject);
procedure Ausschneiden1Click(Sender:TObject);
procedure Einfuegen1Click(Sender:TObject);
procedure SuchFunktion(Sender:TObject);
procedure Ersetzen1Click(Sender:TObject);
procedure ExplorerClick(Sender:TObject);
procedure PageControlChange(Sender:TObject);
procedure SetShortcuts;
procedure ShowFileTypes;
procedure getCommandLineParameters();
procedure Optionen1Click(Sender:TObject);
procedure PageControlDragDrop(Sender,Source:TObject;X,Y:
Integer);
procedure PageControlDragOver(Sender,Source:TObject;X,Y:
Integer;
State:TDragState;
var Accept:
Boolean);
procedure SetFrameIndex(TS:TTabSheet);
procedure SetAsParent(
var Sheet:TTabSheet;F:Frames);
function getallFiles(Files:AnsiString):
Integer;
procedure Frame11SemantikEnter(Sender:TObject);
Procedure DllWatcher(St:
Boolean);
procedure BlocknummernClick(Sender:TObject);
procedure FormShow(Sender:TObject);
procedure FormCreate(Sender:TObject);
procedure FormClose(Sender:TObject;
var Action:TCloseAction);
procedure SplitterHorizontalMoved(Sender:TObject);
procedure FeedBackDialogack1Click(Sender:TObject);
procedure Ersetzenwiederholt1Click(Sender:TObject);
procedure Frame11InspectorClick(Sender:TObject);
procedure Frame11InspectorKeyUp(Sender:TObject;
var Key:
Word;
Shift:TShiftState);
procedure Exportieren1Click(Sender:TObject);
procedure FormResize(Sender:TObject);
procedure SpeichernClick(Sender:TObject);
procedure GraphMouseMove(Sender:TObject;Shift:TShiftState;X,Y:
Integer);
function GraphCoordinates(G:TGraph;
var S:TTabSheet;
var F:TFrame;
P:TPoint):TPoint;
procedure FileTypeClick(Sender:TObject);
procedure MarkFileTypes(FTyp:JString);
procedure Honeypot();
inline;
procedure Realcheck();
inline;
procedure undoClick(Sender:TObject);
procedure Aktivierung1Click(Sender:TObject);
procedure ExecuteClick(Sender:TObject);
procedure ExecuteEnd(Sender:TObject);
procedure LizenzzeigenClick(Sender:TObject);
procedure Frame21SourceChange(Sender:TObject);
procedure ProvideExecutable();
procedure DruckvorschauClick(Sender:TObject);
procedure HochformatClick(Sender:TObject);
procedure QuerformatClick(Sender:TObject);
procedure PDFButtonClick(Sender:TObject);
procedure PrintButtonClick(Sender:TObject);
procedure ZoomChange(Sender:TObject);
procedure Frame31PageNavigatorClick(Sender:TObject);
procedure Leerzeichen1Click(Sender:TObject);
procedure ShowPreview();
procedure ShowIDE();
procedure resetMDI();
procedure setFrameStatus(Sender:TObject);
Procedure SwitchtoEnglish();
procedure Sprache1Click(Sender:TObject);
procedure Vollbild1Click(Sender:TObject);
procedure Exit1Click(Sender:TObject);
procedure setFrame11Ratio();
procedure setFrame3Ratio();
procedure FormattedFile(Fn:JString);
procedure Frame21FunktionKeyUp(Sender:TObject;
var Key:
Word;
Shift:TShiftState);
procedure Frame11ExplorerChange(Sender:TObject;Node:TTreeNode);
procedure SourceMouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:
Integer);
procedure SourceDblClick(Sender:TObject);
procedure FullscreenMouseDown(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:
Integer);
procedure Frame21FunktionMouseUp(Sender:TObject;Button:TMouseButton;
Shift:TShiftState;X,Y:
Integer);
procedure Frame21SourceSelectionChange(Sender:TObject);
procedure Frame11SplitterInspectorMoved(Sender:TObject);
procedure PageControlMouseMove(Sender:TObject;Shift:TShiftState;
X,Y:
Integer);
procedure Feedback1Click(Sender:TObject);
procedure SetActivePage(F:Frames;V:ViewType);
procedure LanguageProcessor(Fn:JString;LexOnly:
Boolean;cols:
Integer;
forcedll:JString);
destructor Destroy;override;
procedure checkedition();
function guesstime(filelen:
Integer;say:
Boolean):
Boolean;
inline;
procedure Lizenzerwerben1Click(Sender:TObject);
procedure inslist(S:TextString;
var TS:TextStrings);
procedure ComboBox1Change(Sender:TObject);
procedure ComboBox1Click(Sender:TObject);
procedure ComboBox1Notify();
function initSearchReplace(Search,Replace:JString;regex:
Boolean;
Kind:SeaRepFun):
Boolean;
procedure AskforSearchReplace();
procedure GuessEditortime(last:TDateTime;items:
Integer;
var val:
Integer);
procedure SavetoSourcestack();
procedure LoadfromSourcestack();
procedure IndentingClick(Sender:TObject);
procedure ContextIT1Click(Sender:TObject);
procedure SetEditorOptions;
public
//other dialogues
SearchReplaceDialog:TSearchReplace;
AboutDialog:TAboutBox;
SamplesDialog:TSamples;
ColorDialog:TColorForm;
Fullscr:TFullScreen1;
//machine
WinProductId,CPU,IP,IPaddr,EthernetAddr:JString;
//actual file infos
CStatus,ActDLLInfo:PAnsiChar;
//llnav,llsem,llcfa,lldfa:Integer;
Duration:
Integer;
Sep:JString;
//mousecontrol
Mousepressed:
Boolean;
Horizontalratio,Verticalratio:
Integer;
//checking
globtim:
Integer;
//drag&drop
SizeRect:TRect;
MouseButton:TMouseButton;
//threads
MyThread:TMyThread;
LastThread:TStatusThread;
Sourcestate:
Boolean;
Previousselstart:
Integer;
Previousfile:JString;
firsthistory:
boolean;
end;
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
var
ModelFrame:TModelFrame;
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
implementation
uses
//----------------------------------------------------------------------------
//specific
//----------------------------------------------------------------------------
Windows,SysUtils,ColorGrd,Grids,ValEdit,
Buttons,SyncObjs,Math,Jpeg,Printers,ShellApi,
Clipbrd,StrUtils,DateUtils,WideStrings;
//----------------------------------------------------------------------------
//
//----------------------------------------------------------------------------
{
$R *.dfm}
//------------------------------------------------------------------
//--
//FormCreate --
//--
//------------------------------------------------------------------
procedure TModelFrame.FormCreate(Sender:TObject);
var
Icf:TIcon;
begin
Closing:=false;
Opening:=true;
processing:=false;
SaveDialog:=
nil;
globtim:=0;
//FeedBackDialog:=nil;
Sep:=
'-';
LastMousePos.X:=0;
LastMousePos.Y:=0;
Inspectorkey:=
'';
//DBAccess.password:=MidStr(DBAccess.user,2,3);
//now create Dialogs
AboutDialog:=TAboutBox.Create(self);
SamplesDialog:=TSamples.Create(self);
SearchReplaceDialog:=TSearchReplace.Create(self);
ColorDialog:=TColorForm.Create(self);
Fullscr:=TFullScreen1.Create(self);
Fullscr.Image1.OnMouseDown:=FullscreenMouseDown;
Fullscr.Hide();
//licensing
Lizenz1.checklicense();
getCommandLineParameters();
//find file with license
lang:=Opt.R.Language;
Horizontalratio:=(100*SplitterVertical.left)
div width;
Verticalratio:=(100*SplitterHorizontal.Top)
div height;
Netflag:=false;
//
Caption:=Application.Title+
' '+Version_IDE;
//get Icon
Icf:=TIcon.Create;
if Application.Title=Title_Elbe
then
ApplicationIcons.GetIcon(1,Icf)
else
ApplicationIcons.GetIcon(0,Icf);
self.Icon.Assign(Icf);
AboutDialog.Icon.Assign(Icf);
Opt.Icon.Assign(Icf);
ColorDialog.Icon.Assign(Icf);
//
MDI:=TDocument.Create;
MDI.GC:=TGraph.Create(Opt.R.FontSize,Opt.R.LineThickness,Opt.R.FontColor,
Opt.R.BackgroundColor,Opt.R.FontName,Opt.R.FontStyle,17,
trans(lang,145,
'Kontrollflu�'));
MDI.GD:=TGraph.Create(Opt.R.FontSize,Opt.R.LineThickness,Opt.R.FontColor,
Opt.R.BackgroundColor,Opt.R.FontName,Opt.R.FontStyle,18,
trans(lang,146,
'Datenflu�'));
//
GetFramePointers;
SetFrameOptions;
RepairHistory();
MakeFilters(Opt.R.Infile);
//Resize Splash
Opt.R.Activationstart:=Opt.R.Activated;
Frame21.Source.CreateBackup:=Opt.R.CreateBackup;
Frame21.Source.OnDblClick:=SourceDblClick;
//language
Undo.Hint:=
'r�ckg�ngig machen';
Indenting.Hint:=
'CodeFormatierung';
with Opt
do begin
ValueList.TitleCaptions[0]:=
'Prozessor';
ValueList.TitleCaptions[1]:=
'Erweiterungen';
//get extensions
getValueList();
getfileassociations();
end;
if Opt.R.Language=english
then begin
SwitchtoEnglish();
lang:=english;
end;
//
Frame11.Navigator.OnKeyUp:=TreeSelChange;
Frame11.Semantik.OnKeyUp:=TreeSelChange;
//
Filelist:=
nil;
Previewselected:=false;
Presentationdone:=false;
Indenting2.OnClick:=IndentingClick;
Previousselstart:=0;
Previousfile:=
'';
firsthistory:=true;
end;
//------------------------------------------------------------------
//--
//destroy --
//--
//------------------------------------------------------------------
destructor TModelFrame.Destroy;
var
i:
Integer;
begin
//----------------------------------------------------------------------
//free frames
//----------------------------------------------------------------------
Closing:=true;
//----------------------------------------------------------------------
for i:=0
to length(ADHAndle)-1
do
FreeLibrary(ADHAndle[i]);
end;
//------------------------------------------------------------------
//--
//parameters from command line
//--
//------------------------------------------------------------------
procedure TModelFrame.getCommandLineParameters();
var
PS:JString;
i:
Integer;
begin
//------------------------------------------------
//look for parameters and catenate them
//------------------------------------------------
if ParamStr(1)<>
'' then begin //it must be a filename
PS:=
'';
for i:=1
to ParamCount
do begin
if PS>
'' then
PS:=PS+
' ';
PS:=PS+ParamStr(i);
end;
setl(Opt.R.Infile,PS);
end;
end;
//------------------------------------------------------------------
//--
//ProvideExecutable --
//--
//------------------------------------------------------------------
procedure TModelFrame.ProvideExecutable();
var
isf,isc:
Boolean;
begin
isf:=(LowerCase(ExtractFileExt(Frame21.Source.LoadedFile))=
'.bat')
or
(LowerCase(ExtractFileExt(Frame21.Source.LoadedFile))=
'.cmd');
isc:=(Opt.R.CommandFile>
'');
if isf
then
Execute1.Hint:=trans(lang,38,
'Diese Datei ausf�hren')
else if isc
then
Execute1.Hint:=trans(lang,39,
'das vordefinierte Stapel-Kommando ausf�hren');
Execute.Hint:=Execute1.Hint;
Execute.enabled:=isf
or isc;
Execute1.enabled:=Execute.enabled;
end;
//------------------------------------------------------------------
//--
//SetWindowColors --
//--
//------------------------------------------------------------------
procedure TModelFrame.SetWindowColors;
begin
//fonts and colors
Frame11.Navigator.Color:=Opt.R.BackgroundColor;
Frame11.Semantik.Color:=Opt.R.BackgroundColor;
Frame11.Explorer.Color:=Opt.R.BackgroundColor;
Frame21.Source.Color:=Opt.R.BackgroundColor;
Frame21.measures.Color:=Opt.R.BackgroundColor;
Frame21.Funktion.Color:=Opt.R.BackgroundColor;
Frame11.Inspector.Color:=Opt.R.BackgroundColor;
Frame31.ThumbnailPreview1.Color:=Opt.R.BackgroundColor;
Frame31.PrintPreview1.Color:=Opt.R.BackgroundColor;
end;
//------------------------------------------------------------------
//--
//SetWindowFonts --
//--
//------------------------------------------------------------------
procedure TModelFrame.SetWindowFonts;
var
F:TFont;
begin
F:=TFont.Create;
with F
do begin
Name:=Opt.R.FontName;
Style:=Opt.R.FontStyle;
Size:=Opt.R.FontSize;
Color:=Opt.R.FontColor;
end;
//fonts and colors
Frame11.Navigator.Font.Assign(F);
Frame11.Semantik.Font.Assign(F);
Frame11.Explorer.Font.Assign(F);
Frame11.Inspector.Font.Assign(F);
Frame21.Source.Font.Assign(F);
Frame21.Source.DefAttributes.Assign(F);
if Frame21.CFA<>
nil then
Frame21.CFA.Canvas.Font.Assign(F);
if Frame21.DFA<>
nil then
Frame21.DFA.Canvas.Font.Assign(F);
Frame21.measures.SelectAll;
Frame21.measures.Font.Assign(F);
Frame21.measures.DefAttributes.Assign(F);
Frame21.measures.SelLength:=0;
Frame21.Funktion.SelectAll;
Frame21.Funktion.Font.Assign(F);
Frame21.Funktion.DefAttributes.Assign(F);
Frame21.Funktion.SelLength:=0;
end;
//------------------------------------------------------------------
//--
//SetWinShow File Types --
//--
//------------------------------------------------------------------
procedure TModelFrame.ShowFileTypes;
var
i,j:
Integer;
M:TMenuItem;
Temp:JString;
Ft:
array of JString;
begin
setlength(Ft,length(extensions));
For i:=0
to length(extensions)-1
do
Ft[i]:=extensions[i].dllname;
For i:=0
to length(extensions)-2
do
For j:=i+1
to length(extensions)-1
do
if Ft[i]>Ft[j]
then begin
Temp:=Ft[j];
Ft[j]:=Ft[i];
Ft[i]:=Temp
end;
//create entries from history
For i:=0
to length(extensions)-1
do begin
M:=TMenuItem.Create(Dateityp1);
M.Caption:=Ft[i];
M.ImageIndex:=-1;
M.OnClick:=FileTypeClick;
Dateityp1.Add(M);
end;
//plain
M:=TMenuItem.Create(Dateityp1);
M.Caption:=
'-';
M.ImageIndex:=-1;
M.OnClick:=FileTypeClick;
Dateityp1.Add(M);
//plain
M:=TMenuItem.Create(Dateityp1);
M.Caption:=trans(lang,172,
'Rohtext');
M.ImageIndex:=-1;
M.OnClick:=FileTypeClick;
Dateityp1.Add(M);
end;
//------------------------------------------------------------------
//--
//Mark File Types --
//--
//------------------------------------------------------------------
procedure TModelFrame.MarkFileTypes(FTyp:JString);
var
i,ll:
Integer;
M:TMenuItem;
begin
//create entries from history
ll:=length(extensions)-1;
For i:=1
to ll
do begin
M:=Dateityp1.items[i-1];
M.Checked:=LowerCase(M.Caption)=LowerCase(FTyp);
end;
if pos(
'text',FTyp)>0
then begin
M:=Dateityp1.items[ll+1];
M.Checked:=true
end;
end;
//------------------------------------------------------------------
//Function FileType --
//--
//------------------------------------------------------------------
procedure TModelFrame.FileTypeClick(Sender:TObject);
var
M:TMenuItem;
FileTyp:JString;
begin
M:=(Sender
as TMenuItem);
FileTyp:=M.Caption;
if Frame21.Source.Modified
then
Frame21.Source.Save(true);
ProcessFile(Opt.R.Infile,FileTyp);
end;
//------------------------------------------------------------------
//Function Oeffnen --
//--
//------------------------------------------------------------------
procedure TModelFrame.IndentingClick(Sender:TObject);
begin
if Frame21.Source.Indentingpossible
then
with Frame21.Source
do begin
doindent:=true;
CreateHighlited(LoadedFileNumber);
doindent:=false;
setFrameStatus(Sender)
end;
end;
//------------------------------------------------------------------
//--
//SetEditorOptions --
//--
//------------------------------------------------------------------
procedure TModelFrame.SetEditorOptions;
begin
Frame21.Source.casesensitive:=Opt.R.casesensitive;
Frame21.Source.doWordWrap:=Opt.R.wordwrap;
Frame21.Source.regexpsearch:=Opt.R.regularexp;
Frame21.Source.CreateBackup:=Opt.R.CreateBackup;
Frame21.Source.ShowURL:=Opt.R.ShowURL;
Frame21.Source.Indentchars:=Opt.R.Indentchars;
Frame21.Source.Artificiallines:=Opt.R.Artificiallines;
end;
//------------------------------------------------------------------
//--
//SetFrameOptions --
//--
//------------------------------------------------------------------
procedure TModelFrame.SetFrameOptions;
begin
//set buttons + controls
Frame31.PrintButton:=PrintButton;
Frame31.Hochformat:=Hochformat;
Frame31.Querformat:=Querformat;
if Opt.R.UserName=
'' then
Opt.R.UserName:=
'unbekannter Benutzer';
//Size of Modelframe
Top:=Opt.R.Top;
left:=Opt.R.left;
width:=Opt.R.width;
height:=Opt.R.height;
if Application.Title=Title_Elbe
then begin
Opt.R.InspectorVisible:=false;
Opt.R.Blocknumbers:=false;
Opt.R.InspectorVisible:=false;
Inspector1.Checked:=false;
Inspector1.Visible:=false;
Split.Hide();
Split1.Visible:=false;
N5.Visible:=false;
Blocknummern.Visible:=false;
Importieren1.Visible:=false;
Exportieren1.Visible:=false;
N2.Visible:=false;
Leerzeichen1.Visible:=false;
end;
//Splitter and Print and Inspector
Frame11.width:=Opt.R.Frame1Width;
Horizontalratio:=(100*SplitterVertical.left)
div width;
Verticalratio:=(100*SplitterHorizontal.Top)
div height;
Inspector1.Checked:=Opt.R.InspectorVisible;
//setFrame11Ratio();
//
SetWindowColors;
SetWindowFonts;
//menu and toolbar
Zeilennummern1.Checked:=Opt.R.Linenumbers;
Blocknummern.Checked:=Opt.R.Blocknumbers;
Syntaxhervorhebung1.Checked:=Opt.R.SyntaxHighlight;
Leerzeichen1.Checked:=Opt.R.ShowSpaces;
SetEditorOptions();
//clear drag drop
Frame11.PageControl1.EndDrag(false);
Frame21.PageControl1.EndDrag(false);
Frame31.PageControl1.EndDrag(false);
//set keys and activation menu item
SetShortcuts;
if Opt.R.Activated
then begin
Aktivierung1.Visible:=false;
Lizenzerwerben1.Visible:=false;
N10.Visible:=false;
end;
//-------------------------------------------------
//Limnitations of Standard Edition
//-------------------------------------------------
if not Opt.R.ExportEnabled
then begin
if Exportieren1<>
nil then
Exportieren1.enabled:=false;
if Importieren1<>
nil then
Importieren1.enabled:=false;
end;
Opt.R.Frame1Page1Max:=false;
Opt.R.Frame2Page1Max:=false;
Opt.R.Frame3Page1Max:=false;
//
ShowFileTypes();
end;
//------------------------------------------------------------------
//--
//Change File --
//--
//------------------------------------------------------------------
procedure TModelFrame.UpDateInspector(LTP:PLongTexts;TT:TTreeNode);
var
ListItem:TListItem;
SN:JString;
function wof(X:JString):JString;
var
ii:JString;
begin
ii:=StringReplace(X,
'-',
'',[rfReplaceAll]);
ii:=StringReplace(ii,
'=',
'',[rfReplaceAll]);
wof:=ii
end;
procedure addi(L:JString);
var
zz:JString;
i:
Integer;
begin
with Frame11.Inspector
do begin
zz:=getpar(L,SN);
if L=S_Fil
then begin
i:=StrToInt(zz);
zz:=ExtractFileName(MDI.Source[i].Name);
end;
if (zz>
'')
then begin
ListItem:=items.Add;
ListItem.Caption:=wof(L);
ListItem.SubItems.Add(zz)
end
end;
end;
begin
if not Opening
then begin
if Inspector1.Checked
and(LTP<>
nil)
and(TT<>
nil)
and(TT.Text>
' ')
then begin
with Frame11.Inspector
do begin
ViewStyle:=vsReport;
SN:=Longeur(LTP,TT);
Inspectorkey:=SN;
if SN>
'' then begin
//while items.Count>0 do
items.clear;
addi(S_Lab);
addi(S_Id);
addi(S_Typ);
addi(S_Bas);
addi(S_Fmt);
addi(S_Ref);
addi(S_Pos);
addi(S_Lin);
addi(S_Col);
addi(S_Fil);
end;
Columns[1].width:=Frame11.width-Columns[0].width-10;
end;
Frame11.Inspector.Hint:=
'Inspector '+HintBox(getpar(S_Lab,SN));
end;
end;
end;
//--------------------------------------------------------------
//Page Navigator
//--------------------------------------------------------------
procedure TModelFrame.Frame31PageNavigatorClick(Sender:TObject);
begin
Frame31.PageNavigatorClick(Sender);
end;
//--------------------------------------------------------------
//splitter moved
//--------------------------------------------------------------
procedure TModelFrame.setFrameStatus(Sender:TObject);
const
hexen:
array [0..15]
of char=
'0123456789ABCDEF';
var
St,c,hex,RP,sst:JString;
dur:
real;
P:TPoint;
Li,Co,Ch:
Integer;
Insertmode:
Boolean;
begin
Caption:=Application.Title+
' '+Version_IDE+
' - '+ExtractFileName
(MDI.Source[MDI.fnr].Name);
St:=
'';
if Frame21.Source.LoadedFile<>Opt.R.Infile
then
St:=Frame21.Source.LoadedFile;
dur:=(Duration
div 1000)/1;
if dur>3
then
St:=MDI.Processor+
' ['+FloatToStr(dur)+
'sec] - '
else
St:=MDI.Processor+
' - ';
with Frame21
do begin
Insertmode:=true;
P:=Frame21.Source.getPos();
Li:=P.Y;
Co:=P.X;
sst:=
'';
if IsDebuggerPresent
then
with Source
do
sst:=
' st='+inttostr(SelStart)+
' cp='+inttostr(caretpos.X)+
','+inttostr
(caretpos.Y);
St:=St+
'['+inttostr(Li)+
':'+inttostr(Co)+sst+
']';
if Source.Modified
then
St:=St+
' '+trans(lang,173,
'ge�ndert')
else if Source.ReadOnly
then
St:=St+
' '+trans(lang,174,
'schreibgesch�tzt');
if Insertmode
then
c:=
' '+trans(lang,175,
'Einf�gen')
else
c:=
' '+trans(lang,176,
'Ersetzen');
end;
with Frame21.Source
do
if length(SelText)=1
then begin
hex:=SelText[1];
Ch:=
ord(hex[1]);
hex:=
' X'''+hexen[Ch
div 16]+hexen[Ch
mod 16]+
'''';
St:=St+hex
end;
if IsDebuggerPresent
then begin
RP:=
' P/F1/F2=/'+inttostr(MDI.TProc)+
'/'+inttostr(MDI.TFrame1)+
'/'+inttostr
(MDI.TFrame2);
St:=St+RP+Frame21.TimeRatio;
end;
Speichern.enabled:=Frame21.Source.Modified;
Split.enabled:=PageCount(Frame21.PageControl1)>1;
Simulation1.enabled:=Opt.R.CFA.Sheet.Visible
or Opt.R.DFA.Sheet.Visible;
with Frame11
do
Opt.Statusline(PageControl1,statusbar1,
'');
with Frame21
do
Opt.Statusline(PageControl1,statusbar1,St);
with Frame31
do
Opt.Statusline(PageControl1,statusbar1,
'');
Setnavigation();
end;
//--------------------------------------------------------------
//Inspectir
//--------------------------------------------------------------
procedure TModelFrame.InspectorClick(Sender:TObject);
begin
if Application.Title=Title_Columbo
then begin
Inspector1.Checked:=
not Inspector1.Checked;
Frame11.Inspector.Visible:=Inspector1.Checked;
Frame11.SplitterInspector.Visible:=Inspector1.Checked;
end;
setFrame11Ratio();
UpDateInspector(MDI.NavL,Frame11.Navigator.Selected);
end;
//------------------------------------------------------------------
//--
//get the files of a compilation/analysis --
//--
//------------------------------------------------------------------
function TModelFrame.getallFiles(Files:AnsiString):
Integer;
var
tthis:JString;
i,P,len:
Integer;
begin
P:=0;
if length(Files)>0
then begin
i:=1;
P:=0;
len:=length(Files);
while i<=len
do begin
if Files[i]=chr(Key_Linefeed)
then begin
P:=P+1;
tthis:=
'';
end;
i:=i+1;
end;
if P=0
then
errorn(68,
'Dateien korrupt, '+Files)
else begin
setlength(MDI.Source,P);
i:=1;
P:=0;
tthis:=
'';
while i<=len
do begin
if Files[i]<>chr(Key_Linefeed)
then begin
tthis:=tthis+Files[i]
end
else begin
MDI.Source[P].Name:=tthis;
//bug im Delphi??
MDI.Source[P].Typ:=RTF;
P:=P+1;
tthis:=
'';
end;
i:=i+1;
end;
end;
end;
getallFiles:=P
end;
//--------------------------------------------------------------
//Inspectir
//--------------------------------------------------------------
procedure TModelFrame.resetMDI();
begin
with MDI
do begin
CNav:=
nil;
KeyVerbs:=
'';
MDI.GC.CStream:=
nil;
MDI.GD.CStream:=
nil;
CSem:=
nil;
CMes:=
nil;
CFun:=
nil;
Cattr:=
nil;
CStatus:=
nil;
NavL:=
nil;
SEML:=
nil;
end;
end;
//--------------------------------------------------------------
//Inspectir
//--------------------------------------------------------------
function TModelFrame.guesstime(filelen:
Integer;say:
Boolean):
Boolean;
var
calctime1,calctime2,totaltime:
Integer;
Stat:JString;
allow:
Boolean;
begin
allow:=true;
//look at size
calctime1:=(filelen
div unitofbytes)*Opt.R.Timeper1000forProcessing;
calctime2:=(filelen
div unitofbytes)*
(Opt.R.Timeper1000forFrame1+Opt.R.Timeper1000forFrame2);
totaltime:=(calctime1+calctime2)
div 10;
if totaltime>3
then begin
Stat:=
'[~'+inttostr(totaltime)+
' sec]';
with Frame21
do
Opt.Statusline(PageControl1,statusbar1,Stat);
end;
//--------------------------------------------------
//check for limitations
//--------------------------------------------------
if (
not Opt.R.Activated)
and(filelen>maxfilesize)
then begin
if say
then
inform(162,
'Datei gr��er als '+inttostr(maxfilesize
div 1024)+
' kB.'+crlf+
'Dieses ist eine eingeschr�nkte Version von '+Application.Title+
'.'+
crlf+
' Eine vollst�ndige Lizenz bekommen Sie unter Hilfe:Lizenz erwerben.',
'');
allow:=false
end;
result:=allow;
end;
//--------------------------------------------------------------
//Inspectir
//--------------------------------------------------------------
procedure TModelFrame.LanguageProcessor(Fn:JString;LexOnly:
Boolean;cols:
Integer;
forcedll:JString);
var
warntime:
Integer;
FilePath,FileName:JString;
Libraries:AnsiString;
DllEdition:JString;
LexLang:
Integer;
PKeyVerbs,PNav,PGCStream,PGDStream,PSem,PMes,PFun,Pattr:PAnsiChar;
procedure snil(
var V:PAnsiChar);
begin
if (V<>
nil)
then
if length(V)=0
then
V:=
nil;
end;
procedure settonorm();
begin
with MDI
do begin
KeyVerbs:=PKeyVerbs;
CNav:=PNav;
GC.CStream:=PGCStream;
GD.CStream:=PGDStream;
CSem:=PSem;
CMes:=PMes;
CFun:=PFun;
Cattr:=Pattr;
if MDI.ReturnValue>1
then begin
snil(CNav);
CSem:=
nil;
MDI.GC.CStream:=
nil;
MDI.GD.CStream:=
nil;
CFun:=
nil;
CMes:=
nil;
end
else begin
snil(CNav);
snil(CSem);
snil(GC.CStream);
snil(GD.CStream);
snil(CMes);
snil(CFun);
end;
end;
end;
begin
FilePath:=ExtractFilePath(Fn);
FileName:=ExtractFileName(Fn);
//hide other windows
Screen.Cursor:=crHourGlass;
//now set them to zero
resetMDI();
ActDLLInfo:=@Opt.R.cc;
warntime:=Opt.R.Timeout*1000;
DllEdition:=EditionStrings[Opt.R.Edition];
Libraries:=AnsiString(
String(Opt.R.Libraries[1])+chr(Key_Linefeed));
if Opt.R.Libraries[2]<>
'' then
Libraries:=Libraries+AnsiString(Opt.R.Libraries[2])+AnsiString
(chr(Key_Linefeed));
if Opt.R.Libraries[3]<>
'' then
Libraries:=Libraries+AnsiString(Opt.R.Libraries[3]);
//add language and lexonly marker
LexLang:=
ord(LexOnly);
if Opt.R.Language<>german
then
LexLang:=LexLang+256;
SplashForm1.Init(60);
with MDI
do
MDI.ReturnValue:=dllcall(Opt.R.ProgramDir,Libraries,PKeyVerbs,FilePath,
FileName,LexLang,PNav,PGCStream,PGDStream,PSem,PMes,PFun,Pattr,cols,
DllEdition,CStatus,ActDLLInfo,warntime,forcedll);
settonorm();
getallFiles(Libraries);
SplashForm1.Progress(5);
end;
//------------------------------------------------------------------
//--
//Change File --
//--
//------------------------------------------------------------------
procedure TModelFrame.ProcessFile(Fn,Ft:JString);
var
Filex:JString;
i,ll:
Integer;
found,isit:
Boolean;
TimeSet:TDateTime;
begin
Previousselstart:=Frame21.Source.SelStart;
Screen.Cursor:=crHourGlass;
Indenting.Visible:=false;
Indenting2.Visible:=false;
N15.Visible:=Indenting.Visible;
processing:=true;
//show Splash
if Opening
then
SplashForm1.SetInfo(Version_IDE)
else
SplashForm1.SetInfo(trans(lang,23,
'analysiere Datei'));
Filex:=LowerCase(ExtractFileExt(Fn));
errorcount:=0;
Lizenz1.checklicense();
//
with MDI
do begin
Processor:=trans(lang,142,
'Text');
TProc:=0;
TFrame1:=0;
TFrame2:=0;
NavL:=
nil;
SEML:=
nil;
filelength:=0;
end;
//wait for windows
Frame21.Source.clearstreams();
//now process file
if not FileExists(Fn)
then begin
MDI.GC.CStream:=
nil;
MDI.GD.CStream:=
nil;
MDI.CMes:=
nil;
//
setlength(MDI.Source,1);
MDI.Source[0].Name:=
'0';
MDI.Source[0].Typ:=PLAIN;
MDI.Source[0].Age:=
'';
Frame21.Source.CreateDummyFile();
Homewards(
nil);
errorn(71,
'Eingabedatei nicht gefunden');
end
//check if in use by another process
else if (Fn<>Frame21.Source.LoadedFile)
and FileIsInUse(Fn)
then begin
MDI.GC.CStream:=
nil;
MDI.GD.CStream:=
nil;
MDI.CMes:=
nil;
//
setlength(MDI.Source,1);
MDI.Source[0].Name:=
'0';
MDI.Source[0].Typ:=PLAIN;
MDI.Source[0].Age:=
'';
Frame21.Source.CreateDummyFile();
Homewards(
nil);
errorn(225,
'Eingabedatei wird von einem anderem Proze� benutzt');
end
else begin
//
if length(MDI.Source)>0
then
SavetoHistory(Opt.R.Infile);
ll:=length(extensions)-1;
found:=false;
i:=0;
while not found
and(i<=ll)
do begin
isit:=(ispartof(Filex,extensions[i].ext)
and(Ft=
''))
or
(Ft=extensions[i].dllname);
if not found
and isit
then begin
//get content of file
MDI.filelength:=getFileLength(Fn);
if guesstime(MDI.filelength,true)
then begin
found:=true;
//process
MDI.Processor:=extensions[i].dllname;
globtim:=MDI.filelength
div 60;
LanguageProcessor(Fn,extensions[i].LexOnly,
ord(Opt.R.Sourceformat),
Ft);
TimeSet:=Now;
Frame11.Loader(Fn,IconImageList);
proctime(Opt.R.Timeper1000forFrame1,MDI.TFrame1,TimeSet,
MDI.filelength);
SplashForm1.Progress(2);
proctime(Opt.R.Timeper1000forProcessing,MDI.TProc,TimeSet,
MDI.filelength);
TimeSet:=Now;
errorcount:=abs(MDI.ReturnValue);
MDI.Previewrepresentation:=extensions[i].Prettyprint;
Frame21.Loader(0,SplashForm1);
proctime(Opt.R.Timeper1000forFrame2,MDI.TFrame2,TimeSet,
MDI.filelength);
Blocknummern.enabled:=MDI.ReturnValue<=1;
Duration:=Frame21.SourceDuration+Frame21.CFADuration+
Frame21.DFADuration;
Indenting.Visible:=Frame21.Source.Indentingpossible;
Indenting2.Visible:=Indenting.Visible;
N15.Visible:=Indenting.Visible;
end;
end;
i:=i+1
end;
if found
then begin
Syntaxhervorhebung1.enabled:=true;
SyntaxHighLite.enabled:=true;
setl(Opt.R.Infile,Fn);
end
else if Filex=
'.rtf' then begin
Frame21.Source.Linenumbers:=Opt.R.Linenumbers;
Frame21.Source.Blocknumbers:=Opt.R.Blocknumbers;
Frame21.Source.LoadHighLites(Opt.R.Highlites);
FormattedFile(Fn);
end
else begin
SplashForm1.Init(10);
SplashForm1.Progress(5);
resetMDI();
setlength(MDI.Source,1);
MDI.Source[0].Name:=Fn;
MDI.Source[0].Typ:=PLAIN;
Frame21.SourceNames(MDI);
Frame21.Source.casesensitive:=Opt.R.casesensitive;
Frame21.Source.doWordWrap:=Opt.R.wordwrap;
Frame21.Source.Linenumbers:=Opt.R.Linenumbers;
Frame21.Source.Blocknumbers:=Opt.R.Blocknumbers;
Frame21.Source.LoadHighLites(Opt.R.Highlites);
Frame21.Source.CreatePlain(0);
if Frame21.Source.LoadedFormat=BIN
then
MDI.Processor:=trans(lang,165,
'Bin�rdaten');
Syntaxhervorhebung1.enabled:=false;
SyntaxHighLite.enabled:=false;
setl(Opt.R.Infile,Fn);
end
end;
//Finished
Screen.Cursor:=crDefault; { Revient toujours � normal }
MarkFileTypes(MDI.Processor);
ShowIDE();
SplashForm1.Finish();
SplashForm1.SetMini();
processing:=false;
//note file
Previousfile:=Opt.R.Infile;
end;
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
procedure TModelFrame.PrintButtonClick(Sender:TObject);
begin
if not InSight(Opt.R.Druckvorschau)
then
DruckvorschauClick(Sender)
else
Frame31.PrintButtonClick(Sender);
end;
//------------------------------------------------------------------
//Procedure GetImageIndex --
//--
//------------------------------------------------------------------
procedure TModelFrame.NavGetImageIndex(Sender:TObject;Node:TTreeNode);
begin
if Node.HasChildren
then
if Node.Expanded
then
Node.ImageIndex:=ExpandedImage
else
Node.ImageIndex:=CollapsedImage
else
Node.ImageIndex:=HasChildrenImage;
end;
//------------------------------------------------------------------
//Procedure GetSelectedIndex --
//--
//------------------------------------------------------------------
procedure TModelFrame.NavGetSelectedIndex(Sender:TObject;Node:TTreeNode);
begin
Node.SelectedIndex:=Node.ImageIndex;
end;
//------------------------------------------------------------------
//--
//FeedBackDialogack --
//--
//------------------------------------------------------------------
procedure TModelFrame.Feedback1Click(Sender:TObject);
begin
if netallowed
then
Browser(Handle,
'https://cococo.de/Context_IT_GmbH/index.jsp?content=contact&topic='+
Application.Title+
' '+Version_IDE);
end;
//------------------------------------------------------------------
//--
//FeedBackDialogack --
//--
//------------------------------------------------------------------
procedure TModelFrame.FeedBackDialogack1Click(Sender:TObject);
begin
Feedback1Click(Sender);
end;
//------------------------------------------------------------------
//Procedure Font2Click --
//--
//------------------------------------------------------------------
procedure TModelFrame.Font2Click(Sender:TObject);
var
modi:
Boolean;
begin
FontDialog.Font.Name:=Opt.R.FontName;
FontDialog.Font.Color:=Opt.R.FontColor;
FontDialog.Font.Style:=Opt.R.FontStyle;
FontDialog.Font.Size:=Opt.R.FontSize;
//nur proportionale Schriften zulassen
FontDialog.Options:=[fdFixedPitchOnly];
if FontDialog.Execute
then begin
setl(Opt.R.FontName,FontDialog.Font.Name);
Opt.R.FontSize:=FontDialog.Font.Size;
Opt.R.FontStyle:=FontDialog.Font.Style;
Opt.R.FontColor:=FontDialog.Font.Color;
modi:=Frame21.Source.Modified;
SetWindowFonts;
Frame21.Source.CreateHighlited(MDI.fnr);
Frame21.measures.markLinepos(1,1);
Frame21.Funktion.markLinepos(1,1);
DrawBothImages;
Frame21.Source.Modified:=modi;
end
end;
//------------------------------------------------------------------
//Function LastView --
//--
//------------------------------------------------------------------
function LastView(i:Frames):ViewType;
var
S:ViewType;
begin
S:=NoView;
if Opt.R.Navigator.Frame=i
then
S:=ViewNav;
if Opt.R.Semantik.Frame=i
then
S:=ViewSem;
if Opt.R.Explorer.Frame=i
then
S:=ViewExplorer;
if Opt.R.Source.Frame=i
then
S:=ViewSource;
if Opt.R.CFA.Frame=i
then
S:=ViewCFA;
if Opt.R.DFA.Frame=i
then
S:=ViewDFA;
if Opt.R.measures.Frame=i
then
S:=ViewMeasures;
if Opt.R.Funktion.Frame=i
then
S:=ViewFunktion;
if Opt.R.Miniatur.Frame=i
then
S:=ViewMiniatur;
if Opt.R.Druckvorschau.Frame=i
then
S:=ViewDruckvorschau;
LastView:=S
end;
//------------------------------------------------------------------
//Function DrawBothImages --
//--
//------------------------------------------------------------------
procedure TModelFrame.DrawBothImages;
begin
if not(errorcount>0)
and(Opt<>
nil)
and not Closing
and not Opening
then begin
with MDI.GC
do
if CStream<>
nil then begin
width:=Opt.R.CFA.Sheet.width;
height:=Opt.R.CFA.Sheet.height;
VWidth:=0;
VHeight:=0;
ReDraw();
end;
with MDI.GD
do
if CStream<>
nil then begin
width:=Opt.R.DFA.Sheet.width;
height:=Opt.R.DFA.Sheet.height;
VWidth:=0;
VHeight:=0;
ReDraw();
end;
end;
end;
//------------------------------------------------------------------
//Function CanClose --
//--
//------------------------------------------------------------------
procedure TModelFrame.FormClose(Sender:TObject;
var Action:TCloseAction);
begin
//save source if necessary
Action:=caNone;
if Frame21.Source.Save(true)<>mrCancel
then begin
//remember perspective
if length(MDI.Source)>0
then
SavetoHistory(MDI.Source[0].Name);
//remember Size
if not Opt.R.ismax
then begin
Opt.R.width:=width;
Opt.R.height:=height;
Opt.R.Top:=Top;
Opt.R.left:=left;
Opt.R.ismax:=false;
end;
Opt.R.inited:=
'J';
if Opt.R.CFA.Sheet.Visible
then
with MDI.GC
do begin
Opt.R.CFA.Sheet.width:=VWidth;
Opt.R.CFA.Sheet.height:=VHeight;
end;
if Opt.R.DFA.Sheet.Visible
then
with MDI.GD
do begin
Opt.R.DFA.Sheet.width:=VWidth;
Opt.R.DFA.Sheet.height:=VHeight;
end;
//
Opt.R.casesensitive:=Frame21.Source.casesensitive;
Opt.R.regularexp:=Frame21.Source.regexpsearch;
//
Opt.R.Frame1Width:=SplitterVertical.left;
if Frame31.height>0
then
Opt.R.Frame3Height:=Frame31.height;
Opt.R.InspectorVisible:=Inspector1.Checked;
if Inspector1.Checked
then
Opt.R.InspectorHeight:=Frame11.Inspector.height;
//
sortHistory();
Frame21.Source.flushstreams();
Action:=caFree;
end;
end;
//------------------------------------------------------------------
//Function Filters --
//--
//------------------------------------------------------------------
function TModelFrame.MakeFilters(filnam:JString):
Integer;
var
i,ll:
Integer;
A,Allfiles,ext,App:JString;
first:
Boolean;
begin
Filters:=
'';
App:=trans(lang,237,
' Dateien');
result:=0;
ext:=
'*'+LowerCase(ExtractFileExt(filnam));
first:=true;
ll:=length(extensions)-1;
A:=trans(lang,43,
'Quelldateien')+
'|';
Allfiles:=trans(lang,156,
'Alle Dateien')+
'|'+
'*.*';
for i:=0
to ll
do begin
if extensions[i].ext<>
'*' then begin
if ispartof(ext,extensions[i].ext)
then
result:=i+3;
if first
then
Filters:=extensions[i].longname+App
else
Filters:=Filters+
'|'+extensions[i].longname+App;
Filters:=Filters+
'|';
Filters:=Filters+extensions[i].ext;
if first
then
A:=A+extensions[i].ext
else
A:=A+
';'+extensions[i].ext;
first:=false;
end;
end;
Filters:=A+
'|'+Allfiles+
'|'+Filters;
end;
//------------------------------------------------------------------
//Function Oeffnen --
//--
//------------------------------------------------------------------
procedure TModelFrame.OeffnenClick(Sender:TObject);
var
OpenDialog:TOpenDialog;
se,sx:
Integer;
S,Filex:JString;
MI,PA:TMenuItem;
isok,opendone:
Boolean;
begin
If Sender=Oeffne
then begin
MakeFilters(Opt.R.Infile);
OpenDialog:=TOpenDialog.Create(self);
OpenDialog.FileName:=
'';
OpenDialog.InitialDir:=ExtractFilePath(Frame21.Source.LoadedFile);
if OpenDialog.InitialDir=
'' then
OpenDialog.InitialDir:=GetCurrentDir;
//OpenDialog.Options:=OpenDialog.Options-[ofNoDereferenceLinks];
OpenDialog.Options:=OpenDialog.Options+[ofReadOnly,ofFileMustExist,
ofAllowMultiSelect];
OpenDialog.Filter:=
'';
S:=
'';
Filex:=ExtractFileExt(Frame21.Source.LoadedFile);
OpenDialog.Filter:=Filters;
if Opt.R.Openindex<0
then
OpenDialog.FilterIndex:=0
else
OpenDialog.FilterIndex:=Opt.R.Openindex;
//now follow *.lnk files
isok:=false;
repeat
opendone:=OpenDialog.Execute;
if opendone
then begin
Filex:=ExtractFileExt(OpenDialog.FileName);
isok:=LowerCase(Filex)<>
'.lnk';
if not isok
then begin
OpenDialog.InitialDir:=GetPathFromLink(OpenDialog.FileName);
OpenDialog.FileName:=
'';
OpenDialog.Filter:=Filters;
end;
end;
until isok
or not opendone;
//filename found?
if isok
then begin
if (OpenDialog.FileName<>Frame21.Source.LoadedFile)
then begin
Opt.R.Openindex:=OpenDialog.FilterIndex;
ProcessFile(OpenDialog.FileName,
'');
setl(Opt.R.LastFilter,OpenDialog.Filter[OpenDialog.FilterIndex]);
end;
end
end
else begin //item out of list of files
MI:=(Sender
as TMenuItem);
PA:=MI.Parent;
se:=PA.IndexOf(Exit1);
sx:=PA.IndexOf(MI);
S:=
'';
if sx-se-1>0
then
S:=Opt.R.History[sx-se-1].FileName;
ProcessFile(S,
'');
end;
end;
//------------------------------------------------------------------
//Function RepairHistory --
//-- do if file vanished
//------------------------------------------------------------------
procedure TModelFrame.RepairHistory();
var
i,j:
Integer;
begin
//remove vanished files
with Opt.R
do begin
for i:=1
to HistMax
do
if History[i].FileName<>
'' then begin
if not FileExists(History[i].FileName)
then
for j:=i+1
to HistMax
do begin
History[j-1].FileName:=History[j].FileName;
History[j].FileName:=
'';
end;
end;
//remove empty entries
for i:=1
to HistMax-1
do
if History[i].FileName=
'' then begin
j:=i+1;
while (j<HistMax-1)
and(History[j].FileName=
'')
do
j:=j+1;
if History[j].FileName<>
'' then begin
History[i].FileName:=History[j].FileName;
History[j].FileName:=
'';
end;
end;
//remove empty libraries
for i:=1
to 3
do
if ((Libraries[i]<>
'')
and not DirectoryExists(Libraries[i]))
then
Libraries[i]:=
'';
end;
end;
//------------------------------------------------------------------
//Function LoadfromHistory --
//--
//------------------------------------------------------------------
procedure TModelFrame.LoadfromHistory(Fn:JString);
var
i:
Integer;
PP:TPoint;
G:JString;
nw,nh:
Integer;
//nl,nt:integer;
begin
//search history
with Opt.R
do begin
ViewList.Free;
ViewList:=
nil;
G:=ExtractFileName(Fn);
i:=findinHistory(Fn);
if History[i].Per[F1].Node>=0
then
with Frame11
do
positbyIndex(History[i].Per[F1].Node);
if History[i].Per[F2].pos.Y>0
then
Frame21.positbyPoint(History[i].Per[F2].pos)
else if History[i].Per[F2].Node<>0
then begin
PP.X:=1;
PP.Y:=History[i].Per[F2].Node;
Frame21.positbyPoint(PP);
end;
nw:=max(History[i].Per[F1].width,History[i].Per[F2].width);
nh:=max(History[i].Per[F1].height,History[i].Per[F2].height);
//nt:=History[i].Per[F1].Top;
//nl:=History[i].Per[F1].left;
if firsthistory
and (nw>0)
and(nh>0)
then begin
//Top:=nt;
//left:=nl;
width:=nw;
height:=nh;
end;
SaveView();
end;
width:=Opt.R.width;
height:=Opt.R.height;
Top:=Opt.R.Top;
left:=Opt.R.left;
DisplayHistory();
firsthistory:=false;
end;
//------------------------------------------------------------------
//Function DisplayHistory --
//--
//------------------------------------------------------------------
procedure TModelFrame.DisplayHistory();
var
i,se:
Integer;
M:TMenuItem;
function Short(F:JString):JString;
var
S:JString;
begin
S:=ExtractFilePath(F);
if length(S)>8
then
S:=MidStr(S,1,8)+
'...';
Short:=S+ExtractFileName(F);
end;
begin
//remove old menuitems
se:=File1.IndexOf(Exit1);
for i:=File1.Count
downto se+2
do
File1.Remove(File1.items[i-1]);
//create entries from history
Sep:=
'-';
For i:=1
to HistMax
do
if Opt.R.History[i].FileName<>
'' then begin
if Sep=
'-' then begin
M:=TMenuItem.Create(File1);
M.Caption:=Sep;
File1.Add(M);
Sep:=
'';
end;
M:=TMenuItem.Create(File1);
M.Caption:=Short(Opt.R.History[i].FileName);
if pos(
'.jcl',LowerCase(M.Caption))>0
then
M.ImageIndex:=JCLImage
else
M.ImageIndex:=COBOLImage;
M.OnClick:=Oeffne.OnClick;
File1.Add(M);
end;
end;
//------------------------------------------------------------------
//Function sortHistory --
//--
//------------------------------------------------------------------
procedure TModelFrame.sortHistory();
var
i,j:
Integer;
zz:THistory;
begin
//sort by datetime and usage count
For i:=1
to HistMax-1
do
for j:=i+1
to HistMax
do
with Opt.R
do
if (History[i].DateTime<History[j].DateTime)
then begin
zz:=History[j];
History[j]:=History[i];
History[i]:=zz;
end;
end;
//------------------------------------------------------------------
//Function FidinHistory --
//--
//------------------------------------------------------------------
function TModelFrame.findinHistory(F:JString):
Integer;
var
i,j:
Integer;
G:JString;
begin
i:=1;
G:=ExtractFileName(F);
while (Opt.R.History[i].FileName<>
'')
and
(LowerCase(Opt.R.History[i].FileName)<>LowerCase(F))
and(i<HistMax)
do
i:=i+1;
if (i>HistMax)
then begin
//not found, rotate
for j:=HistMax
downto 2
do
Opt.R.History[j]:=Opt.R.History[j-1];
i:=1;
end;
findinHistory:=i
end;
//------------------------------------------------------------------
//Function SavetoHistory --
//--
//------------------------------------------------------------------
procedure TModelFrame.SavetoHistory(F:JString);
var
i:
Integer;
G:JString;
function Short(F:JString):JString;
var
S:JString;
begin
S:=ExtractFilePath(F);
if length(S)>8
then
S:=MidStr(S,1,8)+
'...';
Short:=S+ExtractFileName(F);
end;
begin
if (F>
'')
then begin
SaveView();
G:=ExtractFileName(F);
i:=findinHistory(F);
setl(Opt.R.History[i].FileName,F);
Opt.R.History[i].Count:=0;
Opt.R.History[i].DateTime:=Now;
if (ViewList<>
nil)
then
Opt.R.History[i].Per:=ViewList.Per;
end;
DisplayHistory();
end;
//------------------------------------------------------------------
//Function Activation --
//--
//------------------------------------------------------------------
procedure TModelFrame.Aktivierung1Click(Sender:TObject);
begin
Lizenz1.TrytoActivate(false);
end;
//------------------------------------------------------------------
//Function Hilfe2 --
//--
//------------------------------------------------------------------
procedure TModelFrame.Hilfe2Click(Sender:TObject);
begin
//Achtung: *.hlp und *.cnt mitliefern
//WinHelp(0,PChar(Application.helpfile),HELP_FINDER,0);
HtmlHelpW(0,PChar(Application.helpfile),0,0);
end;
//------------------------------------------------------------------
//Function �berClick --
//--
//------------------------------------------------------------------
procedure TModelFrame.AboutClick(Sender:TObject);
begin
with AboutDialog
do begin
Label1.Caption:=Application.Title+
' '+Version;
DLLVersion:=
String(ActDLLInfo);
Edition.Caption:=EditionStrings[Opt.R.Edition]+
' '+
'Edition';
if Opt.R.Activated
then
ProduktId.Caption:=trans(lang,166,
'g�ltige Lizenz f�r')
else begin
Edition.Caption:=
'Shareware'+
' '+
'Edition';
if not Opt.R.Activated
then
ProduktId.Caption:=trans(lang,163,
'Dateigr��e begrenzt auf:')+inttostr
(maxfilesize
div 1024)+
' kB'
end;
Caption:=trans(lang,167,
'�ber ')+Application.Title;
ShowModal
end
end;
//------------------------------------------------------------------
//Function GraphMouseMove --
//--
//------------------------------------------------------------------
procedure TModelFrame.GraphMouseMove(Sender:TObject;Shift:TShiftState;
X,Y:
Integer);
var
P:TPoint;
Frame:TFrame;
K:JString;
begin
P.X:=X;
P.Y:=Y;
if (Sender=Frame21.CFA)
and(MDI.GC.Selected<>0)
and(MDI.GC.Hint<>
'')
then begin
if sqr(MDI.GC.hintpos.X-P.X)+sqr(MDI.GC.hintpos.Y-P.Y)<sqr
(MDI.GC.Sidelength)
then
Frame21.CFA.Hint:=MDI.GC.Hint
else
Frame21.CFA.Hint:=
'';
Frame:=(Frame21.CFA.Parent.Parent.Parent.Parent
as TFrame);
P:=GraphCoordinates(MDI.GC,Opt.R.CFA.Sheet,Frame,P);
K:=Frame21.positInfo(P,Sender);
if Frame=Frame11
then
Frame11.statusbar1.SimpleText:=K;
if Frame=Frame21
then
Frame21.statusbar1.SimpleText:=K;
if Frame=Frame31
then
Frame31.statusbar1.SimpleText:=K;
MDI.GC.Hint:=K;
end
else if (Sender=Frame21.DFA)
and(MDI.GD.Selected<>0)
and(MDI.GD.Hint<>
'')
then
begin
if sqr(MDI.GD.hintpos.X-P.X)+sqr(MDI.GD.hintpos.Y-P.Y)<sqr
(MDI.GD.Sidelength)
then
Frame21.DFA.Hint:=MDI.GD.Hint
else
Frame21.DFA.Hint:=
'';
Frame:=(Frame21.DFA.Parent.Parent.Parent.Parent
as TFrame);
P:=GraphCoordinates(MDI.GD,Opt.R.DFA.Sheet,Frame,P);
K:=Frame21.positInfo(P,Sender);
if Frame=Frame11
then
Frame11.statusbar1.SimpleText:=K;
if Frame=Frame21
then
Frame21.statusbar1.SimpleText:=K;
if Frame=Frame31
then
Frame31.statusbar1.SimpleText:=K;
MDI.GD.Hint:=K;
end;
end;
//------------------------------------------------------------------
//Key Pressed --
//--
//------------------------------------------------------------------
procedure TModelFrame.Frame21FunktionKeyUp(Sender:TObject;
var Key:
Word;
Shift:TShiftState);
begin
if length(Frame21.Funktion.SelText)>0
then
initSearchReplace(Frame21.Funktion.SelText,
'',false,FuncSearch);
end;
//------------------------------------------------------------------
//Source Changed --
//--
//------------------------------------------------------------------
procedure TModelFrame.Frame21SourceChange(Sender:TObject);
begin
if not Opening
then begin
setFrameStatus(Sender);
Speichern.enabled:=Frame21.Source.Modified;
end;
end;
//------------------------------------------------------------------
//Source Changed --
//--
//------------------------------------------------------------------
procedure TModelFrame.Frame21SourceSelectionChange(Sender:TObject);
begin
if not Opening
then begin
setFrameStatus(
nil);
end;
end;
//------------------------------------------------------------------
//Function Frame11NavClick --
//--
//------------------------------------------------------------------
procedure TModelFrame.TreeClick(Sender:TObject);
var
Tree:TTreeView;
begin
Tree:=Sender
as TTreeView;
Tree.SetFocus();
Realcheck();
Frame11.TreeClick(Sender);
Frame21.positbyNode(Frame11.Key,Tree);
UpDateInspector(MDI.NavL,Frame11.Navigator.Selected);
Frame11.Navigator.Hint:=HintBox(Tree.Selected.Text);
SaveView();
end;
//------------------------------------------------------------------
//Function Sem DblClick --
//--
//------------------------------------------------------------------
procedure TModelFrame.TreeDblClick(Sender:TObject);
var
PC:TPageControl;
P:TPoint;
TV:TTreeView;
begin
PC:=Opt.R.Source.Sheet.PageControl;
PC.ActivePage:=Opt.R.Source.Sheet;
TV:=(Sender
as TTreeView);
if Opt.R.Source.Frame=F1
then
PageControlChange(Frame11.PageControl1);
if Opt.R.Source.Frame=F2
then
PageControlChange(Frame21.PageControl1);
if Opt.R.Source.Frame=F3
then
PageControlChange(Frame31.PageControl1);
//Frame21.Source.positbyNode(Frame11.Key)
P:=Frame21.getPointfromNode(Frame11.Key);
Frame21.positbyNode(Frame11.Key,TV);
end;
//------------------------------------------------------------------
//Function Frame11NavClick --
//--
//------------------------------------------------------------------
procedure TModelFrame.TreeSelChange(Sender:TObject;
var Key:
Word;
Shift:TShiftState);
var
Tree:TTreeView;
changed:
Boolean;
begin
if Sender=Frame11.Navigator
then begin
changed:=Frame11.LastNavSelected<>Frame11.Navigator.Selected;
Frame11.Navigator.SetFocus();
end
else if Sender=Frame11.Semantik
then begin
changed:=Frame11.LastSemSelected<>Frame11.Semantik.Selected;
Frame11.Semantik.SetFocus();
end
else
changed:=false;
Honeypot();
if changed
then begin
Tree:=Sender
as TTreeView;
Frame11.TreeClick(Sender);
Frame21.positbyNode(Frame11.Key,Tree);
UpDateInspector(MDI.NavL,Frame11.Navigator.Selected);
Frame11.Navigator.Hint:=HintBox(Tree.Selected.Text);
SaveView();
end;
Frame11.LastNavSelected:=Frame11.Navigator.Selected;
Frame11.LastSemSelected:=Frame11.Semantik.Selected;
end;
//------------------------------------------------------------------
//Function LineNumbers --
//--
//------------------------------------------------------------------
procedure TModelFrame.Zeilennummern1Click(Sender:TObject);
var
TP:TPageControl;
modi:
Boolean;
begin
modi:=Frame21.Source.Modified;
Opt.R.Linenumbers:=
not Opt.R.Linenumbers;
if Opt.R.Linenumbers
then
Opt.R.Blocknumbers:=false;
Zeilennummern1.Checked:=Opt.R.Linenumbers;
Blocknummern.Checked:=Opt.R.Blocknumbers;
Frame21.Source.Linenumbers:=Opt.R.Linenumbers;
Frame21.Source.Blocknumbers:=Opt.R.Blocknumbers;
Frame21.Source.Mark();
TP:=Opt.R.Source.Sheet.PageControl;
TP.ActivePage:=Opt.R.Source.Sheet;
Frame21.Source.Modified:=modi;
end;
//------------------------------------------------------------------
//Function BtnSaveClick --
//--
//------------------------------------------------------------------
procedure TModelFrame.BlocknummernClick(Sender:TObject);
var
TP:TPageControl;
modi:
Boolean;
begin
if MDI.ReturnValue<=1
then begin
modi:=Frame21.Source.Modified;
Opt.R.Blocknumbers:=
not Opt.R.Blocknumbers;
if Opt.R.Blocknumbers
then
Opt.R.Linenumbers:=false;
Blocknummern.Checked:=Opt.R.Blocknumbers;
Zeilennummern1.Checked:=Opt.R.Linenumbers;
Frame21.Source.Linenumbers:=Opt.R.Linenumbers;
Frame21.Source.Blocknumbers:=Opt.R.Blocknumbers;
Frame21.Source.Mark();
TP:=Opt.R.Source.Sheet.PageControl;
TP.ActivePage:=Opt.R.Source.Sheet;
Frame21.Source.Modified:=modi;
end
else begin
Blocknummern.Checked:=false;
end
end;
//------------------------------------------------------------------
//Function Setnavigation --
//--
//------------------------------------------------------------------
procedure TModelFrame.Setnavigation();
var
c:
Integer;
begin
if ViewList<>
nil then begin
Vor.enabled:=(ViewList.Next<>
nil);
Zur.enabled:=ViewList.Previous<>
nil;
end
else begin
Vor.enabled:=false;
Zur.enabled:=false;
end;
Home.enabled:=true;
if InSight(Opt.R.Source)
then begin
Ausschneiden.enabled:=Frame21.Source.SelLength>0;
Einfuegen1.enabled:=length(Clipboard.AsText)>0;
UndoButton.enabled:=Frame21.Source.Modified;
end
else begin
Ausschneiden.enabled:=false;
Einfuegen1.enabled:=false;
UndoButton.enabled:=false;
end;
if InSight(Opt.R.Source)
or InSight(Opt.R.measures)
or InSight(Opt.R.Funktion)
then begin
Kopieren2.enabled:=Frame21.Source.SelLength>0;
end
else begin
Kopieren2.enabled:=false;
end;
if InSight(Opt.R.CFA)
then begin
Auf.enabled:=(MDI.GC.Map<>
nil);
Ab.enabled:=(MDI.GC.Map=
nil);
end else if InSight(Opt.R.DFA)
then begin
Auf.enabled:=(MDI.GD.Map<>
nil);
Ab.enabled:=(MDI.GD.Map=
nil);
end
else begin
Auf.enabled:=false;
Ab.enabled:=false;
end;
c:=PageCount(Frame21.PageControl1);
Speichern.enabled:=Frame21.Source.Modified;
Split.enabled:=(c>1)
or(Frame31.Visible);
Simulation1.enabled:=Opt.R.CFA.Sheet.Visible
or Opt.R.DFA.Sheet.Visible;
//
Auf.enabled:=Auf.enabled
or (Filelist<>
nil);
end;
//------------------------------------------------------------------------------
//
//------------------------------------------------------------------------------
procedure TModelFrame.QuerformatClick(Sender:TObject);
begin
Frame31.QuerformatClick(Sender);
end;
//------------------------------------------------------------------
//Function undo --
//--
//------------------------------------------------------------------
procedure TModelFrame.undoClick(Sender:TObject);
begin
Frame21.Source.LoadFromUndoBuffer();
setFrameStatus(Sender);
end;
//------------------------------------------------------------------
//Function PushViews --
//--
//------------------------------------------------------------------
function TModelFrame.Viewof(F:Frames):FrameView;
var
RV:ViewType;
pos:TPoint;
Node:
Integer;
procedure getv(PC:TPageControl);
begin
pos.X:=0;
pos.Y:=0;
Node:=0;
with PC
do
if ActivePage=Opt.R.Navigator.Sheet
then begin
RV:=ViewNav;
with Frame11.Navigator
do
if Selected<>
nil then
--> --------------------
--> maximum size reached
--> --------------------