From 7424dd74b446395a629e22da66804a6e8d17dbff Mon Sep 17 00:00:00 2001 From: Markus Gans Date: Wed, 31 Jan 2018 23:37:03 +0100 Subject: [PATCH] Refactoring FMessageBox::init and FFileDialog::init --- ChangeLog | 5 ++++- include/final/ffiledialog.h | 7 +++++-- include/final/fmessagebox.h | 7 +++++-- src/ffiledialog.cpp | 41 +++++++++++++++++++++++++------------ src/flabel.cpp | 3 +-- src/fmessagebox.cpp | 29 +++++++++++++++++++------- 6 files changed, 65 insertions(+), 27 deletions(-) diff --git a/ChangeLog b/ChangeLog index 94718174..4bd84fe8 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,8 @@ 2017-01-31 Markus Gans - * Refactoring FSwitch::drawCheckButton and FWidget::redraw + * Refactoring FSwitch::drawCheckButton + * Refactoring FWidget::redraw + * Refactoring FMessageBox::init + * Refactoring FFileDialog::init 2017-01-30 Markus Gans * Refactoring FLabel::draw diff --git a/include/final/ffiledialog.h b/include/final/ffiledialog.h index 0aedb9e7..b003cf3e 100644 --- a/include/final/ffiledialog.h +++ b/include/final/ffiledialog.h @@ -161,13 +161,16 @@ class FFileDialog : public FDialog // Method void init(); + void allocation (int, int); + void deallocation(); + void initCallbacks(); inline bool pattern_match (const char* const, char[]); void clear(); int numOfDirs(); void sortDir(); int readDir(); - void getEntry (struct dirent*); - void followSymLink (dir_entry&); + void getEntry (const char* const, struct dirent*); + void followSymLink (const char* const, dir_entry&); void dirEntriesToList(); int changeDir (const FString&); void printPath (const FString&); diff --git a/include/final/fmessagebox.h b/include/final/fmessagebox.h index 7e241fab..0774be4d 100644 --- a/include/final/fmessagebox.h +++ b/include/final/fmessagebox.h @@ -3,7 +3,7 @@ * * * This file is part of the Final Cut widget toolkit * * * -* Copyright 2014-2017 Markus Gans * +* Copyright 2014-2018 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 * @@ -99,7 +99,7 @@ class FMessageBox : public FDialog , int, int, int , FWidget* = 0 ); // Destructor - ~FMessageBox(); + ~FMessageBox(); // Assignment operator (=) FMessageBox& operator = (const FMessageBox&); @@ -148,6 +148,9 @@ class FMessageBox : public FDialog private: // Methods void init (int, int, int); + void allocation (int, int, int); + void deallocation(); + void initCallbacks(); void calculateDimensions(); virtual void draw(); void resizeButtons(); diff --git a/src/ffiledialog.cpp b/src/ffiledialog.cpp index 067e22b1..a20ebc24 100644 --- a/src/ffiledialog.cpp +++ b/src/ffiledialog.cpp @@ -117,11 +117,7 @@ FFileDialog::FFileDialog ( const FString& dirname //---------------------------------------------------------------------- FFileDialog::~FFileDialog() // destructor { - delete open; - delete cancel; - delete hidden; - delete filebrowser; - delete filename; + deallocation(); clear(); } @@ -410,6 +406,15 @@ void FFileDialog::init() else FDialog::setText("Open file"); + allocation (x, y); // Create widgets + initCallbacks(); + setModal(); + readDir(); +} + +//---------------------------------------------------------------------- +inline void FFileDialog::allocation (int x, int y) +{ try { filename = new FLineEdit(this); @@ -441,7 +446,21 @@ void FFileDialog::init() std::cerr << "not enough memory to alloc " << ex.what() << std::endl; return; } +} +//---------------------------------------------------------------------- +inline void FFileDialog::deallocation() +{ + delete open; + delete cancel; + delete hidden; + delete filebrowser; + delete filename; +} + +//---------------------------------------------------------------------- +void FFileDialog::initCallbacks() +{ filename->addCallback ( "activate", @@ -477,9 +496,6 @@ void FFileDialog::init() "clicked", F_METHOD_CALLBACK (this, &FFileDialog::cb_processOpen) ); - - setModal(); - readDir(); } //---------------------------------------------------------------------- @@ -608,7 +624,7 @@ int FFileDialog::readDir() && std::strcmp(next->d_name, "..") == 0 ) continue; - getEntry(next); + getEntry(dir, next); } else if ( errno != 0 ) { @@ -636,7 +652,7 @@ int FFileDialog::readDir() } //---------------------------------------------------------------------- -void FFileDialog::getEntry (struct dirent* d_entry) +void FFileDialog::getEntry (const char* const dir, struct dirent* d_entry) { const char* const filter = filter_pattern.c_str(); dir_entry entry; @@ -663,7 +679,7 @@ void FFileDialog::getEntry (struct dirent* d_entry) entry.socket = S_ISSOCK (s.st_mode); #endif - followSymLink(entry); + followSymLink (dir, entry); if ( entry.directory ) dir_entries.push_back (entry); @@ -674,7 +690,7 @@ void FFileDialog::getEntry (struct dirent* d_entry) } //---------------------------------------------------------------------- -void FFileDialog::followSymLink (dir_entry& entry) +void FFileDialog::followSymLink (const char* const dir, dir_entry& entry) { if ( ! entry.symbolic_link ) return; // No symbolic link @@ -682,7 +698,6 @@ void FFileDialog::followSymLink (dir_entry& entry) char resolved_path[MAXPATHLEN] = {}; char symLink[MAXPATHLEN] = {}; struct stat sb; - const char* const dir = directory.c_str(); std::strncpy (symLink, dir, sizeof(symLink) - 1); std::strncat ( symLink diff --git a/src/flabel.cpp b/src/flabel.cpp index 2b3f9961..b4fda97a 100644 --- a/src/flabel.cpp +++ b/src/flabel.cpp @@ -522,12 +522,11 @@ void FLabel::drawMultiLine() { uInt y = 0; uInt text_lines = uInt(multiline_text.size()); - + bool hotkey_printed = false; while ( y < text_lines && y < uInt(getHeight()) ) { wchar_t* label_text; - bool hotkey_printed = false; int align_offset, hotkeypos = -1; uInt length = multiline_text[y].getLength(); diff --git a/src/fmessagebox.cpp b/src/fmessagebox.cpp index fe57b4d8..37b26352 100644 --- a/src/fmessagebox.cpp +++ b/src/fmessagebox.cpp @@ -3,7 +3,7 @@ * * * This file is part of the Final Cut widget toolkit * * * -* Copyright 2014-2017 Markus Gans * +* Copyright 2014-2018 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 * @@ -111,8 +111,7 @@ FMessageBox::FMessageBox ( const FString& caption //---------------------------------------------------------------------- FMessageBox::~FMessageBox() // destructor { - for (uInt n = 0; n < num_buttons; n++) - delete button[n]; + deallocation(); } @@ -335,6 +334,16 @@ void FMessageBox::init (int button0, int button1, int button2) button_digit[1] = button1; button_digit[2] = button2; + allocation (button0, button1, button2); + resizeButtons(); + adjustButtons(); + initCallbacks(); + setModal(); +} + +//---------------------------------------------------------------------- +inline void FMessageBox::allocation (int button0, int button1, int button2) +{ try { button[0] = new FButton (this); @@ -367,10 +376,18 @@ void FMessageBox::init (int button0, int button1, int button2) std::cerr << "not enough memory to alloc " << ex.what() << std::endl; return; } +} - resizeButtons(); - adjustButtons(); +//---------------------------------------------------------------------- +inline void FMessageBox::deallocation() +{ + for (uInt n = 0; n < num_buttons; n++) + delete button[n]; +} +//---------------------------------------------------------------------- +inline void FMessageBox::initCallbacks() +{ if ( button_digit[0] != 0 ) { button[0]->addCallback @@ -400,8 +417,6 @@ void FMessageBox::init (int button0, int button1, int button2) static_cast(&button_digit[2]) ); } - - setModal(); } //----------------------------------------------------------------------