Bugfix in FDialog::setSize()

This commit is contained in:
Markus Gans 2020-09-22 01:04:36 +02:00
parent 44d6d8cdb9
commit d10e2888ac
9 changed files with 52 additions and 39 deletions

View File

@ -1,3 +1,7 @@
2020-09-22 Markus Gans <guru.mail@muenster.de>
* Bugfix in FDialog::setSize(): Automatic size adjustment and
simultaneous widget movement are now possible.
2020-09-18 Markus Gans <guru.mail@muenster.de> 2020-09-18 Markus Gans <guru.mail@muenster.de>
* The generic data type FDataPtr is now deprecated and was * The generic data type FDataPtr is now deprecated and was
completely replaced by the template class FData completely replaced by the template class FData

View File

@ -1236,19 +1236,12 @@ class dialogWidget : public FDialog
FDialog::adjustSize(); FDialog::adjustSize();
// Centers the dialog in the terminal // Centers the dialog in the terminal
centerDialog(); centerDialog();
} // Adjust widgets before drawing
adjustWidgets();
void setSize (const FSize& size, bool) override
{
// Calling super class methods setSize() + adjustSize()
FDialog::setSize (size, false);
FDialog::adjustSize();
} }
void draw() override void draw() override
{ {
adjustWidgets(); // Adjust widgets before drawing
// Calling super class method draw() // Calling super class method draw()
FDialog::draw(); FDialog::draw();

View File

@ -312,6 +312,29 @@ void FApplication::setDarkTheme()
setColorTheme<default16ColorDarkTheme>(); setColorTheme<default16ColorDarkTheme>();
} }
//----------------------------------------------------------------------
void FApplication::setLogFile (const FString& filename)
{
auto& log_stream = getStartOptions().logfile_stream;
log_stream.open(filename, std::ofstream::out);
if ( log_stream.is_open() )
{
// Get the global logger object
FLog& log = *FApplication::getLog();
log.setOutputStream(log_stream);
log.enableTimestamp();
log.setLineEnding (finalcut::FLog::LF);
}
else
{
auto ftermdata = FTerm::getFTermData();
ftermdata->setExitMessage ( "Could not open log file \""
+ filename + "\"" );
exit(EXIT_FAILURE);
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FApplication::setKeyboardWidget (FWidget* widget) void FApplication::setKeyboardWidget (FWidget* widget)
{ {
@ -416,29 +439,6 @@ void FApplication::setTerminalEncoding (const FString& enc_str)
} }
} }
//----------------------------------------------------------------------
void FApplication::setLogFile (const FString& filename)
{
auto& log_stream = getStartOptions().logfile_stream;
log_stream.open(filename, std::ofstream::out);
if ( log_stream.is_open() )
{
// Get the global logger object
FLog& log = *FApplication::getLog();
log.setOutputStream(log_stream);
log.enableTimestamp();
log.setLineEnding (finalcut::FLog::LF);
}
else
{
auto ftermdata = FTerm::getFTermData();
ftermdata->setExitMessage ( "Could not open log file \""
+ filename + "\"" );
exit(EXIT_FAILURE);
}
}
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FApplication::cmd_options (const int& argc, char* argv[]) void FApplication::cmd_options (const int& argc, char* argv[])
{ {

View File

@ -323,7 +323,7 @@ void FDialog::setSize (const FSize& size, bool adjust)
const int dw = int(getWidth()) - int(size.getWidth()); const int dw = int(getWidth()) - int(size.getWidth());
const int dh = int(getHeight()) - int(size.getHeight()); const int dh = int(getHeight()) - int(size.getHeight());
const auto& shadow = getShadow(); const auto& shadow = getShadow();
FWindow::setSize (size, adjust); FWindow::setSize (size, false);
// get adjust width and height // get adjust width and height
const std::size_t w = getWidth() + shadow.getWidth(); const std::size_t w = getWidth() + shadow.getWidth();
@ -346,6 +346,9 @@ void FDialog::setSize (const FSize& size, bool adjust)
if ( dh > 0 ) if ( dh > 0 )
restoreVTerm ({x, y + int(h), w + d_width, d_height}); // restore bottom restoreVTerm ({x, y + int(h), w + d_width, d_height}); // restore bottom
if ( adjust ) // Adjust the size after restoreVTerm(),
adjustSize(); // because adjustSize() can also change x and y
redraw(); redraw();
// handle overlaid windows // handle overlaid windows
@ -1069,13 +1072,13 @@ inline void FDialog::drawRestoreSizeButton()
if ( FTerm::isMonochron() ) if ( FTerm::isMonochron() )
{ {
print ('['); print ('[');
print (fc::BlackDownPointingTriangle); // ▼ print (fc::BlackDiamondSuit); // ◆
print (']'); print (']');
} }
else else
{ {
print (' '); print (' ');
print (fc::BlackDownPointingTriangle); // ▼ print (fc::BlackDiamondSuit); // ◆
print (' '); print (' ');
} }
} }

View File

@ -2015,7 +2015,7 @@ void FWidget::destroyColorTheme()
} }
//---------------------------------------------------------------------- //----------------------------------------------------------------------
void FWidget::removeQueuedEvent() void FWidget::removeQueuedEvent() const
{ {
auto app_object = FApplication::getApplicationObject(); auto app_object = FApplication::getApplicationObject();

View File

@ -137,6 +137,7 @@ class FApplication : public FWidget
void initTerminal() override; void initTerminal() override;
static void setDefaultTheme(); static void setDefaultTheme();
static void setDarkTheme(); static void setDarkTheme();
static void setLogFile (const FString&);
static void setKeyboardWidget (FWidget*); static void setKeyboardWidget (FWidget*);
static void closeConfirmationDialog (FWidget*, FCloseEvent*); static void closeConfirmationDialog (FWidget*, FCloseEvent*);
@ -154,7 +155,6 @@ class FApplication : public FWidget
// Methods // Methods
void init(); void init();
static void setTerminalEncoding (const FString&); static void setTerminalEncoding (const FString&);
static void setLogFile (const FString&);
static void cmd_options (const int&, char*[]); static void cmd_options (const int&, char*[]);
static FStartOptions& getStartOptions(); static FStartOptions& getStartOptions();
static void showParameterUsage(); static void showParameterUsage();

View File

@ -452,7 +452,7 @@ class FWidget : public FVTerm, public FObject
static bool isDefaultTheme(); static bool isDefaultTheme();
static void initColorTheme(); static void initColorTheme();
void destroyColorTheme(); void destroyColorTheme();
void removeQueuedEvent(); void removeQueuedEvent() const;
void setStatusbarText (bool) const; void setStatusbarText (bool) const;
// Data members // Data members

View File

@ -1,5 +1,5 @@
/*********************************************************************** /***********************************************************************
* fdata-test.cpp - FCallback unit tests * * fdata-test.cpp - FData unit tests *
* * * *
* This file is part of the FINAL CUT widget toolkit * * This file is part of the FINAL CUT widget toolkit *
* * * *

View File

@ -394,6 +394,19 @@ void FObjectTest::addTest()
CPPUNIT_ASSERT ( child->hasParent() ); CPPUNIT_ASSERT ( child->hasParent() );
CPPUNIT_ASSERT ( child->getParent() == obj ); CPPUNIT_ASSERT ( child->getParent() == obj );
// Switch of the parent by a second addChild
auto obj2 = new finalcut::FObject();
obj2->addChild(child);
CPPUNIT_ASSERT ( child->hasParent() );
CPPUNIT_ASSERT ( ! obj->hasChildren() );
CPPUNIT_ASSERT ( obj->numOfChildren() == 0 );
CPPUNIT_ASSERT ( ! obj->isChild(child) );
CPPUNIT_ASSERT ( child->getParent() != obj );
CPPUNIT_ASSERT ( obj2->hasChildren() );
CPPUNIT_ASSERT ( obj2->numOfChildren() == 1 );
CPPUNIT_ASSERT ( obj2->isChild(child) );
CPPUNIT_ASSERT ( child->getParent() == obj2 );
delete obj; // also deletes the child object delete obj; // also deletes the child object
} }