505 lines
14 KiB
ObjectPascal
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. |