2005-11-21 19:58:36 +03:00
|
|
|
/*
|
|
|
|
* Copyright 2001-2005, Haiku.
|
|
|
|
* Distributed under the terms of the MIT License.
|
|
|
|
*
|
|
|
|
* Authors:
|
|
|
|
* Adrian Oanca <adioanca@cotty.iren.ro>
|
|
|
|
*/
|
2003-08-31 21:18:20 +04:00
|
|
|
#ifndef _WINDOW_H
|
|
|
|
#define _WINDOW_H
|
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
|
2003-08-31 21:18:20 +04:00
|
|
|
#include <BeBuild.h>
|
|
|
|
#include <InterfaceDefs.h>
|
|
|
|
#include <List.h>
|
|
|
|
#include <Looper.h>
|
|
|
|
#include <Rect.h>
|
|
|
|
#include <StorageDefs.h>
|
2003-12-08 01:37:40 +03:00
|
|
|
#include <View.h>
|
2003-08-31 21:18:20 +04:00
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
class BButton;
|
|
|
|
class BMenuBar;
|
|
|
|
class BMenuItem;
|
|
|
|
class BMessage;
|
|
|
|
class BMessageRunner;
|
|
|
|
class BMessenger;
|
|
|
|
class BView;
|
|
|
|
|
2005-06-15 01:28:56 +04:00
|
|
|
namespace BPrivate {
|
|
|
|
class PortLink;
|
|
|
|
};
|
2003-08-31 21:18:20 +04:00
|
|
|
|
|
|
|
|
|
|
|
enum window_type {
|
|
|
|
B_UNTYPED_WINDOW = 0,
|
|
|
|
B_TITLED_WINDOW = 1,
|
|
|
|
B_MODAL_WINDOW = 3,
|
|
|
|
B_DOCUMENT_WINDOW = 11,
|
|
|
|
B_BORDERED_WINDOW = 20,
|
|
|
|
B_FLOATING_WINDOW = 21
|
|
|
|
};
|
|
|
|
|
|
|
|
enum window_look {
|
|
|
|
B_BORDERED_WINDOW_LOOK = 20,
|
|
|
|
B_NO_BORDER_WINDOW_LOOK = 19,
|
|
|
|
B_TITLED_WINDOW_LOOK = 1,
|
|
|
|
B_DOCUMENT_WINDOW_LOOK = 11,
|
|
|
|
B_MODAL_WINDOW_LOOK = 3,
|
|
|
|
B_FLOATING_WINDOW_LOOK = 7
|
|
|
|
};
|
|
|
|
|
|
|
|
enum window_feel {
|
|
|
|
B_NORMAL_WINDOW_FEEL = 0,
|
|
|
|
B_MODAL_SUBSET_WINDOW_FEEL = 2,
|
|
|
|
B_MODAL_APP_WINDOW_FEEL = 1,
|
|
|
|
B_MODAL_ALL_WINDOW_FEEL = 3,
|
|
|
|
B_FLOATING_SUBSET_WINDOW_FEEL = 5,
|
|
|
|
B_FLOATING_APP_WINDOW_FEEL = 4,
|
|
|
|
B_FLOATING_ALL_WINDOW_FEEL = 6
|
|
|
|
};
|
|
|
|
|
|
|
|
enum window_alignment {
|
|
|
|
B_BYTE_ALIGNMENT = 0,
|
|
|
|
B_PIXEL_ALIGNMENT = 1
|
|
|
|
};
|
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
// window flags
|
2003-08-31 21:18:20 +04:00
|
|
|
enum {
|
|
|
|
B_NOT_MOVABLE = 0x00000001,
|
|
|
|
B_NOT_CLOSABLE = 0x00000020,
|
|
|
|
B_NOT_ZOOMABLE = 0x00000040,
|
|
|
|
B_NOT_MINIMIZABLE = 0x00004000,
|
|
|
|
B_NOT_RESIZABLE = 0x00000002,
|
|
|
|
B_NOT_H_RESIZABLE = 0x00000004,
|
|
|
|
B_NOT_V_RESIZABLE = 0x00000008,
|
|
|
|
B_AVOID_FRONT = 0x00000080,
|
|
|
|
B_AVOID_FOCUS = 0x00002000,
|
|
|
|
B_WILL_ACCEPT_FIRST_CLICK = 0x00000010,
|
|
|
|
B_OUTLINE_RESIZE = 0x00001000,
|
|
|
|
B_NO_WORKSPACE_ACTIVATION = 0x00000100,
|
|
|
|
B_NOT_ANCHORED_ON_ACTIVATE = 0x00020000,
|
|
|
|
B_ASYNCHRONOUS_CONTROLS = 0x00080000,
|
|
|
|
B_QUIT_ON_WINDOW_CLOSE = 0x00100000
|
|
|
|
};
|
|
|
|
|
|
|
|
#define B_CURRENT_WORKSPACE 0
|
|
|
|
#define B_ALL_WORKSPACES 0xffffffff
|
|
|
|
|
|
|
|
//----------------------------------------------------------------
|
|
|
|
|
|
|
|
class BWindow : public BLooper {
|
|
|
|
public:
|
2005-06-05 22:57:55 +04:00
|
|
|
BWindow(BRect frame, const char* title,
|
|
|
|
window_type type, uint32 flags,
|
|
|
|
uint32 workspace = B_CURRENT_WORKSPACE);
|
|
|
|
BWindow(BRect frame, const char* title,
|
|
|
|
window_look look, window_feel feel,
|
|
|
|
uint32 flags,
|
|
|
|
uint32 workspace = B_CURRENT_WORKSPACE);
|
|
|
|
virtual ~BWindow();
|
2003-08-31 21:18:20 +04:00
|
|
|
|
|
|
|
BWindow(BMessage* data);
|
2005-06-05 22:57:55 +04:00
|
|
|
static BArchivable *Instantiate(BMessage* data);
|
|
|
|
virtual status_t Archive(BMessage* data, bool deep = true) const;
|
|
|
|
|
|
|
|
virtual void Quit();
|
|
|
|
void Close() { Quit(); }
|
|
|
|
|
|
|
|
void AddChild(BView* child, BView* before = NULL);
|
|
|
|
bool RemoveChild(BView* child);
|
|
|
|
int32 CountChildren() const;
|
|
|
|
BView *ChildAt(int32 index) const;
|
|
|
|
|
|
|
|
virtual void DispatchMessage(BMessage* message, BHandler* handler);
|
|
|
|
virtual void MessageReceived(BMessage* message);
|
|
|
|
virtual void FrameMoved(BPoint new_position);
|
|
|
|
virtual void WorkspacesChanged(uint32 old_ws, uint32 new_ws);
|
|
|
|
virtual void WorkspaceActivated(int32 ws, bool state);
|
|
|
|
virtual void FrameResized(float new_width, float new_height);
|
|
|
|
virtual void Minimize(bool minimize);
|
|
|
|
virtual void Zoom(BPoint origin, float width, float height);
|
|
|
|
void Zoom();
|
|
|
|
void SetZoomLimits(float maxWidth, float maxHeight);
|
|
|
|
virtual void ScreenChanged(BRect screen_size, color_space depth);
|
|
|
|
void SetPulseRate(bigtime_t rate);
|
|
|
|
bigtime_t PulseRate() const;
|
|
|
|
void AddShortcut(uint32 key, uint32 modifiers,
|
|
|
|
BMessage *msg);
|
|
|
|
void AddShortcut(uint32 key, uint32 modifiers,
|
|
|
|
BMessage *msg, BHandler *target);
|
|
|
|
void RemoveShortcut(uint32 key, uint32 modifiers);
|
|
|
|
void SetDefaultButton(BButton* button);
|
|
|
|
BButton *DefaultButton() const;
|
|
|
|
virtual void MenusBeginning();
|
|
|
|
virtual void MenusEnded();
|
|
|
|
bool NeedsUpdate() const;
|
|
|
|
void UpdateIfNeeded();
|
|
|
|
BView *FindView(const char *viewName) const;
|
|
|
|
BView *FindView(BPoint) const;
|
|
|
|
BView *CurrentFocus() const;
|
|
|
|
void Activate(bool = true);
|
|
|
|
virtual void WindowActivated(bool state);
|
|
|
|
|
|
|
|
void ConvertToScreen(BPoint* pt) const;
|
|
|
|
BPoint ConvertToScreen(BPoint pt) const;
|
|
|
|
void ConvertFromScreen(BPoint* pt) const;
|
|
|
|
BPoint ConvertFromScreen(BPoint pt) const;
|
|
|
|
void ConvertToScreen(BRect* rect) const;
|
|
|
|
BRect ConvertToScreen(BRect rect) const;
|
|
|
|
void ConvertFromScreen(BRect* rect) const;
|
|
|
|
BRect ConvertFromScreen(BRect rect) const;
|
|
|
|
|
|
|
|
void MoveBy(float dx, float dy);
|
|
|
|
void MoveTo(BPoint);
|
|
|
|
void MoveTo(float x, float y);
|
|
|
|
void ResizeBy(float dx, float dy);
|
|
|
|
void ResizeTo(float width, float height);
|
|
|
|
|
|
|
|
virtual void Show();
|
|
|
|
virtual void Hide();
|
|
|
|
bool IsHidden() const;
|
|
|
|
bool IsMinimized() const;
|
|
|
|
|
|
|
|
void Flush() const;
|
|
|
|
void Sync() const;
|
|
|
|
|
|
|
|
status_t SendBehind(const BWindow* window);
|
|
|
|
|
|
|
|
void DisableUpdates();
|
|
|
|
void EnableUpdates();
|
|
|
|
|
|
|
|
void BeginViewTransaction(); // referred as OpenViewTransaction() in BeBook
|
|
|
|
void EndViewTransaction(); // referred as CommitViewTransaction() in BeBook
|
|
|
|
|
|
|
|
BRect Bounds() const;
|
|
|
|
BRect Frame() const;
|
|
|
|
const char *Title() const;
|
|
|
|
void SetTitle(const char* title);
|
|
|
|
bool IsFront() const;
|
|
|
|
bool IsActive() const;
|
|
|
|
void SetKeyMenuBar(BMenuBar* bar);
|
|
|
|
BMenuBar *KeyMenuBar() const;
|
|
|
|
void SetSizeLimits(float minWidth, float maxWidth,
|
|
|
|
float minHeight, float maxHeight);
|
|
|
|
void GetSizeLimits(float *minWidth, float *maxWidth,
|
|
|
|
float *minHeight, float *maxHeight);
|
|
|
|
uint32 Workspaces() const;
|
|
|
|
void SetWorkspaces(uint32);
|
|
|
|
BView *LastMouseMovedView() const;
|
|
|
|
|
|
|
|
virtual BHandler *ResolveSpecifier(BMessage* msg, int32 index,
|
|
|
|
BMessage* specifier, int32 form, const char* property);
|
|
|
|
virtual status_t GetSupportedSuites(BMessage* data);
|
|
|
|
|
|
|
|
status_t AddToSubset(BWindow* window);
|
|
|
|
status_t RemoveFromSubset(BWindow* window);
|
|
|
|
|
|
|
|
virtual status_t Perform(perform_code d, void* arg);
|
|
|
|
|
|
|
|
status_t SetType(window_type type);
|
|
|
|
window_type Type() const;
|
|
|
|
|
|
|
|
status_t SetLook(window_look look);
|
|
|
|
window_look Look() const;
|
|
|
|
|
|
|
|
status_t SetFeel(window_feel feel);
|
|
|
|
window_feel Feel() const;
|
|
|
|
|
|
|
|
status_t SetFlags(uint32);
|
|
|
|
uint32 Flags() const;
|
|
|
|
|
|
|
|
bool IsModal() const;
|
|
|
|
bool IsFloating() const;
|
|
|
|
|
|
|
|
status_t SetWindowAlignment(window_alignment mode, int32 h,
|
|
|
|
int32 hOffset = 0, int32 width = 0, int32 widthOffset = 0,
|
|
|
|
int32 v = 0, int32 vOffset = 0, int32 height = 0,
|
|
|
|
int32 heightOffset = 0);
|
|
|
|
status_t GetWindowAlignment(window_alignment* mode = NULL,
|
|
|
|
int32* h = NULL, int32* hOffset = NULL,
|
|
|
|
int32* width = NULL, int32* widthOffset = NULL,
|
|
|
|
int32* v = NULL, int32* vOffset = NULL,
|
|
|
|
int32* height = NULL, int32* heightOffset = NULL) const;
|
|
|
|
|
|
|
|
virtual bool QuitRequested();
|
|
|
|
virtual thread_id Run();
|
2003-08-31 21:18:20 +04:00
|
|
|
|
|
|
|
private:
|
2005-06-05 22:57:55 +04:00
|
|
|
typedef BLooper inherited;
|
2005-11-23 18:17:58 +03:00
|
|
|
struct unpack_cookie;
|
2005-11-12 19:13:06 +03:00
|
|
|
class Shortcut;
|
2005-06-05 22:57:55 +04:00
|
|
|
|
|
|
|
friend class BApplication;
|
|
|
|
friend class BBitmap;
|
|
|
|
friend class BScrollBar;
|
|
|
|
friend class BView;
|
|
|
|
friend class BMenuItem;
|
|
|
|
friend class BWindowScreen;
|
|
|
|
friend class BDirectWindow;
|
|
|
|
friend class BFilePanel;
|
|
|
|
friend class BHandler;
|
|
|
|
friend class _BEventMask;
|
|
|
|
friend void _set_menu_sem_(BWindow* w, sem_id sem);
|
|
|
|
friend status_t _safe_get_server_token_(const BLooper* , int32* );
|
|
|
|
|
|
|
|
virtual void _ReservedWindow1();
|
|
|
|
virtual void _ReservedWindow2();
|
|
|
|
virtual void _ReservedWindow3();
|
|
|
|
virtual void _ReservedWindow4();
|
|
|
|
virtual void _ReservedWindow5();
|
|
|
|
virtual void _ReservedWindow6();
|
|
|
|
virtual void _ReservedWindow7();
|
|
|
|
virtual void _ReservedWindow8();
|
|
|
|
|
|
|
|
BWindow();
|
|
|
|
BWindow(BWindow&);
|
|
|
|
BWindow &operator=(BWindow&);
|
|
|
|
|
MenuField layouts the menu bar better with respect to fDivider, it aligns better with other controls. fDivider in TextControl is an integer number now, small fix and small cleanup in Menu, Window::InitData takes an optional BBitmap token to construct an offscreen window, fixed PrivateScreen IndexForColor, View prevents being located at fractional coordinates as in R5, BBitmap unlocks its offscreen window since it is never Show()n and needs manual unlocking, fixed Slider offscreen window mode and improved triange thumb drawing, ScrollView would not crash when passing a NULL target just for kicks, the private MenuBar class now implements Draw to draw itself a little differently inside the BMenuField (dark right and bottom side) - though how it currently sets the clipping region prevents the text controls to draw in Playground, needs fixing
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-05 20:30:53 +04:00
|
|
|
BWindow(BRect frame, int32 bitmapToken);
|
2005-11-12 19:13:06 +03:00
|
|
|
void _InitData(BRect frame, const char* title,
|
2005-06-05 22:57:55 +04:00
|
|
|
window_look look, window_feel feel,
|
MenuField layouts the menu bar better with respect to fDivider, it aligns better with other controls. fDivider in TextControl is an integer number now, small fix and small cleanup in Menu, Window::InitData takes an optional BBitmap token to construct an offscreen window, fixed PrivateScreen IndexForColor, View prevents being located at fractional coordinates as in R5, BBitmap unlocks its offscreen window since it is never Show()n and needs manual unlocking, fixed Slider offscreen window mode and improved triange thumb drawing, ScrollView would not crash when passing a NULL target just for kicks, the private MenuBar class now implements Draw to draw itself a little differently inside the BMenuField (dark right and bottom side) - though how it currently sets the clipping region prevents the text controls to draw in Playground, needs fixing
git-svn-id: file:///srv/svn/repos/haiku/haiku/trunk@13450 a95241bf-73f2-0310-859d-f6bbb57e9c96
2005-07-05 20:30:53 +04:00
|
|
|
uint32 flags, uint32 workspace,
|
|
|
|
int32 bitmapToken = -1);
|
2005-11-20 19:24:23 +03:00
|
|
|
void BitmapClose(); // to be implemented
|
|
|
|
virtual void task_looper();
|
2005-06-05 22:57:55 +04:00
|
|
|
|
|
|
|
virtual BMessage *ConvertToMessage(void* raw, int32 code);
|
2005-11-20 19:24:23 +03:00
|
|
|
|
|
|
|
void AddShortcut(uint32 key, uint32 modifiers,
|
|
|
|
BMenuItem* item);
|
|
|
|
BHandler* _DetermineTarget(BMessage* message, BHandler* target);
|
2005-11-23 18:17:58 +03:00
|
|
|
bool _UnpackMessage(unpack_cookie& state, BMessage** _message,
|
|
|
|
BHandler** _target, bool* _usePreferred);
|
|
|
|
void _SanitizeMessage(BMessage* message, BHandler* target,
|
|
|
|
bool usePreferred);
|
2005-11-20 19:24:23 +03:00
|
|
|
|
2005-06-05 22:57:55 +04:00
|
|
|
bool InUpdate();
|
2005-11-21 19:58:36 +03:00
|
|
|
void _DequeueAll();
|
2005-11-12 19:13:06 +03:00
|
|
|
window_type _ComposeType(window_look look,
|
2005-06-05 22:57:55 +04:00
|
|
|
window_feel feel) const;
|
2005-11-12 19:13:06 +03:00
|
|
|
void _DecomposeType(window_type type,
|
2005-06-05 22:57:55 +04:00
|
|
|
window_look* look,
|
|
|
|
window_feel* feel) const;
|
|
|
|
|
|
|
|
void SetIsFilePanel(bool yes);
|
|
|
|
bool IsFilePanel() const;
|
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
void _CreateTopView();
|
2005-12-07 02:15:48 +03:00
|
|
|
void _AdoptResize();
|
2005-11-21 19:58:36 +03:00
|
|
|
void _SetFocus(BView *focusView, bool notifyIputServer = false);
|
2005-06-05 22:57:55 +04:00
|
|
|
|
2005-11-12 19:13:06 +03:00
|
|
|
Shortcut* _FindShortcut(uint32 key, uint32 modifiers);
|
2005-11-20 19:24:23 +03:00
|
|
|
BView* _FindView(BView* view, BPoint point) const;
|
|
|
|
BView* _FindView(int32 token);
|
|
|
|
BView* _LastViewChild(BView *parent);
|
2005-06-05 22:57:55 +04:00
|
|
|
|
2005-08-21 18:44:53 +04:00
|
|
|
BView* _FindNextNavigable(BView *focus, uint32 flags);
|
|
|
|
BView* _FindPreviousNavigable(BView *focus, uint32 flags);
|
|
|
|
bool _HandleKeyDown(char key, uint32 modifiers);
|
|
|
|
void _KeyboardNavigation();
|
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
// Debug (TODO: to be removed)
|
2005-06-05 22:57:55 +04:00
|
|
|
void PrintToStream() const;
|
2003-08-31 21:18:20 +04:00
|
|
|
|
2005-06-05 22:57:55 +04:00
|
|
|
private:
|
|
|
|
char *fTitle;
|
|
|
|
int32 server_token; // not yet used
|
|
|
|
bool fInTransaction;
|
|
|
|
bool fActive;
|
|
|
|
short fShowLevel;
|
|
|
|
uint32 fFlags;
|
|
|
|
|
2005-11-12 19:13:06 +03:00
|
|
|
BView *fTopView;
|
2005-06-05 22:57:55 +04:00
|
|
|
BView *fFocus;
|
|
|
|
BView *fLastMouseMovedView;
|
2005-06-15 02:04:29 +04:00
|
|
|
uint32 _unused1;
|
2005-06-05 22:57:55 +04:00
|
|
|
BMenuBar *fKeyMenuBar;
|
|
|
|
BButton *fDefaultButton;
|
2005-11-12 19:13:06 +03:00
|
|
|
BList fShortcuts;
|
2005-06-05 22:57:55 +04:00
|
|
|
int32 fTopViewToken;
|
|
|
|
bool fPulseEnabled;
|
|
|
|
bool fViewsNeedPulse; // not yet used
|
|
|
|
bool fIsFilePanel;
|
|
|
|
bool fMaskActivated;
|
|
|
|
bigtime_t fPulseRate;
|
|
|
|
bool fWaitingForMenu;
|
|
|
|
bool fMinimized;
|
|
|
|
sem_id fMenuSem;
|
|
|
|
float fMaxZoomHeight;
|
|
|
|
float fMaxZoomWidth;
|
2005-06-28 05:14:39 +04:00
|
|
|
float fMinHeight;
|
|
|
|
float fMinWidth;
|
|
|
|
float fMaxHeight;
|
|
|
|
float fMaxWidth;
|
2005-06-05 22:57:55 +04:00
|
|
|
BRect fFrame;
|
|
|
|
window_look fLook;
|
|
|
|
window_feel fFeel;
|
|
|
|
int32 fLastViewToken;
|
2005-06-15 01:28:56 +04:00
|
|
|
BPrivate::PortLink *fLink;
|
2005-06-05 22:57:55 +04:00
|
|
|
BMessageRunner *fPulseRunner;
|
|
|
|
BRect fCurrentFrame; // not yet used
|
|
|
|
|
2005-11-21 19:58:36 +03:00
|
|
|
uint32 _reserved[9];
|
2003-08-31 21:18:20 +04:00
|
|
|
};
|
|
|
|
|
|
|
|
#endif // _WINDOW_H
|