//------------------------------------------------------------------------------
// emSubViewPanel.h
//
// Copyright (C) 2006-2008,2010-2011,2016 Oliver Hamann.
//
// Homepage: http://eaglemode.sourceforge.net/
//
// This program is free software: you can redistribute it and/or modify it under
// the terms of the GNU General Public License version 3 as published by the
// Free Software Foundation.
//
// This program 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 General Public License version 3 for
// more details.
//
// You should have received a copy of the GNU General Public License version 3
// along with this program. If not, see <http://www.gnu.org/licenses/>.
//------------------------------------------------------------------------------
#ifndef emSubViewPanel_h
#define emSubViewPanel_h
#ifndef emPanel_h
#include <emCore/emPanel.h>
#endif
//==============================================================================
//=============================== emSubViewPanel ===============================
//==============================================================================
class emSubViewPanel : public emPanel {
public:
// Class for a panel which shows an emView as a sub-view. This is good
// for splitting a view or window into multiple views. All input and
// output of the panel is connected to the sub-view via an internal
// emViewPort. The outer view(s) must not be zoomable.
emSubViewPanel(ParentArg parent, const emString & name);
// Constructor. This creates the sub-view with default features
// and without any panel. The caller may change the features of
// the sub-view and create a root panel in it.
virtual ~emSubViewPanel();
// Destructor. Deletes the sub-view and its panels.
emView & GetSubView() const;
// Get the sub-view.
virtual emString GetTitle() const;
virtual double GetTouchEventPriority(double touchX, double touchY) const;
protected:
virtual void Notice(NoticeFlags flags);
virtual void Input(emInputEvent & event, const emInputState & state,
double mx, double my);
virtual emCursor GetCursor() const;
virtual bool IsOpaque() const;
virtual void Paint(const emPainter & painter, emColor canvasColor) const;
private:
void InvalidatePaintingOnView(double x, double y, double w, double h);
class SubViewClass : public emView {
public:
SubViewClass(emSubViewPanel & superPanel);
virtual ~SubViewClass();
protected:
virtual void InvalidateTitle();
private:
emSubViewPanel & SuperPanel;
};
class SubViewPortClass : public emViewPort {
public:
SubViewPortClass(emSubViewPanel & superPanel);
void SetViewGeometry(double x, double y, double w, double h,
double pixelTallness);
void SetViewFocused(bool focused);
void InputToView(emInputEvent & event,
const emInputState & state);
emCursor GetViewCursor() const;
void PaintView(const emPainter & painter, emColor canvasColor) const;
protected:
virtual void RequestFocus();
virtual bool IsSoftKeyboardShown() const;
virtual void ShowSoftKeyboard(bool show);
virtual emUInt64 GetInputClockMS() const;
virtual void InvalidateCursor();
virtual void InvalidatePainting(double x, double y, double w,
double h);
private:
emSubViewPanel & SuperPanel;
};
friend class SubViewClass;
friend class SubViewPortClass;
SubViewClass * SubView;
SubViewPortClass * SubViewPort;
};
inline emView & emSubViewPanel::GetSubView() const
{
return *SubView;
}
inline void emSubViewPanel::InvalidatePaintingOnView(
double x, double y, double w, double h
)
{
GetView().InvalidatePainting(x,y,w,h);
}
inline void emSubViewPanel::SubViewPortClass::SetViewGeometry(
double x, double y, double w, double h, double pixelTallness
)
{
emViewPort::SetViewGeometry(x,y,w,h,pixelTallness);
}
inline void emSubViewPanel::SubViewPortClass::SetViewFocused(
bool focused
)
{
emViewPort::SetViewFocused(focused);
}
inline void emSubViewPanel::SubViewPortClass::InputToView(
emInputEvent & event, const emInputState & state
)
{
emViewPort::InputToView(event,state);
}
inline emCursor emSubViewPanel::SubViewPortClass::GetViewCursor() const
{
return emViewPort::GetViewCursor();
}
inline void emSubViewPanel::SubViewPortClass::PaintView(
const emPainter & painter, emColor canvasColor
) const
{
emViewPort::PaintView(painter,canvasColor);
}
#endif