1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141
|
/***********************************************************************
* ftooltip.h - Widget FToolTip *
* *
* This file is part of the FINAL CUT widget toolkit *
* *
* Copyright 2016-2022 Markus Gans *
* *
* FINAL CUT is free software; you can redistribute it and/or modify *
* it under the terms of the GNU Lesser General Public License as *
* published by the Free Software Foundation; either version 3 of *
* the License, or (at your option) any later version. *
* *
* FINAL CUT 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 Lesser General Public License for more details. *
* *
* You should have received a copy of the GNU Lesser General Public *
* License along with this program. If not, see *
* <http://www.gnu.org/licenses/>. *
***********************************************************************/
/* Inheritance diagram
* ═══════════════════
*
* ▕▔▔▔▔▔▔▔▔▔▏ ▕▔▔▔▔▔▔▔▔▔▏
* ▕ FVTerm ▏ ▕ FObject ▏
* ▕▁▁▁▁▁▁▁▁▁▏ ▕▁▁▁▁▁▁▁▁▁▏
* ▲ ▲
* │ │
* └─────┬─────┘
* │
* ▕▔▔▔▔▔▔▔▔▔▏
* ▕ FWidget ▏
* ▕▁▁▁▁▁▁▁▁▁▏
* ▲
* │
* ▕▔▔▔▔▔▔▔▔▔▏
* ▕ FWindow ▏
* ▕▁▁▁▁▁▁▁▁▁▏
* ▲
* │
* ▕▔▔▔▔▔▔▔▔▔▔▏
* ▕ FToolTip ▏
* ▕▁▁▁▁▁▁▁▁▁▁▏
*/
#ifndef FTOOLTIP_H
#define FTOOLTIP_H
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
#error "Only <final/final.h> can be included directly."
#endif
#include <vector>
#include "final/widget/fwindow.h"
namespace finalcut
{
//----------------------------------------------------------------------
// class FToolTip
//----------------------------------------------------------------------
class FToolTip : public FWindow
{
public:
// Constructors
explicit FToolTip (FWidget* = nullptr);
explicit FToolTip (const FString&, FWidget* = nullptr);
// Destructor
~FToolTip () override;
// Accessors
auto getClassName() const -> FString override;
auto getText() const -> FString;
// Mutators
void setText (const FString&);
void enableAutoTrim();
void disableAutoTrim();
void resetColors() override;
auto setBorder (bool = true) -> bool;
auto unsetBorder() -> bool;
// Inquiries
auto hasBorder() const -> bool;
// Methods
void show() override;
// Event handler
void onMouseDown (FMouseEvent*) override;
private:
// Methods
void init();
void draw() override;
void calculateDimensions();
void initLayout() override;
void adjustSize() override;
// Data members
FString text{};
FStringList text_components{};
bool text_auto_trim{true};
std::size_t max_line_width{0};
std::size_t text_num_lines{0};
};
// FToolTip inline functions
//----------------------------------------------------------------------
inline auto FToolTip::getClassName() const -> FString
{ return "FToolTip"; }
//----------------------------------------------------------------------
inline auto FToolTip::getText() const -> FString
{ return text; }
//----------------------------------------------------------------------
inline void FToolTip::enableAutoTrim()
{ text_auto_trim = true; }
//----------------------------------------------------------------------
inline void FToolTip::disableAutoTrim()
{ text_auto_trim = false; }
//----------------------------------------------------------------------
inline auto FToolTip::unsetBorder() -> bool
{ return setBorder(false); }
//----------------------------------------------------------------------
inline auto FToolTip::hasBorder() const -> bool
{ return ! getFlags().feature.no_border; }
} // namespace finalcut
#endif // FTOOLTIP_H
|