2727bool ModelDatabaseDiffForm::low_verbosity {false };
2828std::map<QString, attribs_map> ModelDatabaseDiffForm::config_params;
2929
30+ const QString ModelDatabaseDiffForm::ForceObjsBtnLabel { QT_TR_NOOP (" Force re-creation (%1)" ) };
31+
3032ModelDatabaseDiffForm::ModelDatabaseDiffForm (QWidget *parent, Qt::WindowFlags flags) : BaseConfigWidget (parent)
3133{
3234 setupUi (this );
3335 setWindowFlags (flags);
3436
35- obj_types_wgt = new ObjectTypesListWidget (this , { ObjectType::Column, ObjectType::Constraint,
36- ObjectType::Relationship, ObjectType::Permission });
37+ forced_obj_types_wgt = new ObjectTypesListWidget (this , { /* ObjectType::Column, ObjectType::Constraint, */
38+ ObjectType::Relationship, ObjectType::Permission,
39+ ObjectType::Database, ObjectType::Tag,
40+ ObjectType::Textbox, ObjectType::GenericSql });
41+ forced_obj_types_wgt->setTypesCheckState (Qt::Unchecked);
3742
3843 QWidgetAction *wgt_act = new QWidgetAction (this );
39- wgt_act->setDefaultWidget (obj_types_wgt );
44+ wgt_act->setDefaultWidget (forced_obj_types_wgt );
4045
41- QMenu *obj_types_menu = new QMenu (this );
42- obj_types_menu ->addAction (wgt_act);
43- filter_objs_types_tb ->setMenu (obj_types_menu );
46+ QMenu *forced_obj_types_menu = new QMenu (this );
47+ forced_obj_types_menu ->addAction (wgt_act);
48+ forced_objs_types_tb ->setMenu (forced_obj_types_menu );
4449
4550 src_server_supported = server_supported = true ;
4651 pg_version_alert_frm->setVisible (false );
@@ -142,6 +147,8 @@ ModelDatabaseDiffForm::ModelDatabaseDiffForm(QWidget *parent, Qt::WindowFlags fl
142147 connect (ignore_tb, &QToolButton::toggled, this , &ModelDatabaseDiffForm::filterDiffInfos);
143148 connect (ignore_error_codes_chk, &QCheckBox::toggled, error_codes_edt, &QLineEdit::setEnabled);
144149 connect (src_model_rb, &QRadioButton::toggled, src_model_name_lbl, &QLabel::setEnabled);
150+ connect (src_model_rb, &QRadioButton::toggled, src_model_name_edt, &QLabel::setEnabled);
151+
145152
146153 connect (src_connections_cmb, &QComboBox::activated, this , __slot (this , ModelDatabaseDiffForm::listDatabases));
147154 connect (src_database_cmb, &QComboBox::currentIndexChanged, this , &ModelDatabaseDiffForm::enableDiffMode);
@@ -185,7 +192,17 @@ ModelDatabaseDiffForm::ModelDatabaseDiffForm(QWidget *parent, Qt::WindowFlags fl
185192 GuiUtilsNs::populateObjectsTable (filtered_objs_view, std::vector<attribs_map>());
186193 });
187194
188- connect (force_objs_recreation_chk, &QCheckBox::toggled, filter_objs_types_tb, &QToolButton::setEnabled);
195+ connect (forced_obj_types_wgt, &ObjectTypesListWidget::s_typesCheckStateChanged, this , [this ](Qt::CheckState) {
196+ forced_objs_types_tb->setText (ForceObjsBtnLabel
197+ .arg (forced_obj_types_wgt->
198+ getTypesCountPerCheckState (Qt::Checked)));
199+ });
200+
201+ connect (forced_obj_types_wgt, &ObjectTypesListWidget::s_typeCheckStateChanged, this , [this ](ObjectType, Qt::CheckState) {
202+ forced_objs_types_tb->setText (ForceObjsBtnLabel
203+ .arg (forced_obj_types_wgt->
204+ getTypesCountPerCheckState (Qt::Checked)));
205+ });
189206
190207#ifdef DEMO_VERSION
191208 #warning "DEMO VERSION: forcing ignore errors in diff."
@@ -219,18 +236,19 @@ void ModelDatabaseDiffForm::setModelWidget(ModelWidget *model_wgt)
219236{
220237 if (model_wgt)
221238 {
222- QString filename = QFileInfo (model_wgt->getFilename ()).fileName ();
223- source_model=loaded_model=model_wgt->getDatabaseModel ();
224- src_model_name_lbl->setText (QString (" %1 [%2]" ).arg (source_model->getName ()).arg (filename.isEmpty () ? tr (" not saved" ) : filename));
225- src_model_name_lbl->setToolTip (model_wgt->getFilename ().isEmpty () ? tr (" Model not saved yet" ) : model_wgt->getFilename ());
239+ source_model = loaded_model = model_wgt->getDatabaseModel ();
240+ src_model_name_lbl->setText (source_model->getName ());
241+ src_model_name_edt->setText (QString (" %1" ).arg (model_wgt->getFilename ().isEmpty () ? tr (" (not yet saved to a file)" ) : model_wgt->getFilename ()));
226242 }
227243 else
228244 {
229245 src_model_name_lbl->setText (tr (" (none)" ));
230- src_model_name_lbl-> setToolTip ( " " );
246+ src_model_name_edt-> setText ( tr ( " (none) " ) );
231247 src_database_rb->setChecked (true );
232248 src_model_rb->setEnabled (false );
233249 }
250+
251+ src_model_name_edt->setCursorPosition (0 );
234252}
235253
236254void ModelDatabaseDiffForm::setLowVerbosity (bool value)
@@ -705,9 +723,8 @@ void ModelDatabaseDiffForm::diffModels()
705723 diff_helper->setDiffOption (ModelsDiffHelper::OptPreserveDbName, preserve_db_name_chk->isChecked ());
706724 diff_helper->setDiffOption (ModelsDiffHelper::OptDontDropMissingObjs, dont_drop_missing_objs_chk->isChecked ());
707725 diff_helper->setDiffOption (ModelsDiffHelper::OptDropMissingColsConstr, drop_missing_cols_constr_chk->isChecked ());
708- diff_helper->setDiffOption (ModelsDiffHelper::OptForceRecreation, force_objs_recreation_chk->isChecked ());
709726
710- diff_helper->setForcedRecreateTypes (obj_types_wgt ->getTypesPerCheckState (Qt::Checked));
727+ diff_helper->setForcedRecreateTypes (forced_obj_types_wgt ->getTypesPerCheckState (Qt::Checked));
711728 diff_helper->setModels (source_model, imported_model);
712729
713730 /* If the user has chosen diff between a model and database
@@ -1287,6 +1304,12 @@ void ModelDatabaseDiffForm::selectPreset()
12871304 ignore_error_codes_chk->setChecked (!conf[Attributes::IgnoreErrorCodes].isEmpty ());
12881305 error_codes_edt->setText (conf[Attributes::IgnoreErrorCodes]);
12891306
1307+ forced_obj_types_wgt->blockSignals (true );
1308+ forced_obj_types_wgt->setTypesCheckState (Qt::Unchecked);
1309+ forced_obj_types_wgt->blockSignals (false );
1310+
1311+ forced_obj_types_wgt->setTypeNamesCheckState (conf[Attributes::ForceObjsReCreation].split (' ,' ), Qt::Checked);
1312+
12901313 /* Compatibility with previous versions of diff-presets.conf
12911314 * We configure diff filters only when one of the attributes related
12921315 * to them is present */
@@ -1312,7 +1335,7 @@ void ModelDatabaseDiffForm::togglePresetConfiguration(bool toggle, bool is_edit)
13121335 edit_preset_tb->setVisible (!toggle);
13131336 remove_preset_tb->setVisible (!toggle);
13141337 preset_name_edt->clear ();
1315- save_preset_tb->setEnabled (toggle && (is_edit && presets_cmb->count () > 0 ));
1338+ // save_preset_tb->setEnabled(toggle && (is_edit && presets_cmb->count() > 0));
13161339
13171340 if (is_edit)
13181341 preset_name_edt->setText (presets_cmb->currentText ());
@@ -1399,6 +1422,7 @@ void ModelDatabaseDiffForm::savePreset()
13991422 conf[Attributes::IgnoreImportErrors] = ignore_errors_chk->isChecked () ? Attributes::True : Attributes::False;
14001423 conf[Attributes::IgnoreErrorCodes] = error_codes_edt->text ();
14011424 conf[Attributes::RunInTransaction] = run_in_transaction_chk->isChecked () ? Attributes::True : Attributes::False;
1425+ conf[Attributes::ForceObjsReCreation] = forced_obj_types_wgt->getTypeNamesPerCheckState (Qt::Checked).join (' ,' );
14021426
14031427 conf[Attributes::MatchBySignature] = pd_filter_wgt->isMatchBySignature () ? Attributes::True : Attributes::False;
14041428 conf[Attributes::OnlyMatching] = pd_filter_wgt->isOnlyMatching () ? Attributes::True : Attributes::False;
@@ -1432,8 +1456,9 @@ void ModelDatabaseDiffForm::enablePartialDiff()
14321456
14331457 if (src_model_rb->isChecked ())
14341458 {
1435- pd_input_lbl->setText (QString (" <strong>%1</strong>" ).arg (src_model_name_lbl->text ()));
1436- pd_input_lbl->setToolTip (src_model_name_lbl->toolTip ());
1459+ pd_input_lbl->setText (QString (" <strong>%1 [%2]</strong>" ).arg (src_model_name_lbl->text (),
1460+ QFileInfo (src_model_name_edt->text ()).fileName ()));
1461+ pd_input_lbl->setToolTip (src_model_name_edt->text ());
14371462 pd_input_ico_lbl->setPixmap (QPixmap (GuiUtilsNs::getIconPath (" dbmodel" )));
14381463 }
14391464 else if (src_database_cmb->currentIndex () > 0 )
0 commit comments