fix Widget_connectToggleDependency: apply dependency effect on creation (preferences loading case; only has been working during manual toggling)

Widget_connectToggleDependency: track checkbox graying out to allow chained dependencies
This commit is contained in:
Garux 2023-07-31 10:39:59 +06:00
parent cc89d51e79
commit c69a94d955
4 changed files with 28 additions and 10 deletions

View File

@ -478,11 +478,12 @@ void Dialog::addRadioIcons( QGridLayout* grid, const char* name, int& data, Stri
addRadioIcons( grid, name, icons, IntImportCaller( data ), IntExportCaller( data ) );
}
void Dialog::addTextEntry( QGridLayout* grid, const char* name, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){
QWidget* Dialog::addTextEntry( QGridLayout* grid, const char* name, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){
auto entry = new QLineEdit;
AddTextEntryData( *entry, importViewer, exportViewer );
DialogGrid_packRow( grid, entry, name );
return entry;
}
void Dialog::addPathEntry( QGridLayout* grid, const char* name, bool browse_directory, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){

View File

@ -145,9 +145,9 @@ public:
void addRadio( QGridLayout *grid, const char* name, int& data, StringArrayRange names );
void addRadioIcons( QGridLayout *grid, const char* name, StringArrayRange icons, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
void addRadioIcons( QGridLayout *grid, const char* name, int& data, StringArrayRange icons );
void addTextEntry( QGridLayout *grid, const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
void addEntry( QGridLayout *grid, const char* name, CopiedString& data ){
addTextEntry( grid, name, StringImportCallback( StringImportCaller( data ) ), StringExportCallback( StringExportCaller( data ) ) );
QWidget* addTextEntry( QGridLayout *grid, const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
QWidget* addEntry( QGridLayout *grid, const char* name, CopiedString& data ){
return addTextEntry( grid, name, StringImportCallback( StringImportCaller( data ) ), StringExportCallback( StringExportCaller( data ) ) );
}
void addPathEntry( QGridLayout *grid, const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
void addPathEntry( QGridLayout *grid, const char* name, CopiedString& data, bool directory );

View File

@ -557,11 +557,28 @@ void PreferencesDialog_addSettingsPage( const PreferenceGroupCallback& callback
PreferenceGroupCallbacks_pushBack( g_settingsCallbacks, callback );
}
//! note: doesn't handle dependency on setting \p toggleButton insensitive
void Widget_connectToggleDependency( QWidget* self, QCheckBox* toggleButton ){
QObject::connect( toggleButton, &QCheckBox::stateChanged, [self, toggleButton]( int state ){
class EnabledTracker : public QObject
{
QCheckBox *const m_checkbox;
QWidget *const m_dependent;
public:
EnabledTracker( QCheckBox *checkbox, QWidget *dependent ) : QObject( checkbox ), m_checkbox( checkbox ), m_dependent( dependent ){
m_checkbox->installEventFilter( this );
}
protected:
bool eventFilter( QObject *obj, QEvent *event ) override {
if( event->type() == QEvent::EnabledChange ) {
m_dependent->setEnabled( m_checkbox->checkState() && m_checkbox->isEnabled() );
}
return QObject::eventFilter( obj, event ); // standard event processing
}
};
new EnabledTracker( toggleButton, self ); // track graying out for chained dependencies
QObject::connect( toggleButton, &QCheckBox::stateChanged, [self, toggleButton]( int state ){ // track being checked
self->setEnabled( state && toggleButton->isEnabled() );
} );
self->setEnabled( toggleButton->checkState() && toggleButton->isEnabled() ); // apply dependency effect right away
}
void Widget_connectToggleDependency( QCheckBox* self, QCheckBox* toggleButton ){
Widget_connectToggleDependency( static_cast<QWidget*>( self ), toggleButton );

View File

@ -75,11 +75,11 @@ public:
void appendRadioIcons( const char* name, int& data, StringArrayRange icons ){
m_dialog.addRadioIcons( m_grid, name, data, icons );
}
void appendEntry( const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
m_dialog.addTextEntry( m_grid, name, importCallback, exportCallback );
QWidget* appendEntry( const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
return m_dialog.addTextEntry( m_grid, name, importCallback, exportCallback );
}
void appendEntry( const char* name, CopiedString& data ){
m_dialog.addEntry( m_grid, name, data );
QWidget* appendEntry( const char* name, CopiedString& data ){
return m_dialog.addEntry( m_grid, name, data );
}
void appendPathEntry( const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
m_dialog.addPathEntry( m_grid, name, browse_directory, importCallback, exportCallback );