* Copyright 2010-2014 Haiku, Inc. All rights reserved.
* Distributed under the terms of the MIT License.
*
* Authors:
* John Scipione, jscipione@gmail.com
* Clemens Zeidler, haiku@clemens-zeidler.de
*/
#ifndef SAT_WINDOW_H
#define SAT_WINDOW_H
#include <Region.h>
#include "SATDecorator.h"
#include "SATGroup.h"
#include "Stacking.h"
#include "Tiling.h"
class Desktop;
class SATGroup;
class StackAndTile;
class Window;
class SATWindow {
public:
SATWindow(StackAndTile* sat, Window* window);
~SATWindow();
Window* GetWindow() { return fWindow; }
SATDecorator* GetDecorator() const;
StackAndTile* GetStackAndTile() { return fStackAndTile; }
Desktop* GetDesktop() { return fDesktop; }
SATGroup* GetGroup();
WindowArea* GetWindowArea() { return fWindowArea; }
bool HandleMessage(SATWindow* sender,
BPrivate::LinkReceiver& link,
BPrivate::LinkSender& reply);
bool PropagateToGroup(SATGroup* group);
bool AddedToGroup(SATGroup* group, WindowArea* area);
bool RemovedFromGroup(SATGroup* group,
bool stayBelowMouse);
void RemovedFromArea(WindowArea* area);
void WindowLookChanged(window_look look);
bool StackWindow(SATWindow* child);
void FindSnappingCandidates();
bool JoinCandidates();
void DoGroupLayout();
void AdjustSizeLimits(BRect targetFrame);
void SetOriginalSizeLimits(int32 minWidth,
int32 maxWidth, int32 minHeight,
int32 maxHeight);
void GetSizeLimits(int32* minWidth, int32* maxWidth,
int32* minHeight, int32* maxHeight) const;
void AddDecorator(int32* minWidth, int32* maxWidth,
int32* minHeight, int32* maxHeight);
void AddDecorator(BRect& frame);
void Resized();
bool IsHResizeable() const;
bool IsVResizeable() const;
BRect CompleteWindowFrame();
bool PositionManagedBySAT();
bool HighlightTab(bool active);
bool HighlightBorders(Decorator::Region region,
bool active);
bool IsTabHighlighted();
bool IsBordersHighlighted();
uint64 Id();
bool SetSettings(const BMessage& message);
void GetSettings(BMessage& message);
private:
uint64 _GenerateId();
void _UpdateSizeLimits();
void _RestoreOriginalSize(
bool stayBelowMouse = true);
Window* fWindow;
StackAndTile* fStackAndTile;
Desktop* fDesktop;
WindowArea* fWindowArea;
SATSnappingBehaviour* fOngoingSnapping;
SATStacking fSATStacking;
SATTiling fSATTiling;
SATSnappingBehaviourList fSATSnappingBehaviourList;
int32 fOriginalMinWidth;
int32 fOriginalMaxWidth;
int32 fOriginalMinHeight;
int32 fOriginalMaxHeight;
float fOriginalWidth;
float fOriginalHeight;
uint64 fId;
float fOldTabLocatiom;
};
#endif