diff --git a/ChangeLog b/ChangeLog index eac026bd..cb8b40d2 100644 --- a/ChangeLog +++ b/ChangeLog @@ -2,6 +2,8 @@ * Replace non-printable characters for Tera Term and Cygwin terminal directly at start-up. Special cases in the code are no longer necessary. + * New Method setInsertCursorStyle() to change the appearance + of a cursor 2017-04-02 Markus Gans * Remap the meta key to left alt key at runtime diff --git a/src/flineedit.cpp b/src/flineedit.cpp index e964cb00..1a6bc9fe 100644 --- a/src/flineedit.cpp +++ b/src/flineedit.cpp @@ -50,14 +50,7 @@ FLineEdit::FLineEdit (const FString& txt, FWidget* parent) FLineEdit::~FLineEdit() // destructor { if ( ! insert_mode ) - { - setXTermCursorStyle(fc::blinking_underline); - setKDECursor(fc::UnderlineCursor); - setConsoleCursor(fc::underscore_cursor, isCursorHidden()); - - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:ffff/ffff/ffff"); - } + setInsertCursorStyle(); } @@ -314,23 +307,9 @@ void FLineEdit::onKeyPress (FKeyEvent* ev) insert_mode = not insert_mode; if ( insert_mode ) - { - setXTermCursorStyle(fc::blinking_underline); - setKDECursor(fc::UnderlineCursor); - setConsoleCursor(fc::underscore_cursor, isCursorHidden()); - - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:ffff/ffff/ffff"); - } + setInsertCursorStyle(); else - { - setXTermCursorStyle(fc::steady_block); - setKDECursor(fc::BlockCursor); - setConsoleCursor(fc::full_block_cursor, isCursorHidden()); - - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:eeee/0000/0000"); - } + unsetInsertCursorStyle(); ev->accept(); break; @@ -593,34 +572,16 @@ void FLineEdit::onAccel (FAccelEvent* ev) void FLineEdit::onHide (FHideEvent*) { if ( ! insert_mode ) - { - setXTermCursorStyle(fc::blinking_underline); - setKDECursor(fc::UnderlineCursor); - setConsoleCursor(fc::underscore_cursor, isCursorHidden()); - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:ffff/ffff/ffff"); - } + setInsertCursorStyle(); } //---------------------------------------------------------------------- void FLineEdit::onFocusIn (FFocusEvent*) { if ( insert_mode ) - { - setXTermCursorStyle(fc::blinking_underline); - setKDECursor(fc::UnderlineCursor); - setConsoleCursor(fc::underscore_cursor, isCursorHidden()); - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:ffff/ffff/ffff"); - } + setInsertCursorStyle(); else - { - setXTermCursorStyle(fc::steady_block); - setKDECursor(fc::BlockCursor); - setConsoleCursor(fc::full_block_cursor, isCursorHidden()); - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:0000/0000/0000"); - } + unsetInsertCursorStyle(); if ( getStatusBar() ) { @@ -640,14 +601,7 @@ void FLineEdit::onFocusOut (FFocusEvent*) } if ( ! insert_mode ) - { - setXTermCursorStyle(fc::blinking_underline); - setKDECursor(fc::UnderlineCursor); - setConsoleCursor(fc::underscore_cursor, isCursorHidden()); - - if ( isUrxvtTerminal() ) - setXTermCursorColor("rgb:ffff/ffff/ffff"); - } + setInsertCursorStyle(); } diff --git a/src/fvterm.cpp b/src/fvterm.cpp index 687dfda5..5704033f 100644 --- a/src/fvterm.cpp +++ b/src/fvterm.cpp @@ -703,6 +703,29 @@ bool FVTerm::isChildPrintArea() const return false; } +//---------------------------------------------------------------------- +void FVTerm::setInsertCursorStyle (bool on) +{ + if ( on ) + { + setXTermCursorStyle(fc::blinking_underline); + setKDECursor(fc::UnderlineCursor); + setConsoleCursor(fc::underscore_cursor, isCursorHidden()); + + if ( isUrxvtTerminal() ) + setXTermCursorColor("rgb:ffff/ffff/ffff"); + } + else + { + setXTermCursorStyle(fc::steady_block); + setKDECursor(fc::BlockCursor); + setConsoleCursor(fc::full_block_cursor, isCursorHidden()); + + if ( isUrxvtTerminal() ) + setXTermCursorColor("rgb:eeee/0000/0000"); + } +} + //---------------------------------------------------------------------- void FVTerm::createArea ( const FRect& r , const FPoint& p diff --git a/src/fvterm.h b/src/fvterm.h index 3075ebeb..5bf9b66a 100644 --- a/src/fvterm.h +++ b/src/fvterm.h @@ -286,6 +286,11 @@ class FVTerm : public FObject, public FTerm bool isChildPrintArea() const; bool isVirtualWindow() const; + // Mutator + static void setInsertCursorStyle (bool on); + static void setInsertCursorStyle(); + static void unsetInsertCursorStyle(); + // Methods void createArea ( const FRect& , const FPoint& @@ -760,6 +765,14 @@ inline bool FVTerm::hasChildPrintArea() const inline bool FVTerm::isVirtualWindow() const { return vwin; } +//---------------------------------------------------------------------- +inline void FVTerm::setInsertCursorStyle() +{ setInsertCursorStyle(true); } + +//---------------------------------------------------------------------- +inline void FVTerm::unsetInsertCursorStyle() +{ setInsertCursorStyle(false); } + //---------------------------------------------------------------------- inline void FVTerm::setPrintArea (term_area* area) { print_area = area; } diff --git a/test/termcap.cpp b/test/termcap.cpp index 8890ad6e..2fb62473 100644 --- a/test/termcap.cpp +++ b/test/termcap.cpp @@ -112,7 +112,7 @@ int main (int argc, char* argv[]) tcapString ( "| The SecDA String" , terminal->getSecDAString().c_str() ); - std::cout << "'------------------- debug -------------------\r\n"; + std::cout << "`------------------- debug -------------------\r\n"; #endif std::cout << "\r\n[Booleans]\r\n";