/*********************************************************************** * ftermdata.h - Data class for FTerm * * * * This file is part of the Final Cut widget toolkit * * * * Copyright 2018-2019 Markus Gans * * * * The 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. * * * * The 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 * * . * ***********************************************************************/ /* Standalone class * ════════════════ * * ▕▔▔▔▔▔▔▔▔▔▔▔▏ * ▕ FTermData ▏ * ▕▁▁▁▁▁▁▁▁▁▁▁▏ */ #ifndef FTERMDATA_H #define FTERMDATA_H #if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT) #error "Only can be included directly." #endif #include #include #include "final/fc.h" #include "final/frect.h" #include "final/fstring.h" #include "final/ftypes.h" namespace finalcut { //---------------------------------------------------------------------- // class FTermData //---------------------------------------------------------------------- #pragma pack(push) #pragma pack(1) class FTermData final { public: // Typedefs typedef std::unordered_map encodingMap; typedef std::unordered_map characterSub; // Constructors FTermData() = default; // Disable copy constructor FTermData (const FTermData&) = delete; // Destructor ~FTermData() = default; // Disable assignment operator (=) FTermData& operator = (const FTermData&) = delete; // Accessors const char* getClassName() const; encodingMap& getEncodingList(); characterSub& getCharSubstitutionMap(); fc::encoding getTermEncoding() const; FRect& getTermGeometry(); int getTTYFileDescriptor() const; uInt getBaudrate() const; char* getTermType(); char* getTermFileName(); const FString& getXtermFont() const; const FString& getXtermTitle() const; #if DEBUG int getFramebufferBpp() const; #endif // Inquiries bool hasShadowCharacter() const; bool hasHalfBlockCharacter() const; bool hasCursorOptimisation() const; bool isCursorHidden() const; bool hasAlternateScreen() const; bool hasASCIIConsole() const; bool hasVT100Console() const; bool hasUTF8Console() const; bool isUTF8() const; bool isNewFont() const; bool isVGAFont() const; bool isMonochron() const; bool hasTermResized() const; // Mutators void setTermEncoding(fc::encoding); void setTTYFileDescriptor (int); void setBaudrate (uInt); void supportShadowCharacter (bool); void supportHalfBlockCharacter (bool); void supportCursorOptimisation (bool); void setCursorHidden (bool); void useAlternateScreen (bool); void setASCIIConsole (bool); void setVT100Console (bool); void setUTF8Console (bool); void setUTF8 (bool); void setNewFont (bool); void setVGAFont (bool); void setMonochron (bool); void setTermResized (bool); void setTermType (const char[]); void setTermFileName (const char[]); void setXtermFont (const FString&); void setXtermTitle (const FString&); #if DEBUG void setFramebufferBpp (int); #endif private: // Data Members encodingMap encoding_list{}; characterSub char_substitution_map{}; fc::encoding term_encoding{fc::UNKNOWN}; FRect term_geometry{}; // current terminal geometry int fd_tty{-1}; // Teletype (tty) file descriptor is still undefined uInt baudrate{0}; bool shadow_character{true}; bool half_block_character{true}; bool cursor_optimisation{true}; bool hidden_cursor{false}; // Global cursor hidden state bool use_alternate_screen{true}; bool ascii_console{false}; bool vt100_console{false}; bool utf8_console{false}; bool utf8_state{false}; bool new_font{false}; bool vga_font{false}; bool monochron{false}; bool resize_term{false}; char termtype[256]{'\0'}; char termfilename[256]{'\0'}; FString xterm_font{}; FString xterm_title{}; #if DEBUG int framebuffer_bpp{-1}; #endif }; #pragma pack(pop) // FTermData inline functions //---------------------------------------------------------------------- inline const char* FTermData::getClassName() const { return "FTermData"; } //---------------------------------------------------------------------- inline FTermData::encodingMap& FTermData::getEncodingList() { return encoding_list; } //---------------------------------------------------------------------- inline FTermData::characterSub& FTermData::getCharSubstitutionMap() { return char_substitution_map; } //---------------------------------------------------------------------- inline fc::encoding FTermData::getTermEncoding() const { return term_encoding; } //---------------------------------------------------------------------- inline FRect& FTermData::getTermGeometry() { return term_geometry; } //---------------------------------------------------------------------- inline int FTermData::getTTYFileDescriptor() const { return fd_tty; } //---------------------------------------------------------------------- inline uInt FTermData::getBaudrate() const { return baudrate; } //---------------------------------------------------------------------- inline char* FTermData::getTermType() { return termtype; } //---------------------------------------------------------------------- inline char* FTermData::getTermFileName() { return termfilename; } //---------------------------------------------------------------------- inline const FString& FTermData::getXtermFont() const { return xterm_font; } //---------------------------------------------------------------------- inline const FString& FTermData::getXtermTitle() const { return xterm_title; } //---------------------------------------------------------------------- #if DEBUG inline int FTermData::getFramebufferBpp() const { return framebuffer_bpp; } #endif //---------------------------------------------------------------------- inline bool FTermData::hasShadowCharacter() const { return shadow_character; } //---------------------------------------------------------------------- inline bool FTermData::hasHalfBlockCharacter() const { return half_block_character; } //---------------------------------------------------------------------- inline bool FTermData::hasCursorOptimisation() const { return cursor_optimisation; } //---------------------------------------------------------------------- inline bool FTermData::isCursorHidden() const { return hidden_cursor; } //---------------------------------------------------------------------- inline bool FTermData::hasAlternateScreen() const { return use_alternate_screen; } //---------------------------------------------------------------------- inline bool FTermData::hasASCIIConsole() const { return ascii_console; } //---------------------------------------------------------------------- inline bool FTermData::hasVT100Console() const { return vt100_console; } //---------------------------------------------------------------------- inline bool FTermData::hasUTF8Console() const { return utf8_console; } //---------------------------------------------------------------------- inline bool FTermData::isUTF8() const { return utf8_state; } //---------------------------------------------------------------------- inline bool FTermData::isNewFont() const { return new_font; } //---------------------------------------------------------------------- inline bool FTermData::isVGAFont() const { return vga_font; } //---------------------------------------------------------------------- inline bool FTermData::isMonochron() const { return monochron; } //---------------------------------------------------------------------- inline bool FTermData::hasTermResized() const { return resize_term; } //---------------------------------------------------------------------- inline void FTermData::setTermEncoding (fc::encoding enc) { term_encoding = enc; } //---------------------------------------------------------------------- inline void FTermData::setTTYFileDescriptor (int fd) { fd_tty = fd; } //---------------------------------------------------------------------- inline void FTermData::setBaudrate (uInt baud) { baudrate = baud; } //---------------------------------------------------------------------- inline void FTermData::supportShadowCharacter (bool available) { shadow_character = available; } //---------------------------------------------------------------------- inline void FTermData::supportHalfBlockCharacter (bool available) { half_block_character = available; } //---------------------------------------------------------------------- inline void FTermData::supportCursorOptimisation (bool available) { cursor_optimisation = available; } //---------------------------------------------------------------------- inline void FTermData::setCursorHidden (bool hidden_state) { hidden_cursor = hidden_state; } //---------------------------------------------------------------------- inline void FTermData::useAlternateScreen (bool use) { use_alternate_screen = use; } //---------------------------------------------------------------------- inline void FTermData::setASCIIConsole (bool ascii) { ascii_console = ascii; } //---------------------------------------------------------------------- inline void FTermData::setVT100Console (bool vt100) { vt100_console = vt100; } //---------------------------------------------------------------------- inline void FTermData::setUTF8Console (bool utf8) { utf8_console = utf8; } //---------------------------------------------------------------------- inline void FTermData::setUTF8 (bool utf8) { utf8_state = utf8; } //---------------------------------------------------------------------- inline void FTermData::setNewFont (bool nfont) { new_font = nfont; } //---------------------------------------------------------------------- inline void FTermData::setVGAFont (bool vga) { vga_font = vga; } //---------------------------------------------------------------------- inline void FTermData::setMonochron (bool mono) { monochron = mono; } //---------------------------------------------------------------------- inline void FTermData::setTermResized (bool resize) { resize_term = resize; } //---------------------------------------------------------------------- inline void FTermData::setTermType (const char name[]) { if ( ! name ) return; std::strncpy (termtype, name, sizeof(termtype) - 1); termtype[sizeof(termtype) - 1] = '\0'; } //---------------------------------------------------------------------- inline void FTermData::setTermFileName (const char file_name[]) { if ( ! file_name ) return; std::strncpy (termfilename, file_name, sizeof(termfilename) - 1); termfilename[sizeof(termfilename) - 1] = '\0'; } //---------------------------------------------------------------------- inline void FTermData::setXtermFont (const FString& font) { xterm_font = font; } //---------------------------------------------------------------------- inline void FTermData::setXtermTitle (const FString& title) { xterm_title = title; } //---------------------------------------------------------------------- #if DEBUG && defined(__linux__) inline void FTermData::setFramebufferBpp (int bpp) { framebuffer_bpp = bpp; } #endif } // namespace finalcut #endif // FTERMDATA_H