Refactoring FMessageBox::init and FFileDialog::init

This commit is contained in:
Markus Gans 2018-01-31 23:37:03 +01:00
parent bce4021f45
commit 7424dd74b4
6 changed files with 65 additions and 27 deletions

View File

@ -1,5 +1,8 @@
2017-01-31 Markus Gans <guru.mail@muenster.de>
* Refactoring FSwitch::drawCheckButton and FWidget::redraw
* Refactoring FSwitch::drawCheckButton
* Refactoring FWidget::redraw
* Refactoring FMessageBox::init
* Refactoring FFileDialog::init
2017-01-30 Markus Gans <guru.mail@muenster.de>
* Refactoring FLabel::draw

View File

@ -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&);

View File

@ -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();

View File

@ -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

View File

@ -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();

View File

@ -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<FWidget::data_ptr>(&button_digit[2])
);
}
setModal();
}
//----------------------------------------------------------------------