Skip to content

Commit 33d64dc

Browse files
committed
Use a real toolbar for attribute table dialog
- Fixes style issues on various platforms (esp. OSX) - Allows resizing the window smaller and actions get moved to overflow menu
1 parent fcbaf7f commit 33d64dc

3 files changed

Lines changed: 443 additions & 742 deletions

File tree

src/app/qgsattributetabledialog.cpp

Lines changed: 66 additions & 65 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ void QgsAttributeTableDialog::updateMultiEditButtonState()
7171
if ( mLayer->editFormConfig()->layout() == QgsEditFormConfig::UiFileLayout )
7272
return;
7373

74-
mToggleMultiEditButton->setEnabled( mLayer->isEditable() );
74+
mActionToggleMultiEdit->setEnabled( mLayer->isEditable() );
7575
if ( mLayer->isEditable() && mMainView->view() != QgsDualView::AttributeEditor )
7676
{
77-
mToggleMultiEditButton->setChecked( false );
77+
mActionToggleMultiEdit->setChecked( false );
7878
}
7979
}
8080

@@ -156,7 +156,7 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
156156
connect( mFilterActionMapper, SIGNAL( mapped( QObject* ) ), SLOT( filterColumnChanged( QObject* ) ) );
157157
connect( mFilterQuery, SIGNAL( returnPressed() ), SLOT( filterQueryAccepted() ) );
158158
connect( mActionApplyFilter, SIGNAL( triggered() ), SLOT( filterQueryAccepted() ) );
159-
connect( mSetStyles, SIGNAL( pressed() ), SLOT( openConditionalStyles() ) );
159+
connect( mActionSetStyles, SIGNAL( triggered() ), SLOT( openConditionalStyles() ) );
160160

161161
// info from layer to table
162162
connect( mLayer, SIGNAL( editingStarted() ), this, SLOT( editingToggled() ) );
@@ -188,23 +188,23 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
188188
columnBoxInit();
189189
updateTitle();
190190

191-
mRemoveSelectionButton->setIcon( QgsApplication::getThemeIcon( "/mActionUnselectAttributes.png" ) );
192-
mSelectAllButton->setIcon( QgsApplication::getThemeIcon( "/mActionSelectAll.svg" ) );
193-
mSelectedToTopButton->setIcon( QgsApplication::getThemeIcon( "/mActionSelectedToTop.png" ) );
194-
mCopySelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionCopySelected.png" ) );
195-
mZoomMapToSelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionZoomToSelected.svg" ) );
196-
mPanMapToSelectedRowsButton->setIcon( QgsApplication::getThemeIcon( "/mActionPanToSelected.svg" ) );
197-
mInvertSelectionButton->setIcon( QgsApplication::getThemeIcon( "/mActionInvertSelection.svg" ) );
198-
mToggleEditingButton->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.svg" ) );
199-
mSaveEditsButton->setIcon( QgsApplication::getThemeIcon( "/mActionSaveEdits.svg" ) );
200-
mDeleteSelectedButton->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteSelected.svg" ) );
201-
mOpenFieldCalculator->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.svg" ) );
202-
mAddAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
203-
mRemoveAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );
191+
mActionRemoveSelection->setIcon( QgsApplication::getThemeIcon( "/mActionUnselectAttributes.png" ) );
192+
mActionSelectAll->setIcon( QgsApplication::getThemeIcon( "/mActionSelectAll.svg" ) );
193+
mActionSelectedToTop->setIcon( QgsApplication::getThemeIcon( "/mActionSelectedToTop.png" ) );
194+
mActionCopySelectedRows->setIcon( QgsApplication::getThemeIcon( "/mActionCopySelected.png" ) );
195+
mActionZoomMapToSelectedRows->setIcon( QgsApplication::getThemeIcon( "/mActionZoomToSelected.svg" ) );
196+
mActionPanMapToSelectedRows->setIcon( QgsApplication::getThemeIcon( "/mActionPanToSelected.svg" ) );
197+
mActionInvertSelection->setIcon( QgsApplication::getThemeIcon( "/mActionInvertSelection.svg" ) );
198+
mActionToggleEditing->setIcon( QgsApplication::getThemeIcon( "/mActionToggleEditing.svg" ) );
199+
mActionSaveEdits->setIcon( QgsApplication::getThemeIcon( "/mActionSaveEdits.svg" ) );
200+
mActionDeleteSelected->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteSelected.svg" ) );
201+
mActionOpenFieldCalculator->setIcon( QgsApplication::getThemeIcon( "/mActionCalculateField.svg" ) );
202+
mActionAddAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionNewAttribute.png" ) );
203+
mActionRemoveAttribute->setIcon( QgsApplication::getThemeIcon( "/mActionDeleteAttribute.png" ) );
204204
mTableViewButton->setIcon( QgsApplication::getThemeIcon( "/mActionOpenTable.svg" ) );
205205
mAttributeViewButton->setIcon( QgsApplication::getThemeIcon( "/mActionPropertyItem.png" ) );
206-
mExpressionSelectButton->setIcon( QgsApplication::getThemeIcon( "/mIconExpressionSelect.svg" ) );
207-
mAddFeature->setIcon( QgsApplication::getThemeIcon( "/mActionNewTableRow.png" ) );
206+
mActionExpressionSelect->setIcon( QgsApplication::getThemeIcon( "/mIconExpressionSelect.svg" ) );
207+
mActionAddFeature->setIcon( QgsApplication::getThemeIcon( "/mActionNewTableRow.png" ) );
208208

209209
// toggle editing
210210
bool canChangeAttributes = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
@@ -213,18 +213,19 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
213213
bool canDeleteAttributes = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::DeleteAttributes;
214214
bool canAddFeatures = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures;
215215

216-
mToggleEditingButton->blockSignals( true );
217-
mToggleEditingButton->setCheckable( true );
218-
mToggleEditingButton->setChecked( mLayer->isEditable() );
219-
mToggleEditingButton->setEnabled(( canChangeAttributes || canDeleteFeatures || canAddAttributes || canDeleteAttributes || canAddFeatures ) && !mLayer->readOnly() );
220-
mToggleEditingButton->blockSignals( false );
216+
mActionToggleEditing->blockSignals( true );
217+
mActionToggleEditing->setCheckable( true );
218+
mActionToggleEditing->setChecked( mLayer->isEditable() );
219+
mActionToggleEditing->setEnabled(( canChangeAttributes || canDeleteFeatures || canAddAttributes || canDeleteAttributes || canAddFeatures ) && !mLayer->readOnly() );
220+
mActionToggleEditing->blockSignals( false );
221221

222-
mSaveEditsButton->setEnabled( mToggleEditingButton->isEnabled() && mLayer->isEditable() );
223-
mReloadButton->setEnabled( ! mLayer->isEditable() );
224-
mAddAttribute->setEnabled(( canChangeAttributes || canAddAttributes ) && mLayer->isEditable() );
225-
mDeleteSelectedButton->setEnabled( canDeleteFeatures && mLayer->isEditable() );
226-
mAddFeature->setEnabled( canAddFeatures && mLayer->isEditable() );
227-
mAddFeature->setHidden( !canAddFeatures );
222+
mActionSaveEdits->setEnabled( mActionToggleEditing->isEnabled() && mLayer->isEditable() );
223+
mActionReload->setEnabled( ! mLayer->isEditable() );
224+
mActionAddAttribute->setEnabled(( canChangeAttributes || canAddAttributes ) && mLayer->isEditable() );
225+
mActionDeleteSelected->setEnabled( canDeleteFeatures && mLayer->isEditable() );
226+
mActionAddFeature->setEnabled( canAddFeatures && mLayer->isEditable() );
227+
if ( !canAddFeatures )
228+
mToolbar->removeAction( mActionAddFeature );
228229

229230
mMainViewButtonGroup->setId( mTableViewButton, QgsDualView::AttributeTable );
230231
mMainViewButtonGroup->setId( mAttributeViewButton, QgsDualView::AttributeEditor );
@@ -268,17 +269,17 @@ QgsAttributeTableDialog::QgsAttributeTableDialog( QgsVectorLayer *theLayer, QWid
268269
mMainView->setView( static_cast< QgsDualView::ViewMode >( initialView ) );
269270
mMainViewButtonGroup->button( initialView )->setChecked( true );
270271

271-
connect( mToggleMultiEditButton, SIGNAL( toggled( bool ) ), mMainView, SLOT( setMultiEditEnabled( bool ) ) );
272-
connect( mSearchFormButton, SIGNAL( toggled( bool ) ), mMainView, SLOT( toggleSearchMode( bool ) ) );
272+
connect( mActionToggleMultiEdit, SIGNAL( toggled( bool ) ), mMainView, SLOT( setMultiEditEnabled( bool ) ) );
273+
connect( mActionSearchForm, SIGNAL( toggled( bool ) ), mMainView, SLOT( toggleSearchMode( bool ) ) );
273274
updateMultiEditButtonState();
274275

275276
if ( mLayer->editFormConfig()->layout() == QgsEditFormConfig::UiFileLayout )
276277
{
277278
//not supported with custom UI
278-
mToggleMultiEditButton->setEnabled( false );
279-
mToggleMultiEditButton->setToolTip( tr( "Multiedit is not supported when using custom UI forms" ) );
280-
mSearchFormButton->setEnabled( false );
281-
mSearchFormButton->setToolTip( tr( "Search is not supported when using custom UI forms" ) );
279+
mActionToggleMultiEdit->setEnabled( false );
280+
mActionToggleMultiEdit->setToolTip( tr( "Multiedit is not supported when using custom UI forms" ) );
281+
mActionSearchForm->setEnabled( false );
282+
mActionSearchForm->setToolTip( tr( "Search is not supported when using custom UI forms" ) );
282283
}
283284

284285
editingToggled();
@@ -331,7 +332,7 @@ void QgsAttributeTableDialog::keyPressEvent( QKeyEvent* event )
331332
{
332333
QDialog::keyPressEvent( event );
333334

334-
if (( event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete ) && mDeleteSelectedButton->isEnabled() )
335+
if (( event->key() == Qt::Key_Backspace || event->key() == Qt::Key_Delete ) && mActionDeleteSelected->isEnabled() )
335336
{
336337
QgisApp::instance()->deleteSelected( mLayer, this );
337338
}
@@ -396,7 +397,7 @@ void QgsAttributeTableDialog::updateFieldFromExpressionSelected()
396397
void QgsAttributeTableDialog::viewModeChanged( QgsAttributeForm::Mode mode )
397398
{
398399
if ( mode != QgsAttributeForm::SearchMode )
399-
mSearchFormButton->setChecked( false );
400+
mActionSearchForm->setChecked( false );
400401
}
401402

402403
void QgsAttributeTableDialog::formFilterSet( const QString& filter, QgsAttributeForm::FilterType type )
@@ -590,9 +591,9 @@ void QgsAttributeTableDialog::filterEdited()
590591
mMainView->setFilterMode( QgsAttributeTableFilterModel::ShowEdited );
591592
}
592593

593-
void QgsAttributeTableDialog::on_mSelectedToTopButton_toggled()
594+
void QgsAttributeTableDialog::on_mActionSelectedToTop_toggled( bool checked )
594595
{
595-
if ( mSelectedToTopButton->isChecked() )
596+
if ( checked )
596597
{
597598
mMainView->setSelectedOnTop( true );
598599
}
@@ -602,7 +603,7 @@ void QgsAttributeTableDialog::on_mSelectedToTopButton_toggled()
602603
}
603604
}
604605

605-
void QgsAttributeTableDialog::on_mOpenFieldCalculator_clicked()
606+
void QgsAttributeTableDialog::on_mActionOpenFieldCalculator_triggered()
606607
{
607608
QgsAttributeTableModel* masterModel = mMainView->masterModel();
608609

@@ -618,17 +619,17 @@ void QgsAttributeTableDialog::on_mOpenFieldCalculator_clicked()
618619
}
619620
}
620621

621-
void QgsAttributeTableDialog::on_mSaveEditsButton_clicked()
622+
void QgsAttributeTableDialog::on_mActionSaveEdits_triggered()
622623
{
623624
QgisApp::instance()->saveEdits( mLayer, true, true );
624625
}
625626

626-
void QgsAttributeTableDialog::on_mReloadButton_clicked()
627+
void QgsAttributeTableDialog::on_mActionReload_triggered()
627628
{
628629
mMainView->masterModel()->layer()->dataProvider()->forceReload();
629630
}
630631

631-
void QgsAttributeTableDialog::on_mAddFeature_clicked()
632+
void QgsAttributeTableDialog::on_mActionAddFeature_triggered()
632633
{
633634
if ( !mLayer->isEditable() )
634635
return;
@@ -643,50 +644,50 @@ void QgsAttributeTableDialog::on_mAddFeature_clicked()
643644
}
644645
}
645646

646-
void QgsAttributeTableDialog::on_mExpressionSelectButton_clicked()
647+
void QgsAttributeTableDialog::on_mActionExpressionSelect_triggered()
647648
{
648649
QgsExpressionSelectionDialog* dlg = new QgsExpressionSelectionDialog( mLayer );
649650
dlg->setAttribute( Qt::WA_DeleteOnClose );
650651
dlg->show();
651652
}
652653

653-
void QgsAttributeTableDialog::on_mCopySelectedRowsButton_clicked()
654+
void QgsAttributeTableDialog::on_mActionCopySelectedRows_triggered()
654655
{
655656
QgisApp::instance()->editCopy( mLayer );
656657
}
657658

658-
void QgsAttributeTableDialog::on_mPasteFeatures_clicked()
659+
void QgsAttributeTableDialog::on_mActionPasteFeatures_triggered()
659660
{
660661
QgisApp::instance()->editPaste( mLayer );
661662
}
662663

663664

664-
void QgsAttributeTableDialog::on_mZoomMapToSelectedRowsButton_clicked()
665+
void QgsAttributeTableDialog::on_mActionZoomMapToSelectedRows_triggered()
665666
{
666667
QgisApp::instance()->mapCanvas()->zoomToSelected( mLayer );
667668
}
668669

669-
void QgsAttributeTableDialog::on_mPanMapToSelectedRowsButton_clicked()
670+
void QgsAttributeTableDialog::on_mActionPanMapToSelectedRows_triggered()
670671
{
671672
QgisApp::instance()->mapCanvas()->panToSelected( mLayer );
672673
}
673674

674-
void QgsAttributeTableDialog::on_mInvertSelectionButton_clicked()
675+
void QgsAttributeTableDialog::on_mActionInvertSelection_triggered()
675676
{
676677
mLayer->invertSelection();
677678
}
678679

679-
void QgsAttributeTableDialog::on_mRemoveSelectionButton_clicked()
680+
void QgsAttributeTableDialog::on_mActionRemoveSelection_triggered()
680681
{
681682
mLayer->removeSelection();
682683
}
683684

684-
void QgsAttributeTableDialog::on_mSelectAllButton_clicked()
685+
void QgsAttributeTableDialog::on_mActionSelectAll_triggered()
685686
{
686687
mLayer->selectAll();
687688
}
688689

689-
void QgsAttributeTableDialog::on_mDeleteSelectedButton_clicked()
690+
void QgsAttributeTableDialog::on_mActionDeleteSelected_triggered()
690691
{
691692
QgisApp::instance()->deleteSelected( mLayer, this );
692693
}
@@ -697,13 +698,13 @@ void QgsAttributeTableDialog::on_mMainView_currentChanged( int viewMode )
697698
updateMultiEditButtonState();
698699

699700
if ( viewMode == 0 )
700-
mSearchFormButton->setChecked( false );
701+
mActionSearchForm->setChecked( false );
701702

702703
QSettings s;
703704
s.setValue( "/qgis/attributeTableLastView", static_cast< int >( viewMode ) );
704705
}
705706

706-
void QgsAttributeTableDialog::on_mToggleEditingButton_toggled()
707+
void QgsAttributeTableDialog::on_mActionToggleEditing_toggled( bool )
707708
{
708709
if ( !mLayer )
709710
return;
@@ -716,24 +717,24 @@ void QgsAttributeTableDialog::on_mToggleEditingButton_toggled()
716717

717718
void QgsAttributeTableDialog::editingToggled()
718719
{
719-
mToggleEditingButton->blockSignals( true );
720-
mToggleEditingButton->setChecked( mLayer->isEditable() );
721-
mSaveEditsButton->setEnabled( mLayer->isEditable() );
722-
mReloadButton->setEnabled( ! mLayer->isEditable() );
720+
mActionToggleEditing->blockSignals( true );
721+
mActionToggleEditing->setChecked( mLayer->isEditable() );
722+
mActionSaveEdits->setEnabled( mLayer->isEditable() );
723+
mActionReload->setEnabled( ! mLayer->isEditable() );
723724
updateMultiEditButtonState();
724725
if ( mLayer->isEditable() )
725726
{
726-
mSearchFormButton->setChecked( false );
727+
mActionSearchForm->setChecked( false );
727728
}
728-
mToggleEditingButton->blockSignals( false );
729+
mActionToggleEditing->blockSignals( false );
729730

730731
bool canChangeAttributes = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::ChangeAttributeValues;
731732
bool canDeleteFeatures = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::DeleteFeatures;
732733
bool canAddAttributes = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::AddAttributes;
733734
bool canAddFeatures = mLayer->dataProvider()->capabilities() & QgsVectorDataProvider::AddFeatures;
734-
mAddAttribute->setEnabled(( canChangeAttributes || canAddAttributes ) && mLayer->isEditable() );
735-
mDeleteSelectedButton->setEnabled( canDeleteFeatures && mLayer->isEditable() );
736-
mAddFeature->setEnabled( canAddFeatures && mLayer->isEditable() );
735+
mActionAddAttribute->setEnabled(( canChangeAttributes || canAddAttributes ) && mLayer->isEditable() );
736+
mActionDeleteSelected->setEnabled( canDeleteFeatures && mLayer->isEditable() );
737+
mActionAddFeature->setEnabled( canAddFeatures && mLayer->isEditable() );
737738

738739
mUpdateExpressionBox->setVisible( mLayer->isEditable() );
739740
if ( mLayer->isEditable() && mFieldCombo->currentIndex() == -1 )
@@ -744,7 +745,7 @@ void QgsAttributeTableDialog::editingToggled()
744745
// because model always reflects actual state when returning item flags
745746
}
746747

747-
void QgsAttributeTableDialog::on_mAddAttribute_clicked()
748+
void QgsAttributeTableDialog::on_mActionAddAttribute_triggered()
748749
{
749750
if ( !mLayer )
750751
{
@@ -774,7 +775,7 @@ void QgsAttributeTableDialog::on_mAddAttribute_clicked()
774775
}
775776
}
776777

777-
void QgsAttributeTableDialog::on_mRemoveAttribute_clicked()
778+
void QgsAttributeTableDialog::on_mActionRemoveAttribute_triggered()
778779
{
779780
if ( !mLayer )
780781
{

0 commit comments

Comments
 (0)