47 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)    48   #error "Only <final/final.h> can be included directly."    52 #include <unordered_map>    54 #include "final/fwidget.h"    55 #include "final/widget/fscrollbar.h"    61 void setPrintArea (FWidget&, FVTerm::FTermArea*);
    71     using FWidget::delAccelerator;
    73     using FWidget::setGeometry;
    94     auto getClassName() 
const -> 
FString override;
    96     auto getViewportWidth() 
const -> std::size_t;
    97     auto getViewportHeight() 
const -> std::size_t;
    98     auto getViewportSize() 
const -> 
FSize;
    99     auto getScrollWidth() 
const -> std::size_t;
   100     auto getScrollHeight() 
const -> std::size_t;
   101     auto getScrollSize() 
const -> 
FSize;
   102     auto getScrollPos() 
const -> 
FPoint;
   103     auto getScrollX() 
const -> int;
   104     auto getScrollY() 
const -> int;
   107     virtual void setScrollWidth (std::size_t);
   108     virtual void setScrollHeight (std::size_t);
   109     virtual void setScrollSize (
const FSize&);
   110     void setX (
int, 
bool = 
true) 
override;
   111     void setY (
int, 
bool = 
true) 
override;
   112     void setPos (
const FPoint&, 
bool = 
true) 
override;
   113     void setWidth (std::size_t, 
bool = 
true) 
override;
   114     void setHeight (std::size_t, 
bool = 
true) 
override;
   115     void setSize (
const FSize&, 
bool = 
true) 
override;
   117                      , 
bool = 
true ) 
override;
   118     auto setCursorPos (
const FPoint&) -> 
bool override;
   119     void setPrintPos (
const FPoint&) 
override;
   121     void setViewportPrint (
bool = 
true);
   122     void unsetViewportPrint();
   123     void resetColors() 
override;
   124     void setBorder (
bool = 
true);
   126     void setHorizontalScrollBarMode (ScrollBarMode);
   127     void setVerticalScrollBarMode (ScrollBarMode);
   130     auto hasBorder() 
const -> bool;
   131     auto isViewportPrint() 
const -> bool;
   134     void clearArea (
wchar_t = L
' ') 
override;
   135     void scrollToX (
int);
   136     void scrollToY (
int);
   137     void scrollTo (
const FPoint&);
   138     void scrollTo (
int, 
int);
   139     void scrollBy (
int, 
int);
   140     void print (
const FPoint&) 
override;
   141     void draw() 
override;
   142     void drawBorder() 
override;
   159     using FVTerm::clearArea;
   162     auto getPrintArea() -> FTermArea* 
override;
   165     void setHotkeyAccelerator();
   166     void initLayout() 
override;
   167     void adjustSize() 
override;
   172     using KeyMap = std::unordered_map<FKey, std::function<void()>, 
EnumHash<FKey>>;
   175     static constexpr std::size_t vertical_border_spacing = 2;
   176     static constexpr std::size_t horizontal_border_spacing = 2;
   179     auto getViewportCursorPos() -> 
FPoint;
   183     void addLocalPreprocessingHandler();
   184     void createViewport (
const FSize&) noexcept;
   185     void drawText (
const FString&, std::size_t);
   186     auto getDisplayedTextLength (
const FString&, 
const std::size_t) 
const -> std::size_t;
   187     void setLabelStyle() 
const;
   188     void printLabel (
const FString&, std::size_t);
   189     void printEllipsis (
const FString&);
   191     void mapKeyFunctions();
   192     void changeSize (
const FSize&, 
bool);
   193     void adjustOffsets (
int, 
int, 
int, 
int);
   194     auto isChangePosition (
const int, 
const int) 
const -> bool;
   195     auto isChangeXPosition (
const int) 
const -> bool;
   196     auto isChangeYPosition (
const int) 
const -> bool;
   197     void changeX (
const std::size_t, 
const int);
   198     void changeY (
const std::size_t, 
const int);
   199     void calculateScrollbarPos() 
const;
   200     template <
typename Callback>
   201     void initScrollbar (FScrollbarPtr&, Orientation, Callback);
   202     void setHorizontalScrollBarVisibility() 
const;
   203     void setVerticalScrollBarVisibility() 
const;
   204     void setViewportCursor();
   205     auto shouldUpdateScrollbar (FScrollbar::ScrollType) 
const -> bool;
   206     auto getVerticalScrollDistance (
const FScrollbar::ScrollType) 
const -> int;
   207     auto getHorizontalScrollDistance (
const FScrollbar::ScrollType) 
const -> int;
   210     void cb_vbarChange (
const FWidget*);
   211     void cb_hbarChange (
const FWidget*);
   214     FRect                      scroll_geometry{1, 1, 1, 1};
   215     FRect                      viewport_geometry{};
   216     std::unique_ptr<FTermArea> viewport{};  
   218     FScrollbarPtr              vbar{
nullptr};
   219     FScrollbarPtr              hbar{
nullptr};
   222     bool                       use_own_print_area{
false};
   223     bool                       update_scrollbar{
true};
   224     ScrollBarMode              v_mode{ScrollBarMode::Auto};  
   225     ScrollBarMode              h_mode{ScrollBarMode::Auto};
   230 inline auto FScrollView::getText() & -> 
FString&
   234 inline auto FScrollView::getClassName() 
const -> 
FString   235 { 
return "FScrollView"; }
   238 inline auto FScrollView::getViewportWidth() 
const -> std::size_t
   240   return ( getScrollHeight() > getViewportHeight() )
   241          ? 
static_cast<std::size_t
>(std::max (1, getGeometry().getX2() -
   242                                                  (getGeometry().getX1() - 1) -
   243                                                  static_cast<int>(vertical_border_spacing) -
   244                                                  static_cast<int>(nf_offset)))
   245          : static_cast<std::size_t>(std::max (1, getGeometry().getX2() -
   246                                                  (getGeometry().getX1() - 1) -
   247                                                  static_cast<int>(vertical_border_spacing)));
   251 inline auto FScrollView::getViewportHeight() 
const -> std::size_t
   253   return static_cast<std::size_t
>(std::max (1, getGeometry().getY2() -
   254                                                (getGeometry().getY1() - 1) -
   255                                                static_cast<int>(horizontal_border_spacing)));
   259 inline auto FScrollView::getViewportSize() 
const -> 
FSize   260 { 
return { 
FSize{getViewportWidth(), getViewportHeight()} }; }
   263 inline auto FScrollView::getScrollWidth() 
const -> std::size_t
   264 { 
return scroll_geometry.getWidth(); }
   267 inline auto FScrollView::getScrollHeight() 
const -> std::size_t
   268 { 
return scroll_geometry.getHeight(); }
   271 inline auto FScrollView::getScrollSize() 
const -> 
FSize   272 { 
return scroll_geometry.getSize(); }
   275 inline auto FScrollView::getScrollPos() 
const -> 
FPoint   276 { 
return viewport_geometry.getPos(); }
   279 inline auto FScrollView::getScrollX() 
const -> 
int   280 { 
return viewport_geometry.getX(); }
   283 inline auto FScrollView::getScrollY() 
const -> 
int   284 { 
return viewport_geometry.getY(); }
   287 inline void FScrollView::unsetViewportPrint()
   288 { setViewportPrint(
false); }
   291 inline void FScrollView::unsetBorder()
   292 { setBorder(
false); }
   295 inline auto FScrollView::hasBorder() 
const -> 
bool   296 { 
return ! getFlags().feature.no_border; }
   299 inline auto FScrollView::isViewportPrint() 
const -> 
bool   300 { 
return ! use_own_print_area; }
   303 inline void FScrollView::scrollTo (
const FPoint& pos)
   304 { scrollTo(pos.getX(), pos.getY()); }
   307 inline void FScrollView::print (
const FPoint& pos)
   309   if ( use_own_print_area )
   310     FWidget::setPrintPos(pos);
   316 template <
typename Callback>
   317 inline void FScrollView::initScrollbar ( FScrollbarPtr& bar
   319                                        , Callback cb_handler )
   321   finalcut::initScrollbar (bar, o, 
this, cb_handler);
   322   FTermArea* area = FScrollView::getPrintArea();
   323   finalcut::setPrintArea (*bar, area);
   328 #endif  // FSCROLLVIEW_H 
Definition: class_template.cpp:25