JX Application Framework
Loading...
Searching...
No Matches
Classes | Public Member Functions | Static Public Member Functions | Protected Member Functions | List of all members
JXScrollableWidget Class Reference

#include <JXScrollableWidget.h>

Inheritance diagram for JXScrollableWidget:
[legend]

Classes

struct  DisplayState
 

Public Member Functions

 JXScrollableWidget (JXScrollbarSet *scrollbarSet, JXContainer *enclosure, const HSizingOption hSizing, const VSizingOption vSizing, const JCoordinate x, const JCoordinate y, const JCoordinate w, const JCoordinate h)
 
 ~JXScrollableWidget () override
 
void AlwaysShowScrollbars (const bool alwaysShow=true)
 
bool GetScrollbars (JXScrollbar **hScrollbar, JXScrollbar **vScrollbar) const
 
void UpdateScrollbars ()
 
void ReadScrollSetup (std::istream &input)
 
void WriteScrollSetup (std::ostream &output) const
 
void HandleKeyPress (const JUtf8Character &c, const int key, const JXKeyModifiers &modifiers) override
 
DisplayState SaveDisplayState () const
 
void RestoreDisplayState (const DisplayState &state)
 
- Public Member Functions inherited from JXWidget
 ~JXWidget () override
 
void Deactivate () override
 
void Refresh () const override
 
void RefreshRect (const JRect &rect) const
 
void Redraw () const override
 
void RedrawRect (const JRect &rect) const
 
bool Focus ()
 
bool Unfocus ()
 
bool HasFocus () const
 
bool WillAcceptFocus () const
 
void SetSingleFocusWidget ()
 
virtual bool OKToUnfocus ()
 
bool WantsTab () const
 
bool WantsModifiedTab () const
 
bool WillAcceptShortcut () const
 
virtual void HandleShortcut (const int key, const JXKeyModifiers &modifiers)
 
JPoint GlobalToLocal (const JCoordinate x, const JCoordinate y) const override
 
JPoint LocalToGlobal (const JCoordinate x, const JCoordinate y) const override
 
void Place (const JCoordinate enclX, const JCoordinate enclY) override
 
void Move (const JCoordinate dx, const JCoordinate dy) override
 
void SetSize (const JCoordinate w, const JCoordinate h) override
 
void AdjustSize (const JCoordinate dw, const JCoordinate dh) override
 
HSizingOption GetHSizing () const
 
VSizingOption GetVSizing () const
 
void SetSizing (const HSizingOption hSizing, const VSizingOption vSizing)
 
void CenterWithinEnclosure (const bool adjustHoriz, const bool adjustVert)
 
void FitToEnclosure (const bool fitHoriz=true, const bool fitVert=true)
 
bool Scroll (const JCoordinate dx, const JCoordinate dy)
 
bool ScrollTo (const JCoordinate x, const JCoordinate y)
 
bool ScrollTo (const JPoint &pt)
 
bool ScrollToRect (const JRect &r)
 
bool ScrollToRectCentered (const JRect &r, const bool forceScroll)
 
JRect GetBoundsGlobal () const override
 
JRect GetFrameGlobal () const override
 
JRect GetApertureGlobal () const override
 
JSize GetBorderWidth () const
 
void SetBorderWidth (const JSize width)
 
JColorID GetCurrBackColor () const
 
JColorID GetBackColor () const
 
void SetBackColor (const JColorID color)
 
JColorID GetFocusColor () const
 
void SetFocusColor (const JColorID color)
 
JString ToString () const override
 
virtual JPoint GlobalToLocal (const JCoordinate x, const JCoordinate y) const=0
 
JPoint GlobalToLocal (const JPoint &pt) const
 
JRect GlobalToLocal (const JRect &r) const
 
virtual JPoint LocalToGlobal (const JCoordinate x, const JCoordinate y) const=0
 
JPoint LocalToGlobal (const JPoint &pt) const
 
JRect LocalToGlobal (const JRect &r) const
 
- Public Member Functions inherited from JXContainer
 ~JXContainer () override
 
bool IsAncestor (JXContainer *obj) const
 
virtual void Show ()
 
virtual void Hide ()
 
bool IsVisible () const
 
void SetVisible (const bool vis)
 
bool WouldBeVisible () const
 
virtual void Activate ()
 
bool IsActive () const
 
void SetActive (const bool active)
 
bool WouldBeActive () const
 
virtual void Suspend ()
 
virtual void Resume ()
 
bool IsSuspended () const
 
bool IsDNDSource () const
 
bool IsDNDTarget () const
 
JPoint GlobalToLocal (const JPoint &pt) const
 
JRect GlobalToLocal (const JRect &r) const
 
JPoint LocalToGlobal (const JPoint &pt) const
 
JRect LocalToGlobal (const JRect &r) const
 
JRect GetBounds () const
 
JCoordinate GetBoundsWidth () const
 
JCoordinate GetBoundsHeight () const
 
JRect GetFrame () const
 
JRect GetFrameLocal () const
 
JCoordinate GetFrameWidth () const
 
JCoordinate GetFrameHeight () const
 
JRect GetAperture () const
 
JCoordinate GetApertureWidth () const
 
JCoordinate GetApertureHeight () const
 
JXDisplayGetDisplay () const
 
JXWindowGetWindow () const
 
JXContainerGetEnclosure () const
 
JFontManagerGetFontManager () const
 
JXFontManagerGetXFontManager () const
 
JXSelectionManagerGetSelectionManager () const
 
JXDNDManagerGetDNDManager () const
 
JXMenuManagerGetMenuManager () const
 
JCursorIndex GetDefaultCursor () const
 
bool GetHint (JString *text) const
 
void SetHint (const JString &text)
 
void ClearHint ()
 
bool GetVisibleRectGlobal (const JRect &origRectG, JRect *visRectG) const
 
void ForEach (const std::function< void(JXContainer *)> &f, const bool recurse)
 
void ForEach (const std::function< void(const JXContainer *)> &f, const bool recurse) const
 
void ExpandToFitContent ()
 
virtual bool RunInternalFTC (const bool horizontal, JCoordinate *newSize)
 
JRect ComputePaddingForInternalFTC () const
 
bool FindContainer (const JPoint &ptG, JXContainer **container) const
 
virtual bool IsMenu () const
 
virtual bool IsMenuTable () const
 
- Public Member Functions inherited from JBroadcaster
 JBroadcaster ()
 
virtual ~JBroadcaster ()
 
JBroadcasteroperator= (const JBroadcaster &source)
 
bool HasSenders () const
 
JSize GetSenderCount () const
 
bool HasRecipients () const
 
JSize GetRecipientCount () const
 
template<class T >
void ListenTo (const JBroadcaster *sender, const std::function< void(const T &)> &f)
 

Static Public Member Functions

static void SkipScrollSetup (std::istream &input)
 
- Static Public Member Functions inherited from JXContainer
static void DebugExpandToFitContent (const bool horiz)
 
static void DebugExpandToFitContentExtras (const bool noop, const bool overlap)
 

Protected Member Functions

bool ScrollForDrag (const JPoint &pt)
 
bool ScrollForWheel (const JXMouseButton button, const JXKeyModifiers &modifiers)
 
bool ScrollForWheel (const JXMouseButton button, const JXKeyModifiers &modifiers, JXScrollbar *hScrollbar, JXScrollbar *vScrollbar)
 
void SetHorizStepSize (const JCoordinate hStep)
 
void SetHorizPageStepContext (const JCoordinate hPageContext)
 
void SetVertStepSize (const JCoordinate vStep)
 
void SetVertPageStepContext (const JCoordinate vPageContext)
 
void SetHorizJumpToScrolltabModifiers (const bool ctrl, const bool meta)
 
void SetVertJumpToScrolltabModifiers (const bool ctrl, const bool meta)
 
void DrawBorder (JXWindowPainter &p, const JRect &frame) override
 
void HandleMouseDown (const JPoint &pt, const JXMouseButton button, const JSize clickCount, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers) override
 
void BoundsMoved (const JCoordinate dx, const JCoordinate dy) override
 
void BoundsResized (const JCoordinate dw, const JCoordinate dh) override
 
void ApertureMoved (const JCoordinate dx, const JCoordinate dy) override
 
void ApertureResized (const JCoordinate dw, const JCoordinate dh) override
 
void HandleDNDScroll (const JPoint &pt, const JXMouseButton scrollButton, const JXKeyModifiers &modifiers) override
 
void Receive (JBroadcaster *sender, const Message &message) override
 
- Protected Member Functions inherited from JXWidget
 JXWidget (JXContainer *enclosure, const HSizingOption hSizing, const VSizingOption vSizing, const JCoordinate x, const JCoordinate y, const JCoordinate w, const JCoordinate h)
 
void WantInput (const bool wantInput, const bool wantTab=false, const bool wantModifiedTab=false)
 
virtual void HandleFocusEvent ()
 
virtual void HandleUnfocusEvent ()
 
virtual void HandleWindowFocusEvent ()
 
virtual void HandleWindowUnfocusEvent ()
 
void UnlockBounds ()
 
void SetBounds (const JCoordinate w, const JCoordinate h)
 
void AdjustBounds (const JCoordinate dw, const JCoordinate dh)
 
void DrawBackground (JXWindowPainter &p, const JRect &frame) override
 
bool AcceptDrag (const JPoint &pt, const JXMouseButton button, const JXKeyModifiers &modifiers) override
 
JXDragPainterCreateDragInsidePainter ()
 
JXDragPainterCreateDragOutsidePainter ()
 
bool GetDragPainter (JXDragPainter **p) const
 
bool GetDragPainter (JPainter **p) const
 
void DeleteDragPainter ()
 
void BoundsMoved (const JCoordinate dx, const JCoordinate dy) override
 
void EnclosingBoundsMoved (const JCoordinate dx, const JCoordinate dy) override
 
void BoundsResized (const JCoordinate dw, const JCoordinate dh) override
 
void EnclosingBoundsResized (const JCoordinate dw, const JCoordinate dh) override
 
void FTCAdjustSize (const JCoordinate dw, const JCoordinate dh) override
 
bool BeginDND (const JPoint &pt, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers, JXSelectionData *data, JXDNDManager::TargetFinder *targetFinder=nullptr)
 
virtual void DNDInit (const JPoint &pt, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers)
 
virtual void GetSelectionData (JXSelectionData *data, const JString &id)
 
virtual void DNDFinish (const bool isDrop, const JXContainer *target)
 
virtual void DNDCompletelyFinished ()
 
virtual Atom GetDNDAction (const JXContainer *target, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers)
 
virtual void GetDNDAskActions (const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers, JArray< Atom > *askActionList, JPtrArray< JString > *askDescriptionList)
 
virtual void HandleDNDResponse (const JXContainer *target, const bool dropAccepted, const Atom action)
 
bool WillAllowUnboundedScrolling () const
 
void ShouldAllowUnboundedScrolling (const bool allow)
 
- Protected Member Functions inherited from JXContainer
 JXContainer (JXWindow *window, JXContainer *enclosure)
 
 JXContainer (JXDisplay *display, JXWindow *window, JXContainer *enclosure)
 
void TurnOnBufferedDrawing ()
 
void DrawAll (JXWindowPainter &p, const JRect &frameG)
 
virtual void Draw (JXWindowPainter &p, const JRect &rect)=0
 
virtual void HandleMouseEnter ()
 
virtual void HandleMouseHere (const JPoint &pt, const JXKeyModifiers &modifiers)
 
virtual void HandleMouseLeave ()
 
virtual void HandleMouseDrag (const JPoint &pt, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers)
 
virtual void HandleMouseUp (const JPoint &pt, const JXMouseButton button, const JXButtonStates &buttonStates, const JXKeyModifiers &modifiers)
 
virtual bool HitSamePart (const JPoint &pt1, const JPoint &pt2) const
 
virtual bool WillAcceptDrop (const JArray< Atom > &typeList, Atom *action, const JPoint &pt, const Time time, const JXWidget *source)
 
virtual void HandleDNDEnter ()
 
virtual void HandleDNDHere (const JPoint &pt, const JXWidget *source)
 
virtual void HandleDNDLeave ()
 
virtual void HandleDNDDrop (const JPoint &pt, const JArray< Atom > &typeList, const Atom action, const Time time, const JXWidget *source)
 
bool DispatchClientMessage (const XClientMessageEvent &clientMessage)
 
virtual bool HandleClientMessage (const XClientMessageEvent &clientMessage)
 
void NotifyBoundsMoved (const JCoordinate dx, const JCoordinate dy)
 
void NotifyBoundsResized (const JCoordinate dw, const JCoordinate dh)
 
virtual bool IncludeInFTC () const
 
virtual bool NeedsInternalFTC () const
 
virtual JCoordinate GetFTCMinContentSize (const bool horizontal) const
 
virtual JRect GetFrameForFTC () const
 
bool GetEnclosedObjects (JPtrArrayIterator< JXContainer > **iter) const
 
void DeleteEnclosedObjects ()
 
void ShowCursor ()
 
void HideCursor ()
 
void SetDefaultCursor (const JCursorIndex index)
 
void DispatchCursor (const JPoint &ptG, const JXKeyModifiers &modifiers)
 
virtual void AdjustCursor (const JPoint &pt, const JXKeyModifiers &modifiers)
 
void DisplayCursor (const JCursorIndex index)
 
JXCursorAnimatorCreateCursorAnimator ()
 
JXCursorAnimatorGetCursorAnimator () const
 
void AnimateCursor () const
 
void RemoveCursorAnimator ()
 
void ActivateCursor (const JPoint &ptG, const JXKeyModifiers &modifiers)
 
void DeactivateCursor ()
 
std::ostream & GetFTCLog () const
 
virtual bool StealMouse (const int eventType, const JPoint &ptG, const JXMouseButton button, const unsigned int state)
 
- Protected Member Functions inherited from JBroadcaster
 JBroadcaster (const JBroadcaster &source)
 
void ListenTo (const JBroadcaster *sender)
 
void StopListening (const JBroadcaster *sender)
 
void ClearWhenGoingAway (const JBroadcaster *sender, void *pointerToMember)
 
void StopListening (const JBroadcaster *sender, const std::type_info &messageType)
 
template<class T >
void Send (JBroadcaster *recipient, const T &message)
 
template<class T >
void Broadcast (const T &message)
 
void SendWithFeedback (JBroadcaster *recipient, Message *message)
 
void BroadcastWithFeedback (Message *message)
 
virtual void ReceiveWithFeedback (JBroadcaster *sender, Message *message)
 
virtual void ReceiveGoingAway (JBroadcaster *sender)
 

Additional Inherited Members

- Public Types inherited from JXWidget
enum  HSizingOption {
  kFixedLeft ,
  kFixedRight ,
  kHElastic
}
 
enum  VSizingOption {
  kFixedTop ,
  kFixedBottom ,
  kVElastic
}
 
- Static Public Attributes inherited from JXWidget
static const JUtf8BytekGotFocus = "GotFocus::JXWidget"
 
static const JUtf8BytekLostFocus = "LostFocus::JXWidget"
 

Detailed Description

If a JXScrollbarSet is provided, this class will work with the scroll
bars to allow derived classes to scroll automatically.  The default is to
show only the scroll bars that are necessary.  Use AlwaysShowScrollbars()
to change this behavior.

A JXScrollbarSet is not required because sometimes one might want
to use a derived class in a situation where scrolling is handled in
some other way or where scrolling is not required or desired at all.

ScrollForDrag can be called during a mouse drag to make the widget
automatically scroll when the mouse is dragged outside the aperture.

Constructor & Destructor Documentation

◆ JXScrollableWidget()

JXScrollableWidget::JXScrollableWidget ( JXScrollbarSet scrollbarSet,
JXContainer enclosure,
const HSizingOption  hSizing,
const VSizingOption  vSizing,
const JCoordinate  x,
const JCoordinate  y,
const JCoordinate  w,
const JCoordinate  h 
)

scrollbarSet can be nullptr

◆ ~JXScrollableWidget()

JXScrollableWidget::~JXScrollableWidget ( )
override

Member Function Documentation

◆ AlwaysShowScrollbars()

void JXScrollableWidget::AlwaysShowScrollbars ( const bool  alwaysShow = true)
inline

◆ ApertureMoved()

void JXScrollableWidget::ApertureMoved ( const JCoordinate  dx,
const JCoordinate  dy 
)
overrideprotectedvirtual

Reimplemented from JXWidget.

◆ ApertureResized()

void JXScrollableWidget::ApertureResized ( const JCoordinate  dw,
const JCoordinate  dh 
)
overrideprotectedvirtual

Reimplemented from JXWidget.

Reimplemented in JXStringList, JXTEBase, and JXTreeListWidget.

◆ BoundsMoved()

void JXScrollableWidget::BoundsMoved ( const JCoordinate  dx,
const JCoordinate  dy 
)
overrideprotectedvirtual

Implements JXContainer.

Reimplemented in JXStaticText, and JXTEBase.

◆ BoundsResized()

void JXScrollableWidget::BoundsResized ( const JCoordinate  dw,
const JCoordinate  dh 
)
overrideprotectedvirtual

Implements JXContainer.

Reimplemented in JXStaticText.

◆ DrawBorder()

void JXScrollableWidget::DrawBorder ( JXWindowPainter p,
const JRect frame 
)
overrideprotectedvirtual

Implements JXContainer.

◆ GetScrollbars()

bool JXScrollableWidget::GetScrollbars ( JXScrollbar **  hScrollbar,
JXScrollbar **  vScrollbar 
) const

◆ HandleDNDScroll()

void JXScrollableWidget::HandleDNDScroll ( const JPoint pt,
const JXMouseButton  scrollButton,
const JXKeyModifiers modifiers 
)
overrideprotectedvirtual

This is called while the mouse is inside the widget, even if the widget does not currently accept the drop, because it might accept it after it is scrolled.

Reimplemented from JXContainer.

◆ HandleKeyPress()

void JXScrollableWidget::HandleKeyPress ( const JUtf8Character c,
const int  keySym,
const JXKeyModifiers modifiers 
)
overridevirtual

Call this if you want to support Home, End, Page up, Page down keys.

Reimplemented from JXWidget.

Reimplemented in JXStringList, JXTEBase, and JXTreeListWidget.

◆ HandleMouseDown()

void JXScrollableWidget::HandleMouseDown ( const JPoint pt,
const JXMouseButton  button,
const JSize  clickCount,
const JXButtonStates buttonStates,
const JXKeyModifiers modifiers 
)
overrideprotectedvirtual

The default is to support scrolling via a wheel mouse.

Reimplemented from JXContainer.

Reimplemented in JXSpellList, JXTEBase, JXToolBarEditWidget, and JXTreeListWidget.

◆ ReadScrollSetup()

void JXScrollableWidget::ReadScrollSetup ( std::istream &  input)

◆ Receive()

void JXScrollableWidget::Receive ( JBroadcaster sender,
const Message message 
)
overrideprotectedvirtual

Listen for adjustments in scrollbars.

Reimplemented from JBroadcaster.

Reimplemented in JXStringList, JXTable, JXTEBase, JXTextEditor, JXTextMenuTable, and JXTreeListWidget.

◆ RestoreDisplayState()

void JXScrollableWidget::RestoreDisplayState ( const DisplayState state)

Restore the scrollbar positions. The logic is designed to work with a widget that is growing vertically due to data being appended.

Cannot be virtual because derived class must use layered type.

◆ SaveDisplayState()

JXScrollableWidget::DisplayState JXScrollableWidget::SaveDisplayState ( ) const

Save the scrollbar positions.

Cannot be virtual because derived class must use layered type.

◆ ScrollForDrag()

bool JXScrollableWidget::ScrollForDrag ( const JPoint pt)
protected

Scrolls the widget to make the given point (in local coords) visible. Returns true if scrolling was actually necessary.

◆ ScrollForWheel() [1/2]

bool JXScrollableWidget::ScrollForWheel ( const JXMouseButton  button,
const JXKeyModifiers modifiers 
)
protected

Call this to support scrolling via a wheel mouse. Returns true if it handled the event.

The second version is designed for row and column headers that scroll but don't have a JXScrollbarSet. The function therefore accepts nullptr for either scrollbar object.

◆ ScrollForWheel() [2/2]

bool JXScrollableWidget::ScrollForWheel ( const JXMouseButton  button,
const JXKeyModifiers modifiers,
JXScrollbar hScrollbar,
JXScrollbar vScrollbar 
)
protected

◆ SetHorizJumpToScrolltabModifiers()

void JXScrollableWidget::SetHorizJumpToScrolltabModifiers ( const bool  ctrl,
const bool  meta 
)
inlineprotected

Modifiers + [1-9] jump to a scrolltab.

◆ SetHorizPageStepContext()

void JXScrollableWidget::SetHorizPageStepContext ( const JCoordinate  hPageContext)
inlineprotected

◆ SetHorizStepSize()

void JXScrollableWidget::SetHorizStepSize ( const JCoordinate  hStep)
inlineprotected

◆ SetVertJumpToScrolltabModifiers()

void JXScrollableWidget::SetVertJumpToScrolltabModifiers ( const bool  ctrl,
const bool  meta 
)
inlineprotected

◆ SetVertPageStepContext()

void JXScrollableWidget::SetVertPageStepContext ( const JCoordinate  vPageContext)
inlineprotected

◆ SetVertStepSize()

void JXScrollableWidget::SetVertStepSize ( const JCoordinate  vStep)
inlineprotected

◆ SkipScrollSetup()

void JXScrollableWidget::SkipScrollSetup ( std::istream &  input)
static

◆ UpdateScrollbars()

void JXScrollableWidget::UpdateScrollbars ( )

The scrollbars sometimes have to be adjusted via an urgent task, as explained for NeedAdjustScrollbars(), because the current call needs to be completed first. This can be a pain because this means that our aperture is not guaranteed to be correct until the -event- has finished.

This function is provided so that you can update the aperture immediately. However, you must not call it in code triggered by a change in the bounds or the aperture.

We need a while loop because AdjustScrollbars() calls itsScrollbarSet->ShowScrollbars(), which can call BoundsResized(), which creates another urgent task.

◆ WriteScrollSetup()

void JXScrollableWidget::WriteScrollSetup ( std::ostream &  output) const

The documentation for this class was generated from the following files: