Files
befpc/bepascal/bepascal/be/interface/view.pp

505 lines
14 KiB
ObjectPascal

{ BePascal - A pascal wrapper around the BeOS API
Copyright (C) 2002 Olivier Coursiere
This library is free software; you can redistribute it and/or
modify it under the terms of the GNU Library General Public
License as published by the Free Software Foundation; either
version 2 of the License, or (at your option) any later version.
This library 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. See the GNU
Library General Public License for more details.
You should have received a copy of the GNU Library General Public
License along with this library; if not, write to the Free
Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
}
unit View;
interface
uses
beobj, handler, rect, os, application, appdefs, message,
graphicdefs;
type
// TWindow = class(TBeObject);
TView = class(THandler)
public
constructor Create(frame : TRect; name : PChar; resizingMode, flags : Cardinal);
destructor Destroy; override;
// hook functions
procedure AllAttached; virtual;
procedure AllDetached; virtual;
procedure AttachedToWindow; virtual;
procedure DetachedFromWindow; virtual;
procedure Draw(updateRect : TRect); virtual;
procedure DrawAfterChildren(updateRect : TRect); virtual;
procedure FrameMoved(parentPoint : TPoint); virtual;
procedure FrameResized(width, height : double); virtual;
procedure GetPreferredSize(var width : double; var height : double); virtual;
procedure ResizeToPreferred; virtual;
procedure KeyDown(bytes : PChar; numBytes : integer); virtual;
procedure KeyUp(bytes : PChar; numBytes : integer); virtual;
procedure MouseDown(point : TPoint); virtual;
procedure MouseMoved(point : TPoint; transit : Cardinal; message : TMessage); virtual;
procedure MouseUp(point : TPoint); virtual;
procedure Pulse; virtual;
// procedure TargetedByScrollView(scroller : TScrollView); virtual; // Need BScrollView
procedure WindowActivated(active : boolean); virtual;
// End hook functions
function RemoveSelf : boolean;
procedure AddChild(aView, before : TView);
function RemoveChild(aView : TView) : boolean;
function CountChildren : integer;
function ChildAt(index : integer) : TView;
function NextSibling : TView;
function PreviousSibling : TView;
// function Window : TWindow;
procedure SetViewColor(rgb_color : TRGB_color);
end;
function BView_Create(AObject : TObject; frame : TCPlusObject; name : PChar;
resizingMode, flags : cardinal) : TCplusObject; cdecl; external BePascalLibName name 'BView_Create_1';
procedure BView_Free(CPlusObject : TCPlusObject); cdecl; external BePascalLibName name 'BView_Free';
function BView_RemoveSelf(CPlusObject : TCPlusObject) : boolean; cdecl; external BePascalLibName name 'BView_RemoveSelf';
procedure BView_AddChild(CPlusObject : TCPlusObject; aView : TCPlusObject; before : TCPlusObject); cdecl; external BePascalLibName name 'BView_AddChild';
function BView_RemoveChild(CPlusObject : TCPlusObject; aView : TCPlusObject) : boolean; cdecl; external BePascalLibName name 'BView_RemoveChild';
function BView_CountChildren(CPlusObject : TCPlusObject) : integer; cdecl; external BePascalLibName name 'BView_CountChildren';
function BView_NextSibling(CPlusObject : TCPlusObject) : TCPlusObject; cdecl; external BePascalLibName name 'BView_NextSibling';
function BView_PreviousSibling(CPlusObject : TCPlusObject) : TCPlusObject; cdecl; external BePascalLibName name 'BView_NextSibling';
function BView_ChildAt(CPlusObject : TCPlusObject; index : integer) : TCPlusObject; cdecl; external BePascalLibName name 'BView_ChildAt';
function BView_Window(CPlusObject : TCPlusObject) : TCPlusObject; cdecl; external BePascalLibName name 'BView_Window';
procedure BView_Draw(CPlusObject : TCPlusObject; aRect : TCPlusObject); cdecl; external BePascalLibName name 'BView_Draw';
procedure BView_SetViewColor(CPlusObject : TCPlusObject; c : TRGB_color); cdecl; external BePascalLibName name 'BView_SetViewColor';
var
// resizingMode mask
B_FOLLOW_NONE : Cardinal;
B_FOLLOW_ALL_SIDES : Cardinal;
B_FOLLOW_ALL : Cardinal;
B_FOLLOW_LEFT : Cardinal;
B_FOLLOW_RIGHT : Cardinal;
B_FOLLOW_LEFT_RIGHT : Cardinal;
B_FOLLOW_H_CENTER : Cardinal;
B_FOLLOW_TOP : Cardinal;
B_FOLLOW_BOTTOM : Cardinal;
B_FOLLOW_TOP_BOTTOM : Cardinal;
B_FOLLOW_V_CENTER : Cardinal;
const
// flags
B_FULL_UPDATE_ON_RESIZE : Cardinal = 31;
_B_RESERVED1_ : Cardinal = 30;
B_WILL_DRAW : Cardinal = 29;
B_PULSE_NEEDED : Cardinal = 28;
B_NAVIGABLE_JUMP : Cardinal = 27;
B_FRAME_EVENTS : Cardinal = 26;
B_NAVIGABLE : Cardinal = 25;
B_SUBPIXEL_PRECISE : Cardinal = 24;
B_DRAW_ON_CHILDREN : Cardinal = 23;
_B_RESERVED7_ : Cardinal = 22;
implementation
var
View_AllAttached_hook : Pointer; cvar; external;
View_AllDetached_hook : Pointer; cvar; external;
View_AttachedToWindow_hook : Pointer; cvar; external;
View_DetachedFromWindow_hook : Pointer; cvar; external;
View_Draw_hook : Pointer; cvar; external;
View_DrawAfterChildren_hook : Pointer; cvar; external;
View_FrameMoved_hook : Pointer; cvar; external;
View_FrameResized_hook : Pointer; cvar; external;
View_GetPreferredSize_hook : Pointer; cvar; external;
View_ResizeToPreferred_hook : Pointer; cvar; external;
View_KeyDown_hook : Pointer; cvar; external;
View_KeyUp_hook : Pointer; cvar; external;
View_MouseDown_hook : Pointer; cvar; external;
View_MouseMoved_hook : Pointer; cvar; external;
View_MouseUp_hook : Pointer; cvar; external;
View_Pulse_hook : Pointer; cvar; external;
View_TargetedByScrollView_hook : Pointer; cvar; external;
View_WindowActivated_hook : Pointer; cvar; external;
// View hook functions
{
View_AllAttached_hook
View_AllDetached_hook
View_AttachedToWindow_hook
View_DetachedFromWindow_hook
View_Draw_hook
View_DrawAfterChildren_hook
View_FrameMoved_hook
View_FrameResized_hook
View_GetPreferredSize_hook
View_ResizeToPreferred_hook
View_KeyDown_hook
View_KeyUp_hook
View_MouseDown_hook
View_MouseMoved_hook
View_MouseUp_hook
View_Pulse_hook
View_TargetedByScrollView_hook
View_WindowActivated_hook}
constructor TView.Create(frame : TRect; name : PChar; resizingMode, flags : Cardinal);
begin
inherited Create;
CPlusObject := BView_Create(Self, frame.CPlusObject, name, resizingMode, flags);
end;
destructor TView.Destroy;
begin
BView_Free(Self.CPlusObject);
inherited;
end;
// Hook functions
procedure TView.AllAttached;
begin
end;
procedure TView.AllDetached;
begin
end;
procedure TView.AttachedToWindow;
begin
end;
procedure TView.DetachedFromWindow;
begin
end;
procedure TView.Draw(updateRect : TRect);
begin
WriteLn('Drawing view');
end;
procedure TView.DrawAfterChildren(updateRect : TRect);
begin
end;
procedure TView.FrameMoved(parentPoint : TPoint);
begin
end;
procedure TView.FrameResized(width, height : double);
begin
end;
procedure TView.GetPreferredSize(var width : double; var height : double);
begin
end;
procedure TView.ResizeToPreferred;
begin
end;
procedure TView.KeyDown(bytes : PChar; numBytes : integer);
begin
end;
procedure TView.KeyUp(bytes : PChar; numBytes : integer);
begin
end;
procedure TView.MouseDown(point : TPoint);
begin
end;
procedure TView.MouseMoved(point : TPoint; transit : Cardinal; message : TMessage);
begin
end;
procedure TView.MouseUp(point : TPoint);
begin
end;
procedure TView.Pulse;
begin
end;
// procedure TView.TargetedByScrollView(); // Need BScrollView
//begin
//end;
procedure TView.WindowActivated(active : boolean);
begin
Writeln('WindowActivated in View');
end;
function TView.RemoveSelf : boolean;
begin
Result := BView_RemoveSelf(Self.CPlusObject);
end;
procedure TView.AddChild(aView, before : TView);
begin
if before <> nil then
BView_AddChild(Self.CPlusObject, aView.CPlusObject, before.CPlusObject)
else
BView_AddChild(Self.CPlusObject, aView.CPlusObject, nil);
end;
function TView.RemoveChild(aView : TView) : boolean;
begin
Result := BView_RemoveChild(Self.CPlusObject, aView);
end;
function TView.CountChildren : integer;
begin
Result := BView_CountChildren(Self.CPlusObject);
end;
function TView.ChildAt(index : integer) : TView;
begin
Result := TView.Wrap(BView_ChildAt(Self.CPlusObject, index));
end;
function TView.NextSibling : TView;
begin
Result := TView.Wrap(BView_NextSibling(Self.CPlusObject));
end;
function TView.PreviousSibling : TView;
begin
Result := TView.Wrap(BView_PreviousSibling(Self.CPlusObject));
end;
{function TView.Window : TWindow;
begin
Result := TWindow.Wrap(BView_Window(Self.CPlusObject));
end;}
procedure TView.SetViewColor(rgb_color : TRGB_color);
begin
BView_SetViewColor(Self.CPlusObject, rgb_color);
end;
// Hook functions
procedure View_AllAttached_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.AllAttached;
end;
procedure View_AllDetached_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.AllDetached;
end;
procedure View_AttachedToWindow_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.AttachedToWindow;
end;
procedure View_DetachedFromWindow_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.DetachedFromWindow;
end;
procedure View_Draw_hook_func(View : TView; aRect : TCPlusObject); cdecl;
var
Rect : TRect;
begin
Rect := TRect.Wrap(aRect);
try
if View <> nil then
View.Draw(Rect);
finally
Rect.UnWrap;
end;
end;
procedure View_DrawAfterChildren_hook_func(View : TView; aRect : TCPlusObject); cdecl;
var
Rect : TRect;
begin
Rect := TRect.Wrap(aRect);
try
if View <> nil then
View.DrawAfterChildren(Rect);
finally
Rect.UnWrap;
end;
end;
procedure View_FrameMoved_hook_func(View : TView; aPoint : TCPlusObject); cdecl;
var
Point : TPoint;
begin
Point := TPoint.Wrap(aPoint);
try
if View <> nil then
View.FrameMoved(Point);
finally
Point.UnWrap;
end;
end;
procedure View_FrameResized_hook_func(View : TView; width, height : double); cdecl;
begin
if View <> nil then
View.FrameResized(width, height);
end;
procedure View_GetPreferredSize_hook_func(View : TView; var width, height : double); cdecl;
begin
if View <> nil then
View.GetPreferredSize(width, height);
end;
procedure View_ResizeToPreferred_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.ResizeToPreferred;
end;
procedure View_KeyDown_hook_func(View : TView; bytes : PChar; numBytes : integer); cdecl;
begin
if View <> nil then
View.KeyDown(bytes, numBytes);
end;
procedure View_KeyUp_hook_func(View : TView; bytes : PChar; numBytes : integer); cdecl;
begin
if View <> nil then
View.KeyUp(bytes, numBytes);
end;
procedure View_MouseDown_hook_func(View : TView; aPoint : TCPlusObject); cdecl;
var
Point : TPoint;
begin
Point := TPoint.Wrap(aPoint);
try
if View <> nil then
View.MouseDown(Point);
finally
Point.UnWrap;
end;
end;
procedure View_MouseMoved_hook_func(View : TView; aPoint : TCPlusObject; transit : Cardinal; aMessage : TCPlusObject); cdecl;
var
Point : TPoint;
Message : TMessage;
begin
Point := TPoint.Wrap(aPoint);
try
Message := TMessage.Wrap(aMessage);
try
if View <> nil then
View.MouseMoved(Point, transit, Message);
finally
Message.UnWrap;
end;
finally
Point.UnWrap;
end;
end;
procedure View_MouseUp_hook_func(View : TView; aPoint : TCPlusObject); cdecl;
var
Point : TPoint;
begin
Point := TPoint.Wrap(aPoint);
try
if View <> nil then
View.MouseDown(Point);
finally
Point.UnWrap;
end;
end;
procedure View_Pulse_hook_func(View : TView); cdecl;
begin
if View <> nil then
View.Pulse;
end;
//procedure View_TargetedByScrollView_hook_func(View : TView; scroller : TScrollView); cdecl;
//var
// ScrollView : TScrollView;
//begin
// ScrollView := TScrollView.Wrap(scroller);
// try
// if View <> nil then
// View.TargetedByScrollView(ScrollView);
// finally
// ScrollView.UnWrap;
// end;
//end;
procedure View_WindowActivated_hook_func(View : TView; active : boolean); cdecl;
begin
if View <> nil then
View.WindowActivated(active);
end;
var
_B_FOLLOW_NONE : Cardinal; cvar; external;
_B_FOLLOW_ALL_SIDES : Cardinal; cvar; external;
_B_FOLLOW_ALL : Cardinal; cvar; external;
_B_FOLLOW_LEFT : Cardinal; cvar; external;
_B_FOLLOW_RIGHT : Cardinal; cvar; external;
_B_FOLLOW_LEFT_RIGHT : Cardinal; cvar; external;
_B_FOLLOW_H_CENTER : Cardinal; cvar; external;
_B_FOLLOW_TOP : Cardinal; cvar; external;
_B_FOLLOW_BOTTOM : Cardinal; cvar; external;
_B_FOLLOW_TOP_BOTTOM : Cardinal; cvar; external;
_B_FOLLOW_V_CENTER : Cardinal; cvar; external;
initialization
B_FOLLOW_NONE := _B_FOLLOW_NONE;
B_FOLLOW_ALL_SIDES := _B_FOLLOW_ALL_SIDES;
B_FOLLOW_ALL := _B_FOLLOW_ALL;
B_FOLLOW_LEFT := _B_FOLLOW_LEFT;
B_FOLLOW_RIGHT := _B_FOLLOW_RIGHT;
B_FOLLOW_LEFT_RIGHT := _B_FOLLOW_LEFT_RIGHT;
B_FOLLOW_H_CENTER := _B_FOLLOW_H_CENTER;
B_FOLLOW_TOP := _B_FOLLOW_TOP;
B_FOLLOW_BOTTOM := _B_FOLLOW_BOTTOM;
B_FOLLOW_TOP_BOTTOM := _B_FOLLOW_TOP_BOTTOM;
B_FOLLOW_V_CENTER := _B_FOLLOW_V_CENTER;
// Connecting hook functions
View_AllAttached_hook := @View_AllAttached_hook_func;
View_AllDetached_hook := @View_AllDetached_hook_func;
View_AttachedToWindow_hook := @View_AttachedToWindow_hook_func;
View_DetachedFromWindow_hook := @View_DetachedFromWindow_hook_func;
View_Draw_hook := @View_Draw_hook_func;
View_DrawAfterChildren_hook := @View_DrawAfterChildren_hook_func;
View_FrameMoved_hook := @View_FrameMoved_hook_func;
View_FrameResized_hook := @View_FrameResized_hook_func;
View_GetPreferredSize_hook := @View_GetPreferredSize_hook_func;
View_ResizeToPreferred_hook := @View_ResizeToPreferred_hook_func;
View_KeyDown_hook := @View_KeyDown_hook_func;
View_KeyUp_hook := @View_KeyUp_hook_func;
View_MouseDown_hook := @View_MouseDown_hook_func;
View_MouseMoved_hook := @View_MouseMoved_hook_func;
View_MouseUp_hook := @View_MouseUp_hook_func;
View_Pulse_hook := @View_Pulse_hook_func;
// View_TargetedByScrollView_hook := @View_TargetedByScrollView_hook_func;
View_WindowActivated_hook := @View_WindowActivated_hook_func;
end.