Browse Source

design: started IDE css inspector

mattias 3 weeks ago
parent
commit
5c4a26e528

+ 8 - 0
design/fresnel.dsgninspector.lfm

@@ -0,0 +1,8 @@
+object FresnelCSSInspectorWnd: TFresnelCSSInspectorWnd
+  Left = 309
+  Height = 528
+  Top = 186
+  Width = 334
+  Caption = 'CSS Inspector'
+  LCLVersion = '4.99.0.0'
+end

+ 49 - 0
design/fresnel.dsgninspector.pas

@@ -0,0 +1,49 @@
+unit Fresnel.DsgnInspector;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils, Forms, IDECommands, IDEWindowIntf, LazIDEIntf, MenuIntf;
+
+const
+  CSSInspectorWindowName = 'IDEFresnelCSSInspectorWindow';
+
+type
+
+  { TFresnelCSSInspectorWnd }
+
+  TFresnelCSSInspectorWnd = class(TForm)
+  public
+  end;
+
+var
+  CSSInspectorWnd: TFresnelCSSInspectorWnd;
+  ViewCSSInspectorCmd: TIDECommand;
+  ViewCSSInspectorMenuCmd: TIDEMenuCommand;
+
+procedure ViewCSSInspector(Sender: TObject);
+procedure CreateCSSInspectorWindow(Sender: TObject; aFormName: string;
+                          var AForm: TCustomForm; DoDisableAutoSizing: boolean);
+
+implementation
+
+{$R *.lfm}
+
+procedure ViewCSSInspector(Sender: TObject);
+begin
+  IDEWindowCreators.ShowForm(CSSInspectorWindowName,true);
+end;
+
+procedure CreateCSSInspectorWindow(Sender: TObject; aFormName: string; var AForm: TCustomForm;
+  DoDisableAutoSizing: boolean);
+begin
+  if aFormName='' then ;
+  IDEWindowCreators.CreateForm(CSSInspectorWnd,TFresnelCSSInspectorWnd,DoDisableAutoSizing,
+                               LazarusIDE.OwningComponent);
+  AForm:=CSSInspectorWnd;
+end;
+
+end.
+

+ 1 - 0
design/fresnel.dsgnstrconsts.pas

@@ -6,6 +6,7 @@ interface
 
 
 resourcestring
 resourcestring
   frsFresnelApplication = 'Fresnel Application';
   frsFresnelApplication = 'Fresnel Application';
+  frsFresnelCSSInspector = 'Fresnel CSS Inspector';
   frsFresnelApplicationDesc = 'A graphical Free Pascal application using'
   frsFresnelApplicationDesc = 'A graphical Free Pascal application using'
     +' the cross-platform Fresnel library for its GUI.';
     +' the cross-platform Fresnel library for its GUI.';
   frsWhenPuttingANewElementOntoAFormPositionItAbsoluteU = 'When putting a new element onto a form, '
   frsWhenPuttingANewElementOntoAFormPositionItAbsoluteU = 'When putting a new element onto a form, '

+ 13 - 0
design/fresnel.inspector.pas

@@ -0,0 +1,13 @@
+unit Fresnel.Inspector;
+
+{$mode objfpc}{$H+}
+
+interface
+
+uses
+  Classes, SysUtils;
+
+implementation
+
+end.
+

+ 31 - 12
design/fresnel.register.pas

@@ -1,5 +1,5 @@
 {
 {
- Copyright (C) 2024 Mattias Gaertner [email protected]
+ Copyright (C) 2025 Mattias Gaertner [email protected]
 
 
 *****************************************************************************
 *****************************************************************************
  This file is part of the Fresnel project.
  This file is part of the Fresnel project.
@@ -15,12 +15,19 @@ unit Fresnel.Register;
 interface
 interface
 
 
 uses
 uses
-  LCLProc, LCLType, Classes, SysUtils, FormEditingIntf, PropEdits, LazIDEIntf,
-  ComponentEditors, IDEOptEditorIntf, LCLIntf, Graphics, Controls, Forms, ProjectIntf,
-  PackageIntf, IDEOptionsIntf, LazLoggerBase, CodeToolManager, CodeCache,
-  StdCodeTools, Fresnel.DOM, Fresnel.Controls, Fresnel.Forms,
+  Classes, SysUtils,
+  // lcl
+  LCLProc, LCLType, LCLIntf, LazLoggerBase, Graphics, Controls, Forms,
+  // IDE intf
+  FormEditingIntf, PropEdits, LazIDEIntf, ComponentEditors, IDEOptEditorIntf, ProjectIntf,
+  IDECommands, MenuIntf, IDEWindowIntf, PackageIntf, IDEOptionsIntf,
+  // codetools
+  CodeToolManager, CodeCache, StdCodeTools,
+  // fresnel
+  Fresnel.DOM, Fresnel.Controls, Fresnel.Forms,
   Fresnel.Renderer, Fresnel.Classes, Fresnel.LCLApp, Fresnel.LCL,
   Fresnel.Renderer, Fresnel.Classes, Fresnel.LCLApp, Fresnel.LCL,
-  Fresnel.DsgnStrConsts, Fresnel.StylePropEdit, Fresnel.DsgnOptsFrame, Fresnel.DsgnOptions;
+  Fresnel.DsgnStrConsts, Fresnel.StylePropEdit, Fresnel.DsgnOptsFrame, Fresnel.DsgnOptions,
+  Fresnel.DsgnInspector;
 
 
 const
 const
   ProjDescNameFresnelApplication = 'Fresnel Application';
   ProjDescNameFresnelApplication = 'Fresnel Application';
@@ -132,6 +139,9 @@ implementation
 {$R fresneldsgnimg.res}
 {$R fresneldsgnimg.res}
 
 
 procedure Register;
 procedure Register;
+var
+  Key: TIDEShortCut;
+  Cat: TIDECommandCategory;
 begin
 begin
   FresnelOptions:=TFresnelDsgnOptions.Create(nil);
   FresnelOptions:=TFresnelDsgnOptions.Create(nil);
 
 
@@ -159,6 +169,19 @@ begin
   // register IDE options frame
   // register IDE options frame
   FresnelOptionsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment,TFresnelOptionsFrame,
   FresnelOptionsFrameID:=RegisterIDEOptionsEditor(GroupEnvironment,TFresnelOptionsFrame,
                                                   FresnelOptionsFrameID)^.Index;
                                                   FresnelOptionsFrameID)^.Index;
+
+  // register shortcut for view CSS Inspector
+  Key:=IDEShortCut(VK_UNKNOWN,[],VK_UNKNOWN,[]);
+  Cat:=IDECommandList.FindCategoryByName(CommandCategoryViewName);
+  ViewCSSInspectorCmd:=RegisterIDECommand(Cat, 'View Fresnel CSS Inspector',
+    frsFresnelCSSInspector, Key,nil,@ViewCSSInspector);
+
+  // add a menu item in the view menu
+  ViewCSSInspectorMenuCmd:=RegisterIDEMenuCommand(itmViewMainWindows, 'ViewFresnelCSSInspector',
+    frsFresnelCSSInspector, nil, nil, ViewCSSInspectorCmd{, 'menu_view_fresnel_css_inspector'});
+
+  // register window creator
+  IDEWindowCreators.Add(CSSInspectorWindowName,@CreateCSSInspectorWindow,nil,'250','400','','');
 end;
 end;
 
 
 { TFresnelFormMediator }
 { TFresnelFormMediator }
@@ -675,10 +698,8 @@ begin
     TheDialog.Editor := Self;
     TheDialog.Editor := Self;
     TheDialog.CSSSynEdit.Text := AString;
     TheDialog.CSSSynEdit.Text := AString;
     TheDialog.CSSSynEditChange(nil);
     TheDialog.CSSSynEditChange(nil);
-    if (TheDialog.ShowModal = mrOK) then
-    begin
+    if TheDialog.ShowModal = mrOK then
       TheDialog.Apply;
       TheDialog.Apply;
-    end;
   finally
   finally
     TheDialog.Free;
     TheDialog.Free;
   end;
   end;
@@ -699,10 +720,8 @@ begin
     TheDialog.Editor := Self;
     TheDialog.Editor := Self;
     TheDialog.CSSSynEdit.Text := aList.Text;
     TheDialog.CSSSynEdit.Text := aList.Text;
     TheDialog.CSSSynEditChange(nil);
     TheDialog.CSSSynEditChange(nil);
-    if (TheDialog.ShowModal = mrOK) then
-    begin
+    if TheDialog.ShowModal = mrOK then
       TheDialog.Apply;
       TheDialog.Apply;
-    end;
   finally
   finally
     TheDialog.Free;
     TheDialog.Free;
   end;
   end;

+ 4 - 0
design/fresneldsgn.lpk

@@ -40,6 +40,10 @@
         <HasRegisterProc Value="True"/>
         <HasRegisterProc Value="True"/>
         <UnitName Value="DemoCompsReg"/>
         <UnitName Value="DemoCompsReg"/>
       </Item>
       </Item>
+      <Item>
+        <Filename Value="fresnel.dsgninspector.pas"/>
+        <UnitName Value="fresnel.dsgninspector"/>
+      </Item>
     </Files>
     </Files>
     <RequiredPkgs>
     <RequiredPkgs>
       <Item>
       <Item>

+ 1 - 1
design/fresneldsgn.pas

@@ -9,7 +9,7 @@ interface
 
 
 uses
 uses
   Fresnel.Register, Fresnel.StylePropEdit, Fresnel.DsgnStrConsts, Fresnel.DsgnOptsFrame, 
   Fresnel.Register, Fresnel.StylePropEdit, Fresnel.DsgnStrConsts, Fresnel.DsgnOptsFrame, 
-  Fresnel.DsgnOptions, DemoCompsReg, LazarusPackageIntf;
+  Fresnel.DsgnOptions, DemoCompsReg, Fresnel.DsgnInspector, LazarusPackageIntf;
 
 
 implementation
 implementation
 
 

+ 1 - 1
src/base/fcl-css/fpcssresparser.pas

@@ -2464,7 +2464,7 @@ begin
       if Pos('var(',AttrData.Value)>0 then
       if Pos('var(',AttrData.Value)>0 then
       begin
       begin
         // cannot be parsed yet
         // cannot be parsed yet
-      end else if AttrID<Resolver.CSSRegistry.AttributeCount then
+      end else if AttrId<Resolver.CSSRegistry.AttributeCount then
       begin
       begin
         if Resolver.InitParseAttr(Desc,AttrData,AttrData.Value) then
         if Resolver.InitParseAttr(Desc,AttrData,AttrData.Value) then
         begin
         begin