first update with BView support

This commit is contained in:
ocoursiere
2002-06-19 22:44:22 +00:00
parent 7e9c006cab
commit 41f6647332
9 changed files with 990 additions and 7 deletions

View File

@@ -28,6 +28,7 @@
#include <Handler.cpp>
#include <Looper.cpp>
#include <Window.cpp>
#include <View.cpp>
#include <Point.cpp>
#include <Rect.cpp>

View File

@@ -225,6 +225,18 @@ bool BMessage_WasDropped(TCPlusObject message)
return reinterpret_cast<BMessage*>(message)->WasDropped();
}
/***********************************************************************
* Method: BMessage::operator=
* Params: const BMessage &msg
* Returns: BMessage &
* Effects:
***********************************************************************/
BMessage &
BMessage_operator_equal(BMessage *Message, const BMessage &msg)
{
return Message->operator=(msg);
}
#if defined(__cplusplus)
}
#endif

View File

@@ -111,7 +111,7 @@ begin
Application.ReadyToRun;
end;
procedure Application_MessageReceived_hook_func(Application : TApplication; aMessage : TCPlusObject);
procedure Application_MessageReceived_hook_func(Application : TApplication; aMessage : TCPlusObject); cdecl;
var
Message : TMessage;
begin

View File

@@ -42,7 +42,7 @@ begin
WriteLn('Message reçue');
end;
procedure Handler_MessageReceived_hook_func(Handler : THandler; aMessage : TCPlusObject);
procedure Handler_MessageReceived_hook_func(Handler : THandler; aMessage : TCPlusObject); cdecl;
var
Message : TMessage;
begin

View File

@@ -70,7 +70,7 @@ end;
// hooks
procedure Looper_DispatchMessage_hook_func(Looper : TLooper;
aMessage : TCPlusObject; aTarget : TCPlusObject);
aMessage : TCPlusObject; aTarget : TCPlusObject); cdecl;
var
Message : TMessage;
Target : THandler;
@@ -89,7 +89,7 @@ begin
end;
end;
function Looper_QuitRequested_hook_func(Looper : TLooper) : boolean;
function Looper_QuitRequested_hook_func(Looper : TLooper) : boolean; cdecl;
begin
WriteLn('Hook QuitRequested !');
if Looper <> nil then

View File

@@ -0,0 +1,444 @@
/* 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
*/
#ifndef _VIEW_CPP_
#define _VIEW_CPP_
#include <View.h>
#include <OS.h>
#include <beobj.cpp>
// definition of callback function in BView
typedef void (*BView_AllAttached_hook) (TPasObject PasObject);
typedef void (*BView_AllDetached_hook) (TPasObject PasObject);
typedef void (*BView_AttachedToWindow_hook) (TPasObject PasObject);
typedef void (*BView_DetachedFromWindow_hook) (TPasObject PasObject);
typedef void (*BView_Draw_hook) (TPasObject PasObject, TCPlusObject updateRect);
typedef void (*BView_DrawAfterChildren_hook) (TPasObject PasObject, TCPlusObject updateRect);
typedef void (*BView_FrameMoved_hook) (TPasObject PasObject, TCPlusObject parentPoint);
typedef void (*BView_FrameResized_hook) (TPasObject PasObject, float width, float height);
typedef void (*BView_GetPreferredSize_hook) (TPasObject PasObject, float *width, float *height);
typedef void (*BView_ResizeToPreferred_hook) (TPasObject PasObject);
typedef void (*BView_KeyDown_hook) (TPasObject PasObject, const char *bytes, int32 numBytes);
typedef void (*BView_KeyUp_hook) (TPasObject PasObject, const char *bytes, int32 numBytes);
typedef void (*BView_MouseDown_hook) (TPasObject PasObject, TCPlusObject point);
typedef void (*BView_MouseMoved_hook) (TPasObject PasObject, TCPlusObject point, uint32 transit, TCPlusObject message);
typedef void (*BView_MouseUp_hook) (TPasObject PasObject, TCPlusObject point);
typedef void (*BView_Pulse_hook) (TPasObject PasObject);
typedef void (*BView_TargetedByScrollView_hook) (TPasObject PasObject, TCPlusObject scroller);
typedef void (*BView_WindowActivated_hook) (TPasObject PasObject, bool active);
#if defined(__cplusplus)
extern "C" {
#endif
uint32 _B_FOLLOW_NONE = B_FOLLOW_NONE;
uint32 _B_FOLLOW_ALL_SIDES = B_FOLLOW_ALL_SIDES;
uint32 _B_FOLLOW_ALL = B_FOLLOW_ALL;
uint32 _B_FOLLOW_LEFT = B_FOLLOW_LEFT;
uint32 _B_FOLLOW_RIGHT = B_FOLLOW_RIGHT;
uint32 _B_FOLLOW_LEFT_RIGHT = B_FOLLOW_LEFT_RIGHT;
uint32 _B_FOLLOW_H_CENTER = B_FOLLOW_H_CENTER;
uint32 _B_FOLLOW_TOP = B_FOLLOW_TOP;
uint32 _B_FOLLOW_BOTTOM = B_FOLLOW_BOTTOM;
uint32 _B_FOLLOW_TOP_BOTTOM = B_FOLLOW_TOP_BOTTOM;
uint32 _B_FOLLOW_V_CENTER = B_FOLLOW_V_CENTER;
BView_AllAttached_hook View_AllAttached_hook;
BView_AllDetached_hook View_AllDetached_hook;
BView_AttachedToWindow_hook View_AttachedToWindow_hook;
BView_DetachedFromWindow_hook View_DetachedFromWindow_hook;
BView_Draw_hook View_Draw_hook;
BView_DrawAfterChildren_hook View_DrawAfterChildren_hook;
BView_FrameMoved_hook View_FrameMoved_hook;
BView_FrameResized_hook View_FrameResized_hook;
BView_GetPreferredSize_hook View_GetPreferredSize_hook;
BView_ResizeToPreferred_hook View_ResizeToPreferred_hook;
BView_KeyDown_hook View_KeyDown_hook;
BView_KeyUp_hook View_KeyUp_hook;
BView_MouseDown_hook View_MouseDown_hook;
BView_MouseMoved_hook View_MouseMoved_hook;
BView_MouseUp_hook View_MouseUp_hook;
BView_Pulse_hook View_Pulse_hook;
BView_TargetedByScrollView_hook View_TargetedByScrollView_hook;
BView_WindowActivated_hook View_WindowActivated_hook;
#if defined(__cplusplus)
}
#endif
class BPView : public BView, public BPHandler
{
public:
BPView(TPasObject PasObject,
BRect frame,
const char *name,
uint32 resizingMode,
uint32 flags);
// virtual void DispatchMessage(BMessage *message, BHandler *target);
// virtual bool QuitRequested(void);
virtual void AllAttached(void);
virtual void AttachedToWindow(void);
virtual void AllDetached(void);
virtual void DetachedFromWindow(void);
virtual void Draw(BRect updateRect);
virtual void DrawAfterChildren(BRect updateRect);
virtual void FrameMoved(BPoint parentPoint);
virtual void FrameResized(float width, float height);
virtual void GetPreferredSize(float *width, float *height);
virtual void ResizeToPreferred(void);
virtual void KeyDown(const char *bytes, int32 numBytes);
virtual void KeyUp(const char *bytes, int32 numBytes);
virtual void MouseDown(BPoint point);
virtual void MouseMoved(BPoint point, uint32 transit, const BMessage *message);
virtual void MouseUp(BPoint point);
virtual void Pulse(void);
// virtual void TargetedByScrollView(BScrollView *scroller);
virtual void WindowActivated(bool active);
private:
};
BPView::BPView(TPasObject PasObject,
BRect frame,
const char *name,
uint32 resizingMode,
uint32 flags)
: BView(frame, name, resizingMode, flags),
BPHandler(PasObject)
{
}
void BPView::AllAttached(void)
{
View_AllAttached_hook(GetPasObject());
}
void BPView::AttachedToWindow(void)
{
View_AttachedToWindow_hook(GetPasObject());
}
void BPView::AllDetached(void)
{
View_AllDetached_hook(GetPasObject());
}
void BPView::DetachedFromWindow(void)
{
View_DetachedFromWindow_hook(GetPasObject());
}
void BPView::Draw(BRect updateRect)
{
View_Draw_hook(GetPasObject(), &updateRect);
}
void BPView::DrawAfterChildren(BRect updateRect)
{
View_DrawAfterChildren_hook(GetPasObject(), &updateRect);
}
void BPView::FrameMoved(BPoint parentPoint)
{
View_FrameMoved_hook(GetPasObject(), &parentPoint);
}
void BPView::FrameResized(float width, float height)
{
View_FrameResized_hook(GetPasObject(), width, height);
}
void BPView::GetPreferredSize(float *width, float *height)
{
View_GetPreferredSize_hook(GetPasObject(), width, height);
}
void BPView::ResizeToPreferred(void)
{
View_ResizeToPreferred_hook(GetPasObject());
}
void BPView::KeyDown(const char *bytes, int32 numBytes)
{
View_KeyDown_hook(GetPasObject(), bytes, numBytes);
}
void BPView::KeyUp(const char *bytes, int32 numBytes)
{
View_KeyUp_hook(GetPasObject(), bytes, numBytes);
}
void BPView::MouseDown(BPoint point)
{
View_MouseDown_hook(GetPasObject(), &point);
}
void BPView::MouseMoved(BPoint point, uint32 transit, const BMessage *message)
{
View_MouseMoved_hook(GetPasObject(), &point, transit, &message);
}
void BPView::MouseUp(BPoint point)
{
View_MouseUp_hook(GetPasObject(), &point);
}
void BPView::Pulse(void)
{
View_Pulse_hook(GetPasObject());
}
//void BPView::TargetedByScrollView(BScrollView *scroller)
//{
// View_TargetedByScrollView(GetPasObject(), scroller);
//}
void BPView::WindowActivated(bool active)
{
View_WindowActivated_hook(GetPasObject(), active);
}
#if defined(__cplusplus)
extern "C" {
#endif
TCPlusObject BView_Create_1(TPasObject PasObject,
BRect frame,
const char *name,
uint32 resizingMode,
uint32 flags)
{
return new BPView(PasObject, frame, name, resizingMode, flags);
}
void BView_Free(TCPlusObject View)
{
delete View;
}
/***********************************************************************
* Method: BView::Instantiate
* Params: BMessage *data
* Returns: BArchivable *
* Effects:
***********************************************************************/
BArchivable *
BView_Instantiate(BView *View, BMessage *data)
{
return View->Instantiate(data);
}
/***********************************************************************
* Method: BView::Archive
* Params: BMessage *data, bool deep
* Returns: status_t
* Effects:
***********************************************************************/
status_t
BView_Archive(BView *View, BMessage *data,
bool deep)
{
return View->Archive(data,
deep);
}
// TODO : implement hook functions
/***********************************************************************
* Method: BView::AttachedToWindow
* Params:
* Returns: void
* Effects:
***********************************************************************/
void
BView_AttachedToWindow(BView *View)
{
View->AttachedToWindow();
}
/***********************************************************************
* Method: BView::AllAttached
* Params:
* Returns: void
* Effects:
***********************************************************************/
void
BView_AllAttached(BView *View)
{
View->AllAttached();
}
/***********************************************************************
* Method: BView::DetachedFromWindow
* Params:
* Returns: void
* Effects:
***********************************************************************/
void
BView_DetachedFromWindow(BView *View)
{
View->DetachedFromWindow();
}
/***********************************************************************
* Method: BView::AllDetached
* Params:
* Returns: void
* Effects:
***********************************************************************/
void
BView_AllDetached(BView *View)
{
View->AllDetached();
}
// END TODO implement hook functions
/***********************************************************************
* Method: BView::AddChild
* Params: BView *child, BView *before
* Returns: void
* Effects:
***********************************************************************/
void
BView_AddChild(BView *View, BView *child,
BView *before)
{
View->AddChild(child,
before);
}
/***********************************************************************
* Method: BView::RemoveChild
* Params: BView *child
* Returns: bool
* Effects:
***********************************************************************/
bool
BView_RemoveChild(BView *View, BView *child)
{
return View->RemoveChild(child);
}
/***********************************************************************
* Method: BView::CountChildren
* Params:
* Returns: int32
* Effects:
***********************************************************************/
int32
BView_CountChildren(BView *View)
{
return View->CountChildren();
}
/***********************************************************************
* Method: BView::ChildAt
* Params: int32 index
* Returns: BView *
* Effects:
***********************************************************************/
BView *
BView_ChildAt(BView *View, int32 index)
{
return View->ChildAt(index);
}
/***********************************************************************
* Method: BView::NextSibling
* Params:
* Returns: BView *
* Effects:
***********************************************************************/
BView *
BView_NextSibling(BView *View)
{
return View->NextSibling();
}
/***********************************************************************
* Method: BView::PreviousSibling
* Params:
* Returns: BView *
* Effects:
***********************************************************************/
BView *
BView_PreviousSibling(BView *View)
{
return View->PreviousSibling();
}
/***********************************************************************
* Method: BView::RemoveSelf
* Params:
* Returns: bool
* Effects:
***********************************************************************/
bool
BView_RemoveSelf(BView *View)
{
return View->RemoveSelf();
}
/***********************************************************************
* Method: BView::Window
* Params:
* Returns: BWindow *
* Effects:
***********************************************************************/
BWindow *
BView_Window(BView *View)
{
return View->Window();
}
// TODO : implement hook function
/***********************************************************************
* Method: BView::Draw
* Params: BRect updateRect
* Returns: void
* Effects:
***********************************************************************/
void
BView_Draw(BView *View, BRect updateRect)
{
View->Draw(updateRect);
}
// END TODO implement hook function
#if defined(__cplusplus)
}
#endif
#endif /* _VIEW_CPP_ */

View File

@@ -91,6 +91,26 @@ void BWindow_Hide(TCPlusObject Window)
reinterpret_cast<BWindow*>(Window)->Hide();
}
void BWindow_AddChild(BWindow* Window, BView* aView, BView* sibling)
{
Window->AddChild(aView, sibling);
}
bool BWindow_RemoveChild(BWindow* Window, BView* aView)
{
return Window->RemoveChild(aView);
}
BView* BWindow_ChildAt(BWindow* Window, int32 index)
{
return Window->ChildAt(index);
}
int32 BWindow_CountChildren(BWindow* Window, void)
{
return Window->CountChildren();
}
#if defined(__cplusplus)
}
#endif

View File

@@ -0,0 +1,492 @@
{ 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;
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;
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';
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
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
BView_AddChild(Self.CPlusObject, aView.CPlusObject, before.CPlusObject);
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;}
// 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.

View File

@@ -21,7 +21,7 @@ unit Window;
interface
uses
beobj, looper, rect, os, application, appdefs;
beobj, looper, rect, os, application, view, appdefs;
const
// window_type
@@ -72,11 +72,13 @@ const
type
TWindow = class(TLooper)
public
constructor Create(frame : TRect; title : PChar; atype, flags, workspaces : Cardinal);
constructor Create(frame : TRect; title : PChar; atype, flags, workspaces : Cardinal); virtual;
destructor Destroy; override;
procedure Show;
procedure Hide;
function QuitRequested : boolean; override;
procedure AddChild(aView : TView; sibling : TCPlusObject);
function QuitRequested : boolean; override;
function RemoveChild(aView : TView) : boolean;
end;
function BWindow_Create(AObject : TObject; frame : TCPlusObject; title : PChar;
@@ -84,6 +86,8 @@ function BWindow_Create(AObject : TObject; frame : TCPlusObject; title : PChar;
procedure BWindow_Free(CPlusObject : TCPlusObject); cdecl; external BePascalLibName name 'BWindow_Free';
procedure BWindow_Show(CPlusObject : TCPlusObject); cdecl; external BePascalLibName name 'BWindow_Show';
procedure BWindow_Hide(CPlusObject : TCPlusObject); cdecl; external BePascalLibName name 'BWindow_Hide';
procedure BWindow_AddChild(CPlusObject : TCPlusObject; aView : TCPlusObject; sibling : TCPlusObject); cdecl; external BePascalLibName name 'BWindow_AddChild';
function BWindow_RemoveChild(CPlusObject : TCPlusObject; aView : TCPlusObject) : boolean; cdecl; external BePascalLibName name 'BWindow_RemoveChild';
implementation
@@ -115,6 +119,16 @@ begin
BWindow_Hide(Self.CPlusObject);
end;
procedure TWindow.AddChild(aView : TView; sibling : TCPlusObject);
begin
BWindow_AddChild(Self.CPlusObject, aView.CPlusObject, sibling);
end;
function TWindow.RemoveChild(aView : TView) : boolean;
begin
result := BWindow_RemoveChild(Self.CPlusObject, aView.CPlusObject);
end;
initialization
end.