46 #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)    47   #error "Only <final/final.h> can be included directly."    55 #include <unordered_map>    60 #include "final/fwidgetcolors.h"    61 #include "final/fwidget.h"    62 #include "final/util/fstring.h"    63 #include "final/util/fstringstream.h"    64 #include "final/vterm/fcolorpair.h"    65 #include "final/vterm/fstyle.h"    74 using FScrollbarPtr = std::shared_ptr<FScrollbar>;
    86       static constexpr std::size_t EOL = std::numeric_limits<std::size_t>::max();
   102         auto wc = getColorTheme();
   103         attributes.fg_color = wc->dialog.fg;
   104         attributes.bg_color = wc->dialog.bg;
   105         attributes.attr = s.toFAttribute();
   116         attributes.fg_color = c;
   117         attributes.bg_color = getColorTheme()->dialog.bg;
   118         attributes.attr = s.toFAttribute();
   129         attributes.fg_color = cpair.getForegroundColor();
   130         attributes.bg_color = cpair.getBackgroundColor();
   131         attributes.attr = s.toFAttribute();
   140       std::size_t length{};
   148         , highlight{std::move(v)}
   152       std::vector<FTextHighlight> highlight{};
   156     using FTextViewList = std::vector<FTextViewLine>;
   157     using FWidget::setGeometry;
   161       FTextViewList::size_type row{UNINITIALIZED_ROW};
   162       FString::size_type       column{UNINITIALIZED_COLUMN};
   173     template <
typename typeT>
   174     auto operator << (
const typeT&) -> 
FTextView&;
   175     auto operator << (
const UniChar&) -> 
FTextView&;
   176     auto operator << (
const std::string&) -> 
FTextView&;
   179     auto getClassName() 
const -> 
FString override;
   180     auto getColumns() 
const noexcept -> std::size_t;
   181     auto getRows() 
const -> std::size_t;
   182     auto getScrollPos() 
const -> 
FPoint;
   183     auto getTextVisibleSize() 
const -> 
FSize;
   184     auto getText() 
const -> 
FString;
   185     auto getSelectedText() 
const -> 
FString;
   189     auto getLine (FTextViewList::size_type) 
const -> 
const FTextViewLine&;
   190     auto getLines() 
const & -> 
const FTextViewList&;
   193     void setSize (
const FSize&, 
bool = 
true) 
override;
   194     void setGeometry (
const FPoint&, 
const FSize&, 
bool = 
true) 
override;
   195     void resetColors() 
override;
   198     void resetHighlight (std::size_t);
   199     void setSelectionStart (
const FTextViewList::size_type, 
const FString::size_type);
   200     void setSelectionEnd (
const FTextViewList::size_type, 
const FString::size_type);
   201     void resetSelection();
   202     template <
typename T>
   204     void setSelectable (
bool = 
true);
   205     void unsetSelectable();
   206     void scrollToX (
int);
   207     void scrollToY (
int);
   208     void scrollTo (
const FPoint&);
   209     void scrollTo (
int, 
int);
   210     void scrollToBegin();
   212     void scrollBy (
int, 
int);
   215     auto hasSelectedText() 
const -> bool;
   216     auto isSelectable() 
const -> bool;
   219     void hide() 
override;
   221     template <
typename T>
   222     void append (
const std::initializer_list<T>&);
   224     template <
typename T>
   225     void insert (
const std::initializer_list<T>&, 
int);
   226     void insert (
const FString&, 
int);
   227     void replaceRange (
const FString&, 
int, 
int);
   228     void deleteRange (
int, 
int);
   229     void deleteLine (
int);
   242     void initLayout() 
override;
   243     void adjustSize() 
override;
   246     auto isHorizontallyScrollable() 
const -> bool;
   247     auto isVerticallyScrollable() 
const -> bool;
   250     auto getTextHeight() 
const -> std::size_t;
   251     auto getTextWidth() 
const -> std::size_t;
   255     static constexpr 
auto UNINITIALIZED_ROW = 
static_cast<FTextViewList::size_type
>(-1);
   256     static constexpr 
auto UNINITIALIZED_COLUMN = 
static_cast<FString::size_type
>(-1);
   259     using KeyMap = std::unordered_map<FKey, std::function<void()>, 
EnumHash<FKey>>;
   262     auto isWithinTextBounds (
const FPoint&) 
const -> bool;
   263     auto isLowerRightResizeCorner (
const FPoint&) 
const -> bool;
   264     auto hasWrongSelectionOrder() 
const -> bool;
   268     void mapKeyFunctions();
   269     void draw() 
override;
   270     void drawBorder() 
override;
   271     void drawScrollbars() 
const;
   273     auto canSkipDrawing() 
const -> bool;
   274     void printLine (std::size_t);
   276                          , 
const std::vector<FTextHighlight>& ) 
const;
   278     auto useFDialogBorder() 
const -> bool;
   279     auto isPrintable (
wchar_t) 
const -> bool;
   280     auto splitTextLines (
const FString&) 
const -> FStringList;
   281     void processLine (
FString&&, 
int);
   282     template<
typename T1, 
typename T2>
   283     void setSelectionStartInt (T1&&, T2&&);
   284     template<
typename T1, 
typename T2>
   285     void setSelectionEndInt (T1&&, T2&&);
   286     auto getScrollBarMaxHorizontal() 
const noexcept -> int;
   287     auto getScrollBarMaxVertical() 
const noexcept -> int;
   288     void updateVerticalScrollBar() 
const;
   289     void updateHorizontalScrollBar (std::size_t);
   290     auto convertMouse2TextPos (
const FPoint&) 
const -> 
FPoint;
   291     void handleMouseWithinListBounds (
const FPoint&);
   293     void handleLeftDragScroll();
   294     void handleRightDragScroll();
   295     void handleUpDragScroll();
   296     void handleDownDragScroll();
   301     void stopDragScroll();
   302     void processChanged() 
const;
   303     void changeOnResize() 
const;
   304     auto shouldUpdateScrollbar (FScrollbar::ScrollType) 
const -> bool;
   305     auto getVerticalScrollDistance (
const FScrollbar::ScrollType) 
const -> int;
   306     auto getHorizontalScrollDistance (
const FScrollbar::ScrollType) 
const -> int;
   309     void cb_vbarChange (
const FWidget*);
   310     void cb_hbarChange (
const FWidget*);
   313     FTextViewList   data{};
   314     FScrollbarPtr   vbar{
nullptr};
   315     FScrollbarPtr   hbar{
nullptr};
   318     FPoint          select_click_pos{-1, -1};
   320     DragScrollMode  drag_scroll{DragScrollMode::None};
   321     bool            update_scrollbar{
true};
   322     bool            pass_to_dialog{
false};
   323     bool            selectable{
false};
   324     int             scroll_repeat{100};
   328     std::size_t     max_line_width{0};
   340 template <
typename typeT>
   341 inline auto FTextView::operator << (
const typeT& s) -> 
FTextView&
   346   if ( ! outstream.str().isEmpty() )
   347     append (outstream.str());
   353 inline auto FTextView::operator << (
const UniChar& c) -> 
FTextView&
   355   append (static_cast<wchar_t>(c));  
   360 inline auto FTextView::operator << (
const std::string& 
string) -> 
FTextView&
   367 inline auto FTextView::getClassName() 
const -> 
FString   368 { 
return "FTextView"; }
   371 inline auto FTextView::getColumns() 
const noexcept -> std::size_t
   372 { 
return max_line_width; }
   375 inline auto FTextView::getRows() 
const -> std::size_t
   376 { 
return data.size(); }
   379 inline auto FTextView::getScrollPos() 
const -> 
FPoint   380 { 
return {xoffset, yoffset}; }
   383 inline auto FTextView::getTextVisibleSize() 
const -> 
FSize   384 { 
return { 
FSize{getTextWidth(), getTextHeight()} }; }
   387 inline auto FTextView::getSelectionStart() 
const -> 
FTextPosition   388 { 
return selection_start; }
   391 inline auto FTextView::getSelectionEnd() 
const -> 
FTextPosition   392 { 
return selection_end; }
   395 inline auto FTextView::getLine (FTextViewList::size_type line) -> 
FTextViewLine&
   396 { 
return data.at(line); }
   399 inline auto FTextView::getLine (FTextViewList::size_type line) 
const -> 
const FTextViewLine&
   400 { 
return data.at(line); }
   403 inline auto FTextView::getLines() 
const & -> 
const FTextViewList&
   407 inline void FTextView::setSelectionStart ( 
const FTextViewList::size_type row
   408                                          , 
const FString::size_type col )
   409 { selection_start = {row, col}; }
   412 inline void FTextView::setSelectionEnd ( 
const FTextViewList::size_type row
   413                                        , 
const FString::size_type col )
   414 { selection_end = {row, col}; }
   417 inline void FTextView::resetSelection()
   419   selection_start = {UNINITIALIZED_ROW, UNINITIALIZED_COLUMN};
   420   selection_end = {UNINITIALIZED_ROW, UNINITIALIZED_COLUMN};
   424 template <
typename T>
   425 inline void FTextView::setLines (T&& list)
   428   data = std::forward<T>(list);
   429   updateVerticalScrollBar();
   434 inline void FTextView::setSelectable (
bool enable)
   435 { selectable = enable; }
   438 inline void FTextView::unsetSelectable()
   439 { selectable = 
false; }
   442 inline void FTextView::scrollTo (
const FPoint& pos)
   443 { scrollTo(pos.getX(), pos.getY()); }
   446 inline auto FTextView::hasSelectedText() 
const -> 
bool   448   return selection_start.row != UNINITIALIZED_ROW
   449       && selection_end.row != UNINITIALIZED_ROW
   450       && selection_start.column != UNINITIALIZED_COLUMN
   451       && selection_end.column != UNINITIALIZED_COLUMN;
   455 inline auto FTextView::isSelectable() 
const -> 
bool   456 { 
return selectable; }
   459 template <
typename T>
   460 void FTextView::append (
const std::initializer_list<T>& list)
   462   for (
const auto& str : list)
   467 template <
typename T>
   468 void FTextView::insert (
const std::initializer_list<T>& list, 
int pos)
   470   for (
const auto& str : list)
   478 inline void FTextView::deleteLine (
int pos)
   479 { deleteRange (pos, pos); }
   482 inline auto FTextView::isHorizontallyScrollable() 
const -> 
bool   483 { 
return max_line_width > getTextWidth(); }
   486 inline auto FTextView::isVerticallyScrollable() 
const -> 
bool   487 { 
return getRows() > getTextHeight(); }
   490 template<
typename T1, 
typename T2>
   491 inline void FTextView::setSelectionStartInt (T1&& row, T2&& col)
   493   selection_start = { 
static_cast<const FTextViewList::size_type
>(std::forward<T1>(row))
   494                     , 
static_cast<const FString::size_type
>(std::forward<T2>(col)) };
   498 template<
typename T1, 
typename T2>
   499 inline void FTextView::setSelectionEndInt (T1&& row, T2&& col)
   501   selection_end = { 
static_cast<const FTextViewList::size_type
>(std::forward<T1>(row))
   502                   , 
static_cast<const FString::size_type
>(std::forward<T2>(col)) };
   507 #endif  // FTEXTVIEW_H Definition: ftextview.h:80
 
Definition: fvtermbuffer.h:56
 
Definition: class_template.cpp:25
 
Definition: ftextview.h:159
 
Definition: ftextview.h:83
 
Definition: fstringstream.h:56
 
Definition: fcolorpair.h:49
 
Definition: ftextview.h:144