Browse Source

Browser options save

Margers 6 months ago
parent
commit
2b35696400
4 changed files with 128 additions and 29 deletions
  1. 1 0
      packages/ide/fpide.pas
  2. 16 1
      packages/ide/fpini.pas
  3. 72 27
      packages/ide/fpmopts.inc
  4. 39 1
      packages/ide/fpsymbol.pas

+ 1 - 0
packages/ide/fpide.pas

@@ -625,6 +625,7 @@ resourcestring  menu_local_gotosource = '~G~oto source';
                 {Browser options dialog.}
                 dialog_browseroptions = 'Browser Options';
                 dialog_localbrowseroptions = 'Local Browser Options';
+                label_browser_units = '~U~nits';
                 label_browser_labels = '~L~abels';
                 label_browser_constants = '~C~onstants';
                 label_browser_types = '~T~ypes';

+ 16 - 1
packages/ide/fpini.pas

@@ -39,7 +39,7 @@ uses
 {$ifdef USE_EXTERNAL_COMPILER}
    fpintf, { superseeds version_string of version unit }
 {$endif USE_EXTERNAL_COMPILER}
-  WConsts,WUtils,WINI,WViews,WEditor,WCEdit,
+  WConsts,WUtils,WINI,WViews,WEditor,WCEdit,FPSymbol,
   {$ifndef NODEBUG}FPDebug,{$endif}FPConst,FPVars,
   FPIntf,FPTools,FPSwitch,fpchash;
 
@@ -82,6 +82,7 @@ const
   secColors      = 'Colors';
   secHelp        = 'Help';
   secEditor      = 'Editor';
+  secBrowser     = 'Browser';
   secBreakpoint  = 'Breakpoints';
   secWatches     = 'Watches';
   secHighlight   = 'Highlight';
@@ -123,6 +124,10 @@ const
   ieDefaultIndentSize = 'DefaultIndentSize';
   ieDefaultEditorFlags='DefaultFlags';
   ieDefaultSaveExt   = 'DefaultSaveExt';
+  ieBrowserSymbols   = 'SymbolFlags';
+  ieBrowserDisplay   = 'DisplayFlags';
+  ieBrowserSub       = 'SubBrowsing';
+  ieBrowserPane      = 'PreferrdPane';
   ieOpenExts         = 'OpenExts';
   ieHighlightExts    = 'Exts';
   ieTabsPattern      = 'NeedsTabs';
@@ -478,6 +483,11 @@ begin
   DefaultIndentSize:=INIFile^.GetIntEntry(secEditor,ieDefaultIndentSize,DefaultIndentSize);
   DefaultCodeEditorFlags:=INIFile^.GetIntEntry(secEditor,ieDefaultEditorFlags,DefaultCodeEditorFlags);
   DefaultSaveExt:=INIFile^.GetEntry(secEditor,ieDefaultSaveExt,DefaultSaveExt);
+  { Browser }
+  DefaultSymbolFlags:=INIFile^.GetIntEntry(secBrowser,ieBrowserSymbols,DefaultSymbolFlags);
+  DefaultDispayFlags:=INIFile^.GetIntEntry(secBrowser,ieBrowserDisplay,DefaultDispayFlags);
+  DefaultBrowserSub:=INIFile^.GetIntEntry(secBrowser,ieBrowserSub,DefaultBrowserSub);
+  DefaultBrowserPane:=INIFile^.GetIntEntry(secBrowser,ieBrowserPane,DefaultBrowserPane);
   { Highlight }
   HighlightExts:=INIFile^.GetEntry(secHighlight,ieHighlightExts,HighlightExts);
   TabsPattern:=INIFile^.GetEntry(secHighlight,ieTabsPattern,TabsPattern);
@@ -698,6 +708,11 @@ begin
   INIFile^.SetIntEntry(secEditor,ieDefaultIndentSize,DefaultIndentSize);
   INIFile^.SetIntEntry(secEditor,ieDefaultEditorFlags,DefaultCodeEditorFlags);
   INIFile^.SetEntry(secEditor,ieDefaultSaveExt,DefaultSaveExt);
+  { Browser }
+  INIFile^.SetIntEntry(secBrowser,ieBrowserSymbols,DefaultSymbolFlags);
+  INIFile^.SetIntEntry(secBrowser,ieBrowserDisplay,DefaultDispayFlags);
+  INIFile^.SetIntEntry(secBrowser,ieBrowserSub,DefaultBrowserSub);
+  INIFile^.SetIntEntry(secBrowser,ieBrowserPane,DefaultBrowserPane);
   { Highlight }
   INIFile^.SetEntry(secHighlight,ieHighlightExts,EscapeIniText(HighlightExts));
   INIFile^.SetEntry(secHighlight,ieTabsPattern,EscapeIniText(TabsPattern));

+ 72 - 27
packages/ide/fpmopts.inc

@@ -1350,54 +1350,84 @@ var D: PCenterDialog;
     TitleS: string;
     CB1,CB2: PCheckBoxes;
     RB1,RB2: PRadioButtons;
+    SymbolsFlags,DisplayFlags,BrowserFlags : Longint;
+    BrowserSub,BrowserPane : Longint;
+    DialogWidth : sw_integer;
+    SymbolsHight: sw_integer;
+    DisplayHight: sw_integer;
 begin
   if Browser=nil then
-    TitleS:=dialog_browseroptions
-  else
+  begin    { Default browser options }
+    TitleS:=dialog_browseroptions;
+    SymbolsFlags := DefaultSymbolFlags;
+    DisplayFlags := DefaultDispayFlags;
+    BrowserSub:=DefaultBrowserSub;
+    BrowserPane:=DefaultBrowserPane;
+    DialogWidth:=56;
+    SymbolsHight:=4;
+    DisplayHight:=1;
+  end else
+  begin   { Local browser options }
     TitleS:=dialog_localbrowseroptions;
-  R.Assign(0,0,56,15);
+    {BrowserFlags := DefaultBrowserFlags;}
+    BrowserFlags := Browser^.GetFlags;
+    DisplayFlags := BrowserFlags shr 30;
+    SymbolsFlags := BrowserFlags and $7f;
+    DialogWidth:=56-20;
+    SymbolsHight:=7;
+    DisplayHight:=2;
+    RB1:=nil; {it is not suppoused to be valid}
+  end;
+  R.Assign(0,0,DialogWidth,16);
   New(D, Init(R, TitleS));
   with D^ do
   begin
     HelpCtx:=hcBrowser;
     GetExtent(R); R.Grow(-2,-2);
-    R.B.Y:=R.A.Y+1+3; R2.Copy(R); Inc(R2.A.Y);
+    R.B.Y:=R.A.Y+1+SymbolsHight; R2.Copy(R); Inc(R2.A.Y);
     New(CB1, Init(R2,
-      NewSItem(RExpand(label_browser_labels,21+2),
+      NewSItem(RExpand(label_browser_units,21+2),
+      NewSItem(label_browser_labels,
       NewSItem(label_browser_constants,
       NewSItem(label_browser_types,
       NewSItem(label_browser_variables,
       NewSItem(label_browser_procedures,
       NewSItem(label_browser_inherited,
-      nil)))))))
+      nil))))))))
     );
     Insert(CB1);
     R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
     Insert(New(PLabel, Init(R2, label_browser_symbols, CB1)));
+    CB1^.Value := SymbolsFlags;
 
-    R.Move(0,R.B.Y-R.A.Y+1);
-    R.B.Y:=R.A.Y+1+2; R2.Copy(R);
-    R3.Copy(R2); R3.B.X:=R3.A.X+(R3.B.X-R3.A.X) div 2-1; Inc(R3.A.Y);
-    New(RB1, Init(R3,
-      NewSItem(label_browser_newbrowser,
-      NewSItem(label_browser_currentbrowser,
-      nil)))
-    );
-    Insert(RB1);
-    R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
-    Insert(New(PLabel, Init(R3, label_browser_subbrowsing, RB1)));
-    R3.Copy(R2); R3.A.X:=R3.B.X-(R3.B.X-R3.A.X) div 2+1; Inc(R3.A.Y);
-    New(RB2, Init(R3,
-      NewSItem(label_browser_scope,
-      NewSItem(label_browser_reference,
-      nil)))
-    );
-    Insert(RB2);
-    R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
-    Insert(New(PLabel, Init(R3, label_browser_preferredpane, RB2)));
+    if Browser=nil then
+    begin
+      R.Move(0,R.B.Y-R.A.Y+1);
+      R.B.Y:=R.A.Y+1+2; R2.Copy(R);
+      R3.Copy(R2); R3.B.X:=R3.A.X+(R3.B.X-R3.A.X) div 2-1; Inc(R3.A.Y);
+      New(RB1, Init(R3,
+        NewSItem(label_browser_newbrowser,
+        NewSItem(label_browser_currentbrowser,
+        nil)))
+      );
+      Insert(RB1);
+      R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
+      Insert(New(PLabel, Init(R3, label_browser_subbrowsing, RB1)));
+      R3.Copy(R2); R3.A.X:=R3.B.X-(R3.B.X-R3.A.X) div 2+1; Inc(R3.A.Y);
+      New(RB2, Init(R3,
+        NewSItem(label_browser_scope,
+        NewSItem(label_browser_reference,
+        nil)))
+      );
+      Insert(RB2);
+      R3.Move(0,-1); R3.B.Y:=R3.A.Y+1;
+      Insert(New(PLabel, Init(R3, label_browser_preferredpane, RB2)));
+      RB1^.Value:=BrowserSub;
+      RB2^.Value:=BrowserPane;
+    end;
 
     R.Move(0,R.B.Y-R.A.Y+1);
-    R.B.Y:=R.A.Y+1+1; R2.Copy(R); Inc(R2.A.Y);
+    R.B.Y:=R.A.Y+1+DisplayHight; R2.Copy(R); Inc(R2.A.Y);
     New(CB2, Init(R2,
       NewSItem(RExpand(label_browser_qualifiedsymbols,21+2),
       NewSItem(label_browser_sortsymbols,
@@ -1406,11 +1436,26 @@ begin
     Insert(CB2);
     R2.Move(0,-1); R2.B.Y:=R2.A.Y+1;
     Insert(New(PLabel, Init(R2, label_browser_display, CB2)));
+    CB2^.Value:=DisplayFlags;
   end;
   InsertButtons(D);
   CB1^.Select;
   if Desktop^.ExecView(D)=cmOK then
   begin
+    SymbolsFlags:=CB1^.Value;
+    DisplayFlags:=CB2^.Value;
+    if Browser=nil then
+    begin
+      {DefaultBrowserFlags:=BrowserFlags;}
+      DefaultSymbolFlags:=SymbolsFlags;
+      DefaultDispayFlags:=DisplayFlags;
+      DefaultBrowserSub:=RB1^.Value;
+      DefaultBrowserPane:=RB2^.Value;
+    end else
+    begin
+      BrowserFlags:=DisplayFlags shl 30 or SymbolsFlags;
+      Browser^.SetFlags(BrowserFlags);
+    end;
   end;
   Dispose(D, Done);
 end;

+ 39 - 1
packages/ide/fpsymbol.pas

@@ -34,6 +34,29 @@ const
       btUnitInfo    = 4;
       btBreakWatch  = 7;
 
+      {Symbol Flags}
+      bfUnits            = $00000001;
+      bfLabels           = $00000002;
+      bfConstants        = $00000004;
+      bfTypes            = $00000008;
+      bfVariables        = $00000010;
+      bfProcedures       = $00000020;
+      bfInherited        = $00000040;
+      {Display Flags}
+      bfQualifiedSymbols = $40000000;
+      bfSortAlways       = $80000000;
+
+const
+      DefaultSymbolFlags : longint = bfUnits or
+         bfLabels or bfConstants or bfTypes or bfVariables or bfProcedures;
+      DefaultDispayFlags : longint = (bfQualifiedSymbols) shr 30;
+      { Note: default browser flags will be created with formula:
+        BrowserFlags:=DefaultDispayFlags shl 30 or DefaultSymbolFlags;
+      }
+      DefaultBrowserSub  : longint = 0;
+      DefaultBrowserPane : longint = 0;
+
+
 type
     PBrowserWindow = ^TBrowserWindow;
 
@@ -198,8 +221,11 @@ type
       procedure   SelectTab(BrowserTab: Sw_integer); virtual;
       function    GetPalette: PPalette; virtual;
       function    Disassemble : boolean;
+      function    GetFlags: longint; virtual;
+      procedure   SetFlags(AFlags: longint); virtual;
       destructor  Done;virtual;
     private
+      BrowserFlags  : Longint;
       PageTab       : PBrowserTab;
       ST            : PStaticText;
       Sym           : PSymbol;
@@ -608,7 +634,8 @@ end;
 
 procedure TSymbolView.OptionsDlg;
 begin
-  { Abstract }
+  if MyBW<> nil then
+    Message(@IDEApp, evCommand, cmBrowserOptions, MyBW);   { Send message }
 end;
 
 destructor TSymbolView.Done;
@@ -1594,6 +1621,7 @@ begin
   HelpCtx:=hcBrowserWindow;
   Sym:=ASym;
   Prefix:=NewStr(APrefix);
+  BrowserFlags:=DefaultDispayFlags shl 30 or DefaultSymbolFlags;
 
   GetExtent(R); R.Grow(-1,-1); R.B.Y:=R.A.Y+1;
 {$ifndef NODEBUG}
@@ -1904,6 +1932,16 @@ begin
 {$endif NODEBUG}
 end;
 
+function TBrowserWindow.GetFlags: longint;
+begin
+  GetFlags:=BrowserFlags;
+end;
+
+procedure TBrowserWindow.SetFlags(AFlags: longint);
+begin
+  BrowserFlags:=AFlags;
+end;
+
 procedure TBrowserWindow.SetState(AState: Word; Enable: Boolean);
 {var OldState: word;}
 begin