diff --git a/examples/dialog.cpp b/examples/dialog.cpp index eef1e272..cbd80b65 100644 --- a/examples/dialog.cpp +++ b/examples/dialog.cpp @@ -26,13 +26,13 @@ using finalcut::FPoint; using finalcut::FSize; // function prototype -void cb_quit (finalcut::FApplication&); +void cb_quit (const finalcut::FApplication&); //---------------------------------------------------------------------- // callback function //---------------------------------------------------------------------- -void cb_quit (finalcut::FApplication& app) +void cb_quit (const finalcut::FApplication& app) { app.quit(); } diff --git a/examples/fullwidth-character.cpp b/examples/fullwidth-character.cpp index b375e210..3e358379 100644 --- a/examples/fullwidth-character.cpp +++ b/examples/fullwidth-character.cpp @@ -105,7 +105,7 @@ int main (int argc, char* argv[]) // Callback lambda expressions auto cb_exit = \ - [] (finalcut::FApplication& a) + [] (const finalcut::FApplication& a) { a.quit(); }; diff --git a/examples/input-dialog.cpp b/examples/input-dialog.cpp index b1438d8b..e977d60d 100644 --- a/examples/input-dialog.cpp +++ b/examples/input-dialog.cpp @@ -26,20 +26,21 @@ using finalcut::FPoint; using finalcut::FSize; // function prototypes -void cb_quit (finalcut::FApplication&); -void cb_publish (finalcut::FCheckBox&, finalcut::FCheckBox&); +void cb_quit (const finalcut::FApplication&); +void cb_publish (const finalcut::FCheckBox&, finalcut::FCheckBox&); //---------------------------------------------------------------------- // callback functions //---------------------------------------------------------------------- -void cb_quit (finalcut::FApplication& app) +void cb_quit (const finalcut::FApplication& app) { app.quit(); } //---------------------------------------------------------------------- -void cb_publish (finalcut::FCheckBox& cbox1, finalcut::FCheckBox& cbox2) +void cb_publish ( const finalcut::FCheckBox& cbox1 + , finalcut::FCheckBox& cbox2 ) { if ( cbox1.isChecked() ) cbox2.setEnable(); diff --git a/examples/menu.cpp b/examples/menu.cpp index 934c3916..216c630f 100644 --- a/examples/menu.cpp +++ b/examples/menu.cpp @@ -61,7 +61,7 @@ class Menu final : public finalcut::FDialog void onClose (finalcut::FCloseEvent*) override; // Callback method - void cb_message (finalcut::FMenuItem*); + void cb_message (const finalcut::FMenuItem*); // Data members finalcut::FString line{13, fc::BoxDrawingsHorizontal}; @@ -305,7 +305,7 @@ void Menu::onClose (finalcut::FCloseEvent* ev) } //---------------------------------------------------------------------- -void Menu::cb_message (finalcut::FMenuItem* menuitem) +void Menu::cb_message (const finalcut::FMenuItem* menuitem) { auto text = menuitem->getText(); text = text.replace('&', ""); diff --git a/examples/opti-move.cpp b/examples/opti-move.cpp index a4950f5e..70b1cb05 100644 --- a/examples/opti-move.cpp +++ b/examples/opti-move.cpp @@ -217,12 +217,12 @@ int main (int argc, char* argv[]) // Force terminal initialization without calling show() term_app.initTerminal(); - // Pointer to the global virtual terminal object - app = &term_app; - if ( finalcut::FApplication::isQuit() ) return 0; + // Pointer to the global virtual terminal object + app = &term_app; + // Get screen dimension int xmax = int(term_app.getDesktopWidth() - 1); int ymax = int(term_app.getDesktopHeight() - 1); diff --git a/examples/ui.cpp b/examples/ui.cpp index 6676d9ca..bd86c144 100644 --- a/examples/ui.cpp +++ b/examples/ui.cpp @@ -304,12 +304,13 @@ class MyDialog final : public finalcut::FDialog void cb_switchTheme (const finalcut::FCheckMenuItem*) const; void cb_input2buttonText ( finalcut::FButton& , const finalcut::FLineEdit& ) const; - void cb_setTitlebar (finalcut::FLineEdit&); + void cb_setTitlebar (const finalcut::FLineEdit&); void cb_showProgressBar(); - void cb_updateNumber (finalcut::FListBox&, finalcut::FLabel&) const; - void cb_activateButton ( finalcut::FRadioButton& + void cb_updateNumber ( const finalcut::FListBox& + , finalcut::FLabel& ) const; + void cb_activateButton ( const finalcut::FRadioButton& , finalcut::FButton& ) const; - void cb_view (finalcut::FMenuItem*); + void cb_view (const finalcut::FMenuItem*); void cb_setInput (finalcut::FListBox&, finalcut::FLineEdit&) const; // Data members @@ -951,7 +952,7 @@ void MyDialog::cb_input2buttonText ( finalcut::FButton& button } //---------------------------------------------------------------------- -void MyDialog::cb_setTitlebar (finalcut::FLineEdit& lineedit) +void MyDialog::cb_setTitlebar (const finalcut::FLineEdit& lineedit) { finalcut::FString title{}; lineedit >> title; @@ -968,7 +969,7 @@ void MyDialog::cb_showProgressBar() } //---------------------------------------------------------------------- -void MyDialog::cb_updateNumber ( finalcut::FListBox& list +void MyDialog::cb_updateNumber ( const finalcut::FListBox& list , finalcut::FLabel& num) const { const auto count = list.getCount(); @@ -984,7 +985,7 @@ void MyDialog::cb_updateNumber ( finalcut::FListBox& list } //---------------------------------------------------------------------- -void MyDialog::cb_activateButton ( finalcut::FRadioButton& rb +void MyDialog::cb_activateButton ( const finalcut::FRadioButton& rb , finalcut::FButton& button) const { if ( rb.isChecked() ) @@ -996,7 +997,7 @@ void MyDialog::cb_activateButton ( finalcut::FRadioButton& rb } //---------------------------------------------------------------------- -void MyDialog::cb_view (finalcut::FMenuItem* item) +void MyDialog::cb_view (const finalcut::FMenuItem* item) { finalcut::FString file{}; diff --git a/src/fbuttongroup.cpp b/src/fbuttongroup.cpp index 0a917bba..1ae70041 100644 --- a/src/fbuttongroup.cpp +++ b/src/fbuttongroup.cpp @@ -542,7 +542,7 @@ void FButtonGroup::directFocus() } //---------------------------------------------------------------------- -void FButtonGroup::cb_buttonToggled (FToggleButton* button) const +void FButtonGroup::cb_buttonToggled (const FToggleButton* button) const { if ( (button && ! button->isChecked()) || buttonlist.empty() ) return; diff --git a/src/ffiledialog.cpp b/src/ffiledialog.cpp index 7b18e59f..66a4c70f 100644 --- a/src/ffiledialog.cpp +++ b/src/ffiledialog.cpp @@ -201,7 +201,7 @@ void FFileDialog::setPath (const FString& dir) return; } - if ( fsystem->realpath(dir.c_str(), resolved_path) != nullptr ) + if ( fsystem && fsystem->realpath(dir.c_str(), resolved_path) != nullptr ) r_dir.setString(resolved_path); else r_dir.setString(dir); diff --git a/src/fmenu.cpp b/src/fmenu.cpp index c249f008..5ecfd668 100644 --- a/src/fmenu.cpp +++ b/src/fmenu.cpp @@ -339,7 +339,7 @@ void FMenu::cb_menuitemDisabled() } //---------------------------------------------------------------------- -void FMenu::cb_menuitemToggled (FMenuItem* m_item) const +void FMenu::cb_menuitemToggled (const FMenuItem* m_item) const { if ( ! (has_checkable_items && m_item && m_item->isChecked()) ) return; diff --git a/src/fmenubar.cpp b/src/fmenubar.cpp index ac6bc01d..c1ceecfd 100644 --- a/src/fmenubar.cpp +++ b/src/fmenubar.cpp @@ -228,7 +228,7 @@ void FMenuBar::onAccel (FAccelEvent* ev) } //---------------------------------------------------------------------- -void FMenuBar::cb_itemDeactivated (FMenuItem* menuitem) const +void FMenuBar::cb_itemDeactivated (const FMenuItem* menuitem) const { if ( ! menuitem->hasMenu() ) return; diff --git a/src/fmessagebox.cpp b/src/fmessagebox.cpp index 6896ced0..4d0396be 100644 --- a/src/fmessagebox.cpp +++ b/src/fmessagebox.cpp @@ -108,7 +108,7 @@ FMessageBox& FMessageBox::operator = (const FMessageBox& mbox) } else { - for (uInt n{0}; n < num_buttons; n++) + for (uInt n{0}; n < num_buttons && button[n]; n++) delete button[n]; if ( mbox.getParentWidget() ) @@ -138,7 +138,7 @@ void FMessageBox::setHeadline (const FString& headline) headline_text.setString(headline); setHeight(getHeight() + 2, true); - for (uInt n{0}; n < num_buttons; n++) + for (uInt n{0}; n < num_buttons && button[n]; n++) button[n]->setY (int(getHeight()) - 4, false); const std::size_t column_width = getColumnWidth(headline_text); @@ -268,7 +268,7 @@ inline void FMessageBox::allocation() //---------------------------------------------------------------------- inline void FMessageBox::deallocation() { - for (uInt n{0}; n < num_buttons; n++) + for (uInt n{0}; n < num_buttons && button[n]; n++) delete button[n]; } @@ -388,7 +388,7 @@ void FMessageBox::resizeButtons() const std::size_t len[3]{}; std::size_t max_size{}; - for (std::size_t n{0}; n < num_buttons; n++) + for (std::size_t n{0}; n < num_buttons && button[n]; n++) { len[n] = button[n]->getText().getLength(); @@ -410,7 +410,7 @@ void FMessageBox::resizeButtons() const if ( max_size < 7 ) max_size = 7; - for (std::size_t n{0}; n < num_buttons; n++) + for (std::size_t n{0}; n < num_buttons && button[n]; n++) button[n]->setWidth(max_size + 3, false); } @@ -420,7 +420,7 @@ void FMessageBox::adjustButtons() static constexpr std::size_t gap = 4; std::size_t btn_width{0}; - for (std::size_t n{0}; n < num_buttons; n++) + for (std::size_t n{0}; n < num_buttons && button[n]; n++) { if ( n == num_buttons - 1 ) btn_width += button[n]->getWidth(); @@ -439,7 +439,7 @@ void FMessageBox::adjustButtons() const int btn_x = int((getWidth() - btn_width) / 2); - for (std::size_t n{0}; n < num_buttons; n++) + for (std::size_t n{0}; n < num_buttons && button[n]; n++) { if ( n == 0 ) button[n]->setX(btn_x); diff --git a/src/fstatusbar.cpp b/src/fstatusbar.cpp index 0dab686f..b4b0bd3e 100644 --- a/src/fstatusbar.cpp +++ b/src/fstatusbar.cpp @@ -488,7 +488,7 @@ void FStatusBar::onMouseMove (FMouseEvent* ev) } //---------------------------------------------------------------------- -void FStatusBar::cb_statuskey_activated (FStatusKey* statuskey) +void FStatusBar::cb_statuskey_activated (const FStatusKey* statuskey) { if ( ! statuskey ) return; diff --git a/src/fstring.cpp b/src/fstring.cpp index 1216fa32..fff47f25 100644 --- a/src/fstring.cpp +++ b/src/fstring.cpp @@ -387,7 +387,10 @@ std::size_t FString::getUTF8length() const const char* s = c_str(); while ( *s ) - len += std::size_t((*s++ & 0xc0) != 0x80); + { + len += std::size_t((*s & 0xc0) != 0x80); + s++; + } return len; } @@ -1449,29 +1452,26 @@ inline const char* FString::_to_cstring (const wchar_t s[]) const if ( c_string ) delete[](c_string); - const int size = int(std::wcslen(s)) + 1; - const int dest_size = size * int(CHAR_SIZE); const wchar_t* src = s; - std::mbstate_t state{}; - std::memset (&state, '\0', sizeof(mbstate_t)); + auto state = std::mbstate_t(); + auto size = std::wcsrtombs(nullptr, &src, 0, &state) + 1; try { - c_string = new char[std::size_t(dest_size)](); + c_string = new char[size](); // pre-initialiaze the whole string with '\0' - std::memset (c_string, '\0', std::size_t(dest_size)); + std::memset (c_string, '\0', size); } catch (const std::bad_alloc&) { - badAllocOutput ("char[std::size_t(dest_size)]"); + badAllocOutput ("char[size]"); return nullptr; } - const int mblength = \ - int(std::wcsrtombs (c_string, &src, std::size_t(dest_size), &state)); + const auto mblength = std::wcsrtombs (c_string, &src, size, &state); - if ( mblength == -1 && errno != EILSEQ ) + if ( mblength == static_cast(-1) && errno != EILSEQ ) { delete[](c_string); c_string = nullptr; @@ -1501,29 +1501,26 @@ inline const wchar_t* FString::_to_wcstring (const char s[]) const } } - const int size = int(std::strlen(s)) + 1; - const int dest_size = size * int(CHAR_SIZE); const char* src = s; wchar_t* dest{}; - std::mbstate_t state{}; - std::memset (&state, '\0', sizeof(mbstate_t)); + auto state = std::mbstate_t(); + auto size = std::mbsrtowcs(nullptr, &src, 0, &state) + 1; try { - dest = new wchar_t[std::size_t(size)](); + dest = new wchar_t[size](); // pre-initialiaze the whole string with '\0' - std::wmemset (dest, L'\0', std::size_t(size)); + std::wmemset (dest, L'\0', size); } catch (const std::bad_alloc&) { - badAllocOutput ("wchar_t[std::size_t(size)]"); + badAllocOutput ("wchar_t[size]"); return nullptr; } - const int wclength = \ - int(std::mbsrtowcs (dest, &src, std::size_t(dest_size), &state)); + const auto wclength = std::mbsrtowcs (dest, &src, size, &state); - if ( wclength == -1 ) + if ( wclength == static_cast(-1) ) { if ( src != s ) return dest; diff --git a/src/include/final/fapplication.h b/src/include/final/fapplication.h index 7c61a8f9..fc7c0b76 100644 --- a/src/include/final/fapplication.h +++ b/src/include/final/fapplication.h @@ -139,7 +139,7 @@ class FApplication : public FWidget static void closeConfirmationDialog (FWidget*, FCloseEvent*); // Callback method - void cb_exitApp (FWidget*); + void cb_exitApp (FWidget*) const; protected: virtual void processExternalUserEvent(); @@ -235,7 +235,7 @@ inline char** FApplication::getArgv() const { return app_argv; } //---------------------------------------------------------------------- -inline void FApplication::cb_exitApp (FWidget* w) +inline void FApplication::cb_exitApp (FWidget* w) const { w->close(); } } // namespace finalcut diff --git a/src/include/final/fbuttongroup.h b/src/include/final/fbuttongroup.h index 878ff340..f59e05fd 100644 --- a/src/include/final/fbuttongroup.h +++ b/src/include/final/fbuttongroup.h @@ -130,7 +130,7 @@ class FButtonGroup : public FScrollView void directFocus(); // Callback method - void cb_buttonToggled (FToggleButton*) const; + void cb_buttonToggled (const FToggleButton*) const; // Data members FString text{}; diff --git a/src/include/final/fcallback.h b/src/include/final/fcallback.h index d6ec1cad..1afa8339 100644 --- a/src/include/final/fcallback.h +++ b/src/include/final/fcallback.h @@ -62,43 +62,6 @@ struct FCallbackData , cb_function(c) { } - FCallbackData (const FCallbackData& c) // copy constructor - : cb_signal(c.cb_signal) - , cb_instance(c.cb_instance) - , cb_function_ptr(c.cb_function_ptr) - , cb_function(c.cb_function) - { } - - FCallbackData (FCallbackData&& c) noexcept // move constructor - : cb_signal(std::move(c.cb_signal)) - , cb_instance(std::move(c.cb_instance)) - , cb_function_ptr(std::move(c.cb_function_ptr)) - , cb_function(std::move(c.cb_function)) - { } - - // Destructor - ~FCallbackData() - { } - - // Overloaded operators - FCallbackData& operator = (const FCallbackData& c) - { - cb_signal = c.cb_signal; - cb_instance = c.cb_instance; - cb_function_ptr = c.cb_function_ptr; - cb_function = c.cb_function; - return *this; - } - - FCallbackData& operator = (FCallbackData&& c) noexcept - { - cb_signal = std::move(c.cb_signal); - cb_instance = std::move(c.cb_instance); - cb_function_ptr = std::move(c.cb_function_ptr); - cb_function = std::move(c.cb_function); - return *this; - } - // Data members FString cb_signal{}; FWidget* cb_instance{}; @@ -132,7 +95,7 @@ class FCallback return "FCallback"; } - std::size_t getCallbackCount() + std::size_t getCallbackCount() const { return callback_objects.size(); } @@ -235,10 +198,9 @@ class FCallback // Add a function as callback auto ptr = reinterpret_cast(&cb_function); - auto fn = std::bind ( std::forward(cb_function) - , std::forward(args)... ); + auto fn = std::bind (cb_function, std::forward(args)...); FCallbackData obj{ cb_signal, nullptr, ptr, fn }; - callback_objects.push_back(obj);; + callback_objects.push_back(obj); } template(cb_function) - , std::forward(args)... ); + auto fn = std::bind (cb_function, std::forward(args)...); FCallbackData obj{ cb_signal, nullptr, nullptr, fn }; callback_objects.push_back(obj); } @@ -419,7 +380,7 @@ class FCallback } - void emitCallback (const FString& emit_signal) + void emitCallback (const FString& emit_signal) const { // Initiate callback for the given signal diff --git a/src/include/final/fmenu.h b/src/include/final/fmenu.h index 89fce8b8..3613694c 100644 --- a/src/include/final/fmenu.h +++ b/src/include/final/fmenu.h @@ -127,7 +127,7 @@ class FMenu : public FWindow, public FMenuList // Callback method void cb_menuitemEnabled(); void cb_menuitemDisabled(); - void cb_menuitemToggled (FMenuItem*) const; + void cb_menuitemToggled (const FMenuItem*) const; private: // Constants diff --git a/src/include/final/fmenubar.h b/src/include/final/fmenubar.h index adcaed0e..40961246 100644 --- a/src/include/final/fmenubar.h +++ b/src/include/final/fmenubar.h @@ -99,7 +99,7 @@ class FMenuBar : public FWindow, public FMenuList void onAccel (FAccelEvent*) override; // Callback methods - void cb_itemDeactivated (FMenuItem*) const; + void cb_itemDeactivated (const FMenuItem*) const; private: // Constants diff --git a/src/include/final/fstatusbar.h b/src/include/final/fstatusbar.h index 566549c5..65ca48e5 100644 --- a/src/include/final/fstatusbar.h +++ b/src/include/final/fstatusbar.h @@ -227,7 +227,7 @@ class FStatusBar : public FWindow void onMouseMove (FMouseEvent*) override; // Callback method - void cb_statuskey_activated (FStatusKey*); + void cb_statuskey_activated (const FStatusKey*); private: // Typedef diff --git a/src/include/final/fstring.h b/src/include/final/fstring.h index c3c5bcf4..3021143c 100644 --- a/src/include/final/fstring.h +++ b/src/include/final/fstring.h @@ -245,7 +245,6 @@ class FString // Constants static constexpr uInt FWDBUFFER = 15; static constexpr uInt INPBUFFER = 200; - static constexpr uInt CHAR_SIZE = sizeof(wchar_t); // bytes per character // Methods void _initLength (std::size_t); diff --git a/src/include/final/fwidget.h b/src/include/final/fwidget.h index dfb27999..b16a488a 100644 --- a/src/include/final/fwidget.h +++ b/src/include/final/fwidget.h @@ -317,10 +317,10 @@ class FWidget : public FVTerm, public FObject virtual bool close(); void clearStatusbarMessage(); template - void addCallback (FString&&, Args&&...); + void addCallback (const FString&, Args&&...); template void delCallback (Args&&...); - void emitCallback (FString&&); + void emitCallback (const FString&); void addAccelerator (FKey); virtual void addAccelerator (FKey, FWidget*); void delAccelerator (); @@ -984,10 +984,9 @@ inline void FWidget::clearStatusbarMessage() //---------------------------------------------------------------------- template -inline void FWidget::addCallback (FString&& cb_signal, Args&&... args) +inline void FWidget::addCallback (const FString& cb_signal, Args&&... args) { - callback_impl.addCallback ( std::forward(cb_signal) - , std::forward(args)... ); + callback_impl.addCallback (cb_signal, std::forward(args)...); } //---------------------------------------------------------------------- @@ -998,9 +997,9 @@ inline void FWidget::delCallback (Args&&... args) } //---------------------------------------------------------------------- -inline void FWidget::emitCallback (FString&& emit_signal) +inline void FWidget::emitCallback (const FString& emit_signal) { - callback_impl.emitCallback(std::forward(emit_signal)); + callback_impl.emitCallback(emit_signal); } //---------------------------------------------------------------------- diff --git a/test/fcallback-test.cpp b/test/fcallback-test.cpp index 65aef882..51d25371 100644 --- a/test/fcallback-test.cpp +++ b/test/fcallback-test.cpp @@ -38,20 +38,20 @@ class Widget { public: template - void addCallback (finalcut::FString&& cb_signal, Args&&... args) + void addCallback (const finalcut::FString& cb_signal, Args&&... args) { - cb.addCallback(std::forward(cb_signal), std::forward(args)...); + cb.addCallback (cb_signal, std::forward(args)...); } template void delCallback (Args&&... args) { - cb.delCallback(std::forward(args)...); + cb.delCallback (std::forward(args)...); } - void emitCallback (finalcut::FString&& emit_signal) + void emitCallback (const finalcut::FString& emit_signal) { - cb.emitCallback(std::forward(emit_signal)); + cb.emitCallback (emit_signal); } private: