234 lines
9.4 KiB
C++
234 lines
9.4 KiB
C++
/***********************************************************************
|
|
* ftermxterminal.h - Contains all xterm-specific terminal functions *
|
|
* *
|
|
* This file is part of the Final Cut widget toolkit *
|
|
* *
|
|
* Copyright 2018-2020 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 *
|
|
* <http://www.gnu.org/licenses/>. *
|
|
***********************************************************************/
|
|
|
|
/* Standalone class
|
|
* ════════════════
|
|
*
|
|
* ▕▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▏
|
|
* ▕ FTermXTerminal ▏
|
|
* ▕▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▁▏
|
|
*/
|
|
|
|
#ifndef FTERMXTERMINAL_H
|
|
#define FTERMXTERMINAL_H
|
|
|
|
#if !defined (USE_FINAL_H) && !defined (COMPILE_FINAL_CUT)
|
|
#error "Only <final/final.h> can be included directly."
|
|
#endif
|
|
|
|
namespace finalcut
|
|
{
|
|
|
|
// class forward declaration
|
|
class FString;
|
|
class FSystem;
|
|
class FTermDetection;
|
|
|
|
//----------------------------------------------------------------------
|
|
// class FTermXTerminal
|
|
//----------------------------------------------------------------------
|
|
|
|
class FTermXTerminal final
|
|
{
|
|
public:
|
|
// Constructors
|
|
FTermXTerminal();
|
|
|
|
// Disable copy constructor
|
|
FTermXTerminal (const FTermXTerminal&) = delete;
|
|
|
|
// Destructor
|
|
~FTermXTerminal();
|
|
|
|
// Disable copy assignment operator (=)
|
|
FTermXTerminal& operator = (const FTermXTerminal&) = delete;
|
|
|
|
// Mutators
|
|
void redefineDefaultColors (bool);
|
|
void setCursorStyle (fc::xtermCursorStyle);
|
|
void setFont (const FString&);
|
|
void setTitle (const FString&);
|
|
void setTermSize (const FSize&);
|
|
void setForeground (const FString&);
|
|
void setBackground (const FString&);
|
|
void setCursorColor (const FString&);
|
|
void setMouseForeground (const FString&);
|
|
void setMouseBackground (const FString&);
|
|
void setHighlightBackground (const FString&);
|
|
static void setMouseSupport (bool);
|
|
static void setMouseSupport();
|
|
static void unsetMouseSupport();
|
|
void metaSendsESC (bool);
|
|
|
|
// Accessors
|
|
const FString getClassName() const;
|
|
fc::xtermCursorStyle getCursorStyle() const;
|
|
const FString getFont() const;
|
|
const FString getTitle() const;
|
|
const FString getForeground() const;
|
|
const FString getBackground() const;
|
|
const FString getCursorColor() const;
|
|
const FString getMouseForeground() const;
|
|
const FString getMouseBackground() const;
|
|
const FString getHighlightBackground() const;
|
|
|
|
// Inquiries
|
|
bool hasFont() const;
|
|
bool hasTitle() const;
|
|
|
|
// Methods
|
|
void init();
|
|
void setDefaults();
|
|
void resetColorMap();
|
|
void resetForeground();
|
|
void resetBackground();
|
|
void resetCursorColor();
|
|
void resetMouseForeground();
|
|
void resetMouseBackground();
|
|
void resetHighlightBackground();
|
|
void resetDefaults();
|
|
void captureFontAndTitle();
|
|
|
|
private:
|
|
// Methods
|
|
void warnNotInitialized();
|
|
void setXTermCursorStyle();
|
|
void setXTermFont();
|
|
void setXTermTitle();
|
|
void setXTermSize();
|
|
void setXTermForeground();
|
|
void setXTermBackground();
|
|
void setXTermCursorColor();
|
|
void setXTermMouseForeground();
|
|
void setXTermMouseBackground();
|
|
void setXTermHighlightBackground();
|
|
void setXTerm8ColorDefaults();
|
|
void setXTerm16ColorDefaults();
|
|
void setXTermDefaultsMouseCursor();
|
|
bool canSetXTermBackground();
|
|
void resetXTermColorMap();
|
|
void resetXTermForeground();
|
|
void resetXTermBackground();
|
|
void resetXTermCursorColor();
|
|
void resetXTermMouseForeground();
|
|
void resetXTermMouseBackground();
|
|
void resetXTermHighlightBackground();
|
|
bool isInitialized();
|
|
bool canResetColor();
|
|
void oscPrefix();
|
|
void oscPostfix();
|
|
const FString captureXTermFont();
|
|
const FString captureXTermTitle();
|
|
static void enableXTermMouse();
|
|
static void disableXTermMouse();
|
|
void enableXTermMetaSendsESC();
|
|
void disableXTermMetaSendsESC();
|
|
|
|
// Data members
|
|
static bool mouse_support;
|
|
bool meta_sends_esc{false};
|
|
bool xterm_default_colors{false};
|
|
std::size_t term_width{80};
|
|
std::size_t term_height{24};
|
|
FString xterm_font{};
|
|
FString xterm_title{};
|
|
FString foreground_color{};
|
|
FString background_color{};
|
|
FString cursor_color{};
|
|
FString mouse_foreground_color{};
|
|
FString mouse_background_color{};
|
|
FString highlight_background_color{};
|
|
static FSystem* fsystem;
|
|
FTermDetection* term_detection{nullptr};
|
|
fc::xtermCursorStyle cursor_style{fc::unknown_cursor_style};
|
|
};
|
|
|
|
|
|
// FTermXTerminal inline functions
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getClassName() const
|
|
{ return "FTermXTerminal"; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline void FTermXTerminal::redefineDefaultColors (bool enable)
|
|
{ xterm_default_colors = enable; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline fc::xtermCursorStyle FTermXTerminal::getCursorStyle() const
|
|
{ return cursor_style; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getFont() const
|
|
{ return xterm_font; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getTitle() const
|
|
{ return xterm_title; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getForeground() const
|
|
{ return foreground_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getBackground() const
|
|
{ return background_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getCursorColor() const
|
|
{ return cursor_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getMouseForeground() const
|
|
{ return mouse_foreground_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getMouseBackground() const
|
|
{ return mouse_background_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline const FString FTermXTerminal::getHighlightBackground() const
|
|
{ return highlight_background_color; }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline bool FTermXTerminal::hasFont() const
|
|
{ return bool(xterm_font.getLength() > 2); }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline bool FTermXTerminal::hasTitle() const
|
|
{ return bool(xterm_title.getLength() > 0); }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline void FTermXTerminal::setMouseSupport()
|
|
{ setMouseSupport (true); }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline void FTermXTerminal::unsetMouseSupport()
|
|
{ setMouseSupport (false); }
|
|
|
|
//----------------------------------------------------------------------
|
|
inline bool FTermXTerminal::isInitialized()
|
|
{ return bool(fsystem && term_detection); }
|
|
|
|
} // namespace finalcut
|
|
|
|
#endif // FTERMXTERMINAL_H
|