Simplification of FMouse::createMouseObject()

This commit is contained in:
Markus Gans 2020-06-06 22:22:01 +02:00
parent 3d2a0c6dd2
commit c1b2699e53
8 changed files with 25 additions and 47 deletions

View File

@ -1,6 +1,7 @@
2020-06-06 Markus Gans <guru.mail@muenster.de> 2020-06-06 Markus Gans <guru.mail@muenster.de>
* Now, the terminal is not initialized before the method show() * Now, the terminal is not initialized before the method show()
is called. Or you force it explicitly via the FApplication object. is called. Or you force it explicitly via the FApplication object.
* Simplification of FMouse::createMouseObject()
2020-05-30 Markus Gans <guru.mail@muenster.de> 2020-05-30 Markus Gans <guru.mail@muenster.de>
* With the two new methods FApplication::setDarkTheme() and * With the two new methods FApplication::setDarkTheme() and

View File

@ -216,7 +216,7 @@ int main (int argc, char* argv[])
// Pointer to the global virtual terminal object // Pointer to the global virtual terminal object
app = &term_app; app = &term_app;
if ( app->isQuit() ) if ( finalcut::FApplication::isQuit() )
return 0; return 0;
// Get screen dimension // Get screen dimension
@ -267,14 +267,12 @@ int main (int argc, char* argv[])
std::cout << "\r" << line << std::flush; std::cout << "\r" << line << std::flush;
// Generation of a logger in a shared_ptr via a pointer // Generation of a logger in a shared_ptr via a pointer
finalcut::FApplication::setLog(std::make_shared<DirectLogger>()); finalcut::FApplication::setLog(std::make_shared<DirectLogger>());
// Get the shared_ptr with the base class
std::shared_ptr<finalcut::FLog> log = finalcut::FApplication::getLog();
const finalcut::FOptiMove& opti_move = *finalcut::FTerm::getFOptiMove(); const finalcut::FOptiMove& opti_move = *finalcut::FTerm::getFOptiMove();
finalcut::printDurations(opti_move); finalcut::printDurations(opti_move);
delete &log;
// Waiting for keypress // Waiting for keypress
keyPressed(); keyPressed();
app = nullptr; // End of term_app object scope app = nullptr; // End of term_app object scope
return 0; return 0;
} }

View File

@ -177,40 +177,6 @@ inline bool FMouse::isInputDataPending()
return input_data_pending; return input_data_pending;
} }
//----------------------------------------------------------------------
inline FMouse* FMouse::createMouseObject (const mouse_type mt)
{
assert ( mt == FMouse::none
|| mt == FMouse::gpm
|| mt == FMouse::x11
|| mt == FMouse::sgr
|| mt == FMouse::urxvt );
switch ( mt )
{
case none:
return nullptr;
case gpm:
#ifdef F_HAVE_LIBGPM
return new FMouseGPM;
#else
return nullptr;
#endif
case x11:
return new FMouseX11;
case sgr:
return new FMouseSGR;
case urxvt:
return new FMouseUrxvt;
}
return nullptr;
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FMouse::clearButtonState() void FMouse::clearButtonState()
{ {
@ -1216,12 +1182,12 @@ void FMouseUrxvt::setButtonState (const int btn, const struct timeval* time)
FMouseControl::FMouseControl() FMouseControl::FMouseControl()
{ {
#ifdef F_HAVE_LIBGPM #ifdef F_HAVE_LIBGPM
mouse_protocol[FMouse::gpm] = FMouse::createMouseObject(FMouse::gpm); mouse_protocol[FMouse::gpm] = FMouse::createMouseObject<FMouseGPM>();
#endif #endif
mouse_protocol[FMouse::x11] = FMouse::createMouseObject(FMouse::x11); mouse_protocol[FMouse::x11] = FMouse::createMouseObject<FMouseX11>();
mouse_protocol[FMouse::sgr] = FMouse::createMouseObject(FMouse::sgr); mouse_protocol[FMouse::sgr] = FMouse::createMouseObject<FMouseSGR>();
mouse_protocol[FMouse::urxvt] = FMouse::createMouseObject(FMouse::urxvt); mouse_protocol[FMouse::urxvt] = FMouse::createMouseObject<FMouseUrxvt>();
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -2549,7 +2549,9 @@ void FTerm::terminalSizeChange()
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FTerm::processTermination (int signum) void FTerm::processTermination (int signum)
{ {
init_term_object->finish(); if ( init_term_object )
init_term_object->finish();
std::fflush (stderr); std::fflush (stderr);
std::fflush (stdout); std::fflush (stdout);
@ -2562,6 +2564,9 @@ void FTerm::processTermination (int signum)
printExitMessage(); printExitMessage();
} }
if ( init_term_object )
init_term_object->deallocationValues();
std::terminate(); std::terminate();
} }

View File

@ -129,7 +129,7 @@ class FApplication : public FWidget
void sendQueuedEvents(); void sendQueuedEvents();
bool eventInQueue(); bool eventInQueue();
bool removeQueuedEvent (const FObject*); bool removeQueuedEvent (const FObject*);
void initTerminal(); void initTerminal() override;
static void setDefaultTheme(); static void setDefaultTheme();
static void setDarkTheme(); static void setDarkTheme();
static void closeConfirmationDialog (FWidget*, FCloseEvent*); static void closeConfirmationDialog (FWidget*, FCloseEvent*);

View File

@ -130,7 +130,8 @@ class FMouse
bool isInputDataPending(); bool isInputDataPending();
// Methods // Methods
static FMouse* createMouseObject (const mouse_type); template<typename ClassT>
static FMouse* createMouseObject ();
void clearButtonState(); void clearButtonState();
virtual void setRawData (FKeyboard::keybuffer&) = 0; virtual void setRawData (FKeyboard::keybuffer&) = 0;
virtual void processEvent (struct timeval*) = 0; virtual void processEvent (struct timeval*) = 0;
@ -191,6 +192,13 @@ class FMouse
FPoint new_mouse_position{}; FPoint new_mouse_position{};
}; };
//----------------------------------------------------------------------
template<typename ClassT>
inline FMouse* FMouse::createMouseObject()
{
return new ClassT;
}
#ifdef F_HAVE_LIBGPM #ifdef F_HAVE_LIBGPM
//---------------------------------------------------------------------- //----------------------------------------------------------------------

View File

@ -317,7 +317,7 @@ class FVTerm
void processTerminalUpdate(); void processTerminalUpdate();
static void startTerminalUpdate(); static void startTerminalUpdate();
static void finishTerminalUpdate(); static void finishTerminalUpdate();
void initTerminal(); virtual void initTerminal();
private: private:
// Enumerations // Enumerations

View File

@ -374,7 +374,7 @@ class FWidget : public FVTerm, public FObject
void setTermOffsetWithPadding(); void setTermOffsetWithPadding();
// Methods // Methods
void initTerminal(); void initTerminal() override;
void initDesktop(); void initDesktop();
virtual void adjustSize(); virtual void adjustSize();
void adjustSizeGlobal(); void adjustSizeGlobal();