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 ) );
|
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;
|
auto entry = new QLineEdit;
|
||||||
AddTextEntryData( *entry, importViewer, exportViewer );
|
AddTextEntryData( *entry, importViewer, exportViewer );
|
||||||
|
|
||||||
DialogGrid_packRow( grid, entry, name );
|
DialogGrid_packRow( grid, entry, name );
|
||||||
|
return entry;
|
||||||
}
|
}
|
||||||
|
|
||||||
void Dialog::addPathEntry( QGridLayout* grid, const char* name, bool browse_directory, const StringImportCallback& importViewer, const StringExportCallback& exportViewer ){
|
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 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, StringArrayRange icons, const IntImportCallback& importCallback, const IntExportCallback& exportCallback );
|
||||||
void addRadioIcons( QGridLayout *grid, const char* name, int& data, StringArrayRange icons );
|
void addRadioIcons( QGridLayout *grid, const char* name, int& data, StringArrayRange icons );
|
||||||
void addTextEntry( QGridLayout *grid, const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
|
QWidget* addTextEntry( QGridLayout *grid, const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
|
||||||
void addEntry( QGridLayout *grid, const char* name, CopiedString& data ){
|
QWidget* addEntry( QGridLayout *grid, const char* name, CopiedString& data ){
|
||||||
addTextEntry( grid, name, StringImportCallback( StringImportCaller( data ) ), StringExportCallback( StringExportCaller( 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, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback );
|
||||||
void addPathEntry( QGridLayout *grid, const char* name, CopiedString& data, bool directory );
|
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 );
|
PreferenceGroupCallbacks_pushBack( g_settingsCallbacks, callback );
|
||||||
}
|
}
|
||||||
|
|
||||||
//! note: doesn't handle dependency on setting \p toggleButton insensitive
|
|
||||||
void Widget_connectToggleDependency( QWidget* self, QCheckBox* toggleButton ){
|
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( state && toggleButton->isEnabled() );
|
||||||
} );
|
} );
|
||||||
|
self->setEnabled( toggleButton->checkState() && toggleButton->isEnabled() ); // apply dependency effect right away
|
||||||
}
|
}
|
||||||
void Widget_connectToggleDependency( QCheckBox* self, QCheckBox* toggleButton ){
|
void Widget_connectToggleDependency( QCheckBox* self, QCheckBox* toggleButton ){
|
||||||
Widget_connectToggleDependency( static_cast<QWidget*>( self ), toggleButton );
|
Widget_connectToggleDependency( static_cast<QWidget*>( self ), toggleButton );
|
||||||
|
|
|
||||||
|
|
@ -75,11 +75,11 @@ public:
|
||||||
void appendRadioIcons( const char* name, int& data, StringArrayRange icons ){
|
void appendRadioIcons( const char* name, int& data, StringArrayRange icons ){
|
||||||
m_dialog.addRadioIcons( m_grid, name, data, icons );
|
m_dialog.addRadioIcons( m_grid, name, data, icons );
|
||||||
}
|
}
|
||||||
void appendEntry( const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
|
QWidget* appendEntry( const char* name, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
|
||||||
m_dialog.addTextEntry( m_grid, name, importCallback, exportCallback );
|
return m_dialog.addTextEntry( m_grid, name, importCallback, exportCallback );
|
||||||
}
|
}
|
||||||
void appendEntry( const char* name, CopiedString& data ){
|
QWidget* appendEntry( const char* name, CopiedString& data ){
|
||||||
m_dialog.addEntry( m_grid, name, data );
|
return m_dialog.addEntry( m_grid, name, data );
|
||||||
}
|
}
|
||||||
void appendPathEntry( const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
|
void appendPathEntry( const char* name, bool browse_directory, const StringImportCallback& importCallback, const StringExportCallback& exportCallback ){
|
||||||
m_dialog.addPathEntry( m_grid, name, browse_directory, importCallback, exportCallback );
|
m_dialog.addPathEntry( m_grid, name, browse_directory, importCallback, exportCallback );
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue
Block a user