{ $Id$ } { /*************************************************************************** main.pp - Toolbar ------------------- TMain is the application toolbar window. Initial Revision : Sun Mar 28 23:15:32 CST 1999 ***************************************************************************/ /*************************************************************************** * * * This program is free software; you can redistribute it and/or modify * * it under the terms of the GNU General Public License as published by * * the Free Software Foundation; either version 2 of the License, or * * (at your option) any later version. * * * ***************************************************************************/ } {$H+} unit main; {$mode objfpc} { $mode delphi} interface uses Classes, LclLinux, compiler, stdctrls, forms, buttons, menus, comctrls, Spin, project,sysutils, global, compileroptions, Controls, graphics, extctrls, Dialogs, dlgMEssage, process, idecomp, Find_dlg, FormEditor, AbstractFormEditor, CustomFormEditor,ObjectInspector, ControlSelection, PropEdits, UnitEditor, CompReg; const STANDARDBTNCOUNT = 50; type TMainIDE = class(TFORM) FontDialog1 : TFontDialog; ColorDialog1 : TColorDialog; FindDialog1 : TFindDialog; ToolBar1 : TToolBar; Toolbutton1 : TToolButton; Toolbutton2 : TToolButton; Toolbutton3 : TToolButton; Toolbutton4 : TToolButton; GlobalMouseSpeedButton : TSpeedButton; Pixmap1 : TPixmap;//used to assign the tspeedbutton its image Bitmap1 : TBitmap; SpeedButton1 : TSpeedButton; SpeedButton2 : TSpeedButton; SpeedButton3 : TSpeedButton; SpeedButton4 : TSpeedButton; SpeedButton4_2 : TSpeedButton; SpeedButton5 : TSpeedButton; SpeedButton6 : TSpeedButton; SpeedButton7 : TSpeedButton; SpeedButton8 : TSpeedButton; RunSpeedButton : TSpeedButton; OpenFilePopUpMenu : TPopupMenu; ComboBox1 : TComboBox; Edit1: TEdit; SpinEdit1 : TSpinEdit; ListBox1 : TListBox; mnuMain: TMainMenu; mnuFile: TMenuItem; mnuEdit: TMenuItem; mnuSearch: TMenuItem; mnuView: TMenuItem; mnuProject: TMenuItem; mnuEnvironment:TMenuItem; itmSeperator: TMenuItem; itmFileNew : TMenuItem; itmProjectNew: TMenuItem; itmProjectOpen: TMenuItem; itmProjectSave: TMenuItem; itmProjectBuild: TMenuItem; itmProjectRun: TMenuItem; itmFileNewForm : TMenuItem; itmFileOpen: TMenuItem; itmFileSave: TMenuItem; itmFileSaveAs: TMenuItem; itmFileSaveAll: TMenuItem; itmFileClose: TMenuItem; itmFileQuit: TMenuItem; itmEditUndo: TMenuItem; itmEditRedo: TMenuItem; itmEditCut: TMenuItem; itmEditCopy: TMenuItem; itmEditPaste: TMenuItem; itmSearchfind: TMenuItem; itmSearchFindAgain: TMenuItem; itmViewInspector: TMenuItem; itmViewProject: TMenuItem; itmViewProjectOptions: TMenuItem; itmViewUnits : TMenuItem; itmViewCodeExplorer : TMenuItem; itmViewForms : TMenuItem; itmViewFile : TMenuItem; itmViewColors : TMenuItem; itmViewFont : TMenuItem; itmViewMessage : TMenuItem; itmViewCompilerSettings: TMenuItem; itmEnvironmentOptions: TMenuItem; CheckBox1 : TCheckBox; Notebook1 : TNotebook; cmdTest: TButton; cmdTest2: TButton; LAbel2 : TLabel; { event handlers } procedure mnuNewFormClicked(Sender : TObject); procedure mnuQuitClicked(Sender : TObject); procedure mnuViewInspectorClicked(Sender : TObject); procedure mnuViewCompilerSettingsClicked(Sender : TObject); Procedure mnuViewUnitsClicked(Sender : TObject); Procedure mnuViewFormsClicked(Sender : TObject); Procedure mnuToggleFormClicked(Sender : TObject); Procedure CodeorFormActivated(Sender : TObject); Procedure mnuViewColorClicked(Sender : TObject); Procedure mnuViewFontClicked(Sender : TObject); procedure mnuNewProjectClicked(Sender : TObject); procedure mnuOpenProjectClicked(Sender : TObject); procedure mnuSaveProjectClicked(Sender : TObject); procedure mnuBuildProjectClicked(Sender : TObject); procedure mnuRunProjectClicked(Sender : TObject); procedure mnuViewCodeExplorerClick(Sender : TObject); procedure mnuViewMessagesClick(Sender : TObject); procedure mnuSearchFindClicked(Sender : TObject); procedure mnuSearchFindAgainClicked(Sender : TObject); Procedure OpenFileDownArrowClicked(Sender : TObject); Procedure FileClosedEvent(Sender : TObject; Filename : String); Procedure FileOpenedEvent(Sender : TObject; Filename : String); Procedure FileSavedEvent(Sender : TObject; Filename : String); Procedure ControlClick(Sender : TObject); procedure MessageViewDblClick(Sender : TObject); procedure OIOnAddAvailableComponent(AComponent:TComponent; var Allowed:boolean); procedure OIOnSelectComponent(AComponent:TComponent); private FCodeLastActivated : Boolean; //used for toggling between code and forms FControlLastActivated : TObject; FSelectedComponent : TRegisteredComponent; Function CreateSeperator : TMenuItem; Function ReturnActiveUnitList : TUnitInfo; Procedure UpdateViewDialogs; Procedure SetDefaultsForForm(aForm : TCustomForm); protected procedure DoFind(Sender : TObject); procedure FormShow(Sender : TObject); procedure ButtonCLick(Sender : TObject); procedure ToolButtonCLick(Sender : TObject); // Procedure Paint; override; Function ReturnFormName(Source : TStringList) : String; public constructor Create(AOwner: TComponent); override; Function SearchPaths : String; procedure LoadMainMenu; Procedure FormKill(Sender : TObject); Procedure SetFlags(SLIst : TUnitInfo); Procedure SetName_Form(SList : TUnitInfo); Procedure SetDesigning(Control : TComponent; Value : Boolean); procedure FormPaint(Sender : TObject); procedure LoadResourceFromFile(Value : String); //these numbers are used to determine where the mouse was when the button was pressed MouseDownPos, MouseUpPos, LastMouseMovePos : TPoint; MouseDownControl: TObject; property SelectedComponent : TRegisteredComponent read FSelectedComponent write FSelectedComponent; end; const CapLetters = ['A'..'Z']; SmallLetters = ['a'..'z']; Numbers = ['0'..'1']; var MainIDE : TMainIDE; FormEditor1 : TFormEditor; // this should be moved to FormEditor <... ObjectInspector1 : TObjectInspector; PropertyEditorHook1 : TPropertyEditorHook; // ...> SourceNotebook : TSourceNotebook; TagInc : Integer; implementation uses ViewUnit_dlg,ViewForm_dlg, Math,lresources, Designer; { TMainIDE } constructor TMainIDE.Create(AOwner: TComponent); function LoadResource(ResourceName:string; PixMap:TPixMap):boolean; var ms:TMemoryStream; res:TLResource; begin Result:=false; res:=LazarusResources.Find(ResourceName); if (res = nil) or (res.Value<>'') then begin if res.ValueType='XPM' then begin ms:=TMemoryStream.Create; try ms.Write(res.Value[1],length(res.Value)); ms.Position:=0; PixMap.LoadFromStream(ms); Result:=true; finally ms.Free; end; end; end; end; var Filename : String; S : TStream; i,x : Integer; R : TRect; IDEControl : pointer; PageCount : Integer; RegComp : TRegisteredComponent; RegCompPage : TRegisteredComponentPage; IDeComponent : TIdeComponent; MenuItem : TmenuItem; begin inherited Create(AOwner); Caption := 'Lazarus Editor v 0.5'; Left := 0; Top := 0; Width := Screen.Width-5; height := 125; Position:= poDesigned; Name := 'MainIDE'; LoadMainMenu; MouseDownControl:=nil; Bitmap1 := TBitmap.Create; Bitmap1.Handle := CreatePixmapIndirect(@IMGOK_Check, ColorToRGB(clBtnFace)); { ToolBar1 := TToolbar.Create(Self); with Toolbar1 do begin Parent := Self; Align := alTop; ShowCaptions := True; Height := 25; Left := 1; Top := 25; Width := ClientWidth; Show; end; } Notebook1 := TNotebook.Create(Self); Notebook1.Parent := Self; Notebook1.Align := alBottom; Notebook1.Left := 1; // Notebook1.Top :=50+ mnuBarMain.Top+MnuBarMain.Height + 2; Notebook1.Top :=50+ 2; Notebook1.Width := ClientWidth; Notebook1.Height := 100; //ClientHeight - Notebook1.Top; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('tmouse',Pixmap1) then begin LoadResource('default',Pixmap1); end; PageCount := 0; for I := 0 to RegCompList.PageCount-1 do begin RegCompPage := RegCompList.Pages[i]; if RegCompPage.Name <> '' then Begin if (pagecount = 0) then Notebook1.Pages.Strings[pagecount] := RegCompPage.Name else Notebook1.Pages.Add(RegCompPage.Name); GlobalMouseSpeedButton := TSpeedButton.Create(Self); with GlobalMouseSPeedButton do Begin Parent := Notebook1.page[PageCount]; Enabled := True; Width := 25; Height := 25; OnClick := @ControlClick; Glyph := Pixmap1; Visible := True; Flat := True; Down := True; Name := 'GlobalMouseSpeedButton'+inttostr(PageCount); end; for x := 0 to RegCompPage.Count-1 do //for every component on the page.... begin RegComp := RegCompPage.Items[x]; IDEComponent := TIDEComponent.Create; IdeComponent.RegisteredComponent := RegComp; Writeln('Name is '+RegComp.ComponentClass.ClassName); IDEComponent._SpeedButton(Self,Notebook1.Page[PageCount]); IDEComponent.SpeedButton.OnClick := @ControlClick; IDEComponent.SpeedButton.Hint := RegComp.ComponentClass.ClassName; IDEComponent.SpeedButton.Name := IDEComponent.SpeedButton.Hint; IDEComponent.SpeedButton.ShowHint := True; end; inc(PageCount); end; end; Notebook1.PageIndex := 0; // Set it to the first page Notebook1.Show; Notebook1.OnPageChanged := @ControlClick; Notebook1.Name := 'Notebook1'; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_viewunits',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton1 := TSpeedButton.Create(Self); with Speedbutton1 do Begin Parent := self; Enabled := True; Top := 28; OnClick := @mnuViewUnitsCLicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton1'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_viewforms',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton2 := TSpeedButton.Create(Self); with Speedbutton2 do Begin Parent := self; Enabled := True; Top := 28; Left := SpeedButton1.Left +26; OnClick := @mnuViewFormsCLicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton2'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_newunit',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton3 := TSpeedButton.Create(Self); with Speedbutton3 do Begin Parent := self; Enabled := True; Top := 28; Left := Speedbutton2.Left + 26; // OnClick := @mnuNewCLicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton3'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_openfile',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton4 := TSpeedButton.Create(Self); with Speedbutton4 do Begin Parent := self; Enabled := True; Top := 28; Left := Speedbutton3.Left + 26; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton4'; end; //display the down arrow Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_downarrow',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton4_2 := TSpeedButton.Create(Self); with Speedbutton4_2 do Begin Parent := self; Enabled := True; Top := 28; Left := Speedbutton3.Left + 26+26; OnClick := @OPenFileDownArrowClicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton4_2'; width := 12; end; //create the popupmenu for this speedbutton OpenFilePopUpMenu := TPopupMenu.Create(self); OpenFilePopupMenu.AutoPopup := False; { MenuItem := TMenuItem.Create(Self); MenuItem.Caption := 'No files have been opened'; MenuItem.OnClick := nil; OpenFilePopupMenu.Items.Add(MenuItem); } Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_save',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton5 := TSpeedButton.Create(Self); with Speedbutton5 do Begin Parent := self; Enabled := False; Top := 28; Left := Speedbutton4_2.Left + 13; Glyph := Pixmap1; NumGlyphs := 2; Visible := True; Flat := true; Name := 'Speedbutton5'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_saveall',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton6 := TSpeedButton.Create(Self); with Speedbutton6 do Begin Parent := self; Enabled := False; Top := 28; Left := Speedbutton5.left + 26; Glyph := Pixmap1; NumGlyphs := 2; Visible := True; Flat := true; Name := 'Speedbutton6'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_toggleform',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton7 := TSpeedButton.Create(Self); with Speedbutton7 do Begin Parent := self; Enabled := True; Top := 28; Left := Speedbutton6.Left + 26; OnClick := @mnuToggleFormCLicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton7'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_newform',Pixmap1) then begin LoadResource('default',Pixmap1); end; SpeedButton8 := TSpeedButton.Create(Self); with Speedbutton8 do Begin Parent := self; Enabled := True; Top := 28; Left := Speedbutton7.Left + 26; OnClick := @mnuNewFormCLicked; Glyph := Pixmap1; Visible := True; Flat := true; Name := 'Speedbutton8'; end; Pixmap1:=TPixMap.Create; Pixmap1.TransparentColor:=clBtnFace; if not LoadResource('btn_run',Pixmap1) then begin LoadResource('default',Pixmap1); end; RunSpeedButton := TSpeedButton.Create(Self); with RunSpeedbutton do Begin Parent := self; Enabled := False; Top := 28; Left := Speedbutton8.Left + 26; //OnClick := @mnuNewFormCLicked; Glyph := Pixmap1; NumGlyphs := 2; Visible := True; Flat := true; Name := 'RunSpeedbutton'; end; if Assigned(Toolbar1) then begin Assert(False, 'Trace:*1*'); Toolbutton1 := TToolButton.Create(Toolbar1); with ToolButton1 do begin Assert(False, 'Trace:SETTING PARENT'); Parent := Toolbar1; Caption := '1'; Style := tbsButton; Top := 1; Left := 1; OnClick := @Toolbuttonclick; Show; end; Assert(False, 'Trace:*2*'); Toolbutton2 := TToolButton.Create(Toolbar1); with ToolButton2 do begin Assert(False, 'Trace:SETTING PARENT'); Parent := Toolbar1; Caption := '2'; Style := tbsButton; // Top := 1; Left := Toolbutton1.Left+1; Show; end; Assert(False, 'Trace:*3*'); Toolbutton3 := TToolButton.Create(Toolbar1); with ToolButton3 do begin Assert(False, 'Trace:SETTING PARENT'); Parent := Toolbar1; Caption := '3'; Style := tbsButton; // Top := 1; Left := 1; Show; end; Assert(False, 'Trace:*4*'); Toolbutton4 := TToolButton.Create(Toolbar1); with ToolButton4 do begin Assert(False, 'Trace:SETTING PARENT'); Parent := Toolbar1; Caption := '4'; Style := tbsButton; // Top := 1; // Left := 1; Show; end; ComboBox1 := TComboBox.Create(Self); with ComboBox1 do begin Assert(False, 'Trace:SETTING PARENT'); Parent := Toolbar1; Items.Add('Item1'); Items.Add('Item2'); Items.Add('Item3'); Items.Add('Item4'); Items.Add('Item5'); Items.Add('Item6'); ItemIndex := 0; // Top := 1; // Left := 1; Show; end; end; //If toolbar1 assigned FontDialog1 := TFontDialog.Create(self); ColorDialog1 := TColorDialog.Create(self); FindDialog1 := TFindDialog.Create(self); FindDialog1.OnFind := @DoFind; //?? dont need these handlers. // Form will kill itself //OnDestroy := @FormKill; //Onpaint := @FormPaint; Project1 := TProject.Create; Self.OnShow := @FormShow; { MessageDlg := TMessageDlg.Create(self); MessageDlg.Caption := 'Compiler Messages'; MessageDlg.MessageView.OnDblClick := @MessageViewDblClick; } Compiler1 := TCompiler.Create; Compiler1.OutputString := @Messagedlg.Add; { Create other forms } ObjectInspector1 := TObjectInspector.Create(Self); ObjectInspector1.SetBounds(0,Top+Height+5,230,600); ObjectInspector1.OnAddAvailComponent:=@OIOnAddAvailableComponent; ObjectInspector1.OnSelectComponentInOI:=@OIOnSelectComponent; PropertyEditorHook1:=TPropertyEditorHook.Create; ObjectInspector1.PropertyEditorHook:=PropertyEditorHook1; ObjectInspector1.Show; FormEditor1 := TFormEditor.Create; FormEditor1.Obj_Inspector := ObjectInspector1; SourceNotebook := TSourceNotebook.Create(self); SourceNotebook.OnActivate := @CodeorFormActivated; SourceNotebook.OnCloseFile := @FileClosedEvent; SourceNotebook.OnOpenFile := @FileOpenedEvent; SourceNotebook.OnSaveFile := @FileSavedEvent; itmFileSave.OnClick := @SourceNotebook.SaveClicked; itmFileSaveAs.OnClick := @SourceNotebook.SaveAsClicked; itmFileSaveAll.OnClick := @SourceNotebook.SaveAllClicked; itmFileClose.OnClick := @SourceNotebook.CloseClicked; itmFileNew.OnClick := @SourceNotebook.NewClicked; itmFileOpen.OnClick := @SourceNotebook.OpenClicked; SpeedButton4.OnClick := @SourceNotebook.OpenClicked; SpeedButton5.OnClick := @SourceNotebook.SaveClicked; SpeedButton6.OnClick := @SourceNotebook.SaveAllClicked; end; procedure TMainIDE.OIOnAddAvailableComponent(AComponent:TComponent; var Allowed:boolean); begin Allowed:=(not (AComponent is TGrabber)); end; procedure TMainIDE.OIOnSelectComponent(AComponent:TComponent); var Form : TCustomForm; begin Form := GetParentForm(TControl(AComponent)); //not implemented yet TDesigner(Form.Designer).SelectOnlyThisComponent(AComponent); end; Procedure TMainIDE.ToolButtonCLick(Sender : TObject); Begin Assert(False, 'Trace:TOOL BUTTON CLICK!'); {if ComboBox1.Parent = Toolbar1 then Begin ComboBox1.Parent := MainIDE; ComboBox1.Left := 25; ComboBox1.top := 25; end else ComboBox1.Parent := Toolbar1;} end; Procedure TMainIDE.FormPaint(Sender : TObject); begin end; procedure TMainIDE.ButtonClick(Sender : TObject); Begin End; {------------------------------------------------------------------------------} procedure TMainIDE.FormShow(Sender : TObject); Begin end; procedure TMainIDE.FormKill(Sender : TObject); Begin Assert(False, 'Trace:DESTROYING FORM'); End; {------------------------------------------------------------------------------} procedure TMainIDE.LoadMainMenu; var fContext : Integer; R : TRect; begin //-------------- // The Menu //-------------- mnuMain := TMainMenu.Create(Self); Menu := mnuMain; //-------------- // Main menu //-------------- mnuFile := TMenuItem.Create(Self); mnuFile.Caption := '&File'; mnuMain.Items.Add(mnuFile); mnuEdit := TMenuItem.Create(Self); mnuEdit.Caption := '&Edit'; mnuMain.Items.Add(mnuEdit); mnuSearch := TMenuItem.Create(Self); mnuSearch.Caption := '&Search'; mnuMain.Items.Add(mnuSearch); mnuView := TMenuItem.Create(Self); mnuView.Caption := '&View'; mnuMain.Items.Add(mnuView); mnuProject := TMenuItem.Create(Self); mnuProject.Caption := '&Project'; mnuMain.Items.Add(mnuProject); mnuEnvironment := TMenuItem.Create(Self); mnuEnvironment.Caption := 'E&nvironment'; mnuMain.Items.Add(mnuEnvironment); //-------------- // File //-------------- itmFileNew := TMenuItem.Create(Self); itmFileNew.Caption := 'New Unit'; itmFileNew.Name := 'FileNew'; // itmFileNew.OnClick := @mnuNewClicked; mnuFile.Add(itmFileNew); itmFileNewForm := TMenuItem.Create(Self); itmFileNewForm.Caption := 'New Form'; itmFileNewForm.OnClick := @mnuNewFormClicked; itmFileNewForm.Name := 'FileNewForm'; mnuFile.Add(itmFileNewForm); itmFileOpen := TMenuItem.Create(Self); itmFileOpen.Caption := 'Open'; itmFileOpen.Name := 'FileOpen'; mnuFile.Add(itmFileOpen); itmFileSave := TMenuItem.Create(Self); itmFileSave.Caption := 'Save'; itmFileSave.Name := 'FileSave'; mnuFile.Add(itmFileSave); itmFileSaveAs := TMenuItem.Create(Self); itmFileSaveAs.Caption := 'Save As'; itmFileSaveAs.Name := 'FileSaveAs'; mnuFile.Add(itmFileSaveAs); itmFileSaveAll := TMenuItem.Create(Self); itmFileSaveAll.Caption := 'Save All'; mnuFile.Add(itmFileSaveAll); itmFileClose := TMenuItem.Create(Self); itmFileClose.Caption := 'Close'; itmFileClose.Enabled := False; mnuFile.Add(itmFileClose); mnuFile.Add(CreateSeperator); itmFileQuit := TMenuItem.Create(Self); itmFileQuit.Caption := 'Quit'; itmFileQuit.OnClick := @mnuQuitClicked; mnuFile.Add(itmFileQuit); //-------------- // Edit //-------------- itmEditUndo := TMenuItem.Create(nil); itmEditUndo.Caption := 'Undo'; mnuEdit.Add(itmEditUndo); itmEditRedo := TMenuItem.Create(nil); itmEditRedo.Caption := 'Redo'; mnuEdit.Add(itmEditRedo); mnuEdit.Add(CreateSeperator); itmEditCut := TMenuItem.Create(nil); itmEditCut.Caption := 'Cut'; mnuEdit.Add(itmEditCut); itmEditCopy := TMenuItem.Create(nil); itmEditCopy.Caption := 'Copy'; mnuEdit.Add(itmEditCopy); itmEditPaste := TMenuItem.Create(nil); itmEditPaste.Caption := 'Paste'; mnuEdit.Add(itmEditPaste); //-------------- // Search //-------------- itmSearchFind := TMenuItem.Create(nil); itmSearchFind.caption := 'Find'; itmSearchFind.OnClick := @mnuSearchFindClicked; mnuSearch.add(itmSearchFind); itmSearchFindAgain := TMenuItem.Create(nil); itmSearchFindAgain.caption := 'Find &Again'; itmSearchFindAgain.OnClick := @mnuSearchFindAgainClicked; itmSearchFindAgain.Enabled := False; mnuSearch.add(itmSearchFindAgain); //-------------- // View //-------------- itmViewInspector := TMenuItem.Create(Self); itmViewInspector.Caption := 'Object Inspector'; itmViewInspector.OnClick := @mnuViewInspectorClicked; mnuView.Add(itmViewInspector); itmViewProject := TMenuItem.Create(Self); itmViewProject.Caption := 'Project Explorer'; mnuView.Add(itmViewProject); mnuView.Add(CreateSeperator); itmViewProjectOptions := TMenuItem.Create(Self); itmViewProjectOptions.Caption := 'Project Options'; mnuView.Add(itmViewProjectOptions); itmViewCompilerSettings := TMenuItem.Create(Self); itmViewCompilerSettings.Caption := 'Compiler Options'; itmViewCompilerSettings.OnClick := @mnuViewCompilerSettingsClicked; mnuView.Add(itmViewCompilerSettings); itmViewCodeExplorer := TMenuItem.Create(Self); itmViewCodeExplorer.Caption := 'Code Explorer'; itmViewCodeExplorer.OnClick := @mnuViewCodeExplorerClick; mnuView.Add(itmViewCodeExplorer); mnuView.Add(CreateSeperator); itmViewUnits := TMenuItem.Create(Self); itmViewUnits.Caption := 'Units...'; itmViewUnits.OnClick := @mnuViewUnitsClicked; mnuView.Add(itmViewUnits); itmViewForms := TMenuItem.Create(Self); itmViewForms.Caption := 'Forms...'; itmViewForms.OnClick := @mnuViewFormsClicked; mnuView.Add(itmViewForms); itmViewColors := TMenuItem.Create(Self); itmViewCOlors.Caption := 'Color Dialog'; itmViewColors.OnClick := @mnuViewColorClicked; mnuView.Add(itmViewColors); itmViewFont := TMenuItem.Create(Self); itmViewFont.Caption := 'Font...'; itmViewFont.OnClick := @mnuViewFontClicked; mnuView.Add(itmViewFont); mnuView.Add(CreateSeperator); itmViewMEssage := TMenuItem.Create(Self); itmViewMessage.Caption := 'Messages'; itmViewMessage.OnClick := @mnuViewMessagesClick; mnuView.Add(itmViewMessage); //-------------- // Project //-------------- itmProjectNew := TMenuItem.Create(Self); itmProjectNew.Caption := 'New Project'; itmProjectNew.OnClick := @mnuNewProjectClicked; mnuProject.Add(itmProjectNew); itmProjectOpen := TMenuItem.Create(Self); itmProjectOpen.Caption := 'Open Project'; itmProjectOpen.OnClick := @mnuOpenProjectClicked; mnuProject.Add(itmProjectOpen); itmProjectSave := TMenuItem.Create(Self); itmProjectSave.Caption := 'Save Project'; itmProjectSave.OnClick := @mnuSaveProjectClicked; mnuProject.Add(itmProjectSave); mnuProject.Add(CreateSeperator); itmProjectBuild := TMenuItem.Create(Self); itmProjectBuild.Caption := 'Build'; itmProjectBuild.OnClick := @mnuBuildProjectClicked; itmProjectBuild.Enabled := False; mnuProject.Add(itmProjectBuild); itmProjectRun := TMenuItem.Create(Self); itmProjectRun.Caption := 'Run'; itmProjectRun.OnClick := @mnuRunProjectClicked; mnuProject.Add(itmProjectRun); //-------------- // Environment //-------------- itmEnvironmentOptions := TMenuItem.Create(nil); itmEnvironmentOptions.Caption := 'Options'; mnuEnvironment.Add(itmEnvironmentOptions); end; {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {PRIVATE METHOD} function TMainIDE.CreateSeperator : TMenuItem; begin itmSeperator := TMenuItem.Create(Self); itmSeperator.Caption := '-'; Result := itmSeperator; end; procedure TMainIDE.LoadResourceFromFile(Value : String); Var Texts : String; Temps : String; Classnm : String; //like 'TMainIDE' Datatype : String; //like 'FORMDATA' TextFile : TStringList; ResourceData : String; I,A : Integer; Instance : TComponent; CompResource : TLResource; Begin textFile := TStringList.Create; TextFile.LoadFromFile(Value); //Get the first line Texts := TextFile.Strings[0]; Texts := Copy(Texts,pos('(''',Texts)+2,Length(Texts)); Classnm := Copy(Texts,1,pos('''',Texts)); Texts := Copy(Texts,pos('''',Texts)+3,Length(Texts)); DataType := Copy(Texts,1,length(Texts)-2); Writeln('Classnm is '+Classnm); Writeln('DataType is '+DataType); ResourceData := ''; For I := 1 to TextFile.Count-2 do ResourceData := ResourceData+trim(TextFile.Strings[i]); While pos('+',ResourceData) <> 0 do Delete(ResourceData,pos('+',ResourceData),1); While pos('''',ResourceData) <> 0 do Delete(ResourceData,pos('''',ResourceData),1); While pos('#',ResourceData) <> 0 do Delete(ResourceData,pos('#',ResourceData),1); LazarusResources.Add(Classnm,Datatype,ResourceData); Delete(Value,pos('.',Value),Length(Value)); {what now???} end; function TMainIDE.ReturnActiveUnitList : TUnitInfo; var I : Integer; SList : TUnitInfo; TempNum : Integer; begin end; {------------------------------------------------------------------------------} {Fills the View Units dialog and the View Forms dialog} {------------------------------------------------------------------------------} Procedure TMainIDE.UpdateViewDialogs; Var I : Integer; SList : TUnitInfo; Begin ViewUnits1.Listbox1.Items.Clear; ViewForms1.Listbox1.Items.Clear; For I := 0 to Project1.UnitList.Count -1 do Begin SList := TUnitInfo(Project1.UnitList.Items[I]); ViewUnits1.Listbox1.Items.Add(SList.Name); if SList.FormName <> '' then ViewForms1.Listbox1.Items.Add(SList.FormName); end; End; {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} Procedure TMainIDE.SetFlags(SList : TUnitInfo); var Texts : String; tempNUm1, TempNUm2 : Integer; Begin Assert(False, 'Trace:SList.filename = '+SList.Filename); Texts := Uppercase(ExtractFileName(SList.Filename)); Assert(False, 'Trace:Texts := '+Texts); tempNum1 := pos('.',Texts); Assert(False, 'Trace:Tempnum1 = '+inttostr(tempnum1)); Texts := Copy(Texts,tempNum1+1,Length(Texts)-tempNum1); Assert(False, 'Trace:Texts = '+Texts); if (Texts = 'PP') or (Texts = 'PAS') then SList.Flags := pfSource else if (Texts = 'LPR') or (Texts = 'DPR') then SList.Flags := pfProject else SList.Flags := pfNone; {debugging} if SList.Flags = pfProject then Assert(False, 'Trace:' + SLIst.FileName+' is set to pfProject') else if SList.Flags = pfSource then Assert(False, 'Trace:' + SLIst.FileName+' is set to pfSource') else if SList.Flags = pfNone then Assert(False, 'Trace:' + SLIst.FileName+' is set to pfNone'); end; Procedure TMainIDE.SetName_Form(SList : TUnitInfo); Begin if (SList.flags = pfSource) or (SList.Flags = pfProject) then Begin Assert(False, 'Trace:filename is '+SList.Filename); Assert(False, 'Trace:pos is '+inttostr(pos('.',SList.Filename))); if pos('.',SList.Filename) > 0 then SList.Name := Copy(ExtractFileName(SList.Filename),1,pos('.',ExtractFileName(SList.Filename))-1) else SList.Name := ExtractFileName(SList.Filename); Assert(False, 'Trace:Name of new unit is '+SList.Name); end; if SList.flags = pfSource then Begin SList.FormName := ReturnFormname(SList.Source); if SList.FormName <> '' then SList.Flags := pfForm; end; Assert(False, 'Trace:Exiting SetName_Form'); end; Procedure TMainIDE.mnuToggleFormClicked(Sender : TObject); Begin writeln('Toggle form clicked'); if FCodeLastActivated then SourceNotebook.DisplayFormforActivePage else SourceNotebook.DisplayCodeforControl(FControlLastActivated); end; Procedure TMainIDE.CodeorFormActivated(Sender : TObject); Begin FCodeLastActivated := (TForm(Sender) = TForm(SourceNotebook)); if FCodeLastActivated then Writeln('TRUE') else Writeln('False'); FControlLastActivated := Sender; end; Procedure TMainIDE.SetDesigning(Control : TComponent; Value : Boolean); Begin Writeln('Setting designing'); Control.SetDesigning(Value); Writeln('Set'); end; Function TMainIDE.SearchPaths : String; Begin Result := CompilerOpts.OtherUnitFiles; End; { ------------------------------------------------------------------------ ------------------------------------------------------------------------ -------------------ControlClick----------------------------------------- ------------------------------------------------------------------------ ------------------------------------------------------------------------ } Procedure TMainIDE.ControlClick(Sender : TObject); var Page : Integer; I : Integer; IDECOmp : TIDEComponent; Speedbutton : TSpeedbutton; Temp : TControl; begin if Sender is TSpeedButton then Begin Writeln('sender is a speedbutton'); Writeln('The name is '+TSpeedbutton(sender).name); SpeedButton := TSPeedButton(Sender); Writeln('Speedbutton s Name is '+SpeedButton.name); //find the IDECOmponent that has this speedbutton IDEComp := IDECompList.FindCompbySpeedButton(SpeedButton); if SelectedComponent <> nil then TIDeComponent(IdeCompList.FindCompByRegComponent(SelectedComponent)).SpeedButton.Down := False else begin Temp := nil; for i := 0 to Notebook1.Page[Notebook1.Pageindex].ControlCount-1 do begin if CompareText(TControl(Notebook1.Page[Notebook1.Pageindex].Controls[I]).Name, 'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)) = 0 then begin temp := TControl(Notebook1.Page[Notebook1.Pageindex].Controls[i]); Break; end; end; if temp <> nil then TSpeedButton(Temp).down := False else Writeln('*****************ERROR - Control '+'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)+' not found'); end; if IDECOmp <> nil then Begin //draw this button down SpeedButton.Down := True; SelectedComponent := IDEComp.RegisteredComponent; end else begin SelectedComponent := nil; Temp := nil; for i := 0 to Notebook1.Page[Notebook1.Pageindex].ControlCount-1 do begin if CompareText(TControl(Notebook1.Page[Notebook1.Pageindex].Controls[I]).Name, 'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)) = 0 then begin temp := TControl(Notebook1.Page[Notebook1.Pageindex].Controls[i]); Break; end; end; if temp <> nil then TSpeedButton(Temp).down := True else Writeln('*****************ERROR - Control '+'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)+' not found'); end; end else Begin Writeln('must be nil'); //draw old speedbutton up if SelectedComponent <> nil then TIDeComponent(IdeCompList.FindCompByRegComponent(SelectedComponent)).SpeedButton.Down := False; SelectedComponent := nil; Temp := nil; for i := 0 to Notebook1.Page[Notebook1.Pageindex].ControlCount-1 do begin if CompareText(TControl(Notebook1.Page[Notebook1.Pageindex].Controls[I]).Name, 'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)) = 0 then begin temp := TControl(Notebook1.Page[Notebook1.Pageindex].Controls[i]); Break; end; end; if temp <> nil then TSpeedButton(Temp).down := True else Writeln('*****************ERROR - Control '+'GlobalMouseSpeedButton'+inttostr(Notebook1.Pageindex)+' not found'); end; Writeln('Exiting ControlClick'); end; {function TMainIDE.FindDesigner(ChildComponent:TComponent):TDesigner; begin if ChildComponent is TForm then Result:=TDesigner(TForm(ChildComponent).Designer) else if Assigned(ChildComponent.Owner) and (ChildComponent.Owner is TForm) then Result:=TDesigner(TForm(ChildComponent.Owner).Designer) else Result:=nil; end; } {procedure TMainIDE.SelectOnlyThisComponent(AComponent:TComponent); var CurDesigner:TDesigner; begin // select control in Designer CurDesigner:=FindDesigner(AComponent); if (CurDesigner<>nil) then begin CurDesigner.ControlSelection.Clear; CurDesigner.ControlSelection.Add(TControl(AComponent)); end; FormEditor1.ClearSelected; // this will automatically inform the object inspector FormEditor1.AddSelected(AComponent); end; } {------------------------------------------------------------------------------} procedure TMainIDE.mnuNewFormClicked(Sender : TObject); var I,N: Integer; SList : TUnitInfo; TempName : String; TempFormName : String; Found : Boolean; TempForm : TCustomForm; CInterface : TComponentInterface; begin //TempForm := TForm.Create(Self); //TempForm.Parent := Self; if not Assigned(FormEditor1) then FormEditor1 := TFormEditor.Create; FormEditor1.SelectedComponents.Clear; CInterface := TComponentInterface( FormEditor1.CreateComponent(nil,TForm, ObjectInspector1.Left+ObjectInspector1.Width+5,ObjectInspector1.Top, 400,300)); TempForm:=TForm(CInterface.Control); SetDefaultsForForm(TempForm); TDesigner(tempForm.Designer).SourceEditor := SourceNotebook.CreateUnitFromForm(TForm(TempForm)); TempForm.Show; SetDesigning(TempForm,True); PropertyEditorHook1.LookupRoot := TForm(CInterface.Control); FormEditor1.ClearSelected; FormEditor1.AddSelected(TComponent(CInterface.Control)); end; {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {------------------------------------------------------------------------------} {----------------OpenFileDownArrowClicked--------------------------------------} {------------------------------------------------------------------------------} Procedure TMainIDE.OpenFileDownArrowClicked(Sender : TObject); Begin //display the PopupMenu if OpenFilePopupMenu.Items.Count > 0 then OpenFilePopupMenu.Popup(0,0); end; //============================================================================== { This function creates a LFM file from any form. To create the LFC file use the program lazres or the LFMtoLFCfile function. } function CreateLFM(AForm:TCustomForm):integer; // 0 = ok // -1 = error while streaming AForm to binary stream // -2 = error while streaming binary stream to text file var BinStream,TxtMemStream:TMemoryStream; Driver: TAbstractObjectWriter; Writer:TWriter; TxtFileStream:TFileStream; begin BinStream:=TMemoryStream.Create; try try Driver:=TBinaryObjectWriter.Create(BinStream,4096); try Writer:=TWriter.Create(Driver); try Writer.WriteDescendent(AForm,nil); finally Writer.Free; end; finally Driver.Free; end; except Result:=-1; exit; end; try // transform binary to text and save LFM file TxtMemStream:=TMemoryStream.Create; TxtFileStream:=TFileStream.Create(lowercase(AForm.ClassName)+'.lfm',fmCreate); try BinStream.Position:=0; ObjectBinaryToText(BinStream,TxtMemStream); TxtMemStream.Position:=0; TxtFileStream.CopyFrom(TxtMemStream,TxtMemStream.Size); finally TxtMemStream.Free; TxtFileStream.Free; end; except Result:=-2; exit; end; finally BinStream.Free; end; end; //============================================================================== Procedure TMainIDE.FileClosedEvent(Sender : TObject; Filename : String); var MenuItem : TMenuItem; Begin end; Procedure TMainIDE.SetDefaultsforForm(aForm : TCustomForm); Begin aForm.Designer := TDesigner.Create(aForm); TDesigner(aForm.Designer).MainIDE := Self; TDesigner(aForm.Designer).FormEditor := FormEditor1; aForm.OnActivate := @CodeOrFormActivated; end; Procedure TMainIDE.FileOpenedEvent(Sender : TObject; Filename : String); var MenuItem : TMenuItem; CInterface : TComponentInterface; TempForm : TCustomForm; Texts : String; I : Integer; Begin //Add a new menuitem to the popup that displays the filename. MenuItem := TMenuItem.Create(Self); MenuItem.Caption := Filename; MenuItem.OnClick := @SourceNotebook.OpenClicked; OpenFilePopupMenu.Items.Add(MenuItem); Texts := Filename; //chop off the extension. delete(Texts,pos('.',Texts),length(texts)); Texts := Texts + '.lfm'; Writeln('the filename is '+texts); if FileExists(Texts) then begin FormEditor1.SelectedComponents.Clear; TempForm := FormEditor1.NewFormFromLFM(Texts); CInterface := TComponentInterface(FormEditor1.CreateControlComponentInterface(tempForm)); SetDefaultsForForm(TempForm); TSourceEditor(sender).control := TempForm; TDesigner(TempForm.Designer).SourceEditor := TSourceEditor(sender); for I := 0 to TempForm.ComponentCount -1 do FormEditor1.CreateControlComponentInterface(TempForm.Components[i]); TempForm.Show; SetDesigning(TempForm,True); PropertyEditorHook1.LookupRoot := TForm(CInterface.Control); FormEditor1.ClearSelected; FormEditor1.AddSelected(TComponent(CInterface.Control)); end; //enable save buttons here SpeedButton5.Enabled := True; SpeedButton6.Enabled := True; RunSpeedButton.Enabled := True; end; Procedure TMainIDE.FileSavedEvent(Sender : TObject; Filename : String); var MenuItem : TMenuItem; Begin //sender is the TSourceEditor writeln('FILESAVEDEVENT'); If TSourceEditor(Sender).IsControlUnit then begin Writeln('*****************CREATING LFM********************'); // Writeln('Result = '+Inttostr(CreateLFM(TCustomForm(TSourceEditor(Sender).Control)))); // writeln('RESULT IS '+inttostr(CreateLFM(Self))); Writeln('Result = '+Inttostr(CreateLFM(ViewUnits1))); Writeln('Result = '+Inttostr(CreateLFM(ViewForms1))); // Writeln('Result = '+Inttostr(CreateLFM(MessageDlg))); // Writeln('Result = '+Inttostr(CreateLFM(FindDialog1))); // Writeln('Result = '+Inttostr(CreateLFM(MainIDE))); end; end; {------------------------------------------------------------------------------} procedure TMainIDE.mnuQuitClicked(Sender : TObject); var I : Integer; SList : TUnitInfo; begin //if there is a project loaded, check if it should be saved //free the unitlist objects if Project1.UnitList.Count > 0 then For I := 0 to Project1.UnitList.Count -1 do Begin SList := TUnitInfo(Project1.UnitList.Items[I]); SList.Destroy; end; Project1.UnitList.Free; Close; end; {------------------------------------------------------------------------------} procedure TMainIDE.mnuViewInspectorClicked(Sender : TObject); begin ObjectInspector1.Show; end; {------------------------------------------------------------------------------} procedure TMainIDE.mnuViewCompilerSettingsClicked(Sender : TObject); begin frmCompilerOptions.Show; end; Procedure TMainIDE.mnuViewUnitsClicked(Sender : TObject); Begin Writeln('View Units Clicked'); ViewUnits1.ShowModal; Writeln('Done with ViewUnits Clicked'); end; Procedure TMainIDE.mnuViewFormsClicked(Sender : TObject); Begin end; Procedure TMainIDE.mnuViewCodeExplorerClick(Sender : TObject); begin SourceNotebook.Show; end; Procedure TMainIDE.mnuViewMessagesClick(Sender : TObject); Begin Messagedlg.Show; End; Procedure TMainIDE.DoFind(Sender : TObject); Begin end; Procedure TMainIDE.mnuSearchFindClicked(Sender : TObject); Begin itmSearchFindAgain.Enabled := True; FindDialog1.ShowModal; End; Procedure TMainIDE.mnuSearchFindAgainClicked(Sender : TObject); Begin DoFind(itmSearchFindAgain); End; Procedure TMainIDE.mnuNewProjectClicked(Sender : TObject); var SList : TUnitInfo; Begin Assert(False, 'Trace:New Project Clicked'); end; {------------------------------------------------------------} Procedure TMainIDE.mnuOpenProjectClicked(Sender : TObject); Begin end; Procedure TMainIDE.mnuSaveProjectClicked(Sender : TObject); Begin end; Procedure TMainIDE.mnuBuildProjectClicked(Sender : TObject); Begin if SourceNotebook.Empty then Begin Application.MessageBox('No units loaded. Load a program first!','Error',mb_OK); Exit; end; //for now just compile the active unit; SourceNotebook.SaveClicked(Sender); if not(MessageDlg.Visible) then Begin //display the dialog under the TSourceNotebook MessageDlg.Show; MessageDlg.Top := Screen.Height - 150; MessageDlg.Height := 150; { if (SourceNotebook.Top+SourceNotebook.Height) > MEssageDlg.Top then SourceNotebook.Height := SourceNotebook.Height - (ABS(MessageDlg.Top - (SourceNotebook.Top+SourceNotebook.Height))); } MessageDlg.Left := SourceNotebook.Left; MessageDlg.Width := SourceNotebook.Width; end; MessageDlg.Clear; Compiler1.Compile(SourceNotebook.ActiveUnitName); end; Procedure TMainIDE.mnuRunProjectClicked(Sender : TObject); var Filename : String; TheProcess : TProcess; TheProgram : String; begin if SourceNotebook.Empty then Begin Application.MessageBox('No units loaded. Load a program first!','Error',mb_OK); Exit; end; TheProgram := ExtractFileName(SourceNotebook.ActiveUnitName); //remove the extension if pos('.',TheProgram) <> 0 then delete(ThePRogram,pos('.',TheProgram),length(TheProgram)); if not FileExists(ExtractFilePath(SOurceNotebook.ActiveUnitName)+TheProgram) then Begin TheProgram := 'No program called "'+TheProgram+'" found!'; Application.MessageBox(@TheProgram,'Error',MB_OK); exit; end; TheProcess:=TProcess.Create(TheProgram,[poRunSuspended,poUsePipes,poNoConsole]); TheProcess.Execute; end; Procedure TMainIDE.mnuViewColorClicked(Sender : TObject); begin ColorDialog1.Execute; end; Procedure TMainIDE.mnuViewFontClicked(Sender : TObject); Begin FontDialog1.Execute; end; Function TMainIDE.ReturnFormName(Source : TStringlist) : String; Var I : Integer; Num,Num2 : Integer; Found : Boolean; Texts : String; Temp : String; Temp2 : String; Begin //Assert(False, 'Trace:************************************************'); //Assert(False, 'Trace:************************************************'); //Assert(False, 'Trace:************************************************'); //Assert(False, 'Trace:************************************************'); //Assert(False, 'Trace:************************************************'); //move to TUnitInfo //parse file for the first class(TForm) I guess Found := False; for I := 0 to Source.Count-1 do Begin Num := pos(uppercase('class(TForm)'),uppercase(Source.Strings[I])); if Num <> 0 then Begin Temp := Source.Strings[i]; //pull out class name Texts := ''; for Num2 := 1 to length(Temp) do Begin if (Temp[num2] in ['a'..'z']) or (Temp[num2] in ['A'..'Z']) or (Temp[num2] in ['0'..'1'])then Texts := Texts + Temp[num2] else if Length(Texts) <> 0 then Break; end; temp := Texts; // Assert(False, 'Trace:*******************'); // Assert(False, 'Trace:Temp := '+Temp); Found := True; Break; end; end; if Found then Begin {Temp now holds TFORM1 or whatever the name of the class is} {Search for the var statement from the I line down} Texts := ''; Num := I; for I := Num to Source.Count-1 do Begin Found := False; Num := pos('VAR',uppercase(Source.Strings[I])); if Num <> 0 then Begin Temp2 := Source.Strings[I]; //Check around the VAR to see either spaces or begin/end of line if (Length(Temp2) = 3) then Begin Found := True; // Assert(False, 'Trace:1'); Num := I; Break; end; //var in the beginning of a sentence if (Num = 1) and ( not ( (Temp2[4] in CapLetters) or (Temp2[4] in SmallLetters) or (Temp2[4] in Numbers))) then Begin Found := True; Num := I; // Assert(False, 'Trace:2'); Break; end; if ((Num+2) = length(Temp2)) and not ( (Temp2[Num-1] in CapLetters) or (Temp2[Num-1] in SmallLetters) or (Temp2[Num-1] in Numbers)) then Begin Found := True; Num := I; // Assert(False, 'Trace:3'); Break; end; if not ( (Temp2[Num-1] in CapLetters) or (Temp2[Num-1] in SmallLetters) or (Temp2[Num-1] in Numbers)) and not ( (Temp2[Num+3] in CapLetters) or (Temp2[Num+3] in SmallLetters) or (Temp2[Num+3] in Numbers)) then Begin Found := True; Num := I; // Assert(False, 'Trace:4'); Break; end; end; end; end; Assert(False, 'Trace:Length of temp2 is '+inttostr(Length(Temp2))); if Found then begin for I := Num to Source.Count-1 do Begin Found := False; Num := pos(uppercase(temp),uppercase(Source.Strings[I])); if num <> 0 then begin num2 := pos(':', Source.Strings[i]); if num2 <> 0 then Begin Temp2 := Source.Strings[i]; for num := 1 to num2 do Begin if (Temp2[num] in ['a'..'z']) or (Temp2[num] in ['A'..'Z']) or (Temp2[num] in ['0'..'1'])then Texts := Texts + Temp2[num] else if Length(Texts) <> 0 then Break; end; break; end; end; end; end; result := Texts; end; Procedure TMainIDE.MessageViewDblClick(Sender : TObject); Begin end; initialization {$I images/laz_images.lrs} { $I mainide.lrs} { $I finddialog1.lrs} end. { ============================================================================= $Log$ Revision 1.49 2001/01/18 13:27:30 lazarus Minor changees Shane Revision 1.48 2001/01/16 23:30:45 lazarus trying to determine what's crashing LAzarus on load. Shane Revision 1.45 2001/01/15 20:55:44 lazarus Changes for loading filesa Shane Revision 1.44 2001/01/15 18:25:51 lazarus Fixed a stupid error I caused by using a variable as an index in main.pp and this variable sometimes caused an exception because the index was out of range. Shane Revision 1.43 2001/01/14 03:56:57 lazarus Shane Revision 1.42 2001/01/13 06:11:06 lazarus Minor fixes Shane Revision 1.41 2001/01/13 03:09:37 lazarus Minor changes Shane Revision 1.40 2001/01/12 18:46:49 lazarus Named the speedbuttons in MAINIDE and took out some writelns. Shane Revision 1.39 2001/01/12 18:10:53 lazarus Changes for keyevents in the editor. Shane Revision 1.38 2001/01/09 21:06:06 lazarus Started taking KeyDown messages in TDesigner Shane Revision 1.37 2001/01/09 18:23:20 lazarus Worked on moving controls. It's just not working with the X and Y coord's I'm getting. Shane Revision 1.36 2001/01/08 23:48:33 lazarus MWE: ~ Changed makefiles ~ Removed testform from lararus and changed it into program * some formatting Revision 1.35 2001/01/06 06:28:47 lazarus Made Designer control the control movement and such. I am now using ISDesignMsg to move the controls. Shane Revision 1.32 2001/01/04 20:33:53 lazarus Moved lresources. Moved CreateLFM to Main.pp Changed Form1 and TFOrm1 to MainIDE and TMainIDE Shane Revision 1.30 2001/01/03 18:44:54 lazarus The Speedbutton now has a numglyphs setting. I started the TStringPropertyEditor Revision 1.29 2000/12/29 20:43:17 lazarus I added the run button with an Enable and disable icon Revision 1.25 2000/12/29 13:35:50 lazarus Mattias submitted new lresources.pp and lazres.pp files. Shane Revision 1.23 2000/12/21 20:28:33 lazarus Project - RUN will run the program IF the program is the active unit in the Editor. Shane Revision 1.22 2000/12/20 20:04:30 lazarus Made PRoject Build compile the active unit. This way we can actually play with it by compiling units. Revision 1.19 2000/12/19 18:43:12 lazarus Removed IDEEDITOR. This causes the PROJECT class to not function. Saving projects no longer works. I added TSourceNotebook and TSourceEditor. They do all the work for saving/closing/opening units. Somethings work but they are in early development. Shane Revision 1.18 2000/12/15 18:25:16 lazarus Changes from Mattias and I. Shane Revision 1.16 2000/12/01 20:23:34 lazarus renamed Object_Inspector and Prop_edits by removing the underline. Shane Revision 1.5 2000/08/10 13:22:51 lazarus Additions for the FIND dialog Shane Revision 1.4 2000/08/09 18:32:10 lazarus Added more code for the find function. Shane Revision 1.2 2000/08/07 19:15:05 lazarus Added the Search menu to the IDE. Shane Revision 1.1 2000/07/13 10:27:47 michael + Initial import Revision 1.152 2000/07/09 20:18:55 lazarus MWE: + added new controlselection + some fixes ~ some cleanup Revision 1.151 2000/06/29 18:08:56 lazarus Shane Looking for the editor problem I made a few changes. I changed everything back to the original though. Revision 1.139 2000/06/12 18:33:45 lazarus Got the naming to work Shane Revision 1.136 2000/06/08 17:32:53 lazarus trying to add accel to menus. Shane Revision 1.135 2000/05/10 02:34:43 lazarus Changed writelns to Asserts except for ERROR and WARNING messages. CAW Revision 1.134 2000/05/09 18:37:02 lazarus *** empty log message *** Revision 1.133 2000/05/09 12:52:02 lazarus *** empty log message *** Revision 1.132 2000/05/08 16:07:32 lazarus fixed screentoclient and clienttoscreen Shane Revision 1.130 2000/05/03 17:19:29 lazarus Added the TScreem forms code by hongli@telekabel.nl Shane Revision 1.124 2000/03/31 18:41:02 lazarus Implemented MessageBox / Application.MessageBox calls. No icons yet, though... Revision 1.123 2000/03/30 18:23:07 lazarus Pulled unneeded code out of main.pp Shane Revision 1.121 2000/03/24 14:40:41 lazarus A little polishing and bug fixing. Revision 1.120 2000/03/23 20:40:02 lazarus Added some drag code Shane Revision 1.119 2000/03/22 17:09:28 lazarus *** empty log message *** Revision 1.118 2000/03/21 21:09:19 lazarus *** empty log message *** Revision 1.113 2000/03/19 23:01:41 lazarus MWE: = Changed splashscreen loading/colordepth = Chenged Save/RestoreDC to platform dependent, since they are relative to a DC Revision 1.112 2000/03/19 03:52:08 lazarus Added onclick events for the speedbuttons. Shane Revision 1.111 2000/03/18 03:08:35 lazarus MWE: ~ Enabled slpash code again (cvs didn't update spash.pp at first) Revision 1.110 2000/03/18 01:08:30 lazarus MWE: ~ Commentedout SplashScreen (missing) + Fixed Speedbutton drawing Revision 1.109 2000/03/17 18:47:53 lazarus Added a generic splash form Shane Revision 1.106 2000/03/15 20:15:31 lazarus MOdified TBitmap but couldn't get it to work Shane Revision 1.105 2000/03/15 00:51:57 lazarus MWE: + Added LM_Paint on expose + Added forced creation of gdkwindow if needed ~ Modified DrawFrameControl + Added BF_ADJUST support on DrawEdge - Commented out LM_IMAGECHANGED in TgtkObject.IntSendMessage3 (It did not compile) Revision 1.104 2000/03/14 19:49:04 lazarus Modified the painting process for TWincontrol. Now it runs throug it's FCONTROLS list and paints all them Shane Revision 1.103 2000/03/14 05:54:01 lazarus Changed the name of the compiler options form. CAW Revision 1.102 2000/03/10 18:31:09 lazarus Added TSpeedbutton code Shane Revision 1.101 2000/03/09 23:37:51 lazarus MWE: * Fixed colorcache * Fixed black window in new editor ~ Did some cosmetic stuff From Peter Dyson : + Added Rect api support functions + Added the start of ScrollWindowEx Revision 1.100 2000/03/09 20:49:25 lazarus Added menus for Project Run and Project Build. They don't do anything yet. Revision 1.99 2000/03/07 16:52:58 lazarus Fixxed a problem with the main.pp unit determining a new files FORM name. Shane Revision 1.98 2000/03/03 22:58:25 lazarus MWE: Fixed focussing problem. LM-FOCUS was bound to the wrong signal Added GetKeyState api func. Now LCL knows if shift/trl/alt is pressed (might be handy for keyboard selections ;-) Revision 1.97 2000/03/03 20:22:02 lazarus Trying to add TBitBtn Shane Revision 1.95 2000/03/01 00:41:02 lazarus MWE: Fixed updateshowing problem Added some debug code to display the name of messages Did a bit of cleanup in main.pp to get the code a bit more readable (my editor does funny things with tabs if the indent differs) Revision 1.94 2000/02/29 23:00:04 lazarus Adding code for the ide. Shane Revision 1.93 2000/02/28 19:16:03 lazarus Added code to the FILE CLOSE to check if the file was modified. HAven't gotten the application.messagebox working yet though. It won't stay visible. Shane Revision 1.92 2000/02/25 19:28:34 lazarus Played with TNotebook to see why it crashes when I add a tab and the tnotebook is showing. Havn't figured it out Shane Revision 1.91 2000/02/24 21:15:29 lazarus Added TCustomForm.GetClientRect and RequestAlign to try and get the controls to align correctly when a MENU is present. Not Complete yet. Fixed the bug in TEdit that caused it not to update it's text property. I will have to look at TMemo to see if anything there was affected. Added SetRect to WinAPI calls Added AdjustWindowRectEx to WINAPI calls. Shane Revision 1.90 2000/02/23 14:19:09 lazarus Fixed the conflicts caused when two people worked on the ShowModal method for CustomForm and CustomDialog at the same time. Shane Revision 1.89 2000/02/22 22:19:49 lazarus TCustomDialog is a descendant of TComponent. Initial cuts a form's proper Close behaviour. Revision 1.88 2000/02/22 21:29:42 lazarus Added a few more options in the editor like closeing a unit. Also am keeping track of what page , if any, they are currently on. Shane Revision 1.85 2000/02/21 17:38:04 lazarus Added modalresult to TCustomForm Added a View Units dialog box Added a View Forms dialog box Added a New Unit menu selection Added a New Form menu selection Shane Revision 1.84 2000/02/20 20:13:46 lazarus On my way to make alignments and stuff work :-) Revision 1.83 2000/02/18 19:38:52 lazarus Implemented TCustomForm.Position Better implemented border styles. Still needs some tweaks. Changed TComboBox and TListBox to work again, at least partially. Minor cleanups. Revision 1.82 2000/01/31 20:00:21 lazarus Added code for Application.ProcessMessages. Needs work. Added TScreen.Width and TScreen.Height. Added the code into GetSystemMetrics for these two properties. Shane Revision 1.81 2000/01/18 21:47:00 lazarus Added OffSetRec Revision 1.80 2000/01/10 00:07:12 lazarus MWE: Added more scrollbar support for TWinControl Most signals for TWinContorl are jet connected to the wrong widget (now scrolling window, should be fixed) Added some cvs entries Revision 1.79 2000/01/05 23:13:13 lazarus MWE: Made some changes to the ideeditor to track notebook problems Revision 1.78 2000/01/04 23:12:46 lazarus MWE: Fixed LM_CHAR message. It is now after the LM_KEYUP message Fixed Menus at checkbox example. Removed references to TTabbedNtBK (somebody removed the files) and chanched it on the compileroptions form Revision 1.77 2000/01/04 21:00:34 lazarus *** empty log message *** Revision 1.76 2000/01/04 19:19:56 lazarus Modified notebook.inc so it works. Don't need tabnotbk.pp anymore... Shane Revision 1.74 2000/01/03 00:19:20 lazarus MWE: Added keyup and buttonup events Added LM_MOUSEMOVE callback Started with scrollbars in editor Revision 1.73 1999/12/30 19:49:07 lazarus *** empty log message *** Revision 1.71 1999/12/29 20:38:22 lazarus Modified the toolbar so it now displays itself. However, I can only add one button at this point. I will fix that soon.... Shane Revision 1.70 1999/12/23 21:48:13 lazarus *** empty log message *** Revision 1.66 1999/12/22 01:16:03 lazarus MWE: Changed/recoded keyevent callbacks We Can Edit! Commented out toolbar stuff Revision 1.65 1999/12/21 21:35:52 lazarus committed the latest toolbar code. Currently it doesn't appear anywhere and I have to get it to add buttons correctly through (I think) setstyle. I think I'll implement the LM_TOOLBARINSERTBUTTON call there. Shane Revision 1.64 1999/12/08 00:56:06 lazarus MWE: Fixed menus. Events aren't enabled yet (dumps --> invalid typecast ??) Revision 1.63 1999/11/30 21:30:06 lazarus Minor Issues Shane Revision 1.62 1999/11/25 23:45:08 lazarus MWE: Added font as GDIobject Added some API testcode to testform Commented out some more IFDEFs in mwCustomEdit Revision 1.61 1999/11/24 18:54:13 lazarus Added a unit called ideeditor.pp Shane Revision 1.60 1999/11/23 22:06:27 lazarus Minor changes to get it running again with the latest compiler. There is something wrong with the compiler that is preventing certain things from working. Shane Revision 1.59 1999/11/19 14:44:37 lazarus Changed the FONTSETNAME to try and load a default font if the first one doesn't work. This is being done for testing and probably will be removed later. Shane Revision 1.58 1999/11/17 01:12:52 lazarus MWE: Added a TestForm and moved mwEdit to that form. The form popsup after pressing the testform buttomn Revision 1.57 1999/11/05 17:48:17 lazarus Added a mwedit1 component to lazarus (MAIN.PP) It crashes on create. Shane Revision 1.56 1999/11/05 00:34:10 lazarus MWE: Menu structure updated, events and visible code not added yet Revision 1.55 1999/11/01 01:28:28 lazarus MWE: Implemented HandleNeeded/CreateHandle/CreateWND Now controls are created on demand. A call to CreateComponent shouldn't be needed. It is now part of CreateWnd Revision 1.54 1999/10/28 23:48:57 lazarus MWE: Added new menu classes and started to use handleneeded Revision 1.53 1999/10/28 17:17:41 lazarus Removed references to FCOmponent. Shane Revision 1.52 1999/10/19 19:16:51 lazarus renamed stdcontrols.pp stdctrls.pp Shane Revision 1.51 1999/09/30 21:59:00 lazarus MWE: Fixed TNoteBook problems Modifications: A few - Removed some debug messages + Added some others * changed fixed widged of TPage. Code is still broken. + TWinControls are also added to the Controls collection + Added TControl.Controls[] property Revision 1.50 1999/09/22 20:29:52 lazarus *** empty log message *** Revision 1.47 1999/07/30 18:18:05 lazarus Changes made: Added a LM_FONTGETSIZE call so you get the size, width and height of the current font. Not sure if height and size are the same or not. Added a cursor to the editor. When you click you should see it. Not sure if it works because I can't run Lazarus due to the linking problem. Shane Revision 1.46 1999/07/27 15:39:42 lazarus Changed version number. Shane Revision 1.45 1999/07/23 17:12:57 lazarus TCanvas seems to be working. Added Canvas. LineTo rectangle TextOut Line Shane Revision 1.44 1999/07/22 20:55:07 lazarus *** empty log message *** Revision 1.43 1999/07/18 03:57:32 lazarus Minor changes to help diagnose te Canvas and Resize problem. Revision 1.40 1999/07/17 06:14:26 lazarus TCanvas is almost working. Added TCanvas.FillRect procedure. TCanvas is still getting over written by something. Revision 1.39 1999/07/13 02:08:16 lazarus no message Revision 1.35 1999/07/09 13:54:43 lazarus Changed to use Dispatch instead of DispatchStr for messaging. You pass it LM_Message which is an integer value and therefore you can now use Dispatch to send the integer value back to the class. There is currently a problem with having multiple "message" procedures in one class so I commented them out for now. Shane Revision 1.34 1999/06/27 21:34:39 lazarus Minor messaging changes. Changed from TMyNotifyEvent to TNotifyEvent procedures Revision 1.33 1999/05/24 21:20:20 lazarus *** empty log message *** Revision 1.32 1999/05/20 02:04:58 lazarus Modified MAIN so the FILE SAVE menu item tries to save the last activepage Revision 1.29 1999/05/17 22:22:38 lazarus *** empty log message *** Revision 1.28 1999/05/17 04:16:26 lazarus TMemo colors files now. Still crashes once in a while. Certain files seem to make it crash. Try open buttons.pp Revision 1.26 1999/05/15 21:15:06 lazarus *** empty log message *** Revision 1.25 1999/05/14 18:44:14 lazarus *** empty log message *** Revision 1.24 1999/05/14 14:53:07 michael + Removed objpas from uses clause Revision 1.23 1999/05/07 05:46:53 lazarus *** empty log message *** Revision 1.20 1999/05/03 05:43:06 lazarus *** empty log message *** Revision 1.19 1999/05/01 03:55:28 lazarus *** empty log message *** Revision 1.18 1999/04/30 05:28:53 lazarus *** empty log message *** Revision 1.17 1999/04/28 05:29:36 lazarus *** empty log message *** Revision 1.16 1999/04/28 05:21:08 lazarus *** empty log message *** Revision 1.15 1999/04/27 05:08:47 lazarus *** empty log message *** Revision 1.14 1999/04/26 06:18:25 lazarus *** empty log message *** Revision 1.13 1999/04/24 03:59:14 lazarus *** empty log message *** Revision 1.12 1999/04/23 19:42:10 lazarus *** empty log message *** Revision 1.11 1999/04/23 14:54:58 lazarus Added a class TStatusBar and TAling into Comctrls.pp Added a class TStatusbar and TAlign into comctrls.pp They do not work exactly how they were planned. Plan is to create an Align widget, then a statusbar with an owner of TAlign type. TAlign would force the TStatusbar to remian on the bottom of the page during a form resize. Revision 1.10 1999/04/22 13:46:31 lazarus Added ToolTips. TControl contains FToolTip, TShowToolTip along with the "Set" methods for these properties. Every class descendant from TControl can have a TToolTip simply by setting it's pubplic property ToolTip and ShowToolTip := True 04/22/1999 Shane Miller Revision 1.9 1999/04/21 20:58:56 lazarus TRadioButton was added in stdControls. A problem exists in recreating them if the caption changes, but they are functional for now. Also, main.pp was modified just to show the use of radiobuttons. Revision 1.8 1999/04/21 14:17:45 lazarus TToggleBox added.\ Minor changes have been made to remove excess code once thought required. Revision 1.7 1999/04/21 06:12:07 lazarus *** empty log message *** Revision 1.5 1999/04/20 05:10:39 lazarus *** empty log message *** Revision 1.4 1999/04/20 03:28:50 lazarus *** empty log message *** Revision 1.3 1999/04/20 02:56:44 lazarus *** empty log message *** Revision 1.2 1999/04/18 05:42:11 lazarus *** empty log message *** Revision 1.1 1999/04/14 07:31:44 michael + Initial implementation }