New window arrangement option in menu - Stepped.

This commit is contained in:
Margers 2025-02-17 09:20:16 +00:00
parent ed4544ce7a
commit 96b8a79563
4 changed files with 112 additions and 2 deletions

View File

@ -166,6 +166,9 @@ const
{ Command constants }
cmShowClipboard = 201;
cmStepped = 203;
cmSteppedRevers = 204;
cmTileVertical = 205;
cmFindProcedure = 206;
cmObjects = 207;
cmModules = 208;
@ -412,6 +415,9 @@ const
hcTarget = hcShift+cmTarget;
hcPrimaryFile = hcShift+cmPrimaryFile;
hcClearPrimary = hcShift+cmClearPrimary;
hcTileVertical = hcShift+cmTileVertical;
hcStepped = hcShift+cmStepped;
hcSteppedRevers = hcShift+cmSteppedRevers;
hcWindowList = hcShift+cmWindowList;
hcNewFromTemplate = hcShift+cmNewFromTemplate;
hcHelpTopicSearch = hcShift+cmHelpTopicSearch;

View File

@ -214,6 +214,7 @@ const
hint_windowmenu = 'Windows management commands';
hint_tile = 'Arrange windows on desktop by tiling';
hint_cascade = 'Arrange windows on desktop by cascading';
hint_stepped = 'Arrange windows on desktop by stepping';
hint_closeall = 'Close all windows on the desktop';
hint_resize = 'Change the size/postion of the active window';
hint_zoom = 'Enlarge or restore the size of the active window';
@ -391,6 +392,7 @@ begin
hcWindowMenu : S:=hint_windowmenu;
hcTile : S:=hint_tile;
hcCascade : S:=hint_cascade;
hcStepped : S:=hint_stepped;
hcCloseAll : S:=hint_closeall;
hcResize : S:=hint_resize;
hcZoom : S:=hint_zoom;

View File

@ -133,6 +133,10 @@ type
procedure OpenINI;
procedure SaveINI;
procedure SaveAsINI;
procedure TileVertical;
procedure Stepped(aDirection:boolean);
procedure UpdateTileMenu;
procedure UpdateSteppedMenu;
procedure CloseAll;
procedure WindowList;
procedure HelpContents;
@ -340,7 +344,10 @@ resourcestring menu_local_gotosource = '~G~oto source';
menu_window = '~W~indow';
menu_window_tile = '~T~ile';
menu_window_tile_vertical = '~T~ile (vertical)';
menu_window_cascade = 'C~a~scade';
menu_window_stepped = 'Steppe~d~';
menu_window_stepped_revers = 'Steppe~d~ (revers)';
menu_window_closeall = 'Cl~o~se all';
menu_window_resize = '~S~ize/Move';
menu_window_zoom = '~Z~oom';
@ -1076,6 +1083,7 @@ begin
NewSubMenu(menu_window, hcWindowMenu, NewMenu(
NewItem(menu_window_tile,'', kbNoKey, cmTile, hcTile,
NewItem(menu_window_cascade,'', kbNoKey, cmCascade, hcCascade,
NewItem(menu_window_stepped,'', kbNoKey, cmStepped, hcStepped,
NewItem(menu_window_closeall,'', kbNoKey, cmCloseAll, hcCloseAll,
NewLine(
NewItem(menu_window_resize,menu_key_window_resize, kbCtrlF5, cmResize, hcResize,
@ -1087,7 +1095,7 @@ begin
NewLine(
NewItem(menu_window_list,menu_key_window_list, kbAlt0, cmWindowList, hcWindowList,
NewItem(menu_window_update,'', kbNoKey, cmUpdate, hcUpdate,
nil)))))))))))))),
nil))))))))))))))),
NewSubMenu(menu_help, hcHelpMenu, NewMenu(
NewItem(menu_help_contents,'', kbNoKey, cmHelpContents, hcHelpContents,
NewItem(menu_help_index,menu_key_help_helpindex, kbShiftF1, cmHelpIndex, hcHelpIndex,
@ -1419,6 +1427,10 @@ begin
cmToolsBase+MaxToolCount
: ExecuteTool(Event.Command-cmToolsBase);
{ -- Window menu -- }
cmTile : begin UpdateTileMenu; Tile; end;
cmTileVertical : begin UpdateTileMenu; TileVertical; end;
cmStepped : begin UpdateSteppedMenu; Stepped(True); end;
cmSteppedRevers : begin UpdateSteppedMenu; Stepped(False); end;
cmCloseAll : CloseAll;
cmWindowList : WindowList;
cmUserScreenWindow: DoUserScreenWindow;
@ -1695,8 +1707,9 @@ procedure TIDEApp.Update;
begin
SetCmdState([cmSaveAll],IsThereAnyEditor);
SetCmdState([cmCloseAll,cmWindowList],IsThereAnyWindow);
SetCmdState([cmTile,cmCascade],IsThereAnyVisibleEditorWindow);
SetCmdState([cmTile,cmCascade,cmTileVertical,cmStepped,cmSteppedRevers],IsThereAnyVisibleEditorWindow);
SetCmdState([cmFindProcedure,cmObjects,cmModules,cmGlobals,cmSymbol],IsSymbolInfoAvailable);
{$ifndef NODEBUG}
SetCmdState([cmResetDebugger,cmUntilReturn],assigned(debugger) and debugger^.debuggee_started);
{$endif}

View File

@ -13,6 +13,95 @@
**********************************************************************}
procedure TIDEApp.TileVertical;
begin
if not assigned(Desktop) then exit;
Desktop^.TileColumnsFirst:=True;
Tile;
Desktop^.TileColumnsFirst:=False;
end;
FUNCTION Tileable (P: PView): Boolean;
BEGIN
Tileable := (P^.Options AND ofTileable <> 0) AND { View is tileable }
(P^.State AND sfVisible <> 0); { View is visible }
END;
{ This pritty much copy of window cascade }
{ added extra variable `Count` }
{ calculate one of `NR.A.Y` or `NR.A.X` in revers }
procedure TIDEApp.Stepped(aDirection:boolean);
var R: TRect;
VAR CascadeNum, Count: SmallInt; LastView: PView; Min, Max: TPoint;
PROCEDURE DoCount (P: PView);
BEGIN
If Tileable(P) Then Begin
Inc(CascadeNum); LastView := P; { Count steppable }
End;
END;
PROCEDURE DoCascade (P: PView);
VAR PState: Word; NR: TRect;
BEGIN
If Tileable(P) AND (CascadeNum >= 0) Then Begin { View steppable }
NR.Copy(R); { Copy rect area }
if aDirection then
begin
{option 1 active window in lowest position, window titles visible}
Inc(NR.A.X, Count*1-CascadeNum*1-1); { Inc x position }
Inc(NR.A.Y, CascadeNum); { Inc y position }
end else
begin
{option 2 active window in highest position, window titles not visible}
Inc(NR.A.X, CascadeNum*1); { Inc x position }
Inc(NR.A.Y, Count-CascadeNum-1); { Inc y position }
end;
PState := P^.State; { Hold view state }
P^.State := P^.State AND NOT sfVisible; { Temp stop draw }
P^.Locate(NR); { Locate the view }
P^.State := PState; { Now allow draws }
Dec(CascadeNum); { Dec count }
End;
END;
begin
if not assigned(Desktop) then exit;
GetTileRect(R); { Tileable area }
CascadeNum := 0; { Zero step count }
Desktop^.ForEach(TCallbackProcParam(@DoCount)); { Count stepable }
Count:=CascadeNum; { Keep count in Count }
If (CascadeNum>0) Then Begin
LastView^.SizeLimits(Min, Max); { Check size limits }
If (Min.X > R.B.X - R.A.X - CascadeNum) OR
(Min.Y > R.B.Y - R.A.Y - CascadeNum) Then
Desktop^.TileError Else Begin { Check for error }
Dec(CascadeNum); { One less view }
Desktop^.ForEach(TCallbackProcParam(@DoCascade)); { Stepped view }
Desktop^.DrawView; { Redraw now }
End;
End;
end;
procedure TIDEApp.UpdateTileMenu;
var MenuItem : PMenuItem;
bFirst : boolean;
begin
MenuItem:=PAdvancedMenuBar(MenuBar)^.GetMenuItem(cmTileVertical);
bFirst:=assigned(MenuItem);
ChangeMenu(PAdvancedMenuBar(MenuBar),bFirst,cmTile,menu_window_tile,cmTileVertical,menu_window_tile_vertical);
end;
procedure TIDEApp.UpdateSteppedMenu;
var MenuItem : PMenuItem;
bFirst : boolean;
begin
MenuItem:=PAdvancedMenuBar(MenuBar)^.GetMenuItem(cmSteppedRevers);
bFirst:=assigned(MenuItem);
ChangeMenu(PAdvancedMenuBar(MenuBar),bFirst,cmStepped,menu_window_stepped,cmSteppedRevers,menu_window_stepped_revers);
end;
procedure TIDEApp.CloseAll;
procedure SendClose(P: PView);