home *** CD-ROM | disk | FTP | other *** search
Text File | 1994-10-10 | 2.3 KB | 111 lines | [TEXT/PJMM] |
- unit MyWindowsMenu;
-
- interface
-
- procedure InitWindowsMenu;
- procedure FinishWindowsMenu;
- procedure UpdateWindowsMenu;
- function DoWindowsMenuItem (themenu, theitem: integer): boolean;
-
- implementation
-
- uses
- MyFMenus, MyTypes, MyMenus, MyOOMainLoop, MyStrings;
-
- var
- menu: MenuHandle;
- skip, base: integer;
- wason: boolean;
-
- procedure InitWindowsMenu;
- begin
- menu := GetFMenu(M_Windows);
- InsertMenu(menu, 0);
- skip := CountMItems(menu);
- base := skip + 1 + ord(skip > 0);
- wason := true;
- UpdateWindowsMenu;
- end;
-
- procedure FinishWindowsMenu;
- begin
- end;
-
- function GetNextWindow (var wp: WindowPeek): boolean;
- begin
- if wp = nil then begin
- wp := WindowPeek(FrontWindow);
- end
- else begin
- wp := wp^.nextWindow;
- end;
- while (wp <> nil) & (not wp^.visible | (GetWType(windowPtr(wp)) = WT_NotMine)) do begin
- wp := wp^.nextWindow;
- end;
- GetNextWindow := wp <> nil;
- end;
-
- procedure SetEnableMenu (on: boolean);
- begin
- if (skip > 0) then begin
- SetFMenu(M_Windows);
- if (BAND(menu^^.enableFlags, BSL(1, skip) - 1) <> 0) then begin
- on := true;
- end;
- end;
- if wason <> on then begin
- wason := on;
- SetItemEnable(menu, 0, on);
- DrawMenuBar;
- end;
- end;
-
- procedure UpdateWindowsMenu;
- var
- wp: WindowPeek;
- title: Str255;
- i: integer;
- first: boolean;
- begin
- for i := CountMItems(menu) downto skip + 1 do begin
- DelMenuItem(menu, i);
- end;
- wp := nil;
- first := true;
- while GetNextWindow(wp) do begin
- if first and (skip > 0) then begin
- AppendMenu(menu, '(-');
- end;
- AppendMenu(menu, 'fred');
- GetWTitle(windowPtr(wp), title);
- LimitStringLength(title, 40, '…');
- SetItem(menu, CountMItems(menu), title);
- if first & (WindowPtr(wp) = FrontWindow) then begin
- SetItemMark(menu, base, chr(checkMark));
- end;
- first := false;
- end;
- SetEnableMenu(not first);
- end;
-
- function DoWindowsMenuItem (themenu, theitem: integer): boolean;
- var
- wp: WindowPeek;
- begin
- DoWindowsMenuItem := false;
- if (themenu = M_Windows) and (theitem >= base) then begin
- DoWindowsMenuItem := true;
- wp := nil;
- while (theitem >= base) do begin
- if not GetNextWindow(wp) then
- leave;
- theitem := theitem - 1;
- end;
- if wp <> nil then begin
- SelectWindow(windowPtr(wp));
- end;
- HiliteMenu(0);
- end;
- end;
-
- end.