IDE implemented compatibility issues:
- added Issues tab to Object Inspector - added View/Issue browser - added new package file type - issue xml file - added Windows and Carbon LCL issues - added jump back and forward images - removed TButton and TBitBtn Color property hiding - set mime type for package images - added TLCLPlatforms set git-svn-id: trunk@14287 -
45
.gitattributes
vendored
@ -1930,6 +1930,7 @@ ide/codetoolsdefpreview.pas svneol=native#text/pascal
|
||||
ide/codetoolsoptions.lfm svneol=native#text/pascal
|
||||
ide/codetoolsoptions.lrs svneol=native#text/pascal
|
||||
ide/codetoolsoptions.pas svneol=native#text/pascal
|
||||
ide/compatibilityissues.pas svneol=native#text/pascal
|
||||
ide/compiler.pp svneol=native#text/pascal
|
||||
ide/compileroptions.pp svneol=native#text/pascal
|
||||
ide/compileroptionsdlg.lfm -text
|
||||
@ -2042,6 +2043,9 @@ ide/initialsetupdlgs.pas svneol=native#text/pascal
|
||||
ide/inputfiledialog.pas svneol=native#text/pascal
|
||||
ide/inputhistory.pas svneol=native#text/pascal
|
||||
ide/invertassigntool.pas svneol=native#text/pascal
|
||||
ide/issuebrowser.lfm svneol=native#text/plain
|
||||
ide/issuebrowser.lrs svneol=native#text/pascal
|
||||
ide/issuebrowser.pas svneol=native#text/pascal
|
||||
ide/keymapping.pp svneol=native#text/pascal
|
||||
ide/keymapschemedlg.lfm svneol=native#text/plain
|
||||
ide/keymapschemedlg.lrs svneol=native#text/pascal
|
||||
@ -2525,6 +2529,8 @@ images/menu/menu_search_files.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_find.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_find_next.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_find_previous.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_jumpback.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_jumpforward.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_openfile_atcursor.png -text svneol=unset#image/png
|
||||
images/menu/menu_search_replace.png -text svneol=unset#image/png
|
||||
images/menu/menu_select_all.png -text svneol=unset#image/png
|
||||
@ -2554,27 +2560,36 @@ images/mimetypes/text-lazarus-project-information.png -text
|
||||
images/mimetypes/text-lazarus-project-source.png -text
|
||||
images/mimetypes/text-x-pascal.png -text
|
||||
images/packages/pkg_add.png -text svneol=unset#image/png
|
||||
images/packages/pkg_binary.png -text
|
||||
images/packages/pkg_compile.png -text
|
||||
images/packages/pkg_conflict.png -text
|
||||
images/packages/pkg_files.png -text
|
||||
images/packages/pkg_binary.png -text svneol=unset#image/png
|
||||
images/packages/pkg_compile.png -text svneol=unset#image/png
|
||||
images/packages/pkg_conflict.png -text svneol=unset#image/png
|
||||
images/packages/pkg_files.png -text svneol=unset#image/png
|
||||
images/packages/pkg_graph.png -text svneol=unset#image/png
|
||||
images/packages/pkg_include.png -text
|
||||
images/packages/pkg_include.png -text svneol=unset#image/png
|
||||
images/packages/pkg_inherited.png -text svneol=unset#image/png
|
||||
images/packages/pkg_installed.png -text svneol=unset#image/png
|
||||
images/packages/pkg_lfm.png -text
|
||||
images/packages/pkg_lrs.png -text
|
||||
images/packages/pkg_issues.png -text svneol=unset#image/png
|
||||
images/packages/pkg_lfm.png -text svneol=unset#image/png
|
||||
images/packages/pkg_lrs.png -text svneol=unset#image/png
|
||||
images/packages/pkg_open.png -text svneol=unset#image/png
|
||||
images/packages/pkg_package_autoinstall.png -text
|
||||
images/packages/pkg_package_circle.png -text
|
||||
images/packages/pkg_package_uninstall.png -text
|
||||
images/packages/pkg_package_autoinstall.png -text svneol=unset#image/png
|
||||
images/packages/pkg_package_circle.png -text svneol=unset#image/png
|
||||
images/packages/pkg_package_uninstall.png -text svneol=unset#image/png
|
||||
images/packages/pkg_properties.png -text svneol=unset#image/png
|
||||
images/packages/pkg_registerunit.png -text
|
||||
images/packages/pkg_removedfiles.png -text
|
||||
images/packages/pkg_removedrequired.png -text
|
||||
images/packages/pkg_registerunit.png -text svneol=unset#image/png
|
||||
images/packages/pkg_removedfiles.png -text svneol=unset#image/png
|
||||
images/packages/pkg_removedrequired.png -text svneol=unset#image/png
|
||||
images/packages/pkg_required.png -text svneol=unset#image/png
|
||||
images/packages/pkg_text.png -text
|
||||
images/packages/pkg_text.png -text svneol=unset#image/png
|
||||
images/packages/pkg_unit.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_carbon.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_fpgui.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_gtk.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_gtk2.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_nogui.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_qt.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_win32.png -text svneol=unset#image/png
|
||||
images/propertygrid/issue_wince.png -text svneol=unset#image/png
|
||||
images/sourceeditor/ActiveBreakPoint.xpm -text svneol=native#image/x-xpixmap
|
||||
images/sourceeditor/InactiveBreakPoint.xpm -text svneol=native#image/x-xpixmap
|
||||
images/sourceeditor/InvalidBreakPoint.xpm -text svneol=native#image/x-xpixmap
|
||||
@ -2966,6 +2981,7 @@ lcl/interfaces/carbon/carbonwsstdctrls.pp svneol=native#text/pascal
|
||||
lcl/interfaces/carbon/carbonwstoolwin.pp svneol=native#text/pascal
|
||||
lcl/interfaces/carbon/glgrab.pas svneol=native#text/plain
|
||||
lcl/interfaces/carbon/interfaces.pas svneol=native#text/pascal
|
||||
lcl/interfaces/carbon/issues.xml svneol=native#text/xml
|
||||
lcl/interfaces/carbon/mackeycodes.inc svneol=native#text/pascal
|
||||
lcl/interfaces/carbon/opengl.pas svneol=native#text/plain
|
||||
lcl/interfaces/fpgui/Makefile.fpc svneol=native#text/plain
|
||||
@ -3174,6 +3190,7 @@ lcl/interfaces/qt/qtwsstdctrls.pp svneol=native#text/pascal
|
||||
lcl/interfaces/qt/qtwstoolwin.pp svneol=native#text/pascal
|
||||
lcl/interfaces/win32/README.txt svneol=native#text/plain
|
||||
lcl/interfaces/win32/interfaces.pp svneol=native#text/pascal
|
||||
lcl/interfaces/win32/issues.xml svneol=native#text/xml
|
||||
lcl/interfaces/win32/win32callback.inc svneol=native#text/pascal
|
||||
lcl/interfaces/win32/win32debug.pp svneol=native#text/pascal
|
||||
lcl/interfaces/win32/win32def.pp svneol=native#text/pascal
|
||||
|
382
ide/compatibilityissues.pas
Normal file
@ -0,0 +1,382 @@
|
||||
{ /***************************************************************************
|
||||
CompatibilityIssues.pas - Lazarus IDE unit
|
||||
--------------------------------------------
|
||||
|
||||
***************************************************************************/
|
||||
|
||||
***************************************************************************
|
||||
* *
|
||||
* 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. *
|
||||
* *
|
||||
***************************************************************************
|
||||
|
||||
Abstract:
|
||||
Compatiblity issues utilities
|
||||
|
||||
}
|
||||
unit CompatibilityIssues;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, Forms, SysUtils, InterfaceBase, ObjectInspector, PackageSystem, PackageDefs,
|
||||
ComponentReg, Laz_XMLRead, Laz_XMLWrite, Laz_DOM, LazConf, LCLProc, StringHashList;
|
||||
|
||||
type
|
||||
TReadIssueEvent = procedure (const IssueName, WidgetSetName: String) of object;
|
||||
TReadIssueContentEvent = procedure (const Short, Description: String) of object;
|
||||
|
||||
PIssue = ^TIssue;
|
||||
TIssue = record
|
||||
Name: String;
|
||||
Short: String;
|
||||
Description: String;
|
||||
WidgetSet: TLCLPlatform;
|
||||
end;
|
||||
|
||||
{ TClassHashList }
|
||||
|
||||
TClassHashList = class
|
||||
private
|
||||
FHashList: TStringHashList;
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
|
||||
procedure Add(const AClass: TPersistentClass);
|
||||
procedure AddComponent(const AClass: TComponentClass);
|
||||
function Find(const AClassName: String): TPersistentClass;
|
||||
end;
|
||||
|
||||
TIssueList = array of TIssue;
|
||||
|
||||
{ TIssueManager }
|
||||
|
||||
TIssueManager = class
|
||||
private
|
||||
FIssueProperties: TOIIssueProperties;
|
||||
FIssueList: TIssueList;
|
||||
FIssueFiles: TStringList;
|
||||
FClassList: TClassHashList;
|
||||
procedure AddPackage(APackage: TLazPackageID);
|
||||
procedure AddIssue(const IssueName, WidgetSetName: String);
|
||||
procedure AddIssueContent(const Short, Description: String);
|
||||
procedure AddIssueProperty(const IssueName, WidgetSetName: String);
|
||||
procedure GatherIssueFiles;
|
||||
procedure ReadFileIssues(const Filename: String; OnReadIssue: TReadIssueEvent;
|
||||
OnReadIssueContent: TReadIssueContentEvent);
|
||||
public
|
||||
constructor Create;
|
||||
destructor Destroy; override;
|
||||
|
||||
function GetIssueProperties: TOIIssueProperties;
|
||||
function GetIssueList: TIssueList;
|
||||
end;
|
||||
|
||||
|
||||
function GetIssueProperties: TOIIssueProperties;
|
||||
function GetIssueList: TIssueList;
|
||||
|
||||
implementation
|
||||
|
||||
var
|
||||
IssueManager: TIssueManager = nil;
|
||||
|
||||
{ TClassHashList }
|
||||
|
||||
constructor TClassHashList.Create;
|
||||
begin
|
||||
inherited;
|
||||
|
||||
FHashList := TStringHashList.Create(False);
|
||||
end;
|
||||
|
||||
destructor TClassHashList.Destroy;
|
||||
begin
|
||||
FHashList.Free;
|
||||
|
||||
inherited;
|
||||
end;
|
||||
|
||||
procedure TClassHashList.Add(const AClass: TPersistentClass);
|
||||
var
|
||||
C: TClass;
|
||||
begin
|
||||
C := AClass;
|
||||
while (C <> nil) and (FHashList.Find(C.ClassName) < 0) do
|
||||
begin
|
||||
FHashList.Add(C.ClassName, Pointer(C));
|
||||
if (C = TPersistent) then Break;
|
||||
C := C.ClassParent;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TClassHashList.AddComponent(const AClass: TComponentClass);
|
||||
begin
|
||||
Add(AClass);
|
||||
end;
|
||||
|
||||
function TClassHashList.Find(const AClassName: String): TPersistentClass;
|
||||
begin
|
||||
Result := TPersistentClass(FHashList.Data[AClassName]);
|
||||
end;
|
||||
|
||||
|
||||
function GetIssueProperties: TOIIssueProperties;
|
||||
begin
|
||||
if IssueManager = nil then IssueManager := TIssueManager.Create;
|
||||
Result := IssueManager.GetIssueProperties;
|
||||
end;
|
||||
|
||||
function GetIssueList: TIssueList;
|
||||
begin
|
||||
if IssueManager = nil then IssueManager := TIssueManager.Create;
|
||||
Result := IssueManager.GetIssueList;
|
||||
end;
|
||||
|
||||
{ TIssueManager }
|
||||
|
||||
function TIssueManager.GetIssueProperties: TOIIssueProperties;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
Result := nil;
|
||||
FreeAndNil(FIssueProperties);
|
||||
FIssueProperties := TOIIssueProperties.Create;
|
||||
|
||||
|
||||
FClassList := TClassHashList.Create;
|
||||
try
|
||||
IDEComponentPalette.IterateRegisteredClasses(@(FClassList.AddComponent));
|
||||
FClassList.Add(TForm);
|
||||
FClassList.Add(TDataModule);
|
||||
|
||||
for I := 0 to FIssueFiles.Count - 1 do
|
||||
ReadFileIssues(FIssueFiles[I], @AddIssueProperty, nil);
|
||||
|
||||
Result := FIssueProperties;
|
||||
finally
|
||||
FreeAndNil(FClassList);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TIssueManager.GetIssueList: TIssueList;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
SetLength(FIssueList, 0);
|
||||
|
||||
for I := 0 to FIssueFiles.Count - 1 do
|
||||
ReadFileIssues(FIssueFiles[I], @AddIssue, @AddIssueContent);
|
||||
|
||||
Result := FIssueList;
|
||||
end;
|
||||
|
||||
procedure TIssueManager.AddPackage(APackage: TLazPackageID);
|
||||
var
|
||||
ALazPackage: TLazPackage;
|
||||
I: Integer;
|
||||
begin
|
||||
if APackage = nil then Exit;
|
||||
ALazPackage := PackageGraph.FindPackageWithID(APackage);
|
||||
if ALazPackage = nil then Exit;
|
||||
|
||||
for I := 0 to ALazPackage.FileCount - 1 do
|
||||
if ALazPackage.Files[I].FileType = pftIssues then
|
||||
FIssueFiles.Add(ALazPackage.Files[I].GetFullFilename);
|
||||
end;
|
||||
|
||||
procedure TIssueManager.AddIssue(const IssueName, WidgetSetName: String);
|
||||
begin
|
||||
SetLength(FIssueList, Succ(Length(FIssueList)));
|
||||
FIssueList[High(FIssueList)].Name := IssueName;
|
||||
FIssueList[High(FIssueList)].WidgetSet := DirNameToLCLPlatform(WidgetSetName);
|
||||
FIssueList[High(FIssueList)].Short := '';
|
||||
FIssueList[High(FIssueList)].Description := '';
|
||||
end;
|
||||
|
||||
procedure TIssueManager.AddIssueContent(const Short, Description: String);
|
||||
begin
|
||||
if Length(FIssueList) = 0 then Exit;
|
||||
FIssueList[High(FIssueList)].Short := Short;
|
||||
FIssueList[High(FIssueList)].Description := Description;
|
||||
end;
|
||||
|
||||
procedure TIssueManager.AddIssueProperty(const IssueName, WidgetSetName: String);
|
||||
var
|
||||
Issue: TOIIssueProperty;
|
||||
AClass: TPersistentClass;
|
||||
AProperty: String;
|
||||
P: Integer;
|
||||
begin
|
||||
//DebugLn('TIssueManager.AddIssue ', IssueName, ' ', WidgetSetName);
|
||||
if IssueName = '' then Exit;
|
||||
|
||||
P := Pos('.', IssueName);
|
||||
if P = 0 then
|
||||
begin
|
||||
AClass := FClassList.Find(IssueName);
|
||||
AProperty := '';
|
||||
end
|
||||
else
|
||||
begin
|
||||
AClass := FClassList.Find(Copy(IssueName, 0, P - 1));
|
||||
AProperty := Copy(IssueName, P + 1, MaxInt);
|
||||
end;
|
||||
|
||||
if AClass = nil then
|
||||
begin
|
||||
// add as generic widgetset issue
|
||||
Inc(FIssueProperties.WidgetSetIssues[DirNameToLCLPlatform(WidgetSetName)]);
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Issue := TOIIssueProperty.Create(AClass, AProperty, True);
|
||||
Issue.WidgetSets := [DirNameToLCLPlatform(WidgetSetName)];
|
||||
FIssueProperties.Add(Issue);
|
||||
//DebugLn('TIssueManager.AddIssue True');
|
||||
end;
|
||||
|
||||
procedure TIssueManager.GatherIssueFiles;
|
||||
begin
|
||||
FIssueFiles.Clear;
|
||||
PackageGraph.IteratePackages([fpfSearchInInstalledPckgs], @AddPackage);
|
||||
end;
|
||||
|
||||
procedure TIssueManager.ReadFileIssues(const Filename: String; OnReadIssue: TReadIssueEvent;
|
||||
OnReadIssueContent: TReadIssueContentEvent);
|
||||
var
|
||||
IssueFile: TXMLDocument;
|
||||
R, N: TDOMNode;
|
||||
|
||||
function ReadContent(ANode: TDOMNode): String;
|
||||
var
|
||||
S: TStringStream;
|
||||
N: TDOMNode;
|
||||
begin
|
||||
Result := '';
|
||||
S := TStringStream.Create('');
|
||||
try
|
||||
N := ANode.FirstChild;
|
||||
while N <> nil do
|
||||
begin
|
||||
WriteXML(N, S);
|
||||
N := N.NextSibling;
|
||||
end;
|
||||
|
||||
Result := S.DataString;
|
||||
finally
|
||||
S.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure ParseWidgetSet(ANode: TDOMNode);
|
||||
var
|
||||
WidgetSetName, IssueName, Short, Description: String;
|
||||
IssueNode, AttrNode, IssueContentNode: TDOMNode;
|
||||
begin
|
||||
AttrNode := ANode.Attributes.GetNamedItem('name');
|
||||
if AttrNode <> nil then WidgetSetName := AttrNode.NodeValue
|
||||
else WidgetSetName := 'win32';
|
||||
|
||||
IssueNode := ANode.FirstChild;
|
||||
while IssueNode <> nil do
|
||||
begin
|
||||
if IssueNode.NodeName = 'issue' then
|
||||
begin
|
||||
AttrNode := IssueNode.Attributes.GetNamedItem('name');
|
||||
if AttrNode <> nil then IssueName := AttrNode.NodeValue
|
||||
else IssueName := 'win32';
|
||||
|
||||
if Assigned(OnReadIssue) then OnReadIssue(IssueName, WidgetSetName);
|
||||
if Assigned(OnReadIssueContent) then
|
||||
begin
|
||||
Short := '';
|
||||
Description := '';
|
||||
|
||||
IssueContentNode := IssueNode.FirstChild;
|
||||
while IssueContentNode <> nil do
|
||||
begin
|
||||
if IssueContentNode.NodeName = 'short' then
|
||||
Short := ReadContent(IssueContentNode)
|
||||
else
|
||||
if IssueContentNode.NodeName = 'descr' then
|
||||
Description := ReadContent(IssueContentNode);
|
||||
|
||||
IssueContentNode := IssueContentNode.NextSibling;
|
||||
end;
|
||||
|
||||
OnReadIssueContent(Short, Description);
|
||||
end;
|
||||
end;
|
||||
IssueNode := IssueNode.NextSibling;
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
try
|
||||
ReadXMLFile(IssueFile, Filename);
|
||||
except
|
||||
on E: Exception do
|
||||
DebugLn('TIssueManager.ReadFileIssues failed: ' + E.Message);
|
||||
end;
|
||||
|
||||
try
|
||||
if IssueFile = nil then Exit;
|
||||
|
||||
R := IssueFile.FindNode('package');
|
||||
if R = nil then Exit;
|
||||
|
||||
N := R.FirstChild;
|
||||
while N <> nil do
|
||||
begin
|
||||
if N.NodeName = 'widgetset' then
|
||||
ParseWidgetSet(N);
|
||||
|
||||
N := N.NextSibling;
|
||||
end;
|
||||
finally
|
||||
IssueFile.Free;
|
||||
end;
|
||||
end;
|
||||
|
||||
constructor TIssueManager.Create;
|
||||
begin
|
||||
inherited;
|
||||
|
||||
FIssueFiles := TStringList.Create;
|
||||
FIssueProperties := nil;
|
||||
|
||||
GatherIssueFiles;
|
||||
end;
|
||||
|
||||
destructor TIssueManager.Destroy;
|
||||
begin
|
||||
FreeAndNil(FIssueFiles);
|
||||
FreeAndNil(FIssueProperties);
|
||||
|
||||
inherited Destroy;
|
||||
end;
|
||||
|
||||
|
||||
finalization
|
||||
|
||||
FreeAndNil(IssueManager);
|
||||
|
||||
|
||||
end.
|
@ -92,7 +92,8 @@ type
|
||||
// extra
|
||||
nmiwSearchResultsViewName,
|
||||
nmiwAnchorEditor,
|
||||
nmiwCodeBrowser
|
||||
nmiwCodeBrowser,
|
||||
mniwIssueBrowser
|
||||
);
|
||||
|
||||
const
|
||||
@ -130,7 +131,8 @@ const
|
||||
// extra
|
||||
'SearchResults',
|
||||
'AnchorEditor',
|
||||
'CodeBrowser'
|
||||
'CodeBrowser',
|
||||
'IssueBrowser'
|
||||
);
|
||||
|
||||
type
|
||||
|
68
ide/issuebrowser.lfm
Normal file
@ -0,0 +1,68 @@
|
||||
object IssueBrowserView: TIssueBrowserView
|
||||
Left = 272
|
||||
Height = 340
|
||||
Top = 259
|
||||
Width = 660
|
||||
HorzScrollBar.Page = 659
|
||||
VertScrollBar.Page = 339
|
||||
ActiveControl = NameFilterEdit
|
||||
Caption = 'IssueBrowserView'
|
||||
ClientHeight = 340
|
||||
ClientWidth = 660
|
||||
OnCreate = FormCreate
|
||||
LCLVersion = '0.9.25'
|
||||
object IssueMemo: TMemo
|
||||
Left = 264
|
||||
Height = 306
|
||||
Top = 18
|
||||
Width = 390
|
||||
Anchors = [akTop, akLeft, akRight, akBottom]
|
||||
ReadOnly = True
|
||||
ScrollBars = ssAutoVertical
|
||||
TabOrder = 0
|
||||
end
|
||||
object IssueFilterGroupBox: TGroupBox
|
||||
Left = 6
|
||||
Height = 96
|
||||
Top = 12
|
||||
Width = 250
|
||||
Caption = 'IssueFilterGroupBox'
|
||||
ClientHeight = 78
|
||||
ClientWidth = 246
|
||||
TabOrder = 1
|
||||
object NameLabel: TLabel
|
||||
Left = 10
|
||||
Height = 14
|
||||
Top = 44
|
||||
Width = 53
|
||||
Caption = 'NameLabel'
|
||||
ParentColor = False
|
||||
end
|
||||
object NameFilterEdit: TEdit
|
||||
Left = 70
|
||||
Height = 23
|
||||
Top = 38
|
||||
Width = 164
|
||||
OnChange = NameFilterEditChange
|
||||
TabOrder = 0
|
||||
end
|
||||
end
|
||||
object IssueTreeView: TTreeView
|
||||
Left = 6
|
||||
Height = 210
|
||||
Top = 114
|
||||
Width = 250
|
||||
Anchors = [akTop, akLeft, akBottom]
|
||||
DefaultItemHeight = 15
|
||||
HideSelection = False
|
||||
Indent = 2
|
||||
RightClickSelect = True
|
||||
RowSelect = True
|
||||
ScrollBars = ssAutoBoth
|
||||
ShowButtons = False
|
||||
ShowLines = False
|
||||
TabOrder = 2
|
||||
OnSelectionChanged = IssueTreeViewSelectionChanged
|
||||
Options = [tvoAutoItemHeight, tvoKeepCollapsedNodes, tvoRightClickSelect, tvoRowSelect, tvoShowRoot, tvoToolTips]
|
||||
end
|
||||
end
|
25
ide/issuebrowser.lrs
Normal file
@ -0,0 +1,25 @@
|
||||
{ This is an automatically generated lazarus resource file }
|
||||
|
||||
LazarusResources.Add('TIssueBrowserView','FORMDATA',[
|
||||
'TPF0'#17'TIssueBrowserView'#16'IssueBrowserView'#4'Left'#3#16#1#6'Height'#3
|
||||
+'T'#1#3'Top'#3#3#1#5'Width'#3#148#2#18'HorzScrollBar.Page'#3#147#2#18'VertSc'
|
||||
+'rollBar.Page'#3'S'#1#13'ActiveControl'#7#14'NameFilterEdit'#7'Caption'#6#16
|
||||
+'IssueBrowserView'#12'ClientHeight'#3'T'#1#11'ClientWidth'#3#148#2#8'OnCreat'
|
||||
+'e'#7#10'FormCreate'#10'LCLVersion'#6#6'0.9.25'#0#5'TMemo'#9'IssueMemo'#4'Le'
|
||||
+'ft'#3#8#1#6'Height'#3'2'#1#3'Top'#2#18#5'Width'#3#134#1#7'Anchors'#11#5'akT'
|
||||
+'op'#6'akLeft'#7'akRight'#8'akBottom'#0#8'ReadOnly'#9#10'ScrollBars'#7#14'ss'
|
||||
+'AutoVertical'#8'TabOrder'#2#0#0#0#9'TGroupBox'#19'IssueFilterGroupBox'#4'Le'
|
||||
+'ft'#2#6#6'Height'#2'`'#3'Top'#2#12#5'Width'#3#250#0#7'Caption'#6#19'IssueFi'
|
||||
+'lterGroupBox'#12'ClientHeight'#2'N'#11'ClientWidth'#3#246#0#8'TabOrder'#2#1
|
||||
+#0#6'TLabel'#9'NameLabel'#4'Left'#2#10#6'Height'#2#14#3'Top'#2','#5'Width'#2
|
||||
+'5'#7'Caption'#6#9'NameLabel'#11'ParentColor'#8#0#0#5'TEdit'#14'NameFilterEd'
|
||||
+'it'#4'Left'#2'F'#6'Height'#2#23#3'Top'#2'&'#5'Width'#3#164#0#8'OnChange'#7
|
||||
+#20'NameFilterEditChange'#8'TabOrder'#2#0#0#0#0#9'TTreeView'#13'IssueTreeVie'
|
||||
+'w'#4'Left'#2#6#6'Height'#3#210#0#3'Top'#2'r'#5'Width'#3#250#0#7'Anchors'#11
|
||||
+#5'akTop'#6'akLeft'#8'akBottom'#0#17'DefaultItemHeight'#2#15#13'HideSelectio'
|
||||
+'n'#8#6'Indent'#2#2#16'RightClickSelect'#9#9'RowSelect'#9#10'ScrollBars'#7#10
|
||||
+'ssAutoBoth'#11'ShowButtons'#8#9'ShowLines'#8#8'TabOrder'#2#2#18'OnSelection'
|
||||
+'Changed'#7#29'IssueTreeViewSelectionChanged'#7'Options'#11#17'tvoAutoItemHe'
|
||||
+'ight'#21'tvoKeepCollapsedNodes'#19'tvoRightClickSelect'#12'tvoRowSelect'#11
|
||||
+'tvoShowRoot'#11'tvoToolTips'#0#0#0#0
|
||||
]);
|
291
ide/issuebrowser.pas
Normal file
@ -0,0 +1,291 @@
|
||||
{
|
||||
***************************************************************************
|
||||
* *
|
||||
* 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: Tomas Gregorovic
|
||||
|
||||
Abstract:
|
||||
Browser for widget set compatibility issues
|
||||
}
|
||||
unit IssueBrowser;
|
||||
|
||||
{$mode objfpc}{$H+}
|
||||
|
||||
interface
|
||||
|
||||
uses
|
||||
Classes, SysUtils, InterfaceBase, LCLProc, LResources, Contnrs, Forms, Controls, Graphics,
|
||||
Dialogs, StdCtrls, ComCtrls, CompatibilityIssues, IDEOptionDefs, LazarusIDEStrConsts,
|
||||
EnvironmentOpts, Masks, ComponentReg, ObjectInspector, ExtCtrls, Buttons, LazConf;
|
||||
|
||||
type
|
||||
{ TIssueBrowserView }
|
||||
|
||||
TIssueBrowserView = class(TForm)
|
||||
NameFilterEdit: TEdit;
|
||||
IssueFilterGroupBox: TGroupBox;
|
||||
IssueMemo: TMemo;
|
||||
NameLabel: TLabel;
|
||||
IssueTreeView: TTreeView;
|
||||
procedure FormCreate(Sender: TObject);
|
||||
procedure IssueTreeViewSelectionChanged(Sender: TObject);
|
||||
procedure NameFilterEditChange(Sender: TObject);
|
||||
private
|
||||
FIssueList: TIssueList;
|
||||
FClasses: TClassList;
|
||||
FCanUpdate: Boolean;
|
||||
procedure GetComponentClass(const AClass: TComponentClass);
|
||||
public
|
||||
procedure UpdateIssueList;
|
||||
procedure SetIssueName(const AIssueName: String);
|
||||
end;
|
||||
|
||||
var
|
||||
IssueBrowserView: TIssueBrowserView = nil;
|
||||
|
||||
implementation
|
||||
|
||||
{ TIssueBrowserView }
|
||||
|
||||
procedure TIssueBrowserView.FormCreate(Sender: TObject);
|
||||
var
|
||||
P: TLCLPlatform;
|
||||
X: Integer;
|
||||
begin
|
||||
FIssueList := GetIssueList;
|
||||
|
||||
Name := NonModalIDEWindowNames[mniwIssueBrowser];
|
||||
Caption := lisIssueBrowser;
|
||||
EnvironmentOptions.IDEWindowLayoutList.Apply(Self, Name);
|
||||
|
||||
IssueFilterGroupBox.Caption := lisFilterIssues;
|
||||
NameLabel.Caption := lisCodeToolsDefsName;
|
||||
IssueTreeView.Images := WidgetSetImageList;
|
||||
|
||||
X := 10;
|
||||
// create widget set filter buttons
|
||||
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
begin
|
||||
with TSpeedButton.Create(Self) do
|
||||
begin
|
||||
Name := 'SpeedButton' + LCLPlatformDirNames[P];
|
||||
Left := X;
|
||||
Top := 4;
|
||||
Width := 24;
|
||||
Height := 24;
|
||||
GroupIndex := Integer(P) + 1;
|
||||
Down := True;
|
||||
AllowAllUp := True;
|
||||
|
||||
WidgetSetImageList.GetBitmap(Integer(P), Glyph);
|
||||
ShowHint := True;
|
||||
Hint := LCLPlatformDisplayNames[P];
|
||||
OnClick := @NameFilterEditChange;
|
||||
|
||||
Parent := IssueFilterGroupBox;
|
||||
Inc(X, Width);
|
||||
end;
|
||||
end;
|
||||
|
||||
FCanUpdate := True;
|
||||
UpdateIssueList;
|
||||
end;
|
||||
procedure TIssueBrowserView.IssueTreeViewSelectionChanged(Sender: TObject);
|
||||
var
|
||||
Issue: TIssue;
|
||||
begin
|
||||
if IssueTreeView.Selected = nil then
|
||||
begin
|
||||
IssueMemo.Clear;
|
||||
Exit;
|
||||
end;
|
||||
|
||||
Issue := PIssue(IssueTreeView.Selected.Data)^;
|
||||
IssueMemo.Text := Issue.Short + LineEnding + LineEnding + Issue.Description;
|
||||
end;
|
||||
|
||||
procedure TIssueBrowserView.NameFilterEditChange(Sender: TObject);
|
||||
begin
|
||||
UpdateIssueList;
|
||||
end;
|
||||
|
||||
procedure TIssueBrowserView.GetComponentClass(const AClass: TComponentClass);
|
||||
begin
|
||||
FClasses.Add(AClass);
|
||||
end;
|
||||
|
||||
procedure TIssueBrowserView.UpdateIssueList;
|
||||
var
|
||||
IssueClass: String;
|
||||
IssueProperty: String;
|
||||
IssueMask: TMaskList;
|
||||
S, M: String;
|
||||
I: Integer;
|
||||
Issues: TStringList;
|
||||
Issue: TIssue;
|
||||
C: TClass;
|
||||
AddParentClass: Boolean;
|
||||
P: TLCLPlatform;
|
||||
WidgetSetFilter: TLCLPlatforms;
|
||||
Component: TComponent;
|
||||
begin
|
||||
if not FCanUpdate then Exit;
|
||||
S := Trim(NameFilterEdit.Text);
|
||||
IssueClass := '';
|
||||
IssueProperty := '';
|
||||
|
||||
WidgetSetFilter := [];
|
||||
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
begin
|
||||
Component := FindComponent('SpeedButton' + LCLPlatformDirNames[P]);
|
||||
if Component is TSpeedButton then
|
||||
if (Component as TSpeedButton).Down then Include(WidgetSetFilter, P);
|
||||
end;
|
||||
|
||||
I := Pos('.', S);
|
||||
if I = 0 then IssueClass := S
|
||||
else
|
||||
begin
|
||||
IssueClass := Copy(S, 0, I - 1);
|
||||
IssueProperty := Copy(S, I + 1, MaxInt);
|
||||
end;
|
||||
|
||||
if (IssueProperty = '') and (IssueClass = '') then
|
||||
M := '*'
|
||||
else
|
||||
begin
|
||||
if IssueClass = '' then
|
||||
M := '*.' + IssueProperty + '*'
|
||||
else
|
||||
begin
|
||||
// find parent classes
|
||||
M := '';
|
||||
FClasses := TClassList.Create;
|
||||
try
|
||||
IDEComponentPalette.IterateRegisteredClasses(@GetComponentClass);
|
||||
|
||||
FClasses.Add(TCustomForm);
|
||||
FClasses.Add(TForm);
|
||||
FClasses.Add(TDataModule);
|
||||
|
||||
for I := 0 to FClasses.Count - 1 do
|
||||
begin
|
||||
C := FClasses[I];
|
||||
AddParentClass := False;
|
||||
while C <> nil do
|
||||
begin
|
||||
if AddParentClass or (Copy(C.ClassName, 0, Length(IssueClass)) = IssueClass) then
|
||||
begin
|
||||
if M <> '' then M := M + ';';
|
||||
M := M + C.ClassName + ';' + C.ClassName + '.' + IssueProperty + '*';
|
||||
AddParentClass := True;
|
||||
end;
|
||||
|
||||
C := C.ClassParent;
|
||||
end;
|
||||
end;
|
||||
|
||||
if FClasses.Count = 0 then
|
||||
M := IssueClass + '*;' + IssueClass + '*.' + IssueProperty + '*';
|
||||
|
||||
if (Copy('TWidgetSet', 0, Length(IssueClass)) = IssueClass) then
|
||||
M := M + ';TWidgetSet';
|
||||
finally
|
||||
FClasses.Free;
|
||||
end;
|
||||
end;
|
||||
end;
|
||||
|
||||
IssueMask := TMaskList.Create(M);
|
||||
Issues := TStringList.Create;
|
||||
try
|
||||
for I := 0 to High(FIssueList) do
|
||||
begin
|
||||
Issue := FIssueList[I];
|
||||
if Issue.WidgetSet in WidgetSetFilter then
|
||||
if IssueMask.Matches(Issue.Name) then
|
||||
Issues.AddObject(Issue.Name, TObject(I));
|
||||
end;
|
||||
|
||||
Issues.Sort;
|
||||
|
||||
IssueTreeView.BeginUpdate;
|
||||
try
|
||||
IssueTreeView.Items.Clear;
|
||||
|
||||
for I := 0 to Issues.Count - 1 do
|
||||
begin
|
||||
with IssueTreeView.Items.AddChild(nil, Issues[I]) do
|
||||
begin
|
||||
ImageIndex := Integer(FIssueList[Integer(Issues.Objects[I])].WidgetSet);
|
||||
StateIndex := ImageIndex;
|
||||
SelectedIndex := ImageIndex;
|
||||
Data := @FIssueList[Integer(Issues.Objects[I])];
|
||||
end;
|
||||
if NameFilterEdit.Text = Issues[I] then
|
||||
begin
|
||||
IssueTreeView.Selected := IssueTreeView.Items[I];
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
IssueTreeView.EndUpdate;
|
||||
end;
|
||||
finally
|
||||
Issues.Free;
|
||||
IssueMask.Free;
|
||||
end;
|
||||
|
||||
if IssueTreeView.Items.Count > 0 then
|
||||
begin
|
||||
if IssueTreeView.Selected = nil then
|
||||
IssueTreeView.Selected := IssueTreeView.Items[0];
|
||||
end
|
||||
else
|
||||
IssueMemo.Clear;
|
||||
end;
|
||||
|
||||
procedure TIssueBrowserView.SetIssueName(const AIssueName: String);
|
||||
var
|
||||
P: TLCLPlatform;
|
||||
Component: TComponent;
|
||||
begin
|
||||
FCanUpdate := False;
|
||||
try
|
||||
NameFilterEdit.Text := AIssueName;
|
||||
|
||||
if AIssueName <> '' then
|
||||
begin
|
||||
for P := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
begin
|
||||
Component := FindComponent('SpeedButton' + LCLPlatformDirNames[P]);
|
||||
if Component is TSpeedButton then
|
||||
(Component as TSpeedButton).Down := True;
|
||||
end;
|
||||
end;
|
||||
finally
|
||||
FCanUpdate := True;
|
||||
UpdateIssueList;
|
||||
end;
|
||||
end;
|
||||
|
||||
initialization
|
||||
{$I issuebrowser.lrs}
|
||||
|
||||
end.
|
||||
|
@ -480,6 +480,7 @@ begin
|
||||
ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[]);
|
||||
ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleIssueBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
|
||||
@ -802,6 +803,7 @@ begin
|
||||
ecToggleFormUnit: SetResult(VK_F12,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecViewAnchorEditor: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleCodeBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleIssueBrowser: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleCompPalette: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
ecToggleIDESpeedBtns: SetResult(VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[],VK_UNKNOWN,[]);
|
||||
|
||||
@ -1427,6 +1429,7 @@ begin
|
||||
ecViewUnitInfo : Result:= srkmecViewUnitInfo;
|
||||
ecViewAnchorEditor : Result:= srkmecViewAnchorEditor;
|
||||
ecToggleCodeBrowser : Result:= srkmecToggleCodeBrowser;
|
||||
ecToggleIssueBrowser : Result:= srkmecToggleIssueBrowser;
|
||||
ecViewComponents : Result:= srkmecViewComponents;
|
||||
ecToggleCompPalette : Result:= srkmecToggleCompPalette;
|
||||
ecToggleIDESpeedBtns : Result:= srkmecToggleIDESpeedBtns;
|
||||
|
@ -253,6 +253,7 @@ resourcestring
|
||||
lisMenuViewSourceEditor = 'Source Editor';
|
||||
lisMenuViewCodeExplorer = 'Code Explorer';
|
||||
lisMenuViewCodeBrowser = 'Code Browser';
|
||||
lisMenuViewIssueBrowser = 'Issue Browser';
|
||||
lisMenuViewComponents = '&Components';
|
||||
lisMenuJumpTo = 'Jump to';
|
||||
lisMenuViewUnits = 'Units...';
|
||||
@ -905,6 +906,8 @@ resourcestring
|
||||
dlgEdFiles = 'Editor files';
|
||||
dlgEnvProject = 'Project';
|
||||
lisCodeBrowser = 'Code browser';
|
||||
lisIssueBrowser = 'Issue browser';
|
||||
lisFilterIssues = 'Filter issues';
|
||||
dlgIntvInSec = 'Interval in secs';
|
||||
dlgDesktopFiles = 'Desktop files';
|
||||
dlgSaveDFile = 'Save desktop settings to file';
|
||||
@ -1827,6 +1830,7 @@ resourcestring
|
||||
srkmecViewUnitInfo = 'View unit information';
|
||||
srkmecViewAnchorEditor = 'View anchor editor';
|
||||
srkmecToggleCodeBrowser = 'View code browser';
|
||||
srkmecToggleIssueBrowser = 'View issue browser';
|
||||
srkmecToggleCompPalette = 'View component palette';
|
||||
srkmecToggleIDESpeedBtns = 'View IDE speed buttons';
|
||||
|
||||
@ -2368,6 +2372,7 @@ resourcestring
|
||||
lisPkgFileTypeLFM = 'LFM - Lazarus form text';
|
||||
lisPkgFileTypeLRS = 'LRS - Lazarus resource';
|
||||
lisPkgFileTypeInclude = 'Include file';
|
||||
lisPkgFileTypeIssues = 'Issues xml file';
|
||||
lisPkgFileTypeText = 'Text';
|
||||
lisPkgFileTypeBinary = 'Binary';
|
||||
|
||||
|
72
ide/main.pp
@ -133,7 +133,8 @@ uses
|
||||
ProcessList, InitialSetupDlgs, NewDialog, MakeResStrDlg, ToDoList,
|
||||
DialogProcs, FindReplaceDialog, FindInFilesDlg, CodeExplorer, BuildFileDlg,
|
||||
ProcedureList, ExtractProcDlg, FindRenameIdentifier, AbstractsMethodsDlg,
|
||||
CleanDirDlg, CodeContextForm, AboutFrm, BuildManager,
|
||||
CleanDirDlg, CodeContextForm, AboutFrm, BuildManager, CompatibilityIssues,
|
||||
IssueBrowser,
|
||||
// main ide
|
||||
MainBar, MainIntf, MainBase;
|
||||
|
||||
@ -242,6 +243,7 @@ type
|
||||
procedure mnuViewCodeExplorerClick(Sender: TObject);
|
||||
procedure mnuViewCodeBrowserClick(Sender: TObject);
|
||||
procedure mnuViewComponentsClick(Sender: TObject);
|
||||
procedure mnuViewIssueBrowserClick(Sender: TObject);
|
||||
procedure mnuViewMessagesClick(Sender: TObject);
|
||||
procedure mnuViewSearchResultsClick(Sender: TObject);
|
||||
procedure mnuToggleFormUnitClicked(Sender: TObject);
|
||||
@ -392,12 +394,14 @@ type
|
||||
// ObjectInspector + PropertyEditorHook events
|
||||
procedure OIOnSelectPersistents(Sender: TObject);
|
||||
procedure OIOnShowOptions(Sender: TObject);
|
||||
procedure OIOnViewIssues(Sender: TObject);
|
||||
procedure OIOnDestroy(Sender: TObject);
|
||||
procedure OIRemainingKeyDown(Sender: TObject; var Key: Word;
|
||||
Shift: TShiftState);
|
||||
procedure OIOnAddToFavourites(Sender: TObject);
|
||||
procedure OIOnRemoveFromFavourites(Sender: TObject);
|
||||
procedure OIOnFindDeclarationOfProperty(Sender: TObject);
|
||||
procedure OIOnUpdateIssues(Sender: TObject);
|
||||
function OnPropHookGetMethodName(const Method: TMethod;
|
||||
CheckOwner: TObject): ShortString;
|
||||
procedure OnPropHookGetMethods(TypeData: PTypeData; Proc:TGetStringProc);
|
||||
@ -691,6 +695,7 @@ type
|
||||
procedure DoViewUnitInfo;
|
||||
procedure DoShowCodeExplorer;
|
||||
procedure DoShowCodeBrowser;
|
||||
procedure DoShowIssueBrowser(const IssueName: String = '');
|
||||
procedure DoShowComponentList;
|
||||
procedure DoShowFPDocEditor;
|
||||
function CreateNewUniqueFilename(const Prefix, Ext: string;
|
||||
@ -1284,6 +1289,39 @@ begin
|
||||
DoShowEnvGeneralOptions(eodpObjectInspector);
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OIOnViewIssues(Sender: TObject);
|
||||
var
|
||||
C: TClass;
|
||||
begin
|
||||
C := nil;
|
||||
if (ObjectInspector1.Selection <> nil) and
|
||||
(ObjectInspector1.Selection.Count > 0) then
|
||||
begin
|
||||
C := ObjectInspector1.Selection[0].ClassType;
|
||||
if C.InheritsFrom(TForm) then C := TForm
|
||||
else
|
||||
if C.InheritsFrom(TCustomForm) then C := TCustomForm
|
||||
else
|
||||
if C.InheritsFrom(TDataModule) then C := TDataModule;
|
||||
end;
|
||||
|
||||
|
||||
if ObjectInspector1.GetActivePropertyRow = nil then
|
||||
begin
|
||||
if C <> nil then
|
||||
DoShowIssueBrowser(C.ClassName)
|
||||
else
|
||||
DoShowIssueBrowser;
|
||||
end
|
||||
else
|
||||
begin
|
||||
if C <> nil then
|
||||
DoShowIssueBrowser(C.ClassName + '.' + ObjectInspector1.GetActivePropertyRow.Name)
|
||||
else
|
||||
DoShowIssueBrowser;
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OIOnDestroy(Sender: TObject);
|
||||
begin
|
||||
if ObjectInspector1=Sender then
|
||||
@ -1322,6 +1360,15 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.OIOnUpdateIssues(Sender: TObject);
|
||||
begin
|
||||
if Sender = nil then Sender := ObjectInspector1;
|
||||
if Sender is TObjectInspectorDlg then
|
||||
begin
|
||||
(Sender as TObjectInspectorDlg).Issues := GetIssueProperties;
|
||||
end;
|
||||
end;
|
||||
|
||||
function TMainIDE.OnPropHookGetMethodName(const Method: TMethod;
|
||||
CheckOwner: TObject): ShortString;
|
||||
begin
|
||||
@ -1560,16 +1607,19 @@ procedure TMainIDE.SetupObjectInspector;
|
||||
begin
|
||||
ObjectInspector1 := TObjectInspectorDlg.Create(OwningComponent);
|
||||
ObjectInspector1.BorderStyle:=bsSizeable;
|
||||
ObjectInspector1.ShowFavorites:=True;
|
||||
ObjectInspector1.ShowIssues:=True;
|
||||
ObjectInspector1.Favourites:=LoadOIFavouriteProperties;
|
||||
ObjectInspector1.FindDeclarationPopupmenuItem.Visible:=true;
|
||||
ObjectInspector1.OnAddToFavourites:=@OIOnAddToFavourites;
|
||||
ObjectInspector1.OnFindDeclarationOfProperty:=@OIOnFindDeclarationOfProperty;
|
||||
ObjectInspector1.OnUpdateIssues := @OIOnUpdateIssues;
|
||||
ObjectInspector1.OnRemainingKeyDown:=@OIRemainingKeyDown;
|
||||
ObjectInspector1.OnRemoveFromFavourites:=@OIOnRemoveFromFavourites;
|
||||
ObjectInspector1.OnSelectPersistentsInOI:=@OIOnSelectPersistents;
|
||||
ObjectInspector1.OnShowOptions:=@OIOnShowOptions;
|
||||
ObjectInspector1.OnViewIssues:=@OIOnViewIssues;
|
||||
ObjectInspector1.OnDestroy:=@OIOnDestroy;
|
||||
ObjectInspector1.ShowFavouritePage:=true;
|
||||
IDECmdScopeObjectInspectorOnly.AddWindowClass(TObjectInspectorDlg);
|
||||
|
||||
GlobalDesignHook:=TPropertyEditorHook.Create;
|
||||
@ -2075,6 +2125,7 @@ begin
|
||||
itmViewSourceEditor.OnClick := @mnuViewSourceEditorClicked;
|
||||
itmViewCodeExplorer.OnClick := @mnuViewCodeExplorerClick;
|
||||
itmViewCodeBrowser.OnClick := @mnuViewCodeBrowserClick;
|
||||
itmViewIssueBrowser.OnClick := @mnuViewIssueBrowserClick;
|
||||
itmViewComponents.OnClick := @mnuViewComponentsClick;
|
||||
itmViewFPDocEditor.OnClick := @mnuViewFPDocEditorClicked;
|
||||
itmViewUnits.OnClick := @mnuViewUnitsClicked;
|
||||
@ -2604,6 +2655,9 @@ begin
|
||||
ecToggleCodeBrowser:
|
||||
DoShowCodeBrowser;
|
||||
|
||||
ecToggleIssueBrowser:
|
||||
DoShowIssueBrowser;
|
||||
|
||||
ecViewComponents:
|
||||
DoShowComponentList;
|
||||
|
||||
@ -3132,6 +3186,11 @@ begin
|
||||
DoShowComponentList;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.mnuViewIssueBrowserClick(Sender: TObject);
|
||||
begin
|
||||
DoShowIssueBrowser;
|
||||
end;
|
||||
|
||||
Procedure TMainIDE.mnuViewMessagesClick(Sender: TObject);
|
||||
begin
|
||||
// it was already visible, but user does not see it, try to move in view
|
||||
@ -7203,6 +7262,15 @@ begin
|
||||
CodeBrowserView.ShowOnTop;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoShowIssueBrowser(const IssueName: String);
|
||||
begin
|
||||
if IssueBrowserView = nil then
|
||||
IssueBrowserView := TIssueBrowserView.Create(OwningComponent);
|
||||
|
||||
IssueBrowserView.SetIssueName(IssueName);
|
||||
IssueBrowserView.ShowOnTop;
|
||||
end;
|
||||
|
||||
procedure TMainIDE.DoShowComponentList;
|
||||
begin
|
||||
if not Assigned(ComponentListForm)
|
||||
|
@ -182,6 +182,7 @@ type
|
||||
itmViewCodeExplorer: TIDEMenuCommand;
|
||||
itmViewFPDocEditor: TIDEMenuCommand;
|
||||
itmViewCodeBrowser: TIDEMenuCommand;
|
||||
itmViewIssueBrowser: TIDEMenuCommand;
|
||||
itmViewComponents: TIDEMenuCommand;
|
||||
//itmViewUnitWindows: TIDEMenuSection;
|
||||
itmViewUnits: TIDEMenuCommand;
|
||||
|
@ -469,8 +469,8 @@ begin
|
||||
ParentMI:=itmJumpings;
|
||||
|
||||
CreateMenuItem(ParentMI,itmGotoLine,'itmGotoLine',lisMenuGotoLine, 'menu_goto_line');
|
||||
CreateMenuItem(ParentMI,itmJumpBack,'itmJumpBack',lisMenuJumpBack);
|
||||
CreateMenuItem(ParentMI,itmJumpForward,'itmJumpForward',lisMenuJumpForward);
|
||||
CreateMenuItem(ParentMI,itmJumpBack,'itmJumpBack',lisMenuJumpBack, 'menu_search_jumpback');
|
||||
CreateMenuItem(ParentMI,itmJumpForward,'itmJumpForward',lisMenuJumpForward, 'menu_search_jumpforward');
|
||||
CreateMenuItem(ParentMI,itmAddJumpPoint,'itmAddJumpPoint',lisMenuAddJumpPointToHistory);
|
||||
CreateMenuItem(ParentMI,itmJumpHistory,'itmJumpHistory',lisMenuViewJumpHistory);
|
||||
CreateMenuItem(ParentMI,itmJumpToNextError,'itmJumpToNextError',lisMenuJumpToNextError);
|
||||
@ -511,6 +511,7 @@ begin
|
||||
CreateMenuItem(ParentMI,itmViewCodeExplorer,'itmViewCodeExplorer',lisMenuViewCodeExplorer, 'menu_view_code_explorer');
|
||||
CreateMenuItem(ParentMI,itmViewFPDocEditor,'itmViewFPDocEditor',lisMenuFPDocEditor);
|
||||
CreateMenuItem(ParentMI,itmViewCodeBrowser,'itmViewCodeBrowser',lisMenuViewCodeBrowser);
|
||||
CreateMenuItem(ParentMI,itmViewIssueBrowser,'itmViewIssueBrowser',lisMenuViewIssueBrowser);
|
||||
CreateMenuItem(ParentMI,itmViewComponents,'itmViewComponents',lisMenuViewComponents);
|
||||
|
||||
CreateMenuSeparatorSection(mnuView,itmViewUnitWindows,'itmViewUnitWindows');
|
||||
@ -875,6 +876,7 @@ begin
|
||||
itmViewCodeExplorer.Command:=GetCommand(ecToggleCodeExpl);
|
||||
itmViewFPDocEditor.Command:=GetCommand(ecToggleFPDocEditor);
|
||||
itmViewCodeBrowser.Command:=GetCommand(ecToggleCodeBrowser);
|
||||
itmViewIssueBrowser.Command:=GetCommand(ecToggleIssueBrowser);
|
||||
itmViewComponents.Command:=GetCommand(ecViewComponents);
|
||||
itmViewUnitDependencies.Command:=GetCommand(ecViewUnitDependencies);
|
||||
itmViewUnitInfo.Command:=GetCommand(ecViewUnitInfo);
|
||||
|
@ -705,12 +705,6 @@ initialization
|
||||
TButtonGlyphPropEditor);
|
||||
RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TFontCharset'),
|
||||
nil, 'CharSet', TFontCharsetPropertyEditor);
|
||||
// TButton.Color does not work on all platforms
|
||||
RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TGraphicsColor'),
|
||||
TButton, 'Color', THiddenPropertyEditor);
|
||||
// TBitBtn.Color does not work on all platforms
|
||||
RegisterPropertyEditor(DummyClassForPropTypes.PTypeInfos('TGraphicsColor'),
|
||||
TBitBtn, 'Color', THiddenPropertyEditor);
|
||||
|
||||
|
||||
finalization
|
||||
|
@ -176,6 +176,7 @@ const
|
||||
ecToggleCompPalette = ecFirstLazarus + 319;
|
||||
ecToggleIDESpeedBtns = ecFirstLazarus + 320;
|
||||
ecViewComponents = ecFirstLazarus + 321;
|
||||
ecToggleIssueBrowser = ecFirstLazarus + 322;
|
||||
|
||||
// sourcenotebook commands
|
||||
ecNextEditor = ecFirstLazarus + 330;
|
||||
|
@ -12,8 +12,8 @@ object ObjectInspectorDlg: TObjectInspectorDlg
|
||||
OnResize = ObjectInspectorResize
|
||||
PopupMenu = MainPopupMenu
|
||||
object StatusBar: TStatusBar
|
||||
Height = 23
|
||||
Top = 646
|
||||
Height = 20
|
||||
Top = 649
|
||||
Width = 275
|
||||
Panels = <
|
||||
item
|
||||
|
@ -6,7 +6,7 @@ LazarusResources.Add('TObjectInspectorDlg','FORMDATA',[
|
||||
+'tScrollBar.Page'#3#156#2#7'Caption'#6#18'ObjectInspectorDlg'#12'ClientHeigh'
|
||||
+'t'#3#157#2#11'ClientWidth'#3#19#1#10'KeyPreview'#9#8'OnResize'#7#21'ObjectI'
|
||||
+'nspectorResize'#9'PopupMenu'#7#13'MainPopupMenu'#0#10'TStatusBar'#9'StatusB'
|
||||
+'ar'#6'Height'#2#23#3'Top'#3#134#2#5'Width'#3#19#1#6'Panels'#14#1#5'Width'#2
|
||||
+'ar'#6'Height'#2#20#3'Top'#3#137#2#5'Width'#3#19#1#6'Panels'#14#1#5'Width'#2
|
||||
+'d'#0#1#5'Width'#2'2'#0#0#11'SimplePanel'#8#0#0#9'TComboBox'#23'AvailPersist'
|
||||
+'entComboBox'#6'Height'#2#21#5'Width'#3#19#1#5'Align'#7#5'alTop'#16'AutoComp'
|
||||
+'leteText'#11#22'cbactEndOfLineComplete'#20'cbactSearchAscending'#0#10'ItemH'
|
||||
|
@ -35,9 +35,9 @@ unit ObjectInspector;
|
||||
interface
|
||||
|
||||
uses
|
||||
Forms, SysUtils, Buttons, Classes, Graphics, GraphType, StdCtrls, LCLType,
|
||||
LCLIntf, LCLProc, Controls, ComCtrls, ExtCtrls, TypInfo, LMessages,
|
||||
LResources, LazConfigStorage, Menus, Dialogs, ObjInspStrConsts,
|
||||
InterfaceBase, Forms, SysUtils, Buttons, Types, Classes, Graphics, GraphType,
|
||||
StdCtrls, LCLType, LCLIntf, LCLProc, Controls, ComCtrls, ExtCtrls, TypInfo,
|
||||
LMessages, LResources, LazConfigStorage, Menus, Dialogs, ObjInspStrConsts,
|
||||
PropEdits, GraphPropEdits, ListViewPropEdit, ImageListEditor,
|
||||
ComponentTreeView, ComponentEditors, IDEImagesIntf;
|
||||
|
||||
@ -53,7 +53,8 @@ type
|
||||
TObjectInspectorPage = (
|
||||
oipgpProperties,
|
||||
oipgpEvents,
|
||||
oipgpFavourite
|
||||
oipgpFavourite,
|
||||
oipgpIssues
|
||||
);
|
||||
TObjectInspectorPages = set of TObjectInspectorPage;
|
||||
|
||||
@ -77,6 +78,15 @@ type
|
||||
function CreateCopy: TOIFavouriteProperty;
|
||||
function DebugReportAsString: string;
|
||||
end;
|
||||
|
||||
{ TOIIssueProperty}
|
||||
TOIIssueProperty = class(TOIFavouriteProperty)
|
||||
public
|
||||
WidgetSets: TLCLPlatforms;
|
||||
|
||||
function IsIssue(AClass: TPersistentClass;
|
||||
const APropertyName: string): TLCLPlatforms;
|
||||
end;
|
||||
|
||||
{ TOIFavouriteProperties }
|
||||
|
||||
@ -122,6 +132,19 @@ type
|
||||
property DoublesDeleted: boolean read FDoublesDeleted;
|
||||
end;
|
||||
TOIFavouritePropertiesClass = class of TOIFavouriteProperties;
|
||||
|
||||
{ TOIIssueProperties }
|
||||
|
||||
TOIIssueProperties = class(TOIFavouriteProperties)
|
||||
public
|
||||
WidgetSetIssues: Array [TLCLPlatform] of Integer;
|
||||
constructor Create;
|
||||
|
||||
function IsIssue(AClass: TPersistentClass;
|
||||
const PropertyName: string): TLCLPlatforms;
|
||||
function AreIssues(Selection: TPersistentSelectionList;
|
||||
const PropertyName: string): TLCLPlatforms;
|
||||
end;
|
||||
|
||||
|
||||
{ TOIOptions }
|
||||
@ -209,10 +232,11 @@ type
|
||||
FNextBrother,
|
||||
FParent: TOIPropertyGridRow;
|
||||
FEditor: TPropertyEditor;
|
||||
FWidgetSets: TLCLPlatforms;
|
||||
procedure GetLvl;
|
||||
public
|
||||
constructor Create(PropertyTree:TOICustomPropertyGrid;
|
||||
PropEditor:TPropertyEditor; ParentNode:TOIPropertyGridRow);
|
||||
PropEditor:TPropertyEditor; ParentNode:TOIPropertyGridRow; WidgetSets: TLCLPlatforms);
|
||||
destructor Destroy; override;
|
||||
function ConsistencyCheck: integer;
|
||||
function HasChild(Row: TOIPropertyGridRow): boolean;
|
||||
@ -476,6 +500,7 @@ type
|
||||
property NameFont;
|
||||
property OnChangeBounds;
|
||||
property OnClick;
|
||||
property OnDblClick;
|
||||
property OnEnter;
|
||||
property OnExit;
|
||||
property OnKeyDown;
|
||||
@ -536,6 +561,7 @@ type
|
||||
|
||||
|
||||
AddToFavoritesPopupMenuItem: TMenuItem;
|
||||
ViewIssuesPopupMenuItem: TMenuItem;
|
||||
AvailPersistentComboBox: TComboBox;
|
||||
ComponentTree: TComponentTreeView;
|
||||
CopyPopupmenuItem: TMenuItem;
|
||||
@ -543,6 +569,13 @@ type
|
||||
DeletePopupmenuItem: TMenuItem;
|
||||
EventGrid: TOICustomPropertyGrid;
|
||||
FavouriteGrid: TOICustomPropertyGrid;
|
||||
IssuesGrid: TOICustomPropertyGrid;
|
||||
IssuesPanel: TPanel;
|
||||
IssuesInnerPanel: TPanel;
|
||||
WidgetSetsIssuesLabel: TLabel;
|
||||
WidgetSetsIssuesBox: TPaintBox;
|
||||
ComponentIssuesLabel: TLabel;
|
||||
ComponentIssuesBox: TPaintBox;
|
||||
FindDeclarationPopupmenuItem: TMenuItem;
|
||||
MainPopupMenu: TPopupMenu;
|
||||
NoteBook: TNoteBook;
|
||||
@ -562,9 +595,11 @@ type
|
||||
procedure ObjectInspectorResize(Sender: TObject);
|
||||
procedure OnGridKeyDown(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure OnGridKeyUp(Sender: TObject; var Key: Word; Shift: TShiftState);
|
||||
procedure OnGridDblClick(Sender: TObject);
|
||||
procedure OnSetDefaultPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnAddToFavoritesPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnRemoveFromFavoritesPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnViewIssuesPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnUndoPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnFindDeclarationPopupmenuItemClick(Sender: TObject);
|
||||
procedure OnCutPopupmenuItemClick(Sender: TObject);
|
||||
@ -575,14 +610,22 @@ type
|
||||
procedure OnShowOptionsPopupMenuItemClick(Sender: TObject);
|
||||
procedure OnShowComponentTreePopupMenuItemClick(Sender: TObject);
|
||||
procedure OnMainPopupMenuPopup(Sender: TObject);
|
||||
procedure IssuePageShow(Sender: TObject);
|
||||
procedure WidgetSetIssuesPaint(Sender: TObject);
|
||||
procedure ComponentIssuesPaint(Sender: TObject);
|
||||
procedure DoUpdateIssues;
|
||||
procedure DoViewIssues;
|
||||
private
|
||||
FFavourites: TOIFavouriteProperties;
|
||||
FIssues: TOIIssueProperties;
|
||||
FOnAddToFavourites: TNotifyEvent;
|
||||
FOnFindDeclarationOfProperty: TNotifyEvent;
|
||||
FOnOIKeyDown: TKeyEvent;
|
||||
FOnRemainingKeyDown: TKeyEvent;
|
||||
FOnRemainingKeyUp: TKeyEvent;
|
||||
FOnRemoveFromFavourites: TNotifyEvent;
|
||||
FOnUpdateIssues: TNotifyEvent;
|
||||
FOnViewIssues: TNotifyEvent;
|
||||
FSelection: TPersistentSelectionList;
|
||||
FComponentTreeHeight: integer;
|
||||
FDefaultItemHeight: integer;
|
||||
@ -593,18 +636,21 @@ type
|
||||
FOnSelectPersistentsInOI: TNotifyEvent;
|
||||
FOnModified: TNotifyEvent;
|
||||
FShowComponentTree: boolean;
|
||||
FShowFavouritePage: boolean;
|
||||
FShowFavorites: Boolean;
|
||||
FShowIssues: Boolean;
|
||||
FUpdateLock: integer;
|
||||
FUpdatingAvailComboBox: boolean;
|
||||
function GetGridControl(Page: TObjectInspectorPage): TOICustomPropertyGrid;
|
||||
procedure SetFavourites(const AValue: TOIFavouriteProperties);
|
||||
procedure SetShowFavouritePage(const AValue: boolean);
|
||||
procedure SetComponentTreeHeight(const AValue: integer);
|
||||
procedure SetDefaultItemHeight(const AValue: integer);
|
||||
procedure SetIssues(const AValue: TOIIssueProperties);
|
||||
procedure SetOnShowOptions(const AValue: TNotifyEvent);
|
||||
procedure SetPropertyEditorHook(NewValue: TPropertyEditorHook);
|
||||
procedure SetSelection(const ASelection: TPersistentSelectionList);
|
||||
procedure SetShowComponentTree(const AValue: boolean);
|
||||
procedure SetShowFavorites(const AValue: Boolean);
|
||||
procedure SetShowIssues(const AValue: Boolean);
|
||||
protected
|
||||
function PersistentToString(APersistent: TPersistent): string;
|
||||
procedure AddPersistentToList(APersistent: TPersistent; List: TStrings);
|
||||
@ -616,7 +662,6 @@ type
|
||||
procedure CreateSplitter;
|
||||
procedure DestroyNoteBook;
|
||||
procedure CreateNoteBook;
|
||||
procedure CreateFavouritePage;
|
||||
procedure KeyDown(var Key: Word; Shift: TShiftState); override;
|
||||
procedure KeyUp(var Key: Word; Shift: TShiftState); override;
|
||||
public
|
||||
@ -650,19 +695,23 @@ type
|
||||
write FOnRemainingKeyUp;
|
||||
property OnRemainingKeyDown: TKeyEvent read FOnRemainingKeyDown
|
||||
write FOnRemainingKeyDown;
|
||||
property OnUpdateIssues: TNotifyEvent read FOnUpdateIssues
|
||||
write FOnUpdateIssues;
|
||||
property ShowComponentTree: boolean read FShowComponentTree
|
||||
write SetShowComponentTree;
|
||||
property ShowFavorites: Boolean read FShowFavorites write SetShowFavorites;
|
||||
property ShowIssues: Boolean read FShowIssues write SetShowIssues;
|
||||
property ComponentTreeHeight: integer read FComponentTreeHeight
|
||||
write SetComponentTreeHeight;
|
||||
property ShowFavouritePage: boolean read FShowFavouritePage
|
||||
write SetShowFavouritePage;
|
||||
property GridControl[Page: TObjectInspectorPage]: TOICustomPropertyGrid
|
||||
read GetGridControl;
|
||||
property Favourites: TOIFavouriteProperties read FFavourites write SetFavourites;
|
||||
property Issues: TOIIssueProperties read FIssues write SetIssues;
|
||||
property OnAddToFavourites: TNotifyEvent read FOnAddToFavourites
|
||||
write FOnAddToFavourites;
|
||||
property OnRemoveFromFavourites: TNotifyEvent read FOnRemoveFromFavourites
|
||||
write FOnRemoveFromFavourites;
|
||||
property OnViewIssues: TNotifyEvent read FOnViewIssues write FOnViewIssues;
|
||||
property OnOIKeyDown: TKeyEvent read FOnOIKeyDown write FOnOIKeyDown;
|
||||
property OnFindDeclarationOfProperty: TNotifyEvent
|
||||
read FOnFindDeclarationOfProperty write FOnFindDeclarationOfProperty;
|
||||
@ -674,17 +723,22 @@ const
|
||||
DefaultOIPageNames: array[TObjectInspectorPage] of shortstring = (
|
||||
'PropertyPage',
|
||||
'EventPage',
|
||||
'FavouritePage'
|
||||
'FavouritePage',
|
||||
'IssuesPage'
|
||||
);
|
||||
DefaultOIGridNames: array[TObjectInspectorPage] of shortstring = (
|
||||
'PropertyGrid',
|
||||
'EventGrid',
|
||||
'FavouriteGrid'
|
||||
'FavouriteGrid',
|
||||
'IssuesGrid'
|
||||
);
|
||||
|
||||
|
||||
function CompareOIFavouriteProperties(Data1, Data2: Pointer): integer;
|
||||
|
||||
var
|
||||
WidgetSetImageList: TImageList;
|
||||
|
||||
//******************************************************************************
|
||||
|
||||
|
||||
@ -1485,15 +1539,27 @@ end;
|
||||
procedure TOICustomPropertyGrid.AddPropertyEditor(PropEditor: TPropertyEditor);
|
||||
var
|
||||
NewRow: TOIPropertyGridRow;
|
||||
WidgetSets: TLCLPlatforms;
|
||||
begin
|
||||
WidgetSets := [];
|
||||
if Favourites<>nil then begin
|
||||
//debugln('TOICustomPropertyGrid.AddPropertyEditor A ',PropEditor.GetName);
|
||||
if not Favourites.AreFavourites(Selection,PropEditor.GetName) then begin
|
||||
PropEditor.Free;
|
||||
exit;
|
||||
end;
|
||||
if Favourites is TOIIssueProperties then
|
||||
begin
|
||||
WidgetSets := (Favourites as TOIIssueProperties).AreIssues(Selection,PropEditor.GetName);
|
||||
if WidgetSets = [] then
|
||||
begin
|
||||
PropEditor.Free;
|
||||
Exit;
|
||||
end;
|
||||
end
|
||||
else
|
||||
if not Favourites.AreFavourites(Selection,PropEditor.GetName) then begin
|
||||
PropEditor.Free;
|
||||
exit;
|
||||
end;
|
||||
end;
|
||||
NewRow:=TOIPropertyGridRow.Create(Self,PropEditor,nil);
|
||||
NewRow:=TOIPropertyGridRow.Create(Self,PropEditor,nil, WidgetSets);
|
||||
FRows.Add(NewRow);
|
||||
if FRows.Count>1 then begin
|
||||
NewRow.FPriorBrother:=Rows[FRows.Count-2];
|
||||
@ -1594,7 +1660,7 @@ procedure TOICustomPropertyGrid.AddSubEditor(PropEditor:TPropertyEditor);
|
||||
var NewRow:TOIPropertyGridRow;
|
||||
NewIndex:integer;
|
||||
begin
|
||||
NewRow:=TOIPropertyGridRow.Create(Self,PropEditor,FExpandingRow);
|
||||
NewRow:=TOIPropertyGridRow.Create(Self,PropEditor,FExpandingRow, []);
|
||||
NewIndex:=FExpandingRow.Index+1+FExpandingRow.ChildCount;
|
||||
FRows.Insert(NewIndex,NewRow);
|
||||
if NewIndex<FItemIndex
|
||||
@ -2098,6 +2164,8 @@ var
|
||||
CurRow:TOIPropertyGridRow;
|
||||
DrawState:TPropEditDrawState;
|
||||
OldFont:TFont;
|
||||
Platform: TLCLPlatform;
|
||||
X, Y: Integer;
|
||||
|
||||
procedure DrawTreeIcon(x,y:integer;Plus:boolean);
|
||||
begin
|
||||
@ -2172,6 +2240,22 @@ begin
|
||||
Font.Color := GetPropNameColor(CurRow);
|
||||
CurRow.Editor.PropDrawName(Canvas,NameTextRect,DrawState);
|
||||
Font:=OldFont;
|
||||
|
||||
// draw widgetsets
|
||||
X := NameRect.Right - 2;
|
||||
Y := (NameRect.Top + NameRect.Bottom - WidgetSetImageList.Height) div 2;
|
||||
OldFont:=Font;
|
||||
Font:=FNameFont;
|
||||
Font.Color := clRed;
|
||||
for Platform := High(TLCLPlatform) downto Low(TLCLPlatform) do
|
||||
begin
|
||||
if Platform in CurRow.FWidgetSets then
|
||||
begin
|
||||
Dec(X, WidgetSetImageList.Width);
|
||||
WidgetSetImageList.Draw(Canvas, X, Y, Integer(Platform));
|
||||
end;
|
||||
end;
|
||||
Font:=OldFont;
|
||||
|
||||
// draw value
|
||||
if ARow<>ItemIndex
|
||||
@ -2657,7 +2741,7 @@ end;
|
||||
{ TOIPropertyGridRow }
|
||||
|
||||
constructor TOIPropertyGridRow.Create(PropertyTree: TOICustomPropertyGrid;
|
||||
PropEditor:TPropertyEditor; ParentNode:TOIPropertyGridRow);
|
||||
PropEditor:TPropertyEditor; ParentNode:TOIPropertyGridRow; WidgetSets: TLCLPlatforms);
|
||||
begin
|
||||
inherited Create;
|
||||
// tree pointer
|
||||
@ -2678,6 +2762,7 @@ begin
|
||||
FHeight:=FTree.DefaultItemHeight;
|
||||
Index:=-1;
|
||||
LastPaintedValue:='';
|
||||
FWidgetSets := WidgetSets;
|
||||
end;
|
||||
|
||||
destructor TOIPropertyGridRow.Destroy;
|
||||
@ -3099,6 +3184,8 @@ constructor TObjectInspectorDlg.Create(AnOwner: TComponent);
|
||||
MainPopupMenu.Items.Add(NewMenuItem);
|
||||
end;
|
||||
|
||||
var
|
||||
P: TLCLPlatform;
|
||||
begin
|
||||
inherited Create(AnOwner);
|
||||
FPropertyEditorHook:=nil;
|
||||
@ -3107,7 +3194,21 @@ begin
|
||||
FDefaultItemHeight := 22;
|
||||
FComponentTreeHeight:=100;
|
||||
FShowComponentTree:=true;
|
||||
FShowFavouritePage:=false;
|
||||
FShowFavorites := False;
|
||||
FShowIssues := False;
|
||||
|
||||
WidgetSetImageList := TImageList.Create(Self);
|
||||
WidgetSetImageList.Width := 16;
|
||||
WidgetSetImageList.Height := 16;
|
||||
|
||||
WidgetSetImageList.AddLazarusResource('issue_gtk');
|
||||
WidgetSetImageList.AddLazarusResource('issue_gtk2');
|
||||
WidgetSetImageList.AddLazarusResource('issue_win32');
|
||||
WidgetSetImageList.AddLazarusResource('issue_wince');
|
||||
WidgetSetImageList.AddLazarusResource('issue_carbon');
|
||||
WidgetSetImageList.AddLazarusResource('issue_qt');
|
||||
WidgetSetImageList.AddLazarusResource('issue_fpgui');
|
||||
WidgetSetImageList.AddLazarusResource('issue_nogui');
|
||||
|
||||
Caption := oisObjectInspector;
|
||||
StatusBar.SimpleText:=oisAll;
|
||||
@ -3124,6 +3225,9 @@ begin
|
||||
'RemoveFromFavoritesPopupMenuItem',
|
||||
oisRemovefromfavorites,'Remove property from favorites properties', '',
|
||||
@OnRemoveFromFavoritesPopupmenuItemClick,false,true,true);
|
||||
AddPopupMenuItem(ViewIssuesPopupMenuItem,nil,'ViewIssuesPopupMenuItem',
|
||||
oisViewIssues,'View issue descriptions', '',
|
||||
@OnViewIssuesPopupmenuItemClick,false,true,true);
|
||||
AddPopupMenuItem(UndoPropertyPopupMenuItem,nil,'UndoPropertyPopupMenuItem',
|
||||
oisUndo,'Set property value to last valid value', '',
|
||||
@OnUndoPopupmenuItemClick,false,true,true);
|
||||
@ -3251,6 +3355,14 @@ begin
|
||||
RebuildPropertyLists;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.SetIssues(const AValue: TOIIssueProperties);
|
||||
begin
|
||||
if FIssues = AValue then exit;
|
||||
//DebugLn('TObjectInspectorDlg.SetIssues Count: ', DbgS(AValue.Count));
|
||||
FIssues := AValue;
|
||||
IssuesGrid.Favourites := FIssues;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.SetOnShowOptions(const AValue: TNotifyEvent);
|
||||
begin
|
||||
if FOnShowOptions=AValue then exit;
|
||||
@ -3353,6 +3465,7 @@ begin
|
||||
0: Result:=PropertyGrid;
|
||||
1: Result:=EventGrid;
|
||||
2: Result:=FavouriteGrid;
|
||||
3: Result:=IssuesGrid;
|
||||
end;
|
||||
end;
|
||||
|
||||
@ -3400,6 +3513,15 @@ procedure TObjectInspectorDlg.RefreshSelection;
|
||||
var
|
||||
Page: TObjectInspectorPage;
|
||||
begin
|
||||
if NoteBook.Page[3].Visible then
|
||||
begin
|
||||
DoUpdateIssues;
|
||||
|
||||
// invalidate issues
|
||||
WidgetSetsIssuesBox.Invalidate;
|
||||
ComponentIssuesBox.Invalidate;
|
||||
end;
|
||||
|
||||
for Page:=Low(TObjectInspectorPage) to High(TObjectInspectorPage) do
|
||||
if GridControl[Page]<>nil then
|
||||
GridControl[Page].Selection := FSelection;
|
||||
@ -3502,6 +3624,11 @@ begin
|
||||
if Assigned(OnRemainingKeyUp) then OnRemainingKeyUp(Self,Key,Shift);
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.OnGridDblClick(Sender: TObject);
|
||||
begin
|
||||
DoViewIssues;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.OnSetDefaultPopupmenuItemClick(Sender: TObject);
|
||||
var
|
||||
CurGrid: TOICustomPropertyGrid;
|
||||
@ -3526,6 +3653,11 @@ begin
|
||||
if Assigned(OnRemoveFromFavourites) then OnRemoveFromFavourites(Self);
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.OnViewIssuesPopupmenuItemClick(Sender: TObject);
|
||||
begin
|
||||
DoViewIssues;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.OnUndoPopupmenuItemClick(Sender: TObject);
|
||||
var
|
||||
CurGrid: TOICustomPropertyGrid;
|
||||
@ -3659,6 +3791,111 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.SetShowFavorites(const AValue: Boolean);
|
||||
begin
|
||||
if FShowFavorites = AValue then exit;
|
||||
FShowFavorites := AValue;
|
||||
NoteBook.Page[2].TabVisible := AValue;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.SetShowIssues(const AValue: Boolean);
|
||||
begin
|
||||
if FShowIssues = AValue then exit;
|
||||
FShowIssues := AValue;
|
||||
NoteBook.Page[3].TabVisible := AValue;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.IssuePageShow(Sender: TObject);
|
||||
begin
|
||||
//DebugLn('IssuePageShow');
|
||||
DoUpdateIssues;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.WidgetSetIssuesPaint(Sender: TObject);
|
||||
var
|
||||
X, Y, I: Integer;
|
||||
S: TSize;
|
||||
Platform: TLCLPlatform;
|
||||
None: Boolean;
|
||||
begin
|
||||
if Issues = nil then Exit;
|
||||
|
||||
X := 0;
|
||||
Y := (WidgetSetsIssuesBox.Height - WidgetSetImageList.Height) div 2;
|
||||
None := True;
|
||||
for Platform := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
begin
|
||||
if Issues.WidgetSetIssues[Platform] > 0 then
|
||||
begin
|
||||
None := False;
|
||||
WidgetSetImageList.Draw(WidgetSetsIssuesBox.Canvas, X, Y, Integer(Platform));
|
||||
Inc(X, 16);
|
||||
|
||||
S := WidgetSetsIssuesBox.Canvas.TextExtent(IntToStr(Issues.WidgetSetIssues[Platform]));
|
||||
WidgetSetsIssuesBox.Canvas.TextOut(X, (WidgetSetsIssuesBox.Height - S.CY) div 2,
|
||||
IntToStr(Issues.WidgetSetIssues[Platform]));
|
||||
Inc(X, S.CX);
|
||||
end;
|
||||
end;
|
||||
|
||||
if None then
|
||||
begin
|
||||
S := WidgetSetsIssuesBox.Canvas.TextExtent(oisNone);
|
||||
WidgetSetsIssuesBox.Canvas.TextOut(4, (WidgetSetsIssuesBox.Height - S.CY) div 2, oisNone);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.ComponentIssuesPaint(Sender: TObject);
|
||||
var
|
||||
X, Y, I, J: Integer;
|
||||
S: TSize;
|
||||
Platform: TLCLPlatform;
|
||||
WidgetSetIssues: Array [TLCLPlatform] of Integer;
|
||||
None: Boolean;
|
||||
begin
|
||||
for Platform := Low(TLCLPlatform) to High(TLCLPlatform) do WidgetSetIssues[Platform] := 0;
|
||||
|
||||
if Issues = nil then Exit;
|
||||
if Selection = nil then Exit;
|
||||
|
||||
for I := 0 to Issues.Count - 1 do
|
||||
begin
|
||||
for J := 0 to Selection.Count - 1 do
|
||||
begin
|
||||
if (Issues.Items[I] is TOIIssueProperty) and
|
||||
Selection[J].ClassType.InheritsFrom(Issues.Items[I].BaseClass) and
|
||||
(Issues.Items[I].PropertyName = '') then
|
||||
for Platform := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
if Platform in (Issues.Items[I] as TOIIssueProperty).WidgetSets then
|
||||
Inc(WidgetSetIssues[Platform]);
|
||||
end;
|
||||
end;
|
||||
|
||||
X := 0;
|
||||
Y := (ComponentIssuesBox.Height - WidgetSetImageList.Height) div 2;
|
||||
None := True;
|
||||
for Platform := Low(TLCLPlatform) to High(TLCLPlatform) do
|
||||
begin
|
||||
if WidgetSetIssues[Platform] > 0 then
|
||||
begin
|
||||
None := False;
|
||||
WidgetSetImageList.Draw(ComponentIssuesBox.Canvas, X, Y, Integer(Platform));
|
||||
Inc(X, 16);
|
||||
|
||||
S := ComponentIssuesBox.Canvas.TextExtent(IntToStr(WidgetSetIssues[Platform]));
|
||||
ComponentIssuesBox.Canvas.TextOut(X, (ComponentIssuesBox.Height - S.CY) div 2,
|
||||
IntToStr(WidgetSetIssues[Platform]));
|
||||
Inc(X, S.CX);
|
||||
end;
|
||||
end;
|
||||
|
||||
if None then
|
||||
begin
|
||||
S := ComponentIssuesBox.Canvas.TextExtent(oisNone);
|
||||
ComponentIssuesBox.Canvas.TextOut(4, (ComponentIssuesBox.Height - S.CY) div 2, oisNone);
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.CreateSplitter;
|
||||
begin
|
||||
// vertical splitter between component tree and notebook
|
||||
@ -3679,6 +3916,7 @@ begin
|
||||
FreeAndNil(PropertyGrid);
|
||||
FreeAndNil(EventGrid);
|
||||
FreeAndNil(FavouriteGrid);
|
||||
FreeAndNil(IssuesGrid);
|
||||
FreeAndNil(NoteBook);
|
||||
end;
|
||||
|
||||
@ -3697,8 +3935,19 @@ begin
|
||||
else
|
||||
Pages.Add(oisProperties);
|
||||
Page[0].Name:=DefaultOIPageNames[oipgpProperties];
|
||||
|
||||
Pages.Add(oisEvents);
|
||||
Page[1].Name:=DefaultOIPageNames[oipgpEvents];
|
||||
|
||||
Pages.Add(oisFavorites);
|
||||
Page[2].Name:=DefaultOIPageNames[oipgpFavourite];
|
||||
Page[2].TabVisible := ShowFavorites;
|
||||
|
||||
Pages.Add(oisIssues);
|
||||
Page[3].Name:=DefaultOIPageNames[oipgpIssues];
|
||||
Page[3].TabVisible := ShowIssues;
|
||||
Page[3].OnShow := @IssuePageShow;
|
||||
|
||||
PageIndex:=0;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
end;
|
||||
@ -3712,13 +3961,15 @@ begin
|
||||
FDefaultItemHeight);
|
||||
with PropertyGrid do begin
|
||||
Name:=DefaultOIGridNames[oipgpProperties];
|
||||
Parent:=NoteBook.Page[0];
|
||||
Selection:=Self.FSelection;
|
||||
Align:=alClient;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
OnModified:=@OnGridModified;
|
||||
OnOIKeyDown:=@OnGridKeyDown;
|
||||
OnKeyUp:=@OnGridKeyUp;
|
||||
OnDblClick:=@OnGridDblClick;
|
||||
|
||||
Parent:=NoteBook.Page[0];
|
||||
end;
|
||||
|
||||
// event grid
|
||||
@ -3726,57 +3977,114 @@ begin
|
||||
[tkMethod],FDefaultItemHeight);
|
||||
with EventGrid do begin
|
||||
Name:=DefaultOIGridNames[oipgpEvents];
|
||||
Parent:=NoteBook.Page[1];
|
||||
Selection:=Self.FSelection;
|
||||
Align:=alClient;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
OnModified:=@OnGridModified;
|
||||
OnOIKeyDown:=@OnGridKeyDown;
|
||||
OnKeyUp:=@OnGridKeyUp;
|
||||
OnDblClick:=@OnGridDblClick;
|
||||
|
||||
Parent:=NoteBook.Page[1];
|
||||
end;
|
||||
|
||||
CreateFavouritePage;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.CreateFavouritePage;
|
||||
var
|
||||
NewPage: TPage;
|
||||
i: LongInt;
|
||||
begin
|
||||
if FShowFavouritePage then begin
|
||||
if FavouriteGrid=nil then begin
|
||||
// create favourite page
|
||||
NoteBook.Pages.Add(oisFavorites);
|
||||
NewPage:=NoteBook.Page[NoteBook.PageCount-1];
|
||||
NewPage.Name:=DefaultOIPageNames[oipgpFavourite];
|
||||
|
||||
// create favourite property grid
|
||||
FavouriteGrid:=TOICustomPropertyGrid.CreateWithParams(Self,PropertyEditorHook
|
||||
,[tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod
|
||||
, tkSString, tkLString, tkAString, tkWString, tkVariant
|
||||
{, tkArray, tkRecord, tkInterface}, tkClass, tkObject, tkWChar, tkBool
|
||||
, tkInt64, tkQWord],
|
||||
FDefaultItemHeight);
|
||||
with FavouriteGrid do begin
|
||||
Name:=DefaultOIGridNames[oipgpFavourite];
|
||||
Parent:=NewPage;
|
||||
Selection:=Self.FSelection;
|
||||
Align:=alClient;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
OnModified:=@OnGridModified;
|
||||
OnKeyUp:=@OnGridKeyUp;
|
||||
end;
|
||||
FavouriteGrid.Favourites:=FFavourites;
|
||||
end;
|
||||
end else begin
|
||||
if FavouriteGrid<>nil then begin
|
||||
// free and remove favourite page
|
||||
i:=NoteBook.PageList.IndexOf(FavouriteGrid.Parent);
|
||||
FreeAndNil(FavouriteGrid);
|
||||
if i>=0 then
|
||||
NoteBook.Pages.Delete(i);
|
||||
end;
|
||||
|
||||
// favourite grid
|
||||
FavouriteGrid:=TOICustomPropertyGrid.CreateWithParams(Self,PropertyEditorHook
|
||||
,[tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod
|
||||
, tkSString, tkLString, tkAString, tkWString, tkVariant
|
||||
{, tkArray, tkRecord, tkInterface}, tkClass, tkObject, tkWChar, tkBool
|
||||
, tkInt64, tkQWord],
|
||||
FDefaultItemHeight);
|
||||
with FavouriteGrid do begin
|
||||
Name:=DefaultOIGridNames[oipgpFavourite];
|
||||
Selection:=Self.FSelection;
|
||||
Align:=alClient;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
OnModified:=@OnGridModified;
|
||||
OnKeyUp:=@OnGridKeyUp;
|
||||
OnDblClick:=@OnGridDblClick;
|
||||
|
||||
Parent:=NoteBook.Page[2];
|
||||
end;
|
||||
FavouriteGrid.Favourites:=FFavourites;
|
||||
|
||||
// issues grid
|
||||
IssuesGrid:=TOICustomPropertyGrid.CreateWithParams(Self,PropertyEditorHook,
|
||||
[tkUnknown, tkInteger, tkChar, tkEnumeration, tkFloat, tkSet, tkMethod
|
||||
, tkSString, tkLString, tkAString, tkWString, tkVariant
|
||||
{, tkArray, tkRecord, tkInterface}, tkClass, tkObject, tkWChar, tkBool
|
||||
, tkInt64, tkQWord],FDefaultItemHeight);
|
||||
with IssuesGrid do begin
|
||||
Name:=DefaultOIGridNames[oipgpIssues];
|
||||
Selection:=Self.FSelection;
|
||||
Align:=alClient;
|
||||
PopupMenu:=MainPopupMenu;
|
||||
OnModified:=@OnGridModified;
|
||||
OnOIKeyDown:=@OnGridKeyDown;
|
||||
OnKeyUp:=@OnGridKeyUp;
|
||||
OnDblClick:=@OnGridDblClick;
|
||||
|
||||
Parent:=NoteBook.Page[3];
|
||||
end;
|
||||
|
||||
IssuesPanel := TPanel.Create(Self);
|
||||
with IssuesPanel do
|
||||
begin
|
||||
Align := alTop;
|
||||
BevelOuter := bvNone;
|
||||
Parent := NoteBook.Page[3];
|
||||
end;
|
||||
|
||||
IssuesInnerPanel := TPanel.Create(Self);
|
||||
with IssuesInnerPanel do
|
||||
begin
|
||||
BevelOuter := bvNone;
|
||||
BorderSpacing.Around := 6;
|
||||
Parent := IssuesPanel;
|
||||
end;
|
||||
|
||||
WidgetSetsIssuesLabel := TLabel.Create(Self);
|
||||
with WidgetSetsIssuesLabel do
|
||||
begin
|
||||
Caption := oisWidgetSetIssues;
|
||||
Top := 1;
|
||||
Align := alTop;
|
||||
AutoSize := True;
|
||||
Parent := IssuesInnerPanel;
|
||||
end;
|
||||
|
||||
WidgetSetsIssuesBox := TPaintBox.Create(Self);
|
||||
with WidgetSetsIssuesBox do
|
||||
begin
|
||||
Top := 2;
|
||||
Align := alTop;
|
||||
Height := 24;
|
||||
OnPaint := @WidgetSetIssuesPaint;
|
||||
Parent := IssuesInnerPanel;
|
||||
end;
|
||||
|
||||
ComponentIssuesLabel := TLabel.Create(Self);
|
||||
with ComponentIssuesLabel do
|
||||
begin
|
||||
Caption := oisComponentIssues;
|
||||
Top := 3;
|
||||
Align := alTop;
|
||||
AutoSize := True;
|
||||
Parent := IssuesInnerPanel;
|
||||
end;
|
||||
|
||||
ComponentIssuesBox := TPaintBox.Create(Self);
|
||||
with ComponentIssuesBox do
|
||||
begin
|
||||
Top := 4;
|
||||
Align := alTop;
|
||||
Height := 24;
|
||||
OnPaint := @ComponentIssuesPaint;
|
||||
Parent := IssuesInnerPanel;
|
||||
end;
|
||||
|
||||
IssuesInnerPanel.AutoSize := True;
|
||||
IssuesPanel.AutoSize := True;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.KeyDown(var Key: Word; Shift: TShiftState);
|
||||
@ -3832,12 +4140,10 @@ begin
|
||||
else
|
||||
SetDefaultPopupMenuItem.Caption:=oisSetToDefaultValue;
|
||||
|
||||
AddToFavoritesPopupMenuItem.Visible:=(Favourites<>nil)
|
||||
and ShowFavouritePage
|
||||
AddToFavoritesPopupMenuItem.Visible:=(Favourites<>nil) and ShowFavorites
|
||||
and (GetActivePropertyGrid<>FavouriteGrid)
|
||||
and Assigned(OnAddToFavourites) and (GetActivePropertyRow<>nil);
|
||||
RemoveFromFavoritesPopupMenuItem.Visible:=(Favourites<>nil)
|
||||
and ShowFavouritePage
|
||||
RemoveFromFavoritesPopupMenuItem.Visible:=(Favourites<>nil) and ShowFavorites
|
||||
and (GetActivePropertyGrid=FavouriteGrid)
|
||||
and Assigned(OnRemoveFromFavourites) and (GetActivePropertyRow<>nil);
|
||||
|
||||
@ -3864,24 +4170,28 @@ begin
|
||||
end;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.DoUpdateIssues;
|
||||
begin
|
||||
if Assigned(FOnUpdateIssues) then FOnUpdateIssues(Self);
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.DoViewIssues;
|
||||
begin
|
||||
if Assigned(FOnViewIssues) then FOnViewIssues(Self);
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.HookRefreshPropertyValues;
|
||||
begin
|
||||
RefreshPropertyValues;
|
||||
end;
|
||||
|
||||
procedure TObjectInspectorDlg.SetShowFavouritePage(const AValue: boolean);
|
||||
begin
|
||||
if FShowFavouritePage=AValue then exit;
|
||||
FShowFavouritePage:=AValue;
|
||||
CreateFavouritePage;
|
||||
end;
|
||||
|
||||
function TObjectInspectorDlg.GetGridControl(Page: TObjectInspectorPage
|
||||
): TOICustomPropertyGrid;
|
||||
begin
|
||||
case Page of
|
||||
oipgpFavourite: Result:=FavouriteGrid;
|
||||
oipgpEvents: Result:=EventGrid;
|
||||
oipgpIssues: Result:=IssuesGrid;
|
||||
else Result:=PropertyGrid;
|
||||
end;
|
||||
end;
|
||||
@ -3891,8 +4201,7 @@ begin
|
||||
//debugln('TObjectInspectorDlg.SetFavourites ',dbgsName(Self));
|
||||
if FFavourites=AValue then exit;
|
||||
FFavourites:=AValue;
|
||||
if FavouriteGrid<>nil then
|
||||
FavouriteGrid.Favourites:=FFavourites;
|
||||
FavouriteGrid.Favourites:=FFavourites;
|
||||
end;
|
||||
|
||||
{ TCustomPropertiesGrid }
|
||||
@ -4412,8 +4721,65 @@ begin
|
||||
+' BaseClass='+dbgsName(BaseClass);
|
||||
end;
|
||||
|
||||
{ TOIIssueProperty }
|
||||
|
||||
function TOIIssueProperty.IsIssue(AClass: TPersistentClass; const APropertyName: string): TLCLPlatforms;
|
||||
begin
|
||||
//DebugLn('IsIssue ', AClass.ClassName, ' ?= ', BaseClass.ClassName, ' ', APropertyName, ' ?= ', PropertyName);
|
||||
Result := [];
|
||||
if (CompareText(PropertyName,APropertyName) = 0)
|
||||
and (AClass.InheritsFrom(BaseClass)) then Result := WidgetSets;
|
||||
end;
|
||||
|
||||
|
||||
{ TOIIssueProperties }
|
||||
|
||||
constructor TOIIssueProperties.Create;
|
||||
var
|
||||
P: TLCLPlatform;
|
||||
begin
|
||||
inherited Create;
|
||||
|
||||
for P := Low(TLCLPlatform) to High(TLCLPlatform) do WidgetSetIssues[P] := 0;
|
||||
end;
|
||||
|
||||
function TOIIssueProperties.IsIssue(AClass: TPersistentClass;
|
||||
const PropertyName: string): TLCLPlatforms;
|
||||
var
|
||||
I: Integer;
|
||||
CurItem: TOIIssueProperty;
|
||||
begin
|
||||
Result := [];
|
||||
if (AClass=nil) or (PropertyName='') then Exit;
|
||||
for I := 0 to Count - 1 do
|
||||
begin
|
||||
if not (Items[I] is TOIIssueProperty) then Continue;
|
||||
CurItem:=Items[I] as TOIIssueProperty;
|
||||
Result := Result + CurItem.IsIssue(AClass,PropertyName);
|
||||
end;
|
||||
end;
|
||||
|
||||
function TOIIssueProperties.AreIssues(Selection: TPersistentSelectionList;
|
||||
const PropertyName: string): TLCLPlatforms;
|
||||
var
|
||||
I: Integer;
|
||||
begin
|
||||
Result := [];
|
||||
if Selection = nil then Exit;
|
||||
for i:=0 to Selection.Count-1 do
|
||||
begin
|
||||
Result := Result + IsIssue(TPersistentClass(Selection[i].ClassType), PropertyName);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
initialization
|
||||
{$I objectinspector.lrs}
|
||||
|
||||
finalization
|
||||
|
||||
|
||||
|
||||
end.
|
||||
|
||||
|
@ -44,11 +44,17 @@ resourcestring
|
||||
oisProperties='Properties';
|
||||
oisEvents='Events';
|
||||
oisFavorites = 'Favorites';
|
||||
oisIssues = 'Issues';
|
||||
|
||||
oisWidgetSetIssues = 'General Widget Set issues: ';
|
||||
oisComponentIssues = 'Component issues: ';
|
||||
|
||||
|
||||
//Object Inspector Popup Menu
|
||||
oisSetToDefault = 'Set to default: %s';
|
||||
oisSetToDefaultValue = 'Set to default value';
|
||||
oisAddToFavorites = 'Add to Favorites';
|
||||
oisViewIssues = 'View issues';
|
||||
oisRemoveFromFavorites = 'Remove from Favorites';
|
||||
oisUndo = 'Undo';
|
||||
oisFinddeclaration = 'Jump to declaration';
|
||||
|
@ -2025,6 +2025,38 @@ LazarusResources.Add('menu_search_find_previous','PNG',[
|
||||
+#241#223#159#233#159#3'~'#2'q'#11#242'~'#250#239'S'#193#0#0#0#0'IEND'#174'B`'
|
||||
+#130
|
||||
]);
|
||||
LazarusResources.Add('menu_search_jumpback','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#4'gAMA'#0#0#175#200'7'#5#138#233#0#0#0#25'tEXtSoftware'#0'Adobe Image'
|
||||
+'Readyq'#201'e<'#0#0#0#235'IDAT8'#203'c'#252#255#255'?'#3'%'#128#137#129'B0'
|
||||
+#200#12'(='#145#201#6#196#187'I1'#128#5#141''#245#239#159#191'2'#164#24#192
|
||||
+#8#139#5#160#205#23#197#217'$'#244#254#252#249#195#240#240#253'C'#134'_?3'
|
||||
+#252#250#1#194#191#24'~'#2'1'#152#254#142'`'#131#228'.'#244'_ed'#129'j>)'#198
|
||||
+'*'#174#167#192#173#196#240#231#223#31#6#25'n90'#253#251#239'_ '#254#205#240
|
||||
+#251#31#16#255#253#3#21#3#209#191#25'V'#175'\'#139#240#2#208#217#191#255'0'
|
||||
+#254'a'#248#245#247#23'X'#209#31#160#162#223'`'#197#191#17'4'#212#0#144#220
|
||||
+#159#255'@'#177'_P'#189#144#185'3'#238#188'0'#155#136#1#7'3'''#195#195#151
|
||||
+#15#25'^'#191''#131#213#217' '#175#129'4'#255#249#253#135#225#254#194'G'#140
|
||||
+#140#200')1vU'#200'M'#160'B9'#160#6#199#13'i;N'#144#28#141'@'#205#186'@'#205
|
||||
+#7#137#213#140#226#133#17#156#23#0#227#161#187#188'zZ'#211#201#0#0#0#0'IEND'
|
||||
+#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('menu_search_jumpforward','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#4'gAMA'#0#0#175#200'7'#5#138#233#0#0#0#25'tEXtSoftware'#0'Adobe Image'
|
||||
+'Readyq'#201'e<'#0#0#0#239'IDAT8'#203'c'#252#255#255'?'#3'%'#128#137#129'B0'
|
||||
+#196#12#8#152#229#177#219'k'#146#19#27#217#6#252#250#241#203#230#231#247'_W'
|
||||
+#145#197#24'A'#177'Pz"'#19#28#21''#255#252'e'#248#243#251#15#195#239'_'#24
|
||||
+'~'#253#252#13#212#0#194#191#24'~'#2'1'#136#150#20#146'd'#248#245#235'7'#195
|
||||
+#205#219#183'.'#157'j'#191#160#15#210#195#2'3'#201'J'#216#150#225#239'?'#160
|
||||
+#1#255#254#192#241#239#191''#129#248'7'#195#239'@'#252#23'&'#246#135#225
|
||||
+#203#151#175'zZYj'''#175'M'#187'e'#206#2#179#25#164#16#174#25#168#232'7X'#241
|
||||
+'o'#4#253#23'!'#247#235#247'o'#144'+'#195']'#0'r'#246#254#135'{'#177':'#27
|
||||
+#232'g0'#155#139#131#139'ARR'#138#225#245#171#215#12#183'o'#220#189'p{'#206
|
||||
+'='#27'x'#24#16#3#12#10#181'-'#128#22#236#7#218#252#8#168'Y'#157#228'X'#184
|
||||
+#208''#245#4'P'#243'A'#160'ku1ba'#132#231#5#0#8#231#192'7'#221'l'#172#208#0
|
||||
+#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('menu_search_openfile_atcursor','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167#147#0#0#0#9'pHYs'#0#0#11#19#0#0
|
||||
@ -3796,6 +3828,24 @@ LazarusResources.Add('pkg_include','PNG',[
|
||||
+'@'#8'T'#26'J%'#24#29'h'#225'7'#152#189#8#166#129's:'#223#0#0#0#0'IEND'#174
|
||||
+'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('pkg_issues','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15'/'#15'F'#158#213#221#0#0#1#15'IDAT8'#203#165#147'=N'#195'@'#16'F'#223
|
||||
+#174#18'!'#176#147#2'E'#8#16#13#238#184'@D'#210'S'#208#164#162#224#28#230#2
|
||||
+#244#160'T'#220#1#154#156#0#209' '#148'"e'#14'@'#135#168'P'#4#200#18'?'#206
|
||||
+#14#133#217#216'1'#19'00'#205'l'#177#243#246#219#183'Z#'#8#255#169#154'_'#156
|
||||
+'\#'#225'2'#8' '#158'i@'#28'X'#11#175'o'#240#248#4#199#251#152'"'#192#248#4
|
||||
+#231'c'#164#183#179#248#164#251'g'#184#185#133#135#9#28#237#229#16#235#23'i'
|
||||
+#233'&'#193'hHpx@0'#26#2#176#209#128#206'6'#172#173#194#233'U~'#239#25'@'#202
|
||||
+'*'#250'}'#136#227#172''#214'V'#19'v#'#8'W'#242'm9'#160#162#180#205#16#150
|
||||
+#234#10#224'We'#170'$'#240#241#227#248#203#188's'#10#192#165#165']Q'#4#131'A'
|
||||
+#214#191#1#212#22'%HZ'#235#240#174#155')'#10#183#26'U{'#198#185#4#169'&'#209
|
||||
+#253#252#140#179#4'SM'#162#171'.Q4'#7#148'$&'#237'.\tU'#7#214'('#128#187#9
|
||||
+#156']'#194#180#232'M2'#185#198#204#15'''/'#202'g'#250'k}'#0#253#25']'#217
|
||||
+#178#133#178#248#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('pkg_lfm','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
@ -4095,3 +4145,211 @@ LazarusResources.Add('pkg_unit','PNG',[
|
||||
+#197#253#133#141#211#132'P'#20'%"'#221#185']'#244#237#154'Ap'#134#251#151#146
|
||||
+'u'#200#25#225'_'#242#5#8#232#174'n'#143'I'#162'F'#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_carbon','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15'+*i'#246#196#158#0#0#1'}IDAT8'#203#181'S;N'#195'@'#16'}'#131','#199
|
||||
+#182#18#23'Q'#228'6eZ'#31'!'#13'4)A2'#185'A'#14#0'''!'#130#14#10#190#5#134#22
|
||||
+'J'#142#16')J'#153'&'#137#146'&'#138#180#246'*N'#214#222#161'@X|b>B'#204'j5'
|
||||
+#218#157#207#190#157'7C'#12#198'_d'#235'''N'#143#15#143#220'='#234'n~'#137
|
||||
+#191'Ya'#24'r'#167#211#225'"'#251#183#8'&'#147#9#130' ('#180#211#199#26#220
|
||||
+'\'#223#240'x<F'#150'ep]'#23#158#231'a:'#157'b0'#24' '#142'c03'#206'/'#206
|
||||
+#233#213#223'x'#27'|xp'#200#241'S'#12#199'q`'#154'&'#132#16#24#141'F'#208'Z'
|
||||
+#163'T*AJ'#137'r'#185#188#185#136'W'#151'W<'#155#205#224#186'.l'#219#134'a'
|
||||
+#188#228#214'Zc'#181'Z!'#138'"H)q|rL'#27#19#244'z='#216#182#253'k'#26#141#143
|
||||
+#23'i'#154'"M'#211#23#134#152#161#181#206#207#150'e'#21#247'A'#189'^'#135#16
|
||||
+#2#243#249#28'Q'#20'A)'#5'"'#130'a'#24#249'VJ'#225#254#238#158#11'Y'#216#217
|
||||
+#222#225'j'#181#10#199'q`Y'#22'L'#211#204'Q%I'#2')%'#150#203'%'#218#237'6'
|
||||
+#130#253#128'>}'#193#247'}'#244#251#253#188#128#175#208#179',C'#146'$X'#175
|
||||
+#215'X,'#22#24#14#135#197'}'#176#183#187#199'B'#8'T*'#21#16#17#152'9'#215'J)'
|
||||
+#212'j5'#156#158#157'R'#225','#220#134#183#212'h4@Dh6'#155#8#239'Bj'#181'Z'
|
||||
+#240'<'#15#190#239#191#11#222#136#224'_'#166#241'+y'#6#208#147#207'e\\'#131
|
||||
+#16#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_fpgui','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#0#0#0#0#0#249'C'#187''#0#0#0
|
||||
+#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2#14#14'++x'
|
||||
+#244'9'#146#0#0#0#154'IDAT8'#203'c'#252#255#255'?'#3'%'#128#137#129'B@'#177#1
|
||||
+','#200#28#198#181#247'?3l'#152#193#198#192#192#192#240'q'';cl'#249'O'#6#6#6
|
||||
+#6#134#128#140'_'#255#131#21'y'#177#154#240#255#255'8f'#136')'#251#137#139
|
||||
+#143'.'#7#195#212#15#3#198#216#242#159#140'k'#239'F'#231#255'_'#220#201'N0'
|
||||
+#12'`~'#199#199#167'z,`'#4#10#195#154'{'#159#25'b'#202'~'#194#2#13#23#13#195
|
||||
+#24'^`'#216'0'#131#141#144#179#137#242#2'<'#13#144'l@@'#198'/'#198#216#242
|
||||
+#159#12#1#25#191#176#242#209'-'#26#250#153#9#0'`/'#133#143#208#5'('#20#0#0#0
|
||||
+#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_carbon','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15'+*i'#246#196#158#0#0#1'}IDAT8'#203#181'S;N'#195'@'#16'}'#131','#199
|
||||
+#182#18#23'Q'#228'6eZ'#31'!'#13'4)A2'#185'A'#14#0'''!'#130#14#10#190#5#134#22
|
||||
+'J'#142#16')J'#153'&'#137#146'&'#138#180#246'*N'#214#222#161'@X|b>B'#204'j5'
|
||||
+#218#157#207#190#157'7C'#12#198'_d'#235'''N'#143#15#143#220'='#234'n~'#137
|
||||
+#191'Ya'#24'r'#167#211#225'"'#251#183#8'&'#147#9#130' ('#180#211#199#26#220
|
||||
+'\'#223#240'x<F'#150'ep]'#23#158#231'a:'#157'b0'#24' '#142'c03'#206'/'#206
|
||||
+#233#213#223'x'#27'|xp'#200#241'S'#12#199'q`'#154'&'#132#16#24#141'F'#208'Z'
|
||||
+#163'T*AJ'#137'r'#185#188#185#136'W'#151'W<'#155#205#224#186'.l'#219#134'a'
|
||||
+#188#228#214'Zc'#181'Z!'#138'"H)q|rL'#27#19#244'z='#216#182#253'k'#26#141#143
|
||||
+#23'i'#154'"M'#211#23#134#152#161#181#206#207#150'e'#21#247'A'#189'^'#135#16
|
||||
+#2#243#249#28'Q'#20'A)'#5'"'#130'a'#24#249'VJ'#225#254#238#158#11'Y'#216#217
|
||||
+#222#225'j'#181#10#199'q`Y'#22'L'#211#204'Q%I'#2')%'#150#203'%'#218#237'6'
|
||||
+#130#253#128'>}'#193#247'}'#244#251#253#188#128#175#208#179',C'#146'$X'#175
|
||||
+#215'X,'#22#24#14#135#197'}'#176#183#187#199'B'#8'T*'#21#16#17#152'9'#215'J)'
|
||||
+#212'j5'#156#158#157'R'#225','#220#134#183#212'h4@Dh6'#155#8#239'Bj'#181'Z'
|
||||
+#240'<'#15#190#239#191#11#222#136#224'_'#166#241'+y'#6#208#147#207'e\\'#131
|
||||
+#16#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_gtk','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15',4'#220#184'o:'#0#0#2'>IDAT8'#203#165#147'KH'#148#1#16#199''#223#238
|
||||
+#250#216'u]'#247#145#174#143#172'L7'#165#135#165'f'#24'jTD'#26'X'#18#9#10'fR'
|
||||
+'PBv('#245'V'#18'v'#144#14'=.E'#208#177#181'C'#4#157#163' '#137#130#14'*)'
|
||||
+#174#137'=,'#13#12#205'u'#205#220'o'#215'}|'#211#169' v'#21#162#255'\'#6'f'
|
||||
+#230#199#159'aF'#17#132#255#145'a'#173'b'#221#241'v'#241'J'#1#21'E'#10#183
|
||||
+#175'_T'#226#245'('#241#28#28'>vF'#222#12'Mct'#184#176'd'#228#163#233'S'#177
|
||||
+'+'#211'\j.'#166#185#165'QY'#21'p'#174#179'W^'#12#235#240'/'#205#19#241#142
|
||||
+#147']'#218#130'('#194#183#183'}'#152's*I'#201'*'#166#196#246#30#247#189#142
|
||||
+'?'#16#221#239#164#190#162'RF'#250#191#146'Q'#222#134')%'#25#163'u3'#182#252
|
||||
+#3',L'#246#227#220#209#136#179#168#134#244#156'*F'#3'y'#236'kj'#144#24#128
|
||||
+#211#160#227#129#197#131#227'i+'#166#204'2V4'#149#143#207#174#160'~'#31''''
|
||||
+#242'SE'#11#206#227#149'.'#146#207#223'Dv'#205#197'.1'#160'EYg'#180#210#25
|
||||
+#154#229#165#167#151#193#220'z'#166'm%X|_'#136':'#159#163'5L'#145#148#21'!'
|
||||
+#16#17#156'K['#136'q`'#136#194'k'#239#2#167#134''''#152'W}'#28#252#244#144
|
||||
+#156#153#27#132#142#220#199'ph'#140#4'W'#2'S'#221's'#132#23'#'#184'L'#174'X'
|
||||
+#128'%'#196'~'#135#141#211#155#214'sg'#242'3'#3'K'#1#242#181'Y'#148#236'(3w'
|
||||
+#189'|h'#159#196#217#148#142'!'#211'@'#174'9+'#22' z'#133'd'#157#30#163'AO'
|
||||
+#235#134#141'\'#219#230'"'#16#17#194#139'Q'#2#19'*~'#143'J'#248'G'#152#192
|
||||
+#232#10#133'yE'#177#0't'#144#128#16#210#162#184#204')'#20'X'#173'H'#146#14#9
|
||||
+#11'i'#149'il}T'#200#242#240'2'#254'1'#149'w'#158#137#216'%>'#30#24'P'#174
|
||||
+#238#220'-'''#236#14#12#137#137'H(L8Q '#10#214#234'4R'#171#204#168#193#0#214
|
||||
+'>;'#29#238#11#177'w'#0#208'32'#168#184'M'#22#8#6'Q4'#193#167'DH?j'#199'X'
|
||||
+#147#132#183#199'G'#203#208'I'#222#184'_'#253'}'#210#18'''n]'#238#150''''#229
|
||||
+#213#178#167'6W\}'#219#229'lw'#155#8#241#131#213#10']'#181'uRZ'#182'w'#205'a'
|
||||
+'A'#226'?'#211#191#232#23#132#150#13#235#254#13#129'j'#0#0#0#0'IEND'#174'B`'
|
||||
+#130
|
||||
]);
|
||||
LazarusResources.Add('issue_gtk2','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15','#27'wiRc'#0#0#2'6IDAT8'#203#165#147'MH'#148'Q'#20#134#159'of'#242'w'
|
||||
+#154'F'#199#191#212'~u@(-5'#197'0'#243#171'E'#181#168#164#18#12'D'#165#22#13
|
||||
+#21'Ai'#187#138#168#133#180#25'[$'#153'-'#211'VA'#203#168#172#188'B'#208'B'
|
||||
+#163#196#1'I'#202#202#22'a9'#26#19#254#205#204#247#157#22'1'#147'6S'#27#239
|
||||
+#229#192#129#251#190#15#239'='#151#171#9#194'J'#150#237''#135#7#143#156#21
|
||||
+#191#20'RU'#164'q'#243#198'y-'#158'F'#139#151'`'#223#225#147#242#234#245#4
|
||||
+#201'.7'#142#172#2'L'#235'j'#210#181#9'.4'#150#208#216#212#160#253#19'p'#170
|
||||
+#173']^'#188#181'0'#27#152'"'#236#31'%'#183#172#9#209#132#175'oz'#177#231'U'
|
||||
+#147#186#182#132#210#180'1z'#186'Z'#163#16'K'#164#169#171#170#150#225#254'/d'
|
||||
+'UxHIM"'#217#185#153#180#130'=L'#143#247#147']'#220'@v'#209'~2'#243'v12'#191
|
||||
+#137#221#199#235'%'#6#144'm'#179'p'#207#225#195#245#184#133#148#156'r'#22#205
|
||||
+'9'#222'?'#189#204#220#247'Q'#194'?'#231'0'#23#166#240#203'E'#146#206'x'#145
|
||||
+#237#223'b'#135'8o'#26'd$;i'#11'N2'#224'kgh]'#29#19'i'#165'8f>ad'#247'a'#214
|
||||
+''#230#150#221#11's'#208#17#232#140#5#216#12'x'#233#159#230#156#239#29'u9'
|
||||
+#25#236#253'p'#159#190#220#231#140#29#157'&1}'#17#175#189#27']'#215#1'PJA'
|
||||
+#251'_W'#152']'#12#162#187#210'8'#177'1'#159#206#241#143#12#6#230')0'''#209
|
||||
+'r'#13'n'#231#255'6+'#165'PJ'#161#235':'#3'j@'#150#1#196#170#145'd'#177#146
|
||||
+'l'#179#210#178'~'#3#215#183#184#153#15#11#161#31#6#205'>'#15'J)<#'#167'c'
|
||||
+#158#220#178#180'['#133#16'4'#13#220#246'T'#10#157'N$'#209#130#132#132#133
|
||||
+''''#1'Z'#181'6'#186#139#187#162'Ij'#245'Zm'#217#12#30#12#14'jW'#183#237#144
|
||||
+'c'#233'.l'#9#9'H0D(A'#192#0'g'#205#26':'#196#27'5'#19#180#198'I'#0'\'#27#30
|
||||
+#210'zR'#28#176#176#128'f'#10'3Z'#152#204'C'#233#220#173#188#19'57'#251'<'
|
||||
+#144'`'#252'1I'#156#221'q'#233#138'<'#172#168#145#202#3#235#196#221#187'U'
|
||||
+#148'R'#2','#171#136'6. '#2')+'#223')'#207#30#245#139' ('#165'$RKu'#218'J'
|
||||
+#191#243'/F'#21#11#131#211'u'#235'`'#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_nogui','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#25#15#14#21#157'j'#241#207#0#0#0#139'IDAT8'#203#213'SA'#10#132'0'#12#156#145
|
||||
+#253#136'?'#18#188#186#247'}'#129#190#161'?'#240#222'k'#133#190'H'#159'2{'#18
|
||||
+'R'#181#138#212#139#129#146'&4'#195'd'#146'R'#18'J'#172'B'#161'='#11#192#239
|
||||
+' '#235#215#187#141'/'#25'pZ'#146'byGy'#199#28#200#190#133'8'#22'j'#208#252
|
||||
+'n'#1'|'#182#9#181'5'#25'!'#0#176#212#229#29#143#0#248#248#30'pZd'#149#207
|
||||
+#249'l'#11#136'c'#150#238#173'E:'#155'}*'#154#148#28#132'Y'#232'z!'#204':'
|
||||
+#140#187'^'#246'='#223#255#153#254#130'Oa'#183'm'#228#165'z'#0#0#0#0'IEND'
|
||||
+#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_qt','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#0#0#0#0#0#249'C'#187''#0#0#0
|
||||
+#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2#14#14'0'#15
|
||||
+#237#193#22#217#0#0#2'6IDAT8'#203#165#147'OHTQ'#24#197''#247#190'7'#243'F'
|
||||
+#135#198')'#28#7#202'J'#205#194#130#10'k"'#130'@7&d'#16#4#181#176'M'#155'$ZD'
|
||||
+#144#155#22#173#11#138#146' "pQ'#171'@wA'#16#234'@'#129';'#157#200#180#201'P'
|
||||
+'2'''#233#207#216'D'#14#141#211#252'y'#239'kqSar'#231#183#186#151'{'#191's'
|
||||
+#238'='#231'|JD'#216'H'#217'+'#139'a'#212#219'_'#139#236'O%'#193#231#128#210
|
||||
+'P.'#128#194#236']'#23'JE'#216#177#15#194#17'&;'#144#3#0'JDV'#155#23#166'A['
|
||||
+#240'n'#20'^'#15'A&'#5#162' '#218#8#135'O@'#203'1pKP'#191'w'#13'D'#137#8#131
|
||||
+#139'J'#22#166#13#195#224'-'#152#28#9#160'qp'#201#1#26'M5'#30#203#196#186#138
|
||||
+#156#233#5#173#13#200#217#136'('#27' '#149#4#219#7#3'7!'#25#175#193#9'-'#209
|
||||
+#222#253#135']'#173#160'm'#152#29'/2'#252#24#18#207'C(+'#203#185#235#166#135
|
||||
+'6'#208#252#251'cr'#20#166#226#1'|'#161'%z'#250#160#243'"'#236'>b'#216#182'l'
|
||||
+#133'K'#247#193#10'd'#25'{f33'#190'&'#162#6'#Xb'#8'4'#14'm'#221#208'x'#208#8
|
||||
+'8?'#5#253#189#240#244'F'#144#223'?'#161#189#27'l611R'#225#130'['#128#31#159
|
||||
+#193'#Os+('#5'_f'#161#255#26#228'3Aj'#155'r'#212#183#128'/'#0'q'#10#164#231
|
||||
+#215#177'Q)'#0#133#182'an'#194'0'#231'3A'#4#23#175'l'#206'W'#238'(]'#1#224's'
|
||||
+#140'U'#223'>T13V'#160'v;,g'#130'D'#154'rxe'#200#164'B<'#186#154'%'#218#8'`'
|
||||
+#17'm'#168#208#192'u'#225'P''x,'#19''#2#225#8'\'#184#157#163#231#30'\~'#0'u'
|
||||
+#205'Y'#22'?'#6#152#140#251'Q'#254','#177#174#10#128'R'#17'Z'#142'B'#236'T'
|
||||
+#17'/'#31#226#225#21'c'#211#247'O'#240'u'#14#234'v'#130#224#1#16#8#154#176
|
||||
+#173#150#136'0'#144'F'#238#190'B'#238#188'D'#142#159'F'#252#216'R'#205'fq'
|
||||
+#168#22#135#160'8'#132#164#202#143#132#195'H'#21'5'#210'q'#30#25'H#"R'#17#229
|
||||
+#247'`'#249'a6'#1'o'#226#144#158'7'#194'E'#27' v'#210#132'-'#241#2'z'#250'*'
|
||||
+#162#252#223'0'#249#193#178#193'-'#155'WZ6'#148'K '#2#219#246#172'3L'#27#169
|
||||
+#191#218#198#233'['#230#203'?'#19#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_win32','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15'-'#17#142#167#138'<'#0#0#1#136'IDAT8'#203#213#147#191'K'#27'a'#28#135
|
||||
+#159#247#146#139#23's$'#245#150#152#6'BE'#171#165'v*d'#234' (n'#157#4#161':V'
|
||||
+#132#254#1#218#173'S'#255#141'b'#17#5';'#138#139#131' -'#148#130'Hi'#213' (4'
|
||||
+#138#166#21#163'%&^'#238'G'#238#189#188#174#165'$"d'#242'3~'#135#135#135#15
|
||||
+#159#175'P(:'#137'F'#135#233#24#16'mu'#244#191#190'W'#252#218#197'+w'#147#154
|
||||
+'_'#20#183#1#196#255#29#184'+s*'#226'}&<'#145'\}'#175'`'#247#230'9'#158#157
|
||||
+'`<?-'#238'fP;D$'#12'd'#237#26#25#26'xO'#135'Y'#223'Yas'#237#131#234#203#164
|
||||
+#169'K'#23#187'd'#241'nrA'#180#236' '#18#158#131#23#3'['#162'd'#140#243#140
|
||||
+'IC'#217#196'M'#29'/'#168'Ruk<'#177'^'#180'7'#216#206#205'S'#214#179'$R'#24
|
||||
+#250'['#164#200#5'M'#189#142#209#21#3#1#174#163'1'#249'rF'#180#4#188']=Ris'
|
||||
+#148#159#165'+'#246#11#146'7'#249'~'#158#231'~'#224']:h'#161'M'#180#161#243
|
||||
+'L'#207#181#239#192'v'#2'z'#147'>'#245#186#131#170#216'tW'#139'X'#7#31'y='
|
||||
+#252#144#192'x'#132#230#21'p'#154#3#173'w'#176#180'UR'#15'L'#131#178#29'pYq'
|
||||
+#176#162'0'#152':A'#250#167#196#131#13'z'#196'7'#226#242#11#14'm'#12#142'W'
|
||||
+#25#136'k('#161'8'#139#248#152#233'&'#9'w'#143'D'#210''''#210'e'#129#144'\;'
|
||||
+#22#253'#S'#226#214#29#252#155#194#167'W*'#147#220#160''''#155#165#17#250#156
|
||||
+'V'#242'<'#30'['#190';'#224'~<'#211#13#135#211#157#255#15#129''''#202#0#0#0#0
|
||||
+'IEND'#174'B`'#130
|
||||
]);
|
||||
LazarusResources.Add('issue_wince','PNG',[
|
||||
#137'PNG'#13#10#26#10#0#0#0#13'IHDR'#0#0#0#16#0#0#0#16#8#6#0#0#0#31#243#255'a'
|
||||
+#0#0#0#1'sRGB'#0#174#206#28#233#0#0#0#6'bKGD'#0#255#0#255#0#255#160#189#167
|
||||
+#147#0#0#0#9'pHYs'#0#0#11#19#0#0#11#19#1#0#154#156#24#0#0#0#7'tIME'#7#216#2
|
||||
+#27#15'--'#161#200#246#187#0#0#1#175'IDAT8'#203#165#147'Mk'#19'Q'#24#133#159
|
||||
+';'#201#164#147'fh'#202#184'H[aPZT'#172'.T'#178'rWp'#231'J(b'#237#170'E'#240
|
||||
+#7'Xw'#174#252#27#162#136#139#186#20'A]'#136#162'('#130'H'#176#177#165#208
|
||||
+#130#177#212#168'4'#166#164#137#147#249#232#204#228'u'#161#21'?&'#165#146#243
|
||||
+'n.wq'#238#185#135#231'U'#130#208#139'4zT'#207#6#233#164#203#224#229'u'#225
|
||||
+#253';'#252'Z?'#249#185#219'j7'#3#245'w'#7#222#252#21'I'#249#207#136#215'#'
|
||||
+#182'J'#13#156#161'"k'#151#206'q'#166'8'#165#246#150#160#181#138#202#25'D'
|
||||
+#173'oD'#177#129't'#156'G'#229'y'#158#222#191'!'#7#135#11#180'#'#15#167'jqm'
|
||||
+#242#166'J'#236' '#21'o'#128#159#1'''B'#162#12#27#195'&'#219#226#144'5u'#252
|
||||
+#176'I'#211'kq'#196':'#221'='#193#27'{'#142#154#190#159'\'#254'3'#135'7+T'
|
||||
+#248'JGoc'#244'e@'#129#231'jL'#158#157'U'#137#6'W'#239'}'#144#130'9'#193'Bu'
|
||||
+#139#229#165#136#203#197'QN'#218'o'#241#235'.Z'#236#144#222#214'9'#166#219
|
||||
+#221';p'#220#144#161#129#128'v'#219'E'#26#14#253#205#10#214#202'-f'#198'G'#8
|
||||
+#141#3'h'#254#18'ng,'#153#131';'#175#171'2h'#26#212#156#144'z'#195#197'J'#195
|
||||
+#161#252':Q'#240#145'l'#248#152'F'#233#21#131''''#30#224'b'#163'P'#162'P'#242
|
||||
+'G'#130#181'OM'#198#178#26#162#132'/'#169#0#179#208'!'#231'-'#146#27#8'H'#245
|
||||
+'Y'#140'N'#191#160#254#220'f'#223#169#11#10#166'D'#144#31'='#200'.'#179'x'
|
||||
+#247#188#212#31'Z'#18#151#143#11' '#171'O.'#202'On'#4#16'A'#254#5#169'+q'#168
|
||||
+'_'#175#254'~'#222#243'.'#148#151'K'#236#252'{'#199'$'#17#229#255#213'wc'#167
|
||||
+#196#250']4'#184#150#0#0#0#0'IEND'#174'B`'#130
|
||||
]);
|
||||
|
@ -74,6 +74,8 @@ menu/menu_search_files.png
|
||||
menu/menu_search_find.png
|
||||
menu/menu_search_find_next.png
|
||||
menu/menu_search_find_previous.png
|
||||
menu/menu_search_jumpback.png
|
||||
menu/menu_search_jumpforward.png
|
||||
menu/menu_search_openfile_atcursor.png
|
||||
menu/menu_search_replace.png
|
||||
menu/menu_select_all.png
|
||||
@ -146,6 +148,7 @@ packages/pkg_compile.png
|
||||
packages/pkg_conflict.png
|
||||
packages/pkg_files.png
|
||||
packages/pkg_include.png
|
||||
packages/pkg_issues.png
|
||||
packages/pkg_lfm.png
|
||||
packages/pkg_lrs.png
|
||||
packages/pkg_package_autoinstall.png
|
||||
@ -156,3 +159,12 @@ packages/pkg_removedfiles.png
|
||||
packages/pkg_removedrequired.png
|
||||
packages/pkg_text.png
|
||||
packages/pkg_unit.png
|
||||
propertygrid/issue_carbon.png
|
||||
propertygrid/issue_fpgui.png
|
||||
propertygrid/issue_carbon.png
|
||||
propertygrid/issue_gtk.png
|
||||
propertygrid/issue_gtk2.png
|
||||
propertygrid/issue_nogui.png
|
||||
propertygrid/issue_qt.png
|
||||
propertygrid/issue_win32.png
|
||||
propertygrid/issue_wince.png
|
||||
|
BIN
images/menu/menu_search_jumpback.png
Normal file
After Width: | Height: | Size: 345 B |
BIN
images/menu/menu_search_jumpforward.png
Normal file
After Width: | Height: | Size: 349 B |
BIN
images/packages/pkg_issues.png
Normal file
After Width: | Height: | Size: 399 B |
BIN
images/propertygrid/issue_carbon.png
Normal file
After Width: | Height: | Size: 509 B |
BIN
images/propertygrid/issue_fpgui.png
Normal file
After Width: | Height: | Size: 282 B |
BIN
images/propertygrid/issue_gtk.png
Normal file
After Width: | Height: | Size: 702 B |
BIN
images/propertygrid/issue_gtk2.png
Normal file
After Width: | Height: | Size: 694 B |
BIN
images/propertygrid/issue_nogui.png
Normal file
After Width: | Height: | Size: 267 B |
BIN
images/propertygrid/issue_qt.png
Normal file
After Width: | Height: | Size: 694 B |
BIN
images/propertygrid/issue_win32.png
Normal file
After Width: | Height: | Size: 520 B |
BIN
images/propertygrid/issue_wince.png
Normal file
After Width: | Height: | Size: 559 B |
@ -64,6 +64,8 @@ type
|
||||
lpfpGUI,
|
||||
lpNoGUI
|
||||
);
|
||||
|
||||
TLCLPlatforms = set of TLCLPlatform;
|
||||
|
||||
{ TWidgetSet }
|
||||
|
||||
|
123
lcl/interfaces/carbon/issues.xml
Normal file
@ -0,0 +1,123 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package name="lcl">
|
||||
<widgetset name="carbon">
|
||||
<issue name="TWidgetSet">
|
||||
<short> No 64-bits support</short>
|
||||
<descr>Carbon cannot be used to write 64-bits applications. Apple decided not to release a 64-bits version of Carbon. The migration path is writing a new interface in Cocoa.</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Keyboard</short>
|
||||
<descr>* Apple Command key is mapped to ssCtrl per [http://developer.apple.com/documentation/UserExperience/Conceptual/OSXHIGuidelines/index.html Apple Guidelines]
|
||||
* Apple Control key is mapped to ssMeta
|
||||
* Apple Option key is mapped to its inscription, i.e. ssAlt
|
||||
* Virtual key codes mapping is not reliable (depends on keyboard language layout!)</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Application</short>
|
||||
<descr>* Title: You cannot change it at runtime. You have to set it in Application Bundle.
|
||||
* OnDropFiles event is fired when file is dropped on application dock icon or opened via Finder if is associated. You have to enable this event in Application Bundle.</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Drawing and measuring text precisely in parts</short>
|
||||
<descr>If you want to draw (via TextOut, TextRect) or measure (via TextWidth, TextHeight) text divided into various parts and rely it will be displayed same each time not depending on its division, you have to disable some default typographic features (like kerning, fractional positioning, ...) of Canvas. You can choose one of the following:
|
||||
* CarbonWidgetSet.SetTextFractional(Canvas, False); // from CarbonInt unit
|
||||
* TCarbonCustomControl(CustomControl.Handle).TextFractional := False; // from CarbonPrivate unit
|
||||
* TCarbonDeviceContext(Canvas.Handle)..TextFractional := False; // from CarbonCanvas unit</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Screenshot taking</short>
|
||||
<descr>The only possible efficient way of taking a screenshot on Mac OS X is using OpenGL. Apple provides a demonstration function which returns a CGImageRef with the screenshot. This function was converted to Pascal and is available on the glgrab.pas unit on the carbon interface directory. This function requires the Apple-specific parts of the Apple OpenGL headers, and those aren't yet on the FPC Packages, so they were translated and are located on lazarus/lcl/interfaces/carbon/opengl.pas until they are released on a stable Free Pascal.
|
||||
|
||||
After obtaining a CGImageRef, the next step to implement the RawImage_fromDevice method is obtaining a local copy of it's pixel data. It isn't possible to directly access the bytes of a CGImageRef, so the image needs to be drawn to a CGContextRef which uses a memory area allocated by us as buffer. This method has the great advantage of converting from the internal format of the screenshot bytes to the very convenient ARGB, 32-bits depth, 8-bits per channel format that is default to LCL.</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Mouse.CursorPos changing does not generate mouse (move) events</short>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Release mouse capture is not supported</short>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Command line parameters</short>
|
||||
<descr>Because Carbon applications are executed via Application Bundle, command line parameters are not passed. You have to use OnDropFiles event to detect openning associated files.</descr>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Shortcuts indication is not supported</short>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Drawing on Canvas outside OnPaint event is not supported</short>
|
||||
</issue>
|
||||
<issue name="TWidgetSet">
|
||||
<short>Drawing on screen device context is not supported</short>
|
||||
</issue>
|
||||
<issue name="TWinControl.Color">
|
||||
<short>Window control color of clBtnFace makes its background transparent</short>
|
||||
</issue>
|
||||
<issue name="TWinControl.Font">
|
||||
<short>Window control font style fsStrikeOut is not supported</short>
|
||||
</issue>
|
||||
<issue name="TForm.Icon">
|
||||
<short>Form icon is not supported</short>
|
||||
</issue>
|
||||
<issue name="TForm.ShowInTaskbar">
|
||||
<short>Form ShowInTaskbar property is not supported</short>
|
||||
</issue>
|
||||
<issue name="TEdit.PasswordChar">
|
||||
<short>Edit PasswordChar property different then default is not supported</short>
|
||||
</issue>
|
||||
<issue name="TMemo.WordWrap">
|
||||
<short>Memo WordWrap property when is disabled, does not allow to scroll text horizontally</short>
|
||||
</issue>
|
||||
<issue name="TListBox.Columns">
|
||||
<short>List box Columns property is not supported</short>
|
||||
</issue>
|
||||
<issue name="TComboBox.Height">
|
||||
<short>Combo box height is constrined</short>
|
||||
<descr>It's impossible to set an arbitrary height to a TComboBox under Carbon. Use AutoSize to make sure the size is good on all platforms.</descr>
|
||||
</issue>
|
||||
<issue name="TComboBox.OnDropDown">
|
||||
<short>Combo box OnDropDown event is called when set focus</short>
|
||||
</issue>
|
||||
<issue name="TComboBox.OnCloseUp">
|
||||
<short>Combo box OnCloseUp event is called when released focus</short>
|
||||
</issue>
|
||||
<issue name="TComboBox.DroppedDown">
|
||||
<short>Combo box DroppedDown property does not show drop down list when style is csDropDownList</short>
|
||||
</issue>
|
||||
<issue name="TComboBox.DropDownCount">
|
||||
<short>Combo box DropDownCount property is not supported</short>
|
||||
</issue>
|
||||
<issue name="TComboBox.Style">
|
||||
<short>Combo box styles csSimple, csOwnerDrawFixed and csOwnerDrawVariable are not supported</short>
|
||||
</issue>
|
||||
<issue name="TPanel.BevelInner">
|
||||
<short>Panel bevel bvLowered and bvSpace are not supported</short>
|
||||
</issue>
|
||||
<issue name="TPanel.BevelOuter">
|
||||
<short>Panel bevel bvLowered and bvSpace are not supported</short>
|
||||
</issue>
|
||||
<issue name="TBitBtn.Spacing">
|
||||
<short>Bitmap button Spacing property is not supported</short>
|
||||
</issue>
|
||||
<issue name="TColorDialog.Title">
|
||||
<short>Color dialog title is not supported</short>
|
||||
</issue>
|
||||
<issue name="TTrackBar.LineSize">
|
||||
<short>Track bar line size is not supported</short>
|
||||
</issue>
|
||||
<issue name="TTrackBar.ScalePos">
|
||||
<short>Track bar ScalePos property is not supported</short>
|
||||
</issue>
|
||||
<issue name="TTrackBar.TickMarks">
|
||||
<short>Track bar tick marks are not supported</short>
|
||||
</issue>
|
||||
<issue name="TProgressBar.BarShowText">
|
||||
<short>Progress bar show text is not supported</short>
|
||||
</issue>
|
||||
<issue name="TProgressBar.Smooth">
|
||||
<short>Progress bar smoothing is not supported</short>
|
||||
</issue>
|
||||
<issue name="TProgressBar.Step">
|
||||
<short>Progress bar step is not supported</short>
|
||||
</issue>
|
||||
</widgetset>
|
||||
</package>
|
27
lcl/interfaces/win32/issues.xml
Normal file
@ -0,0 +1,27 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<package name="lcl">
|
||||
<widgetset name="win32">
|
||||
<issue name="TComboBox.Height">
|
||||
<short>Combo box height is constrined</short>
|
||||
<descr>It's impossible to set an arbitrary height to a TComboBox under Windows. Use AutoSize to make sure the size is good on all platforms.</descr>
|
||||
</issue>
|
||||
<issue name="TButton.Color">
|
||||
<short>Button color cannot be changed</short>
|
||||
<descr>It's impossible to implement without making them owner drawn.</descr>
|
||||
</issue>
|
||||
<issue name="TBitBtn.Color">
|
||||
<short>Bitmap button color cannot be changed</short>
|
||||
<descr>It's impossible to implement without making them owner drawn.</descr>
|
||||
</issue>
|
||||
<issue name="TProgressBar.Height">
|
||||
<short>Progress bar height cannot be smaller then 10 if a Windows Theme is used</short>
|
||||
<descr>Associated bug report: http://bugs.freepascal.org/view.php?id=10626
|
||||
|
||||
MSDN Docs: http://msdn2.microsoft.com/en-us/library/bb760816(VS.85).aspx</descr>
|
||||
</issue>
|
||||
<issue name="TTrayIcon.Hint">
|
||||
<short>Tray icon hint string length is limited</short>
|
||||
<descr>TTrayIcon.Hint may have a maximum length of 127 WideChars (will usually be more then 127 Bytes in a UTF-8 string, but may be less too, depending on the string). It's a Windows limitation, which can't be worked around.</descr>
|
||||
</issue>
|
||||
</widgetset>
|
||||
</package>
|
@ -562,11 +562,12 @@ begin
|
||||
LazPackage.GetFileDialogInitialDir(OpenDialog.InitialDir);
|
||||
OpenDialog.Title:=lisOpenFile;
|
||||
OpenDialog.Options:=OpenDialog.Options+[ofFileMustExist,ofPathMustExist];
|
||||
OpenDialog.Filter:=lisLazarusFile+' (*.pas;*.pp;*.inc;*.lfm;*.lrs)|*.'
|
||||
+'pas;*.pp;*.inc;*.lfm;*.lrs'
|
||||
OpenDialog.Filter:=lisLazarusFile+' (*.pas;*.pp;*.inc;*.lfm;*.lrs;*.xml)|*.'
|
||||
+'pas;*.pp;*.inc;*.lfm;*.lrs;*.xml'
|
||||
+'|'+lisPascalUnit+' (*.pp;*.pas)|*.pp;*.pas'
|
||||
+'|'+lisPascalSourceFile+' (*.pas)|*.pas'
|
||||
+'|'+lisFreePascalSourceFile+' (*.pp)|*.pp'
|
||||
+'|'+lisPkgFileTypeIssues+' (*.xml)|*.xml'
|
||||
+'|'+dlgAllFiles+' ('+GetAllFilesMask+')|'+GetAllFilesMask;
|
||||
if OpenDialog.Execute then begin
|
||||
AFilename:=CleanAndExpandFilename(OpenDialog.Filename);
|
||||
|
@ -138,6 +138,7 @@ type
|
||||
pftLFM, // lazarus form text file
|
||||
pftLRS, // lazarus resource file
|
||||
pftInclude, // include file
|
||||
pftIssues, // file is issues xml file
|
||||
pftText, // file is text (e.g. copyright or install notes)
|
||||
pftBinary // file is something else
|
||||
);
|
||||
@ -833,10 +834,10 @@ const
|
||||
LazPkgXMLFileVersion = 3;
|
||||
|
||||
PkgFileTypeNames: array[TPkgFileType] of string = (
|
||||
'pftUnit', 'pftVirtualUnit', 'pftLFM', 'pftLRS', 'pftInclude', 'pftText',
|
||||
'pftBinary');
|
||||
'pftUnit', 'pftVirtualUnit', 'pftLFM', 'pftLRS', 'pftInclude', 'pftIssues',
|
||||
'pftText', 'pftBinary');
|
||||
PkgFileTypeIdents: array[TPkgFileType] of string = (
|
||||
'Unit', 'Virtual Unit', 'LFM', 'LRS', 'Include', 'Text', 'Binary');
|
||||
'Unit', 'Virtual Unit', 'LFM', 'LRS', 'Include', 'Issues', 'Text', 'Binary');
|
||||
PkgFileFlag: array[TPkgFileFlag] of string = (
|
||||
'pffHasRegisterProc', 'pffAddToPkgUsesSection', 'pffReportedAsRemoved');
|
||||
PkgDependencyFlagNames: array[TPkgDependencyFlag] of string = (
|
||||
@ -942,6 +943,7 @@ begin
|
||||
pftLFM: Result:=lisPkgFileTypeLFM;
|
||||
pftLRS: Result:=lisPkgFileTypeLRS;
|
||||
pftInclude: Result:=lisPkgFileTypeInclude;
|
||||
pftIssues: Result:=lisPkgFileTypeIssues;
|
||||
pftText: Result:=lisPkgFileTypeText;
|
||||
pftBinary: Result:=lisPkgFileTypeBinary;
|
||||
else
|
||||
@ -966,6 +968,8 @@ begin
|
||||
Result:=pftInclude
|
||||
else if FilenameIsPascalUnit(AFilename) then
|
||||
Result:=pftUnit
|
||||
else if CompareFileExt(AFilename,'.xml',true)=0 then
|
||||
Result:=pftIssues
|
||||
else if FileIsText(AFilename) then
|
||||
Result:=pftText
|
||||
else
|
||||
|
@ -337,6 +337,7 @@ var
|
||||
ImageIndexLFM: integer;
|
||||
ImageIndexLRS: integer;
|
||||
ImageIndexInclude: integer;
|
||||
ImageIndexIssues: integer;
|
||||
ImageIndexText: integer;
|
||||
ImageIndexBinary: integer;
|
||||
ImageIndexConflict: integer;
|
||||
@ -1311,6 +1312,7 @@ begin
|
||||
ImageIndexLFM := IDEImages.LoadImage(16, 'pkg_lfm');
|
||||
ImageIndexLRS := IDEImages.LoadImage(16, 'pkg_lrs');
|
||||
ImageIndexInclude := IDEImages.LoadImage(16, 'pkg_include');
|
||||
ImageIndexIssues := IDEImages.LoadImage(16, 'pkg_issues');
|
||||
ImageIndexText := IDEImages.LoadImage(16, 'pkg_text');
|
||||
ImageIndexBinary := IDEImages.LoadImage(16, 'pkg_binary');
|
||||
ImageIndexConflict := IDEImages.LoadImage(16, 'pkg_conflict');
|
||||
@ -1594,6 +1596,7 @@ procedure TPackageEditorForm.UpdateFiles;
|
||||
pftLFM: ANode.ImageIndex:=ImageIndexLFM;
|
||||
pftLRS: ANode.ImageIndex:=ImageIndexLRS;
|
||||
pftInclude: ANode.ImageIndex:=ImageIndexInclude;
|
||||
pftIssues: ANode.ImageIndex:=ImageIndexIssues;
|
||||
pftText: ANode.ImageIndex:=ImageIndexText;
|
||||
pftBinary: ANode.ImageIndex:=ImageIndexBinary;
|
||||
else
|
||||
|
@ -1237,6 +1237,10 @@ begin
|
||||
// register files
|
||||
{$I pkgfileslcl.inc}
|
||||
|
||||
// add issues files
|
||||
AddFile('interfaces/carbon/issues.xml','carbon-issues.xml',pftIssues,[],cpBase);
|
||||
AddFile('interfaces/win32/issues.xml','win32-issues.xml',pftIssues,[],cpBase);
|
||||
|
||||
// increase priority by one, so that the LCL components are inserted to the
|
||||
// left in the palette
|
||||
for i:=0 to FileCount-1 do
|
||||
|