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:
parent
cc89d51e79
commit
c69a94d955
|
|
@ -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 ){
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
|
|
@ -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 );
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user