123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380 |
- {
- $Id$
- This file is part of the Free Pascal Integrated Development Environment
- Copyright (c) 1998 by Berczi Gabor
- Window menu entries
- See the file COPYING.FPC, included in this distribution,
- for details about the copyright.
- This program 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.
- **********************************************************************}
- procedure TIDEApp.CloseAll;
- procedure SendClose(P: PView); {$ifndef FPC}far;{$endif}
- begin
- Message(P,evCommand,cmClose,nil);
- end;
- begin
- Desktop^.ForEach(@SendClose);
- end;
- type
- PWindowListBox = ^TWindowListBox;
- TWindowListBox = object(TAdvancedListBox)
- constructor Init(var Bounds: TRect; AScrollBar: PScrollBar);
- function GetText(Item,MaxLen: Sw_Integer): String; virtual;
- end;
- PWindowListDialog = ^TWindowListDialog;
- TWindowListDialog = object(TCenterDialog)
- constructor Init;
- procedure HandleEvent(var Event: TEvent); virtual;
- destructor Done; virtual;
- private
- LB: PWindowListBox;
- C : PCollection;
- BtnShow,BtnHide: PNoUpdateButton;
- procedure UpdateList;
- procedure UpdateButtons;
- end;
- constructor TWindowListBox.Init(var Bounds: TRect; AScrollBar: PScrollBar);
- begin
- inherited Init(Bounds,1,AScrollBar);
- end;
- function TWindowListBox.GetText(Item,MaxLen: Sw_Integer): String;
- var P: PView;
- S: string;
- begin
- P:=List^.At(Item);
- case P^.HelpCtx of
- hcSourceWindow : S:=PSourceWindow(P)^.GetTitle(MaxLen);
- hcInfoWindow : S:=PProgramInfoWindow(P)^.GetTitle(MaxLen);
- hcHelpWindow : S:=PHelpWindow(P)^.GetTitle(MaxLen);
- hcCalcWindow : S:=PCalculator(P)^.GetTitle(MaxLen);
- hcBrowserWindow: S:=PBrowserWindow(P)^.GetTitle(MaxLen);
- hcCompilerMessagesWindow,
- hcMessagesWindow:S:=PMessagesWindow(P)^.GetTitle(MaxLen);
- hcGDBWindow,
- hcDisassemblyWindow,
- hcWatchesWindow,
- hcStackWindow,
- hcRegistersWindow,
- hcFPURegisters,
- hcClipboardWindow,
- hcASCIITableWindow,
- hcUserScreenWindow,
- hcBreakpointListWindow :
- S:=PWindow(P)^.GetTitle(MaxLen);
- else S:='???? - '+PWindow(P)^.GetTitle(MaxLen);
- end;
- if PWindow(P)^.Number<>0 then
- S:=S+'('+IntToStr(PWindow(P)^.Number)+')';
- if P^.GetState(sfVisible) then S:=' '+S else
- begin
- S:='*'+S+' - '+msg_windowlist_hidden;
- end;
- GetText:=copy(S,1,MaxLen);
- end;
- constructor TWindowListDialog.Init;
- var R,R2: TRect;
- SB: PScrollBar;
- begin
- R.Assign(0,0,round(ScreenWidth*5/8),15);
- inherited Init(R, dialog_windowlist);
- HelpCtx:=hcWindowList;
- New(C, Init(20,10));
- GetExtent(R); R.Grow(-2,-2); Inc(R.A.Y); R.B.X:=R.B.X-13;
- R2.Copy(R); R2.Move(1,0); R2.A.X:=R2.B.X-1;
- New(SB, Init(R2)); Insert(SB);
- New(LB, Init(R, SB));
- LB^.Default:=true;
- LB^.NewList(C);
- UpdateList;
- if C^.Count>=2 then
- if PWindow(C^.At(1))^.GetState(sfVisible) then
- LB^.FocusItem(1); { focus the 2nd one }
- Insert(LB);
- R2.Copy(R); Dec(R2.A.Y); R2.B.Y:=R2.A.Y+1;
- Insert(New(PLabel, Init(R2, label_wndlist_windows, LB)));
- GetExtent(R); R.Grow(-2,-2); Inc(R.A.Y); R.A.X:=R.B.X-13+1; R.B.Y:=R.A.Y+2;
- Insert(New(PButton, Init(R, button_OK, cmOK, bfDefault)));
- R.Move(0,2);
- Insert(New(PButton, Init(R, button_Delete, cmDeleteItem, bfNormal)));
- R.Move(0,2);
- New(BtnShow, Init(R, button_Show, cmShowItem, bfNormal));
- Insert(BtnShow);
- R.Move(0,2);
- New(BtnHide, Init(R, button_Hide, cmHideItem, bfNormal));
- Insert(BtnHide);
- R.Move(0,2);
- Insert(New(PButton, Init(R, button_Cancel, cmCancel, bfNormal)));
- LB^.Select;
- PutCommand(@Self,evBroadcast,cmListFocusChanged,LB);
- end;
- procedure TWindowListDialog.UpdateList;
- var VisState: boolean;
- procedure AddIt(P: PView); {$ifndef FPC}far;{$endif}
- begin
- if (P<>pointer(Desktop^.Background)) and
- (P^.GetState(sfDisabled)=false) and
- ((P^.Options and ofSelectable)<>0) and
- (P^.GetState(sfVisible)=VisState) then
- C^.Insert(P);
- end;
- begin
- C^.DeleteAll;
- VisState:=true; Desktop^.ForEach(@AddIt); { add visible windows to list }
- VisState:=false; Desktop^.ForEach(@AddIt); { add hidden windows }
- LB^.SetRange(C^.Count);
- UpdateButtons;
- ReDraw;
- end;
- procedure TWindowListDialog.UpdateButtons;
- var W: PView;
- begin
- if LB^.Range>0 then
- begin
- W:=LB^.List^.At(LB^.Focused);
- if Assigned(BtnShow) then
- BtnShow^.SetState(sfDisabled,W^.GetState(sfVisible));
- if Assigned(BtnHide) then
- BtnHide^.SetState(sfDisabled,not W^.GetState(sfVisible));
- end
- else
- begin
- BtnShow^.SetState(sfDisabled,true);
- BtnHide^.SetState(sfDisabled,true);
- end;
- ReDraw;
- end;
- procedure TWindowListDialog.HandleEvent(var Event: TEvent);
- var W: PWindow;
- begin
- case Event.What of
- evKeyDown :
- case Event.KeyCode of
- kbDel :
- begin
- Message(@Self,evCommand,cmDeleteItem,nil);
- ClearEvent(Event);
- end;
- end;
- evBroadcast :
- case Event.Command of
- cmListFocusChanged :
- if Event.InfoPtr=LB then
- UpdateButtons;
- end;
- evCommand :
- case Event.Command of
- cmDeleteItem :
- if C^.Count>0 then
- begin
- Message(C^.At(LB^.Focused),evCommand,cmClose,nil);
- UpdateList;
- ClearEvent(Event);
- end;
- cmShowItem :
- if C^.Count>0 then
- begin
- PWindow(C^.At(LB^.Focused))^.Show;
- UpdateList;
- ClearEvent(Event);
- end;
- cmHideItem :
- if C^.Count>0 then
- begin
- PWindow(C^.At(LB^.Focused))^.Hide;
- UpdateList;
- ClearEvent(Event);
- end;
- cmOK :
- if C^.Count>0 then
- begin
- W:=PWindow(C^.At(LB^.Focused));
- if W^.GetState(sfVisible)=false then
- W^.Show;
- W^.MakeFirst;
- end;
- end;
- end;
- inherited HandleEvent(Event);
- end;
- destructor TWindowListDialog.Done;
- begin
- if C<>nil then begin C^.DeleteAll; Dispose(C, Done); end;
- inherited Done;
- end;
- procedure TIDEApp.WindowList;
- var W: PWindowListDialog;
- begin
- New(W,Init);
- ExecView(W);
- Dispose(W,Done);
- if assigned(Desktop^.Current) then
- begin
- Desktop^.Lock;
- { force correct commands to be enabled }
- Desktop^.Current^.SetState(sfActive,false);
- Desktop^.Current^.SetState(sfActive,true);
- Desktop^.UnLock;
- end;
- end;
- {
- $Log$
- Revision 1.1 2001-08-04 11:30:23 peter
- * ide works now with both compiler versions
- Revision 1.1.2.8 2001/03/12 17:34:56 pierre
- + Disassembly window started
- Revision 1.1.2.7 2001/03/09 15:04:30 pierre
- + recognize FPU window
- Revision 1.1.2.6 2000/11/29 11:26:00 pierre
- + TFPDlgWindow that handles cmSearchWindow
- Revision 1.1.2.5 2000/11/29 00:54:45 pierre
- + preserve window number and save special windows
- Revision 1.1.2.4 2000/11/23 16:33:31 pierre
- * fix Alt-X problem and set HelpCtx for most dialogs
- Revision 1.1.2.3 2000/10/31 07:44:33 pierre
- * Window List problem solved in a different way
- Revision 1.1.2.2 2000/10/24 00:21:59 pierre
- * fix the greyed save after window list box
- Revision 1.1.2.1 2000/08/15 03:40:53 peter
- [*] no more fatal exits when the IDE can't find the error file (containing
- the redirected assembler/linker output) after compilation
- [*] hidden windows are now added always at the end of the Window List
- [*] TINIFile parsed entries encapsulated in string delimiters incorrectly
- [*] selection was incorrectly adjusted when typing in overwrite mode
- [*] the line wasn't expanded when it's end was reached in overw. mode
- [*] the IDE now tries to locate source files also in the user specified
- unit dirs (for ex. as a response to 'Open at cursor' (Ctrl+Enter) )
- [*] 'Open at cursor' is now aware of the extension (if specified)
- Revision 1.1 2000/07/13 09:48:35 michael
- + Initial import
- Revision 1.18 2000/06/16 08:50:41 pierre
- + new bunch of Gabor's changes
- Revision 1.17 2000/05/02 08:42:28 pierre
- * new set of Gabor changes: see fixes.txt
- Revision 1.16 2000/04/18 11:42:37 pierre
- lot of Gabor changes : see fixes.txt
- Revision 1.15 2000/03/07 21:51:52 pierre
- * Reconginze UserScreenWindow
- Revision 1.14 2000/01/28 22:36:46 pierre
- * avoid unknown type in alt+0 dialog for Ascii Chart and Clipboard
- Revision 1.13 2000/01/10 00:24:18 pierre
- * register window type added
- Revision 1.12 1999/09/09 14:09:58 pierre
- + StackWindow is a known window type
- Revision 1.11 1999/07/10 01:24:20 pierre
- + First implementation of watches window
- Revision 1.10 1999/06/30 23:58:18 pierre
- + BreakpointsList Window implemented
- with Edit/New/Delete functions
- + Individual breakpoint dialog with support for all types
- ignorecount and conditions
- (commands are not yet implemented, don't know if this wolud be useful)
- awatch and rwatch have problems because GDB does not annotate them
- I fixed v4.16 for this
- Revision 1.9 1999/06/29 22:50:15 peter
- * more fixes from gabor
- Revision 1.8 1999/06/28 19:32:23 peter
- * fixes from gabor
- Revision 1.7 1999/03/01 15:42:00 peter
- + Added dummy entries for functions not yet implemented
- * MenuBar didn't update itself automatically on command-set changes
- * Fixed Debugging/Profiling options dialog
- * TCodeEditor converts spaces to tabs at save only if efUseTabChars is
- set
- * efBackSpaceUnindents works correctly
- + 'Messages' window implemented
- + Added '$CAP MSG()' and '$CAP EDIT' to available tool-macros
- + Added TP message-filter support (for ex. you can call GREP thru
- GREP2MSG and view the result in the messages window - just like in TP)
- * A 'var' was missing from the param-list of THelpFacility.TopicSearch,
- so topic search didn't work...
- * In FPHELP.PAS there were still context-variables defined as word instead
- of THelpCtx
- * StdStatusKeys() was missing from the statusdef for help windows
- + Topic-title for index-table can be specified when adding a HTML-files
- Revision 1.6 1999/01/21 11:54:22 peter
- + tools menu
- + speedsearch in symbolbrowser
- * working run command
- Revision 1.5 1999/01/12 14:29:37 peter
- + Implemented still missing 'switch' entries in Options menu
- + Pressing Ctrl-B sets ASCII mode in editor, after which keypresses (even
- ones with ASCII < 32 ; entered with Alt+<###>) are interpreted always as
- ASCII chars and inserted directly in the text.
- + Added symbol browser
- * splitted fp.pas to fpide.pas
- Revision 1.4 1999/01/04 11:49:49 peter
- * 'Use tab characters' now works correctly
- + Syntax highlight now acts on File|Save As...
- + Added a new class to syntax highlight: 'hex numbers'.
- * There was something very wrong with the palette managment. Now fixed.
- + Added output directory (-FE<xxx>) support to 'Directories' dialog...
- * Fixed some possible bugs in Running/Compiling, and the compilation/run
- process revised
- Revision 1.3 1998/12/28 15:47:50 peter
- + Added user screen support, display & window
- + Implemented Editor,Mouse Options dialog
- + Added location of .INI and .CFG file
- + Option (INI) file managment implemented (see bottom of Options Menu)
- + Switches updated
- + Run program
- Revision 1.2 1998/12/23 22:58:19 peter
- * fixed windowlist for fpc
- Revision 1.1 1998/12/22 14:27:54 peter
- * moved
- Revision 1.3 1998/12/22 10:39:50 peter
- + options are now written/read
- + find and replace routines
- }
|