added new ... dialog

git-svn-id: trunk@2028 -
This commit is contained in:
mattias 2002-08-17 23:40:42 +00:00
parent 3853853c67
commit b99e4f7796
4 changed files with 621 additions and 20 deletions

1
.gitattributes vendored
View File

@ -190,6 +190,7 @@ ide/main.pp svneol=native#text/pascal
ide/mainbar.pas svneol=native#text/pascal
ide/miscoptions.pas svneol=native#text/pascal
ide/msgview.pp svneol=native#text/pascal
ide/newdialog.pas svneol=native#text/pascal
ide/newprojectdlg.pp svneol=native#text/pascal
ide/outputfilter.pas svneol=native#text/pascal
ide/patheditordlg.pas svneol=native#text/pascal

View File

@ -44,33 +44,38 @@ uses
type
TBreakPointsDlg = class(TDebuggerDlg)
lvBreakPoints: TListView;
procedure lvBreakPointsClick(Sender: TObject);
procedure lvBreakPointsSelectItem(Sender: TObject; AItem: TListItem; Selected: Boolean);
mnuPopup: TPopupMenu;
popAdd: TMenuItem;
popAddSourceBP: TMenuItem;
procedure popAddSourceBPClick(Sender: TObject);
N1: TMenuItem; //--------------
popProperties: TMenuItem;
procedure popPropertiesClick(Sender: TObject);
popEnabled: TMenuItem;
procedure popEnabledClick(Sender: TObject);
popDelete: TMenuItem;
procedure popDeleteClick(Sender: TObject);
N2: TMenuItem; //--------------
popDisableAll: TMenuItem;
procedure popDisableAllClick(Sender: TObject);
popEnableAll: TMenuItem;
procedure popEnableAllClick(Sender: TObject);
popDeleteAll: TMenuItem;
procedure lvBreakPointsClick(Sender: TObject);
procedure lvBreakPointsSelectItem(Sender: TObject; AItem: TListItem;
Selected: Boolean);
procedure popAddSourceBPClick(Sender: TObject);
procedure popPropertiesClick(Sender: TObject);
procedure popEnabledClick(Sender: TObject);
procedure popDeleteClick(Sender: TObject);
procedure popDisableAllClick(Sender: TObject);
procedure popEnableAllClick(Sender: TObject);
procedure popDeleteAllClick(Sender: TObject);
private
FBreakpointsNotification: TDBGBreakPointsNotification;
procedure BreakPointAdd(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure BreakPointUpdate(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure BreakPointRemove(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure BreakPointAdd(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
procedure BreakPointUpdate(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
procedure BreakPointRemove(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
procedure UpdateItem(const AItem: TListItem; const ABreakpoint: TDBGBreakPoint);
procedure UpdateItem(const AItem: TListItem;
const ABreakpoint: TDBGBreakPoint);
protected
procedure SetDebugger(const ADebugger: TDebugger); override;
public
@ -81,7 +86,8 @@ type
implementation
procedure TBreakPointsDlg.BreakPointAdd(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure TBreakPointsDlg.BreakPointAdd(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
var
Item: TListItem;
n: Integer;
@ -98,7 +104,8 @@ begin
UpdateItem(Item, ABreakPoint);
end;
procedure TBreakPointsDlg.BreakPointUpdate(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure TBreakPointsDlg.BreakPointUpdate(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
var
Item: TListItem;
begin
@ -110,7 +117,8 @@ begin
else UpdateItem(Item, ABreakPoint);
end;
procedure TBreakPointsDlg.BreakPointRemove(const ASender: TDBGBreakPoints; const ABreakpoint: TDBGBreakPoint);
procedure TBreakPointsDlg.BreakPointRemove(const ASender: TDBGBreakPoints;
const ABreakpoint: TDBGBreakPoint);
begin
lvBreakPoints.Items.FindData(ABreakpoint).Free;
end;
@ -139,7 +147,8 @@ procedure TBreakPointsDlg.lvBreakPointsClick(Sender: TObject);
begin
end;
procedure TBreakPointsDlg.lvBreakPointsSelectItem(Sender: TObject; AItem: TListItem; Selected: Boolean);
procedure TBreakPointsDlg.lvBreakPointsSelectItem(Sender: TObject;
AItem: TListItem; Selected: Boolean);
var
Enable: Boolean;
begin
@ -216,9 +225,11 @@ begin
else inherited;
end;
procedure TBreakPointsDlg.UpdateItem(const AItem: TListItem; const ABreakpoint: TDBGBreakPoint);
procedure TBreakPointsDlg.UpdateItem(const AItem: TListItem;
const ABreakpoint: TDBGBreakPoint);
const
DEBUG_ACTION: array[TDBGBreakPointAction] of string = ('Break', 'Enable Group', 'Disable Group');
DEBUG_ACTION: array[TDBGBreakPointAction] of string =
('Break', 'Enable Group', 'Disable Group');
// enabled valid
DEBUG_STATE: array[Boolean, Boolean] of String = (('?', ''), ('!', '*'));
var
@ -260,6 +271,9 @@ end.
{ =============================================================================
$Log$
Revision 1.8 2003/02/28 19:10:25 mattias
added new ... dialog
Revision 1.7 2002/05/30 22:45:57 lazarus
MWE:
- Removed menucreation from loaded since streaming works

581
ide/newdialog.pas Normal file
View File

@ -0,0 +1,581 @@
{ $Id$ }
{
/***************************************************************************
newdialog.pas
-------------
***************************************************************************/
***************************************************************************
* *
* This source 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. *
* *
* This code is distributed in the hope that it will be useful, but *
* WITHOUT ANY WARRANTY; without even the implied warranty of *
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU *
* General Public License for more details. *
* *
* A copy of the GNU General Public License is available on the World *
* Wide Web at <http://www.gnu.org/copyleft/gpl.html>. You can also *
* obtain it by writing to the Free Software Foundation, *
* Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. *
* *
***************************************************************************
Author: Mattias Gaertner
}
unit NewDialog;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Forms, Controls, StdCtrls, Buttons, ExtCtrls, ComCtrls,
Dialogs, LResources, IDEOptionDefs, LazarusIDEStrConsts;
type
// Items that can be created in the IDE:
TNewIDEItemType = (
niiNone,
niiCustom, // for experts
niiUnit, // pascal unit
niiForm, // pascal unit with lcl form
niiText, // text file
niiApplication,// Project: Application
niiFPCProject, // Project: with hidden main file
niiCustomProject// Project: pascal program without any specials
);
TNewIDEItemTypes = set of TNewIDEItemType;
// Flags/Options for the items
TNewIDEItemFlag = (
niifCopy,
niifInherited,
niifUse
);
TNewIDEItemFlags = set of TNewIDEItemFlag;
TNewIDEItemTemplate = class;
{ TNewIDEItemCategory }
TNewIDEItemCategory = class
private
FItems: TList;
FName: string;
function GetCount: integer;
function GetItems(Index: integer): TNewIDEItemTemplate;
public
constructor Create(const AName: string);
destructor Destroy; override;
procedure Clear;
procedure Add(ATemplate: TNewIDEItemTemplate);
function LocalizedName: string;
function Description: string;
public
property Count: integer read GetCount;
property Items[Index: integer]: TNewIDEItemTemplate read GetItems; default;
property Name: string read FName;
end;
{ TNewIDEItemCategories }
TNewIDEItemCategories = class
private
FItems: TList;
function GetItems(Index: integer): TNewIDEItemCategory;
procedure SetItems(Index: integer; const AValue: TNewIDEItemCategory);
public
constructor CreateWithDefaults;
destructor Destroy; override;
procedure Clear;
procedure Add(ACategory: TNewIDEItemCategory);
function Count: integer;
public
property Items[Index: integer]: TNewIDEItemCategory
read GetItems write SetItems; default;
end;
{ TNewIDEItemTemplate }
TNewIDEItemTemplate = class
private
FAllowedFlags: TNewIDEItemFlags;
FDefaultFlag: TNewIDEItemFlag;
FName: string;
fCategory: TNewIDEItemCategory;
FTheType: TNewIDEItemType;
public
constructor Create(AType: TNewIDEItemType; const AName: string;
ADefaultFlag: TNewIDEItemFlag;
TheAllowedFlags: TNewIDEItemFlags);
function LocalizedName: string;
function Description: string;
public
property TheType: TNewIDEItemType read FTheType;
property DefaultFlag: TNewIDEItemFlag read FDefaultFlag;
property AllowedFlags: TNewIDEItemFlags read FAllowedFlags;
property Name: string read FName;
property Category: TNewIDEItemCategory read fCategory;
end;
{ TNewIDEItem }
TNewIDEItem = class
private
FFlag: TNewIDEItemFlag;
FTheType: TNewIDEItemType;
procedure SetFlag(const AValue: TNewIDEItemFlag);
procedure SetTheType(const AValue: TNewIDEItemType);
public
constructor Create;
procedure Assign(Source: TNewIDEItem);
procedure Assign(Source: TNewIDEItemTemplate);
function CreateCopy: TNewIDEItem;
public
property TheType: TNewIDEItemType read FTheType write SetTheType;
property Flag: TNewIDEItemFlag read FFlag write SetFlag;
end;
{ TNewOtherDialog }
TNewOtherDialog = class(TForm)
ItemsTreeView: TTreeView;
DescriptionGroupBox: TGroupBox;
DescriptionLabel: TLabel;
OkButton: TButton;
CancelButton: TButton;
procedure CancelButtonClick(Sender: TObject);
procedure ItemsTreeViewClick(Sender: TObject);
procedure NewOtherDialogResize(Sender: TObject);
procedure OkButtonClick(Sender: TObject);
private
FItemType: TNewIDEItem;
procedure FillItemsTree;
procedure SetupComponents;
public
constructor Create(TheOwner: TComponent); override;
destructor Destroy; override;
public
property ItemType: TNewIDEItem read FItemType;
end;
function ShowNewIDEItemDialog(var ItemType: TNewIDEItem): TModalResult;
function NewIDEItems: TNewIDEItemCategories;
implementation
var
InternalNewIDEItems: TNewIDEItemCategories;
function ShowNewIDEItemDialog(var ItemType: TNewIDEItem): TModalResult;
var
NewOtherDialog: TNewOtherDialog;
begin
ItemType:=nil;
NewOtherDialog:=TNewOtherDialog.Create(Application);
Result:=NewOtherDialog.ShowModal;
if Result=mrOk then begin
ItemType:=NewOtherDialog.ItemType.CreateCopy;
end;
NewOtherDialog.Free;
end;
function NewIDEItems: TNewIDEItemCategories;
begin
if InternalNewIDEItems=nil then
InternalNewIDEItems:=TNewIDEItemCategories.CreateWithDefaults;
Result:=InternalNewIDEItems;
end;
procedure InternalFinal;
begin
InternalNewIDEItems.Free;
InternalNewIDEItems:=nil;
end;
{ TNewOtherDialog }
procedure TNewOtherDialog.NewOtherDialogResize(Sender: TObject);
var
NewLeft: Integer;
begin
with ItemsTreeView do begin
SetBounds(5,5,(Parent.ClientWidth-2*Left) div 2,Parent.ClientHeight-Top-45);
end;
with DescriptionGroupBox do begin
NewLeft:=ItemsTreeView.Left+ItemsTreeView.Width+5;
SetBounds(NewLeft,ItemsTreeView.Top,
(Parent.ClientWidth-NewLeft-5),ItemsTreeView.Height);
end;
with OkButton do begin
SetBounds(Parent.ClientWidth-200,Parent.ClientHeight-35,75,25);
end;
with CancelButton do begin
SetBounds(OkButton.Left+OkButton.Width+10,OkButton.Top,
OkButton.Width,OkButton.Height);
end;
end;
procedure TNewOtherDialog.OkButtonClick(Sender: TObject);
var
ANode: TTreeNode;
Template: TNewIDEItemTemplate;
begin
ANode:=ItemsTreeView.Selected;
if (ANode=nil) or (ANode.Data=nil)
or (not (TObject(ANode.Data) is TNewIDEItemTemplate))
then begin
MessageDlg('No item selected',
'Please select an item first.',mtInformation,[mbOk],0);
exit;
end;
Template:=TNewIDEItemTemplate(ANode.Data);
FItemType.Assign(Template);
ModalResult:=mrOk;
end;
procedure TNewOtherDialog.FillItemsTree;
var
NewParentNode: TTreeNode;
CategoryID: Integer;
Category: TNewIDEItemCategory;
TemplateID: Integer;
Template: TNewIDEItemTemplate;
begin
ItemsTreeView.Items.Clear;
for CategoryID:=0 to NewIDEItems.Count-1 do begin
Category:=NewIDEItems[CategoryID];
NewParentNode:=ItemsTreeView.Items.AddObject(nil,Category.Name,Category);
for TemplateID:=0 to Category.Count-1 do begin
Template:=Category[TemplateID];
ItemsTreeView.Items.AddChildObject(NewParentNode,Template.Name,Template);
end;
NewParentNode.Expand(true);
end;
end;
procedure TNewOtherDialog.CancelButtonClick(Sender: TObject);
begin
ModalResult:=mrCancel;
end;
procedure TNewOtherDialog.ItemsTreeViewClick(Sender: TObject);
var
Desc: String;
ANode: TTreeNode;
begin
ANode:=ItemsTreeView.Selected;
if (ANode<>nil) and (ANode.Data<>nil) then begin
if TObject(ANode.Data) is TNewIDEItemCategory then
Desc:=TNewIDEItemCategory(ANode.Data).Description
else
Desc:=TNewIDEItemTemplate(ANode.Data).Description;
end else begin
Desc:='';
end;
DescriptionLabel.Caption:=Desc;
end;
procedure TNewOtherDialog.SetupComponents;
begin
ItemsTreeView:=TTreeView.Create(Self);
with ItemsTreeView do begin
Name:='ItemsTreeView';
Parent:=Self;
Left:=5;
Top:=5;
OnClick:=@ItemsTreeViewClick;
end;
DescriptionGroupBox:=TGroupBox.Create(Self);
with DescriptionGroupBox do begin
Name:='DescriptionGroupBox';
Parent:=Self;
Left:=5;
Top:=5;
Caption:='Description';
end;
DescriptionLabel:=TLabel.Create(Self);
with DescriptionLabel do begin
Name:='DescriptionLabel';
Parent:=DescriptionGroupBox;
Align:=alClient;
Caption:='';
WordWrap:=true;
end;
OkButton:=TButton.Create(Self);
with OkButton do begin
Name:='OkButton';
Parent:=Self;
Left:=100;
Top:=100;
Caption:='Ok';
OnClick:=@OkButtonClick;
end;
CancelButton:=TButton.Create(Self);
with CancelButton do begin
Name:='CancelButton';
Parent:=Self;
Left:=150;
Top:=100;
Caption:='Cancel';
OnClick:=@CancelButtonClick;
end;
end;
constructor TNewOtherDialog.Create(TheOwner: TComponent);
begin
inherited Create(TheOwner);
FItemType:=TNewIDEItem.Create;
if LazarusResources.Find(Classname)=nil then begin
Name:='NewOtherDialog';
Caption := 'New ...';
Width:=400;
Height:=300;
Position:=poScreenCenter;
OnResize:=@NewOtherDialogResize;
SetupComponents;
FillItemsTree;
end;
IDEDialogLayoutList.ApplyLayout(Self,400,300);
OnResize(nil);
end;
destructor TNewOtherDialog.Destroy;
begin
FItemType.Free;
inherited Destroy;
end;
{ TNewIDEItem }
procedure TNewIDEItem.SetTheType(const AValue: TNewIDEItemType);
begin
if FTheType=AValue then exit;
FTheType:=AValue;
end;
constructor TNewIDEItem.Create;
begin
FTheType:=niiNone;
FFlag:=niifCopy;
end;
procedure TNewIDEItem.SetFlag(const AValue: TNewIDEItemFlag);
begin
if FFlag=AValue then exit;
FFlag:=AValue;
end;
procedure TNewIDEItem.Assign(Source: TNewIDEItem);
begin
TheType:=Source.TheType;
Flag:=Source.Flag;
end;
procedure TNewIDEItem.Assign(Source: TNewIDEItemTemplate);
begin
TheType:=Source.TheType;
Flag:=Source.DefaultFlag;
end;
function TNewIDEItem.CreateCopy: TNewIDEItem;
begin
Result:=TNewIDEItem.Create;
Result.Assign(Self);
end;
{ TNewIDEItemCategory }
function TNewIDEItemCategory.GetCount: integer;
begin
Result:=FItems.Count;
end;
function TNewIDEItemCategory.GetItems(Index: integer): TNewIDEItemTemplate;
begin
Result:=TNewIDEItemTemplate(FItems[Index]);
end;
constructor TNewIDEItemCategory.Create(const AName: string);
begin
FItems:=TList.Create;
FName:=AName;
end;
destructor TNewIDEItemCategory.Destroy;
begin
Clear;
FItems.Free;
inherited Destroy;
end;
procedure TNewIDEItemCategory.Clear;
var
i: Integer;
begin
for i:=0 to FItems.Count-1 do Items[i].Free;
FItems.Clear;
end;
procedure TNewIDEItemCategory.Add(ATemplate: TNewIDEItemTemplate);
begin
FItems.Add(ATemplate);
ATemplate.fCategory:=Self;
end;
function TNewIDEItemCategory.LocalizedName: string;
begin
// ToDo:
Result:=Name;
end;
function TNewIDEItemCategory.Description: string;
begin
if Name='File' then begin
Result:='Create a new editor file.'#13'Choose a type.';
end else if Name='Project' then begin
Result:='Create a new project.'#13'Choose a type.';
end else
Result:='';
end;
{ TNewIDEItemTemplate }
constructor TNewIDEItemTemplate.Create(AType: TNewIDEItemType;
const AName: string; ADefaultFlag: TNewIDEItemFlag;
TheAllowedFlags: TNewIDEItemFlags);
begin
FTheType:=AType;
FName:=AName;
FDefaultFlag:=ADefaultFlag;
FAllowedFlags:=TheAllowedFlags;
Include(FAllowedFlags,FDefaultFlag);
end;
function TNewIDEItemTemplate.LocalizedName: string;
begin
// ToDo: translate
Result:=Name;
end;
function TNewIDEItemTemplate.Description: string;
begin
case TheType of
niiNone:
Result:='';
niiCustom:
Result:='';
niiUnit:
Result:='Create a new pascal unit.';
niiForm:
Result:='Create a new unit with a LCL form.';
niiText:
Result:='Create a new text file.';
niiApplication:
Result:='Create a new graphical application.'#13#13
+'The program file is maintained by Lazarus.';
niiFPCProject:
Result:='Create a new program.'#13#13
+'The program file is maintained by Lazarus.';
niiCustomProject:
Result:='Create a new program.';
else
Result:=''
end;
end;
{ TNewIDEItemCategories }
function TNewIDEItemCategories.GetItems(Index: integer): TNewIDEItemCategory;
begin
Result:=TNewIDEItemCategory(FItems[Index]);
end;
procedure TNewIDEItemCategories.SetItems(Index: integer;
const AValue: TNewIDEItemCategory);
begin
FItems[Index]:=AValue;
end;
constructor TNewIDEItemCategories.CreateWithDefaults;
var
NewCategory: TNewIDEItemCategory;
begin
FItems:=TList.Create;
// category file
NewCategory:=TNewIDEItemCategory.Create('File');
Add(NewCategory);
NewCategory.Add(TNewIDEItemTemplate.Create(niiUnit,'Unit',niifCopy,[]));
NewCategory.Add(TNewIDEItemTemplate.Create(niiForm,'Form',niifCopy,[]));
NewCategory.Add(TNewIDEItemTemplate.Create(niiText,'Text',niifCopy,[]));
// category project
NewCategory:=TNewIDEItemCategory.Create('Project');
Add(NewCategory);
NewCategory.Add(
TNewIDEItemTemplate.Create(niiApplication,'Application',niifCopy,[]));
NewCategory.Add(
TNewIDEItemTemplate.Create(niiFPCProject,'FPC Project',niifCopy,[]));
NewCategory.Add(
TNewIDEItemTemplate.Create(niiCustomProject,'Custom Project',niifCopy,[]));
end;
destructor TNewIDEItemCategories.Destroy;
begin
Clear;
FItems.Free;
inherited Destroy;
end;
procedure TNewIDEItemCategories.Clear;
var
i: Integer;
begin
for i:=0 to FItems.Count-1 do Items[i].Free;
FItems.Clear;
end;
procedure TNewIDEItemCategories.Add(ACategory: TNewIDEItemCategory);
begin
FItems.Add(ACategory);
end;
function TNewIDEItemCategories.Count: integer;
begin
Result:=FItems.Count;
end;
finalization
InternalFinal;
end.

View File

@ -2587,7 +2587,7 @@ begin
csLabel:
begin
if TLabel(Sender).ShowAccelChar then begin
If TLabel(sender).WordWrap then begin
If TLabel(sender).WordWrap and (TLabel(Sender).Caption<>'') then begin
DC := GetDC(TLabel(Sender).Handle);
aLabel := ForceLineBreaks(DC, pLabel, TLabel(Sender).Width, True);
DeleteDC(DC);
@ -6847,7 +6847,9 @@ begin
end;
ReallocMem(Lines, 0);
If TmpStr <> nil then
Result := StrNew(TmpStr^.str);
Result := StrNew(TmpStr^.str)
else
Result:=nil;
end;
{$IFDEF ASSERT_IS_ON}
@ -6858,6 +6860,9 @@ end;
{ =============================================================================
$Log$
Revision 1.326 2003/02/28 19:10:25 mattias
added new ... dialog
Revision 1.325 2003/02/24 22:47:28 mattias
fixed setting TTreeView.ScrollBars