lazarus/ide/main.pp
2000-12-01 15:50:39 +00:00

2623 lines
74 KiB
ObjectPascal

{ $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}
interface
uses
classes,LclLinux,compiler, stdctrls,forms,buttons,menus,comctrls,
Spin, project,sysutils, global,
compileroptions,Controls,graphics,extctrls, Dialogs,dlgMEssage,
Designer,process,idecomp,Find_dlg,FormEditor,CustomFormEditor,Object_Inspector;
const
STANDARDBTNCOUNT = 50;
type
TForm1 = class(TFORM)
Opendialog1 : TOpenDialog;
Savedialog1 : TSaveDialog;
FontDialog1 : TFontDialog;
ColorDialog1 : TColorDialog;
FindDialog1 : TFindDialog;
ToolBar1 : TToolBar;
Toolbutton1 : TToolButton;
Toolbutton2 : TToolButton;
Toolbutton3 : TToolButton;
Toolbutton4 : TToolButton;
Pixmap1 : TPixmap;//used to assign the tspeedbutton its image
Bitmap1 : TBitmap;
SpeedButton1 : TSpeedButton;
SpeedButton2 : TSpeedButton;
SpeedButton3 : TSpeedButton;
SpeedButton4 : TSpeedButton;
SpeedButton5 : TSpeedButton;
SpeedButton6 : TSpeedButton;
SpeedButton7 : TSpeedButton;
SpeedButton8 : TSpeedButton;
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 : TTabbedNotebook;
notebook1 : TNotebook;
cmdTest: TButton;
cmdTest2: TButton;
LAbel2 : TLabel;
{ event handlers }
procedure mnuNewClicked(Sender : TObject);
procedure mnuNewFormClicked(Sender : TObject);
procedure mnuOpenClicked(Sender : TObject);
procedure mnuSaveClicked(Sender : TObject);
procedure mnuSaveAsClicked(Sender : TObject);
procedure mnuSaveAllClicked(Sender : TObject);
procedure mnuCloseClicked(Sender : TObject);
procedure mnuQuitClicked(Sender : TObject);
procedure mnuViewInspectorClicked(Sender : TObject);
procedure mnuViewCompilerSettingsClicked(Sender : TObject);
Procedure mnuViewUnitsClicked(Sender : TObject);
Procedure mnuViewFormsClicked(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 MouseDownonForm(Sender : TObject; Button: TMouseButton; Shift : TShiftState; X, Y: Integer);
procedure MouseUponForm(Sender : TObject; Button: TMouseButton; Shift : TShiftState; X, Y: Integer);
procedure ClickonControl(Sender : TObject);
procedure ControlClick(Sender : TObject);
procedure MessageViewDblClick(Sender : TObject);
private
Function CreateSeperator : TMenuItem;
Procedure SetBtnDefaults(Control : Pointer;I,Page : Integer);
Function ReturnActiveUnitList : TUnitInfo;
Function Create_LFM(SList : TUnitInfo) : Boolean;
Function SavebyUnit(SList : TUnitInfo) : Boolean;
Procedure UpdateViewDialogs;
function CreateUnit(var UnitName : string) : TUnitInfo;
function RenameUnit(OldUnitName, NewUnitName : string;SList : TUnitInfo) : Boolean;
Procedure ReAssignEditorLines(SList : TUnitInfo);
Procedure ReAssignSourcefromEditor(var SList : TUnitInfo);
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;
Standardbtn : Array[1..STANDARDBTNCOUNT] of TSpeedbutton;
public
constructor Create(AOwner: TComponent); override;
procedure LoadMainMenu;
Procedure FormKill(Sender : TObject);
Procedure SetFlags(SLIst : TUnitInfo);
Procedure SetName_Form(SList : TUnitInfo);
procedure FormPaint(Sender : TObject);
//these numbers are used to determine where the mouse was when the button was pressed
Mouse_Down : TPoint;
bpressed : Integer;
end;
const
CapLetters = ['A'..'Z'];
SmallLetters = ['a'..'z'];
Numbers = ['0'..'1'];
var
Form1 : TForm1;
FormEditor1 : TFormEditor;
ObjectInspector1 : TObjectInspector;
Taginc : Integer;
implementation
uses
TestForm, IDEEditor,mwCustomEdit,gtk,ViewUnit_dlg,ViewForm_dlg;
constructor TForm1.Create(AOwner: TComponent);
var
Filename : String;
S : TStream;
i : Integer;
R : TRect;
IDEControl : pointer;
begin
inherited Create(AOwner);
Caption := Format('Lazarus Editor v 0.5- Lazarus path = %s Highlight colors: %d , %d , %d ,%d ,%d',[Application.exename,clHighlight, clHighlighttext, clRed,clBlue,clYellow]);
Left := 0;
Top := 0;
Width := Screen.Width-5;
height := 125;
Position:= poDesigned;
Name := 'Form1';
LoadMainMenu;
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 := 0;
// Notebook1.Top :=50+ mnuBarMain.Top+MnuBarMain.Height + 2;
Notebook1.Top :=50+ 2;
Notebook1.Width := ClientWidth;
Notebook1.Height := 100; //ClientHeight - Notebook1.Top;
Notebook1.Pages.Strings[0] := 'Standard';
Notebook1.Pages.Add('Additional');
Notebook1.Pages.Add('Samples');
Notebook1.Pages.Add('System');
Notebook1.Pages.Add('Internet');
Notebook1.PageIndex := 0; // Set it to the first page
Notebook1.Show;
Notebook1.OnPageChanged := @ControlClick;
Notebook1.Name := 'Notebook1';
S := TFileStream.Create('./images/viewunits.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton1 := TSpeedButton.Create(Self);
with Speedbutton1 do
Begin
Parent := self;
Enabled := True;
Top := 25;
OnClick := @mnuViewUnitsCLicked;
Glyph := Pixmap1;
Visible := True;
Flat := False;
Name := 'Speedbutton1';
end;
S := TFileStream.Create('./images/viewforms.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton2 := TSpeedButton.Create(Self);
with Speedbutton2 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton1.Left + 26;
OnClick := @mnuViewFormsCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton2';
end;
S := TFileStream.Create('./images/newunit.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton3 := TSpeedButton.Create(Self);
with Speedbutton3 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton2.Left + 26;
OnClick := @mnuNewCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton3';
end;
S := TFileStream.Create('./images/openfile.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton4 := TSpeedButton.Create(Self);
with Speedbutton4 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton3.Left + 26;
OnClick := @mnuOpenCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton4';
end;
S := TFileStream.Create('./images/save.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton5 := TSpeedButton.Create(Self);
with Speedbutton5 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton4.Left + 26;
OnClick := @mnuSaveCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton5';
end;
S := TFileStream.Create('./images/saveall.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton6 := TSpeedButton.Create(Self);
with Speedbutton6 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton5.left + 26;
OnClick := @mnuSaveAllCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton6';
end;
S := TFileStream.Create('./images/toggleform.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton7 := TSpeedButton.Create(Self);
with Speedbutton7 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton6.Left + 26;
// OnClick := @mnuToggleFormCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton7';
end;
S := TFileStream.Create('./images/newform.xpm', fmOpenRead);
try
Pixmap1 := TPixmap.Create;
Pixmap1.TransparentColor := clBtnFace;
Pixmap1.LoadFromStream(S);
finally
S.Free;
end;
SpeedButton8 := TSpeedButton.Create(Self);
with Speedbutton8 do
Begin
Parent := self;
Enabled := True;
Top := 25;
Left := Speedbutton7.Left + 26;
OnClick := @mnuNewFormCLicked;
Glyph := Pixmap1;
Visible := True;
Name := 'Speedbutton8';
end;
//start creating the components based on the TIDECOmponent classes
I := 1;
idecontrol := TIDEMouse.Create;
SetBtnDefaults(idecontrol,i,0);
inc(i);
idecontrol := TIDEMenu.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEPopup.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEEdit.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDELabel.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEButton.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEMemo.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDECheckbox.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDERadioButton.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEListbox.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
idecontrol := TIDEComboBox.Create;
SetBtnDefaults(idecontrol,I,0);
inc(i);
//we want the mouse on the second tab too!
SetBtnDefaults(ideCompList.Items[0],i,1);
StandardBtn[i].Tag := 1;
inc(i);
idecontrol := TIDEBitbtn.Create;
SetBtnDefaults(idecontrol,I,1);
inc(i);
idecontrol := TIDESpeedbutton.Create;
SetBtnDefaults(idecontrol,I,1);
inc(i);
idecontrol := TIDENotebook.Create;
SetBtnDefaults(idecontrol,I,1);
inc(i);
//we want the mouse on the second tab too!
SetBtnDefaults(ideCompList.Items[0],i,2);
StandardBtn[i].Tag := 1;
inc(i);
idecontrol := TIDESpinEdit.Create;
SetBtnDefaults(idecontrol,I,2);
inc(i);
StandardBtn[1].Down := True;
bpressed := 1; //the speedbutton that's pressed
{ This spin edit code crashes}
{ Setting the parent is what does it}
{ SpinEdit1 := TSpinEdit.Create(self);
with SpinEdit1 do
Begin
Parent := Notebook1.Page[0];
Left := 350;
Width := 100;
Height := 25;
// Parent := Self;
Visible := True;
// OnClick := @ButtonClick;
end;
}
{ cmdTest := TButton.Create(Self);
with cmdTest do
begin
Left := 350;
Width := 100;
Height := 25;
Parent := Notebook1.Page[0];
// Parent := Self;
Caption := 'TestForm / Editor';
Visible := True;
OnClick := @ButtonClick;
end;
}
{ ListBox1 := TListBox.Create(Self);
ListBox1.Parent:= Notebook1.Page[1];
ListBox1.Left := 20;
ListBox1.Top := 20;
ListBox1.Height := 100;
ListBox1.Width := 100;
ListBox1.Align:= alClient;
ListBox1.Items.Add('Hello');
ListBox1.Items.Add('world.');
ListBox1.Items.Add('It''s just a perfect day.');
ListBox1.Visible:= true;
}
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
OpenDialog1 := TOpenDialog.Create(self);
SaveDialog1 := TSaveDialog.Create(self);
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;
ObjectInspector1 := TObjectInspector.Create(Self);
ObjectInspector1.left := 0;
ObjectInspector1.Top := Top+Height+25;
ObjectInspector1.Height := 400;
ObjectInspector1.Show;
FormEditor1 := TFormEditor.Create;
FormEditor1.Obj_Inspector := ObjectInspector1;
end;
Procedure TForm1.ToolButtonCLick(Sender : TObject);
Begin
Assert(False, 'Trace:TOOL BUTTON CLICK!');
{if ComboBox1.Parent = Toolbar1 then
Begin
ComboBox1.Parent := Form1;
ComboBox1.Left := 25;
ComboBox1.top := 25;
end
else
ComboBox1.Parent := Toolbar1;}
end;
Procedure TForm1.FormPaint(Sender : TObject);
begin
end;
procedure TForm1.ButtonClick(Sender : TObject);
Begin
TestForm1.Show;
IDEEditor1.Show;
End;
{------------------------------------------------------------------------------}
procedure TForm1.FormShow(Sender : TObject);
Begin
//Set default location for IDEEDitor;
IDEEditor1.Position := poDesigned;
IDEeditor1.Left := 0;
IdeEditor1.Top := Top+Height;
Assert(False, 'Trace:++++++++++++++____________++++++++++IN TMAINs FORMSHOW');
end;
procedure TForm1.FormKill(Sender : TObject);
Begin
Assert(False, 'Trace:DESTROYING FORM');
End;
{------------------------------------------------------------------------------}
procedure TForm1.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.OnClick := @mnuNewClicked;
mnuFile.Add(itmFileNew);
itmFileNewForm := TMenuItem.Create(Self);
itmFileNewForm.Caption := 'New Form';
itmFileNewForm.OnClick := @mnuNewFormClicked;
mnuFile.Add(itmFileNewForm);
itmFileOpen := TMenuItem.Create(Self);
itmFileOpen.Caption := 'Open';
itmFileOpen.OnClick := @mnuOpenClicked;
mnuFile.Add(itmFileOpen);
itmFileSave := TMenuItem.Create(Self);
itmFileSave.Caption := 'Save';
itmFileSave.OnClick := @mnuSaveClicked;
mnuFile.Add(itmFileSave);
itmFileSaveAs := TMenuItem.Create(Self);
itmFileSaveAs.Caption := 'Save As';
itmFileSaveAs.OnClick := @mnuSaveAsClicked;
mnuFile.Add(itmFileSaveAs);
itmFileSaveAll := TMenuItem.Create(Self);
itmFileSaveAll.Caption := 'Save All';
itmFileSaveAll.OnClick := @mnuSaveAllClicked;
mnuFile.Add(itmFileSaveAll);
itmFileClose := TMenuItem.Create(Self);
itmFileClose.Caption := 'Close';
itmFileClose.OnClick := @mnuCloseClicked;
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}
procedure TForm1.SetBtnDefaults(Control : Pointer; I,Page : Integer);
begin
ideCompList.Add(Control);
StandardBtn[i] := TIDEMouse(Control).Speedbutton(self,Notebook1.page[Page]);
if I > 1 then
StandardBtn[i].left := (Notebook1.page[Page].ControlCount-1)*26
else
StandardBtn[i].left := 0; //the mouse
StandardBtn[i].Top := 2;
StandardBtn[i].Tag := I;
StandardBtn[i].OnClick := @controlclick;
end;
function TForm1.CreateSeperator : TMenuItem;
begin
itmSeperator := TMenuItem.Create(Self);
itmSeperator.Caption := '-';
Result := itmSeperator;
end;
function TForm1.ReturnActiveUnitList : TUnitInfo;
var
I : Integer;
SList : TUnitInfo;
TempNum : Integer;
begin
TempNum := ideEditor1.Notebook1.PageIndex;
if TempNum < 0 then Exit;
for I := 0 to Project1.UnitList.Count-1 do
begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
if SList.Page = TempNum
then break;
end;
Result := SList;
end;
function TForm1.RenameUnit(OldUnitName, NewUnitName : string; SList : TUnitInfo) : Boolean;
var
X1, X2, X3 : Integer;
I,T : Integer;
Count : Integer;
Texts : String;
OldUnitName2,NewUnitName2 : String;
Found : Boolean;
InComment : Boolean;
Begin
Assert(False, 'Trace:*********************RENAME UNIT*************************');
Assert(False, 'Trace:*********************RENAME UNIT*************************');
Count := SList.Source.Count;
Found := False;
InComment := False;
Assert(False, 'Trace:Oldunitname = '+OldUnitName);
Assert(False, 'Trace:NewUnitname = '+NewUnitName);
//drop the '.'
OldUnitName2 := Copy(OldUnitName,1,pos('.',OldUnitName)-1);
NewUnitName2 := Copy(NewUnitName,1,pos('.',NewUnitName)-1);
Assert(False, 'Trace:Oldunitname = '+OldUnitName2);
Assert(False, 'Trace:NewUnitname = '+NewUnitName2);
ReAssignSourcefromEditor(SList);
for I := 0 to Count-1 do
begin
Assert(False, 'Trace:' + inttostr(i));
Assert(False, 'Trace:' + SList.Source.Strings[i]);
//Search for the unit name
Texts := Uppercase(SList.Source.Strings[I]);
x1 := pos(Uppercase(OldUnitName2),Texts);
if X1 <> 0 then
//check to see if it's a comment
if ((pos('//',Texts) = 0) or (pos('//',Texts) > x1+Length(OldUnitName2))) then
Begin
InComment := False;
Assert(False, 'Trace:X1 = '+Inttostr(x1));
//found it but is it the one that follows "unit"
//check to see if the words "unit " are on this line
Texts := Uppercase(SList.Source.Strings[I]);
T := I;
Found := True;
{ x2 := pos('UNIT ',texts);
if x2 <> 0 then
Found := true
else
for t := 0 to i do //i contains the line number of the unit name
begin
Assert(False, 'Trace:t = '+inttostr(t));
Texts := Uppercase(SList.Source.Strings[t]);
Assert(False, 'Trace:Texts = '+texts);
x2 := pos('UNIT',Texts);
Assert(False, 'Trace:x2 = '+inttostr(x2));
if x2 <> 0 then
begin
Found := true;
break;
end;
end;
}
end;
if Found then Break;
end;
if Found then
Begin
Texts := SList.Source.Strings[I];
Assert(False, 'Trace:Texts = '+Texts);
Assert(False, 'Trace:X1 = '+inttostr(x1));
delete(Texts,X1,length(OldUnitName2));
System.Insert(NewUNitName2,Texts,X1);
Assert(False, 'Trace:Texts = '+texts);
SList.Source.Strings[i] := Texts;
SList.Name := NewUnitName;
ReAssignEditorLines(SList);
end;
Result := Found;
End;
Procedure TForm1.ReAssignEditorLines(SList : TUnitInfo);
var
TempEdit : TmwCustomEdit;
Begin
if SList.page <> -1 then
begin
TempEdit := IdeEditor1.GetEditorFromPage(SList.Page);
if TempEdit <> nil then
Begin
TempEdit.Lines.Assign(SList.Source);
IdeEditor1.Notebook1.pages.Strings[SList.Page] := SList.Name;
end;
end;
end;
Procedure TForm1.ReAssignSourcefromEditor(var SList : TUnitInfo);
var
TempEdit : TmwCustomEdit;
Begin
if SList.page <> -1 then
begin
TempEdit := IdeEditor1.GetEditorFromPage(SList.Page);
if TempEdit <> nil then
Begin
SList.Source.Assign(TempEdit.Lines);
end;
end;
end;
Function TForm1.Create_LFM(SList : TUnitInfo) : Boolean;
Begin
end;
Function TForm1.SavebyUnit(SList : TUnitInfo) : Boolean;
Var
TempName : String;
Begin
Result := True;
Assert(False, 'Trace:SAVEBYUNIT');
ReAssignSourcefromEditor(SList);
if SList.Filename = '' then
Begin
SaveDialog1.Title := 'Save '+SList.Name+' as:';
SaveDialog1.Filename := ExtractFilePath(Project1.Name)+SList.name;
if SList.Flags = pfProject then
SaveDialog1.Filter := '*.lpr'
else
if SList.Flags = pfForm then
SaveDialog1.Filter := '*.pp'
else
if SList.Flags = pfSource then
SaveDialog1.Filter := '*.pp'
else
SaveDialog1.Filter := '*.*';
if SaveDialog1.Execute then
begin
RenameUnit(SList.Name, ExtractFileName(SaveDialog1.Filename),SList);
SList.Filename := SaveDialog1.Filename;
end
else
Exit;
end;
try
if FileExists(SList.Filename) then
Begin
TempName := SList.Filename;
TempName := Copy(TempName,1,pos('.',TempName));
TempName := tempName + '~';
TempName := TempName + Copy(SList.Filename,pos('.',SList.Filename)+1,Length(SList.Filename));
RenameFile(SList.Filename,TempName);
End;
SList.Source.SaveToFile(SList.Filename);
//check to see if this is a form. If so, create a LFM file.
if SList.Flags = pfForm then
Create_LFM(SList);
except
//error saving
Result := False;
end;
End;
{------------------------------------------------------------------------------}
{Fills the View Units dialog and the View Forms dialog}
{------------------------------------------------------------------------------}
Procedure TForm1.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 TForm1.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 TForm1.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 TForm1.mnuSaveClicked(Sender : TObject);
var SList : TUnitInfo;
begin
Assert(False, 'Trace:In save dialog');
SList := ReturnActiveUnitList;
if SList = nil then Exit;
Assert(False, 'Trace:Calling save by unit');
SaveByUnit(SList);
end;
{------------------------------------------------------------------------------}
Procedure TForm1.mnuSaveAsClicked(Sender : TObject);
var
SList : TUnitInfo;
Begin
SList := ReturnActiveUnitList;
if SList = nil then Exit;
Assert(False, 'Trace:SLIST.PAGE is '+inttostr(SList.Page));
SaveDialog1.Title := 'Save '+SList.Name+' as :';
if SList.Filename <> '' then
SaveDialog1.Filename := SList.Filename
else
SaveDialog1.Filename := ExtractFilePath(Project1.Name)+SList.Name;
if SaveDialog1.Execute then
begin
RenameUnit(SList.Name, ExtractFileName(SaveDialog1.Filename),SList);
SList.Filename := SaveDialog1.Filename;
end
else
Exit;
SaveByUnit(SList);
end;
Procedure TForm1.mnuSaveAllClicked(Sender : TObject);
var
SList : TUnitInfo;
TempNum : Integer;
I : Integer;
Begin
For I := 0 to Project1.UnitList.Count-1 do
Begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
if not(SaveByUnit(SList)) then exit;
end;
End;
{
------------------------------------------------------------------------
------------------------------------------------------------------------
-------------------ControlClick-----------------------------------------
------------------------------------------------------------------------
------------------------------------------------------------------------
}
Procedure TForm1.ControlClick(Sender : TObject);
var
Page : Integer;
I : Integer;
begin
if bpressed > -1 then
if (bpressed = 1) and (sender <> Notebook1) then //1 is really just the FIRST one on the notebook page.
Begin
//raise the 1st button on that page.
Page := Notebook1.Pageindex;
For I := 0 to Notebook1.Page[Page].ControlCount-1 do
Begin
if (Notebook1.PAge[page].Controls[i] is TSpeedButton) then
Begin
TSpeedButton(Notebook1.PAge[page].Controls[i]).Down := False;
break;
end;
end;
end
else
StandardBtn[bpressed].Down := False;
if (Sender = Notebook1) then
begin
bpressed := 1;
end
else
bpressed := tspeedbutton(Sender).Tag;
if bpressed = 1 then
begin
//depress the 1st button on that page.
Page := Notebook1.Pageindex;
For I := 0 to Notebook1.Page[Page].ControlCount-1 do
Begin
if (Notebook1.PAge[page].Controls[i] is TSpeedButton) then
Begin
TSpeedButton(Notebook1.PAge[page].Controls[i]).Down := True;
Break;
end;
end;
end
else
StandardBtn[bpressed].Down := True;
end;
function TForm1.CreateUnit(var UnitName : string) : TUnitInfo;
var
I,N: Integer;
Found : Boolean;
begin
{ Creates new unit. }
if UnitName = '' then begin
N:= 1;
repeat
UnitName := 'Unit'+IntToStr(N);
Found:= false;
for i:= 0 to Project1.UnitList.Count - 1 do begin
Result:= TUnitInfo(Project1.UnitList.Items[i]);
Found:= Uppercase(Result.Name) = Uppercase(UnitName + '.PP');
if Found then begin
Inc(N);
Break;
end;
end;
until not Found;
end;
Result:= TUnitInfo.Create;
Result.Name := UnitName + '.pp';
end;
{----------------------}
{ mnuNewClicked}
procedure TForm1.mnuNewClicked(Sender : TObject);
var
SList : TUnitInfo;
TempName : string;
begin
TempName:= '';
SList:= CreateUnit(TempName);
SList.Flags := pfSource;
with SList.Source do begin
{ Add the default lines }
Add('unit ' + TempName + ';');
Add('');
Add('{$mode objfpc}');
Add('');
Add('interface');
Add('');
Add('implementation');
Add('');
Add('end.');
end;
ideEditor1.AddPage(SList.Name,SList.Source);
SList.Page := ideEditor1.Notebook1.Pageindex; //keep track of what page it is on
Project1.AddUnit(SList);
UpdateViewDialogs;
IdeEditor1.Visible:= true;
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{
Used when we a control is clicked. This is used
to update the Object Inspector.
}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
Procedure TForm1.ClickOnControl(Sender : TObject);
var
CInterface : TComponentInterface;
Begin
//We clicked on the form. Let's see what the active selection is in the IDE control
//bar. If it's the pointer, then we set the FormEditor1.SelectedComponents to Sender,
//otherwise we drop a control and call the CreateComponent function.
if BPressed = 1 then
Begin //mouse button pressed.
FormEditor1.ClearSelected;
Writeln('Clicked on the control!!!!! Control name is '+TControl(sender).name);
FormEditor1.AddSelected(TComponent(Sender));
end
else
Begin //add a new control
CInterface := TComponentInterface(FormEditor1.CreateComponent(nil,
TComponentClass(TIdeComponent(ideComplist.items[bpressed-1]).ClassType),-1,-1,-1,-1));
CInterface.Setpropbyname('Visible',True);//Control).Visible := True;
//set the ONCLICK event so we know when the control is selected;
TControl(CInterface.Control).OnClick := @ClickOnControl;
end;
ControlClick(Notebook1); //this resets it to the mouse.
end;
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{
Used when we click on a form that was created.
This can be used to detect when
a control is dropped onto a form
}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
{------------------------------------------------------------------------------}
procedure TForm1.MouseDownonForm(Sender : TObject; Button: TMouseButton; Shift : TShiftState; X, Y: Integer);
Begin
Writeln('Mouse down at '+inttostr(x)+' '+inttostr(y));
Mouse_Down.X := X;
Mouse_Down.Y := Y;
End;
procedure TForm1.MouseUponForm(Sender : TObject; Button: TMouseButton; Shift : TShiftState; X, Y: Integer);
var
CInterface : TComponentInterface;
NewLeft1, NewTop1 : Integer;
NewLeft2, NewTop2 : Integer;
Begin
//see if they moved the mouse or simply clicked on the form
if (X >= 0) and (X <= TControl(sender).Width) and
(Y >= 0) and (Y <= TControl(sender).Height) then
begin
//mouse was down and up on the form.
//We clicked on the form. Let's see what the active selection is in the IDE control
//bar. If it's the pointer, then we set the FormEditor1.SelectedComponents to Sender,
//otherwise we drop a control and call the CreateComponent function.
if BPressed = 1 then
Begin //mouse button pressed.
FormEditor1.ClearSelected;
Writeln('Clicked on the form!!!!! Forms name is '+TFOrm(sender).name);
ObjectInspector1.RootComponent := TForm(sender);
FormEditor1.AddSelected(TComponent(Sender));
end
else
Begin //add a new control
//check to see if the mouse moved between clicks. If so then they sized the control
if (X <> Mouse_Down.x) or (Y <> Mouse_Down.Y) then
begin
if X > Mouse_Down.X then
Begin
NewLeft1 := Mouse_Down.X;
NewLeft2 := X-Mouse_Down.X;
end
else
Begin
NewLeft1 := X;
NewLeft2 := Mouse_Down.X-X;
end;
if Y > Mouse_Down.Y then
Begin
NewTop1 := Mouse_Down.Y;
NewTop2 := Y - Mouse_Down.Y;
end
else
Begin
NewTop1 := Y;
NewTop2 := Mouse_Down.Y - Y;
end;
CInterface := TComponentInterface(FormEditor1.CreateComponent(nil,
TComponentClass(TIdeComponent(ideComplist.items[bpressed-1]).ClassType),NewLeft1,NewTop1,NewLeft2,NewTop2));
end
else
CInterface := TComponentInterface(FormEditor1.CreateComponent(nil,
TComponentClass(TIdeComponent(ideComplist.items[bpressed-1]).ClassType),Mouse_Down.X,Mouse_Down.Y,-1,-1));
{Set up some default values for the control here}
{ CInterface is a TComponentInterface defined in CustomFormEditor.pp}
CInterface.SetPropByName('VISIBLE',True);
// CInterface.SetPropByName('NAME','PLEASEWORK1');
// CInterface.SetPropbyName('CAPTION','Click me!');
CInterface.SetPropByName('HINT','Click');
CInterface.SetPropbyName('TOP',10);
//set the ONCLICK event so we know when the control is selected;
TControl(CInterface.Control).OnClick := @ClickOnControl;
FormEditor1.ClearSelected;
FormEditor1.AddSelected(TComponent(Cinterface.Control));
ObjectInspector1.RootComponent := TForm(sender);
ObjectInspector1.FillComponentComboBox;
end;
//TIdeComponent(ideComplist.items[bpressed-1]).
end;
ControlClick(Notebook1); //this resets it to the mouse.
end;
{Procedure TForm1.ClickOnForm(Sender : TObject);
Begin
end;
}
{------------------------------------------------------------------------------}
procedure TForm1.mnuNewFormClicked(Sender : TObject);
var
I,N: Integer;
SList : TUnitInfo;
TempName : String;
TempFormName : String;
Found : Boolean;
TempForm : TForm;
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,50,50,300,400));
TForm(CInterface.Control).Name := 'Form1';
TForm(CInterface.Control).Designer := TDesigner.Create(TCustomForm(CInterface.Control));
TForm(CInterface.Control).Show;
//set the ONCLICK event so we know when a control is dropped onto the form.
TForm(CInterface.Control).OnMouseDown := @MouseDownOnForm;
TForm(CInterface.Control).OnMouseUp := @MouseUpOnForm;
FormEditor1.ClearSelected;
FormEditor1.AddSelected(TComponent(CInterface.Control));
end;
{------------------------------------------------------------------------------}
procedure TForm1.mnuOpenClicked(Sender : TObject);
var
Str : TStringList;
SList : TUnitInfo;
Texts : String;
begin
Assert(False, 'Trace:******************OPEN DIALOG***************');
OpenDialog1.Title := 'Open file:';
if OpenDialog1.Execute then
begin
Str := TStringList.Create;
try
SList := TUnitInfo.Create;
SList.Filename := OpenDialog1.Filename;
Assert(False, 'Trace:Filename := '+OpenDialog1.Filename);
with SList.Source do
LoadFromFile(SList.Filename);
Assert(False, 'Trace:Filename := '+SList.Filename);
//Determine unit name and form name
SetFlags(SList);
SetName_Form(SLIst);
Assert(False, 'Trace:Name of new formname is '+SList.FormName);
IDEEditor1.AddPage(SList.Name,SList.Source);
SList.Page := ideEditor1.Notebook1.Pageindex; //keep track of what page it's on
Project1.AddUnit(SList);
UpdateViewDialogs;
ideEditor1.Show;
except
end;
itmFileClose.Enabled := True;
end;
Assert(False, 'Trace:******************OPEN DIALOG EXIT***************');
end;
{------------------------------------------------------------------------------}
Procedure TForm1.mnuCloseClicked(Sender : TObject);
Var
TempNum : Integer;
I : Integer;
SList : TUnitInfo;
Found : Boolean;
TempEdit : TmwCustomEdit;
Begin
// close the active notebook page. If there isn't one then this menu shouldn't be enabled
Found := False;
TempNum := ideEditor1.Notebook1.PageIndex;
if TempNum < 0 then Exit;
For I := 0 to Project1.UnitList.Count-1 do
Begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
If SList.Page = TempNum then
Begin
TempEdit := IdeEditor1.GetEditorFromPage(TempNum);
if TempEdit <> nil then
SList.Source.Assign(TempEdit.Lines);
SList.Page := -1;
Found := True;
break;
end;
End;
if Found then
Begin
ideEditor1.DeletePage(ideEditor1.Notebook1.PageIndex);
{ Subtract one from each unit's "page" that's after the deleted page to
account for the deletion of this page.}
for I := 0 to Project1.UnitList.Count-1 do
Begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
if SList.Page > TempNum then
SList.page := SList.page -1;
end;
end;
end;
{------------------------------------------------------------------------------}
procedure TForm1.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 TForm1.mnuViewInspectorClicked(Sender : TObject);
begin
ObjectInspector1.Show;
end;
{------------------------------------------------------------------------------}
procedure TForm1.mnuViewCompilerSettingsClicked(Sender : TObject);
begin
frmCompilerOptions.Show;
end;
Procedure TForm1.mnuViewUnitsClicked(Sender : TObject);
var
SList : TUnitInfo;
I : Integer;
Tempstr : String;
Begin
if Project1.Unitlist.COunt = 0 then Exit;
ViewUnits1.ShowModal;
if (ViewUnits1.ModalResult = mrOK) then
Begin
SList := nil;
//Find it by name based on what's in Edit1.text
if ViewUnits1.Edit1.Text = '' then Exit;
TempStr := ViewUnits1.Edit1.Text;
For I := 0 to Project1.UnitList.Count -1 do
if Uppercase(TUnitInfo(Project1.UnitList.Items[i]).Name) = Uppercase(TempStr) then
Begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
Break;
end;
if SList <> nil then
Begin
Assert(False, 'Trace:' + SList.Name+' selected via the listbox');
Assert(False, 'Trace:Page = '+inttostr(SList.Page));
If SList.Page = -1 then
begin
ideEditor1.AddPage(SList.Name,SList.Source);
SList.Page := ideEditor1.Notebook1.Pageindex;
end
else
IdeEditor1.Notebook1.Pageindex := SList.Page;
ideEditor1.Show;
End;
End
else
Assert(False, 'Trace:OK NOT PRESSED');
end;
Procedure TForm1.mnuViewFormsClicked(Sender : TObject);
var
SList : TUnitInfo;
Texts : String;
I : Integer;
Begin
if Project1.Unitlist.COunt = 0 then Exit;
ViewForms1.ShowModal;
if ViewForms1.ModalResult = mrOK
then begin
if ViewForms1.Listbox1.Items.Count > 0
then begin
for I := 0 to ViewForms1.ListBox1.Items.Count-1 do
if ViewForms1.ListBox1.Selected[I]
then Texts := ViewForms1.Listbox1.Items.Strings[I];
//Try and find an SList item where the formname equals Texts
for I := 0 to Project1.UnitList.Count-1 do
begin
SList := TUnitInfo(Project1.UnitList.Items[I]);
if SList.FormName = Texts
then Break
else SList := nil;
end;
end;
if SList <> nil
then begin
Assert(False, 'Trace:' + SList.Name+' selected via the listbox');
If SList.Page = -1
then begin
ideEditor1.AddPage(SList.Name,SList.Source);
SList.Page := ideEditor1.Notebook1.Pageindex;
end
else
IdeEditor1.Notebook1.Pageindex := SList.Page;
ideEditor1.Show;
//TODO: Write the following procedure to draw the DESIGN form
// DrawForm(SList);
end;
end;
end;
Procedure TForm1.mnuViewCodeExplorerClick(Sender : TObject);
begin
IDEEditor1.Show;
end;
Procedure TForm1.mnuViewMessagesClick(Sender : TObject);
Begin
Messagedlg.Show;
End;
Procedure TForm1.DoFind(Sender : TObject);
var
Source : TStrings;
Str : String;
CaseSensitive : Boolean;
I : Integer;
Findtext : String;
CharCount : Integer;
Found : Boolean;
StartLineNUmber : Integer;
Searchto : Integer;
FoundAt : Integer;
Begin
Found := False;
if (IDeEditor1.Visible) then
begin
if (Sender is TFindDialog) then StartLineNumber := 0
else
StartLineNumber := IDEEditor1.CurrentCursorYLine-1;
IDEEditor1.BringToFront;
CaseSensitive := FindDialog1.cbCaseSensitive.Checked;
FindText := FindDialog1.FindText;
if not CaseSensitive then
FindText := Uppercase(FindText);
Source := IDEEditor1.CurrentSource;
if Source <> nil then
begin
CharCount := 0;
if FindDialog1.rgForwardBack.ItemIndex = 0 then
Begin
for I := StartLineNumber to Source.Count-1 do
Begin
Str := Source.Strings[i];
Writeln('Str = '+Str);
Writeln(Source.Strings[i]);
//check to see if you should be checking CASE
if not CaseSensitive then Str := UpperCase(str);
if (pos(FindText,Str) <> 0) then
begin
FoundAt := Pos(FindText,Str);
{if the text we are searching for appears more than once on a line,
the POS function only finds the first one. Therefore, if we find the text
and this function is called by something other than the FindDialog,
and we are on the same line as the cursor we need to DELETE what we found and
search again. The problem is that effects placing the cursor in the right spot.
So, when we delete it, if we find it again we place th cursor to the spot the POS
function stated plus the difference between the STRING we are searching and the one
in the editor}
//first check to see if we are still on the first line
Found := True;
if (I = StartLineNumber) and not(Sender is TFindDialog) then
Begin
while (pos(FindText,str) +(Length(Source.Strings[i]) - Length(Str)) <= IDEEDITOR1.CurrentCursorXLine) and (pos(findtext,str) <> 0) do
Begin
Delete(Str,FoundAt,Length(FindText));
end;
if (pos(FindText,str) <> 0) then
Begin
Found := true;
FoundAt :=pos(FindText,str);
end;
end;
FoundAt := pos(FindText,str) + (Length(Source.Strings[i]) - Length(Str));
Writeln('***********************************************');
Writeln('***********************************************');
Writeln('***********************************************');
Writeln('***FOUNDAT='+inttostr(foundat)+'********************************************');
Writeln('***********************************************');
Writeln('***********************************************');
if Found then
Begin
IDEEditor1.CurrentCursorYLine := I+1;
IDEEditor1.CurrentCursorXLine := FoundAt;
IDEEditor1.SelectText(I+1,FoundAt,I+1,FoundAt+Length(FindText));
Break;
end;
end;
CharCount := CharCount + Length(Str);
end;
end
else {search backwards}
Begin
if StartLineNumber = 0 then StartLineNUmber := Source.Count-1;
for I := StartLineNumber downto 0 do
Begin
Str := Source.Strings[i];
//check to see if you should be checking CASE
if not CaseSensitive then Str := UpperCase(str);
if pos(FindText,Str) <> 0 then
begin
IDEEditor1.CurrentCursorYLine := I+1;
IDEEditor1.CurrentCursorXLine := pos(FindText,Str);
IDEEditor1.SelectText(I+1,pos(FindText,Str),I+1,pos(FindText,Str)+Length(FindText));
Found := True;
Break;
end;
CharCount := CharCount + Length(Str);
end;
end;
end;
end;
if not found then
Application.Messagebox('Text not found','Error',MB_OK);
end;
Procedure TForm1.mnuSearchFindClicked(Sender : TObject);
Begin
itmSearchFindAgain.Enabled := True;
FindDialog1.ShowModal;
End;
Procedure TForm1.mnuSearchFindAgainClicked(Sender : TObject);
Begin
DoFind(itmSearchFindAgain);
End;
Procedure TForm1.mnuNewProjectClicked(Sender : TObject);
var
SList : TUnitInfo;
Begin
Assert(False, 'Trace:New Project Clicked');
end;
{------------------------------------------------------------}
Procedure TForm1.mnuOpenProjectClicked(Sender : TObject);
Begin
end;
Procedure TForm1.mnuSaveProjectClicked(Sender : TObject);
Begin
end;
Procedure TForm1.mnuBuildProjectClicked(Sender : TObject);
Begin
end;
Procedure TForm1.mnuRunProjectClicked(Sender : TObject);
var
Filename : String;
Begin
end;
Procedure TForm1.mnuViewColorClicked(Sender : TObject);
begin
ColorDialog1.Execute;
end;
Procedure TForm1.mnuViewFontClicked(Sender : TObject);
Begin
FontDialog1.Execute;
end;
Function TForm1.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 TForm1.MessageViewDblClick(Sender : TObject);
var
Texts : String;
num : Integer;
LineNum, ColNum : Integer;
UnitName : String;
SList : TUnitInfo;
I : Integer;
Found : Boolean;
tempEditor : TmwCustomEdit;
Begin
//get line number and unit name
Texts := Messagedlg.Message;
If Texts = '' then Exit;
LineNum := Compiler1.GetLineNumber(Texts);
ColNum := Compiler1.GetColumnNumber(Texts);
UnitName := Compiler1.GetUnitName(Texts);
//run through the units and load the offending one
//this needs to be changed in case the offending one isn't a "project" file.
if pos('.',UnitName) > 0 then
UnitName := Copy(ExtractFileName(UnitName),1,pos('.',UnitName)-1);
found := False;
Assert(False, 'Trace:Unitname is '+unitname);
for I := 0 to Project1.UnitList.Count-1 do
Begin
SList := TUnitInfo(Project1.UnitList[i]);
Assert(False, 'Trace:Slist says the name is '+slist.name);
if uppercase(SList.Name) = Uppercase(UnitName) then break;
end;
if uppercase(SList.Name) = Uppercase(UnitName) then
Begin
Assert(False, 'Trace:Found a match');
if SList.Page <> -1 then
IdeEditor1.Notebook1.Pageindex := SList.Page
else
Begin
ideEditor1.AddPage(SList.Name,SList.Source);
SList.Page := ideEditor1.Notebook1.Pageindex; //keep track of what page it is on
end;
if not(ideeditor1.visible) then ideeditor1.Show
else
ideEditor1.SetFocus;
TempEditor := ideEditor1.GetEditorfromPage(SList.page);
if TempEditor = nil then Exit;
TempEditor.CaretX := ColNum;
TempEditor.CaretY := LineNum;
TempEditor.SetFocus;
End;
end;
end.
{ =============================================================================
$Log$
Revision 1.14 2000/12/01 15:50:39 lazarus
changed the TCOmponentInterface SetPropByName. It works for a few properties, but not all.
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 <peter@skel.demon.co.uk>:
+ 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
}