1
0
mirror of https://github.com/winscp/winscp.git synced 2026-10-24 02:28:55 +03:00
Files
winscp/source/components/ThemePageControl.h

117 lines
4.7 KiB
C++

//---------------------------------------------------------------------------
#ifndef ThemePageControlH
#define ThemePageControlH
//---------------------------------------------------------------------------
#include <ComCtrls.hpp>
#include <TBX.hpp>
//---------------------------------------------------------------------------
enum TThemeTabSheetButtons { ttbNone, ttbClose, ttbDropDown };
enum TThemeTabCaptionTruncation { tttNone, tttEllipsis, tttNoText };
class TThemePageControl;
//---------------------------------------------------------------------------
class TThemeTabSheet : public TTabSheet
{
friend class TThemePageControl;
public:
__fastcall TThemeTabSheet(TComponent * Owner);
__property UnicodeString BaseCaption = { read = GetBaseCaption, write = SetBaseCaption };
__property bool Shadowed = { read = FShadowed, write = SetShadowed };
__property TThemeTabSheetButtons Button = { read = FButton, write = SetButton };
__property TThemeTabCaptionTruncation CaptionTruncation = { read = FCaptionTruncation, write = SetCaptionTruncation };
private:
void __fastcall SetShadowed(bool Value);
void __fastcall SetButton(TThemeTabSheetButtons Value);
void __fastcall Invalidate();
void SetBaseCaption(const UnicodeString & value);
UnicodeString GetBaseCaption();
TThemePageControl * GetParentPageControl();
void SetCaptionTruncation(TThemeTabCaptionTruncation Value);
void UpdateCaption();
UnicodeString TruncatedCaption();
bool FShadowed;
TThemeTabSheetButtons FButton;
UnicodeString FBaseCaption;
TThemeTabCaptionTruncation FCaptionTruncation;
};
//---------------------------------------------------------------------------
typedef void __fastcall (__closure *TPageControlTabButtonClick)(TPageControl * Sender, int Index);
typedef void __fastcall (__closure *TPageControlTabHint)(TPageControl * Sender, int Index, UnicodeString & Hint);
namespace Tbxthemes
{
class TTBXTheme;
}
//---------------------------------------------------------------------------
class TThemePageControl : public TPageControl
{
friend class TThemeTabSheet;
__published:
__property TPageControlTabButtonClick OnTabButtonClick = { read = FOnTabButtonClick, write = FOnTabButtonClick };
__property TPageControlTabHint OnTabHint = { read = FOnTabHint, write = FOnTabHint };
public:
__fastcall TThemePageControl(TComponent * Owner);
__property TThemeTabSheet * Pages[int Index] = { read = GetPage };
__property TThemeTabSheet * ActivePage = { read = GetActivePage };
__property TTBXTheme * ActiveTabTheme = { read = FActiveTabTheme, write = SetActiveTabTheme };
__property bool DarkMode = { read = FDarkMode, write = SetDarkMode };
int __fastcall GetTabsHeight();
TRect __fastcall TabButtonRect(int Index);
int TotalTabsWidth();
void UpdateTabsCaptionTruncation();
protected:
virtual void __fastcall CreateWnd();
virtual void __fastcall PaintWindow(HDC DC);
DYNAMIC bool __fastcall CanChange();
DYNAMIC void __fastcall Change();
DYNAMIC void __fastcall MouseMove(TShiftState Shift, int X, int Y);
virtual void __fastcall Dispatch(void * Message);
void TabChanged(int Index);
#ifdef _DEBUG
virtual void __fastcall RequestAlign();
#endif
private:
void __fastcall DrawThemesXpTab(HDC DC, HTHEME Theme, int Tab);
void __fastcall DrawThemesXpTabItem(
HDC DC, HTHEME Theme, int Item, const TRect & Rect, int State, bool Selected, TTBXTheme * ATabTheme);
void DrawTabItem(HDC DC, HTHEME Theme, int Item, TRect Rect, int State, bool Shadowed, TTBXTheme * ATabTheme);
void __fastcall InvalidateTab(int Index);
int __fastcall TabButtonSize();
int __fastcall GetCrossPadding();
int __fastcall IndexOfTabButtonAt(int X, int Y);
void __fastcall ItemContentsRect(int Item, TRect & Rect);
bool __fastcall HasItemImage(int Item);
void __fastcall ItemTabRect(int Item, TRect & Rect);
TThemeTabSheetButtons __fastcall GetTabButton(int Index);
void UpdateHotButton(int & Ref, int Index);
void DrawCross(HDC DC, int Width, COLORREF Color, const TRect & Rect);
void DrawDropDown(HDC DC, int Radius, int X, int Y, COLORREF Color, int Grow);
void __fastcall WMLButtonDown(TWMLButtonDown & Message);
bool IsHotButton(int Index);
TThemeTabSheet * GetPage(int Index);
TThemeTabSheet * GetActivePage();
void CMHintShow(TCMHintShow & Message);
void SetActiveTabTheme(TTBXTheme * value);
void SetDarkMode(bool Value);
int FOldTabIndex;
int FHotTabButton;
int FClickedButton;
TPageControlTabButtonClick FOnTabButtonClick;
TPageControlTabHint FOnTabHint;
int FSessionTabShrink;
TTBXTheme * FActiveTabTheme;
int FTextHeight;
bool FDarkMode;
};
//---------------------------------------------------------------------------
#endif