lazarus/ide/msgview.pp
lazarus 357b2f44d7 MG: new IDE window layout system
git-svn-id: trunk@839 -
2002-02-09 01:47:01 +00:00

170 lines
5.0 KiB
ObjectPascal

{
/***************************************************************************
MsgView.pp - compiler message view
----------------------------------
TMessagesView is responsible for displaying the
PPC386 compiler messages.
Initial Revision : Mon Apr 17th 2000
***************************************************************************/
/***************************************************************************
* *
* This program is free software; you can redistribute it and/or modify *
* it under the terms of the GNU General Public License as published by *
* the Free Software Foundation; either version 2 of the License, or *
* (at your option) any later version. *
* *
***************************************************************************/
}
unit MsgView;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, Controls, StdCtrls, Forms, LResources, IDEOptionDefs,
EnvironmentOpts;
type
TMessagesView = class(TForm)
MessageView : TListBox;
private
Function GetMessage : String;
Procedure MessageViewClicked(sender : TObject);
FOnSelectionChanged : TNotifyEvent;
LastSelectedIndex : Integer;
protected
Function GetSelectedLineIndex : Integer;
public
constructor Create(AOwner : TComponent); override;
Procedure Add(const Texts : String);
Procedure AddSeparator;
function MsgCount: integer;
Procedure Clear;
property Message : String read GetMessage;
property SelectedMessageIndex : Integer read GetSelectedLineIndex;
property OnSelectionChanged : TNotifyEvent read FOnSelectionChanged write FOnSelectionChanged;
end;
var
MessagesView : TMessagesView;
implementation
{ TMessagesView }
{------------------------------------------------------------------------------}
{ TMessagesView.Create }
{------------------------------------------------------------------------------}
constructor TMessagesView.Create(AOwner : TComponent);
var ALayout: TIDEWindowLayout;
Begin
inherited Create(AOwner);
if LazarusResources.Find(ClassName)=nil then begin
Caption:='Messages';
MessageView := TListBox.Create(Self);
With MessageView do Begin
Parent:= Self;
Align:= alClient;
Visible:= true;
end;
end;
Name := DefaultMessagesViewName;
LastSelectedIndex := -1;
ALayout:=EnvironmentOptions.IDEWindowLayoutList.
ItemByFormID(DefaultMessagesViewName);
ALayout.Form:=TForm(Self);
ALayout.Apply;
end;
{------------------------------------------------------------------------------}
{ TMessagesView.Add }
{------------------------------------------------------------------------------}
Procedure TMessagesView.Add(const Texts : String);
Begin
MessageView.Items.Add(Texts);
end;
Procedure TMessagesView.AddSeparator;
begin
if MsgCount>0 then
Add('----------------------------');
end;
function TMessagesView.MsgCount: integer;
begin
Result:=MessageView.Items.Count;
end;
{------------------------------------------------------------------------------}
{ TMessagesView.Clear }
{------------------------------------------------------------------------------}
Procedure TMessagesView.Clear;
Begin
MessageView.Clear;
if not Assigned(MessagesView.MessageView.OnCLick) then //:= @MessagesView.MessageViewClicked;
MessageView.OnClick := @MessageViewClicked;
end;
{------------------------------------------------------------------------------}
{ TMessagesView.GetMessage }
{------------------------------------------------------------------------------}
Function TMessagesView.GetMessage : String;
Begin
Result := '';
if (MessageView.Items.Count > 0) and (MessageView.SelCount > 0) then
Result := MessageView.Items.Strings[GetSelectedLineIndex];
end;
Function TMessagesView.GetSelectedLineIndex : Integer;
var
I : Integer;
Begin
Result := -1;
if (MessageView.Items.Count > 0) and (MessageView.SelCount > 0) then Begin
for i := 0 to MessageView.Items.Count-1 do
Begin
if MessageView.Selected[I] then
Begin
Result := I;
Break;
end;
end;
end;
end;
Procedure TMessagesView.MessageViewClicked(sender : TObject);
var
Temp : Integer; //this temporarily holds the line # of the selection
begin
if (MessageView.Items.Count > 0) and (MessageView.SelCount > 0) then
Begin
Temp := GetSelectedLineIndex;
if Temp <> LastSelectedIndex then
Begin
LastSelectedIndex := Temp;
If Assigned(OnSelectionChanged) then
OnSelectionChanged(self);
end;
end;
end;
initialization
{ $I msgview.lrs}
end.